Aller au contenu

Envoyer un SMS instantané

sending_type: "immediate" (le défaut) met le SMS en file pour expédition immédiate vers l’opérateur. La forme du corps est la même que vous envoyiez à un numéro ou à mille — seule la taille du tableau to change.

Fenêtre de terminal
curl $BASE_URL/api/v1/lisoloo/sms-api/send \
-X POST \
-H "app-key: $LISOLOO_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"to": ["+243998857000"],
"message": "Votre OTP est 482194. Valable 5 minutes.",
"sender_id": "MYAPP"
}'

to est toujours un tableau. Passez jusqu’à 1 000 numéros dans un seul appel. Chaque numéro est facturé indépendamment contre votre unit_price.

Fenêtre de terminal
curl $BASE_URL/api/v1/lisoloo/sms-api/send \
-X POST \
-H "app-key: $LISOLOO_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"to": [
"+243998857000",
"+243998857001",
"+243998857002"
],
"message": "Le cours est annulé aujourd''hui. À la semaine prochaine.",
"sender_id": "SCHOOL"
}'

La réponse inclut total_recipients et total_messages :

{
"status_code": 201,
"success": true,
"data": {
"message_id": "507f1f77bcf86cd799439011",
"total_recipients": 3,
"total_messages": 3,
"total_cost": 0.06,
"currency": "USD",
"status": "pending"
}
}

Pour les campagnes plus grandes, divisez en lots ≤ 1 000, espacés d’au moins 1 seconde pour rester sous la limite de 60/min sur POST /send. Un envoi chunké simple :

def chunks(seq, size):
for i in range(0, len(seq), size):
yield seq[i:i + size]
for batch in chunks(all_recipients, 1000):
requests.post(SEND_URL, headers=HEADERS, json={
"to": batch, "message": MESSAGE, "sender_id": SENDER,
}).raise_for_status()
time.sleep(1.1)

Chaque lot renvoie son propre message_id. Suivez-les tous si vous avez besoin de reporting transverse aux lots.

Si vous voulez que les accusés de livraison de ce lot spécifique aillent vers un endpoint différent du webhook général, définissez callback_url sur la requête :

{
"to": ["+243998857000"],
"message": "Votre livraison est en route.",
"sender_id": "SHOP",
"callback_url": "https://my-shop.example.com/lisoloo/webhook"
}

Le callback_url est par-message ; il ne remplace pas le webhook général (les deux se déclenchent si les deux sont définis). Voir Présentation des webhooks.

sender_id est la chaîne alphanumérique d’origine que l’opérateur affiche sur le combiné du destinataire. Contraintes :

  • 3–11 caractères (imposé par l’opérateur ; les valeurs plus longues sont tronquées par le réseau).
  • A–Z, 0–9. Pas d’espaces, pas de ponctuation.
  • Pré-enregistré avec votre compte Bloonio. Les IDs non enregistrés peuvent être réécrits par l’opérateur vers un code court générique.

Si omis, la passerelle utilise votre défaut marchand (défini dans le tableau de bord).