Sign inGet started

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ły port. 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. A Twilio Messaging Service może łączyć w sobie wybór nadawcy, obsługę rezygnacji z subskrypcji i konfigurację callbacków. Zmapuj każde zachowanie osobno do właściciela Bird; zmiana nazwy SID na wartość nadawcy nie zachowuje całego serwisu.

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.
Przykład kodu
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.

Zmapuj wywołanie wysyłki

Co robiTwilioBird
OdbiorcaToto (jeden na żądanie)
NadawcaFrom lub MessagingServiceSidfrom
TreśćBodytext
Szablon treściContentSid + ContentVariablesprzejrzyj 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 dwukierunkowywłasny magazyn, indeksowany SID-emmetadata: dowolny JSON, zwracany w każdym zdarzeniu
Raporty dostarczeniaStatusCallbackwebhook obszaru roboczego subskrybujący poniższe zdarzenia dostarczenia
TransliteracjaSmartEncodedoptions.smart_encoding (domyślnie false)
Bezpieczne ponowienia(brak w Messages)nagłówek Idempotency-Key
PlanowanieScheduleType + SendAtbrak odpowiednika: scheduled_at jest odrzucane
MediaMediaUrlbrak odpowiednika: media_urls jest odrzucane
WażnośćValidityPeriodbrak odpowiednika: validity_period jest odrzucane
Skracanie linkówShortenUrlsbrak 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:
  • Rozwiąż zachowania Messaging Service osobno. Twilio rozwiązuje pulę nadawców, sticky sender i geomatch za SID-em. Bird przyjmuje samego nadawcę w from, więc wybierz nadawcę na każdą wysyłkę albo użyj wysyłki szablonowej, która wybiera prawidłowego nadawcę dla destynacji i odrzuca from.
  • 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 422 zamiast przycinana.
  • Nic w API Messages API nie odpowiada category. Zdecyduj dla każdego typu wiadomości, czy jest to transactional, marketing, authentication czy service. Ruch uwierzytelniający w szczególności powinien być oznaczony odpowiednio, a nie pozostawiony z domyślną wartością marketingową.
  • Dane testowe Twilio mapują się na symulowane destynacje. Magiczne numery, z którymi już testujesz, w tym +15005550006 i +15005550001, również tutaj generują syntetyczne wyniki, z dwiema różnicami: nie ma oddzielnych danych testowych, 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 obejmować wielu nadawców. Zachowaj ten zasięg podczas importu do supresji nadawca-subskrybent w Bird lub użyj odpowiedniej preferencji obszaru roboczego dla żądania obejmującego cały obszar roboczy.
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 supresji. Ręczna supresja 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 suppresowana para jest odrzucana na etapie przyjmowania z E12077 SMSRecipientSuppressed, zanim wiadomość istnieje. Błąd dostarczenia recipient_opted_out raportuje natomiast rezygnację po stronie operatora. Sprawdź pokrycie słów kluczowych Bird przed wycofaniem istniejącego handlera 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. Brak potwierdzenia dostarczenia pozostaje nieznany. Zachowaj surowy status i kod dostawcy obok znormalizowanego wyniku.
WynikTwilio MessageStatusBird
API zaakceptował wiadomośćqueued, acceptedsms.accepted
Przekazano operatorowisending, sentsms.sent
Operator potwierdził dostarczeniedeliveredsms.delivered
Operator zgłosił niedostarczenieundeliveredsms.undelivered
Błąd trwałyfailedsms.failed
Żądanie odrzucone na etapie przyjmowaniabłąd żądaniabłąd HTTP; brak wiadomości i zdarzenia
Okno ważności wygasło(brak)sms.expired
Zaplanowane lub anulowanescheduled, canceledbrak odpowiednika
Trzy mechanizmy zmieniają się wraz z nazwami:
  • Endpointy zastępują callback URL. Twilio wysyła żądania na StatusCallback wiadomoś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-urlencoded z nagłówkiem X-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órą Twoja aplikacja może użyć do automatycznej odpowiedzi. Bird emituje sms.received na ten sam subskrybowany endpoint co wszystko inne i nie ma treści odpowiedzi, która wysyłałaby reply: 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 ich harmonogramu, 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

Powiązane zasoby

Kontynuuj z dokumentacją, przewodnikami i przykładami dotyczącymi tego tematu. Zasoby są w języku angielskim.