Skip to content

Regal

Regal.io ist eine Voice-KI-Agenten-Plattform, die Unternehmen dabei unterstützt, durch intelligente Realtime-Gespräche über verschiedene Kanäle hinweg bessere Kundenerlebnisse zu schaffen.

Diese Integration wird von Regal gepflegt.

Durch die Integration von Regal mit Braze können Sie Verhaltensdaten und konversationelle KI vereinen, um personalisierte, Omnichannel-Customer-Journeys zu orchestrieren. Braze erfasst Signale über den gesamten Kundenlebenszyklus, die Regal nutzt, um KI-Agenten-Gespräche, Routing und Realtime-Entscheidungen zu steuern.

Verwenden Sie Braze-Daten, um zu bestimmen, was Ihre KI-Agenten sagen, wie sie reagieren und wann sie aktiv werden. Senden Sie Gesprächsergebnisse und Insights zurück an Braze, um Targeting und Lifecycle-Marketing zu verbessern. Lösen Sie KI-gestützte Anrufe und SMS an wichtigen Punkten der Customer Journey aus und setzen Sie in Braze basierend auf dem Gesprächsverlauf nach.

Voraussetzungen

Anforderung Beschreibung
Regal-Konto Ein Regal-Konto ist erforderlich, um diese Partnerschaft zu nutzen.
Regal-API-Schlüssel Ein Regal-API-Schlüssel ermöglicht es Ihnen, Events von Braze an Regal zu senden.

Senden Sie eine E-Mail an [email protected], um diesen Schlüssel zu erhalten.
Braze-Datentransformation Eine Datentransformation ist erforderlich, um Daten von Regal zu empfangen.

Integration: Daten von Braze an Regal senden

Verwenden Sie Braze-Canvas- oder Campaign-Webhooks, um Kundenprofil- und Event-Daten von Braze an Regal zu senden.

Schritt 1: Neue Kontakte in Regal erstellen

Erstellen Sie ein Canvas oder eine Campaign, die Webhooks an Regal sendet, wenn ein neues Braze-Profil erstellt wird, das für Anrufe und Textnachrichten in Regal verfügbar sein soll.

  1. Erstellen Sie ein Canvas oder eine Campaign mit dem Titel „Create New Contact for Regal“ und wählen Sie Action-Based als Entry-Typ aus.

  2. Setzen Sie die Trigger-Logik auf Custom Event und wählen Sie dann das Event aus, das ausgelöst wird, wenn ein Profil mit einer Telefonnummer erstellt wird. Regal empfiehlt außerdem, einen Filter hinzuzufügen, um zu bestätigen, dass das Telefonnummernfeld ausgefüllt ist.

  3. Füllen Sie in Ihrem neuen Webhook-Template die folgenden Felder aus:

Anfrage-Header und Methode

Regal erfordert außerdem einen HTTP-Header zur Autorisierung und eine HTTP-Methode. Die folgenden sind im Template als Schlüssel-Wert-Paare im Tab Settings enthalten:

  • HTTP-Methode: POST
  • Anfrage-Header:
    • Authorization: {{<REGAL_API_KEY>}}
    • Content-Type: application/json

Request Body

Der einzige erforderliche Bezeichner ist eine Telefonnummer innerhalb von traits.phones. Verwenden Sie das Objekt traits.phones, um einem Kontakt eine oder mehrere Telefonnummern zuzuordnen. Jede Telefonnummer kann ein eigenes Label, eine primäre Kennzeichnung sowie einen Voice- und SMS-Opt-in-Status speichern. Diese Struktur ist besonders nützlich, wenn ein Kontakt mehrere Telefonnummern hat.

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"
}

Dieses Payload-Beispiel geht davon aus, dass die aufgeführten Telefonnummern den aktuellen Voice- und SMS-Einwilligungsstatus enthalten. Falls das nicht zutrifft, können Sie voiceOptIn und smsOptIn beim Erstellen des Kontakts weglassen und ein separates Canvas oder eine separate Campaign einrichten, um die Einwilligung für die jeweilige Telefonnummer zu aktualisieren, sobald das Opt-in erfasst wird.

Schritt 2: Opt-in-Informationen aktualisieren

Wenn Opt-in und Opt-out an verschiedenen Stellen Ihrer App auftreten können, aktualisieren Sie Regal, wenn Nutzer:innen ihren Abo-Status ändern.

Regal empfiehlt die Verwendung des traits.phones-Schemas, damit Sie Opt-in und Opt-out pro Telefonnummer statt auf Kontaktebene verwalten können.

Verwenden Sie die folgende Canvas-Konfiguration, um aktuelle Opt-in-Informationen an Regal zu senden.

  1. Erstellen Sie ein neues Canvas oder eine neue Campaign mit dem Titel „Send Opt In or Out to Regal“.

  2. Wählen Sie eine der folgenden Trigger-Optionen und dann das Feld aus, das den Opt-in-Status der Nutzer:innen repräsentiert:
    • Kundenprofil Field Updated
    • Update Subscription Group Status
    • Subscription Status
  3. Füllen Sie in Ihrem neuen Webhook-Template die folgenden Felder aus:

Anfrage-Header und Methode

Regal erfordert außerdem einen HTTP-Header zur Autorisierung und eine HTTP-Methode. Die folgenden sind im Template als Schlüssel-Wert-Paare im Tab Settings enthalten:

  • HTTP-Methode: POST
  • Anfrage-Header:
    • Authorization: {{<REGAL_API_KEY>}}
    • Content-Type: application/json

Request Body

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"
}

Sie können auch zusätzliche Kundenprofil-Attribute in diesen Payload aufnehmen, um andere Attribute gleichzeitig aktuell zu halten.

Schritt 3: Angepasste Events senden

Richten Sie ein Canvas oder eine Campaign für jedes wichtige Event ein, das Sie an Regal senden möchten.

Diese Events dienen nicht nur dazu, Kontaktaufnahmen auszulösen (zum Beispiel eine Bestätigungsnachricht, wenn ein Lead die Registrierung abschließt). Sie liefern den Realtime-Kontext, der bestimmt, wie Regal-KI-Agenten sprechen, Entscheidungen treffen und Gespräche entlang der Customer Journey weiterleiten. Indem Sie Event-Daten und Attribute von Braze senden, ermöglichen Sie KI-Agenten, Gespräche basierend auf dem Verhalten, den Präferenzen und der Lebenszyklusphase jeder Nutzer:in anzupassen.

Braze-Events und -Attribute können in Regal zum Beispiel verwendet werden, um:

  • Sprache von KI-Agenten zu personalisieren: Aktuelles Verhalten oder Produktinteresse direkt in Gesprächen referenzieren.
    • Beispiel: Wenn eine Nutzer:in Lebensversicherungsoptionen erkundet hat, kann der Agent contact.firstName und contact.brazeProductInterest im Gespräch referenzieren.
  • Dynamische Gesprächslogik zu steuern: Anpassen, was der Agent in Realtime priorisiert.
    • Beispiel: Wenn contact.brazeAge größer als 65 ist, Medicare-Abdeckung priorisieren; andernfalls auf ACA-Pläne und den aktuellen Versicherungsstatus fokussieren.
  • Intelligentes Routing und Eskalation zu ermöglichen: Gespräche basierend auf Wert oder Absicht weiterleiten.
    • Beispiel: Wenn contact.brazeLeadTier „High Value“ ist, nach der Qualifizierung an einen Senior-Agenten weiterleiten; andernfalls mit dem KI-Agenten fortfahren.
  • Nachrichten und Angebote abzustimmen: Anpassen, was der Agent basierend auf dem Campaign-Kontext präsentiert.
    • Beispiel: Wenn contact.brazeCampaignName „Spring Mortgage Promo“ ist, das Aktionsangebot während des Gesprächs hervorheben.

Erstellen Sie ein neues Canvas oder eine neue Campaign mit dem Titel „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"
}

Aktuelle Kontakt-Attribute

Regal empfiehlt außerdem, wichtige Kundenprofil-Attribute in Event-Payloads mitzusenden, damit Regal bei wichtigen Events über aktuelle Kontakt-Attribute verfügt.

Integration: Daten von Regal an Braze senden

Verwenden Sie Regal Reporting Webhooks und Braze-Datentransformation, um Regal-Reporting-Events (wie SMS.sent und call.completed) an Braze zu senden. Nachdem Sie diese Events zugeordnet haben, erscheinen sie in Nutzerprofilen und stehen für Segmentierung, Canvas und Campaigns zur Verfügung.

Schritt 1: Eine Datentransformation in Braze erstellen

Erstellen Sie eine Datentransformation für jeden Regal-Webhook, den Sie an Braze senden möchten.

So erstellen Sie eine Datentransformation:

  1. Navigieren Sie zur Seite Transformationen in Ihrem Braze-Dashboard.
  2. Geben Sie Ihrer Transformation einen Namen und klicken Sie auf Transformation erstellen.
  3. Wählen Sie in der Liste der Transformationen Aktionen anzeigen und dann Webhook-URL kopieren aus.

Schritt 2: Reporting-Webhooks in Regal aktivieren

So richten Sie Reporting-Webhooks ein:

  1. Öffnen Sie die Regal-App und navigieren Sie zur Seite Einstellungen.

  2. Klicken Sie im Abschnitt Reporting Webhooks auf Webhooks erstellen.

  3. Geben Sie im Eingabefeld für den Webhook-Endpunkt die Braze-Datentransformation-Webhook-URL für die zugehörige Datentransformation ein.

Einen Endpunkt aktualisieren

Wenn Sie einen Endpunkt bearbeiten, kann es bis zu 5 Minuten dauern, bis der Cache aktualisiert wurde und Events an Ihren neuen Endpunkt gesendet werden.

Wiederholungsversuche

Derzeit führt Regal keine Wiederholungsversuche für diese Events durch. Wenn Braze nicht innerhalb von 5 Sekunden antwortet, verwirft Regal das Event. Regal plant, Wiederholungsversuche in einer zukünftigen Version hinzuzufügen.

Events

Die vollständige Liste der Reporting-Events, Eigenschaftsdefinitionen und Beispiel-Payloads finden Sie im Regal-Leitfaden zu Reporting Webhooks.

Schritt 3: Regal-Events in Braze-Events transformieren

Das Braze-Feature Datentransformation ermöglicht es Ihnen, eingehende Regal-Events in das Format zu überführen, das zum Hinzufügen als Attribute, Events oder Käufe in Braze erforderlich ist.

  1. Benennen Sie Ihre Datentransformation. Es wird empfohlen, eine Datentransformation pro Event-Webhook einzurichten.

  2. Um die Verbindung zu testen, erstellen Sie einen ausgehenden Anruf vom Regal Agent Desktop an Ihr Telefon und reichen Sie das Gesprächszusammenfassungsformular ein, um ein call.completed-Event zu erzeugen.

  3. Legen Sie fest, welche Bezeichner Sie verwenden möchten, um Ihre Regal-Kontakte Ihren Braze-Profilen zuzuordnen. Die verfügbaren Bezeichner in Regal-Events umfassen:

    • userId – wird nur bei Events gesetzt, wenn Sie diesen Bezeichner zuvor für einen Kontakt gesendet haben
    • traits.phone
    • traits.email – wird nur bei Events gesetzt, wenn Sie diesen Bezeichner zuvor für einen Kontakt gesendet haben

In Braze-zu-Regal-Event-Payloads empfiehlt Regal die Verwendung von traits.phones, um mehrere Telefonnummern und Einwilligung auf Telefonnummernebene zu unterstützen. In Regal-Reporting-Events, die an Braze zurückgesendet werden, kann traits.phone weiterhin als Bezeichner in Event-Payloads erscheinen.

Von Braze unterstützte Bezeichner

  • Braze unterstützt Telefonnummern nicht als Bezeichner. Um diese als Bezeichner zu verwenden, kann die Telefonnummer als Nutzer-Alias in Braze festgelegt werden.
  • Bei Verwendung der Braze-Datentransformation kann die E-Mail-Adresse als Bezeichner verwendet werden. Wenn die E-Mail-Adresse bereits als Profil in Braze existiert, wird das vorhandene Profil aktualisiert. Wenn die E-Mail-Adresse noch nicht in Braze vorhanden ist, wird ein reines E-Mail-Profil erstellt.

Anwendungsfälle

Eine E-Mail aus Braze basierend auf einem Anrufergebnis in Regal triggern

Die folgende Beispiel-Payload zeigt ein call.completed-Event in 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
{
  "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"
}

Die folgende Beispiel-Datentransformation ordnet dies einem angepassten Event in Braze zu.

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;

Profilattribute in Braze basierend auf contact.attribute.edited-Events von Regal aktualisieren

Die folgende Beispiel-Payload zeigt ein contact.attribute.edited-Event in Regal. Regal sendet dieses Event, wenn ein Agent während eines Gesprächs ein Attribut im Profil eines Kontakts aktualisiert.

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"
}

Die folgende Beispiel-Datentransformation ordnet die neuen Werte der angepassten Eigenschaften den relevanten Attributen in Ihren Braze-Profilen zu:

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;

Ihre Experimente in Braze und Regal mithilfe von contact.experiment.assigned-Events synchron halten

Die folgende Beispiel-Payload zeigt ein contact.experiment.assigned-Event in Regal.

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"
}

Die folgende Beispiel-Datentransformation ordnet dies einem angepassten Event in Braze zu.

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;

Einen Kontakt in Braze basierend auf contact.unsubscribed-Events von Regal abmelden

Die folgende Beispiel-Payload zeigt ein contact.unsubscribed-Event in Regal.

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"
}

Die folgende Beispiel-Datentransformation meldet den Kontakt in Braze ab.

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;

Maßgeschneiderte Follow-up-Journeys in Braze basierend auf call.analysis.available-Events von Regal triggern

Verwenden Sie das call.analysis.available-Event von Regal, um den Hauptgrund zu identifizieren, warum eine Kund:in nicht konvertiert hat, und triggern Sie eine maßgeschneiderte Follow-up-Journey in Braze.

Zum Beispiel:

  • Wenn der Haupteinwand der Preis ist, senden Sie eine wertorientierte Follow-up-E-Mail.
  • Wenn der Haupteinwand das Timing ist, ordnen Sie die Nutzer:in einer Nurture-Sequenz zur späteren erneuten Prüfung zu.
  • Wenn der Haupteinwand Vertrauen ist, senden Sie Testimonials, Bewertungen oder Compliance-Zusicherungen.
  • Wenn needs_human_agent den Wert „true“ hat, benachrichtigen Sie ein Vertriebs- oder Support-Team und unterdrücken Sie weitere automatisierte Nachrichten.

Die folgende Beispiel-Payload zeigt ein call.analysis.available-Event in 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
{
  "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"
}

Verwenden Sie eine Datentransformation, um call_analysis-Felder (wie primary_objection und needs_human_agent) angepassten Events oder Profilattributen in Braze zuzuordnen. Erstellen Sie dann Canvas- oder Campaign-Logik in Braze, die basierend auf diesen Werten verzweigt.

Profilattribute mit Transkript-Links aus call.transcript.available-Events aktualisieren

Verwenden Sie das call.transcript.available-Event, um einen Link zum vollständigen Anruftranskript an Braze zu senden. Ordnen Sie die Transkript-URL mit einer Datentransformation einem Braze-Kundenprofil-Attribut zu, damit Ihr Team Gespräche direkt über das Kundenprofil aufrufen und überprüfen kann.

Die folgende Beispiel-Payload zeigt ein call.transcript.available-Event in 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
{
  "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"
}
New Stuff!