コンテンツにスキップ

Regal

Regal.ioは音声AIエージェントプラットフォームであり、チャネル横断でインテリジェントなリアルタイム会話を通じて、企業がより優れた顧客体験を推進できるよう支援します。

この統合はRegalによって管理されています。

RegalとBrazeを統合することで、行動データと会話型AIを統合し、パーソナライズされたオムニチャネルのカスタマージャーニーをオーケストレーションできます。Brazeはカスタマーライフサイクル全体のシグナルをキャプチャし、RegalはそれをAIエージェントの会話、ルーティング、リアルタイムの意思決定に活用します。

Brazeのデータを使用して、AIエージェントが何を話すか、どのように応答するか、いつエンゲージするかを形成できます。会話の結果やインサイトをBrazeに送り返すことで、ターゲティングやライフサイクルマーケティングを改善できます。カスタマージャーニーの重要なタイミングでAI搭載の通話やSMSをトリガーし、各会話の結果に基づいてBrazeでフォローアップを行います。

前提条件

必要条件 説明
Regal アカウント このパートナーシップを利用するには、Regal アカウントが必要です。
Regal API キー Regal API キーを使用すると、Braze から Regal にイベントを送信できます。

このキーを取得するには、[email protected] にメールでお問い合わせください。
Braze データ変換 Regal からデータを受信するには、データ変換が必要です。

連携:BrazeからRegalへのデータ送信

Brazeキャンバスまたはキャンペーンのwebhookを使用して、顧客プロファイルおよびイベントデータをBrazeからRegalに送信します。

ステップ1:Regalで新しいコンタクトを作成する

Regalで通話やテキストに利用可能にすべき新しいBrazeプロファイルが作成されるたびに、Regalにwebhookを送信するキャンバスまたはキャンペーンを作成します。

  1. 「Create New Contact for Regal」というタイトルのキャンバスまたはキャンペーンを作成し、エントリタイプとしてアクションベースを選択します。

  2. トリガーロジックをカスタムイベントに設定し、電話番号を持つプロファイルが作成されたときに発火するイベントを選択します。Regalでは、電話フィールドが設定されていることを確認するフィルターを追加することも推奨しています。

  3. 新しいwebhookテンプレートで、以下のフィールドに入力します:

リクエストヘッダーとメソッド

Regalでは、認証用のHTTPヘッダーとHTTPメソッドも必要です。以下は設定タブにキーと値のペアとしてテンプレートに含まれています:

  • HTTPメソッド: POST
  • リクエストヘッダー:
    • Authorization: {{<REGAL_API_KEY>}}
    • Content-Type: application/json

リクエスト本文

唯一の必須識別子は、traits.phones内の電話番号です。traits.phonesオブジェクトを使用して、1つ以上の電話番号をコンタクトに関連付けます。各電話番号には、独自のラベル、プライマリ指定、音声およびSMSのオプトインステータスを保存できます。この構造は、コンタクトが複数の電話番号を持つ場合に特に便利です。

{
  "userId": "<uniqueIdentifier>",
  "traits": {
    "phones": {
      "<primaryPhoneNumber>": {
        "label": "Mobile",
        "isPrimary": true,
        "voiceOptIn": {
          "subscribed": true,
          "ip": "<ipAddress>",
          "source": "<leadSource>",
          "text": "<voiceOptInText>",
          "timestamp": "<timestamp>"
        },
        "smsOptIn": {
          "subscribed": true,
          "ip": "<ipAddress>",
          "source": "<leadSource>",
          "text": "<smsOptInText>",
          "timestamp": "<timestamp>"
        }
      },
      "<secondaryPhoneNumber>": {
        "label": "Home",
        "isPrimary": false,
        "voiceOptIn": {
          "subscribed": false,
          "ip": "<ipAddress>",
          "source": "<leadSource>",
          "text": "<voiceOptInText>",
          "timestamp": "<timestamp>"
        },
        "smsOptIn": {
          "subscribed": false,
          "ip": "<ipAddress>",
          "source": "<leadSource>",
          "text": "<smsOptInText>",
          "timestamp": "<timestamp>"
        }
      }
    },
    "email": "<email>",
    "firstName": "<firstName>",
    "lastName": "<lastName>",
    "custom1": "<custom1>",
    "custom2": "<custom2>"
  },
  "eventSource": "braze"
}

このペイロードの例では、リストされた電話番号に現在の音声およびSMSの同意ステータスが含まれていることを前提としています。それが当てはまらない場合は、コンタクト作成時にvoiceOptInとsmsOptInを省略し、オプトインが取得された際に該当する電話番号の同意を更新する別のキャンバスまたはキャンペーンを設定できます。

ステップ2:オプトイン情報を更新する

アプリ内のさまざまなポイントでオプトインやオプトアウトが発生する可能性がある場合は、ユーザーが購読ステータスを変更した際にRegalを更新します。

Regalでは、コンタクトレベルではなく電話番号ごとにオプトインとオプトアウトを管理できるよう、traits.phonesスキーマの使用を推奨しています。

以下のキャンバス設定を使用して、最新のオプトイン情報をRegalに送信します。

  1. 「Send Opt In or Out to Regal」というタイトルの新しいキャンバスまたはキャンペーンを作成します。

  2. 以下のトリガーオプションのいずれかを選択し、ユーザーのオプトインステータスを表すフィールドを選択します:
    • ユーザープロファイルフィールドの更新
    • 購読グループステータスの更新
    • 購読ステータス
  3. 新しいwebhookテンプレートで、以下のフィールドに入力します:

リクエストヘッダーとメソッド

Regalでは、認証用のHTTPヘッダーとHTTPメソッドも必要です。以下は設定タブにキーと値のペアとしてテンプレートに含まれています:

  • HTTPメソッド: POST
  • リクエストヘッダー:
    • Authorization: {{<REGAL_API_KEY>}}
    • Content-Type: application/json

リクエスト本文

{
  "userId": "<uniqueIdentifier>",
  "traits": {
    "phones": {
      "<phoneNumber>": {
        "voiceOptIn": {
          "subscribed": "<voice_optin_subscribed>",
          "ip": "<ipAddress>",
          "source": "<optInSource>",
          "text": "<voiceOptInText>",
          "timestamp": "<timestamp>"
        },
        "smsOptIn": {
          "subscribed": "<sms_optin_subscribed>",
          "ip": "<ipAddress>",
          "source": "<optInSource>",
          "text": "<smsOptInText>",
          "timestamp": "<timestamp>"
        }
      }
    }
  },
  "eventSource": "braze"
}

このペイロードに追加のユーザープロファイル属性を含めて、同時に他の属性も最新の状態に保つこともできます。

ステップ3:カスタムイベントを送信する

Regalに送信したい主要なイベントごとにキャンバスまたはキャンペーンを設定します。

これらのイベントは、アウトリーチのトリガー(例:リードがサインアップを完了した際の確認テキスト)以上の役割を果たします。Regal AIエージェントが会話を行い、意思決定し、カスタマージャーニー全体を通じて会話をルーティングする方法を支えるリアルタイムのコンテキストを提供します。Brazeからイベントデータと属性を送信することで、AIエージェントが各ユーザーの行動、好み、ライフサイクルステージに基づいて会話を適応させることが可能になります。

例えば、BrazeのイベントとエージェントはRegalで以下のように活用できます:

  • AIエージェントの発話をパーソナライズ: 最近の行動や商品への関心を会話で直接参照します。
    • 例:ユーザーが生命保険のオプションを閲覧した場合、エージェントは会話の中でcontact.firstNameとcontact.brazeProductInterestを参照できます。
  • ダイナミックな会話ロジックを駆動: エージェントがリアルタイムで優先する内容を調整します。
    • 例:contact.brazeAgeが65より大きい場合、Medicare保障を優先し、それ以外の場合はACAプランと現在の保険ステータスに焦点を当てます。
  • インテリジェントなルーティングとエスカレーションを実現: 価値やインテントに基づいて会話をルーティングします。
    • 例:contact.brazeLeadTierが「High Value」の場合、資格確認後にシニアエージェントに転送し、それ以外の場合はAIエージェントで対応を続けます。
  • メッセージングとオファーを整合: キャンペーンのコンテキストに基づいてエージェントが提示する内容を調整します。
    • 例:contact.brazeCampaignNameが「Spring Mortgage Promo」の場合、会話中にプロモーションオファーを強調します。

「Send Product Interest Event to Regal」というタイトルの新しいキャンバスまたはキャンペーンを作成します。

{
  "userId": "<uniqueIdentifier>",
  "traits": {
    "phones": {
      "<primaryPhoneNumber>": {
        "label": "Mobile",
        "isPrimary": true,
        "voiceOptIn": {
          "subscribed": true,
          "ip": "<ipAddress>",
          "source": "<optInSource>",
          "text": "<voiceOptInText>",
          "timestamp": "<timestamp>"
        },
        "smsOptIn": {
          "subscribed": true,
          "ip": "<ipAddress>",
          "source": "<optInSource>",
          "text": "<smsOptInText>",
          "timestamp": "<timestamp>"
        }
      },
      "<secondaryPhoneNumber>": {
        "label": "Home",
        "isPrimary": false,
        "voiceOptIn": {
          "subscribed": false,
          "ip": "<ipAddress>",
          "source": "<optInSource>",
          "text": "<voiceOptInText>",
          "timestamp": "<timestamp>"
        },
        "smsOptIn": {
          "subscribed": false,
          "ip": "<ipAddress>",
          "source": "<optInSource>",
          "text": "<smsOptInText>",
          "timestamp": "<timestamp>"
        }
      }
    },
    "email": "<email>",
    "firstName": "<firstName>",
    "lastName": "<lastName>",
    "brazeProductInterest": "Life Insurance",
    "brazeAge": 68,
    "brazeLeadTier": "High Value",
    "brazeCampaignName": "Spring Insurance Promo"
  },
  "name": "Product Interest Captured",
  "properties": {
    "action": "Viewed Product Comparison",
    "productCategory": "Life Insurance",
    "intentScore": "High",
    "lastPage": "Compare Life Insurance Plans",
    "readyToCommit": true
  },
  "eventSource": "braze"
}

最新のコンタクト属性

Regalでは、主要なイベント発生時にRegalが最新のコンタクト属性を保持できるよう、イベントペイロードに主要なユーザープロファイル属性を含めて送信することも推奨しています。

統合:RegalからBrazeへのデータ送信

Regalのレポーティングwebhookと Braze Data Transformationを使用して、Regalのレポーティングイベント(SMS.sentやcall.completedなど)をBrazeに送信します。これらのイベントをマッピングすると、ユーザープロファイルに表示され、セグメンテーション、キャンバス、キャンペーンで利用できるようになります。

ステップ1:Brazeで Data Transformationを作成する

Brazeに送信する予定のRegal webhookごとに、1つの Data Transformationを作成します。

Data Transformationを作成するには:

  1. BrazeダッシュボードのTransformationsページに移動します。
  2. トランスフォーメーションに名前を付け、Create transformationをクリックします。
  3. トランスフォーメーションの一覧から View actionsを選択し、Copy webhook URLを選択します。

ステップ2:Regalでレポーティングwebhookを有効にする

レポーティングwebhookを設定するには:

  1. Regalアプリを開き、Settingsページに移動します。

  2. Reporting Webhooksセクションで、Create Webhooksをクリックします。

  3. webhookエンドポイントの入力欄に、対応する Data Transformationの Braze Data Transformation webhook URLを追加します。

エンドポイントの更新

エンドポイントを編集すると、キャッシュが更新されて新しいエンドポイントにイベントが送信されるまで最大5分かかる場合があります。

リトライ

現在、Regalはこれらのイベントのリトライを行いません。Brazeが5秒以内に応答しない場合、Regalはそのイベントを破棄します。Regalは将来のリリースでリトライ機能を追加する予定です。

イベント

レポーティングイベントの完全なリスト、プロパティの定義、サンプルペイロードについては、Regalのレポーティングwebhookガイドを参照してください。

ステップ3:RegalイベントをBrazeイベントに変換する

BrazeのData Transformation機能を使用すると、受信したRegalイベントをBrazeの属性、イベント、または購入として追加するために必要な形式にマッピングできます。

  1. Data Transformationに名前を付けます。イベントwebhookごとに Data Transformationを設定することをお勧めします。

  2. 接続をテストするには、Regal Agent Desktopからお使いの電話にアウトバウンドコールを作成し、会話サマリーフォームを送信してcall.completedイベントを作成します。

  3. Regalコンタクトを Brazeプロファイルにマッピングするために使用する識別子を決定します。Regalイベントで利用可能な識別子には以下が含まれます:

    • userId - 以前にコンタクトに対してこの識別子を送信した場合にのみイベントに設定されます
    • traits.phone
    • traits.email - 以前にコンタクトに対してこの識別子を送信した場合にのみイベントに設定されます

BrazeからRegalへのイベントペイロードでは、複数の電話番号と電話番号レベルの同意をサポートするためにtraits.phonesを使用することをRegalは推奨しています。BrazeへのRegalレポーティングイベントでは、イベントペイロード内の識別子としてtraits.phoneが引き続き表示される場合があります。

Brazeがサポートする識別子

  • Brazeは電話番号を識別子としてサポートしていません。電話番号を識別子として使用するには、Brazeでユーザーエイリアスとして設定できます。
  • Braze Data Transformationを使用する場合、メールアドレスを識別子として使用できます。そのメールアドレスがBraze内のプロファイルとして存在する場合、既存のプロファイルが更新されます。メールアドレスがBraze内にまだ存在しない場合、メールのみのプロファイルが作成されます。

ユースケース

Regalの通話ディスポジションに基づいてBrazeからメールをトリガーする

以下のサンプルペイロードは、Regalにおけるcall.completedイベントを示しています。

{
  "userId": "123",
  "traits": {
    "phone": "+15555550123",
    "email": "[email protected]"
  },
  "name": "call.completed",
  "properties": {
    "agent_firstname": "Alex",
    "agent_fullname": "Alex Lee",
    "agent_id": "[email protected]",
    "direction": "OUTBOUND",
    "regal_voice_phone": "+15555550200",
    "regal_voice_phone_internal_name": "Sales Line",
    "contact_phone": "+15555550123",
    "call_id": "WTxxxxx9",
    "type": "Outbound Call",
    "disposition": "Converted During Convo",
    "notes": null,
    "objections": null,
    "campaign_name": "Life Insurance Quote Follow Up",
    "campaign_friendly_id": "445",
    "started_at": 1657855046,
    "ended_at": 1657855053,
    "completed_at": 1657855059,
    "talk_time": 7,
    "wrapup_time": 6,
    "handle_time": 13,
    "journey_uuid": null,
    "journey_name": null,
    "journey_friendly_id": null
  },
  "originalTimestamp": "1657855059",
  "eventSource": "Regal Voice"
}

以下のサンプルデータ変換では、これをBrazeのカスタムイベントにマッピングしています。

// The Braze /users/track endpoint expects timestamps in an ISO 8601 format. To use the Unix timestamp within Regal's call.completed event payload as the event timestamp in Braze must first be converted to ISO 8601. This can be done with the following code:
let unixTimestamp = payload.originalTimestamp;
let dateObj = new Date(unixTimestamp * 1000);
let isoString = dateObj.toISOString();

// This is a default template you can use as a starting point. Feel free to delete this entirely and create a new template, or to delete specific components as you see fit.

// First, this code defines a variable, "brazecall", to build up a /users/track request
// Everything from the incoming webhook is accessible via the special variable "payload". As such, you can template in desired values in your /users/track request with JS dot notation, such as payload.x.y.z

let brazecall = {
 "events": [
   {
     "external_id": payload.userId,
     "name": "Call Completed",
     "time": isoString,
     "_update_existing_only": false,
     "properties": {
       "agent_firstname": payload.properties.agent_firstname,
       "agent_fullname": payload.properties.agent_fullname,
       "agent_id": payload.properties.agent_id,
       "direction": payload.properties.direction,
       "regal_voice_phone": payload.properties.regal_voice_phone,
       "regal_voice_phone_internal_name": payload.properties.regal_voice_phone_internal_name,
       "contact_phone": payload.properties.contact_phone,
       "call_id": payload.properties.call_id,
       "type": payload.properties.type,
       "disposition": payload.properties.disposition,
       "notes": payload.properties.notes,
       "objections": payload.properties.objections,
       "campaign_name": payload.properties.campaign_name,
       "campaign_friendly_id": payload.properties.campaign_friendly_id,
       "started_at": payload.properties.started_at,
       "ended_at": payload.properties.ended_at,
       "completed_at": payload.properties.completed_at,
       "talk_time": payload.properties.talk_time,
       "wrapup_time": payload.properties.wrapup_time,
       "handle_time": payload.properties.handle_time,
       "journey_uuid": payload.properties.journey_uuid,
       "journey_name": payload.properties.journey_name,
       "journey_friendly_id": payload.properties.journey_friendly_id
     }
   }
 ]
};

// After the /users/track request is assigned to brazecall, you will want to explicitly return brazecall to create an output
return brazecall;

Regalからのcontact.attribute.editedイベントに基づいてBrazeのプロファイル属性を更新する

以下のサンプルペイロードは、Regalにおけるcontact.attribute.editedイベントを示しています。Regalは、エージェントが会話中にコンタクトのプロファイル上の属性を更新した際にこのイベントを送信します。

{
  "userId": "123",
  "traits": {
    "phone": "+15555550123",
    "email": "[email protected]"
  },
  "name": "contact.attribute.edited",
  "properties": {
    "agent_email": "[email protected]",
    "contact_phone": "+15555550123",
    "changes": {
      "custom_properties": {
        "annual_income": {
          "old_value": "150,000",
          "new_value": "300,000"
        }
      }
    },
    "created_at": "1657855462"
  },
  "originalTimestamp": "1657855462",
  "eventSource": "Regal Voice"
}

以下のサンプルデータ変換では、新しいカスタムプロパティ値をBrazeプロファイルの該当する属性にマッピングしています。

// This is an example template you can use as a starting point. Feel free to delete this entirely and create a new template, or to delete specific components as you see fit.

// Capture the key's updated property value within the 'changes' object and store this in an attributes variable that can be used in the /users/track request

const changes = payload.properties.changes.custom_properties;

const attributes = {};
for (const key in changes) {
 attributes[key] = changes[key].new_value;
}

// First, this code defines a variable, "brazecall", to build up a /users/track request
// Everything from the incoming webhook is accessible via the special variable "payload". As such, you can template in desired values in your /users/track request with JS dot notation, such as payload.x.y.z

const brazecall = {
 "attributes": [
   {
     "external_id": payload.userId,
     "_update_existing_only": false,
     ...attributes
   }
 ]
};

// After the /users/track request is assigned to brazecall, you will want to explicitly return brazecall to create an output
return brazecall;

contact.experiment.assignedイベントを使用してBrazeとRegalの実験を同期する

以下のサンプルペイロードは、Regalにおけるcontact.experiment.assignedイベントを示しています。

{
  "userId": "123",
  "traits": {
    "phone": "+15555550123",
    "email": "[email protected]"
  },
  "name": "contact.experiment.assigned",
  "properties": {
    "experiment_name": "Post Call Offer Test",
    "experiment_id": "xxxx-xxxx-xxxx-xxxx",
    "experiment_variant": "Aggressive Offer - 50%",
    "journey_uuid": "xxxx-xxxx-xxxx-xxxx",
    "journey_friendly_id": 220,
    "journey_name": "Post Call Follow Up"
  },
  "originalTimestamp": "1657855118",
  "eventSource": "Regal Voice"
}

以下のサンプルデータ変換では、これをBrazeのカスタムイベントにマッピングしています。

// The Braze /users/track endpoint expects timestamps in an ISO 8601 format. To use the Unix timestamp within Regal's call.completed event payload as the event timestamp in Braze, it must first be converted to ISO 8601. This can be done with the following code:
let unixTimestamp = payload.originalTimestamp;
let dateObj = new Date(unixTimestamp * 1000);
let isoString = dateObj.toISOString();

// This is an example template you can use as a starting point. Feel free to delete this entirely and create a new template, or to delete specific components as you see fit.

// First, this code defines a variable, "brazecall", to build up a /users/track request
// Everything from the incoming webhook is accessible via the special variable "payload". As such, you can template in desired values in your /users/track request with JS dot notation, such as payload.x.y.z
let brazecall = {
 "events": [
   {
     "external_id": payload.userId,
     "_update_existing_only": false,
     "name": "Contact Experiment Assigned",
     "time": isoString,
     "properties": {
       "experiment_name": payload.properties.experiment_name,
       "experiment_id": payload.properties.experiment_id,
       "experiment_variant": payload.properties.experiment_variant,
       "journey_uuid": payload.properties.journey_uuid,
       "journey_friendly_id": payload.properties.journey_friendly_id,
       "journey_name": payload.properties.journey_name
     }
   }
 ]
};

// After the /users/track request is assigned to brazecall, you will want to explicitly return brazecall to create an output
return brazecall;

Regalからのcontact.unsubscribedイベントに基づいてBrazeでコンタクトを購読解除する

以下のサンプルペイロードは、Regalにおけるcontact.unsubscribedイベントを示しています。

{
  "userId": "123",
  "traits": {
    "phone": "+15555550123",
    "email": "[email protected]",
    "ip": "78.97.213.166"
  },
  "name": "contact.unsubscribed",
  "properties": {
    "new_subscription": true,
    "channel": "voice",
    "text": null,
    "ip": "207.38.149.143",
    "source": "regalvoice.agent_desktop",
    "timestamp": "1657855229"
  },
  "originalTimestamp": "1657855230",
  "eventSource": "Regal Voice"
}

以下のサンプルデータ変換では、Brazeでコンタクトを購読解除しています。

// This is an example template you can use as a starting point. Feel free to delete this entirely and create a new template, or to delete specific components as you see fit.

// First, this code defines a variable, "brazecall", to build up a /users/track request
// Everything from the incoming webhook is accessible via the special variable "payload". As such, you can template in desired values in your /users/track request with JS dot notation, such as payload.x.y.z

let brazecall = {
 "attributes": [
   {
     "external_id": payload.userId,
     "_update_existing_only": true,
     "subscription_groups" : [{
       "subscription_group_id": "YOUR SUBSCRIPTION GROUP ID",
       "subscription_state": "unsubscribed"
     }]
   }
 ]
};

// After the /users/track request is assigned to brazecall, you will want to explicitly return brazecall to create an output
return brazecall;

Regalからのcall.analysis.availableイベントに基づいてBrazeでカスタマイズされたフォローアップジャーニーをトリガーする

Regalのcall.analysis.availableイベントを使用して、顧客がコンバージョンしなかった主な理由を特定し、Brazeでカスタマイズされたフォローアップジャーニーをトリガーできます。

例:

  • 主な反論が価格の場合、価値訴求型のフォローアップメールを送信します。
  • 主な反論がタイミングの場合、後で再検討するためのナーチャーシーケンスにユーザーを配置します。
  • 主な反論が信頼性の場合、お客様の声、評価、またはコンプライアンスに関する安心情報を送信します。
  • needs_human_agentがtrueの場合、営業チームまたはサポートチームに通知し、自動メッセージングを抑制します。

以下のサンプルペイロードは、Regalにおけるcall.analysis.availableイベントを示しています。

{
  "traits": {
    "phone": "+1XXXXXXXXXX",
    "email": "[email protected]"
  },
  "name": "call.analysis.available",
  "brand": "circle-bank",
  "contact_email": "[email protected]",
  "contact_phone": "+1XXXXXXXXXX",
  "created_at": "1754079836",
  "entity_type": "event",
  "event_id": "9f5d8dbb2973b0e2359c6fd34111111",
  "event_type": "regal_voice_event",
  "external_id": "41dd1aa2-1111-f011-a2d5-00505611111",
  "original_timestamp": "1754079835",
  "profile_id": "62653af1111111173af128291e92",
  "properties": {
    "agent_email": "[email protected]",
    "call_analysis": {
      "purchase_intent": "medium",
      "primary_objection": "price",
      "secondary_objection": "needs_to_compare",
      "product_interest": "Life Insurance",
      "follow_up_required": true,
      "follow_up_email_text": "Thanks for speaking with us today. I know cost is top of mind, so I wanted to send over a simple summary of the life insurance options we discussed and what may fit your budget.",
      "recommended_next_action": "send_value_oriented_follow_up",
      "needs_human_agent": false,
      "customer_sentiment_label": "interested_but_hesitant"
    },
    "contact_phone": "+1XXXXXXXXXX",
    "incoming_sip_headers": {
      "Via": "SIP/2.0/UDP srv1.example.com;branch=z9hG4bK776asdhds",
      "From": "<sip:[email protected]>;tag=1928301774",
      "Call-ID": "a84b4c76e66710"
    },
    "is_ai_agent": true,
    "outgoing_sip_headers": {
      "Via": "SIP/2.0/TCP srv2.example.com;branch=z9hG4bKgsdh7723",
      "To": "<sip:[email protected]>",
      "User-Agent": "RegalVoiceAI/1.0"
    },
    "task_id": "WT7f3ea47fa6e6055aa847f0a62111111"
  },
  "originalTimestamp": "1754079835",
  "source": "Regal Voice"
}

データ変換を使用して、call_analysisのフィールド(primary_objectionやneeds_human_agentなど)をBrazeのカスタムイベントまたはプロファイル属性にマッピングします。その後、Brazeでこれらの値に基づいて分岐するキャンバスまたはキャンペーンのロジックを構築します。

call.transcript.availableイベントのトランスクリプトリンクでプロファイル属性を更新する

call.transcript.availableイベントを使用して、通話トランスクリプト全文へのリンクをBrazeに送信します。データ変換を使用してトランスクリプトURLをBrazeユーザープロファイル属性にマッピングすることで、チームがユーザープロファイルから会話にアクセスしてレビューできるようになります。

以下のサンプルペイロードは、Regalにおけるcall.transcript.availableイベントを示しています。

{
  "userId": "123",
  "traits": {
    "phone": "+15555550123",
    "email": "[email protected]"
  },
  "name": "call.transcript.available",
  "properties": {
    "agent_email": "[email protected]",
    "task_id": "WT953358e8822dd9333fc38dfbac25e1e1",
    "call_summary": "The agent Yuri explained insurance options to Alex and he said he'll need to think about it before moving forward Agent politely ended the call.",
    "contact_name": "Alex Smith",
    "contact_phone": "+15555550123",
    "is_voicemail": false,
    "moments_count": 18,
    "recording_id": "RE0118052841b7299d0630d1dff610c1fb",
    "recording_link": "https://api.twilio.com/2010-04-01/Accounts/ACxxx/Recordings/xxx.mp3",
    "recording_duration": 78.75987,
    "request_timestamp": 1657799128,
    "response_timestamp": 1657799136,
    "sentiments": {
      "contact_sentiment": 70,
      "agent_sentiment": 75,
      "agent_sentiment_reason": "Yuri was polite and attentive, effectively gathering information and providing a resource, which contributed to a positive interaction.",
      "contact_sentiment_reason": "Alex was satisfied with the information provided but may have wanted more assistance regarding insurance options."
    },
    "trackers": [
      {
        "tracker_id": "4be87957-9140-4451-894a-bdbaed1f2460",
        "tracker_name": "Refinance"
      },
      {
        "tracker_id": "eb2577c6-5e23-4c65-9e04-5cc5d49eee7e",
        "tracker_name": "High Intent"
      }
    ],
    "transcript": "[handling agent]: Hi Alex, this is Yuri with BrightCover Insurance. I'll be going over some insurance options with you today. [contact]: Sounds good. [handling agent]: Before we start, I'm going to transfer you to a specialist for a moment. One sec. [transfer agent]: Hi Alex, this is Lee. Just verifying a few details before sending you back to Yuri. [contact]: Okay. [handling agent]: Thanks, Alex. Based on what you shared, here are some plan options... [contact]: I'll need to think about it. [handling agent]: Totally understandable. Feel free to contact us anytime. Have a great day! END OF TRANSCRIPT",
    "transcript_is_truncated": false,
    "transcript_url": "https://app.regalvoice.com/transcripts/WT953358e8822dd9333fc38dfbac25e1e1"
  },
  "originalTimestamp": "1657843308",
  "eventSource": "Regal Voice",
  "eventId": "f49a3cf9cb1336683bd5f19dwe4c61147"
}
New Stuff!