Let's Talk provee un mecanismo genérico de integración con servicios de terceros en tiempo real basado en webhooks para el intercambio de datos y en triggers automáticos y manuales para activar los webhooks. El mecanismo permite enviar datos de conversaciones y clientes a cualquier endpoint web o web service SOAP, usando un payload json o XML. De esta manera es posible mantener, por ejemplo, en un CRM un registro de todas las conversaciones en cuanto éstas son creadas, cerradas, transferidas y evaluadas. También es posible derivar una conversación de Let's Talk en un caso de un servicio de Ticketera o gatillar un SMS, todo dependiendo de la existencia del servicio apropiado.
Para gatillar un webhook debe accionarse un trigger, es decir, un evento especial que detona el envío de la data configurada para dicho evento. Los triggers pueden ser automáticos, que son activados por modificaciones en el estado de las conversaciones o bien de manera manual por parte de un agente presionando un botón personalizado que se agrega a la interfaz de agente (por ejemplo: "Crear Ticket"). A continuación se listan los triggers de sistema:
Los triggers manuales pueden ser gatillados en cualquier momento desde la vista de detalle de una conversación en la interfaz web de agente. Los triggers pueden ser múltiples para una misma conversación, es decir, puede haber triggersvarios automáticos y varios manuales.
El contenido disponible para el envío vía webhooks es todo el que se puede ver en la vista de detalle de una conversación en la interfaz web de agente, tales como:
Las fechas van en horario UTC. Las llaves del payload son personalizables, no así el valor, es decir, la llave que contenga la fecha de creación puede llamarse creation_time, instante_de_creacion o ti, pero el valor será 2017-09-26 14:56:24 UTC y no 2017/09/26 02:56:24 pm.
Ejemplo XML:
<?xml version="1.0" encoding="UTF-8"?> <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tem="http://tempuri.org/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <soapenv:Body> <tem:grabarChat> <tem:id_habilidad>1</tem:id_habilidad> <tem:id_chat>113160</tem:id_chat> <tem:chat> Client | Fulano de Tal | 2017/09/26 14:56 | Hola, buenos días Client | Fulano de Tal | 2017/09/26 14:57 | Quiero reportar una incidencia en el portal empresas que administra el cliente Agent | Mengano | 2017/09/26 14:58 | Hiola, buenos dias Agent | Mengano | 2017/09/26 14:59 | necesitamos un print de pantalla del error y los datos del cliente Client | Fulano de Tal | 2017/09/26 14:59 | ya que se presentan casos en donde no se visualiza el trafico completo de los usuarios Client | Fulano de Tal | 2017/09/26 14:59 | lo envio al mail de documentación? Agent | Mengano | 2017/09/26 15:01 | si por favor a mail@mail.com Client | Fulano de Tal | 2017/09/26 15:14 | acabo de enviar mail Client | Fulano de Tal | 2017/09/26 15:14 | Asunto: Error en data manager. Agent | Mengano | 2017/09/26 15:20 | ok. deme un momento Agent | Mengano | 2017/09/26 15:37 | Estimado, favor confirmar, es desde el portal empresa SGO? Agent | Mengano | 2017/09/26 15:43 | estimado confirmo ticket por la incidencia XDS87564 Client | Fulano de Tal | 2017/09/26 16:02 | muchas gracias </tem:chat> <tem:estado>Closed</tem:estado> <tem:fecha_creacion>2017-09-26 14:56:24 UTC</tem:fecha_creacion> <tem:fecha_termino/> <tem:asunto>Hola, buenos días</tem:asunto> <tem:tags/> <tem:duracion>11208</tem:duracion> <tem:mensajes>20</tem:mensajes> <tem:tiempo_primera_respuesta>2</tem:tiempo_primera_respuesta> <tem:promedio_tiempo_respuesta>204.33333333333334</tem:promedio_tiempo_respuesta> <tem:correo_usuario>mail@mail.com</tem:correo_usuario> <tem:nombre_usuario>Fulano de Tal</tem:nombre_usuario> <tem:agentes/> <tem:transferencia/> <tem:localizacion/> <tem:pagina>http://servicios.web.co/chat_33911/</tem:pagina> <tem:plataforma>widget</tem:plataforma> <tem:widget>widget-1</tem:widget> <tem:ip/> <tem:navegador/> <tem:version_navegador/> <tem:sistema_operativo/> <tem:v_sistema_operativo/> <tem:tipo_dispositivo/> <tem:epa/> </tem:grabarChat> </soapenv:Body> </soapenv:Envelope>Ejemplo en JSON de otra conversación:
{ "conversation": { "id": 4170632, "closed_at": "2021-09-13 19:14:04", "created_at": "2021-09-13 15:03:58", "organization_id": 270, "tags": [ "Test Let's Talk" ], "project_list": [ "whatsapp" ], "client": { "email": null, "id": 9150806, "name": "whatsapp:+56955555555", "type": "client", "is_bot": false, "organization_id": 270, "client_key_values": [ { "id": 16010003, "key": "whatsapp_name", "value": "p" } ] }, "issue": "Conversation 4170632", "messages": [ { "content": "from_whatsapp_number: +56955555555\nplatform: whatsapp\nto_whatsapp_number: +56937199999\n", "content_type": "text/plain", "conversation_id": 4170632, "created_at": "2021-09-13 15:03:58", "id": 95354272, "internal": true, "type": "SYSTEM", "organization_id": 270, "person": { "avatar": "https://s3.amazonaws.com/prod.letsta.lk/users/avatars/1d1d57e1e74e633432de318448d0be279038725a/original.png?1630684455", "email": "bot-user-organization-ACME@letsta.lk", "id": 7190, "name": "organization-ACME", "type": "user", "is_bot": true, "organization_id": 270 } }, { "content": "has_joined", "content_type": "text/translatable", "conversation_id": 4170632, "created_at": "2021-09-13 15:03:59", "id": 95354273, "internal": true, "type": "SYSTEM", "organization_id": 270, "person": { "avatar": "https://api.letsta.lk/assets/default-avatar.gif", "email": "supervisor+organization-ACME@letsta.lk", "id": 7189, "name": "Supervisor", "type": "user", "is_bot": false, "organization_id": 270 } }, { "content": "Gracias por comunicarse con organization-ACME, su conversación está siendo derivada a un ejecutivo para una mejor atención", "content_type": "text/plain", "conversation_id": 4170632, "created_at": "2021-09-13 15:04:00", "id": 95354277, "internal": false, "type": "SYSTEM", "organization_id": 270, "person": { "avatar": "https://api.letsta.lk/assets/default-avatar.gif", "email": null, "id": 9150806, "name": "whatsapp:+56955555555", "type": "client", "is_bot": false, "organization_id": 270 } }, { "content": "buen dia", "content_type": "text/plain", "conversation_id": 4170632, "created_at": "2021-09-13 15:04:06", "id": 95354301, "internal": false, "type": "NORMAL", "organization_id": 270, "person": { "avatar": "https://api.letsta.lk/assets/default-avatar.gif", "email": null, "id": 9150806, "name": "whatsapp:+56955555555", "type": "client", "is_bot": false, "organization_id": 270 } }, { "content": "hola", "content_type": "text/plain", "conversation_id": 4170632, "created_at": "2021-09-13 15:04:15", "id": 95354339, "internal": false, "type": "NORMAL", "organization_id": 270, "person": { "avatar": "https://api.letsta.lk/assets/default-avatar.gif", "email": "supervisor+organization-ACME@letsta.lk", "id": 7189, "name": "Supervisor", "type": "user", "is_bot": false, "organization_id": 270 } }, { "content": "cómo te puedo ayudar hoy?", "content_type": "text/plain", "conversation_id": 4170632, "created_at": "2021-09-13 15:04:27", "id": 95354386, "internal": false, "type": "NORMAL", "organization_id": 270, "person": { "avatar": "https://api.letsta.lk/assets/default-avatar.gif", "email": "supervisor+organization-ACME@letsta.lk", "id": 7189, "name": "Supervisor", "type": "user", "is_bot": false, "organization_id": 270 } }, { "content": "quiero un análisis de mi caso", "content_type": "text/plain", "conversation_id": 4170632, "created_at": "2021-09-13 15:04:50", "id": 95354435, "internal": false, "type": "NORMAL", "organization_id": 270, "person": { "avatar": "https://api.letsta.lk/assets/default-avatar.gif", "email": null, "id": 9150806, "name": "whatsapp:+56955555555", "type": "client", "is_bot": false, "organization_id": 270 } }, { "content": "el otro día...", "content_type": "text/plain", "conversation_id": 4170632, "created_at": "2021-09-13 15:05:02", "id": 95354472, "internal": false, "type": "NORMAL", "organization_id": 270, "person": { "avatar": "https://api.letsta.lk/assets/default-avatar.gif", "email": null, "id": 9150806, "name": "whatsapp:+56955555555", "type": "client", "is_bot": false, "organization_id": 270 } }, { "content": "perfecto. te entiendo", "content_type": "text/plain", "conversation_id": 4170632, "created_at": "2021-09-13 15:05:18", "id": 95354512, "internal": false, "type": "NORMAL", "organization_id": 270, "person": { "avatar": "https://api.letsta.lk/assets/default-avatar.gif", "email": "supervisor+organization-ACME@letsta.lk", "id": 7189, "name": "Supervisor", "type": "user", "is_bot": false, "organization_id": 270 } }, { "content": "saludos", "content_type": "text/plain", "conversation_id": 4170632, "created_at": "2021-09-13 15:05:28", "id": 95354526, "internal": false, "type": "NORMAL", "organization_id": 270, "person": { "avatar": "https://api.letsta.lk/assets/default-avatar.gif", "email": "supervisor+organization-ACME@letsta.lk", "id": 7189, "name": "Supervisor", "type": "user", "is_bot": false, "organization_id": 270 } }, { "content": "closed", "content_type": "text/plain", "conversation_id": 4170632, "created_at": "2021-09-13 15:05:38", "id": 95354565, "internal": false, "type": "SYSTEM", "organization_id": 270, "person": { "avatar": "https://api.letsta.lk/assets/default-avatar.gif", "email": "supervisor+organization-ACME@letsta.lk", "id": 7189, "name": "Supervisor", "type": "user", "is_bot": false, "organization_id": 270 } }, { "content": "opened", "content_type": "text/plain", "conversation_id": 4170632, "created_at": "2021-09-13 15:11:27", "id": 95355626, "internal": false, "type": "SYSTEM", "organization_id": 270, "person": { "avatar": "https://api.letsta.lk/assets/default-avatar.gif", "email": "supervisor+organization-ACME@letsta.lk", "id": 7189, "name": "Supervisor", "type": "user", "is_bot": false, "organization_id": 270 } }, { "content": "closed", "content_type": "text/plain", "conversation_id": 4170632, "created_at": "2021-09-13 15:11:33", "id": 95355643, "internal": false, "type": "SYSTEM", "organization_id": 270, "person": { "avatar": "https://api.letsta.lk/assets/default-avatar.gif", "email": "supervisor+organization-ACME@letsta.lk", "id": 7189, "name": "Supervisor", "type": "user", "is_bot": false, "organization_id": 270 } }, { "content": "opened", "content_type": "text/plain", "conversation_id": 4170632, "created_at": "2021-09-13 18:56:18", "id": 95390543, "internal": false, "type": "SYSTEM", "organization_id": 270, "person": { "avatar": "https://api.letsta.lk/assets/default-avatar.gif", "email": "supervisor+organization-ACME@letsta.lk", "id": 7189, "name": "Supervisor", "type": "user", "is_bot": false, "organization_id": 270 } }, { "content": "closed", "content_type": "text/plain", "conversation_id": 4170632, "created_at": "2021-09-13 18:56:26", "id": 95390561, "internal": false, "type": "SYSTEM", "organization_id": 270, "person": { "avatar": "https://api.letsta.lk/assets/default-avatar.gif", "email": "supervisor+organization-ACME@letsta.lk", "id": 7189, "name": "Supervisor", "type": "user", "is_bot": false, "organization_id": 270 } }, { "content": "opened", "content_type": "text/plain", "conversation_id": 4170632, "created_at": "2021-09-13 19:13:59", "id": 95393175, "internal": false, "type": "SYSTEM", "organization_id": 270, "person": { "avatar": "https://api.letsta.lk/assets/default-avatar.gif", "email": "supervisor+organization-ACME@letsta.lk", "id": 7189, "name": "Supervisor", "type": "user", "is_bot": false, "organization_id": 270 } }, { "content": "closed", "content_type": "text/plain", "conversation_id": 4170632, "created_at": "2021-09-13 19:14:04", "id": 95393196, "internal": false, "type": "SYSTEM", "organization_id": 270, "person": { "avatar": "https://api.letsta.lk/assets/default-avatar.gif", "email": "supervisor+organization-ACME@letsta.lk", "id": 7189, "name": "Supervisor", "type": "user", "is_bot": false, "organization_id": 270 } } ] } }
Existen casos de uso en que el webhook requiere de datos adicionales que no pueden ser obtenidos desde la conversación pero que pueden ser muy valiosos para el sistema a integrar, por ejemplo un resumen de la conversación por parte del agente indicando los próximos pasos al ingresar a la ticketera, para estos casos el sistema puede levantar un modal al momento de presionar el botón del trigger y en dicho modal se solicitarán los datos faltantes para completar el payload definido en el webhook gatillado.
Cada vez que se gatilla un webhook es posible invocar una función que evalúe el contenido de la respuesta y realizar alguna acción con la misma, por ejemplo, si se envía una conversación al sistema de tickets propio de la empresa y la respuesta al webhook contiene el id del caso es posible obtener dicho id y escribirlo en la conversación automáticamente como mensaje interno o externo.
Este tipo de integraciones requiere un conocimiento avanzado de la plataforma de origen y de destino y muchas veces puede requerir desarrollos personalizados (especialmente los callbacks) por lo que siempre es necesario contactar al equipo de soporte para la definición y activación de la integración.