ooligo
n8n-flow

n8nによるデモノーショーリカバリーフロー

Difficulty
初級
Setup time
45min
For
revops · sdr-leader
RevOps

Stack

デモのノーショーは、誰も担当しないB2B営業モーションにおける最もコストの高いイベントです。AEは30分をブロックし、SDRはミーティングを予約し、購入者はある時点で真の意図を示し、そして何も起こりませんでした。ほとんどのチームはAEへのSlackリマインダーと「フォローアップする」という漠然とした意図でこれを処理します。フォローアップは購入の瞬間が冷めた数日後に届くか、AEが次のコールに入ってしまって全く届きません。このn8nフローは、同日に、毎回、SDRが作業することなくリカバリーを実現します — そして人間の返信が自動化を不要にした瞬間に終了します。

使う場面

チーム全体で月に少なくとも30件のデモノーショーがある場合です。それ以下のボリュームでは、AEが手動でリカバリーでき、自動化の失敗モード(間違ったタイミングでのわずかにずれたメール)が手動リカバリーの失敗モード(忘れること)より悪化します。ミーティング(またはHubSpotにライトバックするChili Piper)にHubSpotをすでに使用しており、AEのメールボックスがGoogle Workspaceにある場合です。正直なノーショーシグナルがあります — HubSpotが実際にミーティングを no_show とマークしており、空白のままにしていない — AEが機能するスケジューリングリンクを持っている場合です。

使わない場面

以下のいずれかに該当する場合はオンにしないでください。ノーショー「検出」が空白のミーティング結果に過ぎない場合 — 2分遅れて参加してAEがそれをログするのを忘れた人にリカバリーメールを送ることになり、何もしないより悪化します。AEドメインにSPF、DKIM、DMARCが適切に設定されていない場合 — 認証されていないドメインからの委任送信はスパムに届き、Gmailがスパムに届かせ続けるよう訓練され、AEの実際のアウトバウンドを損傷します。同じAEメールボックスから大量のコールドアウトバウンドを送信している場合(これと合わせてメールボックスあたり1日50件以上の送信アクション)— リカバリーメールがコールドと競合し、両方が低下します。クリーンなオプトアウトパスがない場合 — すでにSTOPと返信した人に「ソフトクローズ」を送ることはほとんどの法域で違法で、すべての法域で破滅的です。

セットアップ

フルバンドルは apps/web/public/artifacts/demo-no-show-recovery-n8n/ にあります。2つのファイル:demo-no-show-recovery-n8n.json(n8nエクスポート)と _README.md(インポート手順、4つの認証情報プレースホルダー、フローが読み書きする2つのテーブルのPostgresスキーマ、適格性ガード、トーンスプリット、Claudeフォールバック、cronスイープ、返信終了パスを含むすべてのブランチを実行する9ステップの初回実行検証)。ワークフローをActiveに切り替える前にREADMEを端から端まで読んでください。最初のWebhookが発火する前にスキーマ作成SQLを実行する必要があります。そうしないと Postgres — Init Recovery State ノードがスローし、コンタクトが行のない半シーケンス状態に残されます。

フローが実際に行うこと

WebhookはSOT(信頼できる情報源)です。HubSpotワークフローが meetingOutcome = no_show を監視し、{ meetingId, contactId, ownerId }hubspot-no-show エンドポイントにPOSTします。n8nは即座に202をACKし(ダウンストリームのステップが遅い場合にHubSpotのリトライが発火しないように)、並行してミーティング、コンタクト、AEオーナーレコードを引き出します。適格性ガードは3つの明示的な条件のAND:オプトアウトしていない、実際のメールアドレスを持っている、ミーティング開始時間が少なくとも5分前である。最後の条件は「2分遅れて参加してAEが気づかなかった」という失敗モードに対するセーフガードです — 注意点を参照してください。

トーンブランチは hubspot_meetings_raw に対する単一のPostgresルックアップで決定されます:コンタクトが過去90日間に outcome = 'completed' のミーティングがある場合、トーンは we_missed_you;それ以外は lets_reschedule です。これはコンタクトのフォームフィルサマリーとAEの名前とともにClaudeに渡されます。Claudeは1文を返します — 22ワードを上限とし、ピアツーピアの声で — プロンプトには明示的なフォールバックコントラクトがあります:フォームサマリーが空または一般的な場合、モデルはリテラル文字列 FALLBACK を返し、Compose Step 1 Email のJSステップは何もない状態で構築された過剰にパーソナライズされた行を送るのではなく、安全なテンプレートオープナーに置き換えます。生成されるのはオープナーだけです。本文、2つの事前選択された時間スロット、スケジューリングリンクのCTAは決定論的です。これがこのフローを典型的な「LLMにメール全体を書かせる」パターンから分離するエンジニアリング上の選択です:メールのほとんどはテンプレートで、パーソナライゼーションは1文で、パーソナライゼーションが安全にできない場合のハードフォールバックがあります。

ステップ1が送信された後、next_due_at = now() + 2 daysrecovery_state に行が入ります。別のcronノードが営業時間中に15分ごとにスイープし、期限切れの行を選び、ステップ1の行を関連リソースを参照したバリュー先行メール(トーンごとにマッピング)に、ステップ2の行をソフトクローズにルーティングします。3番目の独立したトリガーがAEの受信ボックスで新しいインバウンドメールを監視し、件名とスニペットのパターンマッチングに基づいて opt_outrescheduled_or_repliedhuman_reply として分類し、シーケンスを終了し、終了理由をPATCH経由でHubSpotのコンタクトにライトバックして、レポートがミーティングと並べて終了をロールアップできるようにします。

コストの実態

リカバリーされたノーショー1件あたり:約600入力トークン、約80出力トークンのClaudeのAPI呼び出しが1回、Sonnetで約0.003ドルです。プラス2〜3件のGmail送信(AEメールボックスのクォータは無料)。プラス4件のHubSpot API呼び出し(まともな組織のデイリーHubSpotリミットをはるかに下回ります;HubSpot Private Appsは10秒ごとに100リクエストを許可します)。プラスn8nセルフホストのコスト、すでにn8nを実行していない場合はHetzner CX22で月約5ドル。月200件のノーショーで限界コストはClaudeチャージで約0.60ドル、それ以外はゼロです。そのうち10%でもリカバリーしてオポチュニティに転換すれば、ユニットエコノミクスは非常識です — コストの話は30〜45分のセットアップに支配され、ランコストではありません。

成功の見え方

フローが少なくとも30日間実行されたらHubSpotで監視する3つの数値があります。最初は、リカバリーされたミーティング率:フローに到達したコンタクトのうち、7日間のウィンドウ内に新しいミーティングを予約(rescheduled_or_replied での終了)またはAEに返信した割合。健全なのは25〜35%;15%未満はオープナーが一般的、フォームフィルサマリーが取得されていない、またはAEドメインに配信可能性の問題があることを意味します。2番目は、オプトアウト率:opt_out で終了したコンタクトの割合。健全なのは3%未満;5%超はトーンが間違っているか、リカバリーフローに入るべきでないセグメントを含んでいることを意味します。3番目は、フォールスポジティブ率:AEが後でコンタクトが実際に参加したと確認したステップ1の送信の割合(月20件を手動でサンプリング)。これは2%未満であるべきです;高ければノーショー検出が上流で壊れており、フローを一時停止するべきです。

代替手段との比較

HubSpotワークフローのみのシーケンス対比:HubSpotはタイミングとメール送信を行えますが、オープナーパーソナライゼーションのためにClaudeを呼び出せず、パーソナライゼーション出力にフォールバックコントラクトを適用できず、コードベースの分類で返信をルーティングできません。HubSpotのみのバージョンはセグメント内の全員に同じオープナーを送ります。それで25〜35%ではなく約15%のリカバリーが得られます — n8nがない場合は価値があり、ある場合は価値がありません。

SmartleadやOutreachのようなアウトバウンドプラットフォーム対比:これらのツールはリストへのコールド送信を前提とし、数百のメールボックスで配信可能性を最適化したいと想定しています。このボリューム(チームあたり月数百件のノーショー)には過剰で、HubSpotのミーティング結果をネイティブに読まないため、統合レイヤーがまだ必要になります。価格設定も理にかなっていません — このフローからAEあたり1日最大2〜3件の送信に対して100ドル以上/AE/月です。

何もしない対比:現状のまま。ほとんどのチームのノーショーリカバリー率は5〜10%の範囲です — AEはフィット度の高いものはフォローアップを覚えていて、残りは忘れます。5〜10%から25〜35%へのデルタがこのフローの実際のROIです。

注意点

ノーショーとしてカウントされた遅刻者。 最も一般的なフォールスポジティブ:購入者が開始6分後に参加し、AEはすでに離れているかミーティングを完了とマークしています。適格性ガードの3番目の条件(meeting_start_time が少なくとも5分前)が具体的なガードですが、HubSpotが確認なしにAEが「ノーショー」をクリックした瞬間にミーティングを no_show とマークしている場合は役立ちません。AEがHubSpotで no_show をマークできる前に設定可能なウィンドウを待つよう要求することで上流でこれを修正するか、ZoomやGoogle Meetの出席を監視する自動ノーショー検出器に切り替えてください。

過剰にパーソナライズされたオープナー。 Claudeは何らかのコンテキストがあれば、パーソナライズを試みます。フォームサマリーが「デモを希望する」であれば、パーソナライゼーションは幻覚の具体的な内容になります。ガードはシステムプロンプトの明示的な FALLBACK コントラクトです — コンテキストが不十分な場合Claudeはリテラル文字列を返し、Compose Step 1 Email は安全なテンプレートオープナーに置き換えます。最初の1ヶ月は recovery_stateused_fallback メトリクスを監視してください;決して真でない場合、コントラクトが発火しておらずClaudeがオープナーコンテンツを幻覚しています。

送信者レピュテーションの崩壊。 AEのメールボックスからの委任送信は返信率には適していますが、AEのドメインが認証されていない場合は間違った動きです。ガードは操作上のもので、フロー内にありません:有効化前に、テスト送信に対して mail-tester.com を実行し、SPF、DKIM、DMARCがすべてグリーンで10/10を確認してください。いずれかが失敗している場合は、まずDNSを修正するかサブドメイン(replies.<domain>.com)から独自認証で送信してください。

返信したコンタクトがシーケンスに残る。 返信トリガーはGmailを毎分ポーリングしますが、Gmailポーリングはゼロ以外のラグがあり、cronスイープも15分ごとに実行されます。購入者がすでに返信した後にステップ2の送信が発火するウィンドウがあります。ガードは Postgres — Pull Due Recoveriesstatus = 'active' フィルタと、返信が届いた瞬間にステータスをフリップする Postgres — Exit Sequence UPDATEです。分境界でのレースコンディションはまだ可能です;チームにとってこれが重要な場合、返信トリガーをポーリングではなくGmailのプッシュ通知(Pub/Sub)に切り替えてください。

スタック

  • n8n — オーケストレーション、3つの独立したトリガー(Webhook、cron、Gmail)、パーソナライゼーションコンテキストと返信分類のためのJSコードノード。
  • HubSpot — ミーティングとコンタクトのSOT、オーナーレコード、Private Appトークン経由の終了理由ライトバック。
  • Gmail — AEメールボックスからの委任送信;同じ受信ボックスを監視する返信トリガー。
  • Claude(Sonnet) — コンテキストが不十分な場合のハード FALLBACK コントラクトを伴うオープナーラインのパーソナライゼーション。
  • Postgres — シーケンスステートのための recovery_state テーブルとトーンブランチを駆動する90日間の事前ミーティングルックアップのための hubspot_meetings_raw

Files in this artifact

Download all (.zip)