Chatbot Externo
Adereso permite la conexión entre un canal de mensajería conectado a nuestra mesa de ayuda (Desk) y un chatbot a través de Botcenter. Este servicio permite la construcción, monitoreo y gestión de chatbots autocontenidos, y también actúa como intermediario entre nuestro ecosistema y proveedores externos de experiencias conversacionales.
El flujo de comunicación puede ser síncrono o asíncrono. En el caso síncrono:
- El usuario envía un mensaje a través de un canal de mensajería a una cuenta conectada en Desk.
- Cuando Desk recibe el mensaje, evalúa ciertas condiciones (configurables) que determinan si el mensaje debe enviarse a un chatbot o no. En caso afirmativo el mensaje se envía hacia un bot configurado en Botcenter.
- Dependiendo de la configuración del bot, este puede responder inmediatamente o invocar un servicio externo. En caso que se deba invocar un servicio, esto se hará mediante HTTPS POST al endpoint indicado (se detalla más adelante).
- Botcenter obtiene la respuesta por parte del servicio, realiza lógica adicional en caso que aplique (cierre de ticket, derivación a ejecutivo, modificación de metadatos), y responde a Desk.
- Desk envía la respuesta hacia el emisor del mensaje inicial a través de la cuenta receptora.
En caso que se requiera entregar un mensaje en un tiempo posterior a la recepción del mensaje por parte del usuario, por ejemplo cuando se debe hacer un procesamiento que toma unos minutos, o para gatillar un cierre de la conversación por inactividad, contamos con un mecanismo asíncrono a través de la API Botcenter, el cual se describe más adelante.
El siguiente diagrama ilustra ambos mecanismos:

Flujo síncrono
La comunicación entre Botcenter y un chatbot externo a Adereso ocurre a través de HTTPS. Botcenter enviará una consulta hacia el endpoint provisto para enviar los mensajes y su contexto, y usará la respuesta a esta consulta para luego responder al usuario y/o gatillar acciones sobre la mesa de ayuda. Los datos se envían como JSON según se muestra a continuación (de modo resumido).
Method: POST
Headers:
Authorization TOKEN
Body:
{
"message": "Hola",
"context": {
"ticket": {
"ticket_id": "5f91c2f62f448e2c73a65d18",
"account": {"id": 2917},
"identifier": 2957746
},
"user": {
"source": "whatsapp",
"name": "Sergio",
"uname": "56976591991",
"pc_id": "5f91c2f52f448e2c73a65d15",
"client_id": [],
"address": [],
"phone": ["56976591991"],
"email": null,
"uid": "56976591991",
"citizen_id": null
}
}
}
La autenticación se realiza mediante una token (en el ejemplo, con valor “TOKEN”) que debe ser provista por usted, y se incluye por defecto en el header Authorization (configurable). En la plataforma Botcenter el cliente tiene acceso a modificar el valor de la token o el header donde se envía.
- message es el mensaje que envió el usuario.
- context es un diccionario con información relacionada, el cual contendrá al menos los campos user y ticket con información del usuario y el ticket respectivamente. Estos campos contendrán al menos los campos que se ilustraron previamente.
La respuesta que se espera por parte del servicio tiene un formato muy parecido:
{
"message": ["Hola, soy un chatbot"],
"context": {...},
"actions": [{"type": "close_ticket"}]
}
Donde:
- message es el mensaje a enviar al usuario. Se soporta una lista con strings u objetos (ver más a continuación). Cada elemento de la lista se envía como un mensaje aparte.
- context es el mismo objeto que se envió anteriormente. Sin embargo, usted puede añadir campos que requiera para, por ejemplo, mantener el hilo de la conversación. En mensajes sucesivos, se enviará el contexto con los cambios que se hayan aplicado. Si context viene null (o no viene) se mantendrá el contexto tal cual fue enviado.
- actions es una lista de acciones a aplicar opcionalmente. Puede usarse para cerrar el ticket en Desk, derivarlo a ejecutivo, o añadir metadata a nivel de ticket o de usuario. Hay acciones que son excluyentes entre sí. En caso de entregarse una lista con acciones excluyentes, se considerará sólo la primera.
La respuesta a esta solicitud debe ser dentro de un tiempo razonable, de lo contrario, el mensaje se considerará como no entregado y se enviará nuevamente a su servicio.
Tipos de mensaje
String
{
"message": ["Hola, soy un chatbot"],
"context": {...},
"actions": [...]
}
Imágenes
{
"message": [{"type": "image", "url": "URL"}],
"context": {...},
"actions": [...]
}
(Opcional) Watson Assistant
En vez de enviar directamente el mensaje en el campo message puede usarse el campo watson_conversation dentro del campo context. Este deberá contener el output directo de Watson Assistant (anteriormente Watson Conversation). Soporta mensajes de texto plano, de tipo option, y también suggestions. En este caso, el campo message debe ir con el string literal WATSON_CONVERSATION
.
Acciones
Cierre de ticket
Realiza un cierre del ticket en Desk. Es excluyente con la acción de derivar ticket.
Formato:
{"type": "close_ticket"}
Derivar ticket
Realiza un traspaso del ticket a algún agente de atención operando en Desk según las reglas de asignación configuradas en dicha plataforma. Es excluyente con la acción de cierre de ticket.
Formato:
{"type": "assign_to_cm"}
A continuación se ilustra el flujo de derivación en un ticket de Desk:

Cuando el chatbot responda con la acción de derivación, por ejemplo ante una solicitud por parte del usuario, esto gatilla que la asignación del ticket (previamente a Desk Bot) pase a un ejecutivo.
A continuación se puede observar la vista de asignación del ticket, donde se evidencia la derivación. Tras ser derivado, el ticket aparecerá en columnas configuradas para el ejecutivo a quien fue asignado.

Derivar a un departamento
Realiza el traspaso del ticket a algún agente de atención perteneciente a un departamento en particular dentro de Desk. Es excluyente con la acción de cierre de ticket.
Formato:
{"type": "assign_to_department”, “department_id”: ID}
Donde ID es el identificador del departamento, el cual puede obtenerse a partir de la API de Desk o preguntando al equipo de soporte.
Añadir metadata
Permite modificar los metadatos integrables configurados en Desk, tanto a nivel de ticket como usuario.
Formato:
{"type": "metadata_update", "ticket": {}, "user": {}}
Los objetos ticket y user contenderán las llaves de integración de los metadatos que se quieran modificar y su nuevo valor asociado.
Flujo asíncrono
Para gatillar respuestas asíncronas se usa la API externa de Botcenter según se indica a continuación.
Endpoint
: https://api.botcenter.io/api/v2/bot/trigger_node
Method
: POST
Headers
:
ApiKey: API_KEY
Content-Type
:
application/json
Body:
{
"channel": "BotCenterAPI",
"account_id": "123",
"user_id": "56912345678",
"message": "Hola, soy un chatbot",
"context": {...},
"node": "async_response"
}
Aquí:
- La autenticación se realiza mediante una llave (en el ejemplo, con valor “API_KEY”) que se le proveerá, y debe incluirse en el header ApiKey.
- user_id: debe corresponder al valor del campo uid del objeto user incluido en el objeto context en la petición inicial generada desde Botcenter hacia su API HTTPS..
- account_id debe corresponder al identificador del bot middleware en Botcenter, que le será provisto.
- node corresponde a la función que se invocará en Botcenter para el bot especificado por account_id. Para enviar simplemente un mensaje es async_response, según se ve en el ejemplo.
- message es el mensaje a enviar al usuario (en el caso de nodo async_response). Opcionalmente puede ser una lista de mensajes.
- context es el mismo objeto que se envió anteriormente desde Botcenter hacia su API. Sin embargo, usted puede añadir campos que requiera para, por ejemplo, mantener el hilo de la conversación.
- En este caso, las acciones (campo actions) deben incluirse dentro de context.
Al hacer este request, usted recibirá el siguiente response:
{
"messages": [
"Hola, soy un chatbot"
],
"status": 200
}
Donde messages son los mensajes que Botcenter intento enviar a Desk, y status indica si el mensaje efectivamente pudo entrar en la conversación con el cliente (200) o si no pudo ser procesado (400) ya que el ticket fue derivado o cerrado (en cuyo caso el bot ya no será capaz de interrumpir la conversación).