Voir en Markdown

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

AppelEffet
POST /whatsapp/campaigns/{id}/launchDémarre la diffusion
POST /whatsapp/campaigns/{id}/pauseSuspend, sans perdre la progression
POST /whatsapp/campaigns/{id}/resumeReprend où la campagne s'était arrêtée
POST /whatsapp/campaigns/{id}/cancelArrête définitivement
POST /whatsapp/campaigns/{id}/retryNe 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.