ITSkillsCenter
E-commerce

WhatsApp Cloud API en 2026 : architecture, webhooks, templates et intégrations

24 min de lecture

Cet article s’adresse aux développeurs et intégrateurs qui doivent bâtir, maintenir ou auditer une intégration WhatsApp Business sur la Cloud API de Meta. Il ne traite pas le cadrage business, déjà couvert par notre tutoriel d’intégration CRM, mais l’anatomie technique de la plateforme : objets de configuration, flot des messages, signatures cryptographiques, mécanique de pricing par message, limites de débit et patterns de résilience. Toutes les valeurs (versions d’API, dates, tarifs) sont vérifiées sur les sources primaires Meta et listées dans le rapport en fin d’article.

Sommaire

Introduction

La WhatsApp Cloud API est, depuis octobre 2025, le seul canal officiel pour qu’une application tierce envoie ou reçoive des messages WhatsApp Business a l’échelle. L’ancienne On-Premises API, hébergée chez le client via un container Docker fourni par Meta, a ete officiellement deprecate le 27 octobre 2023 et son arrêt définitif a eu lieu le 23 octobre 2025. Toute équipe qui maintient encore un client On-Premises en 2026 envoie dans le vide : Meta a coupe l’acheminement de messages émis depuis ces clients.

Le passage en Cloud API change l’équation opérationnelle. Plus d’infrastructure a opérer, plus de Coreapp ni de Webapp a redémarrer après une mise à jour, plus de certificats serveur a renouveler. En contrepartie, l’intégration devient une suite d’appels HTTP authentifiés vers graph.facebook.com, et toute la logique de fiabilité remonte côté application : vérifier les signatures, gérer les retries, idempotenter les écritures dans le CRM, modeler les fenêtres de service client. Le but de cet article est de donner aux développeurs et intégrateurs une carte mentale précise de cette plateforme telle qu’elle existe en 2026, avec les références officielles à jour.

Pourquoi Cloud API plutôt qu’On-Premises

La question ne se pose plus en 2026 : il n’y a plus d’alternative pour de nouveaux déploiements. Mais comprendre la rupture aide a interpréter les différences observées dans les SDK communautaires, encore parfois calques sur l’ancienne API. Trois changements majeurs structurent la nouvelle plateforme.

Hébergement chez Meta. Les média (images, PDF, audio) sont stockés pendant 30 jours sur les serveurs Meta. Vous obtenez un identifiant media_id a l’upload, vous le referencez dans vos messages, et vous le téléchargez via une URL signée a durée limitée quand un utilisateur vous envoie un fichier. Cela élimine le besoin de stockage objet temporaire de votre côté, mais impose de déclencher le téléchargement rapidement après réception du webhook.

Versionnage Graph API. Tous les endpoints sont versionnés via le segment d’URL /v23.0/, l’incrément Graph API supporté en 2026, aux côtés des releases v24.0 (octobre 2025) et v25.0 (février 2026). Les versions sont valables 2 ans avant deprecation, et Meta publie un changelog par version (champs ajoutes, deprecations, breaking changes). En production, on epingle une version explicite plutôt que d’utiliser la version par défaut : cela évite les surprises lors d’une bascule serveur côté Meta.

Authentification par System User Token. L’On-Premises utilisait un couple compte/mot de passe et un token a durée de vie limitée. La Cloud API repose sur un System User Token (SUT) génère depuis Business Manager, attache à une application et à un compte WhatsApp Business (WABA). Ce token à une durée de vie configurable (60 jours ou jamais expirant), il est révocable individuellement, et il porte des permissions granulaires (whatsapp_business_messaging, whatsapp_business_management).

Le passage a Cloud API supprime aussi tout le travail de mise à jour : Meta déploie elle-même les patches, les nouveaux types de messages (interactives, flows, listes) deviennent disponibles sans action de votre part. La contrepartie est que vous ne contrôlez plus la version de l’engin de messagerie. Si Meta change un comportement subtil, votre code doit s’adapter rapidement.

Anatomie d’une intégration Cloud API

Avant d’envoyer le moindre message, il faut comprendre l’enchaînement d’objets que Meta empile pour modéliser une intégration. Le bon mental model est celui d’une cascade de containers, du plus général au plus spécifique.

Objet Role Identifiant
Business Portfolio (anciennement Business Manager) Container racine qui regroupe tous les actifs business (pages, comptes pub, WABA, applications). Une entreprise = un portfolio. Business ID
WhatsApp Business Account (WABA) Container WhatsApp dans le portfolio. Regroupe un ou plusieurs numéros, les templates approuvés, les paramètres de facturation. WABA ID
Phone Number Numéro WhatsApp Business réel, attache à une WABA. Chaque numéro a ses propres limites de débit et son propre score de qualité. Phone Number ID
Application Application Meta déclarée dans developers.facebook.com. Elle porte la configuration du webhook et l’App Secret servant a signer les payloads. App ID + App Secret
System User Identité technique créée dans Business Settings, attachee au portfolio. Génère les tokens long-lived utilisés par votre backend. System User Token
Webhook Subscription Souscription qui lie l’application aux événements d’une WABA (messages entrants, statuts de livraison, mises à jour de templates). Callback URL + verify token

Concrètement, pour envoyer un message texte vous avez besoin de trois choses : le Phone Number ID dans l’URL, le System User Token dans l’en-tête Authorization, et le numéro du destinataire dans le payload JSON. La WABA ID n’apparait pas explicitement dans la requête d’envoi : elle est implicite via le Phone Number ID.

curl -X POST \
  "https://graph.facebook.com/v23.0/PHONE_NUMBER_ID/messages" \
  -H "Authorization: Bearer SYSTEM_USER_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "messaging_product": "whatsapp",
    "to": "221771234567",
    "type": "text",
    "text": { "body": "Bonjour, votre commande est prete." }
  }'

Cette requête renvoie un objet JSON contenant un messages[0].id du type wamid.HBgM.... Cet identifiant est l’unique handle qui vous permettra ensuite de corréler les statuts de livraison (sent, delivered, read, failed) reçus par webhook avec le message envoyé. Stockez-le immédiatement en base, indexe : il sera la clé de jointure principale de toute votre logique de tracking. Si la requête échoue, le corps de la réponse contient un objet error avec un code numérique (par exemple 131030 pour numéro non WhatsApp), un sous-code et un message lisible.

Pour créer un System User Token avec les bonnes permissions, vous devez passer par Business Settings, générer un Admin System User, lui assigner l’application puis la WABA, et générer un token avec les scopes whatsapp_business_messaging (envoi/réception) et whatsapp_business_management (gestion templates et numéros). Le tutoriel Configurer Meta Cloud API gratuit sans BSP détaillé cette procédure pas a pas avec captures d’écran.

Le flot des messages : entrant et sortant

L’intégration repose sur deux flux asynchrones, totalement découplés côté infrastructure mais qu’il faut absolument relier dans votre logique applicative pour offrir une expérience cohérente.

Le flux sortant est synchrone du point de vue du POST initial : vous recevez immédiatement le wamid ou une erreur. Mais la livraison réelle est asynchrone : Meta accepte le message dans une file, l’achemine vers le client, et vous notifie ensuite via webhook chaque transition d’état (sent = sorti des serveurs Meta, delivered = reçu sur l’appareil, read = ouvert dans WhatsApp, failed = échec définitif). Une application de production doit considérer le retour du POST comme une simple confirmation de prise en compte, pas comme une preuve de livraison.

Le flux entrant est entièrement webhook-driven. Quand un utilisateur envoie un message à votre numéro, Meta déclenche un POST HTTPS vers la callback URL configurée dans votre application. Le payload contient l’objet message complet (texte, média, location, contacts, button replies, list replies), le profil de l’expéditeur, et un timestamp. Votre serveur doit répondre 200 OK rapidement (les BSP convergent sur une fenêtre pratique de 5 à 10 secondes), sinon Meta considère la livraison échouée et retentera selon une politique d’exponential backoff (la doc Meta indique 36 heures, certains BSP signalent jusqu’à 7 jours). Cela impose un pattern : accuse de réception immédiat, traitement métier en file asynchrone.

La conséquence pratique est qu’on ne fait jamais d’appel CRM, de génération IA ou d’envoi de réponse directement dans le handler du webhook. On parse, on signe-vérifie, on enqueue, on répond 200, et un worker sépare consomme la file pour la logique métier.

Templates approuvés : pourquoi, comment, catégories

WhatsApp distingue deux modes d’envoi : les messages free-form, autorises uniquement dans la fenêtre de service client de 24 heures qui suit le dernier message reçu de l’utilisateur, et les messages template, seuls autorises pour initier une conversation ou répondre hors fenêtre. Cette règle est absolue côté Meta : un envoi free-form hors fenêtre échoue avec le code 131047.

Un template est un message pre-redige soumis a l’approbation de Meta. Une fois approuvé, il devient référençable par son nom et sa langue dans une requête d’envoi. Les templates sont organises en quatre catégories qui determinent leur tarification et leurs règles d’usage.

Catégorie Usage Exemples
Marketing Promotions, annonces, réactivation client. Initie une conversation marketing facturée. « Nouvelle collection vêtements modestes disponible »
Utility Notification transactionnelle liée à une action de l’utilisateur. Confirmation, statut, rappel. « Votre commande #4521 a ete expédiée »
Authentication Codes a usage unique (OTP), vérification de compte. Format strict impose par Meta. « Votre code de vérification est 482910 »
Service Réponses dans la fenêtre 24h. Libres, gratuites depuis juillet 2025. Toute réponse free-form à un message client

Le processus d’approbation est entièrement automatise depuis 2024. Vous soumettez un template via l’API Templates ou via le Business Manager, et un classifier le passe en revue. La latence moyenne observée en 2026 est de quelques minutes pour Utility et Authentication, et de 24 a 48 heures pour Marketing avec contenus complexes ou variables ambiguës. Les motifs de rejet récurrents : variables non-renseignées comme exemples, contenu promotionnel deguise en Utility, mention d’une marque sans autorisation, langue déclarée différente de la langue réelle.

Concrètement, un template ressemble a ceci dans le corps d’envoi :

{
  "messaging_product": "whatsapp",
  "to": "221771234567",
  "type": "template",
  "template": {
    "name": "confirmation_commande",
    "language": { "code": "fr" },
    "components": [
      {
        "type": "body",
        "parameters": [
          { "type": "text", "text": "Aissatou" },
          { "type": "text", "text": "4521" }
        ]
      }
    ]
  }
}

Si l’envoi réussit, vous recevez un wamid et le message est facture selon la catégorie. Si le template n’est pas approuvé, ou si la langue ne correspond pas, l’API renvoie 132001 (template name does not exist) ou 132000 (template parameter mismatch). Notre tutoriel sur les templates et leur approbation couvre les patterns de variables, les boutons CTA, les headers média, et les pièges de classification a éviter.

Webhooks Meta : architecture événementielle

Les webhooks WhatsApp utilisent le même protocole que tous les webhooks de la plateforme Meta. Vous declarez une callback URL HTTPS et un verify token dans la configuration de l’application, vous souscrivez aux champs voulus (messages, message_template_status_update, account_update, etc.), et Meta envoie un POST JSON pour chaque événement.

L’enrolement passe par une étape de challenge GET. La première fois que vous configurez l’URL, Meta envoie un GET avec trois paramètres : hub.mode=subscribe, hub.verify_token (la valeur que vous avez déclarée), hub.challenge (une chaine aleatoire). Votre serveur doit vérifier que le verify token correspond, puis renvoyer hub.challenge en texte brut avec un statut 200. Sans cette poignee de main initiale, l’abonnement n’est pas active.

// Express.js : endpoint de verification GET
app.get('/webhook', (req, res) => {
  const mode = req.query['hub.mode'];
  const token = req.query['hub.verify_token'];
  const challenge = req.query['hub.challenge'];

  if (mode === 'subscribe' && token === process.env.VERIFY_TOKEN) {
    return res.status(200).send(challenge);
  }
  res.sendStatus(403);
});

Une fois cette poignee de main passée, Meta n’enverra plus jamais de GET de vérification (sauf si vous reconfigurez l’URL). Tous les événements ultérieurs arrivent en POST. Si votre serveur tombe ou répond autre chose que 200, Meta met le message en file de retry interne et reessaye selon une courbe exponentielle pendant 7 jours. Au-delà, le message est définitivement abandonne.

Les principaux champs de souscription qu’une intégration en production active sont les suivants : messages couvre à la fois les messages entrants et les statuts de livraison de vos envois (les deux apparaissent comme objets distincts dans l’array changes[].value), message_template_status_update notifie quand un template change de statut (approuvé, rejeté, mis en pause pour qualité), account_update signale les changements globaux du compte (decision Meta sur le tier, blocage du numéro, mise à jour du quality rating), account_alerts remonte les alertes de risque de blocage avant qu’il ne se produise.

Notre tutoriel d’implementation des webhooks avec Node.js et Express montre comment construire un endpoint robuste : vérification de signature, file de traitement, idempotence, expose via tunnel HTTPS pendant le développement.

Pricing par message depuis le 1er juillet 2025

C’est probablement le changement le plus structurant des 18 derniers mois pour qui maintient une intégration WhatsApp en production. Jusqu’au 30 juin 2025, Meta facturait par conversation : une fenêtre de 24 heures ouverte par le premier message commercial, durant laquelle tous les messages échanges etaient inclus dans un tarif unique. Depuis le 1er juillet 2025, Meta facture par message template livre, avec des règles distinctes par catégorie.

Catégorie Tarification depuis juillet 2025 Usage typique
Marketing Facture par message livre, tarif par pays. Généralement le plus cher. Initier conversation promotionnelle
Utility (hors fenêtre 24h) Facture par message livre, tarif inférieur au Marketing. Notification transactionnelle hors fenêtre
Utility (dans fenêtre 24h ouverte par client) Gratuit depuis juillet 2025. Confirmation suite a action client
Authentication Facture par message livre, tarif spécifique par pays. OTP, vérification
Service (free-form dans fenêtre 24h) Gratuit. Réponses au support client

La conséquence opérationnelle est lourde. Un envoi de masse marketing qui aurait coute 1 conversation par destinataire avant juillet 2025 coute desormais 1 message marketing par destinataire, sans amortissement sur les eventuelles relances dans les 24 heures suivantes (chaque relance template est facturée séparément). En revanche, répondre à un client qui vous a contacte le premier reste gratuit, ce qui valorise les patterns conversationnels initiées par le client (par exemple un mot-clé envoyé après avoir scanne un QR code en boutique).

Meta applique des règles de classification plus strictes sur Utility depuis juillet 2025. Un template qui parle de promotion, qui propose une remise ou qui contient un appel a l’achat sera systématiquement reclasse Marketing, même si vous l’avez soumis comme Utility. Le seul moyen de qualifier en Utility est de rester strictement transactionnel : statut, reçu, rappel d’échéance, mise à jour de livraison. Les volumes Utility et Authentication beneficient en outre de remises par paliers selon le volume mensuel et la région, ce que ne touche pas Marketing.

Pour calculer le coût réel d’une intégration, il faut tracer chaque envoi avec sa catégorie effective (telle que renvoyée par Meta dans l’objet pricing du webhook de status), sommer par mois et par pays, et appliquer la grille publique. Le tutoriel Pricing WhatsApp 2026 : suivre et optimiser le coût par conversation propose une méthode de tableau de bord et de calcul anticipe avant d’envoyer une campagne.

Intégration CRM : patterns d’architecture

L’intégration entre WhatsApp et un CRM (HubSpot, Odoo, Salesforce, Zoho) répond à un problème classique : faire converger un canal asynchrone événementiel et un système transactionnel orienté objets métier. Trois patterns se rencontrent en production, du plus simple au plus robuste.

Push direct depuis le webhook. Le handler webhook ouvre une connexion API CRM et créé/met à jour le contact ou le ticket dans la foulée. Simple a coder, mais fragile : si le CRM est lent ou indisponible, le webhook timeout et Meta retente. On voit alors apparaître des doublons, et la qualité du numéro WhatsApp degrade si trop de webhooks échouent. A reserver aux volumes faibles et aux CRM avec API très rapide.

File de messages avec workers idempotents. Le handler webhook se contente de pousser le payload brut dans une file (Redis, RabbitMQ, SQS, ou même une table SQL). Il répond 200 immédiatement. Un pool de workers consomme la file et applique la logique CRM. La clé est l’idempotence : chaque message à un wamid unique, on l’utilise comme clé d’unicite côté CRM (champ custom whatsapp_message_id sur le ticket ou la note). Si Meta retransmet, le worker reconnait le doublon et n’agit pas. C’est le pattern recommande pour la majorité des intégrations.

Event sourcing avec replay. On persiste l’intégralité des payloads webhook dans un store append-only (Postgres avec contrainte d’unicite sur wamid, ou table BigQuery). Toute la logique CRM est calculee comme une projection. Avantage : on peut rejouer l’historique après un bug ou un changement de schema CRM. Inconvenient : complexité opérationnelle plus élevée. Pertinent au-delà de quelques dizaines de milliers de messages par jour, ou quand l’audit trail est une exigence réglementaire.

Dans les trois cas, la jointure entre le numéro WhatsApp et l’identité client côté CRM est non triviale. Plusieurs CRM utilisent l’email comme clé primaire et stockent le téléphone comme attribut secondaire non indexe. Il faut alors construire une table de correspondance interne (téléphone normalise au format E.164 -> identifiant CRM) et la maintenir à jour. Notre tutoriel d’intégration HubSpot et Odoo détaillé la mise en place de cette table et les webhooks bidirectionnels.

Conformité et limites

WhatsApp Business est plus contraint que la plupart des canaux marketing. Les règles ne sont pas optionnelles : Meta blocke les numéros qui les violent, et la chaine d’appel n’est pas de niveau application mais de niveau plateforme.

Opt-in obligatoire et traçable. Vous devez avoir collecte un consentement explicite, spécifique au canal WhatsApp, par un mécanisme traçable (case a cocher avec horodatage, mot-clé envoyé par l’utilisateur, formulaire signe). Le consentement implicite (l’utilisateur a achete chez vous donc il consent aux notifications) est insuffisant. Meta peut auditer votre processus si la qualité du numéro degrade.

Fenêtre de service client de 24 heures. Toute réponse free-form (non-template) doit intervenir dans les 24 heures suivant le dernier message reçu de l’utilisateur. Au-delà, seul un template approuvé peut être envoyé. Cette règle s’applique par numéro utilisateur, pas globalement.

Limites de débit et tier system. Historiquement, les nouveaux comptes non vérifiés commencent à 250 contacts uniques par jour ; les comptes vérifiés passent directement au Tier 1 (1000 contacts), puis progressent par paliers (1k, 10k, 100k, illimite) selon la qualité et le volume. Meta a annonce une refonte progressive en 2026 : suppression des paliers 2k et 10k, passage direct a 100k pour les comptes vérifiés ou ayant atteint le seuil de qualité, déploiement étape par étape entre Q1 et Q2 2026. Les limites s’evaluent au niveau du Business Portfolio, pas du numéro individuel : si vous avez 3 numéros sous le même portfolio avec une limite de 100k, ils partagent ces 100k, ils ne cumulent pas 300k.

RGPD et données personnelles. Le numéro de téléphone est une donnée personnelle au sens RGPD. Vous devez documenter la base légale (consentement explicite la plupart du temps), permettre l’effacement sur demande, et respecter les délais de notification de breach. Pour les intégrations qui font transiter le contenu des messages vers une IA tierce (résumé automatique, classification), le contrat avec le fournisseur d’IA doit explicitement couvrir ces données. Plusieurs juridictions imposent en outre que les données ne quittent pas leur territoire : vérifiez la région d’exécution de votre serveur et de votre LLM.

Sécurité : signatures, App Secret, vérification webhook

Le webhook est un endpoint public sur Internet : il faut impérativement vérifier que chaque POST reçu provient bien de Meta, sinon n’importe quel attaquant peut injecter de faux messages dans votre système et provoquer des actions métier (envois de templates, création de leads frauduleux, déclenchement d’OTP). Meta signe chaque payload avec un HMAC-SHA256 calcule sur le corps brut de la requête, en utilisant l’App Secret comme clé. La signature est transmise dans l’en-tête X-Hub-Signature-256 sous la forme sha256=<hex>.

L’implementation correcte exige trois precautions souvent oubliees. Première precaution : capturer le corps brut de la requête avant tout parsing JSON. Express.js par défaut consomme le stream pour le parser, ce qui rend le calcul HMAC impossible ensuite. On configuré donc un verify custom dans le middleware body-parser pour mémoriser le buffer original. Deuxième precaution : utiliser une comparaison constante en temps (crypto.timingSafeEqual en Node.js, hmac.compare_digest en Python) pour éviter les attaques par timing. Troisième precaution : rejeter immédiatement avec un 401 si la signature est absente ou invalide, sans parser le payload, sans logger le contenu (un payload non signe peut contenir un token malveillant).

// Middleware de verification HMAC-SHA256
const crypto = require('crypto');

function verifySignature(req, res, buf) {
  const signature = req.headers['x-hub-signature-256'];
  if (!signature) {
    res.status(401).send('Missing signature');
    throw new Error('No signature');
  }
  const expected = 'sha256=' + crypto
    .createHmac('sha256', process.env.APP_SECRET)
    .update(buf)
    .digest('hex');
  const received = Buffer.from(signature);
  const computed = Buffer.from(expected);
  if (received.length !== computed.length ||
      !crypto.timingSafeEqual(received, computed)) {
    res.status(401).send('Invalid signature');
    throw new Error('Bad signature');
  }
}

app.use('/webhook', express.json({ verify: verifySignature }));

Si tout se passe bien, le middleware ne renvoie rien et la requête continue vers votre handler avec un body déjà parse. Si la signature est invalide, le serveur répond 401 avant même d’atteindre le handler. En production, on logge ces 401 (sans le payload), on alerte au-delà d’un seuil, et on filtre les IPs sources si une tentative concertee se manifeste.

L’App Secret mérite la même protection qu’une clé privée. Stockez-le dans un gestionnaire de secrets (AWS Secrets Manager, HashiCorp Vault, ou les variables d’environnement chiffrees de votre PaaS), jamais dans le repository git, jamais dans un fichier .env committe. En cas de compromission suspectée, régénérez-le immédiatement depuis Business Settings : Meta met la nouvelle valeur en service en quelques minutes et invalide l’ancienne.

Erreurs fréquentes en production

Code Description Cause typique Résolution
131030 Recipient phone number not in allowed list Numéro non WhatsApp ou non encore enregistré côté test Vérifier au préalable via l’API Contacts ou demander a l’utilisateur
131047 Re-engagement message Tentative d’envoi free-form hors fenêtre 24h Utiliser un template approuvé
132000 Template parameter count mismatch Nombre de variables fournies différent du template approuvé Recharger la definition du template, mettre à jour le code
132001 Template name does not exist Nom mal orthographié, langue absente, template rejeté Vérifier dans Business Manager le statut et la langue exacte
131056 Pair rate limit reached Trop de messages envoyés au même destinataire en peu de temps Throttler par paire (numéro source, numéro destination)
4 API too many calls Throttling global de l’application Implementer un backoff exponentiel et lisser la charge
368 Temporarily blocked for policy violations Numéro suspendu suite a quality drop ou opt-in defaillant Patienter, améliorer la qualité, contacter le support Meta
190 Access token expired System User Token expire ou revoke Générer un nouveau token, idéalement non-expirant

Une bonne hygiène opérationnelle consiste a logger systématiquement le code, le sous-code et le message d’erreur tels quels (champ error.error_data.details), et a pre-catégoriser les erreurs en trois familles : transitoires (retry automatique avec backoff), permanentes par message (drop et alerte business), permanentes par compte (alerte ops, action manuelle requise).

Tutoriels de cette serie

Cet article principal donne la vue d’ensemble. Les tutoriels suivants traitent chacun une étape pratique de l’intégration, avec code complet et procédures pas a pas.

  1. Configurer Meta Cloud API gratuit sans BSP : créer le Business Portfolio, la WABA, ajouter le numéro, générer le System User Token.
  2. Templates WhatsApp : créer et faire approuver : structure d’un template, variables, boutons, parcours d’approbation.
  3. Webhooks WhatsApp avec Node.js et Express : implementation complète avec vérification de signature et tunnel HTTPS local.
  4. Chatbot WhatsApp avec menu interactif (boutons et listes) : messages interactifs, sessions, machine a états.
  5. Intégrer WhatsApp Business API a HubSpot ou Odoo : patterns CRM, idempotence, jointures par numéro.
  6. Pricing WhatsApp 2026 : suivre et optimiser le coût par conversation : tableau de bord, calcul anticipe, leviers d’optimisation.

FAQ

Quelle est la version actuelle de l’API Graph utilisée par WhatsApp Cloud API en 2026 ?

Meta a publié v25.0 en février 2026 ; v23.0 (mai 2025) et v24.0 (octobre 2025) restent également supportées en production. Meta maintient généralement les deux dernières versions actives pendant 2 ans avant deprecation. En production, on epingle explicitement la version dans l’URL plutôt que d’utiliser la version par défaut, pour éviter les bascules silencieuses.

L’API On-Premises fonctionne-t-elle encore ?

Non. Meta a annonce la deprecation le 27 octobre 2023 et arrete définitivement l’acheminement le 23 octobre 2025. Toute intégration encore basee sur l’On-Premises envoie dans le vide depuis cette date. La migration vers Cloud API est obligatoire.

Comment vérifier la signature d’un webhook WhatsApp ?

Calculer un HMAC-SHA256 sur le corps brut de la requête avec l’App Secret comme clé, puis comparer avec l’en-tête X-Hub-Signature-256 (après avoir retire le prefixe sha256=). La comparaison doit être constante en temps pour éviter les attaques par timing. Le corps brut doit être capture avant tout parsing JSON.

Quel est le délai de retry des webhooks Meta en cas d’échec ?

Meta retente la livraison selon une courbe d’exponential backoff pendant un maximum de 7 jours. Au-delà, le message est définitivement abandonne. Pour éviter les retries, il faut impérativement répondre 200 en moins de 5 secondes et traiter la logique métier en asynchrone via une file.

Quelle est la différence entre les catégories Marketing, Utility et Authentication ?

Marketing couvre tout contenu promotionnel ou de réactivation, et est facture au tarif le plus élevé. Utility couvre les notifications transactionnelles strictement non-promotionnelles, et est gratuit dans la fenêtre 24h ouverte par le client depuis juillet 2025. Authentication couvre les codes a usage unique avec un format strict impose par Meta. La catégorie est validée par le classifier Meta lors de l’approbation, pas par votre déclaration.

Comment a évolue le pricing WhatsApp depuis juillet 2025 ?

Meta a remplace la facturation par conversation 24h par une facturation par message template livre, le 1er juillet 2025. Chaque template Marketing, Utility (hors fenêtre 24h) ou Authentication est facture individuellement, avec des tarifs par pays et des remises par paliers de volume pour Utility et Authentication. Les réponses free-form dans la fenêtre 24h restent gratuites.

Combien de messages par jour peut-on envoyer ?

Historiquement, les comptes progressent par paliers : 250, 1k, 10k, 100k, illimite. Depuis octobre 2025, les limites s’appliquent au niveau du Business Portfolio, partagées entre tous les numéros qu’il contient. En 2026, Meta supprime progressivement les paliers 2k et 10k pour faire passer directement les comptes vérifiés a 100k par jour, avec un rollout etale entre Q1 et Q2 2026.

Faut-il passer par un BSP (Business Solution Provider) ?

Non. La Cloud API est accessible directement aux entreprises sans intermediaire, gratuitement, depuis le Meta for Developers. Un BSP apporte des services additionnels (interface conversationnelle, CRM intègre, support) mais n’est plus une obligation technique. Pour une équipe technique capable de gérer les webhooks et les templates, l’intégration directe a Meta est généralement plus economique et plus flexible.

Ressources officielles

Sponsoriser ce contenu

Cet emplacement est à vous

Position premium en fin d'article — c'est l'instant où les lecteurs sont le plus engagés. Réservez cet espace pour votre marque, votre formation ou votre offre.

Recevoir nos tarifs
Publicité