Meta Tech Provider

Envoyer et recevoir des messages WhatsApp avec Python

La réception est une route de votre framework web qui répond au GET de vérification de Meta et accepte les POST. L’envoi est une requête HTTPS vers la Cloud API avec le phone number id et le token du numéro. Aucun SDK de notre part, et rien à installer.

2 handlers

Un GET pour la vérification de Meta et un POST pour les événements. C’est la partie réception.

24 hours

Fenêtre suivant un message client pendant laquelle l’envoi de texte libre est possible.

131047

Erreur renvoyée lorsque vous envoyez du texte libre en dehors de cette fenêtre.

Comment recevoir des messages avec Python ?

Avec deux handlers sur une même route, dans le framework que vous utilisez déjà.

Le handler GET répond à la vérification de Meta. Il lit hub.mode, hub.verify_token et hub.challenge dans la chaîne de requête, vérifie le token avec le vôtre et renvoie le challenge dans le corps brut. Renvoyer du JSON ici est l’erreur la plus courante, et l’échec passe silencieusement.

Le handler POST reçoit les événements. Renvoyez rapidement 200 et effectuez le traitement ensuite, car Meta considère une réponse lente comme un échec et réessaie. Vous risquez donc de traiter le même message deux fois. Mettez-le en file ou confiez-le à une tâche en arrière-plan au lieu de le traiter en ligne.

Les messages arrivent avec un identifiant wamid. Les dédupliquer sur cet identifiant est utile dès le départ, car les nouvelles tentatives sont normales, et non exceptionnelles.

Comment envoyer ?

Un seul POST vers l’endpoint messages de la Cloud API correspondant au phone number id, avec un bearer token.

Les deux valeurs proviennent de la connexion : le dashboard les affiche, et get_api_credentials les renvoie si vous préférez qu’un assistant les récupère. Rien dans cet appel ne nous est spécifique : n’importe quelle bibliothèque HTTP convient, et la requête est exactement celle de la documentation de Meta.

Ce qui change selon le moment, c’est le corps de la requête. Dans les 24 heures suivant le dernier message du client, vous envoyez un objet text. Au-delà, vous envoyez un objet template indiquant un template approuvé et sa langue. Un client qui ne connaît que la première structure fonctionne parfaitement pendant les tests, puis échoue au premier message reçu pendant la nuit avec l’erreur 131047.

Que faut-il à un handler de production en plus ?

Trois éléments faciles à négliger et coûteux à ajouter plus tard.

Dédupliquez sur l’identifiant du message, car Meta réessaie. Vérifiez la signature de la requête si votre endpoint est public, sinon toute personne qui connaît votre URL peut y publier des données. Enfin, tenez compte du temps écoulé depuis le dernier message du contact afin que le chemin d’envoi choisisse text ou template sans intervention humaine.

Aucun framework ni bibliothèque n’est nécessaire. Il s’agit d’un ensemble, d’un contrôle et d’une comparaison. Les mettre en place avant le premier client fait la différence entre une intégration qui fonctionne discrètement et une autre qui vous alerte.

Erreurs courantes

  • Renvoyer du JSON depuis le GET de vérification au lieu de la valeur brute de challenge.
  • Traiter la requête avant de renvoyer 200. Meta réessaie les réponses lentes et vous traitez le message deux fois.
  • Envoyer du texte libre sans vérifier la fenêtre. L’erreur 131047 est renvoyée, donnant l’impression que rien ne s’est passé.
Faire cela avec EasyCoexistence

Connectez le numéro sur easycoexistence.com, définissez votre route comme destination du webhook, 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 les 7 premiers jours gratuits.

Questions fréquemment posées

Existe-t-il un SDK Python ?

Pas de notre part, et vous n’en avez pas besoin. L’API est celle de Meta, documentée par Meta et accessible avec n’importe quelle bibliothèque HTTP.

Quel framework dois-je utiliser ?

N’importe lequel. Il suffit d’une route qui répond à un GET et accepte un POST, ce que font tous les frameworks web Python.

Comment éviter de traiter un message deux fois ?

Dédupliquez sur l’identifiant wamid du payload. Meta réessaie par conception, c’est donc un comportement attendu, et non un cas exceptionnel.

L’équipe peut-elle toujours utiliser le téléphone ?

Oui. Coexistence permet à l’application WhatsApp Business de fonctionner sur le même numéro, et votre handler reçoit ce que l’équipe envoie sous forme d’événement echo.

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 gratuit

Vérifié le

Envoyer des messages WhatsApp avec Python