自動化
PR

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

sanane
記事内に商品プロモーションを含む場合があります

はじめに

Incoming Webhook は、外部のプログラムから Slack のチャンネルへメッセージを投げ込むための URL です。その URL に JSON を POST するだけで投稿できるので、Bot を常駐させたりトークンを管理したりする必要がありません。「監視スクリプトの結果を Slack に流したい」「フォーム送信を通知したい」といった用途にはこれで十分です。

この記事では、2026年7月に検証用ワークスペースで実際に作成した手順をもとに、App の作成 → Webhook URL の発行 → curl 送信 → Block Kit で整形 → 削除までを解説します。途中、公式ドキュメントの記載どおりに進むと1回エラーで止まる箇所があったので、その回避方法も含めます。

こんな人にオススメ
  • スクリプトや外部サービスから Slack に自動投稿したい
  • Slack App の作り方が分からず、どこから手を付ければいいか迷っている
  • Webhook で送ったメッセージを、もう少し見やすく整形したい

全体の流れ

Slack Appの作成

api.slack.com で空の App を作り、投稿先のワークスペースを指定します。

Botの表示名の設定

App Home で Bot の表示名を決めます。ここを飛ばすと次の手順でエラーになります。

Webhook URLの発行

Incoming Webhooks を有効化し、投稿先チャンネルを選んで URL を受け取ります。

curlで送信

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 を使うだけならこれらを触る必要はありません。左メニューから次の設定に進みます。

Slack App作成後のBasic Information画面。App ID・Client ID・Client Secret・Signing Secretが並ぶ

ステップ2:Incoming Webhooksを有効化する

左メニューの Features > Incoming Webhooks を開くと、既定では「Activate Incoming Webhooks」が Off になっています。

Incoming Webhooksの設定画面。Activate Incoming WebhooksがOffの状態

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

トグルをOnにすると表示されるWebhook URLs for Your WorkspaceセクションとAdd New Webhookボタン

ここで一度つまずく:Botユーザーがないと追加できない

この状態で「Add New Webhook to Workspace」を押すと、「〈App名〉にはインストールするボットユーザーがありません」というエラーで弾かれました。画面の説明文には「Adding incoming webhooks requires a bot user. If your app doesn’t have a bot user, we’ll add one for you.(Botユーザーがなければこちらで追加します)」と書かれているのですが、実機ではその自動追加が行われませんでした。

回避方法はシンプルで、先に Bot の表示名を自分で設定するだけです。左メニューの Features > App Home を開き、「App Display Name」の「Edit」から次の2つを入力して「Add」を押します。

  • Display Name (Bot Name):Slack 上に表示される名前(80文字未満、記号は原則不可)
  • Default username:小文字英数字・ピリオド・ハイフン・アンダースコアのみ、21文字以内
App HomeのAdd App Display Nameモーダル。Display NameとDefault usernameを入力する

設定後に Incoming Webhooks へ戻ると、今度は問題なく次へ進めます。

ステップ3:Webhook URLを発行する

「Add New Webhook to Workspace」を押すと OAuth の認可画面に移ります。「Webhook 用のチャンネル」で投稿先のチャンネルを1つ選び、「許可する」を押します。

Slackへのアクセスを許可する認可画面。ワークスペースとWebhook用のチャンネルを選択する

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

発行されたWebhook URLの一覧とサンプルcurlコマンド(URLはマスク済み)

URL の構造は次のとおりで、Discord Webhook の /webhooks/<id>/<token> とよく似た形です。

https://hooks.slack.com/services/{Team ID}/{Bot ID}/{Token}

Webhook URL は知っている人なら誰でもそのチャンネルに投稿できてしまう鍵です。ソースコードにベタ書きしてリポジトリに push したり、スクリーンショットに写り込ませたりしないでください。漏れたら後述の手順で削除すれば、その URL は即座に無効になります。

ステップ4:curlで送信する

いちばん短い送信コマンドはこれです。text に本文を入れて POST します。

curl -X POST -H 'Content-type: application/json' \
  -d '{"text":"Slack Webhook検証:基本送信テストです"}' \
  https://hooks.slack.com/services/xxx/xxx/xxx

成功したときのレスポンスは本文が ok というプレーンテキストです(JSON ではありません)。Discord Webhook が「204 No Content で本文なし」を返すのとは挙動が異なるので、成功判定を書くときは注意してください。

チャンネルには、送信者名が App 名、名前の右に「アプリ」バッジが付いた形で投稿されます。アイコンは App 設定で指定したもの(未設定なら既定のプレースホルダー)になります。

Webhook経由で届いたメッセージ。送信者名が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 は残しておくと、通知バナーやモバイルの一覧表示のフォールバックとして機能します。

Block Kitで整形して送信したメッセージ。見出し・本文・詳細を見るボタンが描画されている

レート制限はどのくらいか

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」から削除します。

Basic Information最下部のDelete Appセクションと削除ボタン

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

App削除後のYour Apps画面。Your application has been deleted.のメッセージ

まとめ

  • 送るだけなら Bot 開発は不要。App を作って Webhook URL をもらうだけで済む
  • Webhook 有効化のあと、App Home で Bot の表示名を先に設定する(ここを飛ばすとエラーになる)
  • 成功レスポンスは JSON ではなくプレーンテキストの ok
  • 見た目を整えたいときは blocks(Block Kit)。text はフォールバック用に残す
  • URL は鍵。漏れたら削除して作り直す

Google スプレッドシートや Google フォームと組み合わせて自動投稿したい場合は GAS からこの Webhook を叩くのが手軽です。Slack の基本操作やノーコードでの自動化については以下もどうぞ。

あわせて読みたい
Slackに投稿されたメッセージを自動でスプレッドシートに転記する方法【GAS】
Slackに投稿されたメッセージを自動でスプレッドシートに転記する方法【GAS】
あわせて読みたい
Slackワークフロービルダーの使い方|必要なプランと作成・公開の手順
Slackワークフロービルダーの使い方|必要なプランと作成・公開の手順
あわせて読みたい
Slackの使い方|画面の見方・チャンネル・DM・通知の基本
Slackの使い方|画面の見方・チャンネル・DM・通知の基本
記事URLをコピーしました