Saltar al contenido principal

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.

tip

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​

PropiedadTipo de datoDescripción
botIdstringID de tu bot, necesario para buscar las plantillas.

Parámetros de la Consulta​

PropiedadTipo de datoDescripción
querystringBuscar plantillas por elementName
statusstringBuscar plantillas por estado. Valores posibles: PENDING, REJECTED, APPROVED
categorystringBuscar 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​

PropiedadTipo de datoDescripción
botIdstringID del bot

Parámetros de la Consulta​

PropiedadTipo de datoDescripción
sendToAprovebooleanDefine si la plantilla debe ser enviada a WhatsApp para su aprobación.

Cuerpo de la Solicitud​

PropiedadTipo de datoDescripción
categorystringCategoría de la plantilla HSM. Valores: UTILITY, MARKETING, AUTHENTICATION
languagestringIdioma de la plantilla.
isVisiblebooleanDefine si la plantilla debe ser mostrada a los operadores.
paramsobjectEstructura de parámetros. Para la categoría de autenticación, Meta ha restringido a un parámetro.
paramsNumbernumberNúmero de parámetros. Para la categoría de autenticación, Meta ha restringido a un parámetro.
elementNamestringIdentificador único de la plantilla. Solo puede contener letras mayúsculas, guiones bajos (_) y números.
displayNamestringPropiedad para mostrar de la plantilla.
templatestringCuerpo de la plantilla. Para la categoría de autenticación, Meta ha restringido el contenido. Revisa las restricciones de esta categoría.
typestringTipo de dato de HSM. Valores: HSM, IMAGE, VIDEO, DOCUMENT
mediaUrlstringURL del medio. Requerido cuando el Tipo de dato de HSM es IMAGE, VIDEO, DOCUMENT. No aplicable para la categoría de autenticación.
interactiveActionstringAcción interactiva del HSM. Valores: NONE, CALL_TO_ACTION, QUICK_REPLY, OTP
buttonsarrayEstructura del botón. Requerido cuando la acción interactiva del HSM es CALL_TO_ACTION, QUICK_REPLY o OTP.
headerstringEncabezado 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.
exampleHeaderstringEjemplo del encabezado. Obligatorio solo si la plantilla tendrá un encabezado.
headerParamsstringEstructura de parámetros. El encabezado admite un máximo de un parámetro.
examplestringEjemplo de la plantilla. Si la plantilla tiene un parámetro, este debe ser reemplazado con un ejemplo.
extraSettingsobjectConfiguraciones 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"
}
}
info

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​

IdiomaCódigo de idiomaContenido
Inglésen{{1}} is your verification code.
Portugués (BR)pt_BRSeu código de verificação é {{1}}.
EspañolesTu 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.

PropiedadDescripción
textTexto del botón, este valor no puede ser actualizado.
typeTipo 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.

PropiedadDescripción
textTexto del botón, este valor no puede ser actualizado.
typeTipo de dato de botón. Valores: PHONE_NUMBER, URL
phone_numberNúmero de teléfono del botón.
urlURL del botón.
exampleEjemplo 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.

PropiedadDescripción
textTexto del botón, este valor no puede ser actualizado.
typeTipo de dato de botón. Valor: OTP
[
{
"text": "COPY CODE",
"type": "OTP"
}
]

Estructura de extraSettings​

PropiedadTipo de datoDescripción
addSecurityRecommendationBooleanoAñade un mensaje de seguridad adicional en las plantillas de autenticación.
codeExpirationMinutesNúmeroAñade un mensaje en el pie de página con el tiempo de expiración del código. Valores entre 1 y 90 minutos.
allowChangeCategoryBooleanoPermite 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"
}'