🤖
社内文書に関するSlack ChatBot 1/4回 (Slack API 編)
Event Subscriptionを設定することにより、ユーザがメッセージを送信したり、リアクションをした場合など、様々なSlack内のイベントを受け取ることができます。今回のChatBotでは、ユーザからメッセージを受け取り、それに対して回答するようにしたいため、設定する必要があります。
Event Subscriptionに移動し、Enable EventsをOnにすると、以下のように、Slack内のイベントを受け取るURLが必要となります。
![](https://s3.ap-northeast-1.amazonaws.com/wraptas-prod/elcamy/d240bc4d-fdab-436d-a1c3-a7f9ae5561dd/c0a8f8a1bb9910a84d2c242af3b0cebd.png)
URLの準備
Slackの公式ドキュメントページのRequest URL Configuration & Verificationを見ると、Slackからのイベントを受け取れるようにするには、初回のVerificationのリクエストに応答する必要があります。初回のリクエストは以下のようになります。
この初回リクエストを受け取ったとき、HTTP 200と"challenge"の内容をそのまま返すことで、Verificationが完了します。
今回はSlackからのイベントをGoogle Cloud Functionsで受け取るようにしたいため、Functionを作成します。そして、Verificationが完了するためのコードを書いていきます。
Google Cloud Functionsを開き、CREATE FUNCTIONをクリックすると以下のページが表示されます。
![](https://s3.ap-northeast-1.amazonaws.com/wraptas-prod/elcamy/987b64d3-da17-4c26-b64a-708c56cbb7e6/55d6e04d5b774f344541e7dd90269a0e.png)
次に、Functionの設定をしていきます。このFunctionは後々、SlackからのメッセージをPub/Subにパブリッシュする役割をするので、Function nameはslack-chatbot-pubとしておきます。また、Regionはasia-northeast1(Tokyo)にし、AuthenticationはAllow unauthenticated invocationsを選択します。
Authenticationについての注意
AuthenticationはデフォルトではRequire authenticationとなっています。ここを変えずにデプロイしてしまうと、Slackからのリクエストが受け取れず、Verificationを完了することができません。
私は、ここを変えるのを忘れていて、Verificationの部分で躓きました。なので、Allow unauthenticated invocationsに変えるのを忘れないようにしましょう。
設定が完了したらNEXTをクリックし、コードを書いていきます。今回はPython3.10を使用してコードを書いていきます。初回リクエストを受け取ったとき、HTTP 200と"challenge"の内容をそのまま返すようにすればよいので、以下のようにmain.pyを書きます。
そして、Entry pointは今回使用する関数である、verifyにします。requirement.txtは特に変更する必要はありません。すべて完了したら、DEPLOYをクリックします。
![](https://s3.ap-northeast-1.amazonaws.com/wraptas-prod/elcamy/089c6784-f60f-43ba-ab63-a70585692d73/3514103756f35f863f65462f4c92df0b.png)
デプロイが完了すると、URLが得られるので、コピーします。
そしてこのURLをSlackのEvent SubscriptionのRequest URLに貼り付けます。Verificationが完了すると、Verifiedという文字が表示されます。
![](https://s3.ap-northeast-1.amazonaws.com/wraptas-prod/elcamy/628e0f8e-6836-47d4-9a0c-05eb2663f7de/7f1176ca54b8be0c71d8f5ed326ad001.png)
最後に、ChatBotが受け取れるイベントの権限を設定します。下にスクロールすると、Subscribe to bot eventsという項目があります。ここで以下のように権限を設定します。
![](https://s3.ap-northeast-1.amazonaws.com/wraptas-prod/elcamy/23b93e0d-41a2-4f77-ac6b-351417be5b6f/de38c35709082863386bc9f3c68c7c85.png)
これで、Event Subscriptionの設定は完了です。