Analisi
Vedi ciò che ha visto il carrier.
Ogni invio produce una ricevuta di consegna del carrier. Bird trasforma quelle ricevute in metriche di consegna, fallimento e latenza, suddivise per paese, carrier e mittente, nel dashboard e tramite una stats API che puoi interrogare dal tuo codice.
import { BirdClient } from "@messagebird/sdk";
const bird = new BirdClient({ apiKey: process.env.BIRD_API_KEY! });
const { data, error } = await bird.sms.send({
from: "Bird",
to: "+31612345678",
text: "Your order #4821 has shipped. Track it: bird.ly/t/4821x",
category: "transactional",
}).safe();
if (error) throw error;
console.log(data.id);
// → "sms_01m11jw130e7svjzv70kgqr38w"
Il lato reporting della stessa API.
Niente di nuovo da strumentare.
L'analisi è il lato reporting dell'API SMS di Bird. Invii già attraverso di essa e ricevi già un webhook di consegna a ogni cambio di stato; l'analisi è Bird che tiene il conto per te, così puoi sapere com'è stata consegnata una campagna senza dover prima allestire un warehouse per conservare gli eventi.
Cosa ti dice una ricevuta di consegna.
Misurata dal carrier, non dedotta.
- 01
Tasso di consegna.
La quota di invii che il carrier ha confermato come consegnati, rispetto a ciò che è stato sottoposto. Monitoralo per paese e per mittente, non solo come un unico numero a livello di sito che nasconde la rotta che sta silenziosamente perdendo messaggi.
- 02
Motivi di fallimento per carrier.
Gli invii falliti riportano il reason code del carrier, raggruppati per carrier di destinazione (MCC/MNC). Un picco di solito è un singolo operatore che rifiuta un singolo sender ID, che è una correzione di registrazione, non un'interruzione della piattaforma.
- 03
Segmenti e costo.
Ogni messaggio riporta la propria codifica e il numero di segmenti, così il volume si aggrega nei segmenti che ti sono stati effettivamente fatturati. Un invio passato a Unicode che ha raddoppiato i suoi segmenti compare qui, non sulla fattura.
- 04
Latenza fino alla consegna.
Il tempo dalla sottomissione alla ricevuta di consegna, come distribuzione anziché come media. A livello globale circa il 95% dei messaggi viene confermato in meno di 2,5 secondi; la coda è dove una rotta degradata si fa notare.
Interroga i numeri dal tuo codice.
L'API stats accetta un intervallo temporale e restituisce i conteggi aggregati, un endpoint per dimensione: per operatore per individuare la rotta con prestazioni insufficienti, per mittente per verificare quale dei tuoi sender è considerato affidabile da un operatore, per paese, categoria, stato, codice di errore o tag. Ogni riga contiene la propria dimensione, quindi incrociare due dimensioni richiede due chiamate. La stessa aggregazione alimenta i grafici della dashboard, quindi un numero che catturi in uno screenshot corrisponde a un numero che puoi estrarre in modo programmato.
// One endpoint per dimension, and one dimension per row: "by country and
// carrier" is two calls, not one grouped query.
const { data: byCarrier, error } = await bird.sms.stats
.byCarrier({ from: "2026-06-01", to: "2026-06-26" })
.safe();
if (error) throw error;
console.log(byCarrier.data[0]);
// → {
// carrier: "Vivo",
// delivery: {
// accepted: 14820,
// sent: 14810,
// delivered: 14720,
// undelivered: 60,
// failed: 25,
// delivery_rate: 0.9932,
// },
// latency: { processing: { p50_ms: 480, p95_ms: 2310, p99_ms: 4100 } },
// }
Estrai la timeline di un singolo messaggio.
I dati aggregati rispondono a come è andata una campagna; un ticket di assistenza chiede di un singolo messaggio. Passa un singolo ID messaggio all'endpoint degli eventi e ottieni il suo intero ciclo di vita in ordine: in coda, inviato, la ricevuta di consegna dell'operatore o l'errore, ciascuno con data e ora e, in caso di fallimento, il codice motivo dell'operatore stesso.
const { data: events, error } = await bird.sms
.listEvents("sms_01m11jw130e7svjzv70kgqr38w")
.safe();
if (error) throw error;
console.log(events.data);
// → [
// { id: "evt_01m11jw196...", type: "sms.accepted", occurred_at: "2026-06-26T10:00:00.110Z" },
// { id: "evt_01m11jw19h...", type: "sms.sent", occurred_at: "2026-06-26T10:00:00.640Z" },
// { id: "evt_01m11jx4c2...", type: "sms.delivered", occurred_at: "2026-06-26T10:00:02.300Z" },
// ]
Affetta gli stessi invii in base a come è formulata la domanda.
Ogni dettaglio viene letto dalle stesse ricevute di consegna; l'endpoint che chiami cambia solo la prospettiva.
| Dimensione | Cosa ti dice |
|---|---|
| Paese | Dove la consegna regge e dove una destinazione sta abbassando il tasso globale. |
| Carrier (MCC/MNC) | Quale operatore all'interno di un paese sta rifiutando il traffico, fino al network code. |
| Mittente | Quanto è affidabile ciascuno dei tuoi sender ID o numeri, dato che la reputazione è per mittente. |
| Intervallo temporale | Quando un tasso è cambiato, così un calo si allinea con un deploy, una modifica di registrazione o un'interruzione. |
Approfondisci nella documentazione.
Costruisci il tuo store dai webhook di consegna, leggi la guida alla deliverability per capire cosa significano i codici di fallimento e riconcilia i conteggi con fatturazione e utilizzo.
Le ricevute provengono dal layer di routing.
Una ricevuta di consegna vale solo quanto il percorso che l'ha prodotta: il routing sceglie il collegamento carrier che ogni messaggio prende e restituisce il DLR da cui sono costruite queste metriche. Se usi numeri bidirezionali, anche i messaggi in entrata vengono conteggiati qui, così un volume di risposte sta accanto al tasso di consegna che lo ha generato.
Mettilo in pratica.
Prosegui con la documentazione, le guide e gli esempi per questo argomento. Le risorse sono in inglese.
Il resto della piattaforma SMS
Un'unica API, un unico set di chiavi. Esplora le altre funzionalità.
Le metriche arrivano con l'API che le produce.
L'analisi non è un prodotto separato da acquistare. Invia tramite l'API SMS di Bird e il reporting di consegna, fallimento e latenza è già lì, su un'infrastruttura che trasporta circa il 40% degli SMS commerciali del mondo.