Slack Incoming Webhookの使い方|App作成からcurl送信・Block Kitまで

はじめに
Incoming Webhook は、外部のプログラムから Slack のチャンネルへメッセージを投げ込むための URL です。その URL に JSON を POST するだけで投稿できるので、Bot を常駐させたりトークンを管理したりする必要がありません。「監視スクリプトの結果を Slack に流したい」「フォーム送信を通知したい」といった用途にはこれで十分です。
この記事では、2026年7月に検証用ワークスペースで実際に作成した手順をもとに、App の作成 → Webhook URL の発行 → curl 送信 → Block Kit で整形 → 削除までを解説します。途中、公式ドキュメントの記載どおりに進むと1回エラーで止まる箇所があったので、その回避方法も含めます。
- スクリプトや外部サービスから Slack に自動投稿したい
- Slack App の作り方が分からず、どこから手を付ければいいか迷っている
- Webhook で送ったメッセージを、もう少し見やすく整形したい
全体の流れ
api.slack.com で空の App を作り、投稿先のワークスペースを指定します。
App Home で Bot の表示名を決めます。ここを飛ばすと次の手順でエラーになります。
Incoming Webhooks を有効化し、投稿先チャンネルを選んで URL を受け取ります。
JSON を POST してチャンネルに届くことを確認します。
ステップ1:Slack Appを作る
api.slack.com/apps を開き、「Create an App」→「From scratch」を選びます。App 名(任意)と、Webhook を追加したいワークスペースを指定して作成します。
作成すると「Basic Information」画面に移ります。ここに App ID や Client Secret、Signing Secret が並びますが、Incoming Webhook を使うだけならこれらを触る必要はありません。左メニューから次の設定に進みます。

ステップ2:Incoming Webhooksを有効化する
左メニューの Features > Incoming Webhooks を開くと、既定では「Activate Incoming Webhooks」が Off になっています。

トグルを On にすると、下に「Webhook URLs for Your Workspace」セクションと「Add New Webhook」ボタンが現れます。

ここで一度つまずく:Botユーザーがないと追加できない
回避方法はシンプルで、先に Bot の表示名を自分で設定するだけです。左メニューの Features > App Home を開き、「App Display Name」の「Edit」から次の2つを入力して「Add」を押します。
- Display Name (Bot Name):Slack 上に表示される名前(80文字未満、記号は原則不可)
- Default username:小文字英数字・ピリオド・ハイフン・アンダースコアのみ、21文字以内

設定後に Incoming Webhooks へ戻ると、今度は問題なく次へ進めます。
ステップ3:Webhook URLを発行する
「Add New Webhook to Workspace」を押すと OAuth の認可画面に移ります。「Webhook 用のチャンネル」で投稿先のチャンネルを1つ選び、「許可する」を押します。

許可すると設定画面に戻り、一覧に Webhook URL・投稿先チャンネル・追加者・追加日時が並びます。「Copy」ボタンで URL をコピーできます。この画面には、その URL を埋め込んだサンプル curl コマンドも一緒に表示されます。

URL の構造は次のとおりで、Discord Webhook の /webhooks/<id>/<token> とよく似た形です。
https://hooks.slack.com/services/{Team ID}/{Bot ID}/{Token}ステップ4:curlで送信する
いちばん短い送信コマンドはこれです。text に本文を入れて POST します。
curl -X POST -H 'Content-type: application/json' \
-d '{"text":"Slack Webhook検証:基本送信テストです"}' \
https://hooks.slack.com/services/xxx/xxx/xxxチャンネルには、送信者名が App 名、名前の右に「アプリ」バッジが付いた形で投稿されます。アイコンは App 設定で指定したもの(未設定なら既定のプレースホルダー)になります。

Block Kitで見やすく整形する
text だけだと素っ気ない見た目になります。blocks 配列を使うと、見出し・区切り線・ボタンなどの部品を組み合わせて整形できます。Discord の embeds にあたる仕組みです。
curl -X POST -H 'Content-type: application/json' \
-d '{
"text": "Slack Webhook検証:基本送信テストです",
"blocks": [
{ "type": "section",
"text": { "type": "mrkdwn", "text": "*Slack Webhook検証*\nBlock Kitで整形したメッセージのテストです。" } },
{ "type": "divider" },
{ "type": "actions",
"elements": [
{ "type": "button",
"text": { "type": "plain_text", "text": "詳細を見る" },
"url": "https://example.com/" }
] }
]
}' \
https://hooks.slack.com/services/xxx/xxx/xxx実際に送ると、太字の見出し・本文・クリックできるボタンが描画されます。blocks を使う場合も text は残しておくと、通知バナーやモバイルの一覧表示のフォールバックとして機能します。

レート制限はどのくらいか
Slack が公称しているレート制限はおおむね1メッセージ/秒です。検証では5回連続で curl 送信しましたが、すべて HTTP 200 で 429(Too Many Requests)は発生しませんでした。ループで大量投稿するのでなければ、実用上そこまで神経質になる必要はなさそうです。
ただし、大量の通知をまとめて流す用途では、1秒あたり1件を目安に間隔を空けるか、複数行を1メッセージにまとめる設計にしておくのが安全です。
Webhookの管理と削除(原状回復)
発行済みの Webhook は「Incoming Webhooks」ページの一覧で管理します。各行のゴミ箱アイコンを押せば、その Webhook URL だけを無効化できます。投稿先チャンネルを変えたいときは、いったん削除して「Add New Webhook」からやり直します。
App ごと消したい場合は、Basic Information の最下部にある「Delete App」から削除します。

確認ダイアログで「Yes, I’m sure」を選ぶと削除が完了し、「Your Apps」一覧に 「Your application has been deleted.」と表示されます。この時点で、その App が発行していた Webhook URL はすべて無効になります。

まとめ
- 送るだけなら Bot 開発は不要。App を作って Webhook URL をもらうだけで済む
- Webhook 有効化のあと、App Home で Bot の表示名を先に設定する(ここを飛ばすとエラーになる)
- 成功レスポンスは JSON ではなくプレーンテキストの
ok - 見た目を整えたいときは
blocks(Block Kit)。textはフォールバック用に残す - URL は鍵。漏れたら削除して作り直す
Google スプレッドシートや Google フォームと組み合わせて自動投稿したい場合は GAS からこの Webhook を叩くのが手軽です。Slack の基本操作やノーコードでの自動化については以下もどうぞ。







