SDK Python

Envoyer des SMS, WhatsApp et OTP en Python avec le SDK officiel

envoisms est le SDK Python officiel d'EnvoiSMS.ma. pip install envoisms, un EnvoiSMSClient créé avec votre clé API, et vous envoyez SMS, messages WhatsApp et codes à usage unique depuis un script, une vue Django ou un service FastAPI.

send.py (SDK envoisms, Python)
# pip install envoisms import os from envoisms import EnvoiSMSClient, EnvoiSMSError client = EnvoiSMSClient(api_key=os.getenv("ENVOISMS_API_KEY"), max_retries=3, timeout=20) try: response = client.send( to="+212600000000", message="Votre commande #1042 est confirmée.", from_sender="MonBusiness", # Sender ID validé, ou omis ) # Idempotency-Key ajouté : un nouvel essai ne facture jamais deux fois print(f"Message ID: {response['id']}") except EnvoiSMSError as e: print(f"Échec ({e.status_code} {e.code}): {e}") # OTP géré : envoi puis vérification otp = client.send_otp(to="+212600000000", brand="MonBusiness", code_length=6, expiry=600) check = client.check_otp(session_id=otp["session_id"], code="492018") print(check.get("verified"))
● Routes locales MarocIAM • Inwi • Orange
https://api.envoisms.ma/v1
Routes locales
Maroc Telecom (IAM) • Inwi • Orange
Accusés réels DLR
Signatures HMAC-SHA256
Tarifs clairs en MAD
dès 0,60 MAD/SMS • 5 MAD offerts

Installation et premier SMS

pip install envoisms, puis client = EnvoiSMSClient(api_key=os.getenv("ENVOISMS_API_KEY")). client.send(to="+212600000000", message="…", from_sender="MonBusiness") renvoie l'identifiant du message, que vous suivez avec get_message() et retrouvez dans vos webhooks.

  • from envoisms import EnvoiSMSClient
  • from_sender : votre Sender ID validé, ou omis pour l'expéditeur par défaut
  • send_bulk(messages=[...], from_sender=...) pour un envoi groupé ; list_messages(limit=50, offset=0) pour les derniers envois

Envois rejouables et erreurs

Chaque send() et send_bulk() porte un Idempotency-Key — généré, ou passez idempotency_key= — : un nouvel essai après un timeout ne facture jamais le même message deux fois. Le client rejoue les réponses 5xx et les erreurs réseau jusqu'à max_retries fois (2 par défaut), avec un délai exponentiel, puis lève EnvoiSMSError avec les attributs status_code et code.

  • EnvoiSMSClient(api_key=..., max_retries=3, timeout=20)
  • except EnvoiSMSError as e: e.status_code, e.code

SMS ou WhatsApp, et la cascade

Le SMS par défaut : il atteint tous les mobiles marocains sans autre configuration que la clé API. channel="whatsapp" envoie depuis votre propre numéro WhatsApp Business connecté — 403 WHATSAPP_NOT_CONNECTED sans numéro, 400 OUT_OF_24H_WINDOW pour un texte libre hors de la fenêtre de 24 heures, rien de facturé dans les deux cas. Hors de la fenêtre, passez un template approuvé. cascade=True repasse en SMS si le numéro est injoignable ou n'a pas WhatsApp.

  • template={"name": "order_shipped", "language": "fr", "variables": ["89240"]}
  • Laissez channel sur "sms" pour tout texte ordinaire à un client

OTP, webhooks et compte

client.send_otp(to=..., brand="MonBusiness", code_length=6, expiry=600) renvoie un session_id ; client.check_otp(session_id=..., code=...) renvoie verified ; get_otp_session() lit une session sans consommer de tentative. EnvoiSMSClient.verify_webhook_signature(raw_body=..., signature_header=..., secret=...) vérifie l'en-tête X-EnvoiSMS-Signature sur le corps brut de la requête.

  • send_otp(..., channel="whatsapp") : code WhatsApp via l'expéditeur partagé, sans connexion
  • get_balance(), list_packs(), create_topup(amount_mad=200, payment_method="stripe")
  • analytics(days=30), create_api_key(), create_optout()

Tout savoir sur SDK Python.

Le SDK fonctionne-t-il avec Django, Flask et FastAPI ?
Oui. Le client est un objet Python ordinaire : appelez-le depuis une vue, une tâche ou un script. Pour les webhooks, passez le corps brut de la requête (request.body sous Django) à verify_webhook_signature() avant de faire confiance à la charge utile.
Comment envoyer un code OTP WhatsApp depuis Python ?
client.send_otp(to=..., brand=..., channel="whatsapp"). Le code passe par l'expéditeur partagé d'EnvoiSMS : vous n'avez pas à connecter votre propre numéro WhatsApp.
Comment tester sans envoyer de vrais SMS ?
Créez le client avec une clé sandbox env_test_ : tout le parcours d'envoi est rejoué — validation, tarification, webhooks — sans rien livrer ni débiter.

Prêt à intégrer SDK Python ?

Créez votre compte en moins de 2 minutes. Bénéficiez immédiatement de 5 MAD de crédit gratuit pour tester l'API.