Plantillas
Personaliza y utiliza plantillas de mensajes
Las plantillas se personalizan insertando parametros de posición, como el Propiedad del destinatario o detalles del pedido; estos parametros definidos se reemplazaran con los datos reales al enviar el mensaje.
Antes de crear una nueva plantilla, asegúrate de revisar las que ya están configuradas en tu bot. Para hacerlo, utiliza la opción Obtener Plantillas. Luego, si necesitas una nueva, puedes crearla en la subsección Crear Plantilla.
Recuerda que las "Plantillas" son la estructura de tu mensaje y deben ser aprobadas o rechazadas por el equipo de WhatsApp. Es fundamental seguir las pautas para crear un diseño adecuado.
Obtener Plantillas​
Recolecta todas las plantillas para tu bot.
GET https://api.jelou.ai/v1/bots/:botId/templates
Parámetros de la Ruta​
Propiedad | Tipo de dato | Descripción |
---|---|---|
botId | string | ID de tu bot, necesario para buscar las plantillas. |
Parámetros de la Consulta​
Propiedad | Tipo de dato | Descripción |
---|---|---|
query | string | Buscar plantillas por elementName |
status | string | Buscar plantillas por estado. Valores posibles: PENDING, REJECTED, APPROVED |
category | string | Buscar plantillas por categorÃa. Valores posibles: UTILITY, MARKETING, AUTHENTICATION |
Crear Plantilla​
Para crear una plantilla utiliza el siguiente endpoint
POST https://api.jelou.ai/v1/bots/:botId/templates
Parámetros de la Ruta​
Propiedad | Tipo de dato | Descripción |
---|---|---|
botId | string | ID del bot |
Parámetros de la Consulta​
Propiedad | Tipo de dato | Descripción |
---|---|---|
sendToAprove | boolean | Define si la plantilla debe ser enviada a WhatsApp para su aprobación. |
Cuerpo de la Solicitud​
Propiedad | Tipo de dato | Descripción |
---|---|---|
category | string | CategorÃa de la plantilla HSM. Valores: UTILITY, MARKETING, AUTHENTICATION |
language | string | Idioma de la plantilla. |
isVisible | boolean | Define si la plantilla debe ser mostrada a los operadores. |
params | object | Estructura de parámetros. Para la categorÃa de autenticación, Meta ha restringido a un parámetro. |
paramsNumber | number | Número de parámetros. Para la categorÃa de autenticación, Meta ha restringido a un parámetro. |
elementName | string | Identificador único de la plantilla. Solo puede contener letras mayúsculas, guiones bajos (_) y números. |
displayName | string | Propiedad para mostrar de la plantilla. |
template | string | Cuerpo de la plantilla. Para la categorÃa de autenticación, Meta ha restringido el contenido. Revisa las restricciones de esta categorÃa. |
type | string | Tipo de dato de HSM. Valores: HSM, IMAGE, VIDEO, DOCUMENT |
mediaUrl | string | URL del medio. Requerido cuando el Tipo de dato de HSM es IMAGE, VIDEO, DOCUMENT. No aplicable para la categorÃa de autenticación. |
interactiveAction | string | Acción interactiva del HSM. Valores: NONE, CALL_TO_ACTION, QUICK_REPLY, OTP |
buttons | array | Estructura del botón. Requerido cuando la acción interactiva del HSM es CALL_TO_ACTION, QUICK_REPLY o OTP. |
header | string | Encabezado de la plantilla. Aplicable solo para plantillas de Tipo de dato texto. No aplicable para la categorÃa de autenticación y tiene un lÃmite de 60 caracteres. |
exampleHeader | string | Ejemplo del encabezado. Obligatorio solo si la plantilla tendrá un encabezado. |
headerParams | string | Estructura de parámetros. El encabezado admite un máximo de un parámetro. |
example | string | Ejemplo de la plantilla. Si la plantilla tiene un parámetro, este debe ser reemplazado con un ejemplo. |
extraSettings | object | Configuraciones opcionales para la plantilla. Lee la sección de estructura para más información. |
Mensaje correcto (200)
{
"message": ["Template has been created."],
"status": "success",
"data": {
"template": "¡Hola! Somos *Jelou*. \nTe damos la bienvenida _{{1}}_. Pronto {{2}} del equipo de desarrollo se comunicará contigo.",
"displayName": "Bienvenida Desarrollo",
"elementName": "test_hsm_api",
"params": [
{
"label": "Propiedad del cliente",
"param": "1"
},
{
"label": "Propiedad del desarrollador",
"param": "2"
}
],
"paramsNumber": 2,
"isVisible": false,
"language": "ES",
"createdAt": "2021-01-28T15:08:38.492Z",
"updatedAt": "2021-01-28T15:08:38.492Z",
"botId": "<botId>",
"companyId": 5,
"status": "APPROVED"
}
}
El campo estado
en tu tabla, indica si tu plantilla ha sido aprobada por WhatsApp.
Idioma​
El idioma soportado por WhatsApp está detallado en la página oficial. Por favor, revÃsalo cuidadosamente en el siguiente enlace.
Restricciones de Contenido (CategorÃa de Autenticación)​
Meta ha restringido el contenido para la categorÃa de autenticación. El contenido será según el idioma de la plantilla. Meta está restringido a un solo parámetro.
Idioma​
Idioma | Código de idioma | Contenido |
---|---|---|
Inglés | en | {{1}} is your verification code. |
Portugués (BR) | pt_BR | Seu código de verificação é {{1}} . |
Español | es | Tu código de verificación es {{1}} . |
Estructura de los Parámetros​
Usa la siguiente estructura en el campo de parámetros
al crear una plantilla:
[
{
"label": "Propiedad del cliente",
"param": "1"
},
{
"label": "Propiedad del desarrollador",
"param": "2"
}
]
Estructura del Botón​
Utiliza la siguiente estructura en el campo de botones
cuando las acciones interactivas sean **CALL_TO_ACTION**
, **QUICK_REPLY**
o **OTP**
.
1. QUICK_REPLY​
Se utiliza para obtener respuestas rápidas para que un usuario pueda responder fácilmente cuando aparece un mensaje al presionar un botón. Es un arreglo de objetos y puede tener un máximo de 3 botones. Cada objeto tiene dos campos.
Propiedad | Descripción |
---|---|
text | Texto del botón, este valor no puede ser actualizado. |
type | Tipo de dato de botón. Valor: **QUICK_REPLY** |
[
{
"text": "Más información",
"type": "QUICK_REPLY"
},
{
"text": "Hablar con operador",
"type": "QUICK_REPLY"
},
{
"text": "Ventas",
"type": "QUICK_REPLY"
}
]
2. CALL_TO_ACTION​
Se utiliza para ofrecer una llamada a la acción para que el usuario pueda tomar una acción según las opciones mostradas. Es un arreglo de objetos. Puede tener un máximo de 2 botones y un máximo de 1 botón de cada Tipo de dato.
Propiedad | Descripción |
---|---|
text | Texto del botón, este valor no puede ser actualizado. |
type | Tipo de dato de botón. Valores: PHONE_NUMBER, URL |
phone_number | Número de teléfono del botón. |
url | URL del botón. |
example | Ejemplo de la URL. Requerido cuando el Tipo de dato de botón es URL. |
[
{
"text": "Ventas",
"phone_number": "+5939123456789",
"type": "PHONE_NUMBER"
},
{
"type": "URL",
"text": "Jelou Apps",
"url": "https://apps.jelou.ai/{{1}}",
"example": "https://apps.jelou.ai/bots"
}
]
3. OTP​
Se utiliza para obtener una "Contraseña de un solo uso" (One Time Password). Es un arreglo de objetos. Puede tener un máximo de 1 botón.
Propiedad | Descripción |
---|---|
text | Texto del botón, este valor no puede ser actualizado. |
type | Tipo de dato de botón. Valor: OTP |
[
{
"text": "COPY CODE",
"type": "OTP"
}
]
Estructura de extraSettings​
Propiedad | Tipo de dato | Descripción |
---|---|---|
addSecurityRecommendation | Booleano | Añade un mensaje de seguridad adicional en las plantillas de autenticación. |
codeExpirationMinutes | Número | Añade un mensaje en el pie de página con el tiempo de expiración del código. Valores entre 1 y 90 minutos. |
allowChangeCategory | Booleano | Permite que Meta actualice la categorÃa de la plantilla si es necesario. |
Solicitud de API de ejemplo.​
Texto​
curl --request POST \
--url 'https://api.jelou.ai/v1/bots/BOT_ID/templates?sendToAprove=true' \
--header 'Authorization: Basic {{Base64EncodedUsername:Password}}' \
--header 'content-type: application/json' \
--data '{
"displayName": "template text utility",
"template": "Thank you for your order, {{1}}! Your confirmation number is {{2}}. If you have any questions, please contact support. Thank you for being a customer!",
"example": "Thank you for your order, Omar! Your confirmation number is 71936. If you have any questions, please contact support. Thank you for being a customer!",
"elementName": "template_text_utility",
"params": [
{
"param": "1",
"label": "client",
"example": "Omar"
},
{
"param": "2",
"label": "order",
"example": "71936"
}
],
"paramsNumber": "2",
"type": "HSM",
"language": "es",
"category": "UTILITY",
"interactiveAction": "NONE"
}'
Texto con botones de respuesta rapida​
curl --request POST \
--url 'https://api.jelou.ai/v1/bots/BOT_ID/templates?sendToAprove=true' \
--header 'Authorization: Basic {{Base64EncodedUsername:Password}}' \
--header 'content-type: application/json' \
--data '{
"displayName": "template quick reply",
"template": "Thank you for your order, {{1}}! Your confirmation number is {{2}}. If you have any questions, please use the buttons below to contact support. Thank you for being a customer!",
"example": "Thank you for your order, Omar! Your confirmation number is 57893. If you have any questions, please use the buttons below to contact support. Thank you for being a customer!",
"elementName": "template_quick_reply",
"params": [
{
"param": "1",
"label": "client",
"example": "Omar"
},
{
"param": "2",
"label": "order",
"example": "57893"
}
],
"paramsNumber": "2",
"type": "HSM",
"language": "en",
"category": "UTILITY",
"interactiveAction": "QUICK_REPLY",
"buttons": [
{
"text": "Contact Support",
"type": "QUICK_REPLY"
},
{
"text": "Contact Sales",
"type": "QUICK_REPLY"
}
]
}'
Texto con botones CTA​
curl --request POST \
--url 'https://api.jelou.ai/v1/bots/BOT_ID/templates?sendToAprove=true' \
--header 'Authorization: Basic {{Base64EncodedUsername:Password}}' \
--header 'content-type: application/json' \
--data '{
"displayName": "template_call_action",
"template": "Thank you for your order, {{1}}! Your confirmation number is {{2}}. If you have any questions, please use the buttons below to contact support. Thank you for being a customer!",
"example": "Thank you for your order, Omar! Your confirmation number is 67996. If you have any questions, please use the buttons below to contact support. Thank you for being a customer!",
"elementName": "template_call_action",
"params": [
{
"param": "1",
"label": "client",
"example": "Omar"
},
{
"param": "2",
"label": "order",
"example": "67996"
}
],
"paramsNumber": "2",
"type": "HSM",
"language": "en",
"category": "UTILITY",
"interactiveAction": "CALL_TO_ACTION",
"buttons": [
{
"text": "Contact Support",
"type": "URL",
"url": "https://apps.jelou.ai",
"example": "https://apps.jelou.ai"
},
{
"text": "Call",
"type": "PHONE_NUMBER",
"phone_number": "+15552051314"
}
]
}'
Imagen​
curl --request POST \
--url 'https://api.jelou.ai/v1/bots/BOT_ID/templates?sendToAprove=true' \
--header 'Authorization: Basic {{Base64EncodedUsername:Password}}' \
--header 'content-type: application/json' \
--data '{
"displayName": "template_sample_image",
"template": "Hi {{1}}. We invite you to be part of Jelou Pocket. Visit us https://apps.jelou.ai",
"example": "Hi Omar. We invite you to be part of Jelou Pocket. Visit us https://apps.jelou.ai",
"elementName": "template_sample_image",
"params": [
{
"param": "1",
"label": "client",
"example": "Omar"
}
],
"paramsNumber": "1",
"type": "IMAGE",
"language": "en",
"category": "MARKETING",
"mediaUrl": "https://s3.us-west-2.amazonaws.com/cdn.devlabs.tech/images%2Fjeloupocket.jpeg",
"interactiveAction": "NONE"
}'
Documento​
curl --request POST \
--url 'https://api.jelou.ai/v1/bots/BOT_ID/templates?sendToAprove=true' \
--header 'Authorization: Basic {{Base64EncodedUsername:Password}}' \
--header 'content-type: application/json' \
--data '{
"displayName": "test_document_",
"template": "Hi {{1}}. We invite you to be part of Jelou Pocket. Visit us https://apps.jelou.ai",
"example": "Hi Omar. We invite you to be part of Jelou Pocket. Visit us https://apps.jelou.ai",
"elementName": "test_document_",
"params": [
{
"param": "1",
"label": "client",
"example": "Omar"
}
],
"paramsNumber": "1",
"type": "DOCUMENT",
"language": "en",
"category": "MARKETING",
"mediaUrl": "https://s3.us-west-2.amazonaws.com/cdn.devlabs.tech/images%2FdocuementTest.pdf",
"interactiveAction": "NONE"
}'
Video​
curl --request POST \
--url 'https://api.jelou.ai/v1/bots/BOT_ID/templates?sendToAprove=true' \
--header 'Authorization: Basic {{Base64EncodedUsername:Password}}' \
--header 'content-type: application/json' \
--data '{
"displayName": "test_video_1",
"template": "Hi {{1}}. We invite you to be part of Jelou Pocket. Visit us https://apps.jelou.ai",
"example": "Hi Omar. We invite you to be part of Jelou Pocket. Visit us https://apps.jelou.ai",
"elementName": "test_video_1",
"params": [
{
"param": "1",
"label": "client",
"example": "Omar"
}
],
"paramsNumber": "1",
"type": "VIDEO",
"language": "en",
"category": "MARKETING",
"mediaUrl": "https://s3.us-west-2.amazonaws.com/cdn.devlabs.tech/images%2FvideoTest.mp4",
"interactiveAction": "NONE"
}'