Note: El componente "Connect Autopilot Voice" tiene costes de uso adicionales.
Talkdesk Conversation Orchestrator 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 puede conectarse a un tercero, como un Autopilot u otro sistema. Esto le permite "Bring Your Own Bot" (BYOB) a Talkdesk utilizando el componente de Studio Connect to Autopilot Voice 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:
Para entender la estructura de estos mensajes WebSocket, por favor revise abajo la sección de protocolos WebSocket Messages.
El componente "Connect to Autopilot Voice" 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.
1. Añada un componente Connect to Autopilot Voice 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 Autopilot", 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 Autopilot", 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". Solo 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:
{ |
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 empieza 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.
Parámetro |
Descripción |
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 de la transparencia |
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 Autopilot". |
stop.ringGroup |
En caso de escalada, este parámetro indica el grupo de llamada al que se redirige la llamada. |
streamSid |
El SID del stream que debe recibir el stream detenido. |
Ejemplo:
{
"event": "stop",
"streamSid": "MZ18ad3ab5a668481ce02b83e7395059f0",
"stop": {
"command": "escalate",
"ringGroup": "agents"
}
}