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:
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.
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:
{ |
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"
}
}