ElcamyTECH
Articles
GoogleCloud

社内文書に関するSlack ChatBot 1/4回 (Slack API 編)

TechGoogleCloudGoogle CloudCloud FunctionsOpenAIChatGPTPythonPythonCloud Storage生成AI2023/06/27

はじめに

この記事では、社内のルールに関して質問をすると答えてくれるSlack ChatBotを開発していきます。Slack APIの取得から、GCPを用いた実装まで説明していきますが、1つの記事に纏めるのは難しいので、記事を何回かに分けたいと思います。 開発の流れは以下のようになります。

メモ

開発の流れ

  1. Slack APIの取得と設定
  2. Cloud Functionsの実装①
  3. Pub/Subの設定
  4. Cloud Functionsの実装②

今回は1. Slack APIの取得と設定について説明していきます。Slack APIを取得し、Botの作成や設定、チャンネルの追加まで解説します。

ChatBotの構造

今回開発するChatBotは以下のような構造となります。

image

Slack APIの取得と設定

Slack APIの取得と設定方法は以下のようになります。

メモ

Slack APIの取得と設定の方法

  1. Appの作成
  2. ChatBotに必要な権限の設定
  3. ChatBotの設定
  4. Event Subscriptionの設定

1. Appの作成

まず以下のサイトにアクセスします。

https://api.slack.com/apps

そして、Create New Appをクリックします。

image

次にFrom scratchをクリックします。

image

最後に、App Nameを入力し、workspaceを選択します。そして、Creat Appをクリックします。

image

以上でAppを作成することができます!

2. ChatBotに必要な権限の設定

OAuth & permissionsに移動し、下にスクロールすると、Scopesという項目があります。この項目内にBot Token Scopesという項目があるので、ここでChatBotに必要な権限を追加します。 以下のように権限を追加しました。

image

3. ChatBotの設定

Basic Informationに移動し、下にスクロールすると、Display Informationという項目があります。この項目で、ChatBotの説明やアイコンを設定します。

image

ChatBotの設定が完了したら、ChatBotをWorkspaceにインストールします。OAuth & permissionsに移動し、下にスクロールして、Install to Workspaceをクリックします。

image

4. Event Subscriptionの設定

Event Subscriptionを設定することにより、ユーザがメッセージを送信したり、リアクションをした場合など、様々なSlack内のイベントを受け取ることができます。今回のChatBotでは、ユーザからメッセージを受け取り、それに対して回答するようにしたいため、設定する必要があります。

Event Subscriptionに移動し、Enable EventsをOnにすると、以下のように、Slack内のイベントを受け取るURLが必要となります。

image

URLの準備

Slackの公式ドキュメントページのRequest URL Configuration & Verificationを見ると、Slackからのイベントを受け取れるようにするには、初回のVerificationのリクエストに応答する必要があります。初回のリクエストは以下のようになります。

{
    "token": "Jhj5dZrVaK7ZwHHjRyZWjbDl",
    "challenge": "3eZbrw1aBm2rZgRNFdxV2595E9CY3gmdALWMmHkvFXO7tYXAYM8P",
    "type": "url_verification"
}

この初回リクエストを受け取ったとき、HTTP 200と"challenge"の内容をそのまま返すことで、Verificationが完了します。

今回はSlackからのイベントをGoogle Cloud Functionsで受け取るようにしたいため、Functionを作成します。そして、Verificationが完了するためのコードを書いていきます。 Google Cloud Functionsを開き、CREATE FUNCTIONをクリックすると以下のページが表示されます。

image

次に、Functionの設定をしていきます。このFunctionは後々、SlackからのメッセージをPub/Subにパブリッシュする役割をするので、Function nameはslack-chatbot-pubとしておきます。また、Regionはasia-northeast1(Tokyo)にし、AuthenticationAllow unauthenticated invocationsを選択します。

メモ

Authenticationについての注意 AuthenticationはデフォルトではRequire authenticationとなっています。ここを変えずにデプロイしてしまうと、Slackからのリクエストが受け取れず、Verificationを完了することができません。 私は、ここを変えるのを忘れていて、Verificationの部分で躓きました。なので、Allow unauthenticated invocationsに変えるのを忘れないようにしましょう。

設定が完了したらNEXTをクリックし、コードを書いていきます。今回はPython3.10を使用してコードを書いていきます。初回リクエストを受け取ったとき、HTTP 200と"challenge"の内容をそのまま返すようにすればよいので、以下のようにmain.pyを書きます。

import functions_framework
import json
 
 
@functions_framework.http
def verify(param):
  if param.get_json().get('type') == 'url_verification':
    body = json.dumps({'challenge': param.get_json()['challenge']})
    headers = {'Content-Type': 'application/json'}
    return (body, 200, headers)

そして、Entry pointは今回使用する関数である、verifyにします。requirement.txtは特に変更する必要はありません。すべて完了したら、DEPLOYをクリックします。

image

デプロイが完了すると、URLが得られるので、コピーします。 そしてこのURLをSlackのEvent SubscriptionRequest URLに貼り付けます。Verificationが完了すると、Verifiedという文字が表示されます。

image

最後に、ChatBotが受け取れるイベントの権限を設定します。下にスクロールすると、Subscribe to bot eventsという項目があります。ここで以下のように権限を設定します。

image

これで、Event Subscriptionの設定は完了です。

まとめ

今回は1. Slack APIの取得と設定について説明していきました。Slack APIを取得し、Botの作成や設定、Event Subscriptionの設定を行いました。今回はChatBot実装の準備でしたが、次回からChatBotの実装に移っていきます。

参考

https://api.slack.com/apis/connections/events-api#the-events-api__subscribing-to-event-types__events-api-request-urls__request-url-configuration--verification

https://zenn.dev/mokomoka/articles/6d281d27aa344e

https://www.softbank.jp/biz/blog/cloud-technology/articles/202301/deploy-a-slack-using-cf/

https://kawaken.dev/posts/20220402_create-bots-using-cloud-functions-and-slack-event-api-until-verification/

https://note.com/dd_techblog/n/n7c8c27123028

https://sqripts.com/2023/03/09/38237/

関連記事

Elcamyについて

AI・データエンジニアリング・クラウドを中心に、技術で事業課題を解決しています。 お気軽にご相談ください。