Un seul endpoint pour le SMS et WhatsApp
Vous intégrez déjà le SMS ? WhatsApp est le même appel avec un champ de plus : POST https://api.envoisms.ma/v1/messages, en-tête Authorization: Bearer <clé API>, et channel: "whatsapp". Le message part de votre propre numéro WhatsApp Business, connecté dans le tableau de bord. Sans numéro connecté, l'API répond 403 WHATSAPP_NOT_CONNECTED et rien n'est facturé.
- Même paramètre channel dans les SDK officiels Node.js, PHP, Python et Go
- Un en-tête Idempotency-Key rend chaque envoi rejouable : un nouvel essai après un timeout ne facture jamais deux fois
- Erreurs JSON avec un code stable (error.code) sur lequel brancher votre logique
Templates Meta et fenêtre de 24 heures
Un template approuvé par Meta peut ouvrir une conversation à tout moment : il est exempté de la fenêtre de service et facturé selon la catégorie enregistrée sur votre compte. Un message libre (texte, média, liste…) n'est accepté que si le contact vous a écrit sur WhatsApp dans les 24 dernières heures ; sinon l'API répond 400 OUT_OF_24H_WINDOW avant tout débit.
- template: { name, language, components } pour démarrer une conversation
- Réponse 400 OUT_OF_24H_WINDOW avec window_expired et window_expires_at
- Les réactions ne sont pas facturées
Messages riches : médias, listes, boutons
Le même endpoint transporte tous les types de messages WhatsApp : texte, médias par identifiant ou par lien, messages interactifs (liste, boutons, flow, bouton d'URL, demande de localisation), réactions, cartes de contact, localisations et stickers, avec un contexte de réponse pour citer le message du client.
- interactive : list, button, flow, cta_url, location_request_message
- Médias par id (déjà téléversé) ou par lien
- Contexte de réponse sur n'importe quel type de message
Conversations, webhooks et codes OTP
GET /v1/conversations liste vos fils de discussion avec l'heure d'expiration de leur fenêtre de 24 heures, et POST /v1/messages/typing affiche un indicateur de saisie pendant que vous préparez la réponse. Les statuts de vos messages arrivent sur vos webhooks, signés HMAC-SHA256 dans l'en-tête X-EnvoiSMS-Signature-256. Pour un code à usage unique sur WhatsApp, POST /v1/verify/send avec channel whatsapp passe par l'expéditeur partagé d'EnvoiSMS : aucun numéro à connecter.
- Événements message.sent, message.delivered, message.failed, message.undeliverable
- Signature t=<horodatage>,v1=<hex> : rejetez toute livraison de plus de 5 minutes
- Clés sandbox env_test_ : tout le parcours simulé, rien livré ni débité