Slack API の使い方を調べたついでに、もう少し踏み込んでBotも作ってみたので、その手順メモです。
当初、APIの機能拡張くらいな感じで作れるのかなぁ思ってたのですが、Botの作成はAPIの時ほど楽ではなかったです…。
長くなったので、ここではSlack Botの概要とGUI操作を中心に記載し、実装は別記事に分けました。
Slack Bot(ボット)とは?
Slackには、外部からSlackを操作するAPI機能だけではなく、ユーザーのメッセージ投稿などのアクションをキャッチして、それをSlackから外部に通知してくれる機能があります。
その、ユーザーのアクションの受け取り窓口となるのが、Slack Botです。
SlackにBotを作成すると、Botは1ユーザーとしてSlack上に表示されます。そして、そのBotに対してメッセージを送信すると、事前に登録しておいたURLに、そのメッセージに関する情報がイベントとしてSlackから送られます。
そして、URLに届いたイベント情報を元に、Bot開発者が任意の処理を行なうことにより、Botに命令して何か外部のサービスを起動したり、Botにメッセージを入力してBotからユーザーに返答させたりできるようになります。
つまり、Slack Botとは、Webhookのトリガー入力窓口とも言えます。
Bot作成に必要なもの
Botからのイベント受信用のURLが必要で、Bot開発者が用意する必要があります。もうこれだけで面倒くさいですね…。
それに加え、URLでは下記の挙動を実装をしておく必要があります。
- URL登録時に、URLが正式なものかチェックするためのメッセージがSlackから届くので、それに返答する仕組み
- Botからイベントを受信したら、3秒以内に返答する仕組み
届いたイベントに、3秒以内に返答できないと、エラーとみなされてリトライされてしまいます。なので、イベントを受信したらまず返答だけして、実際の処理は後から行うといったような、応答と実タスクを分離する実装が必要になってきます。
う~ん…面倒くさい…。マニュアル読んでて心折れそうになりました…。
しかし、ここでやめると絶対に忘れてしまうので、とりあえず簡単なBotだけ作って、Botの雛形として残すことにしました。
手順
アプリの作成
Slack APIの時同様、まずアプリを作成します。
- https://api.slack.com/
- [Slack API Page]-[Building Slack apps]-[Create a Slack app]
1アプリに対して、Bot・APIトークン・イベント通知用URL などが紐付きます。
Botユーザーの作成
- [アプリ設定ページ]-[Bot Users]
常にボットから入力が受け付けられるよう[Always Show My Bot as Online]のチェックを「On」にします。
イベントを受けるURLの登録
この時点で、URLを準備しておく必要があります。URLが実在し、Slackからの応答に答えられるように実装されている必要があります。
- [アプリ設定ページ]-[Event Subscriptions]ページに移動
- [Enable Events]のチェックを「On」にします。
- [Request URL]にイベントを受ける「URL」を登録します。
URLを入力すると、SlackからそのURLに対して、「POST」で下記のようなデータが送られてきます。
{ "token": "xxxx", "challenge": "xxxx", "type": "url_verification" }
tokenがアプリの「Verification Token」と同じかチェックして、同じならば送られてきた「challenge」を下記のような応答で返します。
{ "challenge": "xxxx", }
「Verification Token」はアプリ設定ページの[Basic Information]から取得できます。
するとSlackに、URLが正しいものとして登録され、どんなイベントが発生したらそのURLに送信するかを登録できるようになります。
同じURLにイベントが届き、イベントの場合は「type」が「event_callback」となるので、送られてきた「type」を見て、URL確認のメッセージか、イベントメッセージかを識別する必要があります。
受けるイベントの登録
URLが認証されたので、次に、Botからどういったイベントを受けるかを登録します。
[Subscribe to Workspace Event]はワークスペース全体からのイベント。[Subscribe to Bot Events]はBotへの発言等、Botに関するイベントです。
大抵は[Subscribe to Bot Events]で事足りるかと思います。
アプリのインストール
以上で、Botへアクションが発生した時、URLへイベントが送られる設定が完了します。
実際にイベントを受けるには、アプリをワークスペースにインストールします。
- [アプリの設定ページ]-[Install App]-[Install App to Workspace]
でインストールします。ここはSlack APIの時と同じです。
するとSlack APIの時と同様、ユーザーTokenと、ボットTokenが発行されます。
Botからイベントを受け取って、返信等、何かSlackに対して操作をする時は、これらのTokenを使ってSlack APIを呼び出します。
認証・応答
以上で、SlackでBotへアクションがあった時、実際にBotからURLにイベントが送信されるようになります。
認証方法
イベントの「Verification Token」と「api_app_id」が、アプリに記載されているものと同じかどうかを毎回チェックして、認証とします。
「Verification Token」と「api_app_id」は[アプリ設定ページ]-[Basic Information]-[App Credentials]に記載されています。
応答
前述のとおり、URLにイベントが届けられた時は、3秒以内にコード200で応答する必要があります。
なので、何かしらのイベントを受信したら、内容に関わらず、コード200で即答するようにしておいた方がいいでしょう。
以上が、Slack Bot(ボット)の概要とGUI操作のメモになります。
実装については別記事にしました。
Slack APIも別記事にしました。
感想
Slackのサイトは、パット見おしゃれに見えるけど、相変わらず分かりにくい…。