PHP
Slack

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

More than 1 year has 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

やったね!

課題

  • 返答時の「@」がちゃんと返信になってない。
  • ここから何を作ろうか・・・