Sign inGet started

Migrare SMS da Bandwidth

Questa pagina mappa l'API Messages di Bandwidth, le Application e i callback dei messaggi 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'intera migrazione. Bandwidth divide il canale su due host: l'invio risiede sull'host di messaggistica sotto il percorso del tuo account, autenticato tramite HTTP Basic, mentre la registrazione 10DLC risiede sull'host API principale. Bird riunisce invio, registrazione ed eventi di consegna sotto un unico URL base e un'unica chiave bearer. E l'applicationId presente su ogni invio Bandwidth contiene la configurazione dei callback; Bird non ha un oggetto equivalente, perché i callback sono una sottoscrizione dello spazio di lavoro e non una proprietà del messaggio.

Passa questo al tuo agente

Usa questo brief nel tuo agente di codifica. Parte dalla 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 Bandwidth 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 the Markdown guides at https://bird.com/docs/guides/sms/migrate/bandwidth.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 Bandwidth 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

FunzioneBandwidthBird
Destinatarioto (array)to (uno per richiesta)
Mittentefromfrom
Corpotexttext
Routing dei callbackapplicationIdun webhook dello spazio di lavoro sottoscritto agli eventi di consegna sotto
Intent(nessuno)category, obbligatorio per il testo libero
Etichetta liberatag (una stringa)metadata; tags solo se puoi dargli un nome
Contesto round-tripun tuo store, indicizzato per IDmetadata: JSON arbitrario, ripetuto su ogni evento
Priorità di consegnaprioritynessun equivalente
Riprovare in sicurezza(nessuno nella loro specifica)header Idempotency-Key
Mediamedianessun equivalente: media_urls viene rifiutato
Note sulla migrazione:
  • to passa da un array a un singolo destinatario. Bandwidth accetta una lista; Bird invia un messaggio per richiesta. Un ciclo sostituisce l'array e ogni chiamata può portare il proprio Idempotency-Key.
  • L'applicationId scompare invece di spostarsi. Serve a indicare a Bandwidth dove inviare i callback. Su Bird è una sottoscrizione dello spazio di lavoro, quindi nulla nell'invio lo referenzia.
  • tag e tags non sono lo stesso campo. Il tag di Bandwidth è una singola stringa libera; i tags di Bird sono coppie {name, value} che diventano dimensioni di query. Una singola stringa opaca si trasporta meglio in metadata.
  • Nulla nell'API Messages corrisponde a category. Decidi per ogni tipo di messaggio se è transactional, marketing, authentication o service.

Trasferire gli opt-out

Non esiste una lista da esportare, e questa è la conclusione, non una lacuna di questa guida.
Al di fuori del toll-free, Bandwidth non gestisce liste di opt-in o opt-out per te. La loro stessa documentazione lo dice chiaramente: l'onere di rispettare i comandi e mantenere le liste ricade sul cliente. Il toll-free è l'eccezione, dove STOP e le sue varianti sono applicate a livello di rete indipendentemente dalla tua configurazione; i long code e gli short code non hanno questo trattamento.
Quindi in questa migrazione la lista autorevole è già tua. È una tabella, un flag su un record di contatto o un controllo che il tuo percorso di invio esegue prima di chiamare l'API, e il primo compito è decidere quale di queste fonti è autorevole anziché richiedere un'esportazione a qualcuno. Il tuo log dei messaggi in entrata è il fallback: alcuni opt-out sono nati come messaggi in entrata, mentre altri sono arrivati tramite supporto, moduli o un altro canale di preferenza.
Poi importa attraverso il ciclo di soppressione. Una soppressione Bird è una coppia mittente-iscritto, quindi un iscritto che hai bloccato su tre mittenti corrisponde a tre record. Leggere e gestire le soppressioni contiene il comando e la ragione per cui una soppressione manuale blocca ogni categoria, inclusa quella transazionale.
Decidi chi possiede la lista dopo il cutover, perché qui guadagni qualcosa e puoi perderne traccia. Bird risponde alle keyword di stop dal proprio catalogo per paese, quindi quando inizi a inviare da qui la piattaforma gestisce le soppressioni per te: un iscritto che invia STOP produce un record con reason keyword_stop senza che la tua applicazione faccia nulla. Se il tuo codice mantiene una propria lista e continua ad applicarla, le due divergono, e il sintomo più comune è un iscritto che ha ripreso su un lato ma non sull'altro. Mantieni esplicito chi possiede le preferenze dell'audience e sincronizza le modifiche rilevanti in modo deliberato. Le soppressioni per mittente da sole non coprono le preferenze a livello di spazio di lavoro né le richieste al di fuori del catalogo di keyword. Le reason si accumulano anziché fondersi, quindi una coppia importata come manual che in seguito invia STOP produce due record, e i messaggi restano bloccati fino a quando entrambi sono terminati.

Tradurre gli stati di consegna

Usa questa tabella per confrontare i concetti del ciclo di vita, non per rinominare gli eventi meccanicamente. Bird sceglie un evento di errore in base allo stato e alla reason 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 accanto al tuo esito normalizzato.
EsitoTipo di callback BandwidthBird
API ha accettato il messaggiola risposta 202, nessun eventosms.accepted
Consegnato al carriermessage-sentsms.sent
Il carrier ha confermato la consegnamessage-deliveredsms.delivered
Non ha mai raggiunto il carriermessage-failedsms.rejected
Il carrier l'ha rifiutatomessage-failedsms.failed
Il carrier ha segnalato la mancata consegnamessage-failedsms.undelivered
Il carrier ha rinunciatomessage-failedsms.expired
Richiesta rifiutata in ammissioneerrore della richiestaerrore HTTP; nessun messaggio o evento
Due aspetti di questa tabella meritano un'azione, non una semplice lettura.
Ricostruisci la gestione degli stati terminali attorno al record del messaggio e ai timestamp degli eventi di Bird. Le consegne dei webhook possono ripetersi o arrivare fuori ordine; il tuo consumer non deve assumere una sola consegna di un unico callback finale. Uno stato di rifiuto e uno stato di consegna fallita possono selezionare eventi Bird diversi anche quando entrambi hanno avuto origine a valle.
message-sending non ha una riga perché è solo MMS, e message-read è solo RBM; nessuno dei due si attiva per SMS.
Due meccanismi cambiano insieme ai nomi:
  • Le sottoscrizioni sostituiscono l'Application. Bandwidth instrada i callback in base all'applicationId indicata nel messaggio. Bird consegna a endpoint registrati nel tuo spazio di lavoro, ciascuno sottoscritto ai tipi di evento desiderati, quindi un nuovo consumer è una nuova sottoscrizione anziché una nuova Application e un redeploy.
  • Standard Webhooks sostituisce la loro autenticazione dei callback. Bird invia JSON firmati secondo Standard Webhooks; sostituisci la verifica con la procedura in Webhooks & events.
Registra l'endpoint una sola volta, indicando i tipi di evento che il tuo handler vuole ricevere: gli eventi sms.* elencati sopra sono la lista a cui sottoscriverti, e non esiste un wildcard che li sostituisca. Creare un endpoint contiene il comando e l'unica cosa da fare bene alla prima chiamata, ovvero salvare il signing secret che la risposta mostra una sola volta.

Cutover

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

Passi successivi

Risorse correlate

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