Chaque envoi produit un accusé de réception (DLR) de l'opérateur. Bird transforme ces accusés en métriques de livraison, d'échec et de latence, ventilées par pays, opérateur et expéditeur, dans le tableau de bord et via une API de statistiques que vous pouvez interroger depuis votre propre code.
import { BirdClient } from "@messagebird/sdk";
const bird = new BirdClient({ apiKey: process.env.BIRD_API_KEY! });
const code = generateOtp();
const { data, error } = await bird.sms.send({
from: "Bird",
to: "+15005550006",
text: `Your Bird verification code is ${code}. Reply STOP to opt out.`,
}).safe();
if (error) throw error;
console.log(data.id);
// → "sms_4kT01Lq2m..."Today at 2:14 PM
Le volet reporting de la même API.
Rien de nouveau à instrumenter.
L'analyse est le volet reporting de l'API SMS de Bird. Vous envoyez déjà à travers elle et recevez déjà un webhook de livraison à chaque changement d'état ; l'analyse, c'est Bird qui tient le compte à votre place, pour que vous puissiez savoir comment une campagne s'est délivrée sans avoir d'abord à monter un entrepôt pour conserver les événements.
Ce qu'un accusé de réception vous indique.
Mesuré depuis l'opérateur, et non déduit.
- 01
Taux de livraison.
La part des envois que l'opérateur a confirmé comme délivrés, par rapport à ce qui a été soumis. Suivez-le par pays et par expéditeur, et pas seulement comme un chiffre global unique qui masque la route qui décroche discrètement.
- 02
Raisons d'échec par opérateur.
Les envois échoués portent le code de raison de l'opérateur, regroupé par opérateur de destination (MCC/MNC). Un pic correspond généralement à un opérateur qui rejette un sender ID, ce qui relève d'une correction d'enregistrement, pas d'une panne de plateforme.
- 03
Segments et coût.
Chaque message indique son encodage et son nombre de segments, de sorte que le volume s'agrège dans les segments réellement facturés. Un envoi passé en Unicode et qui a doublé ses segments apparaît ici, pas sur la facture.
- 04
Latence jusqu'à la livraison.
Le temps écoulé entre la soumission et l'accusé de réception, sous forme de distribution plutôt que de moyenne. À l'échelle mondiale, environ 95 % des messages sont confirmés en moins de 2,5 secondes ; c'est dans la traîne qu'une route dégradée se signale.
Interrogez les chiffres depuis votre propre code.
L'API de statistiques accepte une plage temporelle et un groupBy, et renvoie les comptes agrégés. Groupez par pays et opérateur pour repérer la route sous-performante, par expéditeur pour voir lequel de vos IDs un opérateur considère comme fiable. La même agrégation alimente les graphiques du tableau de bord : un chiffre dont vous faites une capture d'écran correspond à un chiffre que vous pouvez extraire de façon planifiée.
const { data, error } = await bird.sms.stats
.query({
from: "2026-06-01",
to: "2026-06-26",
groupBy: ["country", "carrier"],
metrics: ["sent", "delivered", "failed", "p95_latency_ms"],
})
.safe();
if (error) throw error;
console.log(data.rows[0]);
// → {
// country: "BR",
// carrier: "Vivo", // MCC/MNC 724/06
// sent: 48213,
// delivered: 47190,
// failed: 1023,
// p95_latency_ms: 2310,
// }Extrayez la chronologie d'un seul message.
Les agrégats répondent à la question de savoir comment une campagne s'est déroulée ; un ticket de support porte sur un seul texto. Transmettez un unique message ID à l'endpoint des événements et vous obtenez toute sa vie dans l'ordre — mis en file d'attente, envoyé, l'accusé de réception de l'opérateur ou l'échec, chacun horodaté et, en cas d'échec, accompagné du code de raison propre à l'opérateur.
const { data } = await bird.sms
.events("sms_4kT01Lq2m...")
.safe();
console.log(data.events);
// → [
// { type: "sms.queued", at: "2026-06-26T10:00:00.110Z" },
// { type: "sms.sent", at: "2026-06-26T10:00:00.640Z" },
// { type: "sms.delivered", at: "2026-06-26T10:00:02.300Z" },
// ]Découpez les mêmes envois selon la forme de la question.
Chaque ventilation lit les mêmes accusés de réception ; le groupBy ne fait que changer la perspective.
| Dimension | Ce qu'elle vous indique |
|---|---|
| Pays | Où la livraison tient bon et où une destination tire le taux global vers le bas. |
| Opérateur (MCC/MNC) | Quel opérateur au sein d'un pays rejette le trafic, jusqu'au code réseau. |
| Expéditeur | Le niveau de confiance accordé à chacun de vos sender IDs ou numéros, la réputation étant propre à chaque expéditeur. |
| Tranche horaire | Quand un taux a évolué, afin qu'une baisse coïncide avec un déploiement, un changement d'enregistrement ou une panne. |
Approfondissez dans la documentation.
Construisez votre propre stockage à partir des webhooks de livraison, lisez le guide de délivrabilité pour comprendre la signification des codes d'échec, et rapprochez les comptes de la facturation et de l'utilisation.
Les accusés proviennent de la couche de routage.
Un accusé de réception ne vaut que ce que vaut le chemin qui l'a produit : le routage choisit le lien opérateur que prend chaque message et renvoie le DLR à partir duquel ces métriques sont construites. Si vous exploitez des numéros bidirectionnels, les messages entrants sont également comptés ici, de sorte qu'un volume de réponses côtoie le taux de livraison qui l'a généré.
FAQ sur l'analyse SMS
D'où proviennent les chiffres de livraison ?+
Puis-je ventiler un rapport par opérateur ?+
Dois-je interroger l'API en boucle, ou puis-je recevoir les événements en flux ?+
Puis-je retrouver ce qui est arrivé à un message précis ?+
Le reste de la plateforme SMS
Une seule API, un seul jeu de clés. Explorez les autres capacités.
Les métriques sont livrées avec l'API qui les produit.
L'analyse n'est pas un produit distinct à acheter. Envoyez via l'API SMS de Bird et le reporting de livraison, d'échec et de latence est déjà là, sur une infrastructure qui achemine environ 40 % du SMS commercial mondial.