Envoyez alertes de commande, rappels et notifications par SMS.
Joignez vos clients sur leur téléphone avec des mises à jour d'expédition, des rappels de réservation et des alertes de compte, depuis un numéro enregistré ou un expéditeur de marque. Bird renvoie l'encodage des caractères et le nombre de segments dès l'acceptation, évite les SMS en double quand votre application réessaie une requête expirée et transmet les mises à jour de distribution des opérateurs à votre webhook.
Votre commande n° 4821 est prête à être retirée.
Message
Détails
La remise est un accusé de réception de l’opérateur. Elle ne prouve pas que le message a été lu.
Votre commande n° 4821 est prête à être retirée.
Message
Détails
La remise est un accusé de réception de l’opérateur. Elle ne prouve pas que le message a été lu.
Votre commande n° 4821 est prête à être retirée.
Message
Détails
La remise est un accusé de réception de l’opérateur. Elle ne prouve pas que le message a été lu.
Envoyez votre premier SMS en quelques minutes.
Testez sans risque avant d'écrire à de vrais clients.
Avec la API SMS de Bird, un seul appel depuis votre backend envoie une confirmation de commande, une mise à jour de livraison ou une alerte de rendez-vous. Avant d'écrire à de vrais clients, dirigez vos envois de test vers le numéro sandbox américain +15005550006 depuis un expéditeur américain actif. Vous vérifiez ainsi votre intégration et la gestion des webhooks sans envoyer de SMS à un vrai téléphone.
// Install the SDK
// npm install @messagebird/sdk
const msg = await bird.sms.send({
from: "+15557654321",
to: "+14155550100",
text: "Your verification code is 123456.",
category: "authentication",
});
console.log(msg.id, msg.status);Besoin de vérifier un utilisateur à la connexion ou au paiement ? Au lieu de générer et stocker vous-même des codes de vérification à usage unique, utilisez Bird Verify pour émettre, expirer et contrôler automatiquement les codes de vérification.
Gardez une distribution SMS prévisible en production.
Évitez les frais de segments imprévus, les SMS en double lors des nouvelles tentatives réseau et les échecs opérateur passés inaperçus.
- 01
Le nombre de segments, directement dans la réponse.
Chaque envoi accepté renvoie l'encodage des caractères appliqué et le nombre de segments. Vous pouvez aussi tester vos brouillons dans le calculateur de segments avant de publier un nouveau modèle.
- 02
Gérez GSM-7 et Unicode sans approximation.
Un message GSM-7 standard tient 160 caractères dans un seul segment. Les textes contenant des emoji ou des écritures non latines passent automatiquement en Unicode, à 70 unités par segment. Les messages plus longs sont découpés proprement et réassemblés en un seul SMS sur le téléphone du client.
- 03
Envoyez jusqu'à 100 SMS personnalisés en un seul appel.
Envoyez une file de rappels de rendez-vous ou d'alertes de planning en une seule requête groupée. Bird valide le lot d'avance pour que les entrées mal formées échouent immédiatement, puis suit la distribution opérateur séparément pour chaque destinataire.
- 04
Réessayez les requêtes expirées sans envoyer deux fois le même SMS.
Ajoutez une clé d'idempotence quand votre worker envoie un message. Si une expiration réseau déclenche une nouvelle tentative avec la même clé et le même contenu, Bird renvoie la réponse d'origine au lieu de mettre un SMS en double en file d'attente.
- 05
Sachez quand l'opérateur distribue ou rejette un SMS.
Recevez des webhooks signés à chaque étape du message, d'accepté à envoyé, distribué ou en échec. Votre application peut ainsi mettre à jour le statut de la commande ou basculer vers un autre canal quand un numéro est injoignable.
Migrez depuis Twilio en quelques lignes de code.
Reportez vos numéros d'expéditeur, champs de destinataire et gestionnaires de webhooks sur Bird sans refondre votre service de notifications. Synchronisez votre liste de désinscription et vérifiez la distribution avec le numéro sandbox avant de basculer le trafic réel.
import twilio from "twilio";
const client = twilio(accountSid, authToken);
await client.messages.create({
from: "+14155550172",
to: "+15005550006",
body: "Your code is 123456.",
});import { BirdClient } from "@messagebird/sdk";
const bird = new BirdClient({ apiKey: process.env.BIRD_API_KEY! });
await bird.sms.send({
from: "+14155550172",
to: "+15005550006",
text: "Your code is 123456.",
category: "authentication",
});Repérez les messages multisegments avant qu'ils ne gonflent votre facture.
Un seul guillemet typographique, emoji ou caractère accentué dans le nom d'un client peut faire passer un message de l'encodage GSM-7 à 160 caractères à l'Unicode à 70 unités, et diviser un SMS en plusieurs segments facturés. Bird renvoie le nombre de caractères, l'encodage et le total de segments dans la réponse d'envoi, pour que votre équipe repère tôt les modèles coûteux.
const { data, error } = await bird.sms.send({
from: "Bird",
to: "+31612345678",
text: "Your code is 123456.",
category: "authentication",
}).safe();
if (error) throw error;
console.log(data.segments);
// → { characters: 20, count: 1, encoding: "GSM_7BIT" }
Envoyez jusqu'à 100 rappels personnalisés en une seule requête.
Quand une tâche planifiée envoie les rappels de rendez-vous du lendemain ou les créneaux de livraison, regroupez jusqu'à 100 messages en un seul appel API au lieu d'enchaîner les requêtes individuelles. Chaque destinataire reçoit son propre SMS personnalisé avec un statut de distribution distinct, et la validation préalable détecte les entrées mal formées avant la mise en file du lot.
const { data: batch, error } = await bird.sms
.sendBatch(
users.map((u) => ({
from: "Bird",
to: u.phone,
text: `Hi ${u.name}, your appointment is tomorrow at ${u.time}.`,
})),
)
.safe();
if (error) throw error;
console.log(`queued ${batch.data.length} messages`);Suivez la distribution opérateur et gérez les SMS en échec en temps réel.
La transmission à l'opérateur se fait de manière asynchrone, après la réussite de votre appel d'envoi. Bird publie donc des événements webhook signés à mesure que le message progresse. Mettez à jour votre base de données quand un SMS atteint le téléphone, ou déclenchez un e-mail de secours et signalez les numéros invalides en cas d'échec.
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.delivered":
await markDelivered(event.data.sms_id);
break;
case "sms.failed":
await flag(event.data.to, event.data.error?.description);
break;
}
return new Response(null, { status: 204 });
}Chaque événement d'échec indique la raison précise, ce qui vous permet de distinguer un problème temporaire de téléphone d'un numéro invalide. Les réponses de désinscription comme STOP placent automatiquement le destinataire sur la liste de suppression pour les futurs envois marketing, tandis que les échecs de distribution ordinaires ne modifient pas son consentement.
sms.acceptedBird a accepté votre requête et mis le message en file pour le routage opérateur.sms.sentBird a transmis le message à l'opérateur mobile de destination.sms.deliveredL'opérateur de destination a confirmé la distribution sur le téléphone du destinataire.sms.failedLe SMS n'a pas pu être distribué. La raison de l'erreur est incluse pour que votre application alerte le support ou essaie un autre canal.
Approfondissez avec les guides développeur.
Vérifiez les webhooks signés, protégez vos workers d'envoi contre les SMS en double avec les clés d'idempotence et utilisez la référence des erreurs pour gérer automatiquement les numéros invalides ou les destinations désactivées.
Questions avant de construire
Est-ce que je choisis l'expéditeur ?
Comment les réessais évitent-ils un texte en double ?
Accepté signifie-t-il livré ?
Un batch est-il la même chose qu'un broadcast ?
Le reste de la plateforme SMS
Provisionnez des numéros d'expéditeur, recevez les réponses des clients et suivez la distribution opérateur depuis le même espace de travail.
Passez à l'échelle sans perdre le contrôle.
Separate production and sandbox traffic into dedicated workspaces, scope API keys to the exact channels each service or agent needs, and track permission changes in the audit log.