いまさらCloud Functionを使ってSlack commandを実装してみた


overview.

ただただ公式のチュートリアルをやってみただけの記事です。
Google Cloud PlatformのCloud FunctionsとGoogle Knowledge Graph Search APIを使ってSlush ComomandをPythonでデプロイしてみる。
SlackのSlush Commandを使ってGoogleのKnowledge Graph(人名とかを検索すると右側にwikiとかの要約が出てくるアレ)を取得できるようにする。
Slackで/kg hogeとポストするとhogeをGoogle検索しKnowledge Graphを結果として表示する。<- これを目指す

前提条件と準備

  • GCPプロジェクトの課金が有効になっている(支払いアカウントに紐づいている)
  • GCPのメニューからCloud Functionを有効化
  • GCPメニューのAPIダッシュボードからGoogle Knowledge Graph Search APIを有効にしておく
    • GCPメニュー > APIとサービス > ライブラリから
    • 認証情報 > 認証情報の作成 > APIキーでAPI keyを発行
    • このAPI keyをメモしておく
  • Slackにスラッシュコマンドインテグレーションを追加
    • Slackのメニュー > App管理 > カスタムインテグレーション > Slackに追加
    • コマンドを選択するの窓に/kgと入力してスラッシュコマンドインテグレーションを追加する
    • 遷移した画面でトークンの欄に表示されているトークンをメモしておく
    • URLは後で入力するので、ブラウザの画面はそのままにしてCloudFunctionの設定に移る

Cloud Functionの設定

右上のアイコンからCloud Shell(GCPを操作するCLI)を起動。

プロンプトが立ちががったら

CloudShell
git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git

をたたいてサンプルアプリのコードが入っているリポジトリをcloneする。

CloudShell
cd python-docs-samples/functions/slack/

でSlackのサンプルアプリのディレクトリへ移動。

中にあるconfig.jsonを編集して発行したAPI keyとSlush Commandのトークンを記入する。
編集はCloud Shellの右上のペンのアイコン(エディタを立ち上げる)を押すと別タブが立ち上がりwebエディタが起動するので、config.jsonにAPI keyとSlush Commandのトークンを記入。

config.json
{
"SLACK_TOKEN": "YOUR_SLACK_TOKEN",
"KG_API_KEY": "YOUR_KG_API_KEY",
}

config.jsonを編集したらpython-docs-samples/functions/slack/

CloudShell
gcloud functions deploy kg_search --runtime python37 --trigger-http

を実行するとサンプルコードとconfigの設定を元にSlackからのコマンドによるリクエストを受け取るエンドポイントと、リクエストを処理してSlackに送り返す関数をデプロイしてくれる。

完了するとGCPメニュー > Cloud Function**にkg_searchという名前の関数が作成されている。

スラッシュコマンドインテグレーションの設定

準備で入力を保留していたインテグレーションの設定のURLの欄に下記のエンドポイントURL(コマンドを送信するURL)

https://YOUR_REGION-YOUR_PROJECT_ID.cloudfunctions.net/kg_search

を入力。YOUR_REGIONはGCPのリージョン、YOUR_PROJECT_IDはGCPのプロジェクトIDに置き換え。
kg_searchはデプロイしたCloud Functionの名前。(サンプルコードをそのままビルドしたならこの名前になるはず)
このエンドポイントURLはCloud Functionに作成された関数名をクリック > 編集のURLのところに記載されているURLと同じ。

あとはコマンドの名前やアイコンなどは適当に設定してインテグレーションの保存

コマンドを実行してみる

試しに/kg 安倍晋三と入力して実行してみる。

無事安倍総理のKnowledge Graph検索結果が返ってきました!