LoginSignup
117
110

More than 5 years have passed since last update.

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

Last updated at Posted at 2016-01-24

概要

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

やったね!

課題

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

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
  3. You can use dark theme
What you can do with signing up
117
110