社外とのやり取りは Chatwork、社内は Slack という会社では、Chatwork の投稿を見落とさないよう両方を開いておくことになりがちです。この記事では、Chatwork の投稿を Slack のチャンネルへ流す手順を説明します。
Chatwork 側の仕様は、2026 年 11 月 4 日時点の公式資料で確認したものです。
結論
- 使うのは Webhook です。Samurai App の「サービス連携」には Chatwork の出来事がないため、Chatwork の Webhook を「外部トリガー」で受け、「通知先へ送る」ステップで Slack へ送ります
- 流せるのは本文と ID です。送信者の名前もルームの名前も Webhook には入っていません
- 届かなかった投稿は戻りません。Chatwork は失敗した通知を再送しないため、取りこぼしが許されない用途には向きません
できること・できないこと
Chatwork の Webhook は次の仕様で動きます。
- 作れる数:1 アカウントにつき 5 つまでです
- 再送:ありません。受け手は 10 秒以内に、ステータスコード 200 で応答する必要があります
- 自動の無効化:受け手のエラーが多いと「無効」になり、手で有効に戻すまで止まります。基準の数字は公開されていません
イベントの種類で届く項目が変わる点には注意が必要です。
| イベント | 共通の項目 | そのイベントだけの項目 |
|---|---|---|
メッセージ作成(message_created) |
body room_id message_id send_time update_time |
account_id |
自分へのメンション(mention_to_me) |
同上 | from_account_id to_account_id |
Samurai App の本文で、届いていない項目を参照するとステップが失敗します。空欄にはなりません。両方のイベントを同じワークフローで受けるなら、本文には共通の項目だけを入れてください。
本文は加工されずに届きます。[To:12345] のような宛先や [info] [qt] といった記法は、そのまま Slack に表示されます。送信者も account_id の数字だけです。名前は Chatwork API のルームのメンバー一覧にありますが、この記事の手順では取得しません。
Samurai App の外部トリガーの起動は、既定で 1 分に 10 回までです。超えると 429 を返すため、「メッセージ作成」で発言の多いルームを受けると、その間の投稿は失われます。エラーが続けば、Chatwork 側で Webhook が無効になることもあります。まずは「自分へのメンション」から始めると、数を抑えられます。
用意するもの
- Chatwork の API を使える状態のアカウント(個人プランを除き、組織の管理者への「APIの利用申請」が必要です)
- Slack の Incoming Webhook の URL(通知先のチャンネルに 1 つ)
- Samurai App のマネージャー以上の権限(外部トリガーを付けるのに必要です)
手順
完成すると、次のようなワークフローになります。

1. Slack で Incoming Webhook の URL を作る
Slack の App 設定で「Create an app」からアプリを作り、「Incoming Webhooks」をオンにします。「Add New Webhook to Workspace」でチャンネルを選んで承認すると、https://hooks.slack.com/services/... の URL が出ます。投稿先のチャンネルはこの URL に固定されます。
2. Samurai App に通知先を登録する

「設定」の「通知」で、名前と手順 1 の URL を登録します。「テスト送信」を押して、Slack にテストの 1 通が届くことを確認します。登録した URL は後から画面に表示されないので、変えるときは「編集」で入れ直します。
3. ワークフローを作る
「ワークフロー」の「作成」から「新規作成」を選びます。
- ステップを選んでいない状態の「設定」にある「ワークフローの入力」で、「入力の項目を追加」を押します。名前は
event、種類は「項目の組」にします - 「つなぐ」から「通知先へ送る」を置き、手順 2 の通知先を選びます
- 「本文」に次のように書きます
Chatwork(ルーム {{input.event.webhook_event.room_id}})
{{input.event.webhook_event.body}}
チャットで作る場合は、「作成」の「チャットで作る」から次のように頼めます。トリガーはチャットでは付けられないので、手順 5 は画面で行います。
Chatwork の Webhook を受けて、input.event.webhook_event.body を Slack の通知先へ送るワークフローを作って
4. 公開する
「バージョン」タブの「バージョン N を公開」を押します。未公開のままだと、起動は 422 で断られます。
5. 外部トリガーを付ける

「トリガー」タブの「外部トリガーを追加」を開き、「URL の ?k= でもシークレットを受ける」をオンにして作成します。作成の直後に 1 度だけシークレットが出るので、控えてください。
「署名を検証する」はオフのままにします。 Samurai App の検証は 16 進数の署名を照合する方式で、Chatwork の署名(トークンを Base64 で復号した鍵で計算し、Base64 で出した値)は照合できません。オンにすると、Chatwork からの呼び出しがすべて 404 になります。この構成では ?k= のシークレットが守りになります。
6. Chatwork に Webhook を登録する
Chatwork の「API管理画面」から Webhook を作成します。Webhook URL には、外部トリガーの URL の末尾に ?k=<シークレット>&wait=result を付けたものを入れます。
&wait=result は省かないでください。 外部トリガーは既定で 202(受け付けた)を返しますが、Chatwork の公式資料は常に 200 を返すよう求めています。wait=result を付けると、実行の終わりを待って 200 を返します。そのぶん応答は実行の長さだけ遅れるので、10 秒に収まるよう、このワークフローには AI のステップを入れず「通知先へ送る」だけにします。
URL は https:// で始まり、RFC 3986 に沿ってエンコードされている必要があります。イベントは手順 3 の本文に合うものを選びます。
7. 投稿して確認する
Chatwork で投稿し、Slack に届くことを確認します。実行の記録はチャットには残らず、ワークフローの「実行」タブの「最近の実行」に「外部から起動」として残ります。ステップごとの入力と出力が見られるので、届いた JSON もここで確認できます。
動かないとき
- 「最近の実行」に何も出ない:まず Chatwork の Webhook 編集画面で「無効」になっていないか見て、有効に戻します。次に URL の
?k=を確認します。&wait=resultが抜けていると、Chatwork 側でエラーに数えられて「無効」になることがあります。シークレットが違うか、「URL の ?k= でもシークレットを受ける」がオフだと 404 です - 実行はあるがステップが失敗している:本文の項目が届いていない可能性があります。
account_idは「自分へのメンション」には入りません。「実行」タブの入力で、届いた項目名を確認してください - 「通知先」の行に「宛先の URL が見つかりません。URL を確かめてください(404)」と出る:Slack の Webhook URL が違うか、消されています。手順 1 の URL を「編集」で入れ直します
- 一部の投稿だけ来ない:起動の上限(1 分に 10 回)か、本文の上限(64 KiB)を超えた可能性があります。再送はないので、その投稿は Chatwork 側で確認します
よくある質問
自分の投稿も Slack に流れますか
公式資料には、自分の投稿が通知に含まれるかどうかの記載がありません。「メッセージ作成」で受けるときは、自分で投稿して「最近の実行」に出るかを確認してください。
シークレットを URL に載せても問題ありませんか
URL に載せたシークレットは、中継や発火元のアクセスログに残ることがあります。Chatwork の画面では Webhook にヘッダーを足せる記載がないため、この形になります。使うのをやめるときは、シークレットを再発行してください。
逆向きの Slack から Chatwork にも流せますか
流せます。ただし仕組みは別で、Slack の出来事を受けて Chatwork の API に投稿します。Slack から Chatwork へ投稿する方法で説明しています。両方を同時に動かすと投稿が往復するので、絞り込みが必要です。