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を送信するキャンバスまたはキャンペーンを作成します。
-
「Create New Contact for Regal」というタイトルのキャンバスまたはキャンペーンを作成し、エントリタイプとしてアクションベースを選択します。
-
トリガーロジックをカスタムイベントに設定し、電話番号を持つプロファイルが作成されたときに発火するイベントを選択します。Regalでは、電話フィールドが設定されていることを確認するフィルターを追加することも推奨しています。
-
新しいwebhookテンプレートで、以下のフィールドに入力します:
- Webhook URL:https://events.regalvoice.com/events
- リクエスト本文:Raw Text
リクエストヘッダーとメソッド
Regalでは、認証用のHTTPヘッダーとHTTPメソッドも必要です。以下は、設定タブのキーと値のペアとしてテンプレートに含まれています:
- HTTPメソッド:POST
- リクエストヘッダー:
- Authorization:
{{<REGAL_API_KEY>}} - Content-Type:application/json
- Authorization:
リクエスト本文
必須の識別子は、traits.phones 内の電話番号のみです。traits.phones オブジェクトを使用して、1つ以上の電話番号を連絡先に関連付けます。各電話番号には、独自のラベル、プライマリ指定、音声およびSMSのオプトインステータスを保存できます。この構造は、連絡先が複数の電話番号を持つ場合に特に便利です。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
{
"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に送信します。
-
「Send Opt In or Out to Regal」というタイトルの新しいキャンバスまたはキャンペーンを作成します。
- 以下のトリガーオプションのいずれかを選択し、ユーザーのオプトインステータスを表すフィールドを選択します:
- ユーザープロファイルフィールドの更新
- 購読グループステータスの更新
- 購読ステータス
- 新しいwebhookテンプレートで、以下のフィールドに入力します:
- Webhook URL:https://events.regalvoice.com/events
- リクエスト本文:Raw Text
リクエストヘッダーとメソッド
Regalでは、認証用のHTTPヘッダーとHTTPメソッドも必要です。以下は、設定タブのキーと値のペアとしてテンプレートに含まれています:
- HTTPメソッド:POST
- リクエストヘッダー:
- Authorization:
{{<REGAL_API_KEY>}} - Content-Type:application/json
- Authorization:
リクエスト本文
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
{
"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」というタイトルの新しいキャンバスまたはキャンペーンを作成します。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
{
"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を作成するには:
- Brazeダッシュボードの Transformations ページに移動します。
- トランスフォーメーションに名前を付け、Create transformation をクリックします。
- トランスフォーメーションの一覧から View actions を選択し、Copy webhook URL を選択します。
ステップ2:Regalでレポートwebhookを有効にする
レポートwebhookを設定するには:
-
Regalアプリを開き、Settings ページに移動します。
-
Reporting Webhooks セクションで、Create Webhooks をクリックします。
-
webhookエンドポイントの入力欄に、関連するData TransformationのBraze Data Transformation webhook URLを追加します。
エンドポイントの更新
エンドポイントを編集すると、キャッシュが更新されて新しいエンドポイントにイベントが送信されるまで最大5分かかることがあります。
リトライ
現在、Regalはこれらのイベントのリトライを行いません。Brazeが5秒以内に応答しない場合、Regalはイベントを破棄します。Regalは将来のリリースでリトライ機能を追加する予定です。
イベント
レポートイベントの完全なリスト、プロパティの定義、サンプルペイロードについては、Regalのレポートwebhookガイドを参照してください。
ステップ3:RegalイベントをBrazeイベントに変換する
BrazeのData Transformation機能を使用すると、受信したRegalイベントを、Brazeで属性、イベント、または購入として追加するために必要な形式にマッピングできます。
-
Data Transformationに名前を付けます。イベントwebhookごとにData Transformationを設定することをお勧めします。
-
接続をテストするには、Regal Agent Desktopからお使いの電話に発信通話を作成し、Conversation Summaryフォームを送信して
call.completedイベントを作成します。 -
Regalの連絡先をBrazeプロファイルにマッピングするために使用する識別子を決定します。Regalイベントで利用可能な識別子は以下のとおりです。
userId- この識別子を以前に連絡先に対して送信した場合にのみ、イベントに設定されますtraits.phonetraits.email- この識別子を以前に連絡先に対して送信した場合にのみ、イベントに設定されます
BrazeからRegalへのイベントペイロードでは、複数の電話番号と電話番号レベルの同意をサポートするためにtraits.phonesの使用をRegalは推奨しています。Brazeに返送されるRegalレポートイベントでは、イベントペイロードの識別子としてtraits.phoneが引き続き表示される場合があります。
Brazeがサポートする識別子
- Brazeは電話番号を識別子としてサポートしていません。電話番号を識別子として使用するには、Brazeでユーザーエイリアスとして設定できます。
- Braze Data Transformationを使用する場合、メールアドレスを識別子として使用できます。メールアドレスがBraze内のプロファイルとして存在する場合、既存のプロファイルが更新されます。メールアドレスがBraze内にまだ存在しない場合、メールのみのプロファイルが作成されます。
ユースケース
Regalの通話処理結果に基づいてBrazeからメールをトリガーする
以下のサンプルペイロードは、Regalのcall.completedイベントを示しています。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
{
"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のカスタムイベントにマッピングします。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
// 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 to start from scratch 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は、エージェントが会話中にコンタクトのプロファイルの属性を更新したときにこのイベントを送信します。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
{
"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プロファイルの関連属性にマッピングします。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// This is an example template you can use as a starting point. Feel free to delete this entirely to start from scratch 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イベントを示しています。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
{
"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のカスタムイベントにマッピングします。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
// 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 to start from scratch 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イベントを示しています。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
{
"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でコンタクトの購読を解除します。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
// This is an example template you can use as a starting point. Feel free to delete this entirely to start from scratch 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イベントを示しています。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
{
"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イベントを示しています。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
{
"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 reach out 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"
}