Cada envío produce un acuse de recibo del operador. Bird convierte esos acuses en métricas de entrega, fallo y latencia, desglosadas por país, operador y remitente, en el dashboard y a través de una API de estadísticas que puedes consultar desde tu propio código.
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"
La cara de reporting de la misma API.
Nada nuevo que instrumentar.
La analítica es la cara de reporting de la API de SMS de Bird. Ya envías a través de ella y ya recibes un webhook de entrega en cada cambio de estado; la analítica es Bird llevando la cuenta por ti, para que puedas preguntar cómo se entregó una campaña sin tener que montar primero un almacén que guarde los eventos.
Lo que te dice un acuse de recibo.
Medido desde el operador, no inferido.
- 01
Tasa de entrega.
La proporción de envíos que el operador confirmó como entregados, frente a lo que se envió. Síguela por país y por remitente, no solo como un único número global que oculta la ruta que va perdiendo mensajes en silencio.
- 02
Motivos de fallo por operador.
Los envíos fallidos llevan el código de motivo del operador, agrupados por operador de destino (MCC/MNC). Un pico suele ser un operador rechazando un ID de remitente, lo cual se arregla con un registro, no es una caída de la plataforma.
- 03
Segmentos y coste.
Cada mensaje informa de su codificación y recuento de segmentos, así que el volumen se agrega en los segmentos que realmente se te facturaron. Un envío que pasó a Unicode y duplicó sus segmentos aparece aquí, no en la factura.
- 04
Latencia hasta la entrega.
El tiempo desde el envío hasta el acuse de recibo, como distribución en lugar de como media. A nivel global, alrededor del 95 % de los mensajes se confirman en menos de 2,5 segundos; la cola es donde una ruta degradada se delata.
Consulta los números desde tu propio código.
La API de estadísticas recibe un rango de tiempo y devuelve los conteos agregados, un endpoint por dimensión: por operador para encontrar la ruta con bajo rendimiento, por originador para ver en cuál de tus remitentes confía un operador, por país, categoría, estado, código de error o etiqueta. Cada fila lleva su propia dimensión, así que cruzar dos de ellas requiere dos llamadas. La misma agregación alimenta los gráficos del dashboard, por lo que un número que captures en pantalla coincide con un número que puedes extraer de forma programada.
// 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 } },
// }
Extrae la línea temporal de un mensaje.
Los agregados responden cómo fue una campaña; un ticket de soporte pregunta por un solo mensaje. Pasa un único ID de mensaje al endpoint de eventos y obtendrás todo su ciclo de vida en orden: en cola, enviado, el acuse de entrega del operador o el fallo, cada uno con marca de tiempo y, cuando falló, el código de motivo propio del operador.
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" },
// ]
Segmenta los mismos envíos según la forma de la pregunta.
Cada desglose se basa en los mismos acuses de recibo de entrega; el endpoint que llamas solo cambia la perspectiva.
| Dimensión | Qué te dice |
|---|---|
| País | Dónde se mantiene la entrega y dónde un destino arrastra hacia abajo la tasa global. |
| Operador (MCC/MNC) | Qué operador dentro de un país está rechazando tráfico, hasta el código de red. |
| Remitente | Cuánta confianza tiene cada uno de tus IDs de remitente o números, ya que la reputación es por remitente. |
| Franja temporal | Cuándo se movió una tasa, para que una caída coincida con un despliegue, un cambio de registro o una caída del servicio. |
Profundiza en la documentación.
Construye tu propio almacén a partir de los webhooks de entrega, lee la guía de entregabilidad para saber qué significan los códigos de fallo, y concilia los recuentos con facturación y uso.
Los acuses vienen de la capa de enrutamiento.
Un acuse de recibo es tan bueno como la ruta que lo produjo: el enrutamiento elige el enlace de operador que toma cada mensaje y devuelve el DLR a partir del cual se construyen estas métricas. Si usas números bidireccionales, los mensajes entrantes también se cuentan aquí, así que un volumen de respuestas queda junto a la tasa de entrega que lo generó.
Ponlo en práctica.
Continúa con la documentación, guías y ejemplos sobre este tema. Los recursos están en inglés.
El resto de la plataforma de SMS
Una API, un solo conjunto de claves. Explora las demás capacidades.
Las métricas vienen con la API que las produce.
La analítica no es un producto aparte que comprar. Envía a través de la API de SMS de Bird y el reporting de entrega, fallo y latencia ya está ahí, sobre una infraestructura que transporta alrededor del 40 % del SMS comercial del mundo.