##概要
Slack apiのOutgoing Webhooksを使って投稿を取得して、それに反応するbotを作る。
##Outgoing Webhooksの設定
Outgoing Webhooksは、特定の投稿があった時、SlackからPOSTでその投稿データを送信し、それに対して特定の形式でjsonでレスポンスを返すと投稿してくれるというもの。
###Integrationの設定
https://your-team.slack.com/apps/manage/custom-integrations
この辺から新しくIntegrationを作成。
- Channel :投稿を取得するチャンネル
- Trigger Word(s) :Outgoing Webhooksを呼び出す単語
- URL(s) :POST送信先になるURL
- Customize Name :レスポンスを返す際の名前
- Customize Icon :レスポンスを返す際のアイコン
それぞれ設定。
TokenはPOST送信される際にこのIntegrationから送信されたかを確認するためのトークン。
##受信側
POSTに対してJSONで返せば良いので、基本的にApiを作るような感覚で実装できる。
POST送信されるデータ形式は以下
token=XXXXXXXXXXXXXXXXXX
team_id=T0001
team_domain=example
channel_id=C2147483705
channel_name=test
timestamp=1355517523.000005
user_id=U2147483697
user_name=Steve
text=googlebot: What is the air-speed velocity of an unladen swallow?
trigger_word=googlebot:
ごくごく簡単に返事をするだけのものを作るとこんな感じ
<?php
// 受信文字列取得
if($_POST["user_name"] != "slackbot"){
$text = "@".$_POST["user_name"]." 呼びましたか?";
$payload = array("text" => $text);
echo json_encode($payload);
}
一応slackbotの投稿は撥ねるようにしている。slackbotの投稿によってOutgoing Webhooksで送られるuser_nameは先ほどのIntegrationで設定したCustomize Nameとは関係なくslackbotになるらしい。
やったね!
##課題
- 返答時の「@」がちゃんと返信になってない。
- ここから何を作ろうか・・・