Skip to main content
Personaliza tus plantillas insertando parámetros de posición, como el nombre del destinatario o detalles del pedido. Estos parámetros se reemplazarán 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 ruta

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

Parámetros de consulta

PropiedadTipoDescripció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 ruta

PropiedadTipoDescripción
botIdstringID del bot

Parámetros de consulta

PropiedadTipoDescripción
sendToAprovebooleanDefine si la plantilla debe ser enviada a WhatsApp para su aprobación.

Cuerpo de la solicitud

PropiedadTipoDescripció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.
paramsarrayEstructura 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 minúsculas, guiones bajos (_) y números.
displayNamestringNombre para mostrar de la plantilla.
templatestringCuerpo de la plantilla. Para la categoría de autenticación, Meta ha restringido el contenido.
typestringTipo de HSM. Valores: HSM, IMAGE, VIDEO, DOCUMENT
mediaUrlstringURL del medio. Requerido cuando el tipo 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 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.
headerParamsarrayEstructura 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.

Ejemplos de solicitud

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": "plantilla_texto_utility",
    "template": "Gracias por tu pedido, {{1}}! Tu número de confirmación es {{2}}. Si tienes alguna pregunta, contacta a soporte.",
    "example": "Gracias por tu pedido, María! Tu número de confirmación es 71936. Si tienes alguna pregunta, contacta a soporte.",
    "elementName": "plantilla_texto_utility",
    "params": [
      {"param": "1", "label": "cliente", "example": "María"},
      {"param": "2", "label": "orden", "example": "71936"}
    ],
    "paramsNumber": 2,
    "type": "HSM",
    "language": "es",
    "category": "UTILITY",
    "interactiveAction": "NONE"
  }'
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": "plantilla_quick_reply",
    "template": "Gracias por tu pedido, {{1}}! Tu número de confirmación es {{2}}. Usa los botones para contactarnos.",
    "example": "Gracias por tu pedido, María! Tu número de confirmación es 57893. Usa los botones para contactarnos.",
    "elementName": "plantilla_quick_reply",
    "params": [
      {"param": "1", "label": "cliente", "example": "María"},
      {"param": "2", "label": "orden", "example": "57893"}
    ],
    "paramsNumber": 2,
    "type": "HSM",
    "language": "es",
    "category": "UTILITY",
    "interactiveAction": "QUICK_REPLY",
    "buttons": [
      {"text": "Contactar Soporte", "type": "QUICK_REPLY"},
      {"text": "Contactar Ventas", "type": "QUICK_REPLY"}
    ]
  }'
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": "plantilla_call_action",
    "template": "Gracias por tu pedido, {{1}}! Tu número de confirmación es {{2}}. Usa los botones para contactarnos.",
    "example": "Gracias por tu pedido, María! Tu número de confirmación es 67996. Usa los botones para contactarnos.",
    "elementName": "plantilla_call_action",
    "params": [
      {"param": "1", "label": "cliente", "example": "María"},
      {"param": "2", "label": "orden", "example": "67996"}
    ],
    "paramsNumber": 2,
    "type": "HSM",
    "language": "es",
    "category": "UTILITY",
    "interactiveAction": "CALL_TO_ACTION",
    "buttons": [
      {"text": "Contactar Soporte", "type": "URL", "url": "https://apps.jelou.ai", "example": "https://apps.jelou.ai"},
      {"text": "Llamar", "type": "PHONE_NUMBER", "phone_number": "+PHONE_NUMBER"}
    ]
  }'
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": "plantilla_imagen",
    "template": "Hola {{1}}. Te invitamos a conocer nuestras promociones.",
    "example": "Hola María. Te invitamos a conocer nuestras promociones.",
    "elementName": "plantilla_imagen",
    "params": [
      {"param": "1", "label": "cliente", "example": "María"}
    ],
    "paramsNumber": 1,
    "type": "IMAGE",
    "language": "es",
    "category": "MARKETING",
    "mediaUrl": "https://cdn.ejemplo.com/imagen.jpeg",
    "interactiveAction": "NONE"
  }'
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": "plantilla_documento",
    "template": "Hola {{1}}. Adjuntamos tu documento solicitado.",
    "example": "Hola María. Adjuntamos tu documento solicitado.",
    "elementName": "plantilla_documento",
    "params": [
      {"param": "1", "label": "cliente", "example": "María"}
    ],
    "paramsNumber": 1,
    "type": "DOCUMENT",
    "language": "es",
    "category": "MARKETING",
    "mediaUrl": "https://cdn.ejemplo.com/documento.pdf",
    "interactiveAction": "NONE"
  }'
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": "plantilla_video",
    "template": "Hola {{1}}. Mira nuestro nuevo video.",
    "example": "Hola María. Mira nuestro nuevo video.",
    "elementName": "plantilla_video",
    "params": [
      {"param": "1", "label": "cliente", "example": "María"}
    ],
    "paramsNumber": 1,
    "type": "VIDEO",
    "language": "es",
    "category": "MARKETING",
    "mediaUrl": "https://cdn.ejemplo.com/video.mp4",
    "interactiveAction": "NONE"
  }'

Respuestas

{
  "message": ["Template has been created."],
  "status": "success",
  "data": {
    "template": "¡Hola! Somos *Jelou*. \nTe damos la bienvenida _{{1}}_. Pronto {{2}} del equipo se comunicará contigo.",
    "displayName": "Bienvenida",
    "elementName": "test_hsm_api",
    "params": [
      {"label": "Nombre del cliente", "param": "1"},
      {"label": "Nombre del asesor", "param": "2"}
    ],
    "paramsNumber": 2,
    "isVisible": false,
    "language": "ES",
    "createdAt": "2021-01-28T15:08:38.492Z",
    "updatedAt": "2021-01-28T15:08:38.492Z",
    "botId": "BOT_ID",
    "companyId": 100,
    "status": "APPROVED"
  }
}
{
  "message": ["Template name already exists"],
  "status": "failed"
}
{
  "message": "Authentication failed"
}
{
  "message": ["The Bot could not be found at the moment."],
  "statusMessage": "failed",
  "error": {
    "code": "E1019",
    "key": "BOT_NOT_FOUND"
  }
}
El campo status en la respuesta 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ódigoContenido
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 params al crear una plantilla:
[
  {"label": "Nombre del cliente", "param": "1"},
  {"label": "Número de orden", "param": "2"}
]

Estructura del botón

Utiliza la siguiente estructura en el campo de buttons cuando las acciones interactivas sean CALL_TO_ACTION, QUICK_REPLY o OTP.

QUICK_REPLY

Se utiliza para obtener respuestas rápidas. Es un arreglo de objetos y puede tener un máximo de 3 botones.
PropiedadDescripción
textTexto del botón, este valor no puede ser actualizado.
typeTipo 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"}
]

CALL_TO_ACTION

Se utiliza para ofrecer una llamada a la acción. Puede tener un máximo de 2 botones y un máximo de 1 botón de cada tipo.
PropiedadDescripción
textTexto del botón, este valor no puede ser actualizado.
typeTipo 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 botón es URL.
[
  {"text": "Ventas", "phone_number": "+PHONE_NUMBER", "type": "PHONE_NUMBER"},
  {"type": "URL", "text": "Ver sitio", "url": "https://apps.jelou.ai/{{1}}", "example": "https://apps.jelou.ai/ofertas"}
]

OTP

Se utiliza para obtener una “Contraseña de un solo uso” (One Time Password). Puede tener un máximo de 1 botón.
PropiedadDescripción
textTexto del botón, este valor no puede ser actualizado.
typeTipo de botón. Valor: OTP
[
  {"text": "COPY CODE", "type": "OTP"}
]

Estructura de extraSettings

PropiedadTipoDescripción
addSecurityRecommendationbooleanAñade un mensaje de seguridad adicional en las plantillas de autenticación.
codeExpirationMinutesnumberAñade un mensaje en el pie de página con el tiempo de expiración del código. Valores entre 1 y 90 minutos.
allowChangeCategorybooleanPermite que Meta actualice la categoría de la plantilla si es necesario.