webhook で送る
CMS やフォームサービスの webhook 設定に、発行される受信URLを貼るだけです。 送信元のサービスは問いません。
送り先
POST https://tsubamemail.com/hooks/<受信URLのトークン> Content-Type: application/json
受信URLは受信口の設定 →「接続方法」に出ます。送信元の設定で形式に JSON を選んでください。
本文の形
決まった形はありません。サービスごとに形が違うので、 よくある入れ物を順に探して値を取り出します。詳しくは値の取り出しを見てください。
{
"お名前": "山田 太郎",
"メールアドレス": "yamada@example.com",
"お問い合わせ内容": "見積もりをお願いします"
}data や entry.data のような入れ物で包まれていても、 そのまま送って構いません。
なりすまし対策
基本は受信URL
受信URLのトークンは推測できない値です。これが漏れなければ、第三者は投げられません。公開の場所に貼らないでください。ブラウザから直接叩く用途には向きません(その場合はサイトのフォームを使ってください)。
共有シークレット(任意)
送信元がリクエストヘッダを付けられる場合、「ヘッダ名+期待値」を照合できます。 受信口の設定 →「接続方法」で、両方を設定したときだけ有効になります。
POST /hooks/<トークン> X-Webhook-Secret: 送信元に設定した秘密の文字列
不一致・欠落は 401 で拒否し、受信ログに「シークレット不一致」として 残します。送信元ごとに異なる HMAC 署名方式には対応していません。
応答
| 状態 | 意味 |
|---|---|
200 | 受け付けた(通知は非同期で送ります) |
401 | 共有シークレットが不一致・欠落 |
403 | この受信口は webhook 経路ではない |
404 | 受信URLが存在しない |
422 | 本文から値を取り出せなかった |
413 | 本文が 256KB を超えた |
再送の要否は送信元の仕様に依存します。200 を返した時点で受信ログには 残っているので、通知メールが遅れても内容は失われません。
試す
curl -X POST https://tsubamemail.com/hooks/<トークン> \
-H 'content-type: application/json' \
-d '{"お名前":"山田 太郎","メールアドレス":"yamada@example.com","本文":"テスト"}'送ったあと、受信口の「受信ログ」タブで取り出せた項目を確認できます。