Aller au contenu
Wbiztool

API de messagerie

API de planification de messages WhatsApp

Planifiez l'envoi d'un texte, d'une image ou d'un document WhatsApp vers un numéro de téléphone ou un groupe à la date et à l'heure de votre choix. Utilisez-la pour les rappels de rendez-vous, les vœux d'anniversaire, les relances et les offres à durée limitée.

POSThttps://wbiztool.com/api/v1/schedule_msg/

Corps: JSON ou champs de formulaire

Le message attend dans votre file d'attente jusqu'à l'heure prévue, puis il est envoyé depuis votre numéro WhatsApp. La réponse vous fournit un msg_id que vous pouvez utiliser pour vérifier son statut ou l'annuler.

Exemple rapide#

curl -X POST https://wbiztool.com/api/v1/schedule_msg/ \
  -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",
    "msg": "Hi Aman, a reminder that your appointment is today at 11:30 AM.",
    "date": "24/12/2026",
    "time": "09:00",
    "timezone": "Asia/Kolkata"
  }'

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.

Planification

datestringobligatoire

Jour d'envoi du message, au format dd/mm/yyyy, par exemple 24/12/2026.

timestringobligatoire

Heure d'envoi du message, au format 24 heures HH:MM, par exemple 09:00 ou 18:45. N'incluez pas les secondes.

timezonestringfacultatif

Fuseau horaire dans lequel sont exprimés date et time. Si vous l'omettez, la valeur par défaut est IST (Inde). Consultez Fuseaux horaires.

Destinataire et message

phonestringObligatoire sauf si vous envoyez group_name

Le numéro WhatsApp du destinataire, chiffres uniquement. Les espaces, +, -, . et les parenthèses sont supprimés automatiquement. Envoyez le numéro soit avec son indicatif pays (919876543210), soit sans celui-ci (9876543210) accompagné de country_code.

group_namestringObligatoire sauf si vous envoyez phone

Nom d'un groupe WhatsApp dont votre numéro est membre. Il est trouvé de la même manière que dans Envoyer à un groupe. Envoyez phone ou group_name, jamais les deux.

country_codestringfacultatif

Indicatif téléphonique du pays sans +, par exemple 91 pour l'Inde ou 1 pour les États-Unis. Il est ajouté devant phone, sauf si le numéro commence déjà par celui-ci. Exception : avec 91, un numéro à 10 chiffres reçoit toujours le préfixe. Avec les autres indicatifs, envoyez les numéros locaux qui commencent par les mêmes chiffres avec l'indicatif pays déjà inclus. Ignoré pour les groupes.

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é au destinataire, par exemple invoice-4821.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 lorsque le message est envoyé ou échoue. Le contenu est le même que pour Envoyer un message.

Quand le message est envoyé#

  • Wbiztool convertit date, time et timezone en un instant unique et envoie le message dès que cet instant est passé, à condition que votre numéro WhatsApp soit connecté.
  • Une heure passée est acceptée. Le message est alors envoyé immédiatement, comme un envoi normal. Vérifiez bien le format de date (dd/mm/yyyy, jour en premier) pour ne pas envoyer un message plusieurs mois trop tôt.
  • Si votre numéro est déconnecté à l'heure prévue, le message attend et part dès que le numéro se reconnecte, même si c'est bien plus tard que prévu. Cet endpoint n'a pas d'expiration : annulez le message s'il n'est plus pertinent. Un message qui attend toujours sur un numéro déconnecté ou supprimé 90 jours après son heure prévue est supprimé.
  • Tant qu'il n'est pas envoyé, le message a le statut 0 (Created) et peut être annulé. Pendant cette attente, il est également déduit de vos crédits restants.

Fuseaux horaires#

timezone accepte soit un nom de fuseau horaire, soit l'une des abréviations ci-dessous.

Noms de fuseaux horaires, comme Asia/Kolkata, America/New_York, Europe/London ou Australia/Sydney. Tout nom de la base de données de fuseaux horaires IANA fonctionne. C'est l'option la plus fiable. Consultez la Référence des fuseaux horaires pour en obtenir la liste.

Les abréviations doivent être écrites en majuscules. Chacune correspond à une région, et l'heure d'été de cette région est appliquée automatiquement :

AbréviationInterprétée comme
ISTAsia/Kolkata
UTCUTC
GMTGMT
ESTUS/Eastern
CSTUS/Central
MSTUS/Mountain
PSTUS/Pacific
CET, CESTEurope/Paris
EET, EESTEurope/Athens
JSTAsia/Tokyo
AEST, AEDTAustralia/Sydney

Par exemple, EST en juillet correspond à l'heure d'été de New York (UTC−4), et non à un décalage fixe de UTC−5.

Planifier un message pour un groupe#

curl -X POST https://wbiztool.com/api/v1/schedule_msg/ \
  -H "Content-Type: application/json" \
  -d '{
    "client_id": 12345,
    "api_key": "YOUR_API_KEY",
    "whatsapp_client": 678,
    "msg_type": 0,
    "group_name": "Sales Team Mumbai",
    "msg": "Team meeting starts in 15 minutes.",
    "date": "24/12/2026",
    "time": "14:45",
    "timezone": "Asia/Kolkata"
  }'

Réponse#

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

{
  "msg_id": 9817263,
  "message": "Created",
  "status": 1
}
ChampTypeDescription
statusinteger1 si le message a été planifié, 0 si la requête a échoué.
messagestringCreated en cas de succès, sinon l'erreur.
msg_idintegerID du message planifié. Enregistrez-le pour vérifier son statut ou l'annuler plus tard. Présent uniquement en cas de succès.

La réponse ne rappelle ni l'heure prévue ni le fuseau horaire : conservez donc une trace de ce que vous avez envoyé.

Erreurs#

La plupart des erreurs renvoient le code HTTP 200 avec status à 0 : vérifiez donc toujours status dans le corps.

{ "message": "Scheduled date & time is not in valid format", "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.
Either phone or group_name parameter is requiredAjoutez phone ou group_name.
Please provide either phone OR group_name, not bothSupprimez l'un des deux.
Invalid phone numberphone ne doit contenir que des chiffres (de 6 à 17), éventuellement précédés de +.
Invalid Contact Number "…"Une fois l'indicatif pays ajouté, le numéro doit comporter de 6 à 15 chiffres.
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.
Scheduled date & time is not in valid formatdate ou time est absent, ou timezone est une chaîne vide.
Not enough creditsVotre forfait n'a plus de messages disponibles.
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#

  • Construisez la date avec soin : en Python, utilisez strftime("%d/%m/%Y") et strftime("%H:%M"). En JavaScript, formatez la date et l'heure dans le fuseau horaire que vous envoyez dans timezone, et non dans l'heure locale de votre serveur :

    const tz = "Asia/Kolkata"; // d is the Date to send at
    const date = new Intl.DateTimeFormat("en-GB", { timeZone: tz, day: "2-digit", month: "2-digit", year: "numeric" }).format(d); // "24/12/2026"
    const time = new Intl.DateTimeFormat("en-GB", { timeZone: tz, hour: "2-digit", minute: "2-digit", hourCycle: "h23" }).format(d); // "09:00"
  • Vérifiez l'heure : planifiez un message de test cinq minutes plus tard et vérifiez qu'il arrive au moment prévu.

  • Changement de programme : pour replanifier, annulez le message et planifiez-en un nouveau.

  • N'utilisez pas les clients officiels pour planifier pour le moment : schedule_message en Python envoie la date au format YYYY-MM-DD (la réponse est {}), et scheduleMessage en Node envoie schedule_time, que cet endpoint ne lit pas. Appelez l'endpoint directement, comme indiqué ci-dessus.

  • Messages récurrents : pour les messages qui se répètent, comme les rappels de paiement mensuels, consultez Créer un rappel.