[Slack]API経由でreaction (add emoji)


概要

Slack MessageへbotからReaction(emoji)をつけさせたい

方法

Slack APIを使うほか無さそうです。

ドキュメントが読める人はreactions.addを読みましょう。

以下はそれを試しに実行するまでの手順です。

Hello World

Slack APIの登録

簡易的に書いているので、理解に苦しんだ際はSlack API 推奨Tokenについてを参照してください。

新しいAppを登録

  1. https://api.slack.com/apps から Create New Appを押下
  2. 名前とワークスペースはよしなに

Appにreactions.addの権限を与える

左のメニューから OAuth & Permissions を選択

ScopesSelect Permission Scopes プルダウンを開き、 Add or remove emoji reactions for user を選択

Save Changesを押下

認可する

OAuth & Permissions のページの Install App to Workspace を押下して認可する。

これで認可したユーザ経由でreactionをつけることができる。

アクセストークンを控える

OAuth & Permissions のページの OAuth Access Token を控えておく。

Reactionを付けたいMessageの情報を取得

Reactionを付けたいメッセージのURLを控える

URLに必要情報が記載されているのでパースする

MessageのURLは以下のようになっている。

https://[ワークススペース名].slack.com/archives/[チャンネルID]/p[投稿時刻]

このうち「チャンネルID」「投稿時刻」が必要になるので控えておく。

ただし、「投稿時刻」はエポックマイクロ秒で記載されており、これを小数点付きのエポック秒に変換する必要がある。

ex. 1234567890123456 => 1234567890.123456

curlでリクエストしてみる

以下のようにリクエストすること

curl -X POST 'https://slack.com/api/reactions.add?token=xxxx-xxxxxxxxx-xxxx&channel=C1234567890&timestamp=1234567890.123456&name=thumbsup'

パラメータの説明

  • token: OAuthのアクセストークン
  • channel: 投稿するチャンネルID。チャンネル名とは異なる。
  • timestamp: 投稿した時刻。整形した小数点付きのエポック秒を指定する。
  • name: 付けたいemojiを指定。

botユーザにreactionさせる

今回の手順だと、認可を得たユーザがリアクションしたことになってしまう。

botユーザにリアクションをつけさせたい場合は追加で以下の手順を実施。

Bot Usersを登録する

これでBotユーザになる。

再度認可を得る

  • 左のメニューから OAuth & Permissions を選択
  • 「Reinstall App」を押下

Bot Userのトークンをコピーする

xoxbで始まるトークンをコピーする。

トークンを変更して以下のようにリクエストする。他のパラメータは変更不要。

curl -X POST 'https://slack.com/api/reactions.add?token=xoxb-xxxxxxxxx-xxxx&channel=C1234567890&timestamp=1234567890.123456&name=thumbsup'

疑問点

HTTP MethodはPOSTを要求されているが、各パラメータはJSONではなくクエリストリングの形式で渡さないと動かなかった。なぜ?