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のCanvasまたはCampaignのWebhookを使用して、顧客プロファイルとイベントデータをBrazeからRegalに送信します。
ステップ1:Regalで新しい連絡先を作成する
Regalでの通話やテキストに利用できるようにすべき新しいBrazeプロファイルが作成されるたびに、WebhookをRegalに送信するCanvasまたはCampaignを作成します。
-
「Create New Contact for Regal」というタイトルのCanvasまたはCampaignを作成し、エントリタイプとしてアクションベースを選択します。
-
トリガーロジックをカスタムイベントに設定し、電話番号を持つプロファイルが作成されたときに発生するイベントを選択します。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を省略し、オプトインが収集された際に該当する電話番号の同意を更新する別のCanvasまたはCampaignを設定できます。
ステップ2:オプトイン情報を更新する
アプリ内のさまざまなタイミングでオプトインおよびオプトアウトが発生する可能性がある場合、ユーザーがサブスクリプションステータスを変更したときにRegalを更新します。
Regalでは、連絡先レベルではなく電話番号ごとにオプトインとオプトアウトを管理できるよう、traits.phonesスキーマの使用を推奨しています。
以下のCanvasセットアップを使用して、最新のオプトイン情報をRegalに送信します。
-
「Send Opt In or Out to Regal」というタイトルの新しいCanvasまたはCampaignを作成します。
- 次のトリガーオプションのいずれかを選択し、ユーザーのオプトインステータスを表すフィールドを選択します:
- ユーザープロファイルフィールドの更新
- サブスクリプショングループステータスの更新
- サブスクリプションステータス
- 新しい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に送信するキーイベントごとに、CanvasまたはCampaignを設定します。
これらのイベントは、アウトリーチのトリガー(例:リードがサインアップを完了した際の確認テキスト)以上の役割を果たします。Regal AIエージェントがカスタマージャーニー全体を通じてどのように話し、意思決定し、会話をルーティングするかを支えるリアルタイムのコンテキストを提供します。Brazeからイベントデータと属性を送信することで、AIエージェントが各ユーザーの行動、好み、ライフサイクルステージに基づいて会話を適応させることが可能になります。
例えば、Brazeのイベントと属性はRegalで以下のように使用できます:
- AIエージェントの発話をパーソナライズ:最近の行動や製品への関心を会話で直接参照します。
- 例:ユーザーが生命保険のオプションを閲覧した場合、エージェントは会話で
contact.firstNameとcontact.brazeProductInterestを参照できます。
- 例:ユーザーが生命保険のオプションを閲覧した場合、エージェントは会話で
- 動的な会話ロジックを駆動:エージェントがリアルタイムで優先する内容を調整します。
- 例:
contact.brazeAgeが65歳を超える場合はMedicare補償を優先し、それ以外の場合はACAプランと現在の保険ステータスに焦点を当てます。
- 例:
- インテリジェントなルーティングとエスカレーションを実現:価値やインテントに基づいて会話をルーティングします。
- 例:
contact.brazeLeadTierが「High Value」の場合、資格確認後にシニアエージェントに転送し、それ以外の場合はAIエージェントで続行します。
- 例:
- メッセージングとオファーを調整:Campaignのコンテキストに基づいてエージェントが提示する内容をカスタマイズします。
- 例:
contact.brazeCampaignNameが「Spring Mortgage Promo」の場合、会話中にプロモーションオファーを強調します。
- 例:
「Send Product Interest Event to Regal」というタイトルの新しいCanvasまたはCampaignを作成します。
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に送信するイベントやこれらのCanvasおよびCampaignの設定方法についてご質問がある場合は、[email protected]までメールでお問い合わせください。
統合:RegalからBrazeにデータを送信する
Regal Reporting WebhookとBrazeデータ変換を使用して、Regalのレポートイベント(SMS.sentやcall.completedなど)をBrazeに送信します。これらのイベントをマッピングすると、ユーザープロファイルに表示され、セグメンテーション、Canvas、Campaignsで利用できるようになります。
ステップ1:Brazeでデータ変換を作成する
Brazeに送信する予定のRegal Webhookごとに、1つのデータ変換を作成します。
データ変換を作成するには:
- BrazeダッシュボードのTransformationsページに移動します。
- 変換に名前を付けて、Create transformationをクリックします。
- 変換のリストから、 View actionsを選択し、Copy webhook URLを選択します。

ステップ2:Regalでレポートwebhookを有効にする
レポートwebhookを設定するには:
-
Regalアプリに移動して、Settingsページを開きます。
-
Reporting Webhooksセクションで、Create Webhooksをクリックします。
-
Webhookエンドポイント入力で、関連するデータ変換のBrazeデータ変換Webhook URLを追加します。

エンドポイントの更新
エンドポイントを編集すると、キャッシュが更新されて新しいエンドポイントにイベントが送信されるまでに最大5分かかることがあります。
再試行
現在、Regalはこれらのイベントの再試行を行いません。Brazeが5秒以内に応答しない場合、Regalはイベントを破棄します。Regalは今後のリリースで再試行機能を追加する予定です。
イベント
レポートイベントの完全なリスト、プロパティの定義、サンプルペイロードについては、RegalのReporting Webhooksガイドを参照してください。
ステップ3:RegalイベントをBrazeイベントに変換する
Brazeのデータ変換機能を使用すると、受信したRegalイベントを、Brazeで属性、イベント、または購入として追加するために必要な形式にマッピングできます。
-
データ変換に名前を付けます。イベントwebhookごとにデータ変換を設定することを推奨します。
-
接続をテストするには、Regal Agent Desktopからお使いの電話に発信コールを作成し、Conversation Summaryフォームを送信して
call.completedイベントを作成します。 -
Regalの連絡先をBrazeプロファイルにマッピングするために使用する識別子を決定します。Regalイベントで利用可能な識別子には以下が含まれます:
userId- この識別子を以前に連絡先に送信した場合にのみ、イベントに設定されますtraits.phonetraits.email- この識別子を以前に連絡先に送信した場合にのみ、イベントに設定されます
BrazeからRegalへのイベントペイロードでは、複数の電話番号と電話番号レベルの同意をサポートするためにtraits.phonesの使用を推奨しています。Brazeに送り返されるRegalレポートイベントでは、イベントペイロードの識別子としてtraits.phoneが引き続き表示される場合があります。
Braze対応の識別子
- Brazeは識別子として電話番号をサポートしていません。これを識別子として使用するには、Brazeで電話番号をユーザーエイリアスとして設定できます。
- Brazeデータ変換を使用する場合、メールアドレスを識別子として使用できます。メールアドレスが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": "+17625555555",
"email": "[email protected]"
},
"name": "call.completed",
"properties": {
"agent_firstname": "Rebecca",
"agent_fullname": "Rebecca Greene",
"agent_id": "[email protected]",
"direction": "OUTBOUND",
"regal_voice_phone": "+19545558563",
"regal_voice_phone_internal_name": "Sales Line",
"contact_phone": "+17625555555",
"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": "+17625555555",
"email": "[email protected]"
},
"name": "contact.attribute.edited",
"properties": {
"agent_email": "[email protected]",
"contact_phone": "+17625555555",
"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": "+17625555555",
"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": "+17625555555",
"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でそれらの値に基づいて分岐するCanvasまたはCampaignのロジックを構築します。
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": "+17625551796",
"email": "[email protected]"
},
"name": "call.transcript.available",
"properties": {
"agent_email": "[email protected]",
"task_id": "WT953358e8822dd9333fc38dfbac25e1e1",
"call_summary": "The agent Zoe explained insurance options to Joe and he said he'll need to think about it before moving forward Agent politely ended the call.",
"contact_name": "Joe Smith",
"contact_phone": "+13523182825",
"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": "Zoe was polite and attentive, effectively gathering information and providing a resource, which contributed to a positive interaction.",
"contact_sentiment_reason": "Joe 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 Joe, this is Zoe 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 Joe, this is Mark. Just verifying a few details before sending you back to Zoe. [contact]: Okay. [handling agent]: Thanks, Joe. 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"
}