見出し画像

Cloud FunctionsとGoogle Knowledge Graph APIを使ってSlackのスラッシュコマンドを作成

はじめに

GCPのCloud FunctionsとGoogle Knowledge Graph Search APIを使って、Slackのスラッシュコマンドを作成してみたいと思います。

目標は「/kg <検索クエリ>」と打ったときに検索結果を表示することです。下記は「/kg cat」と入力したときの結果です。Cat:Animal部分のリンクをクリックするとhttps://en.wikipedia.org/wiki/Cat に遷移します。

スクリーンショット 2020-06-06 20.33.19

Cloud Functionsの関数はGoogleのチュートリアルで用意されているリポジトリをcloneするだけなので、流れを把握するにはとっても良いと思います。

Google Knowledge Graph APIとは

Google Knowledge Graphの情報を検索できるようAPI化したものです。

Google Knowledge Graph(ナレッジグラフ)とは、ある単語に対して要約を表示してくれ、検索体験を向上させるためのGoogleのサービスです。

日本語にも対応していますが、基本的に英語で結果が返ってきます。(日本語で返ってくる設定をご存知の方がいたら教えて下さい。)

スクリーンショット 2020-06-06 20.41.25

Google Knowledge Graphを使うにはGCP上で「有効」にしてください。

Cloud Functionsについて

関数をデプロイすることでHTTP エンドポイントが一瞬で作成できるサーバーレスのサービスです。

(HTTP リクエスト以外にもGCPの他サービスを使って実行もできるらしいですが、ちゃんと調べられていません。本記事ではHTTP リクエスト経由での実行を想定しています。)

前提

下記はすでにある想定で説明します。

・Slack Appsの準備
・GCPの登録
・gcloudの初期設定(gcloudコマンドが使えればOK)
・Node.jsの実行環境

Slack Appsは下記リンクの「Create New App」からAppを作ります。

データの流れ

スクリーンショット 2020-06-06 21.02.09

1:ユーザーが「/kg <検索文字>」と打つ
2:SlackがCloud Functionsに設定した関数のエンドポイントに送信
3:Cloud Functionsの関数が検索文字をKnowledge Graph API に送信
4:Knowledge Graph API が検索結果を返す
5:Cloud Functions でレスポンスを Slack用のフォーマットに変更
6:Cloud Functions が Slackにメッセージを送信
7:ユーザーが見れる

サンプルリポジトリをクローン


上記のサンプルをクローンして、slackディレクトリに移動します。

# クローン
git clone https://github.com/GoogleCloudPlatform/nodejs-docs-samples.git
# 移動
cd nodejs-docs-samples/functions/slack/

APIキーを用意

Cloud Functionsをデプロイするために必要な2つのAPIキーを用意します。

①YOUR_SLACK_SIGNING_SECRET(Slack用)

作成したSlack AppのBasic Informationに遷移し、Signing Secretをコピー

スクリーンショット 2020-06-06 21.20.34

②YOUR_KG_API_KEY(GCP用)

Google Cloud Console の 認証情報 ページで、[認証情報を作成] ボタンをクリックして [API キー] を選択します。

スクリーンショット 2020-06-06 21.24.49

このキーは、Knowledge Graph API にアクセスするときに使用します。

Cloud Functionsのデプロイ

先程用意した2つのAPIキーを使ってクローンしたサンプルリポジトリのFunctionsをデプロイします。

YOUR_SLACK_SIGNING_SECRETYOUR_KG_API_KEYには先程のキーを指定してください。

gcloud functions deploy kgSearch --runtime nodejs8 --trigger-http --set-env-vars "SLACK_SECRET=YOUR_SLACK_SIGNING_SECRET,KG_API_KEY=YOUR_KG_API_KEY" --allow-unauthenticated

デプロイが完了すると、エンドポイントがターミナルに表示されるのでコピーしておいてください。(オレンジ部分はGCPのプロジェクトid)
スクリーンショット 2020-06-06 21.32.19

スラッシュ コマンドの作成

Slack App画面からSlash Commandを有効にしておいてください。

スクリーンショット 2020-06-06 21.36.37

Slash Commandsページから「Create New Command」を選択します。

スクリーンショット 2020-06-06 21.37.46

Commandは「/kg」とし、Request URLには先程Cloud Functionsデプロイ後に表示されたエンドポイントを入力してください。

スクリーンショット 2020-06-06 21.40.16

実行

必要な設定は以上です。Slackで下記コマンドを実行してみてください。

/kg giraffe

うまく行けばこのように返ってきます。

スクリーンショット 2020-06-06 21.42.50

うまく行かない場合はログを確認してみてください

gcloud functions logs read --limit 100

課金されないために

課金されないために不要ならプロジェクトは削除してください。

・Cloud Console で [リソースの管理] ページに移動

プロジェクトごと削除してください。
※プロジェクト内のすべてのものが削除されます。
※カスタム プロジェクト ID が失われます。

スクリーンショット 2020-06-06 21.47.57

参考

上記は公式のチュートリアルを見ながら挑戦しました。すごく分かりやすかったです〜。

GCPの本読んだことないから読んでみようかな👀


この記事が気に入ったら、サポートをしてみませんか?
気軽にクリエイターの支援と、記事のオススメができます!
note.user.nickname || note.user.urlname

息抜きのコーヒー代にさせて頂きます!!♡

ありがとうございます〜!
9
2年くらいWebエンジニアしてます。勉強したことをつらるページ₍ ᐢ. ̫ .ᐢ ₎ たまにもくもく会やったり→https://prog-9.connpass.com/ 趣味はお笑いラジオと西洋音楽と西洋美術👩‍🎨