Handhabung von Telefoninteraktionen

Wenn Ihr Assistent die Telefonintegration verwendet, können Sie verschiedene Antworttypen verwenden, um das Verhalten der Integration anzupassen oder den Ablauf der Dialoge zu verwalten, die Ihr Assistent mit Kunden über das Telefon führt.

AWS IBM Cloud

Sie können Antworttypen verwenden, um die folgenden telefonspezifischen Aktionen durchzuführen:

In einigen Fällen können Sie Antworttypen kombinieren, um mehrere Aktionen auszuführen. Wenn Sie zum Beispiel die Zwei-Faktor-Authentifizierung aktivieren möchten, können Sie die Unterstützung für die Eingabe über das Telefontastenfeld anfordern und eine Textnachricht aus demselben Aktionsschritt senden. Weitere Informationen finden Sie unter Definieren einer Folge von Telefonbefehlen.

Sie können auch die folgenden telefonspezifischen Aktionen durchführen:

Weitere Informationen finden Sie in der Referenz für Antworttypen. Weitere Informationen zu telefonspezifischen Kontextvariablen finden Sie unter „Telefon-Kontextvariablen “.

Telefonspezifische Antworten zu Ihrem Assistenten hinzufügen

Um eine sprachbezogene Interaktion aus einem Aktionsschritt heraus zu initiieren, fügen Sie im Array generic eine Antwort mit dem entsprechenden Antworttyp hinzu. Weitere Informationen zum Hinzufügen von Antworten mithilfe des JSON-Editors finden Sie unter „Antworten mithilfe des JSON-Editors definieren “.

Erweiterte Einstellungen für den Dienst „ Speech to Text “ anwenden

Verwenden Sie den speech_to_text Antworttyp, um Konfigurationsbefehle an die von der Telefonintegration verwendete Instanz des Dienstes „ Speech to Text “ zu senden. Indem Sie eine speech_to_text Antwort aus einem Aktionsschritt senden, können Sie die Konfiguration von „ Speech to Text “ während eines Gesprächs dynamisch ändern.

Standardmäßig bleiben alle Änderungen, die Sie an der Konfiguration von „ Speech to Text “ vornehmen, für den Rest der Konversation bestehen oder bis Sie sie erneut aktualisieren. Sie können dieses Verhalten ändern, indem Sie die update_strategy Eigenschaft des parameters Objekts festlegen.

Der Antworttyp speech_to_text hat folgendes Format:

{
  "generic": [
    {
      "response_type": "speech_to_text",
      "command_info": {
        "type": "<command type>",
        "parameters": {
          "parameter name1": "parameter value",
          "parameter name2": "parameter value"
        }
      }
    }
  ]
}

Jeder Befehlstyp und die zugehörigen Parameter werden in den folgenden Abschnitten beschrieben.

command_info.type : configure

Konfiguriert den Dienst „ Speech to Text “ dynamisch neu, indem eine Reihe von Konfigurationsparametern angewendet wird, die sich am Gesprächsverlauf orientieren können. Sie können beispielsweise eine bestimmte Anpassungs-ID oder Grammatik an einem bestimmten Punkt im Dialog auswählen.

Parameter

Beschreibung

erforderlich

Standard

narrowband_recognize

Die Konfiguration des Dienstes „ Speech to Text “, die für Schmalband-Codecs (wie PCMU und PCMA, die mit 8 kHz abgetastet werden) verwendet werden soll. Die Parameter für dieses Objekt werden bei der Verbindung mit dem Dienst „ Speech to Text “ für Spracherkennungsanfragen verwendet. Weitere Informationen zu diesen Parametern finden Sie unter Speech to Text API-Dokumentation.

nein

Aktuelle Konfiguration von „ Speech to Text

broadband_recognize

Die zu verwendende Dienstkonfiguration „ Speech to Text “ für Breitband-Codecs (z. B. „ G722 “, das mit einer Abtastrate von 8 kHz abgetastet wird). Die Parameter für dieses Objekt werden bei der Verbindung mit dem Dienst „ Speech to Text “ für Spracherkennungsanfragen verwendet. Weitere Informationen zu diesen Parametern finden Sie unter Speech to Text API-Dokumentation.

nein

Aktuelle Konfiguration von „ Speech to Text

band_preference

Gibt an, welches Audioband (narrowband oder broadband) bevorzugt wird, wenn Audiocodecs für die Sitzung vereinbart werden. Geben Sie broadband an, damit breitbandige Audiodaten verwendet werden, falls möglich.

nein

narrowband

update_strategy

Gibt die Aktualisierungsstrategie an, die beim Festlegen der Sprachkonfiguration verwendet werden soll. Mögliche Werte sind: \n - replace: Ersetzt die Konfiguration für den Rest der Sitzung. Alle Felder auf oberster Ebene in der neuen Konfiguration überschreiben die vorherige Konfiguration vollständig. \n - replace_once: Ersetzt die Konfiguration nur für den nächsten Gesprächsabschnitt. Dann wird die vorherige Konfiguration verwendet. \n - merge: Führt die neue Konfiguration für den Rest der Sitzung mit der bestehenden Konfiguration zusammen. Es werden nur geänderte Parameter überschrieben; alle anderen Konfigurationsparameter bleiben unverändert. \n - merge_once: Die neue Konfiguration wird nur für den nächsten Gesprächsabschnitt mit der bestehenden Konfiguration zusammengeführt. Dann wird die vorherige Konfiguration verwendet.

nein

replace

Die Parameter, die Sie für narrowband_recognize und festlegen broadband_recognize können, entsprechen den Parametern, die über die Schnittstelle „ Speech to Text “ ( WebSocket ) zur Verfügung gestellt werden. Die WebSocket-API sendet zwei Parametertypen: Abfrageparameter, die gesendet werden, wenn die Telefonintegration eine Verbindung zum Service herstellt, und Nachrichtenparameter, die als Teil der JSON-Daten im Anforderungshauptteil gesendet werden. Beispielsweise ist ein smart_formatting Abfrageparameter und ein Parameter model der Meldung „ WebSocket “. Eine vollständige Liste der Parameter finden Sie unter Speech to Text API-Dokumentation.

Sie können die folgenden Abfrageparameter für die Verbindung der Telefonintegration zum Dienst „ Speech to Text “ festlegen. Alle weiteren Parameter, die Sie für narrowband oder definieren broadband , werden als Teil der Anfrage für die Nachricht „ WebSocket “ weitergeleitet.

  • model

  • acoustic_customization_id

  • version

  • x-watson-learning-opt-out

  • base_model_version

  • language_customization_id

Die folgenden Parameter des Dienstes „ Speech to Text “ können nicht geändert werden, da sie feste Werte haben, die von der Telefonintegration verwendet werden.

  • action

  • content-type

  • interim_results

  • continuous

  • inactivity_timeout

Bei der dynamischen Konfiguration über den KI-Assistenten mit dem configure Befehl werden nur die Felder auf oberster Ebene, wie z. B. narrowband oder broadband, aktualisiert. Wenn diese Felder im Befehl nicht angegeben werden, bleiben die ursprünglichen Konfigurationseinstellungen erhalten. Sie können die update_strategy Werte merge und verwenden merge_once , um Konfigurationsparameter mit der bestehenden Konfiguration zusammenzuführen.

Angepasstes Sprachmodell verwenden

Wenn Sie die Telefonintegration einrichten, können Sie die Integration so konfigurieren, dass durchgehend ein angepasstes Sprachmodell verwendet wird.

Sie können allerdings zumeist das Standardsprachmodell verwenden und ein angepasstes Sprachmodell nur zur Verwendung für bestimmte Themen angeben, bei denen Ihr Assistent Kunden helfen soll. Sie könnten zum Beispiel ein angepasstes Modell, das auf medizinische Fachbegriffe spezialisiert ist, für eine Aktion verwenden, die ausschließlich Hilfe in Bezug auf Arztrechnungen anbietet. Sie können ein angepasstes Sprachmodell auf einen bestimmten Zweig des Dialogs anwenden.

Weitere Informationen finden Sie unter „Erstellen eines benutzerdefinierten Sprachmodells “.

Verwenden Sie den Antworttyp speech_to_text, um ein angepasstes Sprachmodell auf einen Aktionsschritt anzuwenden.

{
  "generic": [
    {
      "response_type": "speech_to_text",
      "command_info": {
        "type": "configure",
        "parameters": {
          "narrowband_recognize": {
            "x-watson-learning-opt-out": true,
            "model": "en-US_NarrowbandModel",
            "profanity_filter": true,
            "smart_formatting": true,
            "language_customization_id": "81d3630-ba58-11e7-aa4b-41bcd3f6f24d",
            "acoustic_customization_id": "e4766090-ba51-11e7-be33-99bd3ac8fa93"
          }
        }
      }
    }
  ]
}

Sie können auch ein akustisches Modell anwenden, das Sie trainieren können, um Hintergrundgeräusche, Akzente oder andere Dinge zu behandeln, die mit der Qualität oder dem Rauschen des Signals zusammenhängen.

Verwendung einer benutzerdefinierten Grammatik

Der Dienst „ Speech to Text “ unterstützt die Verwendung von Grammatik. Mit Hilfe der Grammatik können Sie den Ton so konfigurieren, dass er nur bestimmten Merkmalen entspricht.

  • Ein angepasstes Sprachmodell erweitert das Basisvokabular des Service.

  • Eine Grammatik schränkt die Wörter ein, die der Service aus diesem Vokabular erkennen kann.

Wenn Sie zusammen mit einem angepassten Sprachmodell für die Spracherkennung eine Grammatik verwenden, kann der Service ausschließlich Wörter, Ausdrücke und Zeichenfolgen erkennen, die von der Grammatik erkannt werden. Vielleicht wollen Sie zum Beispiel nur eine yes oder no Antwort akzeptieren. Sie können eine Grammatik definieren, die nur diese Optionen zulässt.

Weitere Informationen finden Sie unter „Verwendung von Grammatik mit benutzerdefinierten Sprachmodellen “.

Dieses Beispiel zeigt, wie eine benutzerdefinierte Grammatik während der Konversation angegeben wird:

{
  "generic": [
    {
      "response_type": "speech_to_text",
      "command_info": {
        "type": "configure",
        "parameters": {
          "update_strategy": "merge_once",
          "narrowband_recognize": {
            "x-watson-learning-opt-out": true,
            "grammar_name": "names-abnf",
            "language_customization_id": "81d3630-ba58-11e7-aa4b-41bcd3f6f24d"
          }
        }
      }
    }
  ]
}

Beispiele

Die folgenden Beispiele veranschaulichen, wie der speech_to_text Antworttyp verwendet wird, um Konfigurationsbefehle an den Dienst „ Speech to Text “ zu senden.

Beispiel: Sprachmodell festlegen

In diesem Beispiel wird das Sprachmodell auf Spanisch (es-ES_NarrowbandModel) umgeschaltet und die intelligente Formatierung aktiviert.


{
  "generic": [
    {
      "response_type": "speech_to_text",
      "command_info": {
        "type": "configure",
        "parameters": {
          "narrowband_recognize": {
            "model": "es-ES_NarrowbandModel",
            "smart_formatting": true
          }
        }
      }
    }
  ]
}

Beispiel: Aktualisierung der recognizeBody Eigenschaft für einen Gesprächszug

Das folgende Beispiel zeigt, wie die Verwendung eines angepassten Sprachmodells für einen einzelnen Turnus des Conversation-Turnus angegeben wird. Setzen Sie update_strategy auf merge_once und geben Sie die ID des benutzerdefinierten Sprachmodells in den Konfigurationsparametern an.

{
  "generic": [
    {
      "response_type": "speech_to_text",
      "command_info": {
        "type": "configure",
        "parameters": {
          "update_strategy": "merge_once",
          "narrowband_recognize": {
            "language_customization_id": "ao45vohgFuxyOQRgztu-02I10ut7aJcM-AdInT-VWgj3V" 
          }
        }
      }
    }
  ]
}

Erweiterte Einstellungen für den Dienst „ Text to Speech “ anwenden

Verwenden Sie den text_to_speech Antworttyp, um Konfigurationsbefehle an die von der Telefonintegration verwendete Instanz des Dienstes „ Text to Speech “ zu senden. Indem Sie eine text_to_speech Antwort aus einem Aktionsschritt senden, können Sie die Konfiguration von „ Text to Speech “ während eines Gesprächs dynamisch ändern.

Standardmäßig bleiben alle Änderungen, die Sie an der Konfiguration von „ Text to Speech “ vornehmen, für den Rest der Konversation bestehen oder bis Sie sie erneut aktualisieren. Sie können dieses Verhalten ändern, indem Sie die update_strategy Eigenschaft des parameters Objekts festlegen.

Der Antworttyp speech_to_text hat folgendes Format:


{
  "generic": [
    {
      "response_type": "text_to_speech",
      "command_info": {
        "type": "<command type>",
        "parameters": {
          "parameter name": "parameter value",
          "parameter name": "parameter value"
        }
      }
    }
  ]
}

Jeder Befehlstyp und die zugehörigen Parameter werden in den folgenden Abschnitten beschrieben.

command_info.type : configure

Konfiguriert den Dienst „ Text to Speech “ dynamisch neu, indem eine Reihe von Konfigurationsparametern angewendet wird, die sich am Gesprächsverlauf orientieren können. Sie können beispielsweise eine bestimmte Stimme an einem bestimmten Punkt in der Konversation auswählen.

Parameter

Beschreibung

erforderlich

Standard

synthesize

Die Konfiguration des Dienstes „ Text to Speech “, die bei der Audiosynthese verwendet werden soll. Die von diesem Objekt definierten Parameter werden bei der Verbindung mit dem Dienst „ Text to Speech “ für Sprachsyntheseanfragen verwendet. Weitere Informationen zu diesen Parametern finden Sie unter Text to Speech API-Dokumentation.

ja

Aktuelle Konfiguration von „ Text to Speech

update_strategy

Gibt die Aktualisierungsstrategie an, die beim Festlegen der Sprachkonfiguration verwendet werden soll. Mögliche Werte sind: \n - replace: Ersetzt die Konfiguration für den Rest der Sitzung. Alle Felder auf oberster Ebene in der neuen Konfiguration überschreiben die vorherige Konfiguration vollständig. \n - replace_once: Ersetzt die Konfiguration nur für den nächsten Gesprächsabschnitt. Dann wird die vorherige Konfiguration verwendet. \n - merge: Führt die neue Konfiguration für den Rest der Sitzung mit der bestehenden Konfiguration zusammen. Es werden nur geänderte Parameter überschrieben; alle anderen Konfigurationsparameter bleiben unverändert. \n - merge_once: Die neue Konfiguration wird nur für den nächsten Gesprächsabschnitt mit der bestehenden Konfiguration zusammengeführt. Dann wird die vorherige Konfiguration verwendet.

nein

replace

Die Parameter, die Sie für festlegen synthesize können, entsprechen den Parametern, die von der Schnittstelle „ Text to Speech “ ( WebSocket ) bereitgestellt werden. Die WebSocket-API sendet zwei Parametertypen: Abfrageparameter, die gesendet werden, wenn die Telefonintegration eine Verbindung zum Service herstellt, und Nachrichtenparameter, die als Teil der JSON-Daten im Anforderungshauptteil gesendet werden. Eine vollständige Liste der Parameter finden Sie unter Text to Speech API-Dokumentation.

command_info.type : disable_barge_in

Deaktiviert das Einsprechen (in eine laufende Bandansage), sodass die Wiedergabe nicht unterbrochen wird, wenn der Anrufer während der Audiowiedergabe spricht.

Keine Parameter.

command_info.type : enable_barge_in

Aktiviert das Einsprechen (in eine laufende Bandansage), sodass Anrufer die Wiedergabe durch Sprechen unterbrechen können.

Keine Parameter.

Stimme des Assistenten ändern

Sie können die Stimme Ihres Assistenten ändern, wenn er bestimmte Themen in der Konversation behandelt. Sie können beispielsweise eine Stimme mit einem britischen Akzent für eine Verzweigung der Konversation verwenden, die nur für Kunden in Großbritannien gilt.

Dieses Beispiel zeigt, wie eine Stimme während der Konversation vorgegeben wird:


{
  "generic": [
    {
      "response_type": "text_to_speech",
      "command_info": {
        "type": "configure",
        "parameters": {
          "synthesize": {
            "voice": "en-GB_KateV3Voice"
          }
        }
      }
    }
  ]
}

Geben Sie im Parameter voice das Sprechmodell an, das Sie verwenden wollen. Weitere Informationen zu den verfügbaren Sprachmodellen finden Sie unter „Unterstützte Sprachen und Stimmen “.

Das von Ihnen angegebene Modell muss von der Instanz des Dienstes „ Text to Speech “ unterstützt werden, die für die Verwendung mit der Integration konfiguriert ist.

Weiterleitung eines Anrufs an einen Live-Agenten

Wenn Sie die Telefonintegration konfigurieren, können Sie optional eine Backup-Callcenter-Unterstützung einrichten, die es dem Assistenten ermöglicht, einen Anruf an einen Mitarbeiter weiterzuleiten. Sie können den Antworttyp Verbinden mit einem Agenten in einem Aktionsschritt verwenden, um eine Übergabe an einen Live-Agenten an einem bestimmten Punkt des Gesprächs einzuleiten. Wenn eine „Connect to Agent“-Antwort an die Telefonintegration gesendet wird, wird eine SIP-Weiterleitung mit der REFER SIP-Nachricht initiiert, wie in RFC 5589 definiert.

Weitere Informationen zum Einleiten einer Weiterleitung an einen Live-Agenten während des Gesprächs finden Sie in der folgenden Dokumentation:

Die Telefonintegration unterstützt mehr Parameter für den Antworttyp Verbindung zum Agenten. Sie können diese telefonspezifischen Parameter mit dem JSON-Editor zum Antworttyp connect_to_agent hinzufügen.

Der Antworttyp connect_to_agent unterstützt die Möglichkeit, die Zielübertragungsinformationen unter dem Parameter transfer_info anzugeben.

Das folgende Beispiel zeigt eine Übertragung, die alle konfigurierbaren Parameter verwendet:

{
  "generic": [
    {
      "response_type": "connect_to_agent",
      "transfer_info": {
        "target": {
          "service_desk": {
            "sip": {
              "uri": "sip:user\\@domain.com",
              "transfer_headers": [
                {
                  "name": "Customer-Header1",
                  "value": "Some-Custom-Info"
                },
                {
                  "name": "User-to-User",
                  "value": "XXXXXX"
                }
              ],
              "transfer_headers_send_method": "refer_to_header"
            }
          }
        }
      },
      "agent_available": {
        "message": "I'll transfer you to an agent"
      },
      "agent_unavailable": {
        "message": "Sorry, I could not find an agent."
      },
      "message_to_human_agent": "The caller needs help resetting their password"
    }
  ]
}

Der Antworttyp connect_to_agent unterstützt die folgenden telefonspezifischen Eigenschaften.

Parameter

Standard

Beschreibung

service_desk.sip.uri

Nicht zutreffend

Die SIP- oder Telefon-URI, an die der Anruf weitergeleitet werden soll, z. B. sip:12345556789\\@myhost.com oder tel:+18883334444. Optional für die Methode hangup.

service_desk.sip.transfer_method

refer

Legt fest, wie der Anruf weitergeleitet wird: \n - refer: Der Anruf wird durch das Senden einer REFER SIP-Anfrage weitergeleitet; dies ist der Standardwert. \n - hangup: Der Anruf wird durch das Senden einer BYE SIP-Anfrage weitergeleitet.

service_desk.sip.transfer_target_header

Transfer-Target

Der SIP-Header, der das Übertragungsziel enthält, wenn eine BYE-Anfrage für die Übertragung des Anrufs verwendet wird. Diese Option wird nur in der Methode hangup unterstützt.

service_desk.sip.transfer_headers

Nicht zutreffend

Eine Liste von benutzerdefinierten Kopfzeilenfeld-Name-Wert-Paaren, die einer Übertragungsanfrage hinzugefügt werden sollen.

service_desk.sip.transfer_headers_send_method

custom_header

Die Methode, mit der die SIP-Transfer-Header gesendet werden. \n - custom_header: Sendet die Transfer-Header als Teil der SIP-Nachricht; dies ist der Standardwert. \n - contact_header: Sendet die Transfer-Header im Contact Header. Diese Option wird in der hangup Methode nicht unterstützt. \n - refer_to_header: Sendet die Übertragungsheader im Refer-To Header. Diese Option wird in der hangup Methode nicht unterstützt.

Wenn Sie einen SIP-URI als Übertragungsziel definieren, stellen Sie dem Zeichen @ in dem URI zwei umgekehrte Schrägstriche (\\) als Escapezeichen voran. Dadurch wird verhindert, dass die Zeichenkette als Teil der Kurzschriftsyntax für Entitäten erkannt wird.

    "uri": "sip:12345556789\\@myhost.com"

Weiterleitung nach dem Auflegen

Standardmäßig überträgt die Telefonintegration Anrufe mit Hilfe einer SIP REFER-Anfrage. Je nach IVR-Dienstanbieter müssen Sie die Anrufweiterleitung möglicherweise so konfigurieren, dass stattdessen eine SIP BYE-Anfrage verwendet wird. Verwenden Sie das Attribut transfer_method, um anzugeben, wie der Anruf weitergeleitet werden soll, entweder mit refer oder hangup. Wenn transfer_method auf hangup anstelle von refer gesetzt wird, ändert sich das Verhalten der Übertragungsaktion. Anstatt eine SIP REFER-Anfrage zu senden, gibt die Telefonintegration den zugehörigen Text wieder und legt dann den Anruf durch Senden einer SIP BYE-Anfrage auf.

Nach dem Auflegen übergibt die Telefonintegration das Übergabeziel, das im Attribut url angegeben ist, an den Anrufanker in der Nachricht BYE. Das Kopffeld, das das Übertragungsziel enthält, wird durch das Attribut transfer_target_header bestimmt. Wenn das Attribut transfer_target_header nicht angegeben wird, verwendet die Telefonintegration Transfer-Target.

{
  "generic": [
    {
      "response_type": "connect_to_agent",
      "transfer_info": {
        "target": {
          "service_desk": {
            "sip": {
              "uri": "sip:user\\@domain.com",
              "transfer_method": "hangup",
              "transfer_target_header": "Transfer-Target"
            }
          }
        }
      },
      "agent_available": {
        "message": "Please hold on while I connect you with a live agent."
      },
      "agent_unavailable": {
        "message": "Sorry, I could not find an agent."
      },
      "message_to_human_agent": "The caller needs help resetting their password"
    }
  ]
}

Wechsel bei Nichtbestehen

Um die Übertragung bei Fehlschlägen zu konfigurieren, gehen Sie in den Einstellungen der Telefonintegration auf die Registerkarte Erweitert. Die folgenden Auswahlen können konfiguriert werden:

  • Meldung über Übertragungsfehler

  • Anruf bei fehlgeschlagener Übertragung trennen

Weitere Informationen finden Sie unter Behandlung von Anruf- und Übertragungsfehlern.

Übertragung von Metadaten des KI-Assistenten in der SIP-Signalisierung

Um das Laden des Chatverlaufs zwischen dem Anrufer und dem KI-Assistenten zu unterstützen, legt die Telefonintegration einen Wert für den User-to-User Header fest, der als Schlüssel für die Web-Chat-Integration verwendet werden kann. Wenn in der transfer_headers User-to-User Liste angegeben ist, wird der Sitzungsverlaufsschlüssel im X-Watson-Assistant-Session-History-Key Header gesendet.

Der Wert des SIP-Headers ist auf 1024 Byte begrenzt.

Wie diese Daten in der SIP REFER-Nachricht dargestellt werden, hängt auch von dem Wert von transfer_headers_send_method ab.

Das Beispiel zeigt die Daten, die als Kopfzeilen enthalten sind:

REFER sip:b@atlanta.example.com SIP/2.0
Via: SIP/2.0/UDP agenta.atlanta.example.com;branch=z9hG4bK2293940223
To: <sip:b@atlanta.example.com>
From: <sip:a@atlanta.example.com>;tag=193402342
Call-ID: 898234234@agenta.atlanta.example.com
CSeq: 23 REFER
Max-Forwards: 7
Refer-To: sip:user@domain.com
X-Watson-Assistant-Token: 8f817472-8c57-4117-850d-fdf4fd23ba7
User-to-User: 637573746f6d2d757365722d746f2d75736572;encoding=hex
Contact: sip:a@atlanta.example.com
Content-Length: 0

Wenn ein angepasster User-to-User-Header angegeben ist, wird der Schlüssel für das Sitzungsprotokoll im Header X-Watson-Assistant-Session-History-Key festgelegt:

REFER sip:b@atlanta.example.com SIP/2.0
Via: SIP/2.0/UDP agenta.atlanta.example.com;branch=z9hG4bK2293940223
To: <sip:b@atlanta.example.com>
From: <sip:a@atlanta.example.com>;tag=193402342
Call-ID: 898234234@agenta.atlanta.example.com
CSeq: 93809823 REFER
Max-Forwards: 70
Refer-To: sip:user@domain.com
User-to-User: 637573746f6d2d757365722d746f2d75736572;encoding=hex
X-Watson-Assistant-Session-History-Key: dev::latest::212033::0a64c30d-c558-4055-85ad-ef75ad6cc29d::978f1fd7-4e24-47d8-adb0-24a8a6eff69e::b5ffd6c2-902f-4658-b586-e3fc170a6cf3::7ad616a350cc48078f17e3ee3df551de
Contact: sip:a@atlanta.example.com
Content-Length: 0

Dieses Beispiel zeigt die Metadaten, die als Abfrageparameter an den Refer-To Header übergeben werden (gemäß der Definition in SIP RFC 3261 ).

REFER sip:b@atlanta.example.com SIP/2.0
Via: SIP/2.0/UDP agenta.atlanta.example.com;branch=z9hG4bK2293940223
To: <sip:b@atlanta.example.com>
From: <sip:a@atlanta.example.com>;tag=193402342
Call-ID: 898234234@agenta.atlanta.example.com
CSeq: 23 REFER
Max-Forwards: 70
Refer-To: sip:user@domain.com?User-to-User=637573746f6d2d757365722d746f2d75736572%3Bencoding%3Dhex
Contact: sip:a@atlanta.example.com
Content-Length: 0

Wenn ein angepasster Header User-to-User angegeben wird, wird der Schlüssel für das Sitzungsprotokoll im Header X-Watson-Assistant-Session-History-Key festgelegt.

REFER sip:b@atlanta.example.com SIP/2.0
Via: SIP/2.0/UDP agenta.atlanta.example.com;branch=z9hG4bK2293940223
To: <sip:b@atlanta.example.com>
From: <sip:a@atlanta.example.com>;tag=193402342
Call-ID: 898234234@agenta.atlanta.example.com
CSeq: 93809823 REFER
Max-Forwards: 70
Refer-To: sip:user@domain.com?User-to-User=637573746f6d2d757365722d746f2d75736572%3Bencoding%3Dhex&X-Watson-Assistant-Session-History-Key=dev::latest::893499::dff9c274-adc4-4f63-93de-781166760bf8::978f1fd7-4e24-47d8-adb0-24a8a6eff69e::b5ffd6c2-902f-4658-b586-e3fc170a6cf3::7ad616a350cc48078f17e3ee3df551de
Contact: sip:a@atlanta.example.com
Content-Length: 0

Für Twilio Flex verwendet der User-to-User-Header encoding=ascii.

Warteschleifenmusik oder eine Sprachaufzeichnung abspielen

Verwenden Sie zum Abspielen von Musik oder zum Abspielen einer aufgezeichneten Nachricht den Antworttyp audio. Weitere Informationen zu Antworttypen finden Sie unter „Antworten mit dem JSON-Editor definieren “.

Sie können keine Warteschleifenmusik während einer Anrufübertragung abspielen. Es kann jedoch vorkommen, dass Sie Warteschleifenmusik abspielen möchten, wenn der Assistent Zeit benötigt, um etwas zu verarbeiten, wie z. B. das Aufrufen einer clientseitigen Aktion oder das Aufrufen eines Webhooks.

Die Telefonintegration unterstützt die folgenden Eigenschaften für den Antworttyp audio:

Eigenschaft

Beschreibung

source

URL einer öffentlich zugänglichen .wav -Audiodatei. Die Audiodatei muss einkanalig (mono) und PCM-codiert sein und eine Abtastrate von 8.000 Hz mit 16 Bit pro Sample aufweisen.

channel_options.voice_telephony.loop

Gibt an, ob die Audiowiedergabe nach Abschluss wiederholt neu gestartet werden soll. Der Standardwert ist false.

Wenn Sie channel_options.voice_telephony.loop auf true setzen, fügen Sie eine benutzerdefinierte Antwort mit dem Befehl vgwActForceNoInputTurn hinzu. Dieser Befehl weist die Telefonintegration an, einen Turnus mit einem vgwNoInputTurn-Text einzuleiten, ohne auf eine Eingabe vom Anrufer zu warten. Im vgwNoInputTurn-Turnus können Sie eine Transaktion einleiten, während der Aufrufende in der Warteschleife ist. Wenn der vgwNoInputTurn-Turnus abgeschlossen ist, wird die Audioschleife gestoppt.

Das folgende Beispiel zeigt eine audio-Antwort mit loop=true, und eine user_defined-Antwort mit dem Befehl vgwActForceNoInputTurn.

{   
  "generic": [
    {
      "response_type": "user_defined",
      "user_defined": {
        "vgwAction": {
          "command": "vgwActForceNoInputTurn"
        }
      }
    },
    {
      "response_type": "audio",
      "source": "https://raw.githubusercontent.com/WASdev/sample.voice.gateway/master/audio/musicOnHoldSample.wav",
      "channel_options": {
        "voice_telephony": {
          "loop": true
        }
      }
    }
  ]
}

Tastenfeldeingabe aktivieren

Wenn Kunden in der Lage sein sollen, Informationen zu senden, indem sie diese nicht sprechen, sondern auf ihrem Telefontastenfeld eingeben, können Sie die Unterstützung für Eingaben über das Telefontastenfeld hinzufügen. Die beste Methode, diesen Typ von Unterstützung zu implementieren, besteht darin, die Signalübertragung im Mehrfrequenzverfahren (DTMF - Dual-Tone Multifrequency) zu aktivieren. DTMF ist ein Protokoll zur Übertragung von Tönen, die erzeugt werden, wenn ein Benutzer die Tasten eines Tastentelefons drückt. Die Signaltöne haben eine bestimmte Frequenz und Dauer, die durch das Fernsprechnetz interpretiert werden kann.

Verwenden Sie den Antworttyp dtmf in einem Aktionsschritt, um mit dem Empfang von Tönen, wenn der Benutzer Telefontasten drückt, zu beginnen. Dieser Antworttyp kann mit dem JSON-Editor hinzugefügt werden.

{
  "generic": [
    {
      "response_type": "dtmf",
      "command_info": {
        "type": "<command type>",
        "parameters": {
          "parameter name": "parameter value",
          "parameter name": "parameter value"
        }
      },
      "channels": [
        {
          "channel": "voice_telephony"
        }
      ]
    }
  ]
}

Die Eigenschaft command_info gibt einen DTMF-Befehl für die Telefonintegration an. Die unterstützten Befehle und die zugehörigen Parameter lauten wie folgt.

command_info.type : collect

Weist die Telefonintegration an, DTMF-Eingaben (Dual-tone multi-frequency, Mehrfrequenzwahlverfahren) von einem Benutzer zu erfassen. Dieser Befehl unterstützt die folgenden Parameter:

Parametername

Beschreibung

erforderlich

Standard

termination_key

Die DTMF-Beendigungstaste, die das Ende der DTMF-Eingabe signalisiert (z. B. #)

nein

nicht zutreffend

count

Die Anzahl der zu erfassenden DTMF-Ziffern, die eine positive ganze Zahl nicht größer als 100 sein darf.

Erforderlich, wenn termintation_key oder minimum_count und maximum_count nicht definiert sind

nicht zutreffend

minimum_count

Die minimale Anzahl der zu erfassenden DTMF-Ziffern. Diese Eigenschaft wird zusammen mit maximum_count verwendet, um einen Bereich für die Anzahl der zu erfassenden Ziffern zu definieren. Dieser Wert muss eine positive ganze Zahl mit einem Mindestwert von 1 und einem Maximalwert kleiner als maximum_count sein.

Erforderlich, wenn terminatation_key und count nicht definiert sind.

nicht zutreffend

maximum_count

Die maximale Anzahl der zu erfassenden DTMF-Ziffern. Diese Eigenschaft wird zusammen mit minimum_count verwendet, um einen Bereich für die Anzahl der zu erfassenden Ziffern zu definieren. Wenn diese Anzahl von Ziffern erfasst wird, wird ein Dialogwechsel eingeleitet. Dieser Wert muss eine positive ganze Zahl sein, die nicht größer als 100 ist.

Erforderlich, wenn termintation_key und count nicht definiert sind.

nicht zutreffend

inter_digit_timeout_count

Die Zeit (in Millisekunden), die nach dem Empfang einer DTMF-Ziffer auf eine neue DTMF-Ziffer gewartet wird. Während einer aktiven DTMF-Erfassung wird dieses Zeitlimit aktiviert, wenn die erste DTMF-Stelle empfangen wurde. Wenn ein Zeitlimit zwischen den Ziffern aktiv ist, wird der Zeitgeber für das Zeitlimit nach der Antwort deaktiviert. Wenn der Parameter inter_digit_timeout_count nicht angegeben wird, wird der Post-Response-Timer nach jeder DTMF-Ziffer zurückgesetzt und bleibt aktiv, bis entweder die Post-Response-Timeout-Zahl erreicht ist oder die Erfassung abgeschlossen ist. Dieser Wert ist eine positive ganze Zahl, die nicht höher als 100.000 (oder 100 Sekunden) ist.

nein

nicht zutreffend

ignore_speech

Gibt an, ob die Spracherkennung während der Erfassung von DTMF-Ziffern deaktiviert werden soll, bis die Erfassung abgeschlossen ist oder eine Zeitlimitüberschreitung auftritt. Wenn dieser Parameter auf true gesetzt ist, wird die Spracherkennung automatisch deaktiviert, wenn das erste DTMF-Signal empfangen wird.

nein

Nein

stop_after_collection

Gibt an, ob die DTMF-Eingabe nach Abschluss der DTMF-Erfassung gestoppt werden soll. Nach diesem Befehl werden alle DTMF-Eingaben ignoriert, bis sie durch Verwendung des Antworttyps start wieder aktiviert werden.

nein

Nein

command_info.type : disable_barge_in

Deaktiviert das DTMF-Einsprechen (in eine laufende Bandansage), sodass die Wiedergabe aus der Telefonintegration nicht unterbrochen wird, wenn Anrufer Tasten drücken. Wenn disable_barge_in aktiviert ist, werden die Tasten, die während der Wiedergabe gedrückt werden, ignoriert.

Dieser Befehl hat keine Parameter.

command_info.type : enable_barge_in

Aktiviert das DTMF-Einsprechen, d. h. Anrufer können die Wiedergabe der Telefonintegration durch das Drücken einer Taste unterbrechen.

Dieser Befehl hat keine Parameter.

command_info.type : send

Sendet DTMF-Signale mit der Telefonintegration.

Dieser Befehl unterstützt die folgenden Parameter:

Parameter

Beschreibung

erforderlich

Standard

digits

Ein Array von JSON-Objekten, bei dem jedes Element einen DTMF-Ton darstellt, der an einen Anrufer gesendet werden soll.

ja

nicht zutreffend

digits[].code

Der zu sendende Ereigniscode. Neben den Ziffern 0 bis 9 können Sie folgende Codes angeben: \n – 10: * \n – 11: # \n – 12: A \n – 13: B \n – 14: C \n – 15: D

ja

nicht zutreffend

digits[].duration

Die Dauer des Ereignisses (in Millisekunden).

nein

200

digits[].volume

Die Leistungsstufe des Tons in dBm0. Der unterstützte Bereich ist 0 bis -63 dBm0.

nein

0

send_interval

Ein Intervall (in Millisekunden), das gewartet wird, bevor der nächste DTMF-Ton in der Liste gesendet wird.

nein

200

Beispiele

Dieses Beispiel zeigt den Antworttyp dtmf mit dem Befehl collect, der zum Erfassen der DTMF-Eingabe verwendet wird.

{
  "generic": [
    {
      "response_type": "dtmf",
      "command_info": {
        "type": "collect",
        "parameters": {
          "termination_key": "#",
          "count": 16,
          "ignore_speech": true
        }
      },
      "channels": [
        {
          "channel": "voice_telephony"
        }
      ]
    }
  ]
}

Dieses Beispiel zeigt den Antworttyp dtmf mit dem Befehl send, der zum Senden von DTMF-Signalen verwendet wird.

{
  "generic": [
    {
      "response_type": "dtmf",
      "command_info": {
        "type": "send",
        "parameters": {
          "digits": [
            {
              "code": "9",
              "volume": -8
            },
            {
              "code": "11"
            }
          ],
          "send_interval": 100
        }
      },
      "channels": [
        {
          "channel": "voice_telephony"
        }
      ]
    }
  ]
}

Übertragung der Konversation an die Web-Chat-Integration

Sie können den Anrufer vom aktuellen Telefonanruf an eine Web-Chat-Sitzung übertragen, indem Sie den Antworttyp channel_transfer verwenden.

Der Assistent sendet eine SMS-Nachricht mit einer URL an den Anrufer, welche der Anrufer antippen kann, um das Web-Chat-Widget im Browser des Telefons zu laden. Der Web-Chat zeigt den Verlauf des Telefongesprächs an und kann mit der Erfassung von Informationen beginnen, die für den Abschluss der Transaktion erforderlich sind.

Dies ist in Situationen nützlich, in denen der Kunde Informationen leichter schriftlich als mündlich mitteilen kann (z. B. bei einer Adressänderung).

Nach erfolgreicher Übertragung kann der Anrufer den Hörer auflegen und das Gespräch über den Web-Chat fortsetzen.

Der Antworttyp channel_transfer kann mit der Telefonintegration nur verwendet werden, wenn auch die Integration SMS mit Twilio für den Assistenten konfiguriert ist.

{
  "generic": [
    {
      "response_type": "text",
      "values": [
        {
          "text": "I will send you a text message now with a link to our website."
        }
      ],
      "selection_policy": "sequential"
    },
    {
      "response_type": "channel_transfer",
      "message_to_user": "Click the link to connect with an agent using our website.",
      "transfer_info": {
        "target": {
          "chat": {
            "url": "https://example.com/webchat"
          }
        }
      }
    }
  ]
}

Aufruf beenden

Sie können Ihren Assistenten anweisen, ein Telefongespräch zu beenden, indem Sie den Antworttyp end_session verwenden, wie in diesem Beispiel gezeigt.

{
  "generic": [
    {
      "response_type": "end_session"
    }
  ]
}

Sie können optional angepasste Header einschließen, um sie in die SIP-BYE-Anforderung einzuschließen, die generiert wird, wenn die Telefonintegration diesen Antworttyp empfängt.

Dieses Beispiel zeigt den Antworttyp end_session mit angepassten SIP-Headern:

{
  "generic": [
    {
      "response_type": "end_session",
      "channel_options": {
        "voice_telephony": {
          "sip": {
            "headers": [
              {
                "name": "Customer-Header1",
                "value": "Some-Custom-Info"
              },
              {
                "name": "User-to-User",
                "value": "XXXXXX"
              }
            ]
          }
        }
      }
    }
  ]
}

Textnachricht während eines Telefondialogs senden

In Situationen, in denen es einfacher ist, schriftlich zu kommunizieren, als die Sprachausgabe zu transkribieren, können Sie während eines laufenden Gesprächs eine Textnachricht senden. Zum Beispiel eine Adresse oder eine Wegbeschreibung.

Wenn Sie einen Text mit einem Kunden im Kontext eines Dialogs austauschen, leitet der Assistent den SMS-Nachrichtenaustausch ein. Es wird eine Textnachricht an den Benutzer gesendet, in der dieser aufgefordert wird, zu antworten.

Um eine bestimmte Nachricht aus einem Aktionsschritt zu senden, verwenden Sie den Antworttyp user_defined mit dem Befehl vgwActSendSMS:

{
  "generic": [
    {
      "response_type": "text",
      "values": [
        {
          "text": "I will send you a text message now."
        }
      ],
      "selection_policy": "sequential"
    },
    {
      "response_type": "user_defined",
      "user_defined": {
        "vgwAction": {
          "command": "vgwActSendSMS",
          "parameters": {
            "message": "To send me your street address, respond to this text message with your address."
          }
        }
      }
    }
  ]
}

Sie können jeden der folgenden Parameter im Objekt parameters angeben:

Parameter

Typ

Beschreibung

Nachricht

Zeichenfolge

Der Text der zu sendenden SMS-Nachricht. Erforderlich.

mediaURL

Liste

Eine Liste der URLs für Mediendateien, die mit der Nachricht als MMS-Anhänge gesendet werden. Optional.

tenantPhoneNumber

Zeichenfolge

Die Telefonnummer, die dem Nutzer zugeordnet ist Das Format der Zahl muss dem für den SMS-Provider erforderlichen Format entsprechen. Wenn kein Wert für tenantPhoneNumber angegeben wird, wird die Tenant-ID aus der Telefonintegrationskonfiguration für den aktiven Anruf verwendet. Optional.

userPhoneNumber

Zeichenfolge

Die Telefonnummer, an die die SMS-Nachricht gesendet werden soll. Das Format der Zahl muss dem für den SMS-Provider erforderlichen Format entsprechen. Wenn kein Wert für userPhoneNumber angegeben wird, wird die Telefonnummer des Anrufers aus dem Header From der eingehenden SIP-Anforderung INVITE verwendet. Optional.

setAsInputText

boolesch

Ob eine SMS-Nachricht vom Benutzer in input.text gesendet werden soll. Wenn Sie true angeben, wird die SMS-Nachricht des Benutzers in input.text gesendet.

Andernfalls wird input.text auf vgwSMSMessage gesetzt und die SMS-Nachricht wird als Integrationsvariable und als Kontextvariable gesendet. Optional. Standardwert: false.

Wenn Ihre SMS-Integration mehr als eine SMS-Telefonnummer unterstützt oder Sie einen SIP-Trunk verwenden, der sich von dem Ihres SMS-Anbieters unterscheidet, müssen Sie die Telefonnummer angeben, die Sie für den Versand der Textnachricht verwenden möchten. Andernfalls wird der Text über dieselbe Telefonnummer gesendet, die angerufen wurde.

Nachdem der Assistent eine SMS-Nachricht empfangen hat, wird ein neuer Gesprächsturnus mit der Texteingabe vgwSMSMessageeingeleitet. Diese Eingabe gibt an, dass eine Nachricht vom Aufrufenden empfangen wurde. Der Text der Nachricht des Kunden wird als Wert der vgwSMSMessageKontextvariablen und der sms_messageIntegrationsvariablen aufgenommen.

Wenn der Assistent keine SMS-Nachricht an den Anrufer senden kann, wird ein neuer Turnus mit der Texteingabe vgwSMSFailed eingeleitet. Dieser Eingang zeigt an, dass eine SMS-Nachricht nicht an den Anrufer gesendet werden konnte. Sie können Ihren Assistenten für die Handhabung eines solchen Fehlers konzipieren, indem Sie Aktionen erstellen, die durch den Eingabetext vgwSMSFailed ausgelöst werden.

{
  "input": {
    "text": "vgwSMSMessage",
    "integrations": {
      "voice_telephony": {
        "sms_message": "230 Leigh Farm rd"
      }
    }
  },
  "context": {
    "skills": {
      "main skill": {
        "user_defined": {
          "vgwSMSMessage": "1545 Lexington Ave."
        }
      }
    }
  }
}

Hier ein Beispiel für eine Abbiegeanfrage, wenn setAsInputText auf true gesetzt wird:

{
  "input": {
    "text": "230 Leigh Farm rd",
    "integrations": {
      "voice_telephony": {
        "sms_message": "230 Leigh Farm rd"
      }
    }
  },
  "context": {
    "skills": {
      "main skill": {
        "user_defined": {
          "vgwSMSMessage": "1545 Lexington Ave."
        }
      }
    }
  }
}

Sequenz von Telefonbefehlen definieren

Wenn Sie mehrere Befehle nacheinander ausführen möchten, schließen Sie mehrere Antworten in das Array generic ein. Diese Befehle werden in der Reihenfolge verarbeitet, in der sie im Array angegeben sind.

Dieses Beispiel zeigt zwei Antworten: erstens eine Textantwort und zweitens eine end_session-Antwort zum Beenden des Anrufs.

{
  "generic": [
    {
      "response_type": "text",
      "values": [
        {
          "text": "Goodbye."
        }
      ],
      "selection_policy": "sequential"
    },
    {
      "response_type": "end_session"
    }
  ]
}

Angepasste Werte in CDR-Protokollereignisse einfügen

Wenn Sie einen Protokoll-Webhook verwenden, um CDR-Ereignisse (CDR = Call Detail Record) zu protokollieren, können Sie die Kontextvariable cdr_custom_data verwenden, um angepasste Daten zu protokollierten Ereignissen hinzuzufügen. Sie können diese Methode verwenden, um Daten während eines Anrufs aufzuzeichnen (z. B. um den Abschluss einer bestimmten Aufgabe anzuzeigen).

Verwenden Sie zum Protokollieren angepasster CDR-Daten den JSON-Editor, um den Kontext zu bearbeiten. Definieren Sie cdr_custom_data wie im folgenden Beispiel als untergeordnetes Element des Objekts context.integrations.voice_telephony:

  "context": {
    "integrations": {
      "voice_telephony": {
        "cdr_custom_data": {
          "key1": "value1",
          "key2": "value2"
        }
      }
    }
  }

Das Objekt cdr_custom_data kann beliebige gültige JSON-Daten enthalten.

Wenn Sie einen CDR-Bericht generieren, werden die angepassten Daten wie im folgenden Beispiel in das Feld injected_custom_data eingeschlossen:

{
  "payload": {
  ...
    "injected_custom_data": {
      "key1": "value1",
      "key2": "value2"
    }
  ...
  }
}

Weitere Informationen zur Struktur der Nutzdaten des CDR-Protokollereignisses finden Sie im Abschnitt mit den Referenzinformationen zu CDR-Protokollereignissen.

Angepasste CDR-Daten zusammenführen und löschen

Jedes Mal, wenn das Objekt cdr_custom_data durch eine Aktion definiert wird, werden die neuen Daten mit allen bereits vorhandenen Daten zusammengeführt. Neue Werte, die für zuvor definierte Eigenschaften angegeben werden, überschreiben die vorherigen Werte, und alle neuen Eigenschaften werden hinzugefügt; ansonsten bleiben die zuvor definierten Daten unverändert.

Um eine zuvor definierte Eigenschaft zu entfernen, müssen Sie sie explizit auf einen leeren Wert setzen, wie im folgenden Beispiel veranschaulicht:

  "context": {
    "integrations": {
      "voice_telephony": {
        "cdr_custom_data": {
          "key1": ""
        }
      }
    }
  }

Zugriff auf die Kontextvariablen der Telefonintegration über Ihre Aktion

Wenn Sie auf die Kontextvariablen der Telefonintegration zugreifen möchten, verwenden Sie den JSON-Editor, um den Kontext zu bearbeiten.

Das folgende Beispiel zeigt, wie Sie auf die Telefonnummer des Benutzers zugreifen können (die Telefonnummer, von der der Anruf empfangen wurde):

  "context": {
    "variables": [
      {
        "value": {
          "expression": "${system_integrations.voice_telephony.private.user_phone_number}.replace('+','')"
        },
        "skill_variable": "user_phone_number"
      }
    ]
  }

Weitere Informationen finden Sie unter Kontextvariablen für die Telefonintegration.