Resumen
Cada mensaje WhatsApp iniciado por la empresa debe usar una plantilla aprobada por Meta. La API de envío v2 añade botones URL dinámicos, medios de encabezado por destinatario, botones COPY_CODE y plantillas AUTHENTICATION sobre v1. Todos los envíos van a POST /api/v2/whatsapp/templates/{TEMPLATE_ID}/send (sin barra final).
Variables del cuerpo
Las plantillas usan marcadores numerados {{1}} {{2}} {{3}} en el cuerpo. body_params[0] rellena {{1}}, body_params[1] rellena {{2}}, etc.
curl --request POST \
'https://app.buzzbip.com/api/v2/whatsapp/templates/1289/send' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer YOUR_JWT' \
--data '{
"to": "21696816277",
"country_code": "TN",
"body_params": ["Sam", "ORD-2026-00041"]
}'- En Buzzbip, cree una plantilla con cuerpo: "Hello {{1}}, your order {{2}} is confirmed."
- Envíe y espere estado APPROVED.
- Envíe con body_params que coincida exactamente con el número de marcadores.
Nota: el recuento de body_params debe coincidir exactamente con los marcadores {{N}}. Si no, HTTP 400.
Botón URL dinámico
Envíe una URL única por destinatario en un botón de llamada a la acción. La URL de la plantilla se fija al aprobar excepto un sufijo {{1}}. buttons[].value reemplaza ese sufijo por destinatario. 💡 Consejo: use un slug o token corto único — ID de pedido, hash o código de seguimiento.
curl --request POST \
'https://app.buzzbip.com/api/v2/whatsapp/templates/1296/send' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer YOUR_JWT' \
--data '{
"to": "21696816277",
"country_code": "TN",
"body_params": ["Sam"],
"buttons": [
{ "index": 0, "sub_type": "url", "value": "ord-2026-00041" }
]
}'- Cree una plantilla con botón URL: https://shop.example.com/track/{{1}}
- Envíe y espere APPROVED.
- Envíe con buttons, index 0, sub_type "url", value es el sufijo único.
Nota: Meta solo permite un marcador {{1}} al final de la URL. No puede usar {{1}}/path/{{2}}.
PDF, imagen o video por destinatario
Flujo de dos pasos para enviar un archivo distinto a cada cliente. Para varios PDF a un destinatario: A — fusionar PDFs en servidor → una subida → un envío; B — envíos múltiples: repetir subida+envío por archivo; C — documento principal como encabezado + archivos extra como botones URL firmados. ⚠️ Nota: WhatsApp permite exactamente un adjunto de encabezado por envío.
curl --request POST \
'https://app.buzzbip.com/api/v2/whatsapp/media' \
--header 'Authorization: Bearer YOUR_JWT' \
--form 'file=@/path/to/invoice-sam-april.pdf'- Suba el archivo: POST /api/v2/whatsapp/media (multipart, campo: file) → la respuesta contiene media_id
- Envíe la plantilla con header_media_id igual a ese media_id. Para DOCUMENT, establezca también document_filename.
- Repita los pasos 1–2 para cada destinatario con su archivo.
Botón COPY_CODE y OTP
Dos subpatrones. D1: código promo que el cliente copia — cree plantilla con botón COPY_CODE, envíe con buttons [{ index: 0, sub_type: "copy_code", value: "SAVE25" }], código distinto por cliente. D2: OTP para plantillas AUTHENTICATION — envíe solo con otp_code; la API inserta el código en el cuerpo y el botón Copy Code.
curl --request POST \
'https://app.buzzbip.com/api/v2/whatsapp/templates/1299/send' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer YOUR_JWT' \
--data '{
"to": "21696816277",
"country_code": "TN",
"body_params": ["Sam"],
"buttons": [{ "index": 0, "sub_type": "copy_code", "value": "SAVE25" }]
}'Nota: otp_code no puede combinarse con body_params o buttons.
Combinar body params, medios y botones
Todos los campos opcionales pueden combinarse en un envío cuando la plantilla tiene los componentes correspondientes.
curl --request POST \
'https://app.buzzbip.com/api/v2/whatsapp/templates/1302/send' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer YOUR_JWT' \
--data '{
"to": "21696816277",
"country_code": "TN",
"body_params": ["Sam", "2026-04", "99.00 TND"],
"header_media_id": 1542,
"document_filename": "invoice-sam-april-2026.pdf",
"buttons": [
{ "index": 0, "sub_type": "url", "value": "r/sam-2026-04" }
]
}'¿Qué sigue?
Relacionado: api/v2/whatsapp-templates/send-template api/v2/whatsapp-media guides/whatsapp-common-gotchas
