HubSpot でイベントが発生すると、登録した URL に POST リクエストが送信される。
① HubSpot でイベント発生(コンタクト作成・プロパティ変更・商談ステージ移動など)
② HubSpot が登録した Webhook URL に POST リクエストを送信
③ 受信サーバーが 200 OK を返す(5秒以内)
④ 200 以外の場合は最大3回リトライ(指数バックオフ)
⑤ リトライ後も失敗すると HubSpot は送信を諦める(イベントが失われる可能性あり)
| 購読できるイベント | 説明 |
|---|---|
contact.creation | コンタクト新規作成 |
contact.deletion | コンタクト削除 |
contact.propertyChange | コンタクトのプロパティ変更 |
company.creation | 会社新規作成 |
deal.creation | 商談新規作成 |
deal.propertyChange | 商談のプロパティ変更(ステージ変更など) |
ticket.creation | チケット新規作成 |
contact.merge | コンタクトのマージ |
Webhook リクエストが本物の HubSpot から来たものかを検証する。
HubSpot は Webhook 送信時、リクエストヘッダーに X-HubSpot-Signature-v3 を付与します。
これはリクエスト情報(HTTP メソッド・URL・タイムスタンプ・ボディ)と
アプリのクライアントシークレットを使った HMAC-SHA256 署名です。
受信側でこの署名を再計算して一致することを確認することで、
なりすまし・中間者攻撃を防ぎます。
同じ Webhook が複数回届いても安全に処理できるべき等(Idempotent)な設計をする。
HubSpot は Webhook 送信に At-Least-Once(少なくとも1回)の保証を提供します。 ネットワーク障害などで200 OK が届かなかった場合、同じイベントが再送されます。 べき等処理(同じ操作を何度実行しても結果が変わらない設計)がないと、 データの重複作成・二重課金・重複メール送信などの問題が発生します。
HubSpot Webhook を使った実践的な外部連携パターンを学ぶ。
外部 SFA(Salesforce など)でコンタクトが更新されたとき、Webhook 経由で HubSpot の該当コンタクトを自動更新。双方向同期の場合は更新元を識別し、無限ループを防ぐ必要がある。
Stripe の Webhook(支払い成功・解約)を受信し、HubSpot のカスタムオブジェクト(subscriptions)を更新。ライフサイクルステージも自動変更する。
✅ Chapter 8 チェックリスト
- HubSpot Webhook のイベント種別と At-Least-Once 保証を理解した
- X-HubSpot-Signature-v3 による署名検証を Node.js で実装できる
- タイムスタンプ検証(5分以内)でリプレイ攻撃を防げる
- Redis + NX フラグによるべき等キーで重複処理を排除できる
- 即時 200 レスポンス + 非同期処理の設計パターンを理解した
- 成約・決済イベントを起点にした外部システム連携を設計できる