Slack APIでメッセージにリアクションをしてみた(reactions.add)

2020.06.19

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは、CX事業本部の若槻です。

今回は、とあるChrome拡張を作りたく、Slack APIによるメッセージへのリアクション(スタンプの付与)の検証を行ってみました。

なお、APIを叩くSlack Appは前回の記事で作成したものを使用します。

どのAPIを使えば良いか

まず、Slackでメッセージへのリアクションを行うのにどのAPIを使えば良いかを確認します。

API Methods | slack apiページを見てみると、メッセージにリアクションをするにはreactions.addメソッドを使えばよさそうです。

また、[reactions.add]ページを見ると、作成するAppのスコープはreactions:writeを指定すれば良さそうです。

Slack Appの設定

Slack APIを利用するにはSlack上にAppを作成する必要がありますが、記事冒頭で述べた通り今回は前回の記事で作成したAppを設定変更してメッセージへのリアクションも行えるようにします。

https://api.slack.com/apps にアクセスし、前回作成したApp(test-app)を選択します。

[Basic Information]ページで画面左の[Features]欄より[OAuth & Permissions]を開きます。

[OAuth & Permissions]ページの[Scopes] - [User Token Scopes]で[Add an OAuth Scope]をクリックします。

プルダウンメニューで先ほど確認したスコープreactions:writeを選択します。

するとAppの再インストールを促されるので[reinstall your app]をクリックします。

するとAppが追加先のワークスペースへのアクセス権限をリクエストするので、[許可する]をクリックします。

Appを再インストールしても発行済みのOAuth Access Tokenは変更されないため同じ値を引き続き利用可能です。tokenの値は後ほど使用するので控えておきます。

これでSlack Appの設定は完了です。

APIでリアクションしてみる

次に、設定変更したAppを使って実際にAPIでメッセージへのリアクションをしてみます。

必要な情報を確認する

APIでリアクションを行う場合は、事前に以下の情報を確認する必要があります。

  • channel:リアクションしたいメッセージがあるチャネルのID
  • name:リアクションで貼りたいスタンプの名前
  • timestamp:リアクションしたいメッセージのタイムスタンプ

チャネルのIDは、対象のチャネルをブラウザで開いてURL末尾のパスの値で確認できます。(今回はC0XXXXXX

スタンプの名前は、私の以前の記事[Slack APIでメッセージにスタンプ(絵文字)を付けて投稿したい]を参考に確認できます。(今回はrimokai

メッセージのタイムスタンプは、Slackで対象のメッセージのタイムスタンプのリンクURLをコピーし、

取得したURL(今回はhttps://xxxxxxxx.slack.com/archives/C0XXXXXXX/p1592288435000900)の末尾のパスの値からpを省き、ミリ秒以下を.区切りした値(今回は1592288435.000900)となります。

これで必要な情報を確認できました。

SlackのTesterページの場合

SlackのTesterページからAPIを使ってみます。reactions.addAPIの場合は下記のページです。

ここまで取得した各種情報を指定し、[Test Method]によりAPIを実行すると、実際に叩かれたURLとレスポンス結果を確認できました。

rimokaiスタンプも付与することができました。

Node.jsの場合

以下のようなNode.jsで実行可能なスクリプトを作成しました。

var request = require('request');

var reaction_url = `https://slack.com/api/reactions.add?\
  token=xoxp-xxxxxxxxxx-xxxxxxxxxx-xxxxxxxxxx-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx&\
  channel=C0XXXXXXX&\
  name=rimokai&\
  timestamp=1592288435.000900`;

var reaction_options = {
  uri: reaction_url,
  headers: {
    "Content-type": "application/json",
  },
  json: {}
};
request.post(reaction_options, function(error, response, body){});

Node.jsでスクリプトを実行すると、先ほどと同様にメッセージにrimokaiスタンプを付与することができました。

おわりに

Slack APIでメッセージにリアクション(スタンプの付与)をしてみました。

前回のSlack APIでメッセージの検索をしてみた(search.messages)のAPIと組み合わせれば「指定のメッセージを検索して自動でスタンプ付与」という処理を実装できそうです。

参考

以上