Aller au contenu

Votre premier SMS

Cette page est conçue pour être lue une fois. Si vous avez déjà parcouru le Démarrage rapide, passez à Envoyer un SMS instantané pour les patterns multi-destinataires.

POST /api/v1/lisoloo/sms-api/send HTTP/1.1
Host: {BASE_URL}
app-key: sk_test_kqz3pX9aB7nT2vR4wY8eD1fH6jM5oU0i
Content-Type: application/json
{
"to": ["+243998857000"],
"message": "Bonjour de Lisoloo !"
}

{BASE_URL} est l’hôte sandbox depuis votre portail développeur → Lisoloo → Developer → Clés API.

Deux champs requis :

  • to est toujours un tableau — même pour un seul destinataire. Chaque entrée doit être au format E.164 (+CCNNNNNN…). La passerelle rejettera la requête avec 1104 INVALID_PHONE_NUMBER si une entrée échoue à la regex ^\+?\d{1,15}$.
  • message est le corps du SMS. UTF-8 simple. La longueur détermine combien de segments SMS seront facturés — voir Limites de caractères.

Tout le reste (sender_id, sending_type, callback_url, scheduled_dates, recurring_schedule) est optionnel. Sans aucun de ces champs, la passerelle traite la requête comme sending_type: "immediate" et la met en file pour expédition immédiate.

{
"status_code": 201,
"data": {
"message_id": "507f1f77bcf86cd799439011",
"total_recipients": 1,
"total_messages": 1,
"total_cost": 0.02,
"currency": "USD",
"status": "pending",
"sending_type": "immediate"
}
}

Ce que chaque champ signifie :

ChampTypeNotes
status_codeintReflète le statut HTTP — 201 à la mise en file réussie.
data.message_idstringL’ID canonique. À utiliser sur GET /status/{message_id} et pour corréler les événements webhook.
data.total_recipientsintNombre de numéros uniques dans to.
data.total_messagesinttotal_recipients × segments_per_message. Voir Limites de caractères.
data.total_costfloatCoût pré-TVA dans currency. Déjà déduit de votre solde.
data.currencystringCode ISO 4217 à trois lettres.
data.statusstringStatut initial. pending pour immédiat, scheduled pour scheduled/recurring. Voir Cycle de vie.
data.sending_typestringRenvoie le sending_type de la requête (immediate, scheduled ou recurring).
  1. La passerelle a reçu la requête et validé l’en-tête app-key.
  2. Elle a vérifié votre solde — available_smstotal_messages.
  3. Elle a mis en file un job de livraison par destinataire contre le connecteur opérateur.
  4. Elle a retourné 201 immédiatement. Le handoff réel vers l’opérateur se fait de façon asynchrone ; le statut transite par pending → processing → sent → delivered au cours des prochaines secondes.
  5. Si un callback_url ou un webhook_url au niveau marchand est configuré, la passerelle POST un accusé à chaque transition.
SymptômeCause probableCorrectif
401 Missing or invalid app-keyEn-tête absent, mal tapé ou mauvais environnement.Vérifiez le nom de l’en-tête (app-key, avec trait d’union, en minuscules) et que le préfixe correspond à l’URL de base.
400 avec 1104 INVALID_PHONE_NUMBERUne des entrées de to n’est pas au format E.164.Validez chaque entrée contre ^\+?\d{1,15}$ avant envoi.
400 avec 1109 MISSING_REQUIRED_FIELDto ou message manque ou est vide.Les deux champs sont obligatoires ; un tableau vide ne compte pas.
402 avec 1402 INSUFFICIENT_BALANCEVotre compte n’a pas assez de crédit.Rechargez via le tableau de bord Bloonio.
429 avec 1301 RATE_LIMIT_EXCEEDEDPlus que le plafond par minute.Respectez Retry-After. Voir Limites de débit.

La liste complète des codes est dans le catalogue d’erreurs.