slack bot
これまでSlackでbot的なものはいくつか試していた.
- hubot
- Incoming WebHooks
hubotはCoffeeScriptがそこそこ辛かった. Incoming WebHooksはteam内で個数制限があるようなので少し使いづらい.
Slack APIでボタンや選択肢の機能が使えるらしい.
というわけで今回はSlack APIを使ってみた.
OAuth Tokenの作成
このOAuth Tokens for Testing and DevelopmentというページからTokenを作成することができる. ページタイトルにもあるように,テスト用のTokenであるようだ. Create tokenをポチる.
トークンを作成後にApp Directoryの右上からManageに進むと,アプリケーション一覧にSlack API Testerが現れている.
中を開くと,team内で他にSlack APIを使っているらしきメンバも表示されている. APIテスト用のアプリケーションという形を取っている様子.
メッセージのPOST
POSTしてみる. chat.postMessageを使うと良さそう.
# -*- coding: utf-8 -*- import requests from datetime import date def make_month_prog_msg(work): grades = ['M1', 'M2', 'B4'] month = date.today().month return '{}さん,{}の進捗どうですか?'.format(grades[month%3], work) def post_progress_msg(work): post_url = 'https://slack.com/api/chat.postMessage' token = 'xoxp-XXXXXXXXXXX-XXXXXXXXXXX-XXXXXXXXXXX-XXXXXXXXXX' channel = 'your_channel' username = '進捗チェックさん' icon_emoji = ':checkered_flag:' text = make_month_prog_msg(work) payload = { 'token': token, 'channel': channel, 'username': username, 'icon_emoji': icon_emoji, 'text': text } res = requests.post(post_url, data=payload) print res.status_code if __name__ == '__main__': post_progress_msg('掃除')
結果はこのような感じ. やけにB4を責め立てる画像になってしまい申し訳ない.
username
やicon_emoji
,icon_url
を指定しない場合,デフォルトの状態で1番目の結果のようになる.
設定すると(上記コードの状態では)2番目の結果,payloadにas_user
をTrue
として加えると3番目の結果になる.
3番目のときに使われるユーザはTokenの持ち主のユーザである.
Message buttonsを使ってみた
もともとは今回Slackネタにしたのは,最近導入されたボタンを使ってみることが目的だった.
ボタンについてのドキュメントはこちら.
Making messages more interactive with buttons
ボタンの設置のためには,attachment
というオプションを用いて投稿内容を作成する.
ボタン等のオブジェクトを増やす場合は,actions
内に要素を増やすようだ.
value
などの値は,現在のところは適当である.
変更点のみ. 最終的なのは次の記事?でちゃんと出します.
import json attachments = [{ 'fallback': text, 'text': text, 'callback_id': 'lab_clean', 'color': '#EE2222', 'attachment_type': 'default', 'actions': [{ 'name': 'ok', 'text': 'OK', 'type': 'button', 'value': 'ok' }] }] payload = { 'token': token, 'channel': channel, 'username': username, 'icon_emoji': icon_emoji, 'attachments': json.dumps(attachments) }
結果はまたこんな感じ.今のところはボタンを押してもなんのアクションも起こせず,エラーが帰ってくる.
次記事ではドキュメントのトップのgifみたいなものを作りたい.
所感
1つ目の記事の中身の無さが気になり,中身のある話を書こうと気張っているうちに週末が終わってしまった. まだ気張ってる途中だが,ブログが週1目標であることと,試行錯誤の記録を残すためには記事を分けたほうがよさそうであるため,分けて書くことにした.