Bidirectionnel

Les textos reviennent. Alors gérez-les.

Recevez des réponses sur un numéro Bird compatible, lisez le message et répondez depuis le même expéditeur. Les événements entrants signés relient la conversation à votre application. Configurez les réponses par mot-clé et vérifiez la couverture STOP, START et HELP propre à la destination.

Gardez la conversation dans un seul fil

Exemple de réponse

Fieldnotes · conversation SMS
Votre commande est prête. Répondez si vous avez besoin d'aide.
Puis-je la récupérer demain ?
Oui. Nous garderons votre commande prête pour demain.
sms.received

Votre application reçoit la réponse et peut y répondre.

Messages illustratifs. Le traitement automatique des mots-clés dépend du catalogue pays ; les préférences à l'échelle de l'espace de travail constituent un contrôle distinct.

Des équipes qui créent des logiciels de classe mondiale nous font confiance au quotidien

Découvrir plus de témoignages clients

L'entrant n'est qu'un webhook de plus.

La messagerie bidirectionnelle fait partie de l<hub>Bird SMS API</hub>. Un numéro éligible peut recevoir les messages de vos clients. Abonnez-vous à sms.received en plus des événements de livraison, vérifiez la signature du webhook et utilisez lidentifiant du message entrant pour relier la réponse à votre application.

Écoutez ce qui revient.

Un message entrant et un opt-out sont des événements, au même titre qu'un accusé de réception. Vérifiez une signature, branchez sur le type, et gérez chacun dans le gestionnaire que vous avez déjà écrit.

app/api/webhooks/bird/route.ts
signed
import { bird } from "@/lib/bird";

export async function POST(req: Request) {
  const event = bird.webhooks.unwrap(
    await req.text(),
    Object.fromEntries(req.headers),
  );

  switch (event.type) {
    case "sms.received":
      await handleInbound(event.data.from, event.data.text);
      break;
    case "sms_suppression.created":
      await removeFromCampaigns(event.data.destination);
      break;
  }

  return new Response(null, { status: 204 });
}

L'enveloppe Standard Webhooks contient type, timestamp et data. L'en-tête webhook-id identifie une livraison et reste stable d'une tentative à l'autre. Vérifiez la signature et appliquez une tolérance de timestamp appropriée.

  • sms.receivedUn message entrant est arrivé sur votre numéro : contient l'expéditeur, votre numéro et le texte.
  • sms.deliveredUne réponse que vous avez envoyée a atteint le combiné (DLR de l'opérateur).
  • sms_suppression.createdL'expéditeur a envoyé STOP : Bird a supprimé cette paire expéditeur-destinataire et bloque tout envoi futur depuis celle-ci.

Un message entrant signé, en intégralité.

Voici à quoi ressemble un événement sms.received sur le réseau. Le from est celui qui vous a envoyé un texto, le to est votre numéro provisionné, et les segments et l'encodage sont indiqués de la même façon que sur un envoi, de sorte qu'une longue réponse entrante n'est jamais une surprise.

sms.received
evt_
{
  "id": "evt_7nQ9xLp2aR...",
  "type": "sms.received",
  "created_at": "2026-06-26T14:03:11Z",
  "data": {
    "id": "sms_5hV02Mr3n...",
    "from": "+15005550006",
    "to": "+14155550172",
    "text": "YES book me in for Thursday",
    "encoding": "GSM-7",
    "segments": 1
  }
}

Répondez depuis le même numéro.

Répondez via l'API d'envoi SMS standard avec votre numéro éligible en from et l'abonné en to. Les vérifications d'expéditeur, de destination et de suppression s'appliquent toujours à la réponse de votre application. Le studio de messages peut préparer une réponse à partir d'un message entrant ; vérifiez-la avant l'envoi.

reply.ts
200 · reply
async function handleInbound(from: string, text: string) {
  if (/^yes\b/i.test(text)) {
    const { error } = await bird.sms.send({
      from:     "+14155550172", // your two-way number
      to:       from,           // reply to the sender
      text:     "Booked. See you Thursday at 10am.",
      category: "transactional",
    }).safe();

    if (error) throw error;
  }
}

Gestion des mots-clés, avec la bonne portée.

Bird compare le texte entrant au catalogue de mots-clés propre au pays du numéro. Un mot-clé STOP reconnu supprime la paire expéditeur/abonné, START peut lever cette suppression, et HELP répond avec les informations du programme. Les mots-clés personnalisés prennent en charge les réponses de votre campagne sans écraser les opérations de conformité réservées. Consultez la couverture et les préférences de l'espace de travail dans la gestion des désinscriptions.

Deux choses que vous voudrez ensuite.

La réception de messages entrants nécessite un numéro compatible bidirectionnel : les numéros longs, les numéros courts et les numéros gratuits peuvent recevoir des messages, mais pas les identifiants d'expéditeur alphanumériques. Pour des échanges plus riches sur le même appareil (indicateurs de saisie, accusés de lecture, carrousels), RCS enrichit la conversation là où l'appareil le prend en charge.

Approfondissez dans la documentation.

Câblez des webhooks pour les événements entrants, lisez la référence des erreurs pour les échecs que vous gérerez, et consultez abus et conformité pour les règles de mots-clés et de consentement.

Mettez-le en pratique.

Poursuivez avec la documentation, les guides et les exemples sur ce sujet. Les ressources sont en anglais.

Obtenir un guide d'implémentation

Questions avant de développer

Comment une réponse parvient-elle à mon application ?
Recevez sur un numéro Bird pris en charge et abonnez-vous à l'événement signé sms.received. Vérifiez la signature du webhook avant de traiter l'expéditeur, le numéro de réception et le texte du message.
Comment répondre dans le même fil ?
Envoyez depuis le numéro qui a reçu le message vers l'expéditeur d'origine. Vérifiez que le numéro et la destination prennent en charge la conversation que vous construisez.
Que se passe-t-il quand quelqu'un envoie STOP par SMS ?
Lorsque le catalogue de mots-clés du pays le permet, STOP crée une suppression pour la paire expéditeur/abonné exacte et envoie la confirmation configurée. Consultez les règles du pays ; les pays non couverts nécessitent votre propre gestion de la désinscription.
Un seul STOP couvre-t-il tout mon espace de travail ?
La suppression expéditeur/abonné est limitée à cette paire. Les préférences de contact à l'échelle de l'espace de travail constituent un contrôle distinct et peuvent s'appliquer à tous les expéditeurs.
Un expéditeur alphanumérique peut-il recevoir des réponses ?
Les identifiants d'expéditeur alphanumériques sont en envoi uniquement. Choisissez un numéro avec la capacité entrante appropriée et la prise en charge de la destination pour le SMS bidirectionnel.

Envoyez et recevez sur un seul numéro, une seule API.

Choisissez un numéro éligible, connectez les événements entrants et préparez vos réponses via la même API d'envoi SMS. La disponibilité de l'expéditeur et les préférences du client font toujours partie du flux.

Vos coordonnées

Tous les champs de contact sont obligatoires.

Pour que notre équipe puisse vous contacter au sujet de votre démo.

Produits d'intérêt

Facultatif

Nous vous contacterons pour organiser votre démo.
Politique de confidentialité

Commencez avec un seul canal.
Ajoutez les autres quand vous êtes prêt.

Une clé API de test est disponible immédiatement. L'accès production se débloque dès que vous ajoutez un moyen de paiement et vérifiez un expéditeur.

Vous utilisez Claude Code, Cursor ou Codex ? Copiez un prompt de configuration et votre agent installe la CLI Bird et les compétences pour vous. Choisissez le vôtre :

Cursor