# 埋め込みアクション Source: https://docs.timothe.ai/ja/agent/actions/embed 外部サービスのウィジェットやフォームをエージェントに埋め込む方法 HTML や iframe のコードをウィジェット内のモーダルで表示するアクションです。外部サービスの予約フォームやサインアップフォームなど、ユーザーがページ遷移せずにそのまま操作を完了できます。 ## ユースケース * 日程調整ツールの予約画面(Calendly、Cal.com、Spir、TimeRex など) * アンケート・問い合わせフォーム(Typeform、Tally、Google Forms など) * 決済フォーム(Stripe Payment Links など) * リード獲得フォーム(HubSpot Forms など) * サインアップフォーム * 動画プレイヤー ## 設定 ダッシュボードの **エージェント設定 > アクション > アクションを追加 > 埋め込みコード** から設定します。 | 項目 | 説明 | | --- | ---------------------- | | ラベル | ユーザーに表示されるボタンのテキスト | | コード | 埋め込む HTML / iframe コード | ## 設定例 ```html theme={null} ``` ## 対応サービス別ガイド 各サービスの埋め込みコードの取得方法と設定例は、以下の個別ガイドを参照してください。 * [Cal.com](/ja/agent/actions/embed.calcom) * [Calendly](/ja/agent/actions/embed.calendly) * [Google Calendar](/ja/agent/actions/embed.google-calendar) * [Google Forms](/ja/agent/actions/embed.google-forms) * [HubSpot Forms](/ja/agent/actions/embed.hubspot-forms) * [Spir](/ja/agent/actions/embed.spir) * [Stripe Payment Links](/ja/agent/actions/embed.stripe) * [Tally](/ja/agent/actions/embed.tally) * [TimeRex](/ja/agent/actions/embed.timerex) * [Typeform](/ja/agent/actions/embed.typeform) # Cal.com の埋め込み Source: https://docs.timothe.ai/ja/agent/actions/embed.calcom Cal.com の予約ページをエージェントウィジェットに埋め込む方法 [Cal.com](https://cal.com) の予約ページをウィジェット内に埋め込み、エンドユーザーがその場で日程予約できるようにします。 ## 前提条件 * Cal.com アカウント * 公開済みのイベントタイプ ## 埋め込みコードの取得 1. Cal.com にログイン 2. 対象の **イベントタイプ** を開く 3. 設定から **埋め込み** を選択 4. 設定から **埋め込み** を選択 5. インライン埋め込み形式のコードをコピー ## 設定 ダッシュボードの **エージェント設定 > アクション > アクションを追加 > 埋め込みコード** を選択し、以下のように設定します。 | 項目 | 値の例 | | --- | ---------- | | ラベル | 日程を予約する | | コード | 以下の埋め込みコード | ```html theme={null}
``` # Calendly の埋め込み Source: https://docs.timothe.ai/ja/agent/actions/embed.calendly Calendly の予約ページをエージェントウィジェットに埋め込む方法 [Calendly](https://calendly.com) の予約ページをウィジェット内に埋め込み、エンドユーザーがその場で日程予約できるようにします。 ## 前提条件 * Calendly アカウント * 公開済みのイベントタイプ ## 埋め込みコードの取得 1. Calendly にログイン 2. 対象の **イベントタイプ** を開く 3. **共有** ボタンをクリック 4. **ページに追加** タブを選択 5. **インラインで埋め込み** のコードをコピー ## 設定 ダッシュボードの **エージェント設定 > アクション > アクションを追加 > 埋め込みコード** を選択し、以下のように設定します。 | 項目 | 値の例 | | --- | -------------- | | ラベル | ミーティングを予約する | | コード | 以下の iframe コード | ```html theme={null} ``` Calendly の埋め込みウィジェット(JavaScript SDK)を使う方法もありますが、iframe 形式が最もシンプルに設定できます。 # Google Calendar の埋め込み Source: https://docs.timothe.ai/ja/agent/actions/embed.google-calendar Google Calendar の予約スケジュールをエージェントウィジェットに埋め込む方法 [Google Calendar](https://calendar.google.com) の予約スケジュールページをウィジェット内に埋め込み、エンドユーザーがその場で予約できるようにします。 ## 前提条件 * Google Workspace アカウント * [予約スケジュール](https://support.google.com/calendar/answer/11608874)の作成 ## 埋め込みコードの取得 1. Google Calendar を開く 2. 作成済みの **予約スケジュール** をクリック 3. **予約ページを開く** をクリック 4. 予約ページの URL をコピー ## 設定 ダッシュボードの **エージェント設定 > アクション > アクションを追加 > 埋め込みコード** を選択し、以下のように設定します。 | 項目 | 値の例 | | --- | -------------- | | ラベル | 日程を予約する | | コード | 以下の iframe コード | ```html theme={null} ``` URL に `?gv=true` を付与すると、Google のブランディングを含むデフォルト表示になります。必要に応じてパラメータを調整してください。 # Google Forms の埋め込み Source: https://docs.timothe.ai/ja/agent/actions/embed.google-forms Google Forms のフォームをエージェントウィジェットに埋め込む方法 [Google Forms](https://www.google.com/intl/ja_jp/forms/about/) のフォームをウィジェット内に埋め込み、エンドユーザーがその場でアンケートや問い合わせフォームに回答できるようにします。 ## 前提条件 * Google アカウント * 作成済みのフォーム ## 埋め込みコードの取得 1. Google Forms でフォームを開く 2. 右上の **送信** ボタンをクリック 3. **リンクアイコン(`<>`)** タブを選択 4. 表示される埋め込み用 HTML コードをコピー、またはフォーム URL をコピー ## 設定 ダッシュボードの **エージェント設定 > アクション > アクションを追加 > 埋め込みコード** を選択し、以下のように設定します。 | 項目 | 値の例 | | --- | -------------- | | ラベル | アンケートに回答する | | コード | 以下の iframe コード | ```html theme={null} ``` Google Forms は無料で利用でき、回答は Google スプレッドシートに自動で集計できます。URL の末尾に `?embedded=true` を付けると埋め込み表示に最適化されます。 # HubSpot Forms の埋め込み Source: https://docs.timothe.ai/ja/agent/actions/embed.hubspot-forms HubSpot Forms のフォームをエージェントウィジェットに埋め込む方法 [HubSpot Forms](https://www.hubspot.jp/products/marketing/forms) のフォームをウィジェット内に埋め込み、エンドユーザーがその場でリード情報を送信できるようにします。取得したリードは HubSpot CRM に自動で連携されます。 ## 前提条件 * HubSpot アカウント * 作成済みのフォーム ## 埋め込みコードの取得 1. HubSpot にログイン 2. **マーケティング > フォーム** を開く 3. 対象のフォームを選択 4. **共有** ボタンをクリック 5. **埋め込みコード** タブからコードをコピー、またはフォームの共有リンクをコピー ## 設定 ダッシュボードの **エージェント設定 > アクション > アクションを追加 > 埋め込みコード** を選択し、以下のように設定します。 | 項目 | 値の例 | | --- | -------------- | | ラベル | お問い合わせ | | コード | 以下の iframe コード | ```html theme={null} ``` HubSpot Forms で取得したリードは HubSpot CRM に自動で登録されるため、[HubSpot 連携](/ja/integrations/crm.hubspot)と組み合わせることでエージェント経由のリード獲得を一元管理できます。 # Spir の埋め込み Source: https://docs.timothe.ai/ja/agent/actions/embed.spir Spir の日程調整ページをエージェントウィジェットに埋め込む方法 [Spir](https://www.spirinc.com) の日程調整ページをウィジェット内に埋め込み、エンドユーザーがその場で日程調整できるようにします。 ## 前提条件 * Spir アカウント * 公開済みの日程調整ページ ## 埋め込み URL の取得 1. Spir にログイン 2. **サイトに埋め込む** を開く 3. **埋め込み要コード** をコピー ## 設定 ダッシュボードの **エージェント設定 > アクション > アクションを追加 > 埋め込みコード** を選択し、以下のように設定します。 | 項目 | 値の例 | | --- | -------------- | | ラベル | 日程を調整する | | コード | 以下の iframe コード | ```html theme={null}
``` # Stripe Payment Links の埋め込み Source: https://docs.timothe.ai/ja/agent/actions/embed.stripe Stripe Payment Links の決済ページをエージェントウィジェットに埋め込む方法 [Stripe Payment Links](https://stripe.com/jp/payments/payment-links) の決済ページをウィジェット内に埋め込み、エンドユーザーがその場で購入や支払いを完了できるようにします。 ## 前提条件 * Stripe アカウント * 作成済みの Payment Link ## 埋め込みコードの取得 1. Stripe ダッシュボードにログイン 2. **Payment Links** ページを開く 3. 対象の Payment Link を選択(または新規作成) 4. Payment Link の URL(`https://buy.stripe.com/XXXXX`)をコピー ## 設定 ダッシュボードの **エージェント設定 > アクション > アクションを追加 > 埋め込みコード** を選択し、以下のように設定します。 | 項目 | 値の例 | | --- | -------------- | | ラベル | 購入する | | コード | 以下の iframe コード | ```html theme={null} ``` Stripe Payment Links はコード不要で決済ページを作成でき、サブスクリプションや一回限りの支払いに対応しています。埋め込みではなくリダイレクトアクションで外部ページに遷移させる方法もあります。 # Tally の埋め込み Source: https://docs.timothe.ai/ja/agent/actions/embed.tally Tally のフォームをエージェントウィジェットに埋め込む方法 [Tally](https://tally.so) のフォームをウィジェット内に埋め込み、エンドユーザーがその場で問い合わせやアンケートに回答できるようにします。 ## 前提条件 * Tally アカウント * 公開済みのフォーム ## 埋め込みコードの取得 1. Tally にログイン 2. 対象の **フォーム** を開く 3. 上部の **Share** ボタンをクリック 4. **Embed** タブを選択 5. **Standard** 埋め込みのコードをコピー、またはフォーム URL(`https://tally.so/r/XXXXX`)をコピー ## 設定 ダッシュボードの **エージェント設定 > アクション > アクションを追加 > 埋め込みコード** を選択し、以下のように設定します。 | 項目 | 値の例 | | --- | -------------- | | ラベル | フォームに回答する | | コード | 以下の iframe コード | ```html theme={null} ``` Tally は無料プランでも無制限にフォームを作成でき、iframe 埋め込みにも対応しています。 # TimeRex の埋め込み Source: https://docs.timothe.ai/ja/agent/actions/embed.timerex TimeRex の日程調整ページをエージェントウィジェットに埋め込む方法 [TimeRex](https://timerex.net) の日程調整ページをウィジェット内に埋め込み、エンドユーザーがその場で日程調整できるようにします。 ## 前提条件 * TimeRex アカウント * 公開済みの日程調整カレンダー ## 埋め込みコードの取得 1. TimeRex にログイン 2. 対象の **日程調整カレンダー** を開く 3. 「埋め込み」ボタンをクリック 4. 埋め込みコードをコピー ## 設定 ダッシュボードの **エージェント設定 > アクション > アクションを追加 > 埋め込みコード** を選択し、以下のように設定します。 | 項目 | 値の例 | | --- | ---------- | | ラベル | 日程を調整する | | コード | 以下の埋め込みコード | ```html theme={null}
``` # Typeform の埋め込み Source: https://docs.timothe.ai/ja/agent/actions/embed.typeform Typeform のフォームをエージェントウィジェットに埋め込む方法 [Typeform](https://www.typeform.com) のフォームをウィジェット内に埋め込み、エンドユーザーがその場でアンケートや問い合わせフォームに回答できるようにします。 ## 前提条件 * Typeform アカウント * 公開済みのフォーム ## 埋め込みコードの取得 1. Typeform にログイン 2. 対象の **フォーム** を開く 3. 上部の **共有** タブをクリック 4. **Embed in a web page** を選択 5. フォームの URL(`https://xxxxxx.typeform.com/to/XXXXX`)をコピー ## 設定 ダッシュボードの **エージェント設定 > アクション > アクションを追加 > 埋め込みコード** を選択し、以下のように設定します。 | 項目 | 値の例 | | --- | -------------- | | ラベル | アンケートに回答する | | コード | 以下の iframe コード | ```html theme={null} ``` Typeform は JavaScript SDK による埋め込みも提供していますが、iframe 形式が最もシンプルに設定できます。 # アクションの概要 Source: https://docs.timothe.ai/ja/agent/actions/index エージェントが実行できるアクションの種類と設定方法 アクションは、エージェントがエンドユーザーに提案できる CTA(Call to Action)です。日程調整への誘導、外部ページへの遷移、カスタムスクリプトの実行など、エージェントの会話のゴールとなるアクションを設定できます。 ## アクションの種類 | 種類 | 説明 | | ------------------------------------------ | ------------------------ | | [リダイレクト](/ja/agent/actions/redirect) | 指定した URL に遷移する | | [JavaScript](/ja/agent/actions/javascript) | 任意の JavaScript コードを実行する | | [埋め込み](/ja/agent/actions/embed) | HTML / iframe をモーダルで表示する | ## 設定方法 ダッシュボードの **エージェント設定 > アクション** から追加・編集できます。 1. **アクションを追加** ボタンをクリック 2. 種類(リダイレクト / JavaScript / 埋め込みコード)を選択 3. ラベルと各種パラメータを入力 4. ドラッグ&ドロップで表示順を変更可能 ## 動作の仕組み エージェントは会話の流れに応じて、設定されたアクションをエンドユーザーにボタンとして提案します。ユーザーがボタンをクリックすると確認画面が表示され、承認後にアクションが実行されます。 アクションの実行時には `action-executed` イベントがセッションに記録されるため、どのアクションがどのセッションで実行されたかを追跡できます。 # JavaScript アクション Source: https://docs.timothe.ai/ja/agent/actions/javascript JavaScript コードを使ったカスタムアクションの作成方法 任意の JavaScript コードを実行するアクションです。コンバージョン計測タグの発火やフォーム送信など、柔軟なカスタム処理を実装できます。 ## ユースケース * Google Analytics などのコンバージョンイベント送信 * カスタムトラッキングコードの実行 * 外部 API の呼び出し * DOM 操作によるページ上の変更 ## 設定 ダッシュボードの **エージェント設定 > アクション > アクションを追加 > JavaScript** から設定します。 | 項目 | 説明 | | -------------- | ---------------------------------- | | ラベル | ユーザーに表示されるボタンのテキスト | | コード | 実行する JavaScript コード | | 実行後にウィジェットを閉じる | 有効にすると、コード実行後にセッションを終了してウィジェットを閉じる | ## コードの書き方 コードは ES モジュールの関数本体として実行されます。`async` / `await` が使用可能です。 ```javascript theme={null} // Google Analytics でコンバージョンを送信 gtag("event", "conversion", { send_to: "AW-XXXXXXXXX/XXXXXXXXXXXXXXXX", }); ``` ```javascript theme={null} // 外部 API にデータを送信 await fetch("https://example.com/api/track", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ event: "cta_clicked" }), }); ``` コードはブラウザ上のエンドユーザーの環境で実行されます。ホストページの `window` オブジェクトにアクセスできるため、ページ上に読み込まれているライブラリ(`gtag` など)をそのまま呼び出せます。 # リダイレクトアクション Source: https://docs.timothe.ai/ja/agent/actions/redirect ユーザーを外部ページへリダイレクトするアクションの設定方法 指定した URL にブラウザを遷移させるアクションです。実行時にセッションを終了し、ユーザーを外部ページへ誘導します。 ## ユースケース * サービスのサインアップページへの誘導 * 資料ダウンロードページへの遷移 * お問い合わせフォームへのリンク ## 設定 ダッシュボードの **エージェント設定 > アクション > アクションを追加 > リダイレクト** から設定します。 | 項目 | 説明 | | --- | ------------------ | | ラベル | ユーザーに表示されるボタンのテキスト | | URL | 遷移先の URL | ## 設定例 | 項目 | 値 | | --- | ---------------------------- | | ラベル | 無料トライアルを始める | | URL | `https://example.com/signup` | リダイレクトの実行時、ウィジェットのセッションは自動的に終了します。 # ユーザーコンテキストの引き渡し Source: https://docs.timothe.ai/ja/agent/share-context エージェント起動時にユーザー情報やページ固有の情報を渡し、ゲートの事前入力やセッションの文脈として利用する方法 エージェントを Web サイトに埋め込むとき、ページ側が持っているユーザー情報やページ固有の情報を **ユーザーコンテキスト** として引き渡せます。 たとえば、会員向けページでログイン済みユーザーのメールアドレスや契約プランを渡したり、記事ページでカテゴリや閲覧中の商品 ID を渡したりできます。渡された値はセッションの context として保存され、ゲートの事前入力や Webhook 連携などで利用できます。 ## 渡せる情報の例 | キー | 値の例 | 用途 | | -------------- | ------------------ | ---------------------- | | `email` | `user@example.com` | ゲートのメールアドレス入力を事前入力する | | `company` | `株式会社サンプル` | 会社名をセッションに紐づける | | `plan` | `enterprise` | 契約プランに応じた会話や分岐に使う | | `accountId` | `acct_123` | 自社システム上のアカウント ID と紐づける | | `pageCategory` | `pricing` | どのページ文脈で起動されたかを渡す | キー名は任意です。ゲートのフォームフィールドと連動させたい場合は、ダッシュボード側で設定したフィールドのキーと同じ名前にしてください。 ## `data-turnint-context` で渡す 埋め込み要素に `data-turnint-context` 属性を追加し、JSON 文字列を指定します。 ```html theme={null}
``` ボタンでフルスクリーン表示する場合も同じです。 ```html theme={null} ``` `data-turnint-context` の値は JSON として解釈されます。HTML 属性内では、JSON 全体をシングルクォートで囲むと書きやすくなります。 embed script はページ内で 1 度だけ読み込みます。UI 言語は script 側の `data-turnint-locale` で指定してください。 ## `application/json` の script で渡す 属性に長い JSON を直接書きたくない場合は、`data-turnint-context` を付けた `application/json` の script block を使えます。 ```html theme={null}
``` 同じページに複数の `data-turnint-context` がある場合は、後に出現した値が同じキーを上書きします。 `application/ld+json` は対象外です。構造化データや SEO 用の JSON-LD を誤ってユーザーコンテキストに取り込まないよう、コンテキスト引き渡しには `type="application/json"` を使ってください。 ## ゲートとの関係 ユーザーコンテキストのキーがゲートのフォームフィールドのキーと一致する場合、その値はゲートの型に沿って検証・整形されます。 たとえば、ゲートに `email` というメールアドレス項目がある場合、`data-turnint-context` で渡した `email` はメールアドレスとして検証されます。`score` のような数値項目であれば、数値として扱える値に整形されます。 ゲートに存在しないキーも破棄されず、セッションの context に保持されます。 ```json theme={null} { "email": "user@example.com", "company": "株式会社サンプル", "plan": "enterprise" } ``` 上記のうち、ゲートに `email` と `company` がある場合はその 2 つがゲートの定義に沿って扱われ、`plan` は追加のセッションコンテキストとして保持されます。 ゲートが設定されていないエージェントでも、`data-turnint-context` で渡した値はセッションの context に保存されます。 ## URL query parameter との優先順位 URL query parameter は、ゲートのフォームフィールドと一致するキーだけを事前入力に使います。`autoconfirm=true` はゲートの自動確認用の制御フラグとして扱われますが、セッションの context には保存されません。 ゲートに存在しない query parameter はユーザーコンテキストとしては取り込まれません。ページ固有の情報や任意のキーをセッション context に渡したい場合は、`data-turnint-context` または `application/json` の script block を使ってください。 同じゲートフィールドのキーが複数の場所に存在する場合、次の順序で後の値が優先されます。 ```txt theme={null} 外部サービス連携 < ページ上のフォーム入力 < 保存済みコンテキスト < data-turnint-context < URL query parameter(ゲートフィールド一致時のみ) ``` たとえば、ページ上で `data-turnint-context='{"email":"old@example.com"}'` を指定し、URL に `?email=new@example.com` が含まれる場合、最終的な `email` は `new@example.com` になります。 URL query parameter は、メール配信や広告キャンペーンなどでゲート入力を一時的に上書きする用途に向いています。`data-turnint-context` は、ページテンプレートやログイン済みユーザー情報から安定して渡したい値、またはゲートに含まれない追加コンテキストに向いています。 ## 自動的に参照されるコンテキスト embed script は、明示的に指定された `data-turnint-context` や URL query parameter に加えて、同一ページ上で利用できる一部のコンテキストも低い優先度で参照します。これにより、既存のフォームや外部フォームサービスに入力済みの情報を、追加実装を少なく Turnint AI のセッションに引き継げます。 ### ページ上のフォーム入力 ページ上の安全なフォーム入力値は、Turnint AI のセッション context として利用されます。次回以降、同じ `name` 属性を持つフォーム項目が空欄の場合は、以前の入力値を復元します。 ページ上のフォーム入力は、既に入力されている値や HubSpot などホストサイト側の prefill を上書きしません。対象になるのは `name` 属性を持つ安全な input / select に限られ、`textarea`、`search`、`password`、`file`、`hidden`、無効化された項目、読み取り専用の項目は対象外です。 ### 外部サービス連携 一部の外部フォームサービスがページ内に保持している一時データは、最も低い優先度のユーザーコンテキストとして利用されます。この値は読み取り専用で扱われ、Turnint AI 側の保存データには書き戻されません。同じキーがページ上のフォーム入力、保存済みコンテキスト、`data-turnint-context`、URL query parameter に存在する場合は、そちらが優先されます。 #### 対応している外部サービス | サービス | 参照するデータ | 備考 | | ------- | -------------- | ----------------------- | | Immedio | フォームで入力済みの顧客情報 | 低優先度のユーザーコンテキストとして利用します | `password`、`token`、`secret`、`csrf`、`auth`、`card` など、認証情報や機密情報に該当しうるキーは自動取り込みの対象外です。ユーザーコンテキストには、セッションで利用して問題ない業務情報だけを渡してください。 ## トラッキングパラメータとの違い `utm_source` や `gclid` などの広告・計測用パラメータは、ユーザーコンテキストではなく `sys.tracking` として自動保存されます。 | 種類 | 保存先 | 例 | | ----------- | -------------- | ----------------------------------------------- | | ユーザーコンテキスト | セッションの context | `email`, `company`, `plan`, `accountId` | | トラッキングパラメータ | `sys.tracking` | `utm_source`, `utm_campaign`, `gclid`, `fbclid` | 広告効果測定やクロスドメイン計測にはトラッキングパラメータを使い、ユーザーやページの業務的な文脈にはユーザーコンテキストを使ってください。 Meta Pixel や HubSpot 広告連携が生成する計測フィールド(`fbc`, `fbcs`, `cd[type]` など)は、ユーザーコンテキストには取り込まれません。これらは `sys.tracking` 側で必要な値だけが自動保存されます。`data-turnint-context` に tracking 系キーを含めても、セッション context からは除外されます。 ## 関連ドキュメント * [Nuxt への組み込み](/ja/get-started/onboarding/nuxt) — `data-turnint-*` 属性を使った埋め込み方法 * [Google Tag Manager 経由で導入する](/ja/get-started/onboarding/google-tag-manager) — GTM のカスタム HTML タグで導入する手順 * [トラッキングパラメータの自動保持](/ja/integrations/tracking-params) — UTM や広告クリック ID の扱い * [Webhook 連携](/ja/integrations/webhook) — セッション context を外部システムで受け取る # APIキー Source: https://docs.timothe.ai/ja/api-keys/index ワークスペースのAPIキーを作成・管理して、外部システムからプログラム的にアクセスする方法 APIキーを使用すると、外部のシステムやスクリプトからワークスペースのリソースにプログラム的にアクセスできます。CI/CDパイプラインや自社システムとの連携に活用してください。 ## APIキーの作成 1. ダッシュボードの **設定 > APIキー** を開く 2. 「APIキーを作成」ボタンをクリック 3. キーの名前を入力する(例: CI/CDパイプライン) 4. 必要なスコープを選択する 5. 「APIキーを作成」をクリック 作成後に表示されるキー(`ws_sk_...`)をコピーしてください。\*\*キーは作成時に一度だけ表示されます。\*\*再表示はできないため、安全な場所に保管してください。 ## スコープ APIキーには、アクセスできるリソースと操作を制限するスコープを設定します。`write` スコープには `read` 権限が含まれます。 | リソース | スコープ | 説明 | | --------- | ------------------------------------------ | ---------------- | | エージェント | `agents:read` / `agents:write` | エージェントの取得・作成・更新 | | セッション | `sessions:read` / `sessions:write` | セッションの取得・作成 | | ピープル | `people:read` / `people:write` | ピープルの取得・作成・更新 | | ナレッジ | `knowledges:read` / `knowledges:write` | ナレッジの取得・作成・更新 | | ポータル | `portals:read` / `portals:write` | ポータルの取得・作成・更新 | | インテグレーション | `integrations:read` / `integrations:write` | インテグレーションの取得・設定 | | メトリクス | `metrics:read` | メトリクスの取得(読み取り専用) | ## APIキーの使用 リクエストの `Authorization` ヘッダーに Bearer トークンとしてキーを指定します。 ```bash theme={null} curl -H "Authorization: Bearer ws_sk_xxxxxxxxxxxx" \ https://api.turnint.io/v1/api-keys ``` ## APIキーの無効化 不要になったキーや漏洩の可能性があるキーは速やかに無効化してください。 1. ダッシュボードの **設定 > APIキー** を開く 2. 対象のキーの行にあるメニューから「無効化」を選択する 3. 確認ダイアログで操作を承認する 無効化されたキーを使用したリクエストは即座に拒否されます。 ## 注意事項 * APIキーの管理はワークスペース管理者のみ利用できます。 * キーは作成時に一度だけ表示されます。紛失した場合は新しいキーを作成してください。 * キーには有効期限を設定できます。期限切れのキーは自動的に無効になります。 * 無効化したキーを再有効化することはできません。 # フォーム設計のベストプラクティス Source: https://docs.timothe.ai/ja/best-practices/form-design リード獲得フォームの項目数・項目選定・段階取得・モバイル対応に関する設計ガイドライン リード獲得フォームの設計に関するナレッジドキュメントです。項目数と CVR の関係、避けたほうがよい項目、段階的にデータを取得する設計、モバイル対応、国内外の改善事例を、調査データと出典に基づいてまとめています。 結論は次の三点です。 1. 項目数は 1\~5 個に抑える * メールアドレス * 氏名 2. 入力負荷の大きい項目(電話番号、自由記述、メール確認)は極力外す 3. 不足する情報はデータエンリッチメントとプログレッシブプロファイリングで段階的に補う ターニントAI はメールアドレスから、会社情報や個人情報を公開情報をもとに自動で取得します。そのため、会社名・業種・従業員規模・役職といったフォーム項目は不要です。フォームをメールアドレス 1 項目に絞ることで入力の手間を最小化したうえで、不足する情報は自動取得と AI ヒアリングで補完できます。詳しくは本ページの末尾「ターニントAI による実装」を参照してください。 ## 1. 想定読者と適用範囲 主に B2B のリード獲得を目的としたウェブフォームを対象とします。具体的には資料請求、問い合わせ、デモ申込、ニュースレター登録、ウェビナー登録などです。決済フォーム、会員登録フォーム、ログインフォームのように設計上の制約が大きく異なるものは本ドキュメントの範囲外です。 想定読者はB2Bマーケターです。 ## 2. なぜフォームの項目は増えるのか 多くのフォームでは、設計プロセスのなかで項目数が徐々に増えていく傾向があります。これは単一の原因ではなく、複数の要請がフォーム設計に集約されることによって生じます。 ```mermaid theme={null} flowchart LR A[CVR を上げたい] --> Z[項目が増える] B[営業に詳細を渡したい] --> Z C[法的要件への対応] --> Z Z --> D((離脱増・CVR 低下)) ``` * **CVR と情報量の同時追求** — 件数は増やしたいが、リードの質も担保したい、という相反する要求が項目を増やす方向に働きます * **営業/インサイドセールスの事前情報要望** — 架電前に役職・課題・予算を把握したい、という現場要請が項目に反映されます * **法的要件** — プライバシーポリシーへの同意などは必要ですが、独立した入力項目を増やさずに、送信ボタンの近くに同意文を添える形で完結できるため、項目肥大の主要因にはなりません これらの要請を分解せずに 1 つのフォームに詰め込むと、結果としてユーザー体験が損なわれ、最も重要な「最初の顧客接点を取りこぼさない」という目的が損なわれます。 ## 3. 項目数とCVR フォーム項目数とコンバージョン率の関係については、海外を中心に大規模な調査が行われており、項目を減らすほど CVR が上がる傾向が一貫して報告されています。 ### 3.1 大規模調査の知見 HubSpot は 40,000 件以上のランディングページを分析し、フォーム項目が増えるほど CVR が低下することを示しました。特に**テキストエリア(複数行)やセレクトボックス/ドロップダウンは、単一行テキスト入力よりも CVR への負の影響が大きい**と報告されています。あわせて電話番号、年齢、地理情報の 3 つは特に CVR を下げるとされています([HubSpot - Which Types of Form Fields Lower Landing Page Conversions?](https://blog.hubspot.com/blog/tabid/6307/bid/6746/which-types-of-form-fields-lower-landing-page-conversions.aspx))。 Formstack の分析では、**項目を 1 つ削除するだけで CVR が最大 50% 改善した事例**が紹介されています([Formstack - How to Improve Form Conversion Rates](https://www.formstack.com/blog/form-conversion-tips))。 Brixon Group は数千件の B2B フォームを分析し、**項目数が 5 を超えると、追加 1 項目あたり 20〜30% の CVR 低下ペナルティが発生する**と報告しています([Brixon Group - Lead Forms in B2B](https://brixongroup.com/en/lead-forms-in-b2b-the-perfect-balancing-act-between-data-depth-and-conversion-rate/))。 Omnisend の調査では、**3 項目フォームが平均 CVR 10% で最も高い**結果が出ています([HubSpot - Landing Page Statistics](https://blog.hubspot.com/marketing/landing-page-stats))。同調査では、マーケターの 30.7% が「理想的なフォームの質問数は 4 つ」、10.9% が「名前とメールアドレスだけで十分」と回答しています。 ### 3.2 短い/長いフォームのトレードオフ 「短いフォーム=質の低いリードが増える」と懸念されることがありますが、Brixon Group の試算では、ナーチャリング次第で生成される SQL(Sales Qualified Lead)の数はほぼ同等になります。 | シナリオ | トラフィック | フォーム CVR | MQL → SQL 転換率 | 生成 SQL 数 | | ------------- | ------ | -------- | ------------- | -------- | | 長フォーム(高品質) | 10,000 | 2% | 25% | 50 件 | | 短フォーム(高ボリューム) | 10,000 | 4% | 12% | 48 件 | 長フォームは初期段階での絞り込みに依存しており、短フォームは入口を広げて後段で絞り込むモデルです。後者のほうが、ナーチャリングプロセスや営業オペレーションを整備すれば同等以上のパイプラインを生み出せる可能性があります。 ## 4. 項目ごとの離脱要因: 避けたほうがよい項目 項目数の議論に加えて、**どの項目が含まれているか**も重要です。同じ「5 項目」でも、構成によって離脱率は大きく変わります。 ### 4.1 項目ごとの離脱率 Zuko の調査による項目ごとの離脱率は次のとおりです([Zuko - Form Field UX Problems](https://www.zuko.io/blog/which-form-fields-cause-the-biggest-ux-problems))。 | 項目 | 離脱率 | | ------- | -------- | | パスワード | 10.5% | | メールアドレス | 6.4% | | 電話番号 | 6.3% | | 住所 | 上記に次いで高い | パスワードは初回タッチポイントでは原則不要です。電話番号は B2B のリード獲得フォームで頻繁に求められますが、離脱への影響が大きい代表的な項目です。 ### 4.2 電話番号項目の影響 電話番号項目の扱いを変えるだけで CVR が大きく変動した事例があります。 * ある事例では、電話番号を**必須から任意に変更したことで CVR が 42.6% から 80% に向上し、離脱率が 39% から 4% に低下**しました([Logit.net](https://www.logit.net/learn/contact-form-phone-number/)、[Vital Design](https://vitaldesign.com/phone-number-form-field-case-study/)) * 電話番号項目が含まれること自体で CVR が最大 5% 低下したという報告もあります([WPForms](https://wpforms.com/research-based-tips-to-improve-contact-form-conversions/)) 電話番号は営業現場からの要望が強い項目ですが、必須化のコストが大きいため、**必須化するかどうかは、それによって失われる商談数と、得られる架電効率を比較したうえで判断する**ことが望ましい項目です。 ### 4.3 削除を検討すべき項目 リード獲得の初回タッチポイントでは、次の項目は削除または任意化を優先的に検討します。 * 電話番号 * メール確認用の再入力項目 * 自由記述形式の「お問い合わせ内容」 * 年齢、住所、地理情報 ### 4.4 残すべき項目 逆に、リード獲得の起点として保持すべき項目は限定的です。 * **会社メールアドレス** — 後段のエンリッチメントの起点となる * **氏名** — 最低限のパーソナライズに必要 * **構造化された選択式質問**(ドロップダウン等で 2〜4 択) — 自由記述よりも離脱率が低く、セグメント分けにも使える ## 5. 設計原則 ここまでのデータをふまえ、設計に落とし込む際の三つの原則を示します。 ### 5.1 項目を最小化する 用途別の推奨項目数の目安は次のとおりです([The Diamond Group](https://www.diamond-group.co/blog/how-many-form-fields-do-i-really-need-for-conversions))。 | 用途 | 推奨項目数 | | ---------- | ----- | | ニュースレター登録 | 1〜2 | | 資料請求・問い合わせ | 3〜5 | | デモ申込・トライアル | 3〜5 | 「とりあえず取っておきたい」項目を増やす前に、**その項目が後段の業務プロセスで実際に使われているか**を確認します。使われていない項目は、CVR を下げるだけで価値を生んでいません。 ### 5.2 段階的に取得する(プログレッシブプロファイリング) プログレッシブプロファイリングは、初回フォームでは最小限の情報のみを取得し、再訪問・再ダウンロードのたびに新しい項目を少しずつ追加していく手法です。 ```mermaid theme={null} flowchart LR A[初回: メール + 氏名] --> B[2 回目: 会社名 + 電話番号] B --> C[3 回目: 業界 + 企業規模] C --> D[4 回目: 役職] ``` | ステップ | 取得する項目 | 想定コンテキスト | | ---- | ---------- | -------- | | 初回 | メールアドレス、氏名 | 資料ダウンロード | | 2 回目 | 会社名、電話番号 | ホワイトペーパー | | 3 回目 | 業界、企業規模 | セミナー登録 | | 4 回目 | 役職/タイトル | デモ依頼 | 主要なマーケティングオートメーション製品(HubSpot、Marketo、Eloqua など)はこの機能を標準で備えています。導入されていない場合でも、Cookie やリードレコードの参照によって自前で実装可能です([Reform.app - Top Tools for Progressive Profiling](https://www.reform.app/blog/top-tools-for-progressive-profiling)、[Formulayt - Ultimate Guide to Progressive Profiling](https://formulayt.com/guides/ultimate-guide-progressive-profiling))。 ### 5.3 取得済み・推測可能な情報は自動補完する データエンリッチメントは、メールアドレスやドメインを起点に、企業属性(業界、従業員数、売上規模、所在地)や個人属性(役職、シニアリティ)を外部データソースから自動補完する手法です。 エンリッチメントを前提に設計すると、フォームで入力させる項目を大幅に減らせます。次の事例はいずれもエンリッチメントを活用したフォーム短縮の結果として報告されています。 | 事例 | 施策 | 結果 | | ---------- | ---------------- | --------------- | | Mention | フォームを 3 項目に短縮 | サインアップ CVR +54% | | Greenhouse | 9 項目必須 → 3 項目 | フォーム完了率 +20% | | Gong | フォームをメール 1 項目に集約 | デモ依頼 CVR +70% | 出典: [Clearbit - Mention](https://clearbit.com/customers/mention)、[Clearbit - Greenhouse](https://clearbit.com/customers/greenhouse)、[Clearbit - Gong](https://clearbit.com/blog/gong-io-instant-lead-qualification) 100 を超える B2B 属性をメールアドレス 1 つから取得できるサービスも存在し([Alation - Data Enrichment Tools](https://www.alation.com/blog/data-enrichment-tools/))、国内でも HubSpot Japan、Sansan、リコー、NEC などがエンリッチメント/自動入力サービスを提供しています([HubSpot Japan - データエンリッチメント](https://www.hubspot.jp/products/marketing/data-enrichment)、[SalesZine - Sansan AI フォーム](https://saleszine.jp/news/detail/1922)、[NEC Data Enrichment](https://jpn.nec.com/press/202203/20220316_03.html))。 エンリッチメントを使う場合は、補完したデータの取り扱いについてプライバシーポリシーで明記し、必要な同意を取得することが前提となります。 ## 6. マルチステップフォームという選択肢 どうしても項目数を減らせない場合、フォームを 2〜3 ステップに分割するアプローチがあります。 * Venture Harbour は、マルチステップ化により**サイト訪問者の 53% をリード化した**事例と、**完了率を最大 300% 改善した**事例を報告しています([Venture Harbour - Multi-Step Lead Forms](https://ventureharbour.com/multi-step-lead-forms-get-300-conversions/)) * 心理学的にはコミットメントの一貫性の原理が働き、最初のステップを完了した時点で、後続ステップを完了する動機が高まります マルチステップが向くケースと向かないケースは次のように整理できます。 * **向く** — 項目数が 6 個以上必要で減らせない場合、選択式が多い場合、最初の数項目が答えやすい場合 * **向かない** — 項目数が 4 個以下で 1 画面に収まる場合、ユーザーが急いでいる流入経路(リターゲティング広告のクリック直後など) ステップ分割そのものが離脱の原因になることもあるため、まず項目を削れるかを検討し、削れないと判断したうえでマルチステップ化を採用するのが安全な順序です。 ## 7. モバイル対応 リード獲得フォームのアクセス経路はモバイル比率が増えていますが、CVR はデスクトップに比べて低い傾向があります。 * デスクトップ CVR 約 4.8%、モバイル CVR 約 2.9% という集計が報告されています([Landbase - Conversion Rate Statistics](https://www.landbase.com/blog/conversion-rate-statistics)) * B2B 購買者は、モバイルでリサーチし、デスクトップでコンバートする経路を取ることが多いため、モバイルでの体験は商談化前の理解形成に直接影響します モバイル設計の最低条件として、次の項目を満たすようにします。 * **入力タイプの最適化** — `type="email"`、`type="tel"`、`inputmode="numeric"` などを正しく指定し、適切なキーボードを呼び出す * **autocomplete 属性** — `autocomplete="email"`、`autocomplete="given-name"` などを指定し、OS のオートフィルを利用可能にする * **タップ領域** — 入力欄、チェックボックス、送信ボタンは指で押しやすい大きさを確保する * **必須/任意の表記** — ラベル末尾に明示し、エラー時に該当項目へスクロール/フォーカスを当てる * **フォーマット支援** — 電話番号のハイフン自動入力、郵便番号からの住所自動補完など、入力負荷を下げる支援を組み込む ## 8. 国内 EFO の改善事例 日本では EFO(Entry Form Optimization)と呼ばれる入力フォーム最適化の領域があり、国内専用ツールによる改善事例が蓄積されています。フォームアシスト(導入実績 6,000 フォーム以上)が公開している主な改善数値は次のとおりです([フォームアシスト - デザイン変更事例](https://efo.showcase-tv.com/column/case-study/12)、[フォームアシスト - EFO 成功事例](https://efo.showcase-tv.com/column/case-study/efo-guide-10))。 | 施策 | 改善効果 | | ----------------------- | ----------- | | 任意項目のアコーディオン化(デフォルト非表示) | CV 率 +7.3pt | | スマホ向けレイアウト最適化 | CV 率 +6.9pt | | AI-OCR による自動読み取り | CV 率 +6.1% | | CTA ボタンのデザイン変更 | CV 率 +5.0% | | アンケート項目の削除 | CV 率 +3.8% | | 入力難易度が低い項目を上部に配置 | CV 率 +2.9% | | ハイフン自動入力+キーボード最適化 | 項目離脱率 −1.1% | | 任意項目の表記追加 | 離脱率 −0.9% | 任意項目のアコーディオン化は、項目を残しつつデフォルトで畳んでおく手法です。月間 10,000 ユーザーの規模で年換算 8,760 件のコンバージョン増加に相当する改善が報告されています。**完全に項目を削除できない場合の現実的な代替策**として参考になります。 ## 9. 推奨フォームテンプレート ここまでの原則を反映した、資料請求/問い合わせフォームの最小構成は次のとおりです。 | 項目 | タイプ | 役割 | | --------- | --- | ----------- | | 会社メールアドレス | 必須 | エンリッチメントの起点 | | 氏名 | 必須 | 最低限のパーソナライズ | 会社名、業種、従業員規模、所在地、電話番号、役職といった項目は、エンリッチメントで補完するか、プログレッシブプロファイリングで次回以降に取得します。最初のフォームで取らない理由は、**最初の接点で失われたリードはその後のナーチャリング機会も失われる**ためです。 問い合わせフォームの場合、自由記述の「ご質問内容」を加えることがありますが、これは任意項目とし、必須項目から外します。 ### プライバシーポリシーへの同意 プライバシーポリシー同意は、独立したチェックボックス項目として並べないことを推奨します。チェックボックスは「もう一つ操作が必要な項目」としてユーザーの手間を増やし、未チェックによるバリデーションエラーで離脱の原因にもなります。 代替として、**送信ボタンに同意の意思表示を組み込む方式**が有効です。送信ボタンを押す行為そのものが、ポリシー本文へのリンクと注記文を提示したうえでの同意の意思表示として成立するため、別途チェックボックスを設けなくても同意取得は実現できます。 * 送信ボタンのラベルを「プライバシーポリシーに同意して送信する」のようにし、ボタン直上または直下に「送信することで本フォームの利用規約とプライバシーポリシーに同意したものとみなされます」といった注記を添えます * ポリシー本文へのリンクは、注記またはボタンラベル内のリンクから別タブで開けるようにします * 「ボタンクリック=同意」が成立する前提として、ポリシーへのリンクが視認可能であること、同意の対象範囲が注記で明確に示されていること、文言が法務確認を経ていることが必要です なお、目的が複数ある場合(例: フォーム送信そのものへの同意と、別途マーケティングメール配信への同意)は、それぞれの目的ごとに同意を分離して取得する必要があります。この場合は、追加の同意のみチェックボックスにする、あるいはオプション選択肢として別 UI で取得するなど、**「フォーム送信」と「個別目的への同意」を不可分にしない設計**を選びます。「規約とプライバシーポリシーへの同意」自体については、独立チェックボックスを必須化する法的理由は通常ありません。 ## 10. 設計チェックリスト 公開前に次の項目を確認します。 * [ ] 項目数は 5 個以下か * [ ] 必須項目に電話番号、パスワード、メール確認のいずれかが含まれていないか * [ ] 自由記述項目を必須にしていないか * [ ] 項目の `type` 属性、`autocomplete` 属性、`inputmode` 属性が正しく設定されているか * [ ] 必須/任意の表記が各ラベルで明確か * [ ] プライバシーポリシー同意は独立チェックボックスではなく、送信ボタン近くの文言で代替できているか * [ ] フォーム送信時のバリデーションエラーが項目ごとに表示されるか * [ ] エラー発生時に該当項目へスクロール/フォーカスが当たるか * [ ] 完了画面・サンクスメールから次のアクション(関連資料、デモ申込、別の問い合わせ)への動線があるか * [ ] モバイルで実機テストを行ったか ## 11. 用語整理 * **CVR**(Conversion Rate) — 訪問者のうち、設定したコンバージョン(送信完了など)に至った割合 * **EFO**(Entry Form Optimization) — 入力フォームの操作性を改善し、離脱を減らして CV 率を高める領域 * **プログレッシブプロファイリング** — 訪問者ごとに既知情報を判定し、未取得の項目だけを段階的に追加取得する設計手法 * **データエンリッチメント** — 既知のキー(メールアドレス、ドメイン等)を起点に、外部データソースから企業・個人の属性を補完する手法 * **MQL**(Marketing Qualified Lead) — マーケティング部門が一定の条件を満たすと判断したリード * **SQL**(Sales Qualified Lead) — 営業部門が商談化に値すると判断したリード ## 12. ターニントAI による実装 ここまでに示した「項目最小化」「プログレッシブプロファイリング」「データエンリッチメント」「マルチステップ」の各原則を、ターニントAI は 1 つの体験として束ねて提供します。 ```mermaid theme={null} flowchart LR A[メールアドレス入力] --> C[AI エージェントによるヒアリング] A -. 非同期 .-> B[公開情報からの自動取得] C --> D[商談化に必要な情報が揃った見込み顧客] B -. 非同期 .-> D ``` * **フォームはメールアドレス 1 項目のみ** — 入力の手間を最小化し、CVR を取り切る入口にできます。氏名・会社名・業種・従業員規模・役職といった項目は、初回フォームから除外できます * **メールアドレスからの自動取得** — 取得したメールアドレスを起点に、ドメインから会社情報(会社名、業界、従業員規模、所在地、概要など)、メールアドレスから個人情報(氏名、役職、部署など)を公開情報から自動取得します。フォームで取らずに済むため、項目を増やす必要がありません * **AI ヒアリングによる文脈取得** — フォーム送信後の AI エージェントとの会話を通じて、自由記述フォームでは取りこぼしがちな課題・関心領域・タイムラインといった非構造データを、構造化された形で取得します 結果として、**フォーム CVR を最も取れる形に保ちつつ、商談化判断に必要なリード情報(業種・規模・役職・課題感など)の取得量は維持または向上**できます。短フォームによる「リードの質が下がる」というトレードオフを、自動取得と AI ヒアリングで埋める設計です。 ## 13. 参考 * [HubSpot - Form Fields and Conversions](https://blog.hubspot.com/blog/tabid/6307/bid/6746/which-types-of-form-fields-lower-landing-page-conversions.aspx) * [Formstack - How to Improve Form Conversion Rates](https://www.formstack.com/blog/form-conversion-tips) * [Brixon Group - Lead Forms in B2B](https://brixongroup.com/en/lead-forms-in-b2b-the-perfect-balancing-act-between-data-depth-and-conversion-rate/) * [Zuko - Form Field UX Problems](https://www.zuko.io/blog/which-form-fields-cause-the-biggest-ux-problems) * [Venture Harbour - Multi-Step Lead Forms](https://ventureharbour.com/multi-step-lead-forms-get-300-conversions/) * [Clearbit - Optimize Lead Form Conversions](https://clearbit.com/blog/optimize-lead-form-conversions) * [フォームアシスト - EFO 成功事例](https://efo.showcase-tv.com/column/case-study/efo-guide-10) # Agentic AI とは Source: https://docs.timothe.ai/ja/concept/agentic-ai Agentic AI の定義と、従来の Reactive AI との違いを解説。Turnint AI が実現する自律型プリセールスエージェントの設計思想。 Turnint AI のすべての機能に共通する設計思想が **Agentic AI** です。このページでは、Agentic AI とは何か、従来の AI アプローチとどう違うのか、そしてなぜプリセールス領域において重要なのかを解説します。 ## Agentic AI とは Agentic AI とは、**指示に応答するだけでなく、文脈を理解し、自ら判断して行動する AI** です。 "Agentic" という言葉は "Agent"(自律的に行動する主体)に由来します。従来のチャットボットや AI アシスタントが「聞かれたことに答える」存在だったのに対し、Agentic AI は対話の流れを理解し、次に何をすべきかを自ら判断して行動します。 ## Reactive AI との違い 従来の AI の多くは **Reactive(受動的)** です。ユーザーが質問し、AI が回答する。この一問一答の繰り返しが基本モデルです。 一方、Agentic AI は対話全体を通じて文脈を蓄積し、自律的に次のアクションを決定します。 ```mermaid theme={null} flowchart TB subgraph Reactive AI direction LR R1[質問] --> R2[回答] R2 --> R3[質問] R3 --> R4[回答] end subgraph Agentic AI direction LR A1[対話開始] --> A2[文脈を把握] A2 --> A3[判断して行動] A3 --> A4[方針を更新] A4 --> A2 end ``` Agentic AI を定義する 3 つの特徴があります。 ### 文脈理解(Context Understanding) Reactive AI は各入力を独立に処理します。Agentic AI は対話全体を通じて文脈を蓄積し、見込み顧客の課題、関心、検討段階を継続的に理解します。 ### 自律的判断(Autonomous Decision-Making) Reactive AI はルールに従い、指示を待ちます。Agentic AI は蓄積した文脈に基づいて、次に何を説明すべきか、どの情報を提示すべきかを自ら判断します。 ### 主体的行動(Proactive Action) Reactive AI は受動的に待ちます。Agentic AI は先手を打ちます。見込み顧客が言語化していないニーズを察知し、関連する情報を能動的に提示します。 | | Reactive AI | Agentic AI | | ----- | ------------- | ------------ | | 応答モデル | 質問に答える | 文脈に基づき自ら行動する | | 文脈理解 | 各入力を独立に処理 | 対話全体を通じて蓄積 | | 判断 | ルールベース / 指示待ち | 状況に応じて自律的に判断 | | 行動の姿勢 | 受動的 | 能動的・先手を打つ | ## 双方向性 —「届ける」と「聞き出す」の統合 従来のツールは、**情報を届けるもの**(資料、動画、LP)と**情報を聞き出すもの**(フォーム、アンケート、チャットボット)に分かれていました。これらは別々のツール、別々のタイミングで動作します。 ```mermaid theme={null} flowchart LR subgraph 従来のアプローチ direction TB T1[情報提供] --> T2[資料・動画・LP] T3[情報収集] --> T4[フォーム・アンケート] T2 -.->|分断| T4 end subgraph Agentic アプローチ direction TB A1[AI エージェント] --> A2[説明しながら聞く] A1 --> A3[聞きながら説明する] A2 <--> A3 end ``` Agentic AI は、この分断を解消します。見込み顧客に情報を届けながら、同時に課題や関心をヒアリングする。聞き出した内容に基づいて、次に届ける情報を最適化する。**「届ける」と「聞き出す」が一つの対話体験の中で同時に行われる**のが、Agentic AI の双方向性です。 ## Turnint AI における Agentic AI Turnint AI は、Agentic AI を**プリセールスエージェント**として実装しています。見込み顧客との最初の接点から、対話を通じたヒアリング、検討の支援、そして次のステップへの誘導まで、プリセールスプロセス全体を AI エージェントが担います。 この Agentic なアプローチは、GTM(Go-To-Market)プロセス全体に適用されています。 * [**Agentic リードジェネレーション**](/ja/gtm/lead-generation) — AI エージェントとの対話体験が、より質の高いリードを生み出す * [**Agentic リードクオリフィケーション**](/ja/gtm/lead-qualification) — 対話データから見込み顧客の温度感と適合度を可視化する * [**Agentic リードナーチャリング**](/ja/gtm/lead-nurturing) — 見込み顧客のペースで検討を前に進める対話型ナーチャリング * [**Agentic GTM エンリッチメント**](/ja/gtm/gtm-enrichment) — 対話から得られるファーストパーティデータで GTM 戦略を強化する * [**Agentic ABM**](/ja/gtm/account-based-marketing) — アカウント専用エージェントが社内の全ステークホルダーに自律的に営業する ## これからの展望 AI の進化は、「ツールとしての AI」から「エージェントとしての AI」へと向かっています。 ツールとしての AI は、人間の指示を効率化する存在でした。エージェントとしての AI は、目的を理解し、自ら判断して行動する存在です。 プリセールス領域は、Agentic AI が特に力を発揮する分野です。見込み顧客一人ひとりの文脈が異なり、対話を通じた理解が不可欠であり、情報提供と情報収集を同時に行う必要がある。この複雑さは、ルールベースのアプローチでは対応しきれません。 Agentic AI は、プリセールスを「人的リソースに依存するボトルネック」から「スケーラブルでありながらパーソナルな体験」へと変えていきます。 # ABテスト Source: https://docs.timothe.ai/ja/experiments/index AIエージェントの複数パターンをA/Bテストして、最も効果的な構成を見つける ABテストを使うと、AIエージェントの異なるパターンを同時に配信し、どのパターンが最も効果的かをデータで検証できます。訪問者ごとに一貫したパターンが表示されるため、正確な比較が可能です。 ## パターンのタイプ 各ABテストには2つ以上のパターンを設定します。パターンには3つのタイプがあります。 * **エージェント** — ワークスペース内の特定のAIエージェントにルーティングします。エージェントごとに異なるプロンプトやアクションを設定して比較できます。 * **外部URL** — 指定した外部ページにリダイレクトします。既存のランディングページとAIエージェントの効果を比較する場合などに使います。 * **なし(コントロール)** — 何も表示しません。エージェントを表示した場合と表示しない場合の効果を比較するコントロールグループとして使います。 ## トラフィック配分 各パターンには配分比率(ウェイト)を設定します。たとえば、パターンAに50%、パターンBに50%と設定すれば、トラフィックが均等に分かれます。 同一の訪問者には常に同じパターンが表示されます。ページを再読み込みしたり、別の日にアクセスしても、体験が途中で切り替わることはありません。 ## 基本的なワークフロー 1. ダッシュボードの **ABテスト** を開き、「ABテストを作成」をクリックする 2. テスト名を入力し、2つ以上のパターンを追加する 3. 各パターンのタイプと配分比率を設定する 4. 「デプロイ」をクリックしてテストを開始する 5. 結果に応じて、テストを一時停止または完了する # Google Tag Manager 経由で導入する Source: https://docs.timothe.ai/ja/get-started/onboarding/google-tag-manager Google Tag Manager のカスタム HTML タグを使って Turnint AI のインライン埋め込みを導入する方法 Google Tag Manager(GTM)のカスタム HTML タグを使うと、サイトのテンプレートやソースコードを直接編集できない場合でも Turnint AI を導入できます。 このページでは、GTM 経由でページ内に埋め込みをインライン表示する手順を説明します。ボタンクリックで開くポップアップやフルスクリーン表示を HTML に直接追加できる場合は、[React への組み込み](/ja/get-started/onboarding/react) や [Nuxt への組み込み](/ja/get-started/onboarding/nuxt) の基本パターンも参照してください。 ## 全体の流れ 1. GTM で loader 用のカスタム HTML タグを作成する 2. 埋め込み先を用意する 3. GTM プレビューでタグの発火と表示を確認する ダッシュボードのエージェント共有ダイアログで **埋め込み > GTM 経由でインライン埋め込み** を選ぶと、対象エージェントの `data-turnint-id` とワークスペースの `data-turnint-namespace` が入ったコードをコピーできます。 ## Step 1: loader 用タグを作成する GTM で **タグ > 新規 > カスタム HTML** を選択し、以下の loader script を貼り付けます。 ```html theme={null} ``` `data-turnint-namespace` にはワークスペース ID、`data-turnint-locale` には埋め込みの UI 言語を指定します。`ja` / `en` / `auto` を指定できます。 トリガーは、Turnint AI を表示するページだけに絞るか、複数ページで使う場合は全ページに設定します。同じページで loader script が複数回読み込まれないよう、loader 用タグは 1 つだけ発火させてください。 ## Step 2: パターン A: ページ HTML に埋め込み先を置ける場合 ページの HTML を編集できる場合は、埋め込みを表示したい位置に以下の `div` を追加します。 ```html theme={null}
``` この場合、GTM 側では Step 1 の loader 用タグだけで導入できます。 ## Step 3: パターン B: GTM だけで埋め込み先も追加する場合 ページ HTML を編集できない場合は、別の **カスタム HTML** タグを作成し、以下のスクリプトを貼り付けます。 ```html theme={null} ``` `!!TARGET_SELECTOR!!` は、埋め込み先にしたい要素を指定する CSS セレクタに置き換えてください。例えば `#turnint-ai-container` や `.product-faq` のように指定します。 GTM だけで埋め込み先を追加する場合、対象の親要素には十分な高さを確保してください。 ## トリガーと発火順 loader 用タグと埋め込み先追加用タグは、同じページで発火させます。埋め込み先追加用タグは、対象要素が DOM に存在してから実行される必要があるため、通常は **DOM Ready** 以降のトリガーを使います。 GTM の **タグの順序付け** を使える場合は、loader 用タグを先に発火させる構成にしてください。loader script は既存の `data-turnint-id` 要素を自動検知するため、多少前後しても動作しますが、タグ構成を明確にしておくと検証しやすくなります。 ## 検証手順 1. GTM の **プレビュー** を開く 2. 対象ページで loader 用タグが 1 回だけ発火していることを確認する 3. Step 2B の方式では、埋め込み先追加用タグも発火していることを確認する 4. ブラウザの Elements パネルで `[data-turnint-id]` の要素が追加されていることを確認する 5. 埋め込みがページ内に表示され、会話を開始できることを確認する 表示されない場合は、まず `!!TARGET_SELECTOR!!` に指定した要素がページ上に存在するかを確認してください。SPA や遅延描画のページでは、対象要素が後から追加されることがあります。その場合は、発火タイミングを **Window Loaded** に変えるか、より安定した親要素を selector に指定してください。 ## 注意点 * **CSP** — サイトの Content Security Policy で外部 script が制限されている場合、`https://cdn.turnint.ai` の読み込みを許可してください * **タグの公開範囲** — 全ページに配信する場合でも、埋め込み先追加用タグは対象ページだけで発火するよう条件を絞ってください ## 関連ドキュメント * [クイックスタート](/ja/get-started/quickstart) — 共有方法と埋め込み方式の全体像 * [React への組み込み](/ja/get-started/onboarding/react) — React サイトに直接組み込む方法 * [Nuxt への組み込み](/ja/get-started/onboarding/nuxt) — Nuxt サイトに直接組み込む方法 * [トラッキングパラメータの自動保持](/ja/integrations/tracking-params) — UTM などの引き継ぎ # HubSpot メールとの連携 Source: https://docs.timothe.ai/ja/get-started/onboarding/hubspot-email HubSpot から配信するメールに Turnint AI のリンクを埋め込み、ユーザー情報を引き継いでエージェント体験へ誘導する方法 HubSpot Marketing Hub / Sales Hub から配信するメールに Turnint AI のリンクを差し込み、ユーザー情報(メールアドレス、会社名、HubSpot Contact ID など)を URL の query parameter として引き継ぐことで、ゲートをスキップしたパーソナライズされたエージェント体験へ誘導できます。 HubSpot のランディングページ(フォーム送信)からの誘導は別ドキュメントで解説しています。本ページはメール配信からの導線に特化した内容です。あわせて [HubSpot ランディングページとの連携](/ja/get-started/onboarding/hubspot-landing-page) もご参照ください。 ## フロー ```mermaid theme={null} flowchart LR A["HubSpotメール配信"] --> B["ユーザーがリンクをクリック"] B --> C["?email=..."] C --> D["Turnint AIエージェントページ"] D --> E["ユーザー情報を自動取得"] ``` 1. HubSpot のメールに、パーソナライゼーショントークンを含む Turnint AI の URL を埋め込む 2. 配信時に `{{contact.email}}` などのトークンが連絡先ごとの値に展開される 3. ユーザーがリンクをクリックすると、Turnint AI のポータルが query parameter を読み取り、ゲートのフォームフィールドと一致する値を事前入力する 4. ゲートのフォームフィールドと一致するパラメータがあれば入力済み扱いとなり、ゲートの設定で `自動確認` オプションがアクティブの場合はゲートをスキップして自動でセッションを開始する ## 仕組み ### HubSpot のパーソナライゼーショントークン HubSpot のメールでは、本文や URL に連絡先プロパティを変数として埋め込めます。代表的なトークンは以下です。 | トークン | 値 | | -------------------------- | ---------------------- | | `{{contact.email}}` | 連絡先のメールアドレス | | `{{contact.firstname}}` | 名 | | `{{contact.lastname}}` | 姓 | | `{{contact.company}}` | 会社名 | | `{{contact.hs_object_id}}` | HubSpot Contact ID(数値) | | `{{contact.<内部名>}}` | カスタムプロパティ | HubSpot のカスタムプロパティを参照する場合は、ラベルではなくプロパティ設定画面の **Internal name**(内部名)を指定してください。 URL の query 文字列内に変数を含めた場合、HubSpot は配信時に自動で URL エンコードを行います。`encodeURIComponent` 相当の処理を二重に施す必要はありません。 ### Turnint AI 側での受け取り Turnint AI のポータル(`xxx.turnint.site`)は、URL の query parameter のうち、ゲートのフォームフィールドのキーと一致するパラメータを入力済みとして扱います。ゲートに含まれない query parameter はセッションのユーザーデータには保持されません。追加のコンテキストを保持したい場合は、ゲートフィールドとして定義するか、埋め込み時の `data-turnint-context` を使用してください。 詳細な内部仕様(ゲートとの一致ルール、`自動確認` の挙動)は [HubSpot ランディングページとの連携 > Turnint AI 側の設定](/ja/get-started/onboarding/hubspot-landing-page#turnint-ai-側の設定) を参照してください。 ## 推奨パラメータ メールから誘導する URL には、以下のパラメータを推奨します。 | パラメータ名 | HubSpot 変数式 | 必須 / 任意 | 説明 | | ----------- | -------------------------- | ------- | ------------------------------------------------------ | | `email` | `{{contact.email}}` | 必須 | 見込み顧客の identity key。Turnint AI のバックエンドで人物の突合に使用します | | `hubspotid` | `{{contact.hs_object_id}}` | 任意 | HubSpot Contact ID。セッションで利用したい場合は、同名のゲートフィールドを作成してください | | `firstname` | `{{contact.firstname}}` | 任意 | パーソナライズ表示/ゲート事前入力 | | `lastname` | `{{contact.lastname}}` | 任意 | 同上 | | `company` | `{{contact.company}}` | 任意 | 会社名フィールドの事前入力 | | `<カスタム>` | `{{contact.<内部名>}}` | 任意 | ゲートのフィールドキーと一致させると事前入力扱いになります | パラメータ名は、HubSpot のフィールド内部名と Turnint AI のゲートフィールドキーを揃えてください。 HubSpot Contact ID は `hubspotid` を推奨します。既存の URL で `hubspot_id`、`hs_contact_id`、`hscontactid` を使っている場合も、Turnint AI 側では `hubspotid` として扱われます。 ## URL 組み立て例 ### 基本形(プレーンテキストリンク) メール本文に貼り付ける URL の例です。HubSpot がトークンを連絡先ごとに展開して配信します。 ``` https://xxx.turnint.site/decks/xxx?email={{contact.email}}&firstname={{contact.firstname}}&company={{contact.company}}&hubspotid={{contact.hs_object_id}} ``` 配信後、実際にユーザーの元へ届くリンクは次のようになります(HubSpot が自動で URL エンコード)。 ``` https://xxx.turnint.site/decks/xxx?email=user%40example.com&firstname=%E5%A4%AA%E9%83%8E&company=%E6%A0%AA%E5%BC%8F%E4%BC%9A%E7%A4%BEABC&hubspotid=12345 # email = user@example.com, firstname = 太郎, company = 株式会社ABC, hubspotid = 12345 ``` ### HTML での記述 HubSpot のメールエディタで「リンクを挿入」する操作で URL を貼り付ければ、エディタ側でアンパサンド等のエスケープが適切に処理されます。HTML ソースを直接編集する場合のみ、`&` を `&` と書いてください。 ```html theme={null} AI コンシェルジュに相談する ``` ### 変数が空のときのフォールバック HubSpot のパーソナライゼーショントークンには既定値を指定できます。 ``` {{contact.firstname|default:"お客様"}} ``` ただし `email` のような identity key には既定値を設定しないでください。別人として識別されると本末転倒です。**`email` プロパティが未設定の連絡先には、本フローのリンクを送らない運用を推奨**します(HubSpot のリスト条件で除外できます)。 `hubspotid`(`{{contact.hs_object_id}}`)は連絡先に常に存在するため既定値は不要です。 ## HubSpot メールへの組み込み手順 ### マーケティングメール(Marketing Hub)の場合 1. メールエディタで本文を開き、「リンクを挿入」ダイアログを開く 2. URL 入力欄に[基本形](#基本形プレーンテキストリンク)の URL をそのまま貼り付ける 3. 必要に応じて「パーソナライズ」ボタンから `{{contact.email}}` などのトークンを挿入する 4. プレビュー機能で実際の連絡先を選び、展開後の URL が想定どおりかを確認する 5. テスト送信を自分宛に行い、リンクをクリックして `自動確認` によるゲートスキップ動作を検証する ### 1:1 セールスメール / Sequences の場合 Sales Hub の **Sequences** **Snippet** **Template** でも同じ変数式が利用できます。Sequences の自動配信では送信者ごとにトラッキング設定や差出人情報が異なる場合があるため、配信前にプレビューで URL を確認してください。 Connected Inbox 経由(Gmail / Outlook 個別送信)では、メールクライアント側のリンク短縮や安全リンク機能(例: Microsoft Defender Safe Links)でリンクがラップされる場合があります。受信側環境を考慮した検証を推奨します。 ### CTA ボタンの場合 HubSpot CTA の URL に変数を埋め込む場合、CTA 編集画面の **URL リダイレクト** モードで上記 URL を設定します。ただし CTA はメール外(ランディングページなど)でも再利用される可能性があり、その場合は `email={{contact.email}}` の値が空になります。**メール用とランディングページ用で CTA を分けるか、メール本文の通常リンクとして実装することを推奨**します。 ## Turnint AI 側の設定 ### ゲートのフィールドキー ダッシュボードでエージェントのゲートを設定する際、query parameter で渡したいフィールドのキーを HubSpot のプロパティ内部名と揃えてください。具体的な手順は [HubSpot ランディングページとの連携 > ゲートの設定](/ja/get-started/onboarding/hubspot-landing-page#ゲートの設定) を参照してください。 ## ハマりやすい注意点 * **二重 URL エンコード禁止** — HubSpot は配信時に自動でエンコードを適用します。変数を `encodeURIComponent` で囲ったり、`%` を手書きで含めないでください * **空文字列は prefill 失敗** — `email` 等が連絡先に未設定の場合、`?email=` のように空で展開されゲートのバリデーションを通らず、`autoconfirm` も発動しません。配信前に HubSpot のリスト条件で除外してください * **クリックトラッキング有効時のリダイレクト** — HubSpot のメールクリックトラッキングが有効な場合、リンクは中間 URL(`https://[portal].hs-sites.com/...` 等)を経由します。最終的に Turnint AI には正しく query parameter が渡りますが、メールクライアントのリンクプレビューでは中間 URL が見える点に留意してください * **Sandbox / 本番ポータルの差** — `hs_object_id` などの Contact ID は HubSpot ポータル単位で別空間です。Sandbox でテストした URL を本番運用で再利用しないでください * **メールクライアント側のリンク改変** — Gmail / Outlook の安全リンクラッピングや、社内プロキシによる URL 改変で query parameter が消失したり付加情報が混ざる可能性があります。ユーザー環境で再現する場合は環境固有の挙動として確認してください * **配信前のプレビュー必須** — 連絡先ごとに展開された URL を HubSpot のプレビューで必ず目視し、想定どおりの値が入っているか確認してください ## セキュリティ配慮 ### email を URL に含めることの設計上の整理 Turnint AI では、ユーザー識別のために `email` を URL の query parameter として渡すことを推奨しています。一見すると平文の連絡先情報を URL に載せることに抵抗を感じるかもしれませんが、この設計は次の前提に基づいています。 * HubSpot からのメール配信は TLS で行われ、HubSpot のクリックトラッキングを経由する場合のリダイレクトサーバーも HubSpot の信頼境界内にあります * Turnint AI のバックエンドでは、`email` は人物 / HubSpot コンタクトとの突合に用いるための受け渡しが必要です(識別に使われるキーは `name` `email` `phone` `company` `role` の 5 種に限定されています) ### Referrer-Policy と外部リンクの取り扱い Turnint AI のポータル URL には `email` などが含まれるため、ポータルページから外部サイトへ遷移する際、Referer ヘッダ経由でこれらの値が漏洩する懸念があります。エージェントセッション中はアウトバウンドリンクを設けない設計が前提のため通常は問題になりませんが、エージェントの応答に外部リンクを含める設計を採用する場合は、ポータルの HTML レスポンスに `Referrer-Policy: strict-origin-when-cross-origin` を最低ライン、より厳格な `strict-origin` または `same-origin` を望ましい設定として検討してください。 ### クリックトラッキングと URL 改変 HubSpot のメールクリックトラッキングが有効な場合、リンクは中間 URL を経由します。Turnint AI への最終的な query parameter は保持されますが、社内プロキシやメールセキュリティゲートウェイによる URL 改変で、リンクが破壊されたり余分なパラメータが追加されるケースが稀にあります。重要な配信の前にはテストアカウントで実配信検証を行ってください。 ## 関連ドキュメント * [HubSpot CRM 連携](/ja/integrations/crm.hubspot) — セッションデータの HubSpot コンタクトへの自動同期 * [HubSpot トラッキング連携](/ja/integrations/analytics.hubspot) — セッションイベントの HubSpot カスタム行動イベントとしての送信 * [トラッキングパラメータの自動保持](/ja/integrations/tracking-params) — UTM パラメータや広告クリック ID の自動引き継ぎ * [ウェブフック連携](/ja/integrations/webhook) — セッションデータの外部システムへのリアルタイム同期 # Salesforce Marketing Cloud メールとの連携 Source: https://docs.timothe.ai/ja/get-started/onboarding/marketing-cloud-email Salesforce Marketing Cloud Email Studio から配信するメールに Turnint AI のリンクを埋め込み、Subscriber 情報を引き継いでエージェント体験へ誘導する方法 Salesforce Marketing Cloud Engagement の Email Studio から配信するメールに Turnint AI のリンクを差し込み、Subscriber 情報(メールアドレス、SubscriberKey、会社名など)を URL の query parameter として引き継ぐことで、ゲートをスキップしたパーソナライズされたエージェント体験へ誘導できます。 Marketing Cloud の CloudPages(フォーム送信)からの誘導は別ドキュメントで解説しています。本ページはメール配信からの導線に特化した内容です。あわせて [Marketing Cloud CloudPages との連携](/ja/get-started/onboarding/marketing-cloud-landing-page) もご参照ください。 ## フロー ```mermaid theme={null} flowchart LR A["Email Studio 配信"] --> B["AMPscript で URL を組み立て"] B --> C["Subscriberがリンクをクリック"] C --> D["?email=...&sk=..."] D --> E["Turnint AIエージェントページ"] ``` 1. Email Studio のメールに、AMPscript または Personalization String を含む Turnint AI の URL を埋め込む 2. 配信時に `%%emailaddr%%` などの変数が Subscriber ごとの値に展開される 3. Subscriber がリンクをクリックすると、Marketing Cloud の Link Wrapping を経由して Turnint AI のポータルに到達する 4. Turnint AI のポータルが query parameter を読み取り、ゲートのフォームフィールドと一致する値を事前入力する 5. ゲートのフォームフィールドと一致するパラメータがあれば入力済み扱いとなり、ゲートの設定で `自動確認` オプションがアクティブの場合はゲートをスキップして自動でセッションを開始する ## 仕組み ### AMPscript と Personalization String Marketing Cloud のメール本文では、動的な値を埋め込む手段として 2 系統が用意されています。 * **Personalization String** — `%%emailaddr%%` のように `%%fieldname%%` 形式で Subscriber の属性値や送信メタ情報を直接展開する * **AMPscript** — `%%[ ... ]%%` または `%%=Function()=%%` 形式で、変数代入・条件分岐・関数呼び出しを伴うロジックを記述する URL のクエリ文字列に Personalization String を直接書くだけでも値置換は行われますが、`@` 記号や日本語などの非 ASCII を安全に渡すには AMPscript の `URLEncode()` でラップするのが安全です。クリックトラッキングを残したい場合は、組み立てた URL を `RedirectTo()` 経由で `` に注入する必要があります。 ### 代表的な Personalization String / Built-in Variables | 文字列 | 値 | | ------------------------------------------ | ------------------------------------ | | `%%emailaddr%%` | Subscriber のメールアドレス | | `%%subscriberkey%%` / `%%_subscriberkey%%` | SubscriberKey(推奨識別子) | | `%%firstname%%` / `%%lastname%%` | プロファイル属性 | | `%%jobid%%` | 送信ジョブ ID | | `%%_messagecontext%%` | `PREVIEW`(テスト送信)/ `LIVE`(実配信)の判定に使える | Profile Attribute やプリファレンスとして登録したカスタム属性も、`%%属性名%%` の形式で参照できます。属性名は Setup → Data Management → Profile Management で確認できます。 ### Turnint AI 側での受け取り Turnint AI のポータル(`xxx.turnint.site`)は、URL の query parameter のうち、ゲートのフォームフィールドのキーと一致するパラメータを入力済みとして扱います。ゲートに含まれない query parameter はセッションのユーザーデータには保持されません。追加のコンテキストを保持したい場合は、ゲートフィールドとして定義するか、埋め込み時の `data-turnint-context` を使用してください。 詳細な内部仕様(ゲートとの一致ルール、`自動確認` の挙動)は [Marketing Cloud CloudPages との連携 > Turnint AI 側の設定](/ja/get-started/onboarding/marketing-cloud-landing-page#turnint-ai-側の設定) を参照してください。 ## 推奨パラメータ メールから誘導する URL には、以下のパラメータを推奨します。 | パラメータ名 | AMPscript 値 | 必須 / 任意 | 説明 | | ----------- | --------------------------------------- | ------- | ---------------------------------------------------------- | | `email` | `URLEncode(emailaddr, true, true)` | 必須 | 見込み顧客の identity key。Turnint AI のバックエンドで人物の突合に使用します | | `sk` | `URLEncode(_subscriberkey, true, true)` | 推奨 | SubscriberKey。EmailAddress と異なり変動しないため、重複検知や結合キーとして安定しています | | `firstname` | `URLEncode(firstname, true, true)` | 任意 | パーソナライズ表示/ゲート事前入力 | | `lastname` | `URLEncode(lastname, true, true)` | 任意 | 同上 | | `company` | `URLEncode(company, true, true)` | 任意 | 会社名フィールドの事前入力 | | `<カスタム>` | `URLEncode(Attribute, true, true)` | 任意 | ゲートのフィールドキーと一致させると事前入力扱いになります | パラメータ名は、Marketing Cloud の Profile Attribute 名や Data Extension の列名ではなく、Turnint AI のゲートフィールドキーと揃えてください。 ## URL 組み立て例 ### 基本形(AMPscript で URL を構築 → `RedirectTo()` で href に注入) メール本文の HTML エディタに AMPscript ブロックを置き、`RedirectTo()` でラップしたリンクを記述します。 ``` %%[ /* 動的な URL を組み立てる */ SET @email = URLEncode(emailaddr, true, true) SET @subkey = URLEncode(_subscriberkey, true, true) SET @company = URLEncode(company, true, true) SET @url = Concat( "https://xxx.turnint.site/decks/xxx", "?email=", @email, "&sk=", @subkey, "&company=", @company, "&autoconfirm=true", "&utm_source=mc&utm_medium=email" ) ]%% AI コンシェルジュに相談する ``` 動的に組み立てた URL を `` に直接書くと、Marketing Cloud のクリックトラッキング対象から外れてレポートに数値が出ません。**動的な href には必ず `RedirectTo()` を噛ませて**ください。 ### 暗号化 URL を経由するパターン(`CloudPagesURL()`) メール本文の URL に PII を平文で乗せたくない場合は、`CloudPagesURL()` で暗号化された `?qs=...` 形式のリンクを生成し、CloudPage 側で復号して Turnint へ橋渡しする構成を取ります。 ``` %%[ /* CloudPage ID = 123 に email と sk を暗号化して渡す */ SET @cpUrl = CloudPagesURL(123, "email", emailaddr, "sk", _subscriberkey) ]%% AI コンシェルジュに相談する ``` CloudPage 側では [Marketing Cloud CloudPages との連携 > C. AMPscript で受信パラメータから動的リダイレクト URL を生成](/ja/get-started/onboarding/marketing-cloud-landing-page#c-ampscript-で受信パラメータから動的リダイレクト-url-を生成) のスニペットで `RequestParameter()` により復号し、Turnint AI へリダイレクトします。 ### 変数が空のときのフォールバック Personalization String は値が未設定の Subscriber に対して空文字列に展開されます。テスト送信用の Subscriber や、プロファイル未登録の連絡先で URL が破損するのを防ぐには、AMPscript の `Empty()` で防御してください。 ``` %%[ SET @email = emailaddr IF Empty(@email) THEN /* テスト送信用などのフォールバック */ SET @email = "anonymous@turnint.ai" ENDIF SET @url = Concat( "https://xxx.turnint.site/decks/xxx", "?email=", URLEncode(@email, true, true), "&autoconfirm=true" ) ]%% 登録する ``` ただし `email` のような identity key にダミー値を設定したリンクが本番に流れると別人として識別されます。フォールバック付与は **テスト配信時のみ**にとどめるか、`%%_messagecontext%%` で本番分岐してください。 ``` %%[ IF _messagecontext == "PREVIEW" THEN SET @email = "preview@turnint.ai" ELSE SET @email = emailaddr ENDIF ]%% ``` ## Email Studio への組み込み手順 ### Content Builder のメールテンプレートに AMPscript を配置する 1. Email Studio → Content → Content Builder で対象のメールを開く 2. レイアウトに **HTML** または **Free Form** ブロックを追加する 3. 上記の AMPscript スニペットをそのまま貼り付け、`https://xxx.turnint.site/decks/xxx` を実際のエージェントページ URL に置き換える 4. プレビュー機能で実際の Subscriber を選び、`%%=RedirectTo(@url)=%%` が正しい URL に展開されているか、リンク先のクエリストリングが意図どおりかを確認する 5. テスト送信を自分宛に行い、リンクをクリックして `自動確認` によるゲートスキップ動作を検証する ### 全リンクへの UTM 自動付与 特定のキャンペーンやチャネル識別子をすべての配信リンクに一律で付与したい場合は、**Setup → Data Management → Parameter Management** で `utm_source=mc` などのパラメータを定義してください。AMPscript ブロック内で個別に書く必要がなくなり、運用ミスを減らせます。 ### Sender Authentication Package(SAP)と独自ドメイン Marketing Cloud のクリックトラッキングが有効な場合、リンクは既定で `click.exct.net` を経由します。`click.example.com` のような独自サブドメインに変更したい場合は SAP の契約と DNS 設定が必要です。受信側のメールセキュリティスキャンや迷惑メール判定の信頼性が向上します。 ## ハマりやすい注意点 * **`
` 直接埋め込み不可** — Outlook(デスクトップ)/ Gmail / Yahoo Mail はセキュリティ上の理由から `` `` ` ); } ``` | 属性 | 値の例 | 説明 | | ------------------- | ------------------------ | ------------------------------------------------ | | `data-turnint-id` | `pub_xxxxxxxxxxxxxxxx` | 開きたいコンテンツの ID。ダッシュボードから取得 | | `data-turnint-type` | `fullscreen` / `popover` | 開き方。`fullscreen` は画面全体を覆うモーダル、`popover` はチャットバブル | 埋め込みの UI 言語は embed script 側の `data-turnint-locale` で指定します。複数のボタンやインライン埋め込みを同じページに置く場合も、script は 1 度だけ読み込めば十分です。 React Router の `` でクライアントサイド遷移したあとにマウントされたボタンも、embed script が自動検知して起動可能になります。ルート変更のたびに手動で再マウントする必要はありません。 ## パターン B: ページ表示時に自動で開く 「LP の CTA から専用ページに飛ばし、着地した瞬間に埋め込みを立ち上げたい」というユースケース向けのパターンです。専用のページコンポーネントを 1 つ作り、`useEffect` 内で `window.turnintai.open()` を呼びます。 ```tsx theme={null} // src/pages/Start.tsx import { useEffect } from "react"; type TurnintAI = { open(config: { id?: string type?: "fullscreen" locale?: "ja" | "en" | "auto" onClose?: () => void }): void }; type WindowWithTurnintAI = Window & { turnintai?: TurnintAI }; export function StartPage() { useEffect(() => { const openWhenReady = () => { const w = window as WindowWithTurnintAI; if (w.turnintai) { w.turnintai.open({ id: "pub_xxxxxxxxxxxxxxxx", }); return; } requestAnimationFrame(openWhenReady); }; openWhenReady(); }, []); return
; } ``` React Router を使う場合は、このコンポーネントを `/start` などのルートに割り当てます。 ```tsx theme={null} // src/App.tsx(例) import { Route, Routes } from "react-router-dom"; import { StartPage } from "./pages/Start"; export default function App() { return ( } /> {/* 他のルート */} ); } ``` embed script は `async` で読み込んでいるため、`useEffect` の発火時点ではまだ `window.turnintai` が定義されていない可能性があります。`requestAnimationFrame` でフレームごとに再チェックすることで、ロード完了直後に確実に `open()` を呼び出せます。 `type: "fullscreen"` 以外の指定は現状サポートされていません。インライン表示が必要な場合はパターン C を使ってください。 ## パターン C: インライン表示 ページ内の特定領域に埋め込みを表示したい場合は、`
` などに `data-turnint-*` 属性を付けます。`data-turnint-type="inline"` を指定すると、その要素の中に埋め込みが描画されます。 ```tsx theme={null} export function InlineEmbed() { return (
); } ``` 要素の幅は CSS 側で確保してください(埋め込みは親要素のサイズに合わせて描画されます)。 ## TypeScript で型を効かせる `window.turnintai` の公式型定義はパッケージとしては配信していないため、プロジェクト側で型を宣言します。`src/turnintai.d.ts` や `types/turnintai.d.ts` を作成し、以下を貼り付けてください。 ```ts theme={null} // src/turnintai.d.ts export {} declare global { interface Window { turnintai?: { open: (config: { id?: string type?: "fullscreen" endpoint?: string locale?: "ja" | "en" | "auto" onClose?: () => void }) => void } } } ``` Vite では `src/` 配下に置けば `tsconfig` の `include` に含まれ、自動的に読み込まれます。 ## 関連ドキュメント * [クイックスタート](/ja/get-started/quickstart) — 共有方法と埋め込み方式の全体像 * [Nuxt への組み込み](/ja/get-started/onboarding/nuxt) — Vue / Nuxt 向けの同様の手順 * [Google Tag Manager 経由で導入する](/ja/get-started/onboarding/google-tag-manager) — GTM のカスタム HTML タグで導入する手順 * [トラッキングパラメータの自動保持](/ja/integrations/tracking-params) — UTM などの引き継ぎ # クイックにはじめる Source: https://docs.timothe.ai/ja/get-started/quickstart Turnint AI エージェントを最短でセットアップして公開するまでの手順 Turnint AI を使って、PDF などの資料を AI エージェントに変換し、Web サイトに導入するまでの流れを説明します。 ## ステップ 1: サインアップ・ワークスペース作成 まず、Turnint AI にサインアップしてワークスペースを作成します。 1. [Turnint AI](https://turnint.ai) にアクセスし、アカウントを作成します 2. ログイン後、ワークスペース名を入力して作成します ## ステップ 2: 資料をインポート エージェントに学習させたい資料(pdf)をアップロードします。アップロードされた資料は AI が自動的に解析・インデックス化します。 1. ダッシュボードの **インポート** メニューを開きます 2. 営業資料、サービス資料、会社説明資料などのPDFファイルを選択します 3. エージェント作成ボタンをクリックします 4. 約20分程度、処理が完了するまで待ちます ## ステップ 3: エージェントを導入する 処理が完了したら、エージェントを Webサイトや SNS で公開できます。 エージェント画面の **右上の共有ボタン** をクリックすると、リンク共有と埋め込みの導入方法が表示されます。 ### リンク共有 エージェントの専用URLを発行して共有する方法です。 **ユースケース**: SNS への投稿、メールやチャットでの共有、QR コードの作成など、手軽にエージェントを共有したい場合に最適です。 共有ボタンから **リンク** を選択し、表示された URL をコピーして共有します。 ### 要素をクリックしてポップアップ ボタンクリックでエージェントをポップアップ表示する方法です。 **ユースケース**: 既存の Web サイトにエージェントを追加したい場合に最適です。訪問者はページを離れることなくエージェントと対話できます。 共有ボタンから **埋め込み** を開き、埋め込み種別で **要素をクリックしてポップアップ** を選択します。表示されたコードを Web サイトの HTML に貼り付けます。 #### ポップアップモード 画面の右下などにチャットウィジェットとしてポップアップ表示します。 ### 要素をクリックしてフルスクリーン ボタンクリックでエージェントを画面全体に表示します。エージェント専用のランディングページや、特定のページ全体をエージェント体験にしたい場合に最適です。 共有ボタンから **埋め込み** を開き、埋め込み種別で **要素をクリックしてフルスクリーン** を選択します。表示されたコードを Web サイトの HTML に貼り付けます。 ### インライン埋め込み ページ内の特定のセクションにエージェントを配置する方法です。 **ユースケース**: FAQ セクションや製品紹介ページの一部など、ページの特定の領域にエージェントを組み込みたい場合に最適です。 共有ボタンから **埋め込み** を開き、埋め込み種別で **インライン埋め込み** を選択します。表示されたコードを配置したい場所の HTML に貼り付けます。 ### GTM 経由でインライン埋め込み Google Tag Manager のカスタム HTML タグだけで、ページ内にエージェントをインライン表示する方法です。 **ユースケース**: サイトのテンプレートや HTML を直接編集できない場合、またはタグ管理の運用フローに合わせて導入したい場合に適しています。 共有ボタンから **埋め込み** を開き、埋め込み種別で **GTM 経由でインライン埋め込み** を選択します。詳しい設定手順は [Google Tag Manager 経由で導入する](/ja/get-started/onboarding/google-tag-manager) を参照してください。 # Agentic ABM Source: https://docs.timothe.ai/ja/gtm/account-based-marketing Agentic AI を活用した ABM(Account-Based Marketing)で、提案書を「生きたエージェント」に変える Turnint AI は、静的な提案書を**生きたエージェント**に変えます。アカウント専用の資料をアップロードするだけで、見込み顧客の社内を自律的に回り、各ステークホルダーに合わせた営業を行うエージェントが生まれます。 ## ABM(Account-Based Marketing)とは ABM(Account-Based Marketing)とは、特定のターゲットアカウントに対して、個別最適化されたマーケティング・営業を行う戦略です。BtoB の大型案件では、意思決定に複数のステークホルダーが関与するため、アカウント単位でのアプローチが不可欠です。 ### 従来の ABM の課題 * **提案書は「死んだドキュメント」** — 渡した瞬間から劣化が始まる。読む人の疑問に答えられず、文脈も伝わらない * **社内回覧で情報が欠落する** — 最初に受け取った人の文脈は、社内で共有される際に失われる * **カスタマイズの人的コスト** — アカウントごとに提案書を作り込むには営業リソースが必要 * **社内の反応が見えない** — 誰が読んだのか、何に関心を持ったのか、何を懸念しているのかが分からない ```mermaid theme={null} flowchart LR A[営業] --> B[提案書を作成] B --> C[担当者に送付] C --> D[社内で回覧] D --> E((反応が見えない)) D --> F[質問が出ても回答できない] F --> G((検討停滞)) ``` ## Agentic ABM — Turnint AI のアプローチ Turnint AI では、アカウント専用の提案資料をアップロードしてエージェントを作成し、リンクを共有するだけで ABM が始まります。 ```mermaid theme={null} flowchart LR A[営業] --> B[提案資料をアップロード] B --> C[アカウント専用エージェント生成] C --> D[リンクを共有] D --> E[経営層がアクセス] D --> F[技術担当がアクセス] D --> G[現場担当がアクセス] E --> H[それぞれの関心に合わせて対話] F --> H G --> H H --> I[全員の対話データを取得] ``` 提案書はもう「渡して終わり」ではありません。見込み顧客の社内で、各ステークホルダーに合わせて自律的に営業を続けるエージェントになります。 ### ステークホルダーごとの対話 同じエージェントでも、対話する相手に合わせてヒアリングと説明の内容が変わります。 * **経営層** — 投資対効果や事業インパクトに関する質問に対応し、経営視点での価値を説明 * **技術担当** — アーキテクチャ、セキュリティ、既存システムとの連携といった技術的な質問に回答 * **現場担当** — 日常業務への影響、運用フロー、導入の手間といった実務面の懸念を解消 **一つの提案が、見る人に合わせて自律的に営業する。** これが Agentic ABM の本質です。 ### 社内力学の可視化 アカウント内の全ステークホルダーとの対話データが記録されるため、営業チームはこれまで見えなかった社内の検討状況を把握できます。 * **誰がアクセスしたか** — 意思決定に関与しているステークホルダーの特定 * **何に関心を持ったか** — 各ステークホルダーの関心領域と優先事項 * **何を懸念しているか** — 導入の障壁となりうるポイントの事前把握 * **検討の進捗** — アカウント全体としての温度感 ### CRM 連携 セッションデータは Salesforce, HubSpot や Clay に自動同期されます。アカウント単位でのエンゲージメントを CRM 上で一元管理し、営業チームが既存のワークフローの中で活用できます。 ## これからの展望 従来の ABM は「アカウントごとにコンテンツをカスタマイズして届ける」戦略でした。しかし、届けた後のことは制御できませんでした。提案書が社内でどう読まれ、誰がどう反応し、何が障壁になっているのか — これらはブラックボックスでした。 Agentic ABM は、この構造を根本から変えます。提案書は渡した後も営業し続け、各ステークホルダーの文脈に合わせて対話し、その過程で得られるデータが営業チームにフィードバックされる。 ABM の未来は、「アカウントにコンテンツを届ける」から「アカウントの中でエージェントが営業する」へと向かっています。 # Agentic GTM エンリッチメント Source: https://docs.timothe.ai/ja/gtm/gtm-enrichment AI エージェントとの対話から得られるファーストパーティデータで、GTM 戦略を強化する Turnint AI の AI エージェントは、プリセールスエージェント として見込み顧客と対話する中で、従来の手法では得られなかった**バイアスのないインサイト**を自然に取得します。フォーム入力やサードパーティデータでは分からなかった、見込み顧客の本音の課題や関心を、対話データとしてキャプチャします。 ## GTM エンリッチメントとは GTM エンリッチメント(Go-To-Market Enrichment)とは、マーケティングやセールスの意思決定に必要なデータを充実させるプロセスです。リードの属性情報(企業規模、業種、役職など)に加えて、関心領域、課題、購買意欲といった定性的な情報を付加することで、より精度の高い GTM 活動を実現します。 ### 従来のエンリッチメントの手法と限界 | 手法 | 取得できるデータ | 限界 | | ------------ | ------------------ | -------------------- | | フォーム入力 | 名前、メール、会社名、役職 | 入力項目を増やすとコンバージョン率が低下 | | サードパーティデータ | 企業規模、業種、テクノロジースタック | 個人の関心や課題は分からない | | Web 行動トラッキング | ページ閲覧、滞在時間、クリック | 「なぜ見たか」の意図は推測でしかない | | メールエンゲージメント | 開封率、クリック率 | 表面的な関心指標に留まる | これらの手法に共通する課題は、**見込み顧客の「本音」にアクセスできない**ことです。行動データからは「何をしたか」は分かりますが、「なぜそうしたか」「本当は何に困っているか」は分かりません。 ## 対話データから得られるインサイト この領域は **Conversational Intelligence(会話型インテリジェンス)** と呼ばれ、営業活動や顧客とのやり取りの中から AI・分析技術を使ってインサイトを抽出する手法です。Gong、Chorus(ZoomInfo)、Clari などが代表的なプレイヤーで、主に商談録音の分析やセールスコーチングに活用されています。Turnint AI は、この概念をプリセールス段階の AI エージェント対話に適用しています。 ```mermaid theme={null} flowchart TB A[見込み顧客が AI エージェントと対話] --> B[明示的データ] A --> C[暗黙的データ] B --> D[課題・ペインポイント] B --> E[比較対象・要件] B --> F[タイムライン・意思決定者] C --> G[関心トピック] C --> H[検討の深さ] C --> I[エンゲージメント強度] D --> J[エンリッチされたリードデータ] E --> J F --> J G --> J H --> J I --> J J --> K[CRM 同期] J --> L[セッションサマリー] J --> M[リアルタイムモニタリング] ``` Turnint AI の AI エージェントとの対話は、見込み顧客が自らの文脈で、自分の言葉で課題や関心を語る場です。これは、従来の手法では得られなかったファーストパーティデータの新しいソースとなります。 ### 対話から取得できるデータ **明示的なデータ(見込み顧客が直接語る内容)** * 現在抱えている課題や ペインポイント * 検討している解決策や比較対象 * 導入の条件やタイムライン * 社内の意思決定プロセスや関係者 **暗黙的なデータ(対話の行動パターン)** * 関心の高いトピック(どのスライドで質問が増えたか) * 検討の深さ(一般的な質問 vs 具体的な質問) * エンゲージメントの強さ(セッション時間、チャットターン数) * 離脱ポイント(どこで対話が終了したか) ### なぜ「バイアスのないインサイト」が得られるのか AI エージェントとの対話は、人間の営業担当者との対話とは異なる特性を持ちます。 * **心理的安全性** — AI 相手であるため、「まだ予算が確保できていない」「上司を説得できるか分からない」といった、営業担当者には言いにくい本音を語りやすい * **自分のペースで対話** — 急かされることなく、自分の関心に沿って質問できるため、本当に知りたいことを聞く * **判断のための対話** — 「売り込まれる」というプレッシャーがないため、純粋に検討を進めるための対話になる ## Agentic エンリッチメント — Turnint AI のアプローチ ### セッションサマリー 各セッション終了後、AI が対話内容を自動で要約します。見込み顧客の関心領域、主な質問、課題感、検討段階が構造化された形で出力されるため、営業チームは一目で状況を把握できます。 ### リアルタイムモニタリング ダッシュボードで進行中のセッションをリアルタイムに確認できます。高エンゲージメントのセッションを検知し、ホットリードに対して即座にアクションを取ることが可能です。 ### セッションリプレイ 過去のセッションをタイムラインで再生できます。スライド遷移、チャットメッセージ、CTA インタラクションを時系列で確認し、見込み顧客の体験を詳細に追跡できます。 ### CRM 連携による自動同期 エンリッチされたデータは Salesforce, HubSpot や Clay に自動同期されます。 * **Salesforce** — コンタクトの自動作成 + セッション内容をタスク/活動として記録 * **HubSpot** — コンタクトノートとしてセッションサマリーとトランスクリプトを同期 * **Clay** — セッションデータを Clay に連携し、エンリッチメントワークフローに組み込み 営業チームは普段の CRM ワークフローの中で、対話から得られた インサイト にアクセスできます。 ### Webhook / Slack / Discord 連携 セッションイベントをリアルタイムで外部システムに通知できます。Slack チャンネルにセッション完了通知を送ったり、Webhook で自社の分析基盤にデータを流すことが可能です。 ## これからの展望 GTM エンリッチメントは、「外部データを買って付加する」時代から、「対話を通じて直接取得する」時代へと移行しつつあります。 サードパーティ Cookie の廃止やプライバシー規制の強化により、外部データへの依存はますます難しくなっています。一方で、AI エージェントとの対話から得られるファーストパーティデータは、見込み顧客自身が提供する情報であり、プライバシーの観点でも堅牢です。 Agentic AI が プリセールス の役割を担うことで、すべてのリードとの接点がエンリッチメントの機会になります。フォームに入力された 5 項目ではなく、対話の中で自然に明らかになる課題、関心、温度感、検討状況。このデータが GTM 戦略全体—ターゲティング、メッセージング、セグメンテーション、営業プロセス—を強化します。 エンリッチメントの未来は、「データを集める」から「対話を通じて理解する」へと向かっています。 # Agentic リードジェネレーション Source: https://docs.timothe.ai/ja/gtm/lead-generation Agentic AI を活用したリードジェネレーションの新しいアプローチ Turnint AI は、従来の「資料をダウンロードさせる」リードジェネレーションを、「AI エージェントが案内する」インタラクティブな体験に変えます。 見込み顧客は資料を渡されて一人で読むのではなく、AI エージェントと対話しながら自分に必要な情報にたどり着きます。この体験そのものが、より質の高いリードを生み出します。 ## リードジェネレーションとは リードジェネレーション(Lead Generation)とは、自社の製品やサービスに関心を持つ見込み顧客(リード)を獲得するプロセスです。BtoB マーケティングにおいては、ホワイトペーパーや製品資料のダウンロード、ウェビナー参加、問い合わせフォームの送信などが主な獲得チャネルとなっています。 しかし、従来のリードジェネレーションには構造的な課題があります。 * **コンバージョン率の低さ** — 資料ダウンロード後に商談化するのは多くの場合 **2〜10%** に留まる(業種・コンテンツにより異なる) * **情報の非対称性** — 企業側はリードの関心度が分からず、リード側は自社に合うかが分からない * **フォローアップの遅延** — ダウンロード後 5 分以内の対応と 30 分後では、コンバージョン率に 20 倍の差がある ## 従来のアプローチの限界 従来のリードジェネレーションは「コンテンツを渡す → フォーム情報を得る」という一方向のモデルです。 ```mermaid theme={null} flowchart LR A[見込み顧客] --> B[フォーム入力] B --> C[資料DL] C --> D((離脱 90〜98%)) B --> E[企業: リード情報を取得] E --> F[関心が不明] F --> G[一律のフォローアップ] G --> H((商談化 2〜10%)) ``` この構造では、見込み顧客が「資料を読んだけど、自社に当てはまるか分からない」と感じた瞬間に検討が止まります。企業側も、誰が本気で検討しているのか判断する材料がありません。 ## Agentic リードジェネレーション — Turnint AI のアプローチ Turnint AI は、資料配布の体験そのものを変えることで、リードジェネレーションの質と量を同時に向上させます。 ```mermaid theme={null} flowchart LR A[見込み顧客] --> B[AI エージェントにアクセス] B --> C[対話しながら資料を閲覧] C --> D[課題・関心を自然に把握] D --> E[Agentic CTA 提示] E --> F((デモ予約・問い合わせ)) D --> G[企業: エンリッチされたリード情報] ``` ### フォームゲーティング セッション開始前にフォームを表示し、リード情報を取得します。名前、メールアドレス、会社名、電話番号など、必要なフィールドを柔軟に設定できます。 見込み顧客は「資料をダウンロードする」のではなく「AI エージェントに案内してもらう」ためにフォームを入力するため、体験の期待値が異なります。 ### プログレッシブゲーティング 最初からフォームを出すのではなく、一定のエンゲージメント(チャットのやり取り回数や閲覧スライド数)に達した時点でフォームをトリガーします。 見込み顧客がすでに対話を通じて関心を持った状態でフォームが表示されるため、入力率が高くなります。「まず体験してもらい、興味を持ったら情報を取得する」という自然な流れです。 ### ポータルと埋め込みウィジェット リードとの接点を最大化するための配信方法が用意されています。 * **ポータル** — 複数のエージェントをブランド付きサイトで公開。カスタムドメインにも対応 * **埋め込みウィジェット** — ` ``` # Braze 連携 Source: https://docs.timothe.ai/ja/integrations/analytics.braze Turnint AI のセッションイベントを Braze に送信する方法 セッションイベントを [Braze](https://www.braze.co.jp) のカスタムイベントとして自動送信します。Braze のキャンペーンやキャンバスのトリガーに活用できます。 ## 検出条件 `window.braze` がオブジェクトで、`braze.logCustomEvent` が関数として存在する場合に検出されます。 ## 送信方法 ```javascript theme={null} braze.logCustomEvent("turnint_started", { type: "started" }); ``` ## ヘッドスクリプト設定 ポータルの **ヘッドスクリプト** に Braze の Web SDK 初期化スニペットを貼り付けてください。API キーと SDK エンドポイントは Braze のダッシュボードから取得できます。 ```html theme={null} ``` # FullStory 連携 Source: https://docs.timothe.ai/ja/integrations/analytics.fullstory Turnint AI のセッションイベントを FullStory に送信する方法 セッションイベントを [FullStory](https://www.fullstory.com) のカスタムイベントとして自動送信します。セッションリプレイと合わせて、ユーザー行動の文脈を把握できます。 ## 検出条件 `window.FS` がオブジェクトで、`FS.event` が関数として存在する場合に検出されます。 ## 送信方法 ```javascript theme={null} FS.event("turnint_started", { type: "started" }); ``` ## ヘッドスクリプト設定 ポータルの **ヘッドスクリプト** に FullStory のスニペットを貼り付けてください。スニペットは FullStory の **Settings** > **Data Capture & Privacy** > **Data Capture** から取得できます。 # Google Analytics 4 連携 Source: https://docs.timothe.ai/ja/integrations/analytics.ga4 Turnint AI のセッションイベントを Google Analytics 4 (GA4) に送信する方法 セッションイベントを [GA4](https://marketingplatform.google.com/intl/ja/about/analytics/) のカスタムイベントとして自動送信します。 ## 検出条件 `window.gtag` が関数として存在する場合に検出されます。 ## 送信方法 ```javascript theme={null} gtag("event", "turnint_started", { type: "started" }); ``` GA4 と GTM は排他的に扱われます。`gtag` が検出された場合、`dataLayer` への重複プッシュは行いません。 ## ヘッドスクリプト設定 ポータルの **ヘッドスクリプト** に以下を貼り付けてください。`G-XXXXXXXXXX` はご自身の測定 ID に置き換えてください。 ```html theme={null} ``` ## クロスドメイン計測 自社サイト(例: `example.com`)とポータルのドメイン(例: `subdomain.turnint.site`)間でユーザーセッションを一貫して計測するには、GA4 のクロスドメイン設定が必要です。設定しない場合、ポータルへの遷移が新規セッションとして扱われ、コンバージョンの参照元が正しく記録されません。 1. GA4 の **管理** > **データストリーム** でウェブストリームを選択 2. **タグ設定を行う** > **ドメインの設定** を開く 3. **条件を追加** をクリックし、ポータルのドメインを追加: * マッチタイプ: **含む** * ドメイン: `subdomain.turnint.site`(または独自ドメインを設定している場合はそのドメイン) 自社サイトとポータルの両方で**同じ測定 ID**(`G-XXXXXXXXXX`)を使用してください。異なる測定 ID を使用するとクロスドメイン計測は機能しません。 ## GA4 でのカスタムイベント登録 Turnint AI のイベントをレポートやオーディエンスで活用するには、GA4 にカスタムイベントとして登録する必要があります。 1. GA4 の **管理** > **データの表示** > **イベント** を開く 2. **イベントを作成** をクリック 3. 以下のイベントを登録: | カスタムイベント名 | 説明 | | ------------------------- | --------------------------- | | `turnint_started` | セッション開始 | | `turnint_ended` | セッション終了 | | `turnint_slide_viewed` | スライド閲覧 | | `turnint_action_executed` | アクション実行(CTA クリックなど) | | `turnint_message_sent` | メッセージ送信 | | `turnint_context_updated` | ゲート(フォームなど)を通じてユーザー情報が識別された | `turnint_action_executed` をコンバージョンとしてマークすることで、CTA のコンバージョン率を計測できます。 ## GA4 での確認方法 1. **管理** > **DebugView** でリアルタイムにイベントを確認 2. **レポート** > **エンゲージメント** > **イベント** で `turnint_` プレフィックスのイベントを確認 # Google Tag Manager 連携 Source: https://docs.timothe.ai/ja/integrations/analytics.gtm Turnint AI のセッションイベントを Google Tag Manager (GTM) の dataLayer に送信する方法 セッションイベントを [GTM](https://marketingplatform.google.com/intl/ja/about/tag-manager/) の `dataLayer` にプッシュします。GTM のトリガーやタグを使って、任意の配信先に転送できます。 ## 検出条件 `window.dataLayer` が配列として存在し、かつ `window.gtag` が未定義の場合に検出されます。 GA4 の `gtag` スニペットは内部的に `dataLayer` を使用します。`gtag` が検出された場合は GA4 として扱い、`dataLayer` への直接プッシュは行いません。これにより二重カウントを防止しています。 ## 送信方法 ```javascript theme={null} dataLayer.push({ event: "turnint_started", type: "started" }); ``` ## ヘッドスクリプト設定 ポータルの **ヘッドスクリプト** に以下を貼り付けてください。`GTM-XXXXXXX` はご自身のコンテナ ID に置き換えてください。 ```html theme={null} ``` ## クロスドメイン計測 自社サイト(例: `example.com`)とポータルのドメイン(例: `subdomain.turnint.site`)間でユーザーセッションを一貫して計測するには、クロスドメインの設定が必要です。設定しない場合、ポータルへの遷移が新規セッションとして扱われます。 ### GA4 タグを使用している場合 1. GTM で **GA4 設定タグ**を開く 2. **タグの設定** > **設定フィールド** に以下を追加: * フィールド名: `linker` * 値: `{"domains": ["example.com", "subdomain.turnint.site"]}` または、GA4 の管理画面からも設定できます: 1. GA4 の **管理** > **データストリーム** でウェブストリームを選択 2. **タグ設定を行う** > **ドメインの設定** を開く 3. ポータルのドメインを追加 自社サイトとポータルで**同じ GA4 測定 ID** を使用してください。 ## カスタムイベント一覧 Turnint AI が `dataLayer` にプッシュするイベントは以下のとおりです。 | イベント名 | 説明 | | ------------------------- | --------------------------- | | `turnint_started` | セッション開始 | | `turnint_ended` | セッション終了 | | `turnint_slide_viewed` | スライド閲覧 | | `turnint_action_executed` | アクション実行(CTA クリックなど) | | `turnint_message_sent` | メッセージ送信 | | `turnint_context_updated` | ゲート(フォームなど)を通じてユーザー情報が識別された | ## GTM での設定例 ### トリガー 1. **トリガー** > **新規** > **カスタムイベント** 2. イベント名に `turnint_action_executed` を指定(正規表現で `turnint_.*` も可) ### タグ 作成したトリガーを使って、GA4 イベントタグや他の配信先タグを設定できます。 `turnint_action_executed` を GA4 のコンバージョンイベントとして転送することで、CTA のコンバージョン率を計測できます。 # Heap 連携 Source: https://docs.timothe.ai/ja/integrations/analytics.heap Turnint AI のセッションイベントを Heap に送信する方法 セッションイベントを [Heap](https://www.heap.io) のカスタムイベントとして自動送信します。 ## 検出条件 `window.heap` がオブジェクトで、`heap.track` が関数として存在する場合に検出されます。 ## 送信方法 ```javascript theme={null} heap.track("turnint_started", { type: "started" }); ``` ## ヘッドスクリプト設定 ポータルの **ヘッドスクリプト** に以下を貼り付けてください。`YOUR_APP_ID` はご自身のアプリ ID に置き換えてください。 ```html theme={null} ``` # HubSpot トラッキング連携 Source: https://docs.timothe.ai/ja/integrations/analytics.hubspot Turnint AI のセッションイベントを HubSpot のカスタム行動イベントとして送信する方法 セッションイベントを [HubSpot](https://www.hubspot.jp) のカスタム行動イベント(Custom Behavioral Events)として自動送信します。 これは HubSpot のクライアントサイドトラッキング連携です。サーバーサイドの CRM 連携については [HubSpot CRM 連携](/ja/integrations/crm.hubspot) を参照してください。 ## 検出条件 `window._hsq` が配列として存在する場合に検出されます。 ## 送信方法 ```javascript theme={null} _hsq.push(["trackCustomBehavioralEvent", { name: "turnint_started", properties: { type: "started" } }]); ``` ## ヘッドスクリプト設定 ポータルの **ヘッドスクリプト** に以下を貼り付けてください。`YOUR_HUB_ID` はご自身の HubSpot アカウント ID に置き換えてください。 ```html theme={null} ``` ## 前提条件 HubSpot でカスタム行動イベントを受信するには、**Marketing Hub Enterprise** プランが必要です。 # CXプラットフォーム KARTE (カルテ) 連携 Source: https://docs.timothe.ai/ja/integrations/analytics.karte Turnint AI のセッションイベントを KARTE に送信する方法 セッションイベントを [KARTE](https://karte.io) のカスタムイベントとして自動送信します。KARTE のアクション配信やセグメント作成に活用できます。 ## 検出条件 `window.krt` が関数として存在する場合に検出されます。 ## 送信方法 ```javascript theme={null} krt("send", "turnint_started", { type: "started" }); ``` ## ヘッドスクリプト設定 ポータルの **ヘッドスクリプト** に KARTE のタグを貼り付けてください。タグは KARTE の管理画面から取得できます。 ## 活用例 * `turnint_action_executed` イベントでセグメントを作成し、CTA に至ったユーザーに接客を配信 * `turnint_started` イベントでエージェント利用ユーザーを把握 # Meta Pixel 連携 Source: https://docs.timothe.ai/ja/integrations/analytics.meta-pixel Turnint AI のセッションイベントを Meta Pixel (Facebook Pixel) に送信する方法 セッションイベントを [Meta Pixel](https://www.facebook.com/business/tools/meta-pixel) のカスタムイベントとして自動送信します。Facebook / Instagram 広告のコンバージョン計測やオーディエンス作成に活用できます。 ## 検出条件 `window.fbq` が関数として存在する場合に検出されます。 ## 送信方法 ```javascript theme={null} fbq("trackCustom", "turnint_action_executed", { type: "action-executed", actionId: "...", actionLabel: "...", actionExecType: "..." }); ``` ## ヘッドスクリプト設定 ポータルの **ヘッドスクリプト** に以下を貼り付けてください。`YOUR_PIXEL_ID` はご自身のピクセル ID に置き換えてください。 ```html theme={null} ``` ## 活用例 * `turnint_action_executed` をカスタムコンバージョンとして設定し、CTA クリックを計測 * `turnint_started` でリターゲティングオーディエンスを作成 # Mixpanel 連携 Source: https://docs.timothe.ai/ja/integrations/analytics.mixpanel Turnint AI のセッションイベントを Mixpanel に送信する方法 セッションイベントを [Mixpanel](https://mixpanel.com/ja/) の `track` メソッドで自動送信します。 ## 検出条件 `window.mixpanel` がオブジェクトで、`mixpanel.track` が関数として存在する場合に検出されます。 ## 送信方法 ```javascript theme={null} mixpanel.track("turnint_started", { type: "started" }); ``` ## ヘッドスクリプト設定 ポータルの **ヘッドスクリプト** に Mixpanel のスニペットを貼り付けてください。`YOUR_TOKEN` はご自身のプロジェクトトークンに置き換えてください。 ```html theme={null} ``` # Pendo 連携 Source: https://docs.timothe.ai/ja/integrations/analytics.pendo Turnint AI のセッションイベントを Pendo に送信する方法 セッションイベントを [Pendo](https://jp.pendo.io) のカスタムイベントとして自動送信します。 ## 検出条件 `window.pendo` がオブジェクトで、`pendo.track` が関数として存在する場合に検出されます。 ## 送信方法 ```javascript theme={null} pendo.track("turnint_started", { type: "started" }); ``` ## ヘッドスクリプト設定 ポータルの **ヘッドスクリプト** に Pendo のインストールスニペットを貼り付けてください。スニペットは Pendo の管理画面 > **Settings** > **Subscription Settings** > **Install Settings** から取得できます。 # Plausible 連携 Source: https://docs.timothe.ai/ja/integrations/analytics.plausible Turnint AI のセッションイベントを Plausible Analytics に送信する方法 セッションイベントを [Plausible](https://plausible.io) のカスタムイベントとして自動送信します。 ## 検出条件 `window.plausible` が関数として存在する場合に検出されます。 ## 送信方法 ```javascript theme={null} plausible("turnint_started", { props: { type: "started" } }); ``` ## ヘッドスクリプト設定 ポータルの **ヘッドスクリプト** に以下を貼り付けてください。`yourdomain.com` はご自身のドメインに置き換えてください。 ```html theme={null} ``` カスタムイベントを使用するには、Plausible のスクリプトを `script.js` ではなく `script.tagged-events.js` に変更するか、上記のように手動で `plausible` 関数を定義する必要があります。 # PostHog 連携 Source: https://docs.timothe.ai/ja/integrations/analytics.posthog Turnint AI のセッションイベントを PostHog に送信する方法 セッションイベントを [PostHog](https://posthog.com) のカスタムイベントとして自動送信します。 ## 検出条件 `window.posthog` がオブジェクトで、`posthog.capture` が関数として存在する場合に検出されます。 ## 送信方法 ```javascript theme={null} posthog.capture("turnint_started", { type: "started" }); ``` ## ヘッドスクリプト設定 ポータルの **ヘッドスクリプト** に以下を貼り付けてください。API キーとホストはご自身の PostHog プロジェクトのものに置き換えてください。 ```html theme={null} ``` # RudderStack 連携 Source: https://docs.timothe.ai/ja/integrations/analytics.rudderstack Turnint AI のセッションイベントを RudderStack に送信する方法 セッションイベントを [RudderStack](https://www.rudderstack.com) の `track` メソッドで自動送信します。RudderStack を通じて、接続された全ての Destination にイベントを転送できます。 ## 検出条件 `window.rudderanalytics` がオブジェクトで、`rudderanalytics.track` が関数として存在する場合に検出されます。 ## 送信方法 ```javascript theme={null} rudderanalytics.track("turnint_started", { type: "started" }); ``` ## ヘッドスクリプト設定 ポータルの **ヘッドスクリプト** に RudderStack の JavaScript SDK スニペットを貼り付けてください。Write Key と Data Plane URL は RudderStack のダッシュボードから取得できます。 ```html theme={null} ``` # Segment 連携 Source: https://docs.timothe.ai/ja/integrations/analytics.segment Turnint AI のセッションイベントを Segment に送信する方法 セッションイベントを [Segment](https://segment.com) の `analytics.track` で自動送信します。Segment を通じて、接続された全ての Destination にイベントを転送できます。 ## 検出条件 `window.analytics` がオブジェクトで、`analytics.track` が関数として存在する場合に検出されます。 ## 送信方法 ```javascript theme={null} analytics.track("turnint_started", { type: "started" }); ``` ## ヘッドスクリプト設定 ポータルの **ヘッドスクリプト** に Segment の Analytics.js スニペットを貼り付けてください。Write Key はご自身のものに置き換えてください。 ```html theme={null} ``` # Apollo.io 連携 Source: https://docs.timothe.ai/ja/integrations/crm.apollo Apollo.io と連携してセッションデータを自動同期する方法 セッションデータを [Apollo.io](https://www.apollo.io) に自動送信します。セッション終了時に、訪問者のメールアドレスやセッション内容を Webhook 経由で Apollo.io に送信します。 ## 前提条件 * Apollo.io アカウント ## Apollo.io 側の設定 ### Webhook の作成 1. Apollo.io にログインし、Webhook の設定画面を開く 2. 新しい Webhook エンドポイントを作成 3. 表示される **Webhook URL** をコピー ## Turnint ダッシュボードでの設定 ダッシュボードの **インテグレーション** から新規作成し、タイプ「Apollo.io」を選択します。 | 項目 | 説明 | | ----------- | ----------------------- | | Webhook URL | Apollo.io の Webhook URL | ## 送信されるデータ セッション終了時に以下の JSON が Apollo.io に送信されます。 | フィールド | 型 | 説明 | | ------------- | -------------- | ----------------------------------- | | `email` | string | セッション中に取得した訪問者のメールアドレス | | `sessionId` | string | セッション ID | | `sessionLink` | string | ダッシュボードのセッション詳細リンク | | `agentId` | string | エージェント ID | | `workspaceId` | string | ワークスペース ID | | `summary` | string \| null | セッションの要約 | | `userContext` | object | セッションに渡されたユーザーコンテキスト | | `messages` | array | セッション中のメッセージ一覧(`role` と `text` を含む) | | `timestamp` | string | 送信日時(ISO 8601 形式) | メールアドレスがセッションコンテキストに含まれない場合、データは送信されません。 # Attio CRM 連携 Source: https://docs.timothe.ai/ja/integrations/crm.attio Attio CRM と連携してコンタクトやセッションデータを同期する方法 セッションデータを [Attio](https://attio.com) CRM に自動同期します。セッション終了時に、訪問者のメールアドレスをもとに People レコードを作成し、セッション内容をノートとして記録します。 ## 前提条件 * Attio アカウント ## API キーの作成 1. Attio の **Settings** > **Developers** > **API keys** を開く 2. **Create API key** をクリック 3. 以下のスコープを付与: * `record_permission:read_write` — People レコードの読み書き * `note_permission:read_write` — ノートの読み書き 4. API キーをコピー ## 設定 ダッシュボードの **インテグレーション** から新規作成し、タイプ「Attio」を選択します。 | 項目 | 説明 | | ------- | -------------- | | API Key | Attio の API キー | ## 同期される内容 * **People** — セッション中に取得したメールアドレスで Attio の People を検索し、存在しなければ新規作成 * **ノート** — セッションの内容を People レコードに紐づくノートとして作成 # Clay 連携 Source: https://docs.timothe.ai/ja/integrations/crm.clay Clay と連携してセッションデータを自動同期する方法 セッションデータを [Clay](https://www.clay.com) テーブルに自動送信します。セッション終了時に、訪問者のメールアドレスやセッション内容を Webhook 経由で Clay テーブルに追加します。 ## 前提条件 * Clay アカウント ## Clay 側の設定 ### Webhook ソースの作成 1. Clay で対象のテーブルを開く 2. **+ Add** をクリックし、「Webhooks」を検索 3. **Monitor webhook** を選択 4. 表示される **Webhook URL** をコピー 認証トークンを設定する場合は、表示時に必ずコピーしてください(一度しか表示されません)。 ## Turnint ダッシュボードでの設定 ダッシュボードの **インテグレーション** から新規作成し、タイプ「Clay」を選択します。 | 項目 | 説明 | | ----------- | ---------------------- | | Webhook URL | Clay テーブルの Webhook URL | ## 送信されるデータ セッション終了時に以下の JSON が Clay テーブルに送信されます。各キーが Clay テーブルのカラムとして自動認識されます。 | フィールド | 型 | 説明 | | ------------- | -------------- | ----------------------------------- | | `email` | string | セッション中に取得した訪問者のメールアドレス | | `sessionId` | string | セッション ID | | `sessionLink` | string | ダッシュボードのセッション詳細リンク | | `agentId` | string | エージェント ID | | `workspaceId` | string | ワークスペース ID | | `summary` | string \| null | セッションの要約 | | `userContext` | object | セッションに渡されたユーザーコンテキスト | | `messages` | array | セッション中のメッセージ一覧(`role` と `text` を含む) | | `timestamp` | string | 送信日時(ISO 8601 形式) | メールアドレスがセッションコンテキストに含まれない場合、データは送信されません。 # HubSpot CRM 連携 Source: https://docs.timothe.ai/ja/integrations/crm.hubspot HubSpot CRM と連携してコンタクトやセッションデータを同期する方法 セッションデータを [HubSpot CRM](https://www.hubspot.jp) に自動同期します。セッション終了時に、訪問者のメールアドレスをもとにコンタクトを作成し、セッション内容をノートとして記録します。 ## 前提条件 * HubSpot アカウント ## サービスキーの作成 1. HubSpot の **設定** > **連携** > **非公開アプリ** を開く 2. **非公開アプリを作成** をクリック 3. 以下のスコープを付与: * `crm.objects.contacts.read` * `crm.objects.contacts.write` 4. アプリを作成し、**アクセストークン**(`pat-na2-` で始まる文字列)をコピー サービスキーは `pat-na2-` で始まる形式である必要があります。 ## 設定 ダッシュボードの **インテグレーション** から新規作成し、タイプ「HubSpot」を選択します。 | 項目 | 説明 | | ------------------------- | --------------------------------------------------- | | Service Key | HubSpot のアクセストークン(`pat-na2-...`) | | Contact Property Mappings | ユーザーコンテキストのキーと HubSpot コンタクトプロパティ(内部名)の対応(任意・複数設定可) | ## 同期される内容 * **コンタクト** — セッション中に取得したメールアドレスで HubSpot のコンタクトを検索し、存在しなければ新規作成 * **ノート** — セッションの内容をコンタクトに紐づくノートとして作成 * **コンタクトプロパティ** — Contact Property Mappings を設定している場合、セッションのユーザーコンテキストの値をコンタクトプロパティに書き込み。HubSpot 側のプロパティが空の場合のみ書き込まれ、既存の値は上書きされません。ユーザーコンテキストに値がないキーはスキップされます # Salesforce CRM 連携 Source: https://docs.timothe.ai/ja/integrations/crm.salesforce Salesforce CRM と連携してリードやセッションデータを同期する方法 セッションデータを [Salesforce CRM](https://www.salesforce.com/jp/) に自動同期します。セッション終了時に、訪問者のメールアドレスをもとにコンタクトを作成し、セッション内容をタスク/活動として記録します。 ## 前提条件 * Salesforce アカウント ## Salesforce 側の設定 ### 外部クライアントアプリケーションの作成 1. **設定** > **プラットフォームツール** > **外部クライアントアプリケーション** を開く 2. **新規外部クライアントアプリケーション** をクリック 3. 基本情報を入力: * 外部クライアントアプリケーション名: 例 `turnint.ai integration` * API参照名: `turnint_ai_integration` * 取引先責任者: 貴方のメールアドレス * 配信状態: `ローカル` ### OAuth 設定 6. **API (OAuth設定の有効化)** セクション: * OAuthを有効化: チェック * アプリケーション設定 * コールバックURL: `https://api.turnint.ai/integrations/callback/salesforce` * OAuth範囲: 以下を「選択した OAuth 範囲」に追加 * APIを使用してユーザーデータを管理 (api) * フローの有効化 * クライアントログイン情報フローを有効化: チェック * セキュリティ * Web サーバーフローの秘密が必要: チェック * 更新トークンフローの秘密が必要: チェック * サポートされる認証フローに Proof Key for Code Exchange (PKCE) 拡張を要求: チェック * 更新トークンのローテーションを有効化: オフ * 指名ユーザーの JSON Web トークン (JWT) ベースのアクセストークンを発行: オフ 7. **作成** をクリック ### ポリシー設定 8. **ポリシー** > **編集**: * OAuth フローおよび外部クライアントアプリケーションの機能強化: * クライアントログイン情報フローを有効化: チェック * (ユーザー名) として実行: あなたの Salesforce ユーザー名 * IP 制限の緩和: `IP 制限の緩和` を選択 * シングルログアウトを有効化: オフ * 高保証セッションが必要です: オフ ### コンシューマー鍵と秘密の取得 9. **設定** > **OAuth設定** > **アプリケーション設定** > **コンシューマー鍵と秘密** > **IDの検証** * **コンシューマー鍵**と**コンシューマーの秘密**をコピー ## Turnint ダッシュボードでの設定 ダッシュボードの **インテグレーション** から新規作成し、タイプ「Salesforce」を選択します。 | 項目 | 説明 | | --------------- | ---------------------------------------------------------------------------- | | Consumer Key | Salesforce のコンシューマー鍵 | | Consumer Secret | Salesforce のコンシューマーの秘密 | | Login URL | `https://login.salesforce.com`(本番)または `https://test.salesforce.com`(Sandbox) | ## 同期される内容 * **コンタクト** — セッション中に取得したメールアドレスで Salesforce のコンタクトを検索し、存在しなければ新規作成 * **タスク/活動** — セッションの内容をコンタクトに紐づくタスクとして作成 # Unify GTM 連携 Source: https://docs.timothe.ai/ja/integrations/crm.unify Unify GTM と連携してセッションデータをレコードとして同期する方法 セッションデータを [Unify GTM](https://www.unifygtm.com) に自動同期します。セッション終了時に、指定したオブジェクトにセッション内容をレコードとして作成します。 ## 前提条件 * Unify GTM アカウント(API アクセス権限あり) ## API キーの作成 1. Unify GTM ダッシュボードの **Settings** > **API Keys** を開く 2. 新しい API キーを作成 3. API キーをコピー ## 設定 ダッシュボードの **インテグレーション** から新規作成し、タイプ「Unify GTM」を選択します。 | 項目 | 説明 | | ----------- | --------------------------------------------- | | API Key | Unify GTM の API キー | | Object Name | レコードを作成する対象オブジェクト名(デフォルト: `turnint_sessions`) | ## 同期される内容 セッション完了時に、指定したオブジェクトに以下の情報を含むレコードが作成されます: * **email** — セッション中に取得した訪問者のメールアドレス * **sessionId** — セッション ID * **sessionLink** — ダッシュボードのセッション詳細リンク * **summary** — セッションの要約 * **userContext** — ユーザーコンテキスト情報 * **messages** — セッション内のメッセージ履歴 * **timestamp** — 同期日時 # Zendesk Sell 連携 Source: https://docs.timothe.ai/ja/integrations/crm.zendesk Zendesk Sell と連携してコンタクトやセッションデータを同期する方法 セッションデータを [Zendesk Sell](https://www.zendesk.co.jp/sell/) に自動同期します。セッション終了時に、訪問者のメールアドレスをもとにコンタクトを検索・作成し、セッション内容をノートとして記録します。 ## 前提条件 * Zendesk Sell アカウント ## 認証情報の作成 1. Zendesk Sell にログイン 2. **設定** > **統合** > **OAuth** を開く 3. **アクセストークン** を生成してコピー ## 設定 ダッシュボードの **インテグレーション** から新規作成し、タイプ「Zendesk Sell」を選択します。 | 項目 | 説明 | | --------- | ----------------------------- | | API Token | Zendesk Sell の OAuth アクセストークン | ## 同期される内容 * **コンタクト** — セッション中に取得したメールアドレスで Zendesk Sell のコンタクトを検索し、存在しなければ新規作成 * **ノート** — セッションの内容をコンタクトに紐づくノートとして作成 # Zoho CRM 連携 Source: https://docs.timothe.ai/ja/integrations/crm.zoho Zoho CRM と連携してコンタクトやセッションデータを同期する方法 セッションデータを [Zoho CRM](https://www.zoho.com/jp/crm/) に自動同期します。セッション終了時に、訪問者のメールアドレスをもとにコンタクトを検索・作成し、セッション内容をノートとして記録します。 ## 前提条件 * Zoho CRM アカウント ## 認証情報の作成 1. [Zoho API Console](https://api-console.zoho.com/) を開く 2. **Self Client** を作成(または既存のものを選択) 3. **Client ID** と **Client Secret** をコピー 4. **Generate Code** タブで以下のスコープを指定してコードを生成: * `ZohoCRM.modules.contacts.READ` — コンタクトの検索 * `ZohoCRM.modules.contacts.CREATE` — コンタクトの作成 * `ZohoCRM.modules.notes.CREATE` — ノートの作成 5. 生成されたコードを使って Refresh Token を取得 ## 設定 ダッシュボードの **インテグレーション** から新規作成し、タイプ「Zoho CRM」を選択します。 | 項目 | 説明 | | --------------- | -------------------------------------------------------------------------- | | Client ID | Zoho API Console の Client ID | | Client Secret | Zoho API Console の Client Secret | | Refresh Token | 生成した Refresh Token | | Accounts Domain | Zoho のアカウントドメイン(例: `https://accounts.zoho.com`、`https://accounts.zoho.jp`) | ## 同期される内容 * **コンタクト** — セッション中に取得したメールアドレスで Zoho CRM のコンタクトを検索し、存在しなければ新規作成 * **ノート** — セッションの内容をコンタクトに紐づくノートとして作成 # ZoomInfo 連携 Source: https://docs.timothe.ai/ja/integrations/crm.zoominfo ZoomInfo と連携してセッションデータを自動同期する方法 セッションデータを [ZoomInfo](https://www.zoominfo.com) に自動送信します。セッション終了時に、訪問者のメールアドレスやセッション内容を Webhook 経由で ZoomInfo に送信します。 ## 前提条件 * ZoomInfo アカウント ## ZoomInfo 側の設定 ### Webhook の作成 1. ZoomInfo で Workflows を開く 2. 新しいワークフローを作成し、Webhook トリガーを追加 3. 表示される **Webhook URL** をコピー ## Turnint ダッシュボードでの設定 ダッシュボードの **インテグレーション** から新規作成し、タイプ「ZoomInfo」を選択します。 | 項目 | 説明 | | ----------- | ---------------------- | | Webhook URL | ZoomInfo の Webhook URL | ## 送信されるデータ セッション終了時に以下の JSON が ZoomInfo に送信されます。 | フィールド | 型 | 説明 | | ------------- | -------------- | ----------------------------------- | | `email` | string | セッション中に取得した訪問者のメールアドレス | | `sessionId` | string | セッション ID | | `sessionLink` | string | ダッシュボードのセッション詳細リンク | | `agentId` | string | エージェント ID | | `workspaceId` | string | ワークスペース ID | | `summary` | string \| null | セッションの要約 | | `userContext` | object | セッションに渡されたユーザーコンテキスト | | `messages` | array | セッション中のメッセージ一覧(`role` と `text` を含む) | | `timestamp` | string | 送信日時(ISO 8601 形式) | メールアドレスがセッションコンテキストに含まれない場合、データは送信されません。 # トラッキングパラメータの自動保持 Source: https://docs.timothe.ai/ja/integrations/tracking-params UTM パラメータ・広告クリック ID・クロスドメインパラメータを自動的にセッションに保存し、リンクへ引き継ぐ仕組み ウィジェットが埋め込まれたページの URL に含まれるトラッキングパラメータ、および広告プラットフォームが設定する Cookie を**自動的に検出**し、セッションへの保存とリンクへの伝播を行います。追加の設定は不要です。 ## 対応パラメータ ### UTM パラメータ | パラメータ | 用途 | | -------------- | -------------------------- | | `utm_source` | 流入元(例: google, newsletter) | | `utm_medium` | メディア種別(例: cpc, email) | | `utm_campaign` | キャンペーン名 | | `utm_term` | 検索キーワード | | `utm_content` | 広告コンテンツの識別 | ### 広告クリック ID | パラメータ | プラットフォーム | | ----------- | -------------------------- | | `gclid` | Google Ads | | `gbraid` | Google Ads(プライバシー対応・アプリ) | | `wbraid` | Google Ads(プライバシー対応・ウェブ) | | `dclid` | DoubleClick | | `fbclid` | Meta(Facebook / Instagram) | | `msclkid` | Microsoft Ads | | `ttclid` | TikTok Ads | | `twclid` | X (Twitter) Ads | | `epik` | Pinterest Ads | | `sclid` | Snapchat Ads | | `rdt_cid` | Reddit Ads | | `li_fat_id` | LinkedIn Ads | | `click_id` | MGID 等 | | `clickid` | Mondiad 等 | | `dicbo` | Outbrain | | `tblci` | Taboola | | `yclid` | Yahoo! 広告 | | `vmcid` | Yahoo DSP(グローバル) | | `ldtag_cl` | LINE Ads | ### クロスドメインパラメータ | パラメータ | 用途 | | ----- | --------------------- | | `_gl` | GA4 クロスドメインリンカー | | `_ga` | ユニバーサルアナリティクス クロスドメイン | ### CRM パラメータ | パラメータ | 用途 | | ----------- | --------------------- | | `hubspotid` | HubSpot のコンタクト/リード識別子 | `hubspotid` は大文字小文字の揺れ(`HubspotId` 等)と、アンダースコア表記(`hubspot_id`)も自動的に正規化され、`hubspotid` として保存されます。HubSpot Contact ID を表す `hs_contact_id` と `hscontactid` も同様に `hubspotid` として扱われます。 ### 広告プラットフォーム Cookie URL のクエリパラメータに加え、広告プラットフォームのタグ・ピクセルが設定する Cookie も自動的に読み取ります。 | Cookie 名 | プラットフォーム | | ------------- | ------------------- | | `_gcl_aw` | Google Ads (gclid) | | `_gcl_dc` | DoubleClick (dclid) | | `_gcl_gb` | Google Ads (gbraid) | | `_fbc` | Meta (fbclid) | | `_fbp` | Meta ブラウザ ID | | `_ttp` | TikTok Pixel | | `_epik` | Pinterest | | `_uetmsclkid` | Microsoft Ads | | `_scid` | Snapchat | | `_rdt_uuid` | Reddit | | `_li_fat_id` | LinkedIn | ### CRM プラットフォーム Cookie HubSpot のトラッキングスクリプトが設定する Cookie も自動的に読み取ります。 | Cookie 名 | 用途 | | ------------ | --------------------- | | `hubspotutk` | HubSpot ユーザートークン | | `__hstc` | HubSpot メイン解析 Cookie | | `__hssc` | HubSpot セッション Cookie | | `__hsfp` | HubSpot ブラウザフィンガープリント | Cookie とクエリパラメータに同じキー名の値が存在する場合、クエリパラメータの値が優先されます。 ## データフロー ```mermaid theme={null} flowchart LR A1["ページ URL
?utm_source=google&gclid=abc"] --> B["ウィジェット
自動検出"] A2["Cookie
_gcl_aw, _fbp 等"] --> B B --> C["セッション保存
context.sys.tracking"] B --> D["リンク伝播
アクション・外部リンク"] C --> E["ダッシュボード
Webhook"] ``` ## セッションへの保存 ウィジェットがセッションを開始する際、Cookie およびページ URL からトラッキングパラメータを抽出し、セッションコンテキストの `sys.tracking` に保存します。 ```json theme={null} { "context": { "sys": { "pageUrl": "https://example.com/lp?utm_source=google&gclid=abc123", "referrer": "https://google.com", "tracking": { "utm_source": "google", "gclid": "abc123", "_gcl_aw": "GCL.1234567890.abc123", "_fbp": "fb.1.1234567890.987654321" } } } } ``` 保存されたトラッキングデータは以下から確認できます。 * **ダッシュボード** — セッション詳細画面 * **Webhook** — セッション開始イベントのペイロードに含まれます([Webhook 連携](/ja/integrations/webhook)) トラッキングパラメータはページ訪問ごとに URL と Cookie から取得されます。ゲートの設定やフォーム入力とは独立して、常に自動的に保存されます。 ## リンクへの自動伝播 ウィジェット内に表示されるすべてのリンクに、検出されたトラッキングパラメータが自動的に付与されます。 * **リダイレクトアクション** — 遷移先 URL にパラメータが追加されます * **埋め込みアクション** — 埋め込み元の URL にパラメータが追加されます * **エージェントの回答内リンク** — 回答に含まれるリンクにもパラメータが追加されます リンク先に同名のパラメータがすでに存在する場合は上書きしません。リンク側のパラメータが優先されます。 ## 関連ドキュメント * [GA4 連携 — クロスドメイン計測](/ja/integrations/analytics.ga4#クロスドメイン計測) * [GTM 連携 — クロスドメイン計測](/ja/integrations/analytics.gtm#クロスドメイン計測) * [Webhook 連携](/ja/integrations/webhook) # ウェブフック連携 Source: https://docs.timothe.ai/ja/integrations/webhook ウェブフックを使ってセッションイベントを外部サービスに通知する方法 セッションイベントを任意の HTTPS エンドポイントに HTTP POST で送信します。 ## 設定 ダッシュボードの **インテグレーション** から新規作成し、タイプ「ウェブフック」を選択します。 | 項目 | 説明 | | ----------- | ---------------------- | | Webhook URL | イベント送信先の URL(HTTPS のみ) | ## イベント種別 以下のイベントが発生時に送信されます。 ### `session-started` セッションが開始されたとき。 ```json theme={null} { "type": "session-started", "payload": { "agent": { "id": "...", "name": "..." }, "session": { "id": "...", "context": { ... } } }, "metadata": { "id": "...", "invokedAt": "2026-01-01T00:00:00.000Z", "workspaceId": "...", "integrationId": "..." } } ``` ### `user-message-sent` ユーザーがメッセージを送信したとき。 ```json theme={null} { "type": "user-message-sent", "payload": { "agent": { "id": "...", "name": "..." }, "session": { "id": "...", "context": { ... } }, "message": { ... } }, "metadata": { ... } } ``` ### `action-executed` ユーザーがアクションを実行したとき。 ```json theme={null} { "type": "action-executed", "payload": { "agent": { "id": "...", "name": "..." }, "session": { "id": "...", "context": { ... } }, "action": { ... } }, "metadata": { ... } } ``` ### `session-summarized` セッションの要約が完了したとき。 ```json theme={null} { "type": "session-summarized", "payload": { "agent": { "id": "...", "name": "..." }, "session": { "id": "...", "context": { ... }, "summary": "セッションの要約テキスト", "importance": "low" | "medium" | "high", "transcript": "..." } }, "metadata": { ... } } ``` ## ペイロード構造 すべてのイベントには以下の共通フィールドがあります。 * **`type`** — イベント種別 * **`payload`** — イベント固有のデータ(エージェントID、セッション情報など) * **`metadata`** — イベントメタデータ(イベントID、発生日時、ワークスペースID、インテグレーションID) # Discord ウェブフック連携 Source: https://docs.timothe.ai/ja/integrations/webhook.discord Discord ウェブフックでセッション通知を受け取る設定方法 [Discord](https://discord.com) の Webhook を使って、セッションイベントの通知を Discord チャンネルに送信します。 ## 前提条件 Discord サーバーで Webhook を作成し、Webhook URL を取得してください。 1. Discord サーバーの **サーバー設定** > **連携サービス** > **ウェブフック** を開く 2. **新しいウェブフック** を作成 3. 通知先チャンネルを選択 4. **ウェブフック URL をコピー**(`https://discord.com/api/webhooks/...`) ## 設定 ダッシュボードの **インテグレーション** から新規作成し、タイプ「Discord」を選択します。 | 項目 | 説明 | | ----------- | --------------------------------------- | | Webhook URL | Discord の Webhook URL(`discord.com` のみ) | ### イベント設定 イベントごとに通知の有効/無効とカスタムメッセージを設定できます。 | イベント | 説明 | | --------------------- | --------------- | | On Session Started | セッション開始時に通知 | | On Message Sent | ユーザーメッセージ送信時に通知 | | On Action Executed | アクション実行時に通知 | | On Session Summarized | セッション要約完了時に通知 | 各イベントで `message` フィールドにカスタムメッセージテンプレートを設定できます。 # n8n ウェブフック連携 Source: https://docs.timothe.ai/ja/integrations/webhook.n8n n8n のワークフロー自動化から Turnint AI のセッション要約を受け取り、LLM で重要情報を抽出して Slack に通知する [n8n](https://n8n.io/) のワークフロー自動化に Turnint AI のセッションイベントを流し込み、LLM で会話ログから重要情報を抽出して Slack に通知する構成の作り方です。 n8n ワークフロー全体像 このレシピでは `session-summarized` イベントを使います。payload に `session.transcript`(会話ログの全文テキスト)と `session.summary`(要約)、`session.importance`(重要度)が含まれており、LLM に渡す素材として扱いやすいためです。payload の詳細は [ウェブフック連携](/ja/integrations/webhook) を参照してください。 ## 前提条件 * Turnint 側でタイプ「ウェブフック」のインテグレーションが作成済みで、「**セッションが要約されたときに送信**」 のみ有効化されていること(他のイベントは無効)。作成方法は [ウェブフック連携](/ja/integrations/webhook) を参照。Webhook URL はこのあとのステップ 1 で発行する n8n の URL に差し替えます * n8n のインスタンス([n8n Cloud](https://n8n.io/) または self-hosted)が稼働しており、ワークフロー作成権限があること * Basic LLM Chain ノードで使う LLM プロバイダ(OpenAI / Anthropic など)の API キーを n8n の **Credentials** に登録済みであること * 通知先の Slack ワークスペースが用意されていること ## 全体フロー ```mermaid theme={null} flowchart LR A["Turnint AI"] -->|"session-summarized"| B["n8n Webhook"] B --> C["Basic LLM Chain"] B --> M["Merge"] C --> M M --> D["Slack"] ``` 1. Turnint AI でセッションが終了し、要約が完了すると `session-summarized` イベントが発火する 2. n8n の Webhook ノードがイベントを受信する 3. Basic LLM Chain ノードが transcript を読み、見込み顧客に関する重要情報を構造化して抽出する 4. Merge ノードが Webhook の元データ(要約・重要度など)と LLM の抽出結果を 1 つのアイテムに合流させる 5. Slack ノードがチャンネルに通知を投稿する ## ステップ 1: n8n 側で Webhook URL を用意する n8n で新規ワークフローを作成し、先頭に **Webhook** ノードを追加します。 | 項目 | 値 | | -------------- | ----------------------- | | HTTP Method | `POST` | | Path | 任意 | | Response Mode | `Immediately` | | Authentication | `Header Auth`(推奨・詳細は下記) | ノードの **Production URL** をコピーします(`https:///webhook/` の形式)。`Test URL` ではなく Production URL を使ってください。 self-hosted n8n の場合、Turnint AI からアクセスできる公開 URL になっている必要があります。ローカル開発中は ngrok などのトンネルツールで公開してください。 ### Optional: 署名検証で送信元を確認する(推奨) Turnint AI はすべての webhook リクエストに `X-Turnint-Signature` ヘッダを付けて送信します。値は連携ごとに一意な固定トークン(`sig_...`)で、ダッシュボードのウェブフック連携の詳細画面からコピーできます。 n8n の Webhook ノードで **Authentication** を `Header Auth` に設定し、以下の Credentials を作成してください。 | 項目 | 値 | | ----- | -------------------------------------------------------------- | | Name | `X-Turnint-Signature` | | Value | ダッシュボードからコピーしたシグネチャ(例: `sig_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx`) | これで、ヘッダの値が一致しないリクエストは Webhook ノードが自動で拒否するようになり、Turnint AI から送信された webhook であることを確認できます。 シグネチャは共有シークレットです。リポジトリや公開ドキュメントにそのまま貼り付けず、n8n の Credentials に登録して参照してください。万一漏洩した場合は、該当の連携を削除して新しく作成し直すことで新しいシグネチャが払い出されます。 ## ステップ 2: Turnint のウェブフック連携に n8n の URL を設定する 事前に作成しておいたウェブフック連携を開き、**Webhook URL** をステップ 1 でコピーした n8n の Production URL に差し替えて保存します。 イベントは 「**セッションが要約されたときに送信**」 のみが有効になっていることを確認してください。 送られてくる payload の構造は以下の通りです(抜粋)。 ```json theme={null} { "type": "session-summarized", "payload": { "agent": { "id": "...", "name": "..." }, "session": { "id": "...", "context": { ... }, "summary": "セッションの要約テキスト", "importance": "low" | "medium" | "high", "transcript": "..." } }, "metadata": { ... } } ``` ## ステップ 3: Basic LLM Chain で重要情報を抽出する Webhook ノードの後ろに **Basic LLM Chain** ノードを追加します。 ### モデル設定 Chat Model を任意の LLM に接続します。Credentials には事前に API キーを登録しておいてください。 ### プロンプト例 transcript から見込み顧客に関する情報を JSON で抽出する日本語プロンプトの例です。 ``` あなたは営業オペレーションのアシスタントです。以下の会話ログから、見込み顧客に関する情報を JSON 形式で抽出してください。不明な項目は null にしてください。 # ユーザー情報 {{ $json.body.payload.session.context.user.toJsonString() }} # 会話ログ {{ $json.body.payload.session.transcript }} # セッション要約 {{ $json.body.payload.session.summary }} ``` `{{ $json.body.payload.session.transcript }}` の参照パスは、Webhook ノードが受信したデータ構造に合わせています。n8n 上で前のノードの出力をドラッグ&ドロップすれば自動で式が入ります。 ## ステップ 4: Merge で元データと LLM 出力を合流させる Slack のメッセージ本文では、Webhook payload に入っている **セッションコンテキスト**(例: `context.user.phone` のように、ゲートで入力されたユーザー情報)と **Basic LLM Chain の抽出結果** の両方を使いたいことが多いです。たとえば「この電話番号に必要なら架電してください」という通知に、LLM が抽出した会話のポイントを添える、というユースケースです。 n8n で複数ブランチのデータを 1 つの下流ノードに渡す最もシンプルな方法が **Merge** ノードです。**Webhook** ノードからもう 1 本線を引き、**Basic LLM Chain** と並列に **Merge** ノードへ接続します。 | 項目 | 値 | | ---------------- | ------------------- | | Mode | `Combine` | | Combination Mode | `Merge By Position` | Webhook と Basic LLM Chain はいずれも 1 アイテムずつ出力するため、位置ベースの Merge で 1 つのアイテムに統合され、下流の Slack ノードから両方のフィールドに `$json.xxx` でアクセスできるようになります。 ## ステップ 5: Slack ノードで通知する Merge ノードの後ろに **Slack** ノードを追加します。 Slack への接続方法は 2 通りあります。 * **Slack API の OAuth 接続**(推奨): n8n の Credentials から Slack OAuth2 を追加し、`chat:write` 権限を付与したチャンネルに投稿 * **Incoming Webhook**: Slack の Incoming Webhook URL を HTTP Request ノードから POST Resource を `Message`、Operation を `Send` にして、Channel と Text を設定します。Merge 済みのアイテムから、セッションコンテキストと LLM の抽出結果を両方参照できます。 ```` user: {{ $json.body.payload.session.context.user.phone }} に必要であれば架電してください。 情報: ```{{ $json.text }}``` ```` `context.user.phone` の参照パスはゲートで `phone` フィールドを入力値として設定している場合の例です。ゲートで設定したキー名に合わせて `context.user.` を書き換えてください。 ## 動作確認 1. n8n 側でワークフローを **Active** に切り替える 2. Turnint AI のダッシュボードから対象エージェントのセッションを実際に発生させ、セッション終了後の要約処理が走るまで待つ 3. n8n の **Executions** タブで Webhook 受信と各ノードの成功を確認する 4. Slack チャンネルに通知が届くことを確認する うまく届かない場合は、n8n の Executions の各ノード出力を開いて `$json.body.payload` の構造を確認し、Basic LLM Chain / Slack ノードの参照式と一致しているかをチェックしてください。 ## 応用のヒント 同じワークフローに If ノードを足せば重要度で分岐、HTTP Request ノードや Salesforce / HubSpot ノードを繋げれば CRM への自動登録、別チャンネル通知などもすぐに組めます。 ## 関連ドキュメント * [ウェブフック連携](/ja/integrations/webhook) — イベント種別と payload 仕様 * [Slack ウェブフック連携](/ja/integrations/webhook.slack) — Turnint から直接 Slack に送るシンプルなレシピ # Slack ウェブフック連携 Source: https://docs.timothe.ai/ja/integrations/webhook.slack Slack ウェブフックでセッション通知を受け取る設定方法