En este artículo aprenderás qué es un webhook y cómo integrarlo en la plataforma.
¿Qué es un webhook?
Los webhooks son un método por el cual los servidores de Botmaker se comunican con los servidores del cliente cuando se dan ciertos eventos. Por ejemplo, cuando un bot envía un mensaje, se dispara un mensaje de webhook. De esta forma, los clientes podrían integrar estos eventos con un sistema para, por ejemplo, recopilar todos los mensajes enviados por un bot.
Nota: Recuerda que para poder usar esta funcionalidad debes tener un rol de súper administrador o un rol con permiso a la pantalla de webhooks.
Integrar webhooks en Botmaker
Para acceder a la pantalla de webhooks, ve a Menú>Integraciones> Webhooks.
Dentro de la pantalla webhooks en Botmaker puedes:
¿Cómo crear un webhook?
Para crear un nuevo webhook, sólo debes hacer click en Nuevo webhook. Se abrirá una ventana emergente donde tendrás que completar todos los campos.
¡Listo! Ya creaste tu webhook.
Nota: Puedes contar con múltiples webhooks. Sin embargo, no puedes tener más de un webhook para el mismo canal.
¿Qué encontrarás en cada webhook?
Botones de la barra azul superior:
Test webhook: Desde aquí puedes probar el mensaje que enviará el webhook según tu configuración. Recuerda tener el webhook en on , ya que en caso contrario no funcionará esta opción.
Error logs: aquí tienes más detalles de los últimos errores.
En el histograma puedes ver la cantidad de:
En los últimos 30 minutos encontrarás:
De esta manera podrás chequear el estado de salud de tu servidor. Si el webhook falla más de 100 veces durante 10 minutos, los nuevos mensajes dejarán de ser enviados por los próximos 10 minutos para evitar saturar el servidor (estos mensajes se perderán). Es por ello que es importante mantener la operatividad del clúster de servidores que recibirá los mensajes del webhook.
Nota: Esta funcionalidad no está activa por defecto, dado que tiene un costo adicional. Para activarla ve a la sección "Cuenta". Allí encontrarás un apartado específico con el título "webhook" desde donde podrás dar de alta la funcionalidad con solo un click.
Ejemplos:
Bot Message | |||
Property Name | Data Type | Required | Sample Value |
lastName | string | FALSE | User |
chatPlatform | string | TRUE | |
customerCreationTime | string | TRUE | 2024-03-29T20:14:05.569Z |
contactId | string | TRUE | 5591112344321 |
sessionId | string | TRUE | LL7RU5HAJ4Q0F7ICEZYV_2024-04-01T19:14:05.569Z |
type | string | TRUE | message |
whatsappNumber | string | FALSE | 15075688745 |
firstName | string | FALSE | Fake |
sessionCreationTime | string | TRUE | 2024-04-01T19:14:05.569Z |
v | string | TRUE | 1.1 |
customerId | string | TRUE | LL7RU5HAJ4Q0F7ICEZYV |
messages | array | TRUE | Bot.messages |
chatChannelId | string | TRUE | BotmakerTesting-whatsapp-15075688745 |
Agent Message | |||
Property Name | Data Type | Required | Sample Value |
lastName | string | FALSE | User |
chatPlatform | string | TRUE | |
customerCreationTime | string | TRUE | 2024-03-29T20:14:05.569Z |
contactId | string | TRUE | 5591112344321 |
sessionId | string | TRUE | LL7RU5HAJ4Q0F7ICEZYV_2024-04-01T19:14:05.569Z |
type | string | TRUE | message |
whatsappNumber | string | FALSE | 15075688745 |
firstName | string | FALSE | Fake |
sessionCreationTime | string | TRUE | 2024-04-01T19:14:05.569Z |
v | string | TRUE | 1.1 |
customerId | string | TRUE | LL7RU5HAJ4Q0F7ICEZYV |
messages | array | TRUE | Bot.messages |
chatChannelId | string | TRUE | BotmakerTesting-whatsapp-15075688745 |
Customer Message | |||
Property Name | Data Type | Required | Sample Value |
lastName | string | FALSE | User |
chatPlatform | string | TRUE | |
customerCreationTime | string | TRUE | 2024-03-29T20:14:05.569Z |
contactId | string | TRUE | 5591112344321 |
sessionId | string | TRUE | LL7RU5HAJ4Q0F7ICEZYV_2024-04-01T19:14:05.569Z |
type | string | TRUE | message |
whatsappNumber | string | FALSE | 15075688745 |
firstName | string | FALSE | Fake |
sessionCreationTime | string | TRUE | 2024-04-01T19:14:05.569Z |
v | string | TRUE | 1.1 |
customerId | string | TRUE | LL7RU5HAJ4Q0F7ICEZYV |
messages | array | TRUE | Bot.messages |
chatChannelId | string | TRUE | BotmakerTesting-whatsapp-15075688745 |
Status/HSM status Message | |||
Property Name | Data Type | Required | Sample Value |
chatPlatform | string | TRUE | |
contactId | string | TRUE | 5591112344321 |
businessId | string | TRUE | BotmakerTesting |
statusChangeTime | string | TRUE | 2024-04-01T20:14:05.788Z |
isWhatsappTemplate | boolean | FALSE | false |
messageId | string | TRUE | 5D5YV18RI2TH2LU6AXZ6 |
type | string | TRUE | status |
whatsappNumber | string | FALSE | 15075688745 |
v | string | TRUE | 1.1 |
customerId | string | TRUE | LL7RU5HAJ4Q0F7ICEZYV |
chatChannelId | string | TRUE | BotmakerTesting-whatsapp-15075688745 |
status | string | TRUE | delivered |
intentTxId | string | FALSE | 12345 |
Messages (BOT) | |||
Property Name | Data Type | Required | Sample Value |
date | string | TRUE | 2024-04-01T20:14:05.788Z |
intentName | string | FALSE | Fake Rule |
fromName | string | TRUE | Bot |
_id_ | string | TRUE | 7JPOX38OQ2TZXGQGP45W |
from | string | TRUE | bot |
clientPayload | string | FALSE | anything you want |
message | string | TRUE | Mensagem de teste (de bot) |
operatorId | string | FALSE | FAKE-AGENT-ID |
Messages (AGENT) | |||
Property Name | Data Type | Required | Sample Value |
date | string | TRUE | 2024-04-01T20:14:05.788Z |
operatorEmail | string | TRUE | |
fromName | string | TRUE | Bot |
_id_ | string | TRUE | 7JPOX38OQ2TZXGQGP45W |
from | string | TRUE | bot |
clientPayload | string | FALSE | anything you want |
message | string | TRUE | Mensagem de teste (de bot) |
operatorId | string | TRUE | FAKE-AGENT-ID |
operatorName | string | FALSE | Fake Agent |
operatorRole | string | FALSE | OPERATOR |
Messages (CUSTOMER) | |||
Property Name | Data Type | Required | Sample Value |
date | string | TRUE | 2024-04-01T20:14:05.788Z |
fromName | string | TRUE | Bot |
_id_ | string | TRUE | 7JPOX38OQ2TZXGQGP45W |
from | string | TRUE | bot |
clientPayload | string | FALSE | anything you want |
message | string | TRUE | Mensagem de teste (de bot) |
operatorId | string | FALSE | FAKE-AGENT-ID |
fromCustomer | boolean | FALSE | true |
Event | |||
Property Name | Data Type | Required | Sample Value |
chatPlatform | string | TRUE | webchat |
customerCreationTime | string | TRUE | 2023-06-15T16:00:38.941Z |
contactId | string | TRUE | luizbot_test_chat-sNNqGY7DgsUttoXmoQblEqRDc463 |
v | string | TRUE | 1.1 |
customerId | string | TRUE | XHM1NW5Q1RROZ85KNTU4 |
chatIdInChatPlatform | string | TRUE | luizbot_test_chat |
type | string | TRUE | event |
chatChannelId | string | TRUE | luizbot-webchat-null-luizbot_test_chat |
events | array | TRUE | Event.events |
Event.events | |||
Property Name | Data Type | Required | Sample Value |
name | string | TRUE | conversation-close |
info | array | TRUE | Event.events.info |
Event.events.info | |||
Property Name | Data Type | Required | Sample Value |
name | string | TRUE | typification |
value | string | TRUE | finished |
Mensajes enviados en webhooks
Los siguientes ejemplos aplican a mensajes en webhooks enviados tanto desde la plataforma como desde la API de Botmaker.
A continuación, verás ejemplos:
Formato de notificación de mensajes Entrantes y Salientes: JSON
{
// version del formato
"v": "1.1",
// marca de que es una notificación de mensaje
"type": "message",
// campos de plataforma chat y del canal:
// el nombre de la plataforma chat
"chatPlatform": "webchat" | "whatsapp" | "messenger" | "telegram" | "twitter" | ...,
// whatsapp: número de teléfono del usuario
// messenger, telegram o twitter: id de usuario en plataforma,
"contactId": string,
// si el canal es whatsapp, numero de la línea del bot
"whatsappNumber": "+551149331774"
// si el canal no es whatsapp, id del chat en la plataforma de chat
"chatIdInChatPlatform": "AR4Q1S3P1U",
// id del canal de chat en Botmaker
"chatChannelId": string,
// fin de campos de plataforma chat y del canal
// campos del usuario:
// id del usuario en Botmaker
"customerId": string,
// nombre y apellido del usuario
"firstName": string,
"lastName": string,
// fecha y tiempo de creación de usuario (formato YYYY-MM-DDThh:mm:ss.sssZ)
"customerCreationTime": "2021-02-28T23:59:00.147Z",
// fecha y tiempo de comienzo de la sesión a la que pertenecen los mensajes (formato YYYY-MM-DDThh:mm:ss.sssZ)
"sessionCreationTime":"2021-03-08T19:28:45.147Z",
// user fields end
"whatsappNickName": string,
// cuando se envían templates por la API Botmaker, el valor de este campo coincide con `webhookNotificationId` devuelto por el API
"txId": string,
// mensajes: array. Pueden generarse varios mensajes en respuesta a un mensaje de usuario;
// esto suele ocurrir cuando responde el bot
"messages": [
{
// id del mensaje en Botmaker (la notificación de status hace referencia a este id)
"_id_":"PHW3S2KV4VRWL17BBM1U",
// fecha y tiempo del mensaje
"date":"2021-03-08T19:44:14.388Z",
// texto del mensaje
"message": "Hola, cómo estás?",
// nombre de quién generó el mensaje. El nombre de usuario u operador, o "Bot" si fue el bot
"fromName":"Ignacio Ferrari",
// categoría de quién envió el mensaje
"from": "bot" | "user" | "operator",
// flag que marca si es del usuario
"fromCustomer": true | undefined,
// flag que marca si fue un botón (el texto de "message" va a ser el label del botón)
"isButton": true | undefined,
// flag que indica si tiene imagen, video, audio o documento
"hasAttachment": true | undefined,
// urls del attachment
"image": "https://...",
"audio": "https://...",
"video": "https://...",
"file": "https://...",
// si el mensaje fue emitido por un operador (from == "operator"), los siguientes campos serán enviados: operatorId, operatorName, operatorEmail, operatorRole
// id del operador en Botmaker
"operatorId": "bxj99dyfxEsdopib9ZuboIG5Tqr3",
"operatorName": "Pepe"
"operatorEmail": "pepe@domain.com",
"operatorRole": "ADMIN" | "CONFIGURATOR" | "SUPERVISOR" | "OPERATOR" | nombreRolCustom
// cola en la que está el usuario al momento del mensaje
"queue":"idColaAtencion" | undefined
// si el mensaje fue generado por una intención (from == "bot"), se envía el nombre de la intención
"intentName": "Nombre de una Intención"
// específicos para Whatsapp
// cuando el usuario envía su geolocalización
"location": "lat & long",
// texto que acompaña imagen
"caption": string,
// para hsm/templates con botones:
"payload": string, // payload configurado por usuario
"button": string, // label del botón hsm
"templateName": string, // nombre del template con botón
// En la API Botmaker de mensajes y disparo de intenciones es posible enviar `webhookPayload` (v2.0) o `clientPayload` (v1).
// `webhookPayload` (o `clientPayload`) sirve para que el usuario del API haga seguimiento del envío del mensaje.
// Si el mensaje fue enviado a través de la API Botmaker, es en este campo donde se vuelve a enviar `webhookPayload` o `clientPayload`.
"clientPayload": string,
// cuando el usuario entra a la conversación siguiendo un link referral
"whatsappReferral": {
"sourceId": string,
"sourceURL": string,
"headline": string,
"body": string
},
// cuando el mensaje es de checkout de cart
"cart": {
"products": [
{ "sku": string, "quantity": number }
]
}
},
// otros mensajes
{ ... },
{ ... }
],
// cambios de variables que ocurrieron al generarse estos mensajes
// mapa nombreVariable -> nuevoValor
"variables": {
"varName1": "new val 1",
"varName2": "new val 2"
}
}
```
## Formato de notificación de status (Whatsapp)
```json
{
// version del formato
"v": "1.0",
// id del bot en Botmaker (por si varios bots apuntan a mismo webhook)
"businessId": string,
// id del usuario en Botmaker
"customerId": string,
// whatsapp: número de teléfono del usuario
// messenger, telegram o twitter: id de usuario en plataforma,
"contactId": string,
// id del canal de chat en Botmaker
"chatChannelId": string,
// el nombre de la plataforma de chats
"chatPlatform": "webchat" | "whatsapp" | "messenger" | "telegram" | "twitter",
// message status
// sent: whatsapp envío el mensaje
// delivered: el mensaje llegó al teléfono destino
// read: el mensaje fue leído
"status": "sent" | "delivered" | "read",
// fecha y tiempo del cambio de estado (formato YYYY-MM-DDThh:mm:ss.sssZ)
"statusChangeTime": "2021-03-01T00:00:00.000Z",
// id del mensaje en Botmaker que cambió de estado (este id hace referencia a algún id de mensaje de salida, del bot u operador)
"messageId": string,
// En la API Botmaker de mensajes y disparo de intenciones es posible enviar `webhookPayload` (v2.0) o `clientPayload` (v1).
// `webhookPayload` (o `clientPayload`) sirve para que el usuario del API haga seguimiento del envío del mensaje.
// Si el mensaje fue enviado a través de la API Botmaker, es en este campo donde se vuelve a enviar `webhookPayload` o `clientPayload`.
"clientPayload": string,
// cuando se envían templates por la API Botmaker, el valor de este campo coincide con `webhookNotificationId` devuelto por el API
"intentTxId": string,
"error": [ { "message": string, "code": string } ]
}
Es posible seguir el resultado de un envío vía API Botmaker escuchando los webhooks de estado.
Para ello,
- enviar a la API un `webhookPayload` (o `clientPayload` en la v1) y al recibir una notificación de estado, revisar `clientPayload` y marcar que esa clientPayload se envío o tuvo error.
- guardar el `webhookNotificationId` devuelto por el API y revisar `intentTxId` en la notificación de estado.
Escrito por: Equipo Botmaker
Actualizado: 22/03/2024