Campagnes WhatsApp
C'est le module qui apporte le plus à une intégration : lancer une campagne par l'API, c'est hériter de la cadence d'envoi, du suivi individuel par destinataire, de la reprise après interruption et du recalcul des compteurs de livraison. Au-dessus d'un simple endpoint d'envoi, tout cela est à réécrire, et se casse au premier lot de mille numéros.
Lister
GET /whatsapp/campaigns?status=active&limit=20
Suivre une campagne
GET /whatsapp/campaigns/{id}
Renvoie les compteurs : envoyés, distribués, lus, en échec.
GET /whatsapp/campaigns/{id}/recipients?status=failed
Le détail destinataire par destinataire, avec le motif d'échec quand il y en a un. C'est ce qui permet de relancer précisément, plutôt que de tout renvoyer.
Piloter
| Appel | Effet |
|---|---|
POST /whatsapp/campaigns/{id}/launch | Démarre la diffusion |
POST /whatsapp/campaigns/{id}/pause | Suspend, sans perdre la progression |
POST /whatsapp/campaigns/{id}/resume | Reprend où la campagne s'était arrêtée |
POST /whatsapp/campaigns/{id}/cancel | Arrête définitivement |
POST /whatsapp/campaigns/{id}/retry | Ne renvoie qu'aux destinataires en échec |
Le lancement rend la main dès la mise en file : il n'attend pas la fin de la diffusion, qui se poursuit côté serveur. Suis l'avancement par GET /whatsapp/campaigns/{id}, ou reçois-le sur ton webhook.
Ajouter des destinataires
POST /whatsapp/campaigns/{id}/recipients
{ "phones": ["+2250700000000", "+2250700000001"] }
Accepte aussi customerIds pour viser des clients déjà enregistrés dans la boutique.
Ce que les règles de campagne apportent
- Cadence maîtrisée : les envois sont étalés pour rester dans les limites de débit de Meta. Une boucle d'envoi écrite à la main fait passer le numéro en qualité dégradée, puis le fait bloquer.
- Reprise : une interruption ne perd pas la progression, et les destinataires déjà traités ne sont pas renvoyés.
- Suivi unitaire : chaque destinataire porte son propre statut, pas seulement un compteur global.
- Consentement : les contacts qui se sont désinscrits sont écartés automatiquement.
Statuts de campagne
draft, scheduled, active, paused, completed, cancelled.
Une campagne appartient à une boutique
Les appels portant un identifiant de campagne vérifient qu'elle appartient bien à la boutique de ta clé. Un identifiant appartenant à une autre boutique répond resource_not_found, exactement comme un identifiant inexistant : la réponse ne permet pas de deviner ce qui existe.