【2021年版】slackAPIでメッセージ投稿するボットアプリ作成・設定(スコープ権限を詳細解説)
コミュニケーションツール「slack」では、Slack APIを活用したボットなどのSlack Appを作成できます。
今回、DMやチャンネルにメッセージ投稿するボットをSlack APIで作成・設定する方法を紹介します。
ボット作成で不可欠なスコープ・パーミッションの権限設定周りを解説します。
※実際にボットで投稿するプログラムの実装部分ではなく、slack apiの設定部分が対象です。
slack APIとは
slack APIは、チャットツールで最も有名なSlackで様々な便利機能を提供するアプリを作成することができます。
Slackを使い込む中で、GoogleドライブのアプリやZoomのアプリなどを連携させるケースが多いと思います。
実はslackのアプリは自分でも作成することができます。
他のアプリからの情報を投稿したり、定期的にメッセージを送信するボットなどがよく作られています。
2020年から権限(スコープ・パーミッション)の詳細設定が必要に
Slack APIでアプリケーションを作る際には、そのアプリケーションがどのような情報にアクセスし、どういった作業ができるかのスコープ(パーミッション)設定が必要になります。
2019年まではSlack APIの設定画面で設定する権限は、そこまで細かく設定するものではありませんでした。
しかし、大企業などでのSlackのシェアが拡大し、これまでよりも強固なセキュリティーが求められるようになりました。
その結果、"the Slack app toolkit" という構想で、非常に詳細な権限設定が必須になりました。
Slack Bot用のScopeだけでも、選択可能なものは2020年4月時点で43個も存在しています。
この中から実現したい機能に応じ、適切なスコープを選択する必要があります。
Slack APIでのボットアプリの設定手順
実際にSlack APIでボットアプリを設定する手順を解説していきます。
今回のボットアプリの要件としては最もシンプルの要素として、以下の3つを実装します。
- 公開されたチャンネルに投稿できる
- メンバーにSlackbotからのDMが出せる
- アイコンや表示名が変更できる
3つ目のアイコンや表示名を変更できると、1つのアプリで色々な用途の使い分けが可能です。
有償版ではない無料プランのslackではアプリ連携数の上限が10個までとなっているので、連携アプリの節約にも効果的です。
事前に必要な設定
使用するブラウザでSlackにログインしておきます。
slack apiでアプリを作成する際にslackワークスペースに紐付けなければなりません。
そのため、slack apiのページにアクセスする前に、slackにログインしておく必要があります。
slack apiでの設定手順
slack apiでのボット用アプリの作成・設定の手順です。
わかりやすいように1操作ごとに説明用の図説キャプチャを用意し、15ステップで解説しています。
1.Slack APIの画面にアクセスします。
2.右上にある「Your Apps」というリンクをクリックします。
3.まだアプリ未作成の場合、中央部分に「Create an App」ボタンが表示されるので、クリックします。
4.App Nameに任意の名称を入力し、アプリを作るワークスペース名を選択した上で「Create App」をクリックします。
5.作成したslackアプリの設定画面で、1つ目の設定で「Permissions」をクリックします。
ここではボットが実行可能な作業範囲の権限、スコープ(パーミッション)を設定します。
6.「Add an OAuth Scope」ボタンをクリックし、ボットに付与するスコープを選択します。
7.1つ目に付与するのは「chat:write」というスコープです。
これは、ボットユーザーとしてメッセージを送る権限を許可するパーミッションです。
「chat:write」を付与すると、要件1と2の公開されたチャンネルへの投稿やメンバーへのDMが可能になります。
8.2つ目に付与するスコープは「chat:write.customize」です。
このスコープは、メッセージを送る際に表示されるボット名やアイコンを自由に設定する権限を許可するパーミッションです。
9.chat:writeと、chat:write.customizeの2つのスコープが設定されていることを確認します。
この2つの権限がslackボットでチャンネル投稿やDMを行う必要最小構成です。
User Token Scopesというスコープもありますが、こちらは他のユーザーに成り代わって投稿したい場合に設定するため、今回は不要です。
10.左メニュー「App Home」を選択したあと、Your App’s Presence in Slackで「Edit」ボタンをクリックします。
11.ボットの表示名(日本語可)とユーザー名(半角英数字のみ)を入力し、「Add」ボタンをクリックします。
※スコープのところで「chat:write.customize」の権限を許可しているため、表示名は後から変えることができるため、適当な名前で問題ありません。
12.「Bot user added!(ボットユーザーが追加された)」とのメッセージが表示されたのを確認し、「OAuth & Permissions」をクリックします。
13.OAuth & Permissionsの画面で「Install App to Workspace」ボタンをクリックします。
14.事前に設定したスコープの内容に対し、「許可する」ボタンをクリックし、slackワークスペース側から許可を与えることで有効化されます。
手順9でセットした通り、以下の2つの実行権限の許可をリクエストしています。
- ●●としてメッセージを送信する
- カスタムのユーザー名とアバターを使用して、●●としてメッセージを送信する
15.ボット用のアクセストークンが発行されたので、Copyボタンをクリックして、コピーします。
このトークンを使いボット開発を行うと、slackにメッセージが投稿できます。
なお、このアクセストークンは漏れると、大量のメッセージを送りつけに悪用されますので、注意して保管しましょう。
slackボットの必要最小なスコープは「chat:write」
slackボットのアプリ作成手順でも紹介しましたが、ボットアプリのパーミッション設定する上で必須となるスコープは「chat:write」です。
このスコープを許可することで、slackワークスペース内のボットを許可したパブリックチャンネルへの投稿や、所属するメンバーへのDM送付を行うことができます。
スコープをこれだけに絞っておけば、仮にボット用slackアプリのアクセストークンが流出しても、被害としては「大量のメッセージ送りつけられる」だけで食い止められます。
slackワークスペースの会話の内容やメンバーの情報は参照できないので、情報漏えいを防ぐことができます。
セキュリティーの観点からもしっかりと実現したい要件と照らし合わせ、スコープを選択、パーミッションすることが重要です。
パーミッション推奨スコープ①chat:write.customize
chat:writeをパーミッションした上で、付与しておくべきスコープに「chat:write.customize」があります。
この権限を付与すると、アイコンや表示名を変えられるようになります。
1つのボットアプリでアイコン・表示名を変えて、様々な通知に利用可能です。
無料版のslackのアプリ上限10個の制約があるため、アプリ数を抑えることができるchat:write.customizeのスコープを許可しておくことを推奨します。
なお、スコープは「chat:write.customize」のみにすることはできず、「chat:write」を削除すると、「chat:write.customize」も削除されます。
パーミッション推奨スコープ②chat:write.public
chat:write.publicは、「chat:write」に機能が追加したスコープです。
chat:write.publicの権限を付与すると、パブリックなチャンネルに対し、ユーザーから許可を与えることなくメッセージの投稿が可能となります。
chat:write.publicの権限がない状態では、都度ボットがメッセージを送りたいチャンネルに対し、ボットに許可が必要です。
セキュリティー的な観点では、ボットが投稿できるチャンネルは限定するのがよいですが、色々なチャンネルでボットを活用する場合、許可作業が手間になります。
chat:write.publicを付与しておけば、ダイレクトメッセージからパブリックなチャンネルの投稿まで、Slack APIのスコープを整えるだけで実現できます。
まとめ・終わりに
今回、slack apiの設定画面でボット用のslackアプリを作成するための設定手順を解説しました。
2020年からslackAPIに"the Slack app toolkit"が導入されたことで、スコープの設定・設計がこれまで以上に重要になりました。
Slackアプリの適切なスコープと権限付与を行うことで、セキュリティーを高めることができます。
これまではslackのメッセージを投稿するだけのボットでも、必要のない操作・アクセスの権限が付与されていました。
今後、slackアプリを作成する際は実装要件から適切なパーミッション設定を行いましょう。
ディスカッション
コメント一覧
まだ、コメントがありません