Las plantillas se crean y se aprueban en el dashboard. La API pública solo las
consume para enviar — no las crea ni las edita.
Cómo se resuelve una plantilla
1
Identifica la plantilla por nombre
Una plantilla se identifica por su
template_name — el mismo nombre que ves
en el dashboard y que reportas a Meta.2
Indica el idioma
El idioma es obligatorio en todo envío: agrega
language en formato Meta
lower_UPPER (ej. es_MX) para elegir cuál plantilla enviar.3
Verifica que esté aprobada
Solo se pueden enviar plantillas en estado
APPROVED. Una en PENDING
o REJECTED no es enviable.Componentes de una plantilla
Una plantilla se diseña y se aprueba en el dashboard con partes fijas y ranuras dinámicas. Al enviarla desde la API solo rellenas esas ranuras: no puedes agregar un header ni botones que la plantilla no tenga.body_variables
Los placeholders del cuerpo (
{{1}}, {{2}}, …). Array de
{ index, value }, index desde 1, hasta 30 variables.header
El encabezado: texto, o media (imagen, video o documento) vía
file_uuid.button_parameters
El parámetro de un botón dinámico (ej. el sufijo de un botón URL). Hasta 3.
header
Es una unión portype — el tipo debe coincidir con cómo se diseñó la plantilla:
El
file_uuid viene del flujo de Subir multimedia.
La transcription (hasta 4000 caracteres) es obligatoria cuando la visión no
puede transcribir el archivo (MIME no soportado o mayor a 20 MB); si falta en ese
caso, la acción falla con TEMPLATE_HEADER_TRANSCRIPTION_MISSING.
button_parameters
Array de{ subType, index, text }, hasta 3 botones:
subType— hoy solo"url"(botón de URL dinámica).index— la posición del botón dinámico dentro de la plantilla, desde 0.text— el valor que se concatena a la URL base del botón (ej. el identificador de un recurso), hasta 1024 caracteres.
Al escribir la clave es
subType (camelCase). El endpoint de lectura
Detalle de plantilla devuelve el mismo campo
como sub_type (snake_case): no copies la clave literal de la respuesta de
lectura — al enviar, sub_type se ignora en silencio y la acción falla con
INVALID_REQUEST.Enviar una plantilla
Rellenas el objetotemplate según las ranuras que tenga. Estos son los casos
más comunes:
Para enviar un texto o media mientras la ventana está abierta y que llegue la
plantilla si está cerrada, incluye el
template junto al contenido principal en
el mismo send_message.Datos de pago en las variables (marcadores)
Un marcador de pago es un token con forma==nombre== que se sustituye por el dato de
cobro real de esa conversación en el momento de enviar. En una plantilla va en el valor de
una variable del cuerpo, nunca en el texto de la plantilla.
Meta aprueba el cuerpo con los placeholders (Hola {{1}}, tu CLABE es {{2}} ({{3}})), no los
valores: esos viajan en cada envío. Por eso el marcador se puede resolver ahí, y Meta nunca ve
el token.
clabe_spei, clabe_bank y account_national_link.
Si la conversación todavía no tiene cuenta de cobro, se genera en ese momento — el
marcador es el disparador. Por eso una campaña cuyas plantillas traigan marcadores crea una
cuenta por destinatario: es lo que permite atribuir quién pagó.
PAYMENT_MARKER_UNKNOWN, 422), la conversación no tiene ese dato
(PAYMENT_MARKER_DATA_UNAVAILABLE, 422), el cuerpo interpolado supera los 1024 caracteres de
Meta (TEMPLATE_BODY_TOO_LONG, 422) o no se pudo generar la cuenta de cobro
(PAYMENT_PROFILE_GENERATION_FAILED, 500). Nunca se entrega un mensaje a medias en un flujo de
dinero.
Plantillas de prueba para conversaciones tester
El dashboard permite crear plantillas de prueba (status: FAKE) desde el
módulo Tester sin pasar por la aprobación de Meta. Sirven para que el operador
y los integradores prueben flujos contra conversaciones tester sin esperar la
revisión de Meta.
Reglas de envío vía API pública:
- Conversación tester (
is_tester: trueenGET /conversation) — puedes enviar tanto plantillas APPROVED como plantillas FAKE. El envío replica el flujo real pero no toca Meta (wamidretorna""). - Conversación real (
is_tester: false) — solo plantillas APPROVED. Si intentas enviar una plantilla FAKE o una plantilla conis_tester: truea una conversación real, la API responde conTEMPLATE_FAKE_REQUIRES_TESTER_CONVERSATION(422).
Próximos pasos
Enviar mensajes
El envío de plantillas, texto, media y respuestas rápidas.
Conversaciones
La ventana de 24 horas y el estado de una conversación.