🐣

Slack App の作り方

2021/12/20に公開

Slack App / Slack Bot を作るのが初めてだったので、備忘録として作り方を詳しめに書きました。同じような方の参考になれば幸いです。

以下は 2021年10月7日に公開された Slack App Configuration 新デザイン の場合です。
新デザインが気に入らない場合は Distribution > Revert to the old design から旧デザインに戻せます。

Slack App 作成

slack api > Your Apps から Create New App をクリックします。
特にこだわりがなければ From scratch を選択、最初から YAML や JSON で app manifest を入力する場合は From an app manifest を選択します。

次の画面で slack app 名と、この slack app を適用する slack workspace を指定します。
workspace は後から変更できません。

Slack App に必要な権限を付与

Settings > App Manifest で公式ドキュメントを参考に、YAML または JSON で App に必要な権限を定義します。

下は user scopes に channels:history, bot scopes に channels:historychat:write を設定する例です。
bot scope を設定する場合は bot_user の記述も必要となります。

features:
  bot_user:
    display_name: Test App
    always_online: false
oauth_config:
  scopes:
    user:
      - channels:history
    bot:
      - channels:history
      - chat:write

user scope と bot scope の違いですが

  • user scope はユーザーに成り代わって処理をする権限
  • bot scope はあくまでボットユーザーとして処理をする権限

となっているようです。

どの scope が必要かは用途に応じて選択します。どの Web API methods が用途に合うかを公式ドキュメントで調べて、その API method の Required scopes に書いてある scope を逆引きして設定する、とすると上手く権限設定ができそうです。

例えばチャンネルにメッセージを投稿する chat.postMessage という method を実装で使うのであれば、Bot なら chat:write, User なら chat:write / chat:write:user / chat:write:bot を scope として追加すれば良いことが分かります。

Slack App を Workspace にインストール

Distribution > Install App から対象 Workspace に Slack App をインストールします。

前段階で scopes として設定した権限に対するリクエストが表示されるので、許可するをクリックします。

User OAuth Token (xoxp-) / Bot User OAuth Token (xoxb-) が表示されます。
後で Distribution > Install App からも Token は確認可能です。

Slack App を Slack Channel に追加

主に bot scope として権限を追加している場合に必要な手順です。

Slack を開き、Slack App の処理対象としたい Slack Channel の チャンネル詳細 > インテグレーション > app から作成した Slack App を追加します。
この追加を忘れると bot user として Slack API リクエスト時には not_in_channel というエラーが返ってきます。

実装

あとは発行した Token を用いて Slack API をリクエストするなどの実装を進めていきます。
Slack 公式の各言語 SDK はこちらです。

https://api.slack.com/tools

Slack API Tester

Web API methods ページには GUI から簡単に API をリクエストする Tester があり、実装前にエラー無く API をリクエストできるかテストすることが可能です。

参考

https://zenn.dev/mokomoka/articles/6d281d27aa344e

Discussion