[Slack]API経由でreaction (add emoji)
概要
Slack MessageへbotからReaction(emoji)をつけさせたい
方法
Slack APIを使うほか無さそうです。
ドキュメントが読める人はreactions.addを読みましょう。
以下はそれを試しに実行するまでの手順です。
Hello World
Slack APIの登録
簡易的に書いているので、理解に苦しんだ際はSlack API 推奨Tokenについてを参照してください。
新しいAppを登録
- https://api.slack.com/apps から Create New Appを押下
- 名前とワークスペースはよしなに
Appにreactions.addの権限を与える
左のメニューから OAuth & Permissions
を選択
Scopes
の Select 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×tamp=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×tamp=1234567890.123456&name=thumbsup'
疑問点
HTTP MethodはPOSTを要求されているが、各パラメータはJSONではなくクエリストリングの形式で渡さないと動かなかった。なぜ?
Author And Source
この問題について([Slack]API経由でreaction (add emoji)), 我々は、より多くの情報をここで見つけました https://qiita.com/taumu/items/59cf09fc06300946de8d著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .