Migracja SMS z Twilio
Ta strona mapuje API Programmable Messaging, Messaging Services i callbacki statusów Twilio na Bird. Postępuj zgodnie z głównym przewodnikiem migracji po kolei i używaj tych mapowań do kroków 3, 4 i 5.
Dwie różnice kształtują całą migrację. POST /2010-04-01/Accounts/{AccountSid}/Messages.json Twilio przyjmuje zakodowane formularzowo parametry PascalCase uwierzytelniane za pomocą Account SID i Auth Token; POST /v1/sms/messages przyjmuje JSON uwierzytelniane kluczem bearer API wobec Twojego regionalnego hosta. Ponadto Twilio Messaging Service może łączyć wybór nadawcy, obsługę rezygnacji z subskrypcji i konfigurację callbacków. Zmapuj każde zachowanie osobno na odpowiedzialny element Bird; zamiana SID na wartość nadawcy nie zachowuje całej usługi.
Przekaż to swojemu agentowi
Użyj tego briefu w swoim agencie kodującym. Zaczyna on od odkrywania i tworzy plan migracji do przeglądu przed jakąkolwiek zmianą na produkcji.
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 platform support 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.Zmapuj wywołanie wysyłki
| Co robi | Twilio | Bird |
|---|---|---|
| Odbiorca | To | to (jeden na żądanie) |
| Nadawca | From lub MessagingServiceSid | from |
| Treść | Body | text |
| Szablon treści | ContentSid + ContentVariables | przejrzyj treść osobno; szablony systemowe Bird nie są importem Twilio Content |
| Intencja | (brak) | category, wymagane dla tekstu swobodnego |
| Etykiety filtrujące | (brak) | pary tags: {name, value} |
| Kontekst dwukierunkowy | własny magazyn, indeksowany SID-em | metadata: dowolny JSON, zwracany w każdym zdarzeniu |
| Raporty dostarczenia | StatusCallback | webhook obszaru roboczego subskrybujący poniższe zdarzenia dostarczenia |
| Transliteracja | SmartEncoded | options.smart_encoding (domyślnie false) |
| Bezpieczne ponowienia | (brak w Messages) | nagłówek Idempotency-Key |
| Planowanie | ScheduleType + SendAt | brak odpowiednika: scheduled_at jest odrzucane |
| Media | MediaUrl | brak odpowiednika: media_urls jest odrzucane |
| Ważność | ValidityPeriod | brak odpowiednika: validity_period jest odrzucane |
| Skracanie linków | ShortenUrls | brak odpowiednika |
Trzy odrzucone pola są zarezerwowane i odpowiadają na 422 SMSUnsupportedFeature. Na razie zostaw planowanie i obsługę mediów tam, gdzie są.
Uwagi dotyczące portowania:
- Odwzoruj zachowania Messaging Service osobno. Twilio na podstawie SID-u ustala pulę nadawców, sticky sender i geomatch. Bird przyjmuje samego nadawcę w
from, więc wybierz nadawcę dla każdej wysyłki albo użyj wysyłki szablonowej, która wybiera prawidłowego nadawcę dla destynacji i odrzucafrom. - Limit znaków staje się limitem segmentów. Długości wychodzą podobnie dla tekstu GSM-7, ale obsługa błędu już nie: Bird nigdy nie obcina tekstu, więc zbyt długa treść jest odrzucana z
422zamiast przycinana. - Nic w API Messages nie odpowiada
category. Zdecyduj dla każdego typu wiadomości, czy jest totransactional,marketing,authenticationczyservice. W szczególności oznacz ruch uwierzytelniający jako taki, zamiast zostawiać go z domyślną wartością marketingową. - Testowe dane uwierzytelniające Twilio mapują się na symulowane destynacje. Magiczne numery, z którymi już testujesz, w tym
+15005550006i+15005550001, również tutaj generują syntetyczne wyniki, z dwiema różnicami: nie ma oddzielnych testowych danych uwierzytelniających, a wysyłki są rozliczane. Wyniki są wymienione w głównym przewodniku.
Przenieś rezygnacje z subskrypcji
Twilio może ograniczyć rezygnację z subskrypcji do numeru lub Messaging Service. Żądanie obejmujące cały serwis może dotyczyć wielu nadawców. Zachowaj ten zasięg podczas importu do suppresji dla par nadawca-subskrybent w Bird lub użyj odpowiedniej preferencji obszaru roboczego, jeśli żądanie rzeczywiście dotyczy całego obszaru roboczego.
Dokumentacja Advanced Opt-Out Twilio mówi, że raportowanie zablokowanych numerów nie jest dostępne przez konsolę ani REST API. Zamów eksport przez dostępny proces wsparcia i uzgodnij go z własnymi rekordami preferencji, logami wiadomości przychodzących i zgłoszeniami. Sam log słów kluczowych może być niekompletny.
Zaimportuj przejrzany wynik przez workflow suppresji. Ręczna suppresja blokuje każdą kategorię dla danej pary, więc sprawdź zamierzony zakres, zamiast po cichu go zawężać lub rozszerzać.
21610 Twilio sygnalizuje odbiorcę, który zrezygnował z subskrypcji. W Bird para objęta suppresją jest odrzucana na etapie przyjmowania z E12077 SMSRecipientSuppressed, zanim wiadomość powstanie. Błąd dostarczenia recipient_opted_out zgłasza natomiast rezygnację na dalszym etapie dostarczania. Sprawdź pokrycie słów kluczowych w Bird, zanim wycofasz istniejący handler, i zachowaj mechanizmy rezygnacji spoza wbudowanego katalogu.
Przetłumacz statusy dostarczenia
Używaj tej tabeli do porównywania koncepcji cyklu życia, a nie do mechanicznego zmieniania nazw zdarzeń. Bird wybiera zdarzenie błędu na podstawie zgłoszonego statusu i przyczyny. Odrzucone żądanie API nie tworzy wiadomości; odrzucenie po zaakceptowaniu może wywołać sms.rejected, w tym odrzucenie przez operatora. Bez potwierdzenia dostarczenia wynik pozostaje nieznany. Zachowaj surowy status i kod dostawcy obok znormalizowanego wyniku.
| Wynik | Twilio MessageStatus | Bird |
|---|---|---|
| API zaakceptował wiadomość | queued, accepted | sms.accepted |
| Przekazano operatorowi | sending, sent | sms.sent |
| Operator potwierdził dostarczenie | delivered | sms.delivered |
| Operator zgłosił niedostarczenie | undelivered | sms.undelivered |
| Błąd trwały | failed | sms.failed |
| Żądanie odrzucone na etapie przyjmowania | błąd żądania | błąd HTTP; brak wiadomości i zdarzenia |
| Okno ważności wygasło | (brak) | sms.expired |
| Zaplanowane lub anulowane | scheduled, canceled | na razie brak odpowiednika |
Trzy mechanizmy zmieniają się wraz z nazwami:
- Endpointy zastępują callback URL. Twilio wysyła żądania na
StatusCallbackwiadomości lub Messaging Service. Bird dostarcza do endpointów zarejestrowanych w Twoim obszarze roboczym, z których każdy jest subskrybowany na wybrane typy zdarzeń, więc nowy konsument to nowa subskrypcja, a nie ponowne wdrożenie. - Podpisany JSON zastępuje posty zakodowane formularzowo. Twilio wysyła
application/x-www-form-urlencodedz nagłówkiemX-Twilio-Signature; Bird wysyła JSON podpisane zgodnie ze Standard Webhooks. Zamień weryfikację na przepis z Webhooks & events. - Wiadomości przychodzące docierają jako zdarzenia. Webhook "A message comes in" per numer w Twilio oczekuje odpowiedzi TwiML, której Twoja aplikacja może użyć do automatycznej odpowiedzi. Bird emituje
sms.receivedna ten sam subskrybowany endpoint co wszystko inne i nie ma treści odpowiedzi, która wysyłałaby wiadomość zwrotną: odpowiedz, wywołując endpoint wysyłki, albo pozwól regułom słów kluczowych odpowiedzieć za Ciebie.
Zarejestruj endpoint raz, podając typy zdarzeń, których oczekuje Twój handler: zdarzenia sms.* w powyższej tabeli to lista do subskrybowania i nie ma symbolu zastępczego, który je reprezentuje. Utwórz endpoint zawiera polecenie, wyjaśnia, dlaczego katalog musi być wyliczony, oraz wskazuje jedną rzecz, którą musisz zrobić dobrze przy pierwszym wywołaniu: zapisanie sekretu podpisującego, który odpowiedź pokazuje dokładnie raz.
Numeryczne kody błędów Twilio nie mają mapowania jeden do jednego. Bird raportuje błąd ze standaryzowanym kodem error, takim jak invalid_destination, content_rejected, provider_unavailable lub recipient_opted_out; pełna lista jest na stronie zdarzeń. Zmapuj swoje alerty na te kody, a nie na kody z zakresu 30000.
Przełączenie
Destynacje, nadawcy i rampa ruchu są niezależne od dostawcy i opisane w głównym przewodniku. Dwa elementy specyficzne dla Twilio należy umieścić w planie przełączenia: Twoja marka i kampania 10DLC są zarejestrowane w The Campaign Registry przez Twilio i nie stają się automatycznie rejestracjami Bird. Potwierdź właściwą procedurę migracji lub rejestracji przed zleceniem płatnych prac. Numery, które posiadasz w Twilio, wymagają portu organizowanego przez wsparcie, według harmonogramu wsparcia, a nie Twojego.
Aby poznać wymagania po stronie Bird, zacznij od Rejestracja na 10DLC: opisuje, co oznacza każde pole, jakie typy podmiotów rozpoznaje rejestr i jakie jest wywołanie wymagań, które powie Ci, co dostarczyć, zanim utworzysz markę, czyli krok płatny.
Następne kroki
-
Porównanie Bird i Twilio dla SMS: ocena produktu i kwestie migracyjne
-
Wysyłanie SMS: pełny payload, na który portujesz
-
Rezygnacje i słowa kluczowe: pokrycie słów kluczowych w poszczególnych krajach i zarządzanie suppresjami
-
Zdarzenia SMS: słownik zdarzeń, na który przechodzi Twój handler statusów
-
Webhooks & events: konfiguracja endpointów i weryfikacja Standard Webhooks
Powiązane zasoby
Przejdź do dokumentacji, przewodników i przykładów dotyczących tego tematu.