やりたいこと
Slack のメッセージに API を利用して直近のメッセージに絵文字のリアクションをつけたい!
やったこと
処理の流れ
- 直近のメッセージの情報を取得
- 取得したメッセージに絵文字リアクションを付与
とてもシンプル.
準備
1. 新しい App を登録
https://api.slack.com/apps にて Create New App
をクリックして, 必要な情報を登録する.
App Name を設定して, Development Slack Workspace にて対象のワークスペースを選択する.
2. App に必要な権限を付与
作成した App に必要な権限を付与する.
App 一覧より, 作成した App をクリックして OAuth & Permissions
ページの Scope
にて以下の権限を設定.
今回は Bot Token Scope に権限を設定した. 必要な権限については, https://api.slack.com/methods にて確認することが出来る. 例えば, メッセージ一覧を取得するメソッド conversations.history については, 下図のように明記されているので, 明記されている権限を付与する.
OAuth & Permissions
ページにて Bot User OAuth Access Token
をコピーしておく.
3. App をチャンネルに追加
Slack チャンネルの詳細
メニューからアプリを追加する
より, 作成した App を追加する.
4. ざっくりとシェルスクリプトを書く
取り急ぎ, ざっくりと以下のようなシェルスクリプトを書いた.
#!/bin/bash SLACK_API_TOKEN="xoxb-1111111111-2222222222-xyzxyzxyzxyzxyzxyzxyzxyzxyz" SLACK_CHANNEL_ID="XXXXXXXXXXXXXX" LATEST_MESSAGE=$(curl -s -XGET "https://slack.com/api/conversations.history?token=${SLACK_API_TOKEN}&channel=${SLACK_CHANNEL_ID}&limit=1" \ | jq -rc '.messages[]|[.ts, .text]|@sh' | tail -1) LATEST_MESSAGE_TS=$(echo "${LATEST_MESSAGE}" | awk '{ print $1 }' | sed s/\'//g) LATEST_MESSAGE_TEXT=$(echo "${LATEST_MESSAGE}" | cut -d ' ' -f 2- | sed s/\'//g) curl -s -XPOST \ -d "token=${SLACK_API_TOKEN}" \ -d "channel=${SLACK_CHANNEL_ID}" \ -d "name=eyes" \ -d "timestamp=${LATEST_MESSAGE_TS}" \ "https://slack.com/api/reactions.add"
LATEST_MESSAGE_TEXT
を取得しているのはおまけ. 手順の 2 で控えておいた Access Token を変数 SLACK_API_TOKEN
に設定しておく.
以下, 処理の流れ.
- API エンドポイント /api/conversations.history にクエリパラメータ
limit=1
を付与して直近のメッセージを取得 - メッセージにリアクションする場合, 対象のメッセージのタイムスタンプをパラメータとして API エンドポイント /api/reaction.add に POST する (トークンとチャンネル名, 絵文字名も必要)
動作確認
シェルスクリプトを実行すると, 以下のようにリアクションが付いた.
やったーーー.
シェルスクリプトの出力は以下の通り.
$ ./test.sh 1597460829.002900 テスト、テスト、テスト {"ok":true}
以上
メモでした.