Crear plantilla
Crea una plantilla de mensaje de WhatsApp en el DID indicado.
Endpoint: POST /v1/templates/{did}
Parámetros
Path
| Parámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
did | string | Sí | ID del destino. |
Query
| Parámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
client_id | number | No | Cliente. Requiere BSP_CN si difiere del token. |
Body
| Campo | Tipo | Requerido | Descripción |
|---|---|---|---|
name | string | Sí | Nombre de la plantilla (único por WABA). |
language | string | Sí | Código de idioma: es, en_US, pt_BR… |
category | string | Sí | MARKETING, UTILITY o AUTHENTICATION. |
components | array | Sí | Componentes: HEADER, BODY, FOOTER, BUTTONS. |
parameter_format | string | No | Formato de los placeholders del BODY: solo positional (default, {{1}}). El valor named ({{name}}) no está soportado en api-bsp-chattigo ni en creación ni en envío; los placeholders deben ser posicionales ({{1}}, {{2}}, …). Si se omite, se asume positional. |
client_id | number | No | Cliente (requiere BSP_CN para otro cliente). |
channel_campaigns | object | No | Asignación automática de canal/campaña. |
optimization_spec | object | No | Límite de oferta (max price): bid_amount, bid_strategy, bid_country_multiplier_overrides. |
allow_button_url_change | boolean | No | Migra botones URL al formato dinámico (url-mapper redirect). |
allow_category_change | boolean | No | Permite que Meta recategorice la plantilla automáticamente. |
add_security_recommendation | boolean | No | AUTHENTICATION: agrega la línea “For your security…”. |
code_expiration_minutes | number | No | AUTHENTICATION: validez del código OTP (default 10 min, 30s–15min). |
message_send_ttl_seconds | number | No | Validez de entrega (TTL) en segundos. Se pasa directamente a Meta. Rangos: AUTHENTICATION 30–900, UTILITY 30–43200, MARKETING 43200–2592000. -1 = 30 días (solo auth/utility). |
country | string | No | Código de país para el max-price (dinámico); si se omite se resuelve del did. |
Request
curl --request POST \
--url 'https://api.chattigo.com/v1/templates/{did}' \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{
"name": "test_promo",
"language": "es",
"category": "MARKETING",
"components": [
{
"type": "BODY",
"text": "¡Oferta exclusiva {{1}}! Tienes {{2}}% de descuento.",
"example": { "body_text": [["Cliente", "30"]] }
}
]
}'Response
Éxito (200)
El response es el passthrough del body de Meta (deserializado en dto.CreateResponse). Contiene solo los campos que Meta devuelve en el create:
{
"id": "114002218302594",
"status": "PENDING",
"category": "MARKETING"
}Errores
| Código | Caso |
|---|---|
400 | did is required, validación de componentes/examples fallida, media inválida |
400 | header_source y header_handle mutuamente excluyentes |
400 | URL de media no HTTPS o IP privada (bloqueada por seguridad) |
403 | DID fuera de la jerarquía WABA, o acceso a otro cliente sin BSP_CN |
413 | Multipart excede el tamaño máximo |
502 | Servicio externo inalcanzable |
Notas
- Tras el create exitoso, la plantilla se registra y se dispara el evento de creación.
- El modo
filerequieremultipart/form-datacon partstemplateyfile. - Los templates
AUTHENTICATION(OTP) usan botonesOTPconotp_type:COPY_CODE,ONE_TAPoZERO_TAP. parameter_formatsolo admitepositional({{1}}): no se soporta la creación ni el envío connamedniparameter_nameen api-bsp-chattigo. Los placeholders deben ser posicionales ({{1}},{{2}}, …).