Edited at

SlackのOutgoing Webhooksを使って投稿に反応するbotを作る

More than 3 years have passed since last update.


概要

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:

ごくごく簡単に返事をするだけのものを作るとこんな感じ


json.php

<?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になるらしい。


デモ

demo.png

やったね!


課題


  • 返答時の「@」がちゃんと返信になってない。

  • ここから何を作ろうか・・・