slackチャンネルで発言した内容をリアルタイムで取得する方法です。
slackのAPIには以下の3種類があります。
・Web API
・Events API
・RTM API
それぞれの詳細な説明はこちら
今回は「Events API」を使用します。
Events APIの使用例としては
https://api.slack.com/lang/ja-jp/which-api
・ユーザーがメッセージの投稿、チャンネルの作成や変更、ファイルの追加や変更を行った場合にイベントを受信する
・ユーザーがチャンネルにピン、スター、絵文字リアクションを追加したときに、イベントを受信する
・状態をほぼリアルタイムで保持
などに使えるようです。
今回は「slackチャンネルで発言した内容をリアルタイムで取得する」ので、この内容でOK.
#Botアプリの作成
まずは、ここにアクセスして、
- 右上のCreate New App
- ポップアップが出てくるので、「App Name」と「Development Slack Workspace」を指定
- Create App
以下のような画面に行けばOK(画像は、newappという名前でBotを作成しています)
#Botアプリの設定
先ほどの画像の左側(Settings,Featuresなど)がBotに関する設定の場所です。
ここで、Tokenやイベントなどを設定していきます。
##slackの発言を送信する宛先URLの指定
まずは、「Event Subscriptions」にいき、
offになっているボタンを押してonにしてください。
そうすると、「Request URL」を入力する欄に、エンドポイントを入力するんですが、このエンドポイントが正しいものか確認するために、URLが入力された瞬間に、そのURLあてにリクエストが送られます。
その内容を返却することで、「このエンドポイントは正しいもの」という風に認識されます。
例えばPHPならエンドポイントに以下のようなスクリプトを用意してあげれば大丈夫です。
<?php
#file_get_contents('php://input');で送られてきた内容を取得し、echoでそのまま返している
echo file_get_contents('php://input');
以下のようになればOKです。
##Botが発言を取得する範囲の指定
先ほどの画面の下に行くと、以下の場所があります。
ここで、BotのEvents(今回でいう「発言をリアルタイムで取得する」のようなこと)を
「ワークスペース全体」に適応するのか、「Botが招待されたチャンネルだけ」に適応するのか決めます。
今回は「Botが招待されたチャンネルだけ」に適応するので、「Subscribe to Bot Events」の方を設定していきます。
##Botuserの追加
「Subscribe to Bot Events」にある、「Add a bot user」をクリックして、bot userを追加します。
ここでは表示名を設定するようです。入力したら「Add Bot User」をクリック
そうして、もう一度「Event Subscriptions」に行き、以下のようになっていることを確認してください。
##イベントの追加
先ほどの画面で「Add Bot User Event」でBotができるイベントを設定していきます。
今回は
・「(Botが招待された)パブリックチャンネルに送られたメッセージを検知」
・「(Botが招待された)プライベートチャンネルに送られたメッセージを検知」
というように設定しました。
他にも色々あるので、興味のある方は見てみてください。
##ワークスペース内のチャンネルにBotを招待できるようにする
「OAuth & Permissions」にいき、「Install App to Workspace」をして、ワークスペース内のチャンネルにBotを招待できるようにします。
##チャンネルでBotを招待する
Botをインストールしたいチャンネルにいき、右上の設定マーク(?)を押して,「アプリを追加」から、先ほど作成したアプリを追加します。
以上で、設定は完了です。
#確認する
試しに、以下のようなスクリプトを用意し、リアルタイムで送られいる内容を取得できているか監視してみましょう。
<?php
error_log(file_get_contents('php://input'),3,"/var/log/debug.log");
以下のコマンドで、
/var/log/debug.logをリアルタイムで表示して確認してみてください。
$ tail -f /var/log/debug.log