Aller au contenu
Wbiztool

API de messagerie

API d'envoi à plusieurs numéros

Envoyez le même message WhatsApp à plusieurs numéros de téléphone et groupes en une seule requête. Utilisez-la pour de petites diffusions comme des newsletters, des offres et des annonces.

POSThttps://wbiztool.com/api/v1/send_msg/multi/

Corps: JSON ou champs de formulaire

Wbiztool crée un message par destinataire et renvoie un msg_id pour chacun : vous pouvez ainsi vérifier leur statut individuellement.

Exemple rapide#

curl -X POST https://wbiztool.com/api/v1/send_msg/multi/ \
  -H "Content-Type: application/json" \
  -d '{
    "client_id": 12345,
    "api_key": "YOUR_API_KEY",
    "whatsapp_client": 678,
    "msg_type": 0,
    "country_code": "91",
    "phone": "9876543210,9812345670,Sales Team Mumbai",
    "msg": "Our Diwali sale starts tomorrow. Get 20% off on all orders!"
  }'

Remplacez 12345, YOUR_API_KEY et 678 par vos propres valeurs. Consultez Authentification pour savoir où les trouver.

Paramètres de la requête#

Authentification

client_idintegerobligatoire

Votre ID client API, dans Paramètres → Clés API.

api_keystringobligatoire

Votre clé API, sur cette même page.

whatsapp_clientintegerobligatoire

ID du numéro WhatsApp depuis lequel envoyer, dans les paramètres WhatsApp. Contrairement à l'API d'envoi de messages, cet endpoint ne choisit jamais un numéro à votre place.

Destinataires et message

phonestringobligatoire

Numéros de téléphone et noms de groupe dans une seule chaîne séparée par des virgules, par exemple 9876543210,9812345670,Sales Team Mumbai. N'envoyez pas de tableau JSON. Consultez Comment les destinataires sont interprétés.

country_codestringfacultatif

Indicatif téléphonique du pays sans +, par exemple 91. Il est ajouté devant chaque numéro de téléphone, sauf si le numéro commence déjà par celui-ci. En JSON, envoyez-le sous forme de chaîne ("91"), et non de nombre. Si vous envoyez un nombre, chaque numéro de téléphone de la liste est traité comme un nom de groupe (is_group: true), et ces messages échouent.

msg_typeintegerfacultatif

0 texte (par défaut), 1 image, 2 fichier ou document.

msgstringObligatoire lorsque msg_type vaut 0

Texte du message. Pour les images et les fichiers, il s'agit de la légende, qui peut être vide. La mise en forme WhatsApp fonctionne : *bold*, _italic_, ~strikethrough~. message est accepté comme alias.

Images et fichiers

img_urlstringObligatoire lorsque msg_type vaut 1

URL publique http ou https de l'image.

file_urlstringObligatoire lorsque msg_type vaut 2

URL publique http ou https à partir de laquelle le fichier peut être téléchargé directement.

file_namestringfacultatif

Nom du fichier affiché aux destinataires, par exemple price-list.pdf. Il est envoyé en minuscules, les caractères comme & : ? * $ ; sont remplacés par _, et il est tronqué à 150 caractères. Si vous l'omettez, le nom est tiré de l'URL.

Options d'envoi

webhookstringfacultatif

URL qui reçoit un POST pour chaque message lorsqu'il est envoyé ou échoue. Le contenu est le même que pour Envoyer un message.

Image depuis une URLcURL
curl -X POST https://wbiztool.com/api/v1/send_msg/multi/ \
  -H "Content-Type: application/json" \
  -d '{
    "client_id": 12345,
    "api_key": "YOUR_API_KEY",
    "whatsapp_client": 678,
    "msg_type": 1,
    "country_code": "91",
    "phone": "9876543210,9812345670",
    "img_url": "https://example.com/offers/diwali-sale.jpg",
    "msg": "Our Diwali sale starts tomorrow."
  }'

Comment les destinataires sont interprétés#

Wbiztool découpe phone au niveau des virgules, supprime les espaces autour de chaque élément, puis détermine la nature de chaque élément :

  • Uniquement des chiffres (un + ou des zéros en tête sont acceptés) : traité comme un numéro de téléphone. country_code est ajouté sauf si le numéro commence déjà par celui-ci ; le numéro doit ensuite comporter de 6 à 15 chiffres.
  • Tout le reste : traité comme un nom de groupe WhatsApp, trouvé de la même manière que dans Envoyer à un groupe.
  • Un groupe dont le nom ne contient que des chiffres (par exemple 2024) est traité comme un numéro de téléphone, et les noms de groupe contenant des virgules ne peuvent pas être utilisés avec cet endpoint. Utilisez Envoyer à un groupe dans ces cas.

Autres points à connaître :

  • Les numéros trop courts ou trop longs après l'ajout de l'indicatif pays sont ignorés sans avertissement. Ils n'apparaissent pas dans la réponse et ne reçoivent pas de msg_id.
  • Les doublons ne sont pas supprimés. Un numéro listé deux fois reçoit deux messages.
  • Si un numéro local commence par les mêmes chiffres que country_code (par exemple 9123456780 avec country_code 91), l'indicatif n'est pas ajouté. Envoyez ces numéros avec l'indicatif pays déjà inclus (919123456780).
  • Les URL des images et des fichiers ne sont pas vérifiées lorsque vous appelez l'API. Elles sont téléchargées au moment de l'envoi de chaque message : un lien cassé fait donc échouer les messages plus tard, et non la requête. Les mêmes règles d'envoi que pour l'envoi de messages s'appliquent : les images de plus de 16 Mo et les vidéos de plus de 64 Mo échouent, l'audio WAV et OGG n'est pas pris en charge, et .pdf est ajouté aux fichiers (msg_type 2) sans extension prise en charge. Consultez Envoyer des images et des fichiers.

Crédits#

L'ensemble du lot est comparé à vos crédits restants avant toute création. Chaque élément non vide de phone est compté, y compris ceux qui sont ignorés par la suite. Si ce nombre dépasse vos crédits restants, aucun message n'est créé et vous obtenez :

{
  "message": "Not enough credits: 120 messages requested, 85 credits remaining",
  "status": 0
}

Les messages en file d'attente mais pas encore envoyés sont également déduits de vos crédits restants. Divisez les longues listes en requêtes plus petites ou rechargez votre forfait. Pour les grandes campagnes, téléversez plutôt un tableur depuis la page Campagnes.

Réponse#

Une requête réussie renvoie le code HTTP 200 :

{
  "msg_ids": [9817263, 9817264, 9817265],
  "messages": [
    { "msg_id": 9817263, "contact": "919876543210", "is_group": false },
    { "msg_id": 9817264, "contact": "919812345670", "is_group": false },
    { "msg_id": 9817265, "contact": "Sales Team Mumbai", "is_group": true }
  ],
  "message": "Successfully created 3 messages",
  "status": 1
}
ChampTypeDescription
statusinteger1 si au moins un message a été mis en file d'attente, 0 sinon.
messagestringSuccessfully created N messages en cas de succès, sinon l'erreur.
msg_idsarray of integersID des messages en file d'attente, dans l'ordre de phone. Présent uniquement en cas de succès.
messagesarrayUn objet par message en file d'attente. Présent uniquement en cas de succès.
messages[].msg_idintegerID du message.
messages[].contactstringLe numéro de téléphone avec l'indicatif pays appliqué, ou le nom du groupe.
messages[].is_groupbooleantrue si l'élément a été traité comme un nom de groupe.

Comparez messages avec la liste que vous avez envoyée pour repérer les numéros ignorés, et vérifiez que is_group vaut false pour chaque élément censé être un numéro de téléphone.

Erreurs#

La plupart des erreurs renvoient le code HTTP 200 avec status à 0 : vérifiez donc toujours status dans le corps. Sauf pour les erreurs HTTP 400 et 403, les réponses (y compris celles qui réussissent) sont du JSON envoyé avec Content-Type: text/html : analysez donc le corps vous-même au lieu de compter sur la détection automatique du JSON (par exemple dans les outils no-code) :

{ "message": "Invalid whatsapp client", "status": 0 }
MessageComment corriger
Auth ErrorEnvoyez à la fois client_id et api_key.
Invalid Client IdEnvoyez client_id sous forme de nombre. Renvoyé avec le code HTTP 403.
Auth Error: invalid api keyVérifiez que la clé existe, n'a pas été supprimée et appartient à ce client_id. Renvoyé avec le code HTTP 400.
Msg cant be nullLes messages texte (msg_type 0) nécessitent msg.
Image Url Can't be nullPour msg_type 1, envoyez img_url.
File Url Can't be nullPour msg_type 2, envoyez file_url.
Not enough credits: … messages requested, … credits remainingEnvoyez moins de destinataires ou ajoutez des crédits. Consultez Crédits.
Invalid whatsapp clientCet ID whatsapp_client ne fait pas partie de votre espace de travail.
No valid contacts foundTous les éléments de phone étaient vides ou ont été ignorés. Vérifiez que les numéros comportent de 6 à 15 chiffres avec l'indicatif pays.
Demo Account can not access apisUtilisez un compte standard.
Invalid JSON format: …Le corps JSON n'est pas valide, ou vous avez envoyé des champs de formulaire sans client_id.

Conseils#

  • Envoyez phone sous forme de chaîne : joignez votre liste avec des virgules. Un tableau JSON renvoie {}.
  • N'utilisez pas pour l'instant send_bulk_messages du client Python : il envoie la liste sous le nom phones, que cet endpoint ignore. Appelez directement l'endpoint comme dans les exemples ci-dessus.
  • Suivez chaque message : enregistrez chaque msg_id de messages, ou transmettez un webhook pour être notifié de l'envoi ou de l'échec de chacun.
  • Gardez votre numéro connecté : chaque message est envoyé depuis votre numéro WhatsApp, qui doit donc rester connecté dans les paramètres WhatsApp jusqu'à ce que tout le lot soit parti.
  • Texte différent pour chaque personne : cet endpoint envoie le même msg à tout le monde. Appelez Envoyer un message une fois par destinataire pour personnaliser chaque message.