新しいことにはウェルカム

技術 | 電子工作 | ガジェット | ゲーム のメモ書き

Slack Bot(ボット)の作り方メモ

Slack API の使い方を調べたついでに、もう少し踏み込んでBotも作ってみたので、その手順メモです。

当初、APIの機能拡張くらいな感じで作れるのかなぁ思ってたのですが、Botの作成はAPIの時ほど楽ではなかったです…。

長くなったので、ここではSlack Botの概要とGUI操作を中心に記載し、実装は別記事に分けました。

www.kwbtblog.com

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の時同様、まずアプリを作成します。

1アプリに対して、Bot・APIトークン・イベント通知用URL などが紐付きます。

Botユーザーの作成

  • [アプリ設定ページ]-[Bot Users]

常にボットから入力が受け付けられるよう[Always Show My Bot as Online]のチェックを「On」にします。

Slack Bot(ボット)の作り方メモ

イベントを受けるURLの登録

この時点で、URLを準備しておく必要があります。URLが実在し、Slackからの応答に答えられるように実装されている必要があります。

  • [アプリ設定ページ]-[Event Subscriptions]ページに移動
  • [Enable Events]のチェックを「On」にします。
  • [Request URL]にイベントを受ける「URL」を登録します。

Slack Bot(ボット)の作り方メモ

URLを入力すると、SlackからそのURLに対して、「POST」で下記のようなデータが送られてきます。

{
    "token": "xxxx",
    "challenge": "xxxx",
    "type": "url_verification"
}

tokenがアプリの「Verification Token」と同じかチェックして、同じならば送られてきた「challenge」を下記のような応答で返します。

{
    "challenge": "xxxx",
}

「Verification Token」はアプリ設定ページの[Basic Information]から取得できます。

Slack Bot(ボット)の作り方メモ

すると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]で事足りるかと思います。

Slack Bot(ボット)の作り方メモ

アプリのインストール

以上で、Botへアクションが発生した時、URLへイベントが送られる設定が完了します。

実際にイベントを受けるには、アプリをワークスペースにインストールします。

  • [アプリの設定ページ]-[Install App]-[Install App to Workspace]

でインストールします。ここはSlack APIの時と同じです。

Slack Bot(ボット)の作り方メモ

するとSlack APIの時と同様、ユーザーTokenと、ボットTokenが発行されます。

Slack Bot(ボット)の作り方メモ

Botからイベントを受け取って、返信等、何かSlackに対して操作をする時は、これらのTokenを使ってSlack APIを呼び出します。

認証・応答

以上で、SlackでBotへアクションがあった時、実際にBotからURLにイベントが送信されるようになります。

認証方法

イベントの「Verification Token」と「api_app_id」が、アプリに記載されているものと同じかどうかを毎回チェックして、認証とします。

「Verification Token」と「api_app_id」は[アプリ設定ページ]-[Basic Information]-[App Credentials]に記載されています。

Slack Bot(ボット)の作り方メモ

応答

前述のとおり、URLにイベントが届けられた時は、3秒以内にコード200で応答する必要があります。

なので、何かしらのイベントを受信したら、内容に関わらず、コード200で即答するようにしておいた方がいいでしょう。

以上が、Slack Bot(ボット)の概要とGUI操作のメモになります。

実装については別記事にしました。

www.kwbtblog.com

Slack APIも別記事にしました。

www.kwbtblog.com

感想

Slackのサイトは、パット見おしゃれに見えるけど、相変わらず分かりにくい…。