Slackに外部サービスやスクリプトから通知したいとき、昔はIncoming Webhookを作ってURLにJSONをPOSTする、という方法が定番でした。
ただ、現在はSlack公式ドキュメントで「Legacy custom integrations」のIncoming Webhookを見ると、Slack AppベースのWebhookへ移行するよう案内されています。
Slack Appを作れば同じようなことはできます。ですが、ちょっとした通知だけのためにSlack Appを作って、権限やインストールを管理して、必要なら管理者に承認してもらって……というのは少し面倒です。
そこで、この記事では「Slack Appを作るほどではないけれど、Webhook URLにPOSTしてSlackへ通知したい」場合の選択肢として、Slack Workflow Builderの「Webhookから」トリガーを使う方法をまとめます。
できること
この記事で作るものは、とても単純です。
外部からWorkflow BuilderのWebhook URLへ次のJSONをPOSTします。
{
"text": "テキストの例"
}
すると、指定したSlackチャンネルに text の内容を投稿します。
Incoming Webhookの完全な代替ではありません。Block Kitで凝った見た目にしたり、投稿先をリクエストごとに柔軟に切り替えたり、Slack Appとして配布したりする用途なら、素直にSlack AppのIncoming Webhookや chat.postMessage を使ったほうがよいです。
一方で、次のような用途ならWorkflow Builderだけで足りることがあります。
- バッチ処理の完了をSlackに通知したい
- 監視や運用スクリプトから短いメッセージを送りたい
- 個人またはチーム内の簡単な自動通知を作りたい
前提
Workflow BuilderのWebhookトリガーは、Slackのプランやワークスペース設定によって使えない場合があります。
公式ヘルプにも、ワークスペースのオーナーや管理者がWebhook付きワークフローの作成を制限できること、またこの機能が有料プラン向けであることが書かれています。
使えない場合は、ワークスペースの管理者に確認してください。
作成手順
1. Workflow Builderを開く
SlackのメニューからWorkflow Builderを開き、新しいワークフローを作成します。
2. 「Webhook」トリガーを設定
ワークフローの開始方法として「Webhookから」を選びます。
Webhookから受け取る値として、text という変数を作ります。
これで、外部から次のようなJSONを送ったときに、Workflow Builder内で text を変数として扱えるようになります。
{
"text": "テキストの例"
}
3. 「チャンネルへメッセージを送信」ステップを追加する
次に、ワークフローのステップとして「チャンネルへメッセージを送信」を追加します。
投稿先チャンネルを選び、メッセージ本文に先ほど作った text 変数を挿入します。
イメージとしては、Workflow Builder側で次のような設定にします。
- 投稿先: 通知したいチャンネル
- メッセージ: Webhookで受け取った
text
4. ワークフローの詳細を設定
通知時のアプリ名などを設定します。
5. ワークフローを公開してWebhook URLを取得する
ワークフローを公開すると、Webhook URLが発行されます。
Webhookトリガーの設定ページで確認でき、URLは次のような形式になります。
https://hooks.slack.com/triggers/...
このURLは知っている人がワークフローを実行できるURLなので、Incoming Webhook URLと同じように秘密情報として扱います。GitHubなどの公開リポジトリに置かないようにしてください。
curlで試す
Webhook URLを取得できたら、次のようにPOSTします。
curl -X POST 'https://hooks.slack.com/triggers/xxxxx/xxxxx/xxxxx' \
-H 'Content-Type: application/json' \
-d '{"text":"テキストの例"}'
成功すると、指定したチャンネルにメッセージが投稿されます。
Incoming Webhookとの違い
今回の方法は、昔ながらのIncoming Webhookと使い心地が少し似ています。
どちらも「URLにJSONをPOSTするとSlackに投稿される」という点は同じです。
ただし、実体はIncoming Webhookではなく、Workflow BuilderのWebhookトリガーです。そのため、次のような違いがあります。
| 観点 | Slack AppのIncoming Webhook | Workflow BuilderのWebhookトリガー |
|---|---|---|
| Slack App作成 | 必要 | 不要 |
| 投稿処理 | Webhookが直接投稿 | ワークフローのステップとして投稿 |
| 管理単位 | Slack App | Slackワークフロー |
| 向いている用途 | アプリ連携、配布、柔軟な投稿 | チーム内の簡単な通知 |
| 複雑なメッセージ | 比較的扱いやすい | ワークフローの機能範囲に依存 |
「通知できれば十分」という場面では、Workflow Builderのほうが管理しやすいことがあります。
注意点
URLは秘密情報
Webhook URLを知っている人は、そのワークフローを実行できます。
ソースコードに直書きせず、環境変数やシークレット管理に入れるのが無難です。
JSONはシンプルにする
Workflow Builderの変数として扱う場合、ネストしたJSONではなく、フラットなJSONにしておくのが扱いやすいです。
今回の例ならこれで十分です。
{
"text": "テキストの例"
}
必要に応じてパラメータは増やしても構いませんが、Workflow Builderで投稿するメッセージへのマッピング作業も必要になります。
参考
- Legacy custom integrations: incoming webhooks | Slack Developer Docs
- Build a workflow: Create a workflow that starts outside of Slack | Slack Help Center
まとめ
Slackへ外部から通知したいだけなら、Slack Appを作ってIncoming Webhookを設定する以外に、Workflow Builderの「Webhookから」トリガーを使う方法もあります。
{"text":"..."} をPOSTして、その text をチャンネルに投稿するだけなら、かなり小さく作れます。
もちろん本格的な連携にはSlack Appが向いていますが、チーム内の簡単な通知であれば、Workflow BuilderのWebhookも選択肢に入れてよいと思います。



