Envoyer et recevoir des messages
Ce guide vous emmène d’une clé API à un flux de messages bidirectionnel qui fonctionne : envoyez un message sortant, suivez sa livraison et recevez la réponse sur votre propre serveur. L’exemple utilise le SMS — le même schéma en trois étapes (envoyer → suivre → recevoir) s’applique à WhatsApp, RCS, Viber et e-mail, chacun sur son propre endpoint. Vous allez :Prérequis
- Une clé API depuis Paramètres → Clés API. Utilisez une clé sandbox (
dv_test_sk_…) pendant le développement — les envois sandbox sont gratuits et simulés, et renvoient des accusés de livraison déterministes pour que vous puissiez exercer les deux chemins, succès et erreur. Passez à une clé live (dv_live_sk_…) pour la production. - Un numéro expéditeur capable d’envoyer sur le canal utilisé. Pour le SMS, c’est un numéro SMS-compatible que vous possédez (recherchez-le et achetez-le via l’API Numbers ou via Dashboard → Numéros). Si vous omettez
from, Orbit choisit un expéditeur éligible pour la destination. - Une URL HTTPS publique pour l’étape de réception. Tout outil de tunnel convient en développement.
X-API-Key.
1. Envoyer un message
Envoyez un SMS avecPOST /messages/sms. Seuls to et body sont obligatoires ; from est facultatif.
202 Accepted — le message est persisté et mis en file pour la livraison, pas encore remis à l’opérateur. Les champs vivent sous data ; meta porte le request_id que vous devez journaliser pour le support.
id (msg_ suivi de 32 caractères hexadécimaux) est l’identifiant utilisé par tous les appels qui suivent — les requêtes de statut, les webhooks de livraison et la trace du message l’utilisent tous. Les réponses sandbox ajoutent "test_mode": true à meta.
Envoyez toujours une
Idempotency-Key lors des envois. Rejouer la même clé et le même corps dans les 24 heures renvoie la réponse originale au lieu d’envoyer un doublon ; rejouer avec un corps différent renvoie 409 IDEMPOTENCY_KEY_REUSED.Autres canaux
Chaque canal a son propre endpoint sous le préfixe/messages, avec une forme de corps adaptée à ce canal. Il n’y a pas de route unique polymorphe sur le canal — choisissez l’endpoint qui correspond à votre canal :
2. Suivre la livraison
Un message en file traverse un cycle de statuts avant d’atteindre le destinataire :id du message et le nouveau status :
message.sent— accepté par l’opérateurmessage.delivered— livraison confirmée au terminalmessage.failed— échec terminal (lestatusdu payload distinguefailed,undelivered,expiredetsubmitted_no_receipt;error_code/error_messageportent la raison du fournisseur lorsqu’elle est présente)
X-Orbit-Signature avant d’accepter une payload, et dédupliquez sur l’id de l’événement — la livraison est au moins une (at-least-once). Voir Sécurité des webhooks pour l’extrait de validation.
3. Recevoir des messages entrants
Lorsque quelqu’un répond à votre numéro (ou vous écrivent en premier), Orbit enregistre un message entrant et — si vous êtes abonné àmessage.received à l’étape précédente — le POST vers votre URL webhook :
direction=inbound :
Le routage entrant est automatique pour les numéros que vous possédez sur Orbit — une réponse à l’un de vos numéros expéditeurs est capturée et, avec un abonnement
message.received, livrée à votre webhook. Aucun branchement d’URL entrant par numéro n’est nécessaire.4. Répondre à un message entrant
Répondre n’est qu’un autre envoi, adressé en retour aufrom entrant. Échangez to et from et appelez POST /messages/sms une nouvelle fois :
conversation_id sur GET /messages.
Erreurs courantes
Toute erreur utilise la même forme — faites correspondre surerror.code (une constante en MAJUSCULES) et journalisez meta.request_id :
Liste complète : Codes d’erreur.
Prochaines étapes
- Référence de l’API Messaging — chaque endpoint et champ de message
- Cycle de vie du statut des messages — l’ensemble complet des statuts par canal
- Aperçu des webhooks — relances, garanties de livraison et catalogue d’événements
- Intégration de l’API — sandbox, idempotence, pagination et SDK pour chaque canal
- Limites de débit — limites par canal et en-têtes de relance