Conversation Orchestrator: Transmisión de audio bidireccional

Nota: El componente “Connect to Autopilot Voice” tiene costos de uso adicionales.

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

Este producto permite compartir el audio de una llamada entrante con un sistema externo que se puede conectar a un tercero como Autopilot o a otro sistema. Esto le permite "Bring Your Own Bot" (BYOB - Traer su propio bot) a Talkdesk usandoel componente Connect to Autopilot Voice Studio para transmitir el audio de manera bidireccional. Al seleccionar 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 events que ocurren durante el ciclo de vida de la transmisión. Estos events se representan mediante WebSocket Messages:

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

Al realizar una transmisión de audio bidireccional, usted puede enviar los siguientes mensajes WebSocket desde su sistema a Talkdesk:

  • Media: Un mensaje en el que puede encapsular los datos de audio en bruto.
  • Mark: Mensaje que se puede enviar después del mensaje Media para recibir una notificación cuando se haya completado la transmisión de audio.
  • Stop: Un mensaje que indica que la transmisión de audio debe detenerse y cuál es el resultado de la operación.
  • Clear: Un mensaje que interrumpe las transmisiones de audio de todos los mensajes Media.

El siguiente diagrama muestra cómo funcionan las transmisiones de audio unidireccionales y bidireccionales a través de mensajes WebSocket:

image1.png

Para comprender la estructura de estos mensajes WebSocket, revise la sección WebSocket Messages protocols a continuación.

El componente “Connect to Autopilot Voice” se puede agregar en cualquier paso del flujo de Studio y se puede configurar de la siguiente manera.

Al aprovechar la capacidad de “stream and hold”, la transmisión comenzará cuando la llamada pase por el componente y solo se detendrá cuando envíe un mensaje "Stop" informando del éxito, el fracaso o la necesidad de que la llamada se derive a un agente.

Connect_to_VA.png

1. Agregue un componente Connect to Autopilot Voice a una salida de cualquier componente del Studio. En este caso, lo añadiremos a la salida del componente "Initial step" con fines de demostración (salga presionando "OK").

2. En el componente "Connect Autopilot", seleccione "External Voice Stream" y configure la "Voice stream URL" con la conexión WSS a la que desea que se transmita el audio. La selección de "External Voice Stream" activa el Conversation Orchestrator que empieza a activar diferentes events representados a través de mensajes WebSocket.

3. Si necesita que la llamada se transfiera a un agente en vivo, configure la salida "Escalation" y agregue un paso de componente de Assignment and Dial.

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

 

WebSocket Messages protocols

Cada mensaje enviado es una cadena JSON. Puede determinar qué tipo de evento está ocurriendo utilizando la propiedad event de cada objeto JSON.

 

Mensajes enviados desde Talkdesk al Partner

Mensaje "Connected"

"Connected" es el primer mensaje enviado una vez que se establece una conexión WebSocket.

Parámetro

Descripción

evento

El valor de connected

protocolo

Define el protocolo para la vida útil de las WebSocket connections. p. ej.: "Call"

versión

Versión semántica del protocolo.

 

Ejemplo:

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

 

Mensaje "Start"

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

Parámetro

Descripción

evento

El valor de inicio

sequenceNumber

El número utilizado para llevar un registro del orden de envío de mensajes. El primer mensaje comienza con "1" y luego se incrementa.

inicio

Un objeto que contiene metadatos del flujo.

start.streamSid

El identificador único del flujo.

start.accountSid

El identificador de la cuenta que creó el flujo.

start.callSid

El identificador de la llamada desde donde se inició el flujo.

start.tracks

Un array de valores que indica qué flujos multimedia se pueden esperar en los mensajes posteriores. Los valores incluyen entrada y salida.

start.customParameters

Un objeto que representa los Custom Parameters establecidos al definir el flujo (explicados más abajo).

start.mediaFormat

Un objeto que contiene el formato de la carga útil en los mensajes multimedia.

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 frecuencia de muestreo en hercios de los próximos datos de audio. El valor siempre es 8000.

start.mediaFormat.channels

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

streamSid

El identificador único del flujo.

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 (GCN), agregaremos la siguiente información a la sección "customParameters" de la carga útil:

  • extra_parameters: Campo obsoleto.
  • account_id: La ID de Talkdesk de la cuenta.
  • interaction_id: La ID única de esa interacción de Talkdesk.
  • stream_url: La URL WebSocket donde se está transmitiendo el audio.
  • correlation_id: La ID que identifica la llamada durante toda su duración, para todas nuestras interaction_id correspondientes a esa llamada.
  • business_hours: Para la transmisión de audio unidireccional, este campo estará vacío. Esto se utiliza en transmisiones bidireccionales para indicar la información de las business hours del agente.
  • type: El flujo multimedia que puede ser 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”: “”
}

 

Mensaje "Media"

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

Parámetro

Descripción

evento

El valor de los medios.

sequenceNumber

El número utilizado para llevar un registro del orden de envío de los mensajes. El primer mensaje comienza con "1" y luego se incrementa por cada mensaje.

media

Un objeto que contiene los metadatos multimedia y la carga útil.

media.track

Uno de entrada o salida.

media.chunk

El fragmento del mensaje. El primer mensaje comenzará con "1" y se irá incrementando con cada mensaje subsiguiente.

media.timestamp

Presentation Timestamp in Milliseconds desde el inicio de la transmisión.

media.payload

El audio en bruto está codificado en base64

streamSid

El identificador único de la transmisión

 

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

Mensaje "Mark"

Cuando desee recibir una notificación indicando que la transmisión de audio ha finalizado, envíe un mensaje "Mark" después del mensaje "Media".

Recibirá un evento de Talkdesk llamado "Mark" con el nombre correspondiente 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 limpie la memoria intermedia.

Parámetro

Descripción

evento

El valor de mark

sequenceNumber

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

mark

Un objeto que contiene los metadatos de la marca

mark.name

El valor especificado al crear el mensaje de la marca

Ejemplo:

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


Mensaje "Stop"

El mensaje "Stop" se enviará cuando la conversación se detenga o la llamada haya terminado.

Parámetro

Descripción

evento

El valor de stop

sequenceNumber

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

stop

Un objeto que contiene metadatos de la transmisión

stop.accountSid

El identificador de la cuenta que creó la transmisión

stop.callSid

El identificador de llamada que inició la transmisión

streamSid

El identificador único de la transmisión

Ejemplo:

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

Mensajes que un Partner puede enviar a Talkdesk

Mensaje "Media"

Debe utilizar el mensaje "Media" para enviar una transmisión de audio desde su sistema a Talkdesk.

Los mensajes multimedia se almacenarán en la memoria intermedia y se reproducirán en el orden en que se hayan recibido. Para interrumpir la reproducción de audio almacenada en la memoria intermedia, debe enviar unmensaje "Clear".

Parámetro

Descripción

evento

El valor de media

streamSid

El SID de la transmisión que debe 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)"
 }
}


Mensaje "Mark"

Cuando desee recibir una notificación indicando que la transmisión de audio ha finalizado, envíe un mensaje "Mark" después del mensaje "Media".

Recibirá un evento de Talkdesk llamado "Mark" con el nombre correspondiente 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 limpie la memoria intermedia.

Parámetro

Descripción

evento

El valor de mark

streamSid

El SID de la transmisión 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 futuros eventos de marca recibidos

Ejemplo:

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


Mensaje "Clear"

Para interrumpir la transmisión de audio, envíe un mensaje "Clear". Esto cancelará todos los mensajes "Media" que estén en la memoria intermedia y no se hayan reproducido.

Esto vaciará toda la cola de audio y hará que se le envíe un evento "Mark".

Parámetro

Descripción

evento

El valor de clear

streamSid

El SID del flujo que debe recibir la marca

Ejemplo:

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


Mensaje "Stop"

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

  • ok: La transmisión de audio fue exitosa.
  • error: Se produjo un error durante la transmisión de audio.
  • escalate: La transmisión de audio debe detenerse y la llamada debe transferirse a un agente en vivo.

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

Parámetro

Descripción

evento

El tipo de evento.

stop

Un objeto que contiene metadatos de detención e información de carga útil.

stop.command

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

Dependiendo del comando, se sigue una opción de salida diferente en el componente "Connect Autopilot".

stop.ringGroup

En caso de redirección, este parámetro indica el ring group al que se redirige la llamada.

streamSid

El SID de la transmisión que debe recibir la transmisión detenida.

 

Ejemplo:

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