Una API para cada
mensaje que envías.
Envía mensajes transaccionales y notificaciones a través de Bird. Proporciona tu texto y remitente, o usa una plantilla; inspecciona la codificación y el conteo de segmentos en la respuesta. Añade una clave de idempotencia para reintentos seguros y sigue la entrega mediante webhooks firmados.
Un mensaje. Un resultado visible.
Envío de ejemplo
Explora la aceptación y un acuse de recibo posterior del operador. Este ejemplo no envía un mensaje de texto; la entrega no demuestra que alguien lo haya leído.
Prueba tu primera integración con SMS.
Desde el lenguaje que ya usas.
El envío es el núcleo de la Bird SMS API. El ejemplo siguiente muestra la estructura de la solicitud. Para una prueba controlada, reemplaza el destinatario con el número de sandbox documentado +15005550006. Configura un remitente adecuado en EE. UU. y habilita el destino primero, luego verifica los eventos de aceptación y entrega antes de enviar a clientes.
const msg = await bird.sms.send({
from: "+15557654321",
to: "+14155550100",
text: "Your verification code is 123456.",
category: "authentication",
});
console.log(msg.id, msg.status);Un envío SMS entrega el texto que proporcionas. Para inicio de sesión y verificación de cuenta, usa Bird Verify para generar, expirar y verificar códigos como parte de un flujo de verificación.
Construye sobre un contrato de envío claro.
Prepara la solicitud y sigue el resultado.
- 01
Conteo de segmentos antes de enviar.
Bird reporta la codificación calculada y el conteo de segmentos en su respuesta. Usa la calculadora de segmentos para inspeccionar un borrador antes de enviarlo.
- 02
GSM-7 y Unicode, decidido por ti.
Los caracteres determinan la codificación. GSM-7 cabe en 160 unidades en un solo segmento; Unicode cabe en 70. Los mensajes multiparte reservan espacio para el reensamblaje, y los emoji pueden ocupar más de una unidad.
- 03
Lote en una sola llamada.
Envía hasta 100 mensajes independientes en un solo lote. La validación ocurre antes del encolado; cada mensaje aceptado tiene su propio resultado.
- 04
Reintenta con una clave de idempotencia.
Usa una clave de idempotencia por solicitud lógica y reutilízala para un reintento idéntico. La respuesta retenida de la API puede reproducirse; esto no garantiza entrega exactamente-una-vez por parte del operador.
- 05
Eventos de entrega para tu aplicación.
Suscríbete a eventos de aceptación, envío y resultado terminal. Verifica firmas, deduplica reintentos de webhooks y usa lecturas de mensajes para investigar observaciones faltantes o retrasadas.
Avanza la integración con una prueba controlada.
Mapea los campos de tu solicitud actual, registros de remitente y manejo de eventos a Bird. Reconcilia las bajas antes de mover tráfico, luego compara con una prueba controlada antes de cambiar el enrutamiento de producción.
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",
});Conoce el conteo de segmentos antes del envío.
GSM-7 cabe en 160 septetos en un solo segmento; UCS-2 cabe en 70 unidades de código. La capacidad multiparte es 153 o 67 respectivamente. Los caracteres extendidos de GSM-7 usan dos septetos y los emoji pueden usar dos unidades de código. Bird devuelve la codificación y los segmentos en la aceptación; la tarifa aplicable y cualquier cargo del operador se facturan por separado.
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" }
Un mensaje o cien, una sola llamada.
Agrupa hasta 100 mensajes independientes en un lote, cada uno con su propio destinatario y texto. Una entrada inválida rechaza la solicitud antes del encolado. Tras una respuesta 202 exitosa, el procesamiento y la entrega pueden tener éxito o fallar por separado para cada SMS. Reutiliza la solicitud y la clave de idempotencia al reintentar dentro de la ventana de retención documentada.
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`);Sigue la aceptación hasta el resultado reportado.
Una solicitud exitosa devuelve 202 Accepted. El cobro y el envío al operador ocurren después y aún pueden fallar. Consume eventos de entrega firmados e inspecciona el registro del mensaje al investigar el resultado.
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 });
}Inspecciona los fallos por su razón reportada. Las palabras clave STOP admitidas y las bajas del operador crean supresiones; otros fallos de entrega no se convierten automáticamente en una baja.
sms.acceptedAceptado por la API y en cola para la entrega al operador.sms.sentEnviado al SMSC del operador de destino.sms.deliveredAcuse de recibo del operador (DLR).sms.failedUn fallo terminal para este intento de SMS. Inspecciona el error reportado y la línea de tiempo del mensaje.
Profundiza en la documentación.
Configura webhooks, haz cada envío seguro de reintentar con claves de idempotencia y consulta la referencia de errores para manejar cada fallo correctamente.
Preguntas antes de construir
¿Elijo yo el remitente?
¿Cómo evitan los reintentos un mensaje duplicado?
¿Aceptado significa entregado?
¿Es lo mismo un lote que una difusión?
El resto de la plataforma SMS
Una API, un conjunto de claves. Explora las demás capacidades.
Escala sin
perder el control.
Organiza equipos en espacios de trabajo, controla el acceso a la API y rastrea cambios en los registros de auditoría.
Registro de auditoría
Producción- Espacio de trabajo
- Producción
- Recurso
- Agente de entrega
- Acceso de lecturaLectura y escritura