shuto_log.aep

自分がやったことなどを備忘録的な感じで残していこうと思います。

slackのbotを作る 入門編

slackのbot作成入門のメモ。
slackbotのカスタマイズによる発言と、botを使った外部からの発言をやってみました。

slackとはエンジニア御用達のコミュニケーションサービス。以下略。
slack.com


slackbotを使う

slackbotは特別なことをしなくても最初からグループにいる。slackbotに何かしゃべらせるには、
https://slack.com/customize/slackbot
から自分のチームにログインして、こんな感じで入力して「Save response」すると
f:id:shutosg:20160314012704p:plain

「てすと」と打つとslackbotが「てすとだよーーー!」と返してくれる。
f:id:shutosg:20160314013113p:plain

slackはウェブページのリンクをつぶやくと自動で中身を表示してくれるため、特定のワードに反応して何かのリンクを発言させ、その中身を表示してくれるようにするとかの使い道がある。
でも実際はTwitterとかFacebookとかのSNSサービスでは、アカウント情報が無いと見れない情報が多かったり、それ以外のサイトでも上手い具合に内容が表示されなかったりしてあまり使えないかも。

サーバ上でプログラム組んで特定の時間になったらslackにつぶやくとか、TwitterAPI使って情報を取ってきてslackに流すとかしたい場合はslackbotではなくて次に紹介するbotを使うといい。

botを使う

botはslackbotと違って完全に外部から発言することが出来るし、アイコン変えたり発言のたびにbot名を変えたりとか幅が広がる。

botを作る

botを作るには以下のページにアクセスして、「Make a Custom Integration」を選択し、
slack.com
f:id:shutosg:20160314015420p:plain

次のページで「Bots」を選ぶ。
f:id:shutosg:20160314015635p:plain

入力すべき各情報(botの名前とか)は説明するまでもないとして、API Token」というのを後ほど使うのでメモっておく。
これは外部に知られたらいけないので保管は注意する。
f:id:shutosg:20160314020546p:plain

発言する

発言するにはこのAPI Tokenとともにhttps://slack.com/api/chat.postMessage宛てにPOSTリクエストを送ればいい。
POSTリクエストだけで発言できるということは、JavaScriptXMLHttpRequestなりシェルのcurlなりからslackに発言することが出来る。たとえば次のようなシェルスクリプトを書けばよい。

bot_test.sh

#!/bin/sh

curl -X POST https://slack.com/api/chat.postMessage \
-d "token=YOUR_API_TOKEN" \
-d "channel=#CHANNEL_NAME" \
-d "text=$1" \

作成されたbotが居るチャンネルを指定し、API Tokenを書き換えた上でこのシェルスクリプトを保存し、実行権限を付加する。
実行権限については適当にsudo chmod +x bot_test.shとかしとけばいい。
そんで、シェルで

$ ./bot_test.sh テストでっせ〜

とすると、
f:id:shutosg:20160314023239p:plain
と発言できる。
なお、アイコンが指定したものにならない場合は"as_user=true"オプションを付け足す。as_userオプションはAPI Tokenの持ち主(この場合は作成したbot)として発言するのできちんとbotに設定したアイコンになる。

これをサーバ上でcron登録したりすると特定の時刻になったら発言できるし、POSTリクエストの内容を以下のリンク参照にしていろいろ変えると、発言時のアイコン変えたりユーザ名変えたりいろいろできる。
https://api.slack.com/methods/chat.postMessageapi.slack.com

今回は入門編ということで外部から発言するための第一歩をやってみたが、実際にインタラクティブにユーザの発言に反応するにはReal Time Messaging APIというのを使ってチャンネル上の発言状況を取得する必要があるらしい。
これはまだやってないのでまた今度。

2016/07/20追記
だいぶ前だけど、単語を飛ばすとflickrで検索して見つかった画像を返してくれるbot作った。GoogleAPIの方が精度良いらしいのでいつか手直ししたい。
github.com