Sign inGet started

Migrare SMS da Twilio

Questa pagina mappa l'API Programmable Messaging di Twilio, i Messaging Service e le status callback su Bird. Segui la guida principale alla migrazione nell'ordine indicato e usa queste corrispondenze per i passaggi 3, 4 e 5.
Due differenze condizionano l'intero porting. L'POST /2010-04-01/Accounts/{AccountSid}/Messages.json di Twilio accetta parametri PascalCase form-encoded autenticati con Account SID e Auth Token; POST /v1/sms/messages accetta JSON autenticato con una chiave bearer API verso il tuo host regionale. Un Twilio Messaging Service può inoltre raggruppare selezione del sender, gestione degli opt-out e configurazione delle callback. Mappa ogni comportamento separatamente sull'owner Bird: rinominare il SID in un valore sender non preserva l'intero servizio.

Passa questo al tuo agente

Usa questo brief nel tuo coding agent. Inizia con la fase di discovery e produce un piano di migrazione revisionabile prima di qualsiasi modifica in produzione.
Esempio di codice
Help me migrate my SMS integration from Twilio to Bird.
1. Inspect this repository's sends, senders, callbacks, schedules, templates, opt-outs and tests. List the traffic and behavior that must survive the migration.
2. Read https://bird.com/docs/guides/sms/migrate/twilio.md and https://bird.com/docs/guides/sms/migrate.md. Use an existing authenticated Bird MCP or CLI connection. If neither is available, follow https://bird.com/docs/ai/set-up-your-agent.md. Discover the actual operations; do not invent commands or ask me to paste credentials into chat.
3. Prepare the code changes, sender/destination requirements, consent migration, webhook verification and rollout/rollback plan. Preserve the scope of each customer's preferences, including requests outside SMS replies. Separate API batches from audience broadcasts and preserve any behavior that has no direct endpoint equivalent.
4. Show me the exact affected resources, destinations, test volume and known costs before an action that sends messages, spends money, registers or changes a sender, or moves production traffic. Require explicit human authorization for each paid submission or production change. Name one-off 10DLC registration and resubmission fees before requesting approval. An existing explicit approval for that exact action is sufficient; broad migration approval is not. Simulated SMS destinations are billable and still require authorization.
5. If I am keeping Twilio numbers, prepare the human support port request and obtain authorization to send it. Read bird support-tickets create --help, then use the available CLI or MCP support operation with the reviewed number list and requirements. Return the ticket ID and follow the reply; support arranges the port on its own schedule, separately from the code cutover.
6. Run local and intercepted tests first. When authorized, perform the agreed bounded integration tests, inspect accepted and final outcomes separately, and report failures or uncertainty. Do not claim a delivery receipt proves reading or that request idempotency guarantees exactly-once delivery.
7. Keep production cutover and retiring the old provider as explicit steps in the approved rollout. Finish with the diff, evidence, unresolved requirements and the next action.

Mappa la chiamata di invio

FunzioneTwilioBird
DestinatarioToto (uno per richiesta)
MittenteFrom o MessagingServiceSidfrom
CorpoBodytext
Template di contenutoContentSid + ContentVariablesrivedi il contenuto separatamente; i template di sistema Bird non sono un'importazione di Twilio Content
Intent(nessuno)category, obbligatorio per il testo libero
Etichette filtrabili(nessuna)coppie tags: {name, value}
Contesto di andata e ritornoun tuo store, indicizzato per SIDmetadata: JSON arbitrario, ripetuto in ogni evento
Report di consegnaStatusCallbackun webhook dello spazio di lavoro sottoscritto agli eventi di consegna seguenti
TraslitterazioneSmartEncodedoptions.smart_encoding (default false)
Retry sicuri(nessuno su Messages)header Idempotency-Key
PianificazioneScheduleType + SendAtnessun equivalente: scheduled_at viene rifiutato
MediaMediaUrlnessun equivalente: media_urls viene rifiutato
ValiditàValidityPeriodnessun equivalente: validity_period viene rifiutato
Accorciamento linkShortenUrlsnessun equivalente
I tre campi rifiutati sono riservati e rispondono a 422 SMSUnsupportedFeature. Per ora mantieni la pianificazione e la gestione dei media dove sono.
Note sul porting:
  • Risolvi i comportamenti del Messaging Service separatamente. Twilio risolve il pool di sender, lo sticky sender e il geomatch dietro il SID. Bird accetta direttamente il sender in from, quindi scegli il sender per ogni invio oppure usa un invio tramite template, che seleziona un sender valido per la destinazione e rifiuta from.
  • Un limite di caratteri diventa un limite di segmenti. Le lunghezze sono simili per il testo GSM-7, ma il comportamento in caso di errore no: Bird non tronca mai, quindi un corpo troppo lungo viene rifiutato con un 422 anziché tagliato.
  • Nulla nell'API Messages corrisponde a category. Decidi per ogni tipo di messaggio se è transactional, marketing, authentication o service. Il traffico di autenticazione in particolare va etichettato come tale, anziché lasciato in un default marketing.
  • Le credenziali di test di Twilio corrispondono a destinazioni simulate. I numeri magici con cui già testi, inclusi +15005550006 e +15005550001, producono esiti sintetizzati anche qui, con due differenze: non c'è una credenziale di test separata e gli invii vengono fatturati. Gli esiti sono elencati nella guida principale.

Trasferisci gli opt-out

Twilio può limitare un opt-out a un numero o a un Messaging Service. Una richiesta a livello di servizio può coprire più sender. Preserva questa ampiezza quando importi nelle soppressioni sender-e-subscriber di Bird, oppure usa la preferenza dello spazio di lavoro appropriata per una richiesta realmente a livello di spazio di lavoro.
La documentazione Advanced Opt-Out di Twilio indica che il reporting dei numeri bloccati non è esposto tramite la Console né tramite REST API. Richiedi un'esportazione attraverso il processo di supporto disponibile e riconciliala con i tuoi record di preferenza, i log in ingresso e le richieste di supporto. Un log di sole keyword potrebbe essere incompleto.
Importa il risultato verificato attraverso il workflow di soppressione. Una soppressione manuale blocca ogni categoria per quella coppia, quindi controlla l'ambito previsto anziché restringerlo o ampliarlo silenziosamente.
21610 di Twilio segnala un destinatario che ha fatto opt-out. In Bird, una coppia soppressa viene rifiutata all'ammissione con E12077 SMSRecipientSuppressed, prima che il messaggio esista. L'errore di consegna recipient_opted_out segnala invece un opt-out a valle. Verifica la copertura delle keyword di Bird prima di dismettere un handler esistente, e preserva i meccanismi di opt-out esterni al catalogo integrato.

Traduci gli stati di consegna

Usa questa tabella per confrontare i concetti del ciclo di vita, non per rinominare eventi meccanicamente. Bird sceglie un evento di errore in base allo stato e alla ragione riportati. Una richiesta API rifiutata non crea alcun messaggio; un rifiuto dopo l'accettazione può produrre sms.rejected, incluso un rifiuto del carrier. L'assenza di evidenza di consegna resta unknown. Conserva lo stato e il codice grezzi del provider insieme al tuo esito normalizzato.
EsitoTwilio MessageStatusBird
API ha accettato il messaggioqueued, acceptedsms.accepted
Consegnato al carriersending, sentsms.sent
Il carrier ha confermato la consegnadeliveredsms.delivered
Il carrier ha segnalato la mancata consegnaundeliveredsms.undelivered
Errore permanentefailedsms.failed
Richiesta rifiutata all'ammissioneerrore di richiestaerrore HTTP; nessun messaggio o evento
Finestra di validità scaduta(nessuno)sms.expired
Pianificato o cancellatoscheduled, cancelednessun equivalente al momento
Tre meccaniche cambiano insieme ai nomi:
  • Gli endpoint sostituiscono gli URL di callback. Twilio invia le notifiche allo StatusCallback sul messaggio o sul Messaging Service. Bird consegna a endpoint che il tuo spazio di lavoro registra, ciascuno sottoscritto ai tipi di evento desiderati, quindi un nuovo consumer è una nuova sottoscrizione, non un redeploy.
  • JSON firmato sostituisce i post form-encoded. Twilio invia application/x-www-form-urlencoded con un header X-Twilio-Signature; Bird invia JSON firmato secondo Standard Webhooks. Sostituisci la verifica con la procedura in Webhooks ed eventi.
  • I messaggi in ingresso arrivano come eventi. Il webhook per-numero "A message comes in" di Twilio si aspetta una risposta TwiML che la tua app può usare per auto-rispondere. Bird emette sms.received verso lo stesso endpoint sottoscritto di tutto il resto, e non c'è un corpo di risposta che invii una replica: rispondi chiamando l'endpoint di invio, oppure lascia che le regole keyword rispondano per te.
Registra l'endpoint una sola volta, indicando i tipi di evento che il tuo handler vuole ricevere: gli eventi sms.* nella tabella qui sopra sono la lista a cui sottoscriversi, e non esiste un wildcard che li sostituisca. Crea un endpoint contiene il comando, il motivo per cui il catalogo va enumerato, e l'unica cosa da fare bene alla prima chiamata, cioè salvare il signing secret che la risposta mostra una sola volta.
I codici di errore numerici di Twilio non hanno una corrispondenza uno a uno. Bird riporta un errore con un codice error standardizzato come invalid_destination, content_rejected, provider_unavailable o recipient_opted_out; la lista completa è nella pagina degli eventi. Mappa i tuoi alert su questi anziché sui codici della serie 30000.

Cutover

Destinazioni, sender e la rampa di traffico sono indipendenti dal provider e trattati nella guida principale. Due elementi specifici di Twilio appartengono al piano di cutover: il tuo brand e la tua campaign 10DLC sono registrati presso The Campaign Registry tramite Twilio e non diventano automaticamente registrazioni Bird. Conferma la procedura di migrazione o registrazione applicabile prima di inviare lavoro a pagamento. I numeri di tua proprietà su Twilio richiedono un porting che il supporto organizza, con i suoi tempi e non con i tuoi.
Per i requisiti lato Bird, parti da Registrarsi per 10DLC: copre il significato di ogni campo, i tipi di entità riconosciuti dal registro e la chiamata ai requisiti che ti dice cosa fornire prima di creare il brand, che è il passaggio a pagamento.

Prossimi passi

Risorse correlate

Prosegui con la documentazione, le guide e gli esempi per questo argomento. Le risorse sono in inglese.