Conversation Orchestrator: Transmisión de Audio Bidireccional

 

Note: El componente "Connect Virtual Agent" tiene costes de uso adicionales. Para obtener información detallada sobre sus precios, póngase en contacto con su Customer Success Manager "Gerente de Cuenta".

Talkdesk Conversation Orchestrator permite la transmisión de audio en tiempo real entre Talkdesk y soluciones de terceros.

Le ofrece la posibilidad de compartir el audio de una llamada entrante con un sistema externo que puede conectarse a un Virtual Agent (VA) de terceros, lo que le permite "Bring Your Own Bot" (BYOB) a Talkdesk utilizando el componente de Studio Connect Virtual Agent para transmitir el audio de forma bidireccional. Al elegir la opción "External Voice Stream" en el componente, el audio de la llamada se transmite a un WebSocket de terceros, que incluye mensajes de orquestación e información contextual sobre la interacción de voz.  

Hay distintos tipos de eventos que se producen durante el ciclo de vida del flujo. Estos eventos son representados a través de WebSocket Messages:

  • Connected: El primer mensaje enviado, una vez que se establece una conexión WebSocket.
  • Start: El mensaje que contiene los metadatos necesarios sobre el flujo de conversación que se envía inmediatamente después del mensaje "Connected". Sólo se envía una vez, al principio del flujo de conversación.
  • Media: El mensaje que encapsula los datos de audio en bruto.
  • Stop: Se envía un mensaje de stop cuando el flujo de conversación se detiene o la llamada ha terminado.

Al realizar un flujo de audio bidireccional, puede enviar los siguientes mensajes WebSocket desde su sistema a Talkdesk:

  • Media: Un mensaje en el que se pueden encapsular los datos de audio en bruto.
  • Mark: Un mensaje que puede enviar después del mensaje de Media para ser notificado cuando el flujo de audio enviado fue completado.
  • Stop: Un mensaje que indica que el flujo de audio debe detenerse y cuál es el resultado de la operación.
  • Clear: Un mensaje que interrumpe los flujos de audio de todos los mensajes Media.

El siguiente diagrama muestra cómo funciona el flujo de audio unidireccional y bidireccional a través de mensajes WebSocket:

image1.png

Para entender la estructura de estos mensajes WebSocket, por favor revise abajo la sección de protocolos WebSocket Messages.

El componente "Connect Virtual Agent" puede añadirse en cualquier paso del flujo de Studio y puede configurarse como sigue.

Aprovechando la capacidad de "stream and hold", el flujo se iniciará cuando la llamada pase por el componente, y se detendrá sólo cuando se envíe un mensaje de "Stop" informando del éxito, el fracaso o la necesidad de que la llamada sea escalada a un agente. 

image2.png

1. Añada un componente Connect Virtual Agent a una salida de cualquier componente del estudio. En este caso, lo añadiremos a la salida del componente "Initial step" para fines de demostración (salida "OK")

2. En el componente "Connect Virtual Agent", seleccione "External Voice Stream" y configure la "Voice stream URL" a la conexión WSS desde la que desea que se transmita el audio. La selección de "External Voice Stream" activa el Conversation Orchestrator que comienza a desencadenar diferentes eventos representados a través de mensajes WebSocket.

3. Si necesita que la llamada sea escalada a un agente en vivo, entonces configure la salida “Escalation” y añada una componente de Assignment and Dial.

4. Configure las salidas "Connect Virtual Agent", según el flujo que desee definir. En este ejemplo, la salida "Execution Error" se configuró también en la "Assignment and Dial" para que, en caso de error, un agente ayude a la persona que llama. 

 

Protocolos de WebSocket Messages 

Cada mensaje enviado es una cadena JSON. Puedes determinar qué tipo de evento se está produciendo utilizando la propiedad evento de cada objeto JSON.

 

Mensajes enviados desde Talkdesk al Partner

Connected Message

"Connected" es el primer mensaje que se envía una vez establecida una conexión WebSocket.

Parámetro

Descripción

event

El valor de conectado

protocol

Define el protocolo para el tiempo de vida de las conexiones WebSocket. ej: "Call"

version

Versión semántica del protocolo.

 

Ejemplo: 

{ 
"event": "connected",  
"protocol": "Call", 
"version": "1.0.0"
}

 

Start Message

El mensaje "Start" contiene metadatos importantes sobre el flujo de conversación y se envía inmediatamente después del mensaje "Connected". Sólo se envía una vez, al inicio del flujo de conversación.

Parámetro

Descripción

event

El valor de inicio

sequenceNumber

Número utilizado para seguir el orden de envío de los mensajes. El primer mensaje comienza con "1" y luego se incrementa.

start

Un objeto que contiene metadatos del Stream

start.streamSid

El identificador único del Stream

start.accountSid

El identificador de la Cuenta que creó el Stream

start.callSid

Identificador de la Llamada desde la que se inició el Stream.

start.tracks

Una matriz de valores que indica qué flujos de medios esperar en los mensajes posteriores. Los valores incluyen entrada, salida.

start.customParameters

Un objeto que representa los Custom Parameters establecidos al definir el Stream (se explica más adelante).

start.mediaFormat

Un objeto que contiene el formato de la carga útil en el archivo Media Messages.

start.mediaFormat.encoding

La codificación de los datos en la próxima carga útil. El valor siempre será audio/x-mulaw.

start.mediaFormat.sampleRate

La Sample Rate en Hertz de los próximos datos de audio. El valor es siempre 8000

start.mediaFormat.channels

El número de canales en los datos de audio de entrada. El valor siempre será 1

streamSid

El identificador único del Stream

Ejemplo: 

{ 
"event": "start",  
"sequenceNumber": "2", 
"start": { 
  "streamSid": "MZ18ad3ab5a668481ce02b83e7395059f0", 
  "accountSid": "AC123", 
  "callSid": "CA123", 
  "tracks": [ 
    "inbound", 
    "outbound" 
  ],
  "customParameters": {
    "extra_parameters":{
       "initial_timestamp":"1668428901027","flow_id":""},
    "account_id": "5cee471c844dda000d67a428",
    "interaction_id": "073c9e0e1ab44c8a8085da2b08c1ecf9",
    "stream_url": "wss://my.service.com/socket/messages",
     "correlation_id": "614c537a2021746aead25356",
    “business_hours”_ “”,
    "type": "inbound",
     "initial_timestamp": "2022-01-16T16:12:47.254Z",
    “flow_id”: “”
  }
  "mediaFormat": { 
    "encoding": "audio/x-mulaw", 
    "sampleRate": 8000, 
    "channels": 1 
  } 
},
"streamSid": "MZ18ad3ab5a668481ce02b83e7395059f0"
}

Para enriquecer el mensaje de inicio producido por Talkdesk Global Communications Network (GNC), añadimos la siguiente información a la sección "customParameters" de la carga útil:

  • extra_parameters: campo obsoleto
  • account_id: El Talkdesk ID para la cuenta.
  • Interaction_id: El ID único de la interacción Talkdesk. 
  • stream_url: El WebSocket URL donde se transmite el audio.
  • correlation_id: El ID que identifica la llamada durante toda su vida, para todos nuestros interaction_id correspondientes de esa llamada.
  • business_hours: Para flujos de audio unidireccionales este campo estará vacío. Se utiliza para los flujos bidireccionales para indicar la información sobre el horario comercial del agente
  • type: El flujo de medios, ya sea entrante o saliente.
  • initial_timestamp: La marca de tiempo del momento en que comenzó el flujo.
  • flow_id: campo obsoleto

Ejemplo: 

"customParameters": {
    "extra_parameters":{
       "initial_timestamp":"1668428901027","flow_id":""},
    "account_id": "5cee471c844dda000d67a428",
    "interaction_id": "073c9e0e1ab44c8a8085da2b08c1ecf9",
    "stream_url": "wss://my.service.com/socket/messages",
     "correlation_id": "614c537a2021746aead25356",
    “business_hours”_ “”,
    "type": "inbound",
     "initial_timestamp": "2022-01-16T16:12:47.254Z",
    “flow_id”: “”
}

 

Media Message

El mensaje "Media" encapsula los datos de audio en bruto.

Parámetro

Descripción

event

El valor del media

sequenceNumber

Número utilizado para llevar la cuenta del orden de envío de los mensajes. El primer mensaje comienza con "1" y luego se incrementa para cada mensaje.

media

Un objeto que contiene metadatos multimedia y carga útil

media.track

Una de entrada o de salida

media.chunk

El fragmento del mensaje. El primer mensaje comenzará con "1" y se incrementará con cada mensaje posterior.

media.timestamp

Presentation Timestamp en Millisegundos desde el inicio del flujo.

media.payload

El audio en bruto se codifica en base64

streamSid

El identificador único del Stream

 

Ejemplo: 

{ 
"event": "media",
"sequenceNumber": "3", 
"media": { 
  "track": "outbound", 
  "chunk": "1", 
  "timestamp": "5",
  "payload": "no+JhoaJjpzSHxAKBgYJDhtEopGKh4aIjZm7JhILBwYIDRg1qZSLh4aIjJevLBUMBwYHDBUsr5eMiIaHi5SpNRgNCAYHCxImu5mNiIaHipGiRBsOCQYGChAf0pyOiYaGiY+e/x4PCQYGCQ4cUp+QioaGiY6bxCIRCgcGCA0ZO6aSi4eGiI2YtSkUCwcGCAwXL6yVjIeGh4yVrC8XDAgGBwsUKbWYjYiGh4uSpjsZDQgGBwoRIsSbjomGhoqQn1IcDgkGBgkPHv+ej4mGhomOnNIfEAoGBgkOG0SikYqHhoiNmbsmEgsHBggNGDWplIuHhoiMl68sFQwHBgcMFSyvl4yIhoeLlKk1GA0IBgcLEia7mY2IhoeKkaJEGw4JBgYKEB/SnI6JhoaJj57/Hg8JBgYJDhxSn5CKhoaJjpvEIhEKBwYIDRk7ppKLh4aIjZi1KRQLBwYIDBcvrJWMh4aHjJWsLxcMCAYHCxQptZiNiIaHi5KmOxkNCAYHChEixJuOiYaGipCfUhwOCQYGCQ8e/56PiYaGiY6c0h8QCgYGCQ4bRKKRioeGiI2ZuyYSCwcGCA0YNamUi4eGiIyXrywVDAcGBwwVLK+XjIiGh4uUqTUYDQgGBwsSJruZjYiGh4qRokQbDgkGBgoQH9KcjomGhomPnv8eDwkGBgkOHFKfkIqGhomOm8QiEQoHBggNGTumkouHhoiNmLUpFAsHBggMFy+slYyHhoeMlawvFwwIBgcLFCm1mI2IhoeLkqY7GQ0IBgcKESLEm46JhoaKkJ9SHA4JBgYJDx7/no+JhoaJjpzSHxAKBgYJDhtEopGKh4aIjZm7JhILBwYIDRg1qZSLh4aIjJevLBUMBwYHDBUsr5eMiIaHi5SpNRgNCAYHCxImu5mNiIaHipGiRBsOCQYGChAf0pyOiYaGiY+e/x4PCQYGCQ4cUp+QioaGiY6bxCIRCgcGCA0ZO6aSi4eGiI2YtSkUCwcGCAwXL6yVjIeGh4yVrC8XDAgGBwsUKbWYjYiGh4uSpjsZDQgGBwoRIsSbjomGhoqQn1IcDgkGBgkPHv+ej4mGhomOnNIfEAoGBgkOG0SikYqHhoiNmbsmEgsHBggNGDWplIuHhoiMl68sFQwHBgcMFSyvl4yIhoeLlKk1GA0IBgcLEia7mY2IhoeKkaJEGw4JBgYKEB/SnI6JhoaJj57/Hg8JBgYJDhxSn5CKhoaJjpvEIhEKBwYIDRk7ppKLh4aIjZi1KRQLBwYIDBcvrJWMh4aHjJWsLxcMCAYHCxQptZiNiIaHi5KmOxkNCAYHChEixJuOiYaGipCfUhwOCQYGCQ8e/56PiYaGiY6c0h8QCgYGCQ4bRKKRioeGiA=="
} ,
"streamSid": "MZ18ad3ab5a668481ce02b83e7395059f0"
}

Mark Message

Cuando desee que se le notifique que el audio que ha transmitido ha finalizado, envíe un mensaje "Mark" después del mensaje "Media".

Recibirá un evento "Mark" con el nombre correspondiente de Talkdesk cuando finalice el audio o si no hay audio almacenado en la memoria intermedia.

En caso de que se haya utilizado el mensaje "Clear", también recibirá un evento "Mark" cuando se borre el búfer.

Parámetro

Descripción

event

El valor de la marca

sequenceNumber

Número utilizado para llevar la cuenta del orden de envío de los mensajes. El primer mensaje comienza con "1" y luego se incrementa para cada mensaje.

mark

Un objeto que contiene los metadatos de la marca

mark.name

El valor especificado al crear el mensaje de marca

Ejemplo: 

{ 
"event": "mark",
"sequenceNumber": "4",
"streamSid": "MZ18ad3ab5a668481ce02b83e7395059f0",
"mark": {
  "name": "my label"
}
}


Stop Message

El mensaje "Stop" se enviará cuando el flujo de conversación se detenga o la llamada haya finalizado.

Parámetro

Descripción

event

El valor del stop

sequenceNumber

Número utilizado para llevar la cuenta del orden de envío de los mensajes. El primer mensaje comienza con "1" y luego se incrementa para cada mensaje.

stop

Un objeto que contiene metadatos del Stream

stop.accountSid

El identificador de la Cuenta que creó el Stream

stop.callSid

El identificador de la Llamada que inició el Stream

streamSid

El identificador único del iStream

Ejemplo: 

{ 
"event": "stop",
"sequenceNumber": "5",
"stop": {
   "accountSid": "AC123",
   "callSid": "CA123"
 },
 "streamSid": "MZ18ad3ab5a668481ce02b83e7395059f0" 
}

Mensajes que un Partner puede enviar a Talkdesk 

Media Message

Debe utilizar el mensaje "Media" para enviar un flujo de audio desde su sistema a Talkdesk.

Los mensajes multimedia se almacenarán en el búfer y se reproducirán en el orden en que se reciban. Para interrumpir el audio almacenado en el búfer, es necesario enviar un "mensaje Clear”.

Parámetro

Descripción

event

El valor del media

streamSid

El SID del Stream que debería reproducir el audio

media

Un objeto que contiene metadatos multimedia y carga útil

media.payload

El audio en bruto de mulaw/8000 está codificado en base64

Ejemplo: 

{
 "event": "media",
 "streamSid": "MZ18ad3ab5a668481ce02b83e7395059f0",
 "media": {
   "payload": "a3242sadfasfa423242... (a base64 encoded string of 8000/mulaw)"
 }
}


Mark Message

Cuando desee que se le notifique que el audio que ha transmitido ha finalizado, envíe un mensaje "Mark" después del mensaje "Meda".

Recibirá un evento "Mark" con el nombre correspondiente de Talkdesk cuando finalice el audio o si no hay audio almacenado en la memoria intermedia.

En caso de que se haya utilizado el mensaje "Clear", también recibirá un evento "Mark" cuando se borre el búfer.

Parameter

Description

event

El valor de la marca

streamSid

El SID del Stream que debe recibir la marca

mark

Un objeto que contiene los metadatos de la marca y la carga útil

mark.name

Un nombre específico para sus necesidades que le ayudará a reconocer el evento de marca recibido en el futuro

Ejemplo: 

{ 
"event": "mark",
"streamSid": "MZ18ad3ab5a668481ce02b83e7395059f0",
"mark": {
  "name": "my label"
}
}


Clear Message

Para interrumpir el flujo de audio, envíe un mensaje "Clear". Esto cancelará todos los mensajes "Media", que están almacenados en la memoria intermedia y no han sido reproducidos.

Esto vaciará todo el audio almacenado en la memoria intermedia y provocará que se le envíe un evento "Mark".

Parámetro

Descripción

event

El valor clear

streamSid

El SID del Stream que deben recibir la marca

Ejemplo:

{ 
"event": "clear",
"streamSid": "MZ18ad3ab5a668481ce02b83e7395059f0",
}


Stop Message

Envíe un mensaje "Stop" si desea detener el flujo de audio y comunicar el resultado de la operación:

  • ok - La transmisión de audio se ha realizado correctamente.
  • error - Se ha producido un error durante la transmisión de audio.
  • escalate - El flujo de audio debe detenerse y la llamada debe ser derivada a un agente en directo.

La siguiente tabla muestra los parámetros que debe enviar en un "Stop" encontrado en este mensaje:

Parámetro

Descripción

event

El tipo de evento.

stop

Objeto que contiene metadatos de parada e información sobre la carga útil.

stop.command

Una de las opciones "ok"/"error"/"escalate".

En función del comando, se sigue una opción de salida diferente en el componente "Connect Virtual Agent".

stop.ringGroup

En caso de escalada, este parámetro indica el grupo de llamada al que se redirige la llamada.

streamSid

El SID del streamque debe recibir el stream detenido.

 

Ejemplo:

{
 "event": "stop",
 "streamSid": "MZ18ad3ab5a668481ce02b83e7395059f0",
 "stop": {
   "command": "escalate",
   "ringGroup": "agents"
 }
}
Volver ""
Por favor, inicie sesión para enviar una solicitud.