ヘルプセンター / Amo Forms(フォーム)

フォーム送信をSlack/Chatworkに通知する

フォームが送信されたとき・リードが作られたとき・案件ステータスが変わったときに、Slack・Chatwork・自社のシステムへ知らせることができます。設定は組織設定の「Webhook(外部への通知)」で行います。変更できるのは組織のオーナーだけです。

Slack に通知する

  1. Slack で「Incoming Webhook」を作り、通知したいチャンネルの Webhook URL(`https://hooks.slack.com/…`)をコピーします。
  2. 組織設定の「Webhook(外部への通知)」で、送り先の種類に「Slack(Incoming Webhook)」を選び、URL を貼ります。
  3. 知らせる出来事(フォーム送信・リード作成・ステータス変更)にチェックを入れ、「通知を送る」をオンにして保存します。
  4. 「テスト送信」を押し、チャンネルに【テスト】の通知が届くことを確かめます。

通知は「新しいフォーム送信: 資料請求 / 会社名 氏名(メールアドレス)」の形で、リードの画面へのリンクが付きます。

Chatwork に通知する

Chatwork には Slack のような Incoming Webhook が無いため、Chatwork の API で指定のルームに投稿します。

  1. Chatwork の「サービス連携」→「API トークン」でトークンを発行します(通知を投稿するアカウントのものです)。
  2. 通知したいルームを開き、URL の末尾の数字(`#!rid123456789` の `123456789`)をルーム ID として控えます。そのアカウントがルームに参加している必要があります。
  3. 組織設定で送り先の種類に「Chatwork」を選び、ルーム ID と API トークンを入れて保存します。
  4. 「テスト送信」で届くことを確かめます。

API トークンは保存後に画面には表示しません(変えるときだけ入れ直してください)。

自社のシステムに送る(汎用 JSON)

送り先の種類に「汎用 JSON(署名付き)」を選ぶと、指定の URL(https のみ)に JSON を POST します。

  • ヘッダー: `X-Amo-Event`(出来事の種類)、`X-Amo-Delivery`(送信ごとの ID)、`X-Amo-Signature`(署名)
  • 出来事の種類: `lead_created`(リード作成)/ `form_submitted`(フォーム送信)/ `status_changed`(ステータス変更)
  • 本文: `{ "id", "event", "occurredAt", "orgId", "data": { "lead", "form", "submission", "status" } }`。`lead` にはメールアドレス・氏名・会社名・ステータス・流入チャネルなどが入ります。社内メモ(フリーメモ・活動記録)は送りません。

署名の確かめ方

最初に保存したとき、署名の秘密鍵が一度だけ表示されます(あとから取り出すことはできません。分からなくなったら「秘密鍵を作り直す」で作り直してください)。

`X-Amo-Signature` は `t=<UNIX秒>,v1=<署名>` の形です。受け取った本文(加工前の文字列)を使い、次のように確かめます。

import crypto from 'node:crypto';

function verify(rawBody, header, secret) {
  const t = /t=(\d+)/.exec(header)?.[1];
  const v1 = /v1=([0-9a-f]+)/.exec(header)?.[1];
  if (!t || !v1) return false;
  // 古すぎる通知は受け付けない(5分)
  if (Math.abs(Date.now() / 1000 - Number(t)) > 300) return false;
  const expected = crypto.createHmac('sha256', secret).update(`${t}.${rawBody}`).digest('hex');
  return crypto.timingSafeEqual(Buffer.from(expected), Buffer.from(v1));
}

送信のしくみ

  • 送信はフォームの送信を待たせません(見込み客の画面が遅くなりません)。
  • 届かなかったとき(通信エラー・時間切れ・相手のサーバーのエラー)は 1回だけ送り直します。それでも届かなければ、組織設定の「直近の送信結果」に記録されます(30日分)。
  • 送り先は https のみで、社内ネットワークなどの内部アドレスには送れません。
  • 一括でのステータス変更は通知しません(一度に大量の通知が届くのを防ぐため)。1件ずつの変更は通知します。

よくあるつまずき

  • テスト送信が届かない: URL が正しいか、Slack の Webhook が削除されていないかをご確認ください。「直近の送信結果」に相手の応答(HTTP の番号)が出ます。
  • Chatwork に届かない: ルーム ID が数字だけになっているか、トークンのアカウントがそのルームに参加しているかをご確認ください。
  • 署名が合わない: 本文を JSON として読み直した後の文字列ではなく、受け取ったままの文字列で計算してください。秘密鍵を作り直した場合は、受け取る側の鍵も新しいものに変えてください。