Vue d'ensemble
Chaque message WhatsApp initié par l'entreprise doit utiliser un modèle approuvé par Meta. L'API d'envoi v2 ajoute des boutons URL dynamiques, des médias d'en-tête par destinataire, des boutons COPY_CODE et des modèles AUTHENTICATION par rapport à v1. Tous les envois passent par POST /api/v2/whatsapp/templates/{TEMPLATE_ID}/send (sans slash final).
Variables du corps
Les modèles utilisent des placeholders numérotés {{1}} {{2}} {{3}} dans le corps. body_params[0] remplit {{1}}, body_params[1] remplit {{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"]
}'- Dans Buzzbip, créez un modèle avec le corps : "Hello {{1}}, your order {{2}} is confirmed."
- Soumettez et attendez le statut APPROVED.
- Envoyez avec body_params correspondant exactement au nombre de placeholders.
Note : le nombre de body_params doit correspondre exactement aux placeholders {{N}}. Sinon HTTP 400.
Bouton URL dynamique
Envoyez une URL unique par destinataire dans un bouton d'appel à l'action. L'URL du modèle est fixée à l'approbation sauf un suffixe {{1}}. buttons[].value remplace ce suffixe par destinataire. 💡 Astuce : utilisez un slug ou jeton court unique — ID commande, hash ou code de suivi.
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" }
]
}'- Créez un modèle avec un bouton URL : https://shop.example.com/track/{{1}}
- Soumettez et attendez APPROVED.
- Envoyez avec buttons, index 0, sub_type "url", value est le suffixe unique.
Note : Meta n'autorise qu'un seul placeholder {{1}} en fin d'URL. Vous ne pouvez pas utiliser {{1}}/path/{{2}}.
PDF, image ou vidéo par destinataire
Flux en deux étapes pour envoyer un fichier différent à chaque client. Pour plusieurs PDF à un destinataire : A — fusionner côté serveur → un upload → un envoi ; B — envois multiples : répéter upload+envoi par fichier ; C — document principal en en-tête + fichiers supplémentaires en boutons URL signés. ⚠️ Note : WhatsApp n'autorise qu'une pièce jointe d'en-tête par envoi.
curl --request POST \
'https://app.buzzbip.com/api/v2/whatsapp/media' \
--header 'Authorization: Bearer YOUR_JWT' \
--form 'file=@/path/to/invoice-sam-april.pdf'- Téléversez le fichier : POST /api/v2/whatsapp/media (multipart, champ : file) → la réponse contient media_id
- Envoyez le modèle avec header_media_id égal à ce media_id. Pour DOCUMENT, définissez aussi document_filename.
- Répétez les étapes 1–2 pour chaque destinataire avec son fichier.
Bouton COPY_CODE et OTP
Deux sous-modèles. D1 : code promo que le client copie — créez un modèle avec bouton COPY_CODE, envoyez avec buttons [{ index: 0, sub_type: "copy_code", value: "SAVE25" }], code différent par client. D2 : OTP pour modèles AUTHENTICATION — envoyez avec otp_code seul ; l'API insère le code dans le corps et le bouton 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" }]
}'Note : otp_code ne peut pas être combiné avec body_params ou buttons.
Combiner body params, média et boutons
Tous les champs optionnels peuvent être combinés en un seul envoi si le modèle a les composants correspondants.
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" }
]
}'Et ensuite ?
Voir aussi : api/v2/whatsapp-templates/send-template api/v2/whatsapp-media guides/whatsapp-common-gotchas
