LoginSignup
109

More than 5 years have passed since last update.

posted at

updated at

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

概要

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

やったね!

課題

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

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
109