Chat Funnel Setup
Respond.ioとHubSpotのエンドツーエンドセットアップ
あるグロースステージSaaS企業のRevOpsチームはRespond.ioを60日間運用した後、初めてHubSpotのコンタクトリストを確認した。確認すると800件の重複レコードが見つかった。中には4〜5回重複しているコンタクトもあり、会話履歴が複数のレコードに分散して顧客の単一のクリーンなビューがなかった。
原因:Respond.ioのデフォルト同期設定は、その電話番号またはメールアドレスがCRMにすでに存在しているかどうかに関係なく、全ての会話に対して新しいHubSpotコンタクトを作成する。3つの設定変更で問題は修正された。しかしその時点で、チームはすでにデータベースのクリーンアップに2日を費やしていた。同期のポイントでの重複排除は、マルチチャネルリード重複排除ワークフローで最も見過ごされているステップの一つだ。
このガイドはそのシナリオを防ぐ統合セットアップをカバーする。初期接続から会話同期、ディール作成、担当者割り当てまで、重要な設定付きで。
前提条件
統合を開始する前に:
- Respond.ioアカウント:少なくとも1つの接続されたチャネル(WhatsApp Business API、Instagram DM、またはウェブサイトチャットウィジェット)付き。ウェブサイトチャットウィジェットのみで他のチャネルがないアカウントでも統合できるが、WhatsAppが接続されているときが最も価値が高い。
- HubSpotアカウント:APIアクセスが有効。統合メニューにアクセスするにはHubSpot Starter以上が必要。
- HubSpot Private Appトークン:APIキーは使用しない(HubSpotはこれらを廃止した)。HubSpotでSettings → Integrations → Private Apps → Create a Private Appに移動する。「Respond.io Integration」と名前を付けて、以下のスコープを付与する:
crm.objects.contacts.read、crm.objects.contacts.write、crm.objects.deals.write、conversations.read、oauth。トークンをコピーする—Respond.ioで必要だ。HubSpotのPrivate Appsドキュメントはスコープの選択とトークンのローテーションを詳しく説明している。 - 両プラットフォームの管理者アクセス:Respond.ioでは統合を設定するために管理者権限が、HubSpotではカスタムプロパティを作成するために管理者またはスーパー管理者権限が必要。
ステップ1:ネイティブ統合でRespond.ioをHubSpotに接続する
Respond.ioでSettings → Integrations → HubSpotに移動する。Connectをクリックする。
OAuthフローでHubSpotにログインしてRespond.ioにポータルへのアクセスを許可するよう求められる。アクセスを許可する。OAuthが完了すると、Respond.ioに接続がアクティブという確認と共に戻る。
しかしここで止まらないこと。OAuthの後のデフォルト設定はほとんどのチームにとって正しくない。
Respond.ioのHubSpot統合設定ページで:
- 全コンタクトの同期:これを無効にする。全ての匿名ウェブサイトチャット訪問者をHubSpotに同期したくない。識別子(メールまたは電話)がある会話のみのコンタクト同期を有効にする。
- コンタクトの自動作成:「識別されたコンタクトのみ」に設定する(つまり少なくとも電話番号またはメールが収集されたコンタクト)。
- デフォルトコンタクトライフサイクルステージ:新しいコンタクトには「サブスクライバー」ではなく「リード」に設定する。サブスクライバーはニュースレターのオプトインのためのもので、ライフサイクルステージのレポートを混乱させる。
ステップ2:コンタクトマッチングルール(これが重複の原因)
Respond.ioは3つの識別子のいずれかを使用して会話を既存のHubSpotコンタクトとマッチさせる:メールアドレス、電話番号、またはWhatsApp ID。順序が重要だ。
デフォルトのマッチング優先順位は:Email → 電話番号 → WhatsApp ID。
WhatsApp重視のファネルでは、これは逆だ。ほとんどのWhatsApp会話は最初にメールアドレスを持っていない。クオリフィケーションフローの後で収集する。Respond.ioが最初にメールでマッチしようとして見つからない場合、新しいコンタクトを作成する。その後メールが来たとき、メールでマッチした別のコンタクトを作成する。結果:同じ人物に対して2件のコンタクト。
マッチング優先順位を:電話番号 → WhatsApp ID → Emailに変更する。
WhatsApp番号は電話番号に結びついているため、このマッチは最初のメッセージから信頼できる。Settings → Integrations → HubSpot → Contact Matchingでこれを更新する。Respond.ioのHubSpot統合ドキュメントは、統合パネルで利用可能な完全なマッチングロジックと重複排除設定を詳しく説明している。
またマッチ時の重複排除も有効にする:Respond.ioが電話番号にマッチする既存のHubSpotコンタクトを見つけた場合、新しいものを作成するのではなくレコードを更新する。この1つの設定が重複作成の約70%を防ぐ。
ステップ3:フィールドマッピング
Respond.ioのHubSpot統合設定で、Field Mappingタブに移動する。これはどのRespond.ioのコンタクト属性がどのHubSpotコンタクトプロパティに同期するかを制御する。
デフォルトでうまく同期するフィールド:名前、姓、Email、電話番号。しかしHubSpotの標準プロパティが持っていないチャット固有のデータをキャプチャするためにカスタムフィールドを追加する必要がある。
まず、これらのカスタムコンタクトプロパティをHubSpotで作成する(Settings → Properties → Create Property):
- 最後のチャットチャネル:1行テキスト(例:WhatsApp、Instagram、ウェブサイトチャット)
- チャットクオリフィケーションスコア:数値
- チャットリードソース:1行テキスト(例:Meta広告、オーガニックWhatsApp、ウェブサイト)
- 初回コンタクト日(チャット):日付ピッカー
- クオリフィケーション回答:複数行テキスト
どのカスタムフィールドを作成するかについての決定と、ルーティングロジックが壊れないように一貫して名前を付ける方法については、CRM実装のカスタムフィールドガイドが詳しくカバーしている。
その後、Respond.ioでマッピングする:
| Respond.ioフィールド | HubSpotプロパティ |
|---|---|
| 名前 | 名前 |
| 姓 | 姓 |
| 電話番号 | 電話番号 |
| チャネル | 最後のチャットチャネル(カスタム) |
| コンタクトソース | チャットリードソース(カスタム) |
| 作成日時 | 初回コンタクト日(チャット)(カスタム) |
| カスタム:クオリフィケーションスコア | チャットクオリフィケーションスコア(カスタム) |
| タグ | (HubSpotタグを使用している場合はHubSpotコンタクトタグにマッピング) |
クオリフィケーションスコアフィールドはRespond.ioのワークフローでスコアを設定する必要がある(ステップ6でカバー)。今はマッピングを作成して、フローが構築された後にスコアリングロジックを残す。
ステップ4:会話同期設定
Respond.ioは会話メッセージをHubSpotコンタクトのタイムラインに同期できる。これは便利だが全てを同期するとノイズが多くなる。
デフォルト設定は自動ボットメッセージ、システムメッセージ、内部ノートを含む全てのメッセージを同期する。つまり活発なユーザーのHubSpotコンタクトのタイムラインは週に50以上のタイムラインエントリを持つ可能性があり、担当者が状況を素早く把握するのがほぼ不可能になる。
Settings → Integrations → HubSpot → Conversation Syncで変更する:
- 会話の同期:はい、ただしステータス = 「解決済み」または人間が割り当てられた会話のみ(純粋なボット会話は除く)
- ボットメッセージの同期:いいえ
- 内部ノートの同期:いいえ(これらはチームのためのもので、CRMレコードのためではない)
- 添付ファイルの同期:はい、ただし画像と文書のみ(絵文字リアクションや音声ノートは除く)
シンプルな経験則:会話が終端状態(クオリファイド、ディスクオリファイド、またはハンドオフ済み)に達したときに会話サマリーをHubSpotに同期する。サマリー付きの1つのタイムラインエントリは、全てのボットメッセージを示す30のエントリよりも有用だ。
ステップ5:ディール作成の自動化
リードがRespond.ioのフローでクオリファイされたとき(チャットボットがクオリフィケーションを完了)、HubSpotのディールが担当者によって手動ではなく自動的に作成されるようにしたい。
Respond.ioでWorkflows → New Workflowに移動する。トリガーを:**コンタクト属性変更 → クオリフィケーションスコア → 以上 → [しきい値]**に設定する。
ワークフローのアクション:
- コンタクトを更新:ライフサイクルステージ = MQL、リードステータス = 新規に設定
- HubSpotディールを作成:タイトル = 「チャットリード:[コンタクトの名前]」、パイプライン = [営業パイプライン]、ステージ = 「新規リード」、金額 = 空白のまま、オーナー = [ラウンドロビン割り当て]
- 会話を割り当て:ディールに割り当てられた担当者にRespond.ioの会話を割り当てる(ディールオーナーを検索するステップが必要;プランがサポートする場合はHubSpotルックアップアクションを使用)
- 担当者へ通知を送る:ディールリンクと会話リンク付きのSlackまたはメール
ワークフローロジックを平易な言葉で:コンタクトがクオリフィケーションしきい値以上にスコアされたとき、自動的にMQLに移行し、パイプラインディールを作成し、担当者にディールを割り当て、その担当者に通知する。担当者は何も手動で作成しない。より広いCRM自動化レイヤーを構築しているチームには、CRMワークフロー自動化が異なるCRMプラットフォームのディール作成、ライフサイクル移行、担当者通知のパターンをカバーしている。
ステップ6:担当者割り当て(Respond.ioとHubSpotのマッチング)
統合はHubSpotコンタクトオーナーとRespond.io会話担当者を自動的にミラーリングしない。これを設定する必要がある。
2つのアプローチ:
オプションA(Respond.ioからHubSpotへ): 担当者がRespond.ioで会話に割り当てられたとき、その割り当てをHubSpotコンタクトオーナーに同期する。Settings → Integrations → HubSpot → Sync Assignmentで設定する。「担当者をHubSpotコンタクトオーナーに同期する」を有効にする。
オプションB(HubSpotからRespond.ioへ): HubSpotコンタクトオーナーが設定または変更されたとき、Respond.ioの会話担当者を更新する。Respond.ioのAPIを呼び出すHubSpotワークフローが必要だ。チームがHubSpotで最初にディールを割り当てる場合に便利だ。
ほとんどのチームでは、オプションAの方がシンプルだ。担当者はチャットにはRespond.ioで作業し、HubSpotはその割り当てを反映する。
未割り当てコンタクト(まだ担当者がいない新しいリード)には、Respond.ioでラウンドロビンを設定する:Settings → Teams → [営業チーム] → Assignment → Round Robin。これにより利用可能な担当者間に新しい会話が均等に配布される。
ステップ7:テスト(フル同期前に実行する5つのシナリオ)
完全なコンタクトリストの統合を有効にする前に、これらのテストシナリオを実行する:
| テストシナリオ | 実行方法 | 期待される結果 |
|---|---|---|
| 電話番号のみの新しいコンタクト | HubSpotにない番号からWhatsAppメッセージを送る | 電話番号付きの新しいHubSpotコンタクトが作成;重複なし |
| 既存のコンタクトが再度メッセージを送る | テスト1と同じ番号を使用 | 既存のHubSpotコンタクトが更新され、重複なし |
| クオリフィケーションフローが完了する | ホットリードとして完全なボットフローを実行 | MQLライフサイクルステージが設定;パイプラインにディールが作成;担当者に通知 |
| 電話番号とメール両方を持つコンタクト | フローを完了してメールを収集 | 両方のフィールドを持つ単一のコンタクト;メールに対して2番目のコンタクトなし |
| 担当者が会話を割り当て | Respond.ioでテスト会話を担当者に割り当て | HubSpotコンタクトオーナーがその担当者に更新 |
次のテストに移動する前に各テスト後にHubSpotを確認する。探しているのは:正しいライフサイクルステージ、重複なし、正しいフィールド値、設定した場所のみのタイムラインエントリ。
ステップ8:最初のリアル同期の実行
一度に全コンタクトの同期を有効にしないこと。制御されたグループから始める:
- Respond.ioで、タグ = 「テスト」またはある日付範囲(例:昨日の会話のみ)でコンタクトをフィルタリングする
- このフィルタリングされたグループのみの同期を有効にする
- 30分後にHubSpotを確認する。レコードを確認し、重複をチェックし、フィールド値を確認する。
- クリーンであれば、過去7日間の会話まで同期を拡張する
- 別の監査を実行する。「作成日 = 過去7日間 AND ソース = Respond.io」でフィルタリングしたHubSpotレポートを確認して20件のレコードをスポットチェックする。
2回のクリーンな監査の後にのみ、全コンタクトと全新規会話の同期を有効にする。
よくある落とし穴
識別されたコンタクトのみではなく全コンタクトを同期する。 名前、電話番号、メールを全く提供しなかった匿名のウェブサイトチャット訪問者は、使用可能なデータのない空のHubSpotコンタクトを作成する。識別されたコンタクトのみに同期を設定する。
マッチング優先順位を設定しない。 デフォルトのメール優先マッチングは、後でフローでメールを提供するWhatsAppコンタクトの重複を引き起こす。フル同期を有効にする前に電話番号優先マッチングに切り替える。
フィルターなしの会話同期。 HubSpotタイムラインへの全てのボットメッセージの同期はコンタクトをノイズで埋める。「クオリファイドされた会話のみ」フィルターを使用する。
HubSpot Private Appトークンの期限切れ。 Private Appトークンは期限切れにならないが、誰かがアプリを取り消したり統合が新しいトークンで再接続された場合、同期はサイレントに壊れる。Respond.ioにはエラーが表示されない。コンタクトの同期が止まるだけだ。毎月カレンダーリマインダーを設定してRespond.ioの統合設定パネルで統合ステータスを確認する。HubSpotの統合監視ガイドは、接続されたアプリを監査し、データ損失を引き起こす前に壊れたトークン状態を検出する方法をカバーしている。
次のステップ
過去1週間の会話を使用して50件のコンタクトテスト同期を実行する。「作成日 = 過去7日間 AND ソース = Respond.io」でフィルタリングされたコンタクトレポートを実行して、重複した電話番号を持つレコードをスキャンしてHubSpotの重複を確認する。
テストがクリーンになったら、フル同期を有効にして担当者割り当てルーティングルールの構築に進む。
