Slackアプリ周りの概念の整理

ironoir.hatenablog.com

Slackアプリについて勉強を続けていたんですが、少し時間が空いてしまったので基本的な構成を忘れてるんですよね。というか結構ややこしいんですよね、概念が。というわけでせっかくなのでPlantUMLでまとめてみました。

f:id:ironoir:20210223155914p:plain

まず、SlackにはWeb APIがあるんですが、それらを使うだけでも、Slackアプリを作成する必要があります。それは主にセキュリティのためで、必要なトークン(ボットトークンorユーザトークン)を発行してもらって、適切な権限(=Scope)の範囲で呼び出すことが可能です。事前に権限を決めておく必要がありますが、一度トークンを得られれば、slack.com/api/<METHOD_FAMILY>.<method>の形式でWeb APIを呼び出せるようになります。

それに加えて、SlackアプリはSlack本体から呼び戻してもらえるコールバックのエンドポイントをSlackアプリに設定することができて、それが図の中で書いているRequest APIです。具体的にはユーザー側からの能動的なアクション(ボタンを押した、コマンドを入力したなど)や、ワークスペース上である条件が満たされた場合(誰かがメッセージを書き込んだ、絵文字でリアクションしたなど)に呼び出されるみたいです。これを使うことによって、Slack一般ユーザから実際にBotがユーザのごとく見えるように、インタラクティブな挙動をさせることができるようになるわけです。

ちなみに、Request APIが必要なく、単に他のサービスからSlackの機能を使いたいだけ(一方的に状況を通知したい、など)であれば、図に書いたIncoming Webhookが使えます。こちらのほうが開発者にとって開発手段が増えるので、単純なものの場合はこれで事足りることも多いはず。

さて、個人的にはBlock(メッセージにGUI部品とか配置可能)が気になりますが、おいおい。

PlantUMLソースコード

自分のためにここに貼り付けています。

@startuml
actor ユーザ
rectangle Slack本体
actor Slackボット
rectangle Slackアプリ
rectangle 別サービスなど
actor 開発者

Slack本体 <-up-> ユーザ
Slack本体 <-up-> Slackボット
開発者 -up-> Slackアプリ : トークン取得、API使用

Slackアプリ <-up- Slack本体 : Request API
Slackアプリ -up-> Slack本体 : Web API

別サービスなど -up-> Slackアプリ : Incoming Webhook
@enduml

使ったオンラインエディタ

今回はオンラインエディタを使いました。よろしければ。 www.planttext.com