Un'unica API per ogni
messaggio che invii.
Invia messaggi transazionali e notifiche tramite Bird. Fornisci il testo e il mittente oppure usa un template; controlla la codifica e il conteggio dei segmenti nella risposta. Aggiungi una chiave di idempotenza per riprovare in sicurezza e segui la consegna attraverso webhook firmati.
Un messaggio. Un risultato visibile.
Invio di esempio
Esplora l'accettazione e la successiva ricevuta dall'operatore. Questo esempio non invia un SMS; la consegna non implica che qualcuno lo abbia letto.
Testa la tua prima integrazione SMS.
Dal linguaggio che già usi.
L'invio è il nucleo dell<hub>Bird SMS API</hub>. Lesempio qui sotto mostra la struttura della richiesta. Per un test controllato, sostituisci il destinatario con il numero sandbox documentato +15005550006. Configura un mittente US adatto e abilita la destinazione, poi verifica gli eventi di accettazione e consegna prima di inviare ai clienti.
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 invio SMS consegna il testo che fornisci. Per login e verifica dell'account, usa Bird Verify per generare, far scadere e controllare i codici come parte di un flusso di verifica.
Costruisci su un contratto di invio chiaro.
Prepara la richiesta e segui il risultato.
- 01
Conteggio dei segmenti prima dell'invio.
Bird restituisce la codifica calcolata e il conteggio dei segmenti nella risposta. Usa il calcolatore di segmenti per ispezionare una bozza prima di inviarla.
- 02
GSM-7 e Unicode, decisi per te.
I caratteri determinano la codifica. GSM-7 contiene 160 unità in un singolo segmento; Unicode ne contiene 70. I messaggi multipart riservano spazio per il riassemblaggio e gli emoji possono occupare più di un'unità.
- 03
Batch in un'unica chiamata.
Invia fino a 100 messaggi indipendenti in un unico batch. La validazione avviene prima dell'accodamento; ogni messaggio accettato ha poi un esito proprio.
- 04
Riprova con una chiave di idempotenza.
Usa una chiave di idempotenza per ogni richiesta logica e riutilizzala per un retry identico. La risposta API conservata può essere riprodotta; questo non garantisce la consegna esattamente una volta da parte del carrier.
- 05
Eventi di consegna per la tua applicazione.
Sottoscrivi gli eventi di accettazione, invio ed esito terminale. Verifica le firme, deduplica i retry dei webhook e usa le conferme di lettura per indagare su osservazioni mancanti o ritardate.
Procedi con l'integrazione tramite un test controllato.
Mappa i campi della richiesta attuale, le registrazioni del mittente e la gestione degli eventi su Bird. Riconcilia gli opt-out prima di spostare il traffico, poi confronta un test controllato prima di cambiare il routing di produzione.
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",
});Conosci il conteggio dei segmenti prima dell'invio.
GSM-7 contiene 160 septets in un singolo segmento; UCS-2 ne contiene 70 code units. La capacità multipart è rispettivamente 153 o 67. I caratteri estesi GSM-7 usano due septets e gli emoji possono usare due code units. Bird restituisce codifica e segmenti all'accettazione; la tariffa applicabile e qualsiasi costo del carrier vengono addebitati separatamente.
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 messaggio o un centinaio, un'unica chiamata.
Raggruppa fino a 100 messaggi indipendenti in un batch, ciascuno con destinatario e testo propri. Un input non valido rifiuta la richiesta prima dell'accodamento. Dopo una risposta 202 riuscita, l'elaborazione e la consegna possono avere esito positivo o negativo separatamente per ogni SMS. Riutilizza la richiesta e la chiave di idempotenza quando riprovi entro la finestra di conservazione documentata.
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}.`,
})),
{ idempotencyKey: `reminders-${runId}` },
)
.safe();
if (error) throw error;
console.log(`queued ${batch.data.length} messages`);Segui l'accettazione fino all'esito riportato.
Una richiesta riuscita restituisce 202 Accepted. L'addebito e l'invio al carrier avvengono dopo e possono ancora fallire. Consuma gli eventi di consegna firmati e ispeziona il record del messaggio quando indaghi sull'esito.
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 });
}Ispeziona i fallimenti in base alla causa riportata. Le keyword STOP supportate e gli opt-out del carrier creano soppressioni; altri fallimenti di consegna non diventano automaticamente un opt-out.
sms.acceptedAccettato dall'API e messo in coda per la consegna al carrier.sms.sentSottoposto all'SMSC del carrier di destinazione.sms.deliveredRicevuta di consegna ricevuta dal carrier (DLR).sms.failedUn fallimento terminale per questo tentativo SMS. Ispeziona l'errore riportato e la timeline del messaggio.
Approfondisci nella documentazione.
Configura i webhook, rendi ogni invio sicuro da ritentare con le idempotency key e leggi il riferimento agli errori così gestisci ogni fallimento nel modo giusto.
Domande prima di iniziare
Scelgo io il mittente?
Come evitano i tentativi ripetuti un messaggio duplicato?
Accettato significa consegnato?
Un batch è la stessa cosa di un broadcast?
Il resto della piattaforma SMS
Un'unica API, un unico set di chiavi. Esplora le altre funzionalità.
Scala senza
perdere il controllo.
Organizza i team in spazi di lavoro, controlla l'accesso alle API e traccia le modifiche tramite log di audit.
Audit log
Production- Workspace
- Production
- Resource
- Delivery agent
- ReadRead & write