Google Telephony Platform

In dieser Anleitung erfahren Sie, wie Sie eine neue Telefonnummer der Google Telephony Platform (GTP) für Ihre Agent-Anwendung erstellen und konfigurieren. Mit dieser sofort einsatzbereiten Funktion können Sie Ihrem Agent in nur wenigen Minuten eine neue Telefonnummer zuweisen, die eingehenden Traffic verarbeiten kann.

Wenn Sie eine bereits vorhandene Telefonnummer verwenden möchten, können Sie Ihr Session Border Control-System (SBC) so konfigurieren, dass die vorhandene Nummer automatisch an die neue GTP-Nummer weitergeleitet wird. Eine detaillierte Anleitung zur SBC-Integration und -Einrichtung finden Sie in der Dialogflow CX Telefondokumentation.

Hinweis

  1. Folgen Sie der Anleitung auf der Seite „Einrichtung und Bereinigung“, um das Projekt zu erstellen oder zu konfigurieren, das Sie für die Bereitstellung verwenden möchten.
  2. Erstellen und konfigurieren Sie eine Agent-Anwendung, die Sie für die Bereitstellung verwenden möchten.
  3. Aktivieren Sie die Dialogflow API im Projekt.

Beschränkungen

Es gelten folgende Einschränkungen:

  • Standardmäßige PSTN-Telefonnummern (Public Switched Telephone Network) werden für die Multiregion us unterstützt. Für die Multiregion eu können Sie virtuelle Telefonnummern verwenden.
  • In der Multiregion us werden nur US-amerikanische Telefonnummern unterstützt.
  • Virtuelle Telefonnummern können nicht von Standard-PSTN-Telefonen aus angerufen werden.

Agent-Anwendung mit einer GTP-Telefonnummer verbinden

  1. Öffnen Sie die CX Agent Studio-Konsole und wählen Sie Ihre Agent-Anwendung aus.
  2. Klicken Sie oben in der Konsole auf den Tab Bereitstellen und dann auf Mit einer Plattform verbinden. Wenn Sie bereits Kanäle bereitgestellt haben, klicken Sie auf + Neuer Kanal.
  3. Geben Sie einen Namen für den Kanal ein und wählen Sie im Menü Plattform die Option Google Telephony Platform (GTP) aus.
  4. Standardmäßig wird eine virtuelle Telefonnummer bereitgestellt, mit der Sie Ihre Agent-Anwendung im Browser testen können. Wenn Sie eine Standard-PSTN-Telefonnummer (Public Switched Telephone Network) bereitstellen möchten, wählen Sie diese Option im Drop-down-Menü Connection type aus.
  5. Wählen Sie eine Version für die Bereitstellung aus. Wenn Sie noch keine Versionen haben, erstellen Sie eine neue.
  6. (Optional) Klicken Sie auf die Schaltfläche Kanalspezifisches Verhalten, um zusätzliche Optionen zu konfigurieren. Sie können die Länge der Agent-Antwort ändern, die DTMF-Eingabe aktivieren und Nutzern erlauben, den Agent während der Antwort zu unterbrechen. Weitere Informationen zu diesen Einstellungen finden Sie in der Dokumentation zu den Einstellungen der Agent-Anwendung.
  7. Klicken Sie auf Kanal erstellen. Jetzt sehen Sie die Telefonnummer und die Bereitstellungs-ID für den Kanal.
  8. Wenn Sie eine PSTN-Telefonnummer bereitgestellt haben, rufen Sie sie an, um zu testen, ob sie mit Ihrer Agent-Anwendung verbunden ist. Klicken Sie dann auf Fertig. Der neue Kanal wird auf der Seite Bereitgestellte Kanäle der Agent-Anwendung angezeigt. Kunden können jetzt über diese Nummer Ihren Agent anrufen. Wenn Sie eine virtuelle Telefon nummer bereitgestellt haben, können Sie sie im WebRTC-Widget testen.

Agent-Anwendung im WebRTC-Widget testen

Unabhängig davon, ob Sie eine Standard-PSTN- oder eine virtuelle Telefonnummer bereitgestellt haben, können Sie Ihre Agent-Anwendung im WebRTC-Widget mit Audio, Video oder Text testen.

  1. Klicken Sie oben in der Konsole auf den Tab Bereitstellen.
  2. Klicken Sie neben dem Namen des bereitgestellten Kanals auf das Symbol. Rechts wird ein WebRTC-Widget geöffnet.
  3. Wenn Sie vom WebRTC-Widget dazu aufgefordert werden, gewähren Sie dem Browser die Berechtigung, auf Ihr Mikrofon und Ihre Kamera zuzugreifen.
  4. Interagieren Sie mit Ihrem Agent über Audio, Video oder Text. Wenn Sie Video verwenden, können Sie auch zur Bildschirmfreigabe wechseln. Verwenden Sie dazu das Drop-down-Menü neben dem Kamerasymbol.

Verhalten der Agent-Anwendung konfigurieren

Sie können das Verhalten Ihres Agent beim Beenden und Weiterleiten von Anrufen anpassen.

Anrufbeendigung durch den Agent konfigurieren

So erlauben Sie dem Agent, einen Anruf zu beenden:

  1. Klicken Sie rechts oben auf das Plussymbol und dann auf Tools hinzufügen.
  2. Fügen Sie dem Agent das Tool end_session hinzu (und allen Sub-Agenten, falls vorhanden). Dieses Systemtool ist standardmäßig für jeden Agent verfügbar.
  3. Fügen Sie der Anleitung eine Beschreibung des Verhaltens bei der Anrufbeendigung hinzu. Beispiel: End the call by executing the end_session tool with arguments reason="customer_query_ended".

Anruf an einen Kundenservicemitarbeiter weiterleiten

So konfigurieren Sie den Agent, dass er den Anruf an einen Kundenservicemitarbeiter weiterleitet und den virtuellen Kundenservicemitarbeiter beendet:

  • Fügen Sie dem Agent das Systemtool end_session hinzu (und allen Sub-Agenten, falls vorhanden).
  • Erstellen Sie die folgenden Variablen:
    • ESCALATION_MESSAGE: Fügen Sie optional Text in das Feld Standardwert ein, wenn der Agent vor der Weiterleitung des Anrufs eine Nachricht sagen soll.
    • telephonyTransferCall: Legen Sie für Typ die Option Benutzerdefiniertes Schema fest. Geben Sie das folgende JSON-Objekt in das Eingabefeld Schema ein. Verwenden Sie dabei die Telefonnummer, an die der Agent Anrufe weiterleiten soll (E.164-Format erforderlich).
{
  "phoneNumber": "+PHONE_NUMBER"
}
  • Fügen Sie der Anleitung eine Beschreibung dieses Verhaltens hinzu. Beispiel: Escalate the call to a human agent by executing the end_session tool with session_escalated=true

Weiterleitung an einen Kundenservicemitarbeiter durch einen Partner

Wenn Ihr System einen Partner verwendet, der nicht zu Google gehört haben Sie zwei Möglichkeiten für die Weiterleitung an einen Kundenservicemitarbeiter: eine liveAgentHandoff Variable oder eine TELEPHONY_PAYLOAD Variable. In beiden Fällen kann die JSON-Nutzlast je nach Anleitung des Partners variieren.

Weiterleitung an einen Kundenservicemitarbeiter über „liveAgentHandoff“ :

  • Fügen Sie dem Agent das Systemtool end_session hinzu (und allen Sub-Agenten, falls vorhanden).
  • Erstellen Sie die folgende Variable:
    • liveAgentHandoff: Legen Sie für Typ die Option Benutzerdefiniertes Schema fest und fügen Sie das vom Partner erforderliche JSON-Schema hinzu, z. B.:
{
  "PARTNER_NAME": {
    "type": "action",
    "action": "deflection",
    "deflection_type": "sip",
    "sip_uri": "SIP_URI",
    "sip_refer": true,
    "sip_parameters": {
      "x-header": "value"
    }
  }
}
  • Fügen Sie der Anleitung eine Beschreibung dieses Verhaltens hinzu. Beispiel: Escalate the call to a human agent by executing the end_session tool with session_escalated=true

Weiterleitung an einen Kundenservicemitarbeiter mit benutzerdefinierter Nutzlast :

  • Fügen Sie dem Agent das Systemtool end_session hinzu (und allen Sub-Agenten, falls vorhanden).
  • Erstellen Sie die folgende Variable:
    • TELEPHONY_PAYLOAD: Legen Sie für Typ die Option Benutzerdefiniertes Schema fest und fügen Sie das vom Partner erforderliche JSON-Schema hinzu, z. B.:
{
  "PARTNER_NAME": {
    "type": "action",
    "action": "deflection",
    "deflection_type": "sip",
    "sip_uri": "SIP_URI",
    "sip_refer": true,
    "sip_parameters": {
      "x-header": "value"
    }
  }
}
  • Fügen Sie der Anleitung eine Beschreibung dieses Verhaltens hinzu. Beispiel: Escalate the call to a human agent by executing the end_session tool with session_escalated=true

SIP-Signalisierung verwenden, um Daten an den Agent zu senden und von ihm zu empfangen

Wenn Sie eine SBC-Integration durchgeführt haben, können Sie die SIP-Signalisierung verwenden, um Daten über SIP-Header an den Agent zu senden. Sie können auch Daten senden, wenn ein BYE-, REFER- oder INVITE-Befehl vom Agent ausgelöst wird.

Alle Daten, die an den Agent gesendet werden, sind über Variablen zugänglich. Sie müssen zuerst die Variablen erstellen, um auf die Daten zugreifen zu können.

Die Telefonnummer des Anrufers (ANI) wird in der Variablen telephony-caller-id vom Typ Text gespeichert.

Wenn der Agent vor einer Eskalation eine Nachricht sagen soll, muss die Nachricht in der Variablen ESCALATION_MESSAGE vom Typ Text gespeichert werden.

Für einen SIP-REFER- oder SIP-INVITE-Befehl muss die Variable telephonyTransferCall vom Typ Custom schema (advanced) mit den angegebenen Variablen phoneNumber und useOriginatingTrunk vorhanden sein.

Alle Daten, die gesendet werden müssen, müssen in der Variablen liveAgentHandoff vom Typ Custom schema (advanced) vorhanden sein.

UUI-SIP-Header

Sie können eine durch Semikolons getrennte Liste von Schlüssel/Wert-Paaren senden, die hexadezimal codiert ist, gefolgt von ;encoding=hex;purpose=Goog-Session-Param. Wenn Sie in Ihrem Agent darauf zugreifen möchten, erstellen Sie eine Variable mit dem Namen uui-headers und dem Typ List.

Wenn beispielsweise der String key1=value1;key2=value2 gesendet werden muss, sollte der folgende UUI-Header gesendet werden. Die Nutzlast ist der hexadezimal codierte Wert key1=value1;key2=value2.

User-to-User: 6B6579313D76616C7565313B6B6579323D76616C756532;encoding=hex;purpose=Goog-Session-Param

Die Variable uui-headers enthält das folgende Objekt:

"uui-headers": ["key1=value1;key2=value2"]

Wenn Sie uuiHeaders senden möchten, wenn Sie das Tool end_session aufrufen, geben Sie params={"liveAgentHandoff": {"uuiHeaders": [ {uui-headers}[0] ]}} an.

Wenn beispielsweise die gesendeten UUI-Header bei einem SIP-BYE-Befehl gesendet werden müssen, sieht die Anleitung so aus:

If the user says that they would like to speak to an agent, escalate the call to the agent by executing the end_session tool with session_escalated=true and params={"ESCALATION_MESSAGE": "I am transferring you to an agent", "liveAgentHandoff":{"uuiHeaders": [ {uui-headers}[0] ]}}.

SIP-X-Header

SIP-Header, die mit x- beginnen, können an den Agent gesendet und als Variable x-headers vom Typ Custom schema (advanced) gespeichert werden. Das Präfix x- wird in der Variablen aus dem Header-Namen entfernt.

Wenn der SIP-INVITE-Befehl beispielsweise den folgenden Header enthält:

x-billing-id: 12345

Die Variable x-headers enthält das folgende Objekt:

{
  "x-headers": {
    "billing-id": "12345"
  }
}

Wenn Sie xHeaders senden möchten, wenn Sie das Tool end_session aufrufen, geben Sie params={"liveAgentHandoff": {"xHeaders": {x-headers} }} an.

Wenn beispielsweise die gesendeten X-Header bei einem SIP-BYE-Befehl gesendet werden müssen, sieht die Anleitung so aus:

If the user says that they would like to speak to an agent, escalate the call to the agent by executing the end_session tool with session_escalated=true and params={"ESCALATION_MESSAGE": "I am transferring you to an agent", "liveAgentHandoff":{"xHeaders": {x-headers} }}.

SIP-BYE-Befehl senden

Wenn der Agent den Anruf beendet, wird ein SIP-BYE-Befehl gesendet. Wenn Sie uuiHeaders und xHeaders im SIP-BYE-Befehl senden möchten, verwenden Sie eine Anleitung, die dem folgenden Beispiel ähnelt:

If the user says that they would like to speak to an agent, escalate the call to the agent by executing the end_session tool with session_escalated=true and params={"ESCALATION_MESSAGE": "I am transferring you to an agent", "liveAgentHandoff":{"xHeaders": {x-headers}, "uuiHeaders": [{uui-headers[0]}] }}.

SIP-REFER-Befehl senden

Wenn der Agent den Anruf an einen Kundenservicemitarbeiter weiterleiten und den Anruf beenden muss, sollte ein SIP-REFER-Befehl verwendet werden. Ein SIP-REFER-Befehl wird ausgelöst, indem Sie in der Variablen liveAgentHandoff die Option "sipRefer": true angeben. Die Nummer für die Weiterleitung muss in der Variablen telephonyTransferCall angegeben werden.refer-to Beispiel für eine Anleitung zum Ausführen eines SIP-REFER-Befehls und zum Senden von uuiHeaders und xHeaders:

If the user says that they would like to speak to an agent, escalate the call to the agent by executing the end_session tool with session_escalated=true and params={"ESCALATION_MESSAGE": "I am transferring you to an agent", "telephonyTransferCall": {"phoneNumber": "+19496855555", "useOriginatingTrunk": true}, "liveAgentHandoff":{"sipRefer": true, "xHeaders": {x-headers}, "uuiHeaders": [{uui-headers[0]}] }}.

SIP-INVITE-Befehl senden

Wenn der Agent den Anruf an einen Kundenservicemitarbeiter weiterleiten und im Anruf bleiben muss, damit die Agent Assist-Funktionen verwendet werden können, sollte ein SIP-INVITE-Befehl verwendet werden. Ein SIP-INVITE-Befehl wird durch die phoneNumber in der Variablen telephonyTransferCall ausgelöst. Beispiel für eine Anleitung zum Ausführen eines SIP-INVITE-Befehls und zum Senden von uuiHeaders und xHeaders:

If the user says that they would like to speak to an agent, escalate the call to the agent by executing the end_session tool with session_escalated=true and params={"ESCALATION_MESSAGE": "I am transferring you to an agent", "telephonyTransferCall": {"phoneNumber": "+19496855555", "useOriginatingTrunk": true}, "liveAgentHandoff":{"xHeaders": {x-headers}, "uuiHeaders": [{uui-headers[0]}] }}.

Handler für Remote-Anrufunterbrechungen erstellen

Wenn ein Kunde auflegt, wird ein bestimmtes Ereignis ausgelöst: sys.remote-call-disconnected. Dieses Ereignis kann verwendet werden, um einen Tool-Aufruf in CX Agent Studio auszulösen. Im folgenden Beispiel wird das Tool sum aufgerufen, wenn der Kunde auflegt.

Das Tool sum ist als Python-Code-Tool definiert und enthält den folgenden Code:

def sum(x: int, y: int) -> int:
  """
  Computes the sum of two numbers.

  Args:
    x: The first number.
    y: The second number.

  Returns:
    The sum of the two numbers.
  """
  return x+y

Erstellen Sie im Root-Agent einen Before LLM-Callback mit der Logik, um nach dem Ereignis „Anruf unterbrochen“ zu suchen. Rufen Sie in LlmResponse das Tool sum und dann das Tool end_session auf.

def before_model_callback(callback_context: CallbackContext, llm_request: LlmRequest) -> Optional[LlmResponse]:

  for part in callback_context.get_last_user_input():
    if part.text == "<event>sys.remote-call-disconnected</event>":
      return LlmResponse.from_parts(
        [Part.from_function_call('sum', {'x': 1, 'y': 2}),
         Part.from_end_session(reason='sum tool called after caller disconnected')]
      )
  return None