Este flujo realiza el envío de un mensaje de WhatsApp desde la línea y space configurados en tu marca de Keybe, partiendo del cambio en el estado de un contacto.
El uso de este flujo responde a la necesidad de enviar mensajes a usuarios cuando cambian de un estado a otro, según los estados declarados en la marca.
Requisitos
Para utilizar este flujo, necesitas:
- Una línea de WhatsApp configurada en tu marca.
- Plantillas aprobadas por WhatsApp para su envío.
- Tener los estados creados en Keybe.
Módulos Utilizados
- Webhook cuando se crea o se actualiza una persona: Este es el disparador que recibirá todos los contactos que sean modificados o creados en keybe.
- Filtro de integraciones: Se configuran las reglas con las que se validará cada contacto para determinar si se envía o no al siguiente módulo.
- Nodo de envío de mensajes de whatsApp: Este nodo se encargará de enviar el mensaje a través de WhatsApp.
Instrucciones Paso a Paso
Crear webhook cuando se crea o se actualiza una persona
- Declara el nombre de la conexión.
- Dale al botón guardar del módulo para almacenar el nombre que elegiste del módulo.
- Guarda el flujo completo para guardar lo que hayas configurado y se genere la conexión para empezar a recibir contactos en el flujo.
⚠️ ️Recuerda siempre seleccionar guardar una vez configurado cualquier módulo.
En el módulo “webhook cuando se crea o se actualiza una persona”, hay 2 botones: uno permite acceder a la configuración del módulo y el otro muestra la información de la última ejecución que realizó el flujo, esta sección se llama “Data source” (fuente de datos).
Cuando lo abran por primera vez, se encontrará vacío, y solo cuando crean o editan su primer contacto en keybe se mostrará la información del contacto. Al realizar esto se debe refrescar la página para mostrar el último contacto con el que se ejecutó el módulo.
Un ejemplo que se puede poner en el “Data source” sin tener que crear o modificar un contacto es el siguiente:
{
"source": "RestAPI",
"type": "updated",
"app": {
"uuid": "xxxxxxx"
},
"payload": {
"statusApp": "active",
"_id": "xxxxxxxxxxxx",
"priority": "1",
"name": "Harry",
"midname": "Potter",
"surname": "",
"habeasData": {
"habeasDataStatus": "Confirmed",
"habeasDataAccepted": true,
"habeasDataAcceptedEmail": true,
"habeasDataAcceptedMail": true,
"habeasDataAcceptedPhone": true,
"habeasDataAcceptedSms": true,
"habeasDataAcceptedWhatsapp": true
},
"gender": "other",
"language": [
"es"
],
"registerChannel": [
{
"channel": "whatsapp",
"data": "+573100000000"
}
],
"uuid": "xxxxxxxxxx",
"app": "xxxxxxxxx",
"typeEntity": "people",
"phone": [
{
"value": "573100000000",
"countryCode": "key invalid",
"country": "CO",
"verify": false,
"isPrimary": true
}
],
"email": [
{
"value": "[email protected]",
"verify": false,
"isPrimary": false
}
],
"createdBy": {
"userId": "Grpc",
"name": "Grpc"
},
"createdAt": "2024-01-18T23:18:38.503Z",
"updatedAt": "2024-07-30T15:51:44.689Z",
"fullname": "Harry Potter",
"__v": 1,
"document": "1111111111",
"documentType": "identification_card",
"updatedBy": {
"userId": "xxxx",
"name": "Ron",
"lastname": "Wesley",
"email": "[email protected]",
"type": null
},
"kbid": "xxxxx",
"alias": "xxxxx",
"city": "xxxxx",
"allowReceiveMessageForChat": true,
"status": "xxxxxxxxxxxxx"
},
"user": {
"id": 1111111,
"uuid": "xxxxxx",
"name": "Ron",
"lastName": "Wesley",
"email": "[email protected]",
"phone": "3100000000",
"inactive": 0,
"userApps": [
{
"id": 1111,
"appUUID": "xxxxxxxx",
"role": "superadmin",
"isOwner": 0,
"inactive": 0,
"readonly": 0
}
],
"userId": "xxxx",
"countryCode": "57",
"country": "CO",
"terms": "1",
"isSuperAdmin": 1,
"isCloser": 0,
"birthday": "xxxxxxx"
},
"fieldsChanged": {
"extradata": [],
"contact": [
"status"
],
"extendedData": []
},
"extra": {
"oldContact": {
"statusApp": "active",
"_id": "xxxxxxxxx",
"priority": "1",
"name": "Harry",
"midname": "Potter",
"surname": "",
"habeasData": {
"habeasDataStatus": "Confirmed",
"habeasDataAccepted": true,
"habeasDataAcceptedEmail": true,
"habeasDataAcceptedMail": true,
"habeasDataAcceptedPhone": true,
"habeasDataAcceptedSms": true,
"habeasDataAcceptedWhatsapp": true
},
"gender": "other",
"language": [
"es"
],
"registerChannel": [
{
"channel": "whatsapp",
"data": "+57310000000"
}
],
"uuid": "xxxxxx",
"app": "xxxxxxx",
"typeEntity": "people",
"phone": [
{
"value": "573100000000",
"countryCode": "key invalid",
"country": "CO",
"verify": false,
"isPrimary": true
}
],
"email": [
{
"value": "[email protected]",
"verify": false,
"isPrimary": false
}
],
"createdBy": {
"userId": "Grpc",
"name": "Grpc"
},
"createdAt": "2024-01-18T23:18:38.503Z",
"updatedAt": "2024-07-30T15:49:47.237Z",
"fullname": "Harry Potter",
"__v": 1,
"document": "1111111111",
"documentType": "identification_card",
"updatedBy": {
"userId": "B7PM3B",
"name": "Ron",
"lastname": "Wesley",
"email": "[email protected]",
"type": null
},
"kbid": "xxxxx",
"alias": "xxxxx",
"city": "xxxxx",
"allowReceiveMessageForChat": true,
"status": {
"_id": "xxxxxxxxxxx",
"name": "Interesado",
"color": "#B82424FF"
}
},
"updateStatusForContacts": false
}
}
JavaScriptFiltro de integraciones
Este módulo realiza las validaciones de la información que viene de otros módulos conectados a esta, para poner reglas de cuándo se permitirá avanzar o no con un proceso posterior o en caso de que haya múltiples caminos posibles y se deba enviar por un camino diferente en cada ejecución, según la necesidad.
- Agregar nueva: Adiciona un grupo de validaciones para pasar a un módulo objetivo en caso de que se cumpla con la condición. Al crear el filtro, este estará vacío, así que siempre se debe agregar una al iniciar.
- Nodo fuente: Se refiere al lugar de donde será tomada la variable (punto 3) suponiendo que se requiera tomar de algún lado, si no, quedará sin seleccionar ninguna.
- Variable: Valor que se usará en la validación. En este ejemplo, se usa un campo referenciado de otro módulo, identificable por su formato {{campo}}.
- Condición: Se selecciona una condición de la lista disponible la cual aplica la regla de la comparación..
- Value: Funciona igual que “Variable” y será el dato contra el que se hará la comparación. En este ejemplo, usamos un dato puesto manualmente, no referencial.
- And o Or: Permite adicionar una condición adicional para validar datos adicionales que deben cumplir antes de pasar al nodo objetivo según si se elige And o Or.
- Nodo: Se selecciona el módulo objetivo de una lista de nodos objetivos que se generan con los nodos conectados al módulo filtro. Es a dónde se dirige la ejecución del flujo en caso de que cumpla las condiciones.
Vamos a realizar 2 ejemplos de casos diferentes para evaluar cuando hay un cambio en el estado de un contacto.
Cambio del estado de un contacto desde cualquier estado
Cada marca en Keybe puede tener varios estados creados y esta validación busca que sin importar el estado anterior del contacto, una vez seleccionado el estado objetivo se ejecute el envío de mensaje de whatsapp.
- Nodo fuente: Seleccionamos el módulo de “Webhook cuando se crea o se actualiza una persona”.
- Variable: seleccionamos el campo referencial que aparece “fieldsChanged.contact[0]”
- Condición: Equal to.
- Nodo fuente: Sin seleccionar.
- Value: Escribimos “status”.
- And: para adicionar una condición adicional a cumplir.
- Nodo fuente: Seleccionamos el módulo de “Webhook cuando se crea o se actualiza una persona”.
- Variable: seleccionamos el campo referencial que aparece “payload.status”
- Condición: Equal to.
- Nodo fuente: Sin seleccionar.
- Value: Escribimos el id que corresponde al status con el que queremos enviar el mensaje de whatsapp.
- Nodo: Seleccionamos el “Nodo de envío de mensajes de whatsapp”.
Para nuestro caso estamos usando el id del estado “Interesado” el cual podemos consultar desde configuración de Keybe, en “Estado de contactos” mientras tenemos el inspeccionador del navegador abierto y buscamos “status” dentro de la opción “Network”. El valor es el que se encuentra con el campo “_id”.
Cambio de un estado específico a otro.
Cada marca en Keybe puede tener varios estados creados y esta validación busca que solo cuando se cambia de un estado específico a otro se ejecute el envío de mensaje de whatsapp.
- Nodo fuente: Seleccionamos el módulo de “Webhook cuando se crea o se actualiza una persona”.
- Variable: seleccionamos el campo referencial que aparece “fieldsChanged.contact[0]”
- Condición: Equal to.
- Nodo fuente: Sin seleccionar.
- Value: Escribimos “status”.
- And: para adicionar una condición adicional a cumplir.
- Nodo fuente: Seleccionamos el módulo de “Webhook cuando se crea o se actualiza una persona”.
- Variable: seleccionamos el campo referencial que aparece “payload.status”
- Condición: Equal to.
- Nodo fuente: Sin seleccionar.
- Value: Escribimos el id que corresponde al status que debe de tener el contacto para mandar el mensaje de whatsapp.
- And: para adicionar una condición adicional a cumplir.
- Nodo fuente: Seleccionamos el módulo de “Webhook cuando se crea o se actualiza una persona”.
- Variable: seleccionamos el campo referencial que aparece “{{extra.oldContact.status._id}}”
- Condición: Equal to.
- Nodo fuente: Sin seleccionar.
- Value: Escribimos el id que corresponde al status anterior que debió tener el contacto antes del cambio.
- Nodo: Seleccionamos el “Nodo de envío de mensajes de whatsapp”.
Para nuestro caso estamos usando el id del estado “Interesado” y “VIP” los cuales podemos consultar desde configuración de Keybe, en “Estado de contactos” mientras tenemos el inspeccionador del navegador abierto y buscamos “status” dentro de la opción “Network”. El valor es el que se encuentra con el campo “_id”.
Configuración del Nodo de Envío de Mensajes de WhatsApp
Este módulo se encarga del envío del template y hay varios formatos según el mensaje que deseas enviar a tus usuarios.
Cuando abres el panel de configuración del módulo, notarás:
- Una lista desplegable en cada opción que te permite seleccionar el “Data source” que quieres utilizar como campo dinámico para este campo. Esta lista tendrá todos los módulos que hayas conectado hacia el “Nodo de Envío de Mensajes de WhatsApp” y solo se usa cuando necesitas referenciar un dato que llegó de otro módulo conectado a este.
- Espacio donde puedes escribir el dato que requieres sobre el campo o el campo referenciado que elegiste usar. Los campos referenciados aparecen entre los símbolos {{campo}}.
- Activa la visualización de los campos referenciados disponibles, según el módulo que seleccionaste de la lista desplegable del punto 1. Si sale vacío, es que no has seleccionado ninguno o te falta correr el módulo para conocer los campos que va a utilizar.
- Ubica y haz clic sobre el campo que quieres dejar referenciado. Aparecerá con la simbología {{campo}} en el espacio del punto 2.
Campos del módulo
Para este ejemplo, enviaremos un mensaje normal con dos campos dinámicos.
UserGuest
Campo obligatorio.
Corresponde al número WhatsApp destino al que será enviado el mensaje y debe tener un formato, por ejemplo, +573100000000, que se compone del (+)(Código país)(Número WhatsApp).
Normalmente es un campo referencial para que envíe cada mensaje al usuario indicado y en este caso saldrá de {{payload.phone[0].value}}.
UserHost
Campo obligatorio.
Corresponde al número WhatsApp origen desde donde será enviado el mensaje y debe tener un formato, por ejemplo, +573100000000, que se compone del (+)(Código país)(Número WhatsApp).
TemplateId
Campo obligatorio.
Es el código generado por META cuando aprueba la plantilla del mensaje de WhatsApp. Corresponde a un código numérico.
TemplateMessage
Campo obligatorio.
Es el cuerpo del mensaje que será enviado. En las posiciones de campos dinámicos van representados por números (información que será reemplazada por datos que tengamos disponibles de cada usuario).
AppUUID
Campo obligatorio.
Se adiciona automáticamente a la configuración.
TemplateParams
Campo opcional dependiente del tipo de plantilla de WhatsApp a utilizar.
Como el mensaje que se enviará “¡Hola 1! Mi nombre es 2. ¿Cómo estás?” consta de 2 campos dinámicos, usaremos en lugar del 1 un campo referencial que nos llegará de los datos de contacto como {{payload.name}}, el cual va a contener el nombre del usuario, y en lugar del 2 enviamos siempre el mismo dato que corresponde al nombre de nuestra asesora “Biky Montes”.
MediaParams
Campo opcional dependiente del tipo de plantilla de WhatsApp a utilizar.
Se usa para el envío de imágenes, videos o documentos. Siempre que usen formato jpg y mp4 sin superar el límite de tamaño de WhatsApp, que se encuentra en 16 MB.
Para este caso, no vamos a enviar imagen, así que permanece vacío.
ButtonsParams
Campo opcional dependiente del tipo de plantilla de WhatsApp a utilizar.
Se usa para el envío de botones para respuestas rápidas junto al mensaje de WhatsApp.
Para este caso, no vamos a enviar el mensaje con botones, así que permanece vacío.
HeaderParams
Campo opcional dependiente del tipo de plantilla de WhatsApp a utilizar.
Se usa si el mensaje va a contar con un encabezado.
Para este caso, no vamos a enviar encabezado, así que permanece vacío.
Evento
Campo opcional.
Con los mensajes de WhatsApp se puede mandar información adicional para detectar la respuesta de usuarios a diferentes plantillas o vincular información importante para el usuario que recibirá el mensaje.
Este campo aún no está funcional, pero cuando se encuentre operacional, dependerá de que la línea de la marca tenga un bot que detecte los casos de respuesta.
Para este caso, no vamos a enviarlo.
EventId
Campo opcional.
Al igual que el caso de “Evento”, se usa para adicionar información importante al mensaje del usuario para ser procesado luego por un bot que se encuentre activo en la línea donde se responde.
Este campo aún no está funcional, pero cuando se encuentre operacional, dependerá de que la línea de la marca tenga un bot que detecte los casos de respuesta.
Para este caso, no vamos a enviarlo.
Inbox
También conocido como spaces, aquí se declara el space donde quedará la conversación en Keybe. Se puede requerir al equipo de Keybe el nombre exacto del space ya que es un formato diferente al que se puede visualizar en la sección de spaces de Keybe (el valor que corresponde en este espacio es el key de ese space).
En la mayoría de los casos, un space “Venta” tendrá el nombre exacto de “venta”, mientras que un space “Servicio al cliente” aparecerá como “servicio_al_cliente”.
Para nuestro caso, queremos que la conversación quede en el space de “Venta”, así que dejaremos “venta” escrito en el campo.
⚠️ ️Recuerda siempre seleccionar guardar una vez configurado cualquier módulo.
Mensaje con botones de respuesta rápida
Al Nodo de Envío de Mensajes de WhatsApp se configura adicionalmente el buttonsParams. Teniendo en cuenta que la plantilla aprobada con whatsapp debió incluir el uso de botones y se deben usar los mismos con los que se aprobó la plantilla que se enviará.
Mensaje con botones de redireccionamiento.
Funciona igual que la de botones de respuesta rápida. Al aprobar la plantilla con whatsapp se especifica la url que utiliza el botón respectivo y en Flows 2 solo se debe especificar la opción en buttonParams.
Mensaje con imagen o video
Teniendo aprobada una plantilla de whatsapp con una imagen o video especifico, se debe adicionar la url en el campo mediaParams el cual debe dirigir a la ruta web donde se encuentra la imagen jpg o video mp4 sin superar el límite establecido de whatsapp de 16 MB.
¡¡Felicidades!!!
¿Tienes alguna duda o inconveniente con el proceso? Contáctanos https://wa.me/message/JLO63Y4EMUKTC1