Envoyer et recevoir des messages WhatsApp avec Node.js
La réception se fait via une route qui répond au GET de vérification de Meta et accepte les POST. L’envoi utilise un appel fetch vers la Cloud API, avec le phone number id et le token du numéro. Nous ne fournissons aucun SDK et rien n’est à installer.
Un GET pour la vérification de Meta et un POST pour les événements.
Fenêtre suivant le message d’un client pendant laquelle le texte libre est autorisé.
Erreur renvoyée lorsque vous envoyez du texte libre hors de cette fenêtre.
Comment recevoir des messages dans Node ?
Une route avec deux méthodes, dans Express, Fastify, un gestionnaire de route Next ou un serveur classique.
Le GET répond à la vérification de Meta : lisez hub.mode, hub.verify_token et hub.challenge dans la requête, comparez le token au vôtre et renvoyez le challenge en texte brut. Le renvoyer en JSON est l’erreur habituelle : vous obtenez un endpoint qui ne reçoit jamais rien tout en semblant correct.
Le POST reçoit les événements. Répondez immédiatement avec 200, puis traitez-les. Meta réessaie toute requête lente, et un handler qui travaille avant de répondre verra le même message plusieurs fois. En serverless notamment, répondre d’abord puis placer le travail en file d’attente évite qu’un démarrage à froid ne crée un doublon.
Comment envoyer ?
Effectuez un fetch vers l’endpoint messages de la Cloud API associé au phone number id, avec le token dans un en-tête bearer.
Rien n’est spécifique à notre service : la requête correspond donc exactement à la documentation de Meta, sans wrapper à apprendre ni dépendance imposée. Les deux valeurs se trouvent dans le dashboard, et get_api_credentials les renvoie via le connecteur MCP si un assistant configure l’intégration.
Le corps dépend du délai. Dans les 24 heures suivant le dernier message entrant du client, envoyez un objet text. Au-delà, envoyez un objet template avec un nom de template et une langue approuvés. Un code qui envoie uniquement du texte passe tous les tests, puis échoue au premier message reçu pendant la nuit.
Qu’est-ce qui change en serverless ?
Deux choses, toutes deux liées au fait que la fonction peut se terminer avant le travail.
Renvoyer 200 puis continuer le traitement ne fonctionne pas avec une fonction qui se fige dès qu’elle répond. Utilisez le mécanisme de votre plateforme qui maintient le travail actif après la réponse, ou placez le payload dans une file d’attente et laissez une autre fonction le traiter. Meta a seulement besoin d’un accusé de réception rapide, pas du travail terminé.
Les démarrages à froid rendent aussi les réponses lentes plus probables, ce qui entraîne davantage de nouvelles tentatives et de doublons. Dédupliquer avec l’identifiant de message wamid n’est pas facultatif dans cette architecture : c’est ce qui la rend fiable.
Erreurs courantes
- Renvoyer le challenge en JSON plutôt que dans le corps brut.
- Effectuer le travail avant de répondre 200. En serverless, la fonction peut se figer dès qu’elle répond.
- Ne pas dédupliquer. Meta réessaie par conception et les doublons sont normaux, pas exceptionnels.
Connectez le numéro sur easycoexistence.com, définissez la destination du webhook sur votre route, puis récupérez le phone number id et le token dans le dashboard. À partir de US$ 9 par numéro et par mois, jusqu’à US$ 2 selon le volume, avec 7 jours gratuits.
Questions fréquemment posées
Ai-je besoin d’une bibliothèque ?
Non. Une route et un fetch suffisent, et l’appel correspond exactement à la documentation de Meta.
Cela fonctionne-t-il sur Vercel ou Lambda ?
Oui, avec la contrainte habituelle du serverless : accusez réception d’abord, puis traitez via une file d’attente ou un mécanisme en arrière-plan, plutôt qu’en ligne.
Comment vérifier que la requête vient de Meta ?
Vérifiez l’en-tête de signature avec le secret de votre application. Faites-le dès que l’endpoint est public.
Puis-je utiliser TypeScript ?
Oui. Nous n’imposons rien à typer, puisque le payload appartient à Meta et est documenté par Meta.
Poursuivre la lecture
Prêt à commencer ?
Configurez WhatsApp Coexistence en quelques minutes, pas en quelques mois. L’application continue de fonctionner sur le téléphone.
Commencer l'essai gratuitVérifié le