Go言語のコードからSlack APIアクセスを試してみたくて、Slackの設定方法を調べてみました。今回はGolangのコードからではなくcurlを叩いてSlackメッセージ投稿できるところまでの手順を記載してみようと思います。
今回curlからアクセスするのはchat.postMessageというメッセージ投稿用のAPIメソッドです。
- 参考にしたドキュメント
- アプリを作成し、ワークスペースにインストールする
- 作成したアプリにOAuthスコープの追加
- Slackチャネルにアプリをインストールする
- curlでSlackチャネルにメッセージを投稿する
- 関連記事
参考にしたドキュメント
公式Slack API 日本語版ページの「チュートリアル - Bolt フレームワークを使って Slack Bot を作ろう」と「権限 (スコープ) - ボットの OAuth スコープについて」を参考にしてみました。
これらのドキュメントは少し古く、現状のSlackのUIと異なっているところがあるため2022年6月時点のUIを元に記事を書きます。
アプリを作成し、ワークスペースにインストールする
Slack API: https://api.slack.com/appsにアクセスします。
「Create an App」を押します。
表示されるダイアログで「From scrach」を押します。これはSlackのUI上からアプリの設定を行う方法です。下の「From an app manifest」はマニフェストファイルを使ってアプリの設定を行う方法で、同じような設定を複数回行う場合にはこちらの方法が早いです。
アプリの名前とアプリをインストールするワークスペースを選択し、「Create App」を押します。
作成したアプリにOAuthスコープの追加
アプリがSlack APIにアクセスするためには、アプリで使用できるユーザートークンまたはボットトークンに対して適切なOAuthスコープを追加する必要があります。
ユーザートークンとボットトークン
トークンは、ユーザートークンとボットトークンに分かれます。Bolt入門ガイドに記載されている説明を引用します。
・ユーザートークン を使用すると、アプリをインストールまたは認証したユーザーに成り代わって API メソッドを呼び出せます。1 つのワークスペースに複数のユーザートークンが存在する可能性があります。
・ボットトークン はボットユーザーに関連づけられ、1 つのワークスペースでは最初に誰かがそのアプリをインストールした際に一度だけ発行されます。どのユーザーがインストールを実行しても、アプリが使用するボットトークンは同じになります。ほとんどのアプリで使用されるのは、ボットトークンです。
認証したユーザーに成り代わってメッセージ投稿するのではなく、ボットとしてメッセージ投稿させたいのでボットトークンの方にOAuthスコープを設定します。
スコープの概要と適切なスコープの探し方
ボットの OAuth スコープについて、という記事に記載されています。
今回curlからアクセスする chat.postMessage
というAPIメソッドのドキュメント(下記リンク)を参照すると、Required scopesに「chat:write」が指定されているため、ボットトークンにこのOAuthスコープを追加します。
https://api.slack.com/methods/chat.postMessage
設定
左側メニューのFeaturesカテゴリにある「OAuth & Permissions」を選択。
ScopesのBot Token Scopesに、チャットへの書き込み権限「chat:write」を追加します。
「Install to Workspace」を押し、選択したワークスペースに対して作成したアプリをインストールします。
画面上部にBot User OAuth Tokenが表示されます。
Slackチャネルにアプリをインストールする
次にSlackワークスペース画面右上のアイコンを押し、チャネルの設定ダイアログを開きます。「インテグレーション」タブにある「アプリを追加する」ボタンを押します。
先ほど作成した「API TEST」アプリを追加します。
無事追加されると参加者としてメッセージが表示されます。
curlでSlackチャネルにメッセージを投稿する
発行したBot User OAuth Token、連携したチャネル名、投稿したいメッセージを指定してPOSTを送ります。これらの引数はAPIメソッドのドキュメントで必須(Required)として指定されている項目です。
$ curl -X POST 'https://slack.com/api/chat.postMessage' \ -d 'token=your_bot_user_oauth_token' \ -d 'channel=#general' \ -d 'text=テスト'
投稿したメッセージが表示されます。