Sign inGet started

Migracja SMS z Sinch

Ta strona mapuje SMS API, grupy i raporty doręczeń z Sinch na Bird. Wykonuj główny przewodnik migracji po kolei, a tych mapowań użyj w krokach 3, 4 i 5.
Dwie różnice strukturalne kształtują tę migrację i obie kosztują więcej niż same zmiany nazw pól. Sinch identyfikuje wysyłkę po planie usługowym w ścieżce URL i wysyła batch, więc jedna wiadomość do jednej osoby to wciąż tablica; POST /v1/sms/messages w Bird przyjmuje jednego odbiorcę na Twoim regionalnym hoście z kluczem bearer i bez segmentu planu. Rejestracja w USA, której nie możesz pominąć, jest na innym hoście niż wysyłka, za inną rodziną poświadczeń, więc kod, który kontaktuje się z Sinch w obu celach, trafia w dwa miejsca.

Przekaż to swojemu agentowi

Użyj tego opisu w swoim agencie kodującym. Zaczyna od rozpoznania i tworzy plan migracji do przeglądu, zanim cokolwiek zmieni się na produkcji.
Przykład kodu
Help me migrate my SMS integration from Sinch 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/sinch.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 Sinch 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 robiSinchBird
Odbiorcato (tablica lub ID grupy)to (jeden na żądanie)
Nadawcafromfrom
Treśćbodytext
Routing kontaplan usługowy, w ścieżce URLklucz bearer; bez segmentu ścieżki
Intencja(brak)category, wymagane dla dowolnego tekstu
Raportowanie doręczeńdelivery_report + callback_url, per batchwebhook obszaru roboczego; brak kontroli per wysyłkę
Korelacjaclient_referencemetadata, zwracane w każdym zdarzeniu
Filtrowalne etykiety(brak)pary tags: {name, value}
Bezpieczne ponawianie(brak w dokumentacji)nagłówek Idempotency-Key
Flashflash_messagebrak odpowiednika
Uwagi do migracji:
  • Świadomie wybierz pojedynczą wysyłkę, batch lub broadcast. to w Sinch jest tablicą, a tutaj pojedynczym numerem, więc używaj pojedynczych wysyłek albo endpointu batch dla maksymalnie 100 niezależnych wiadomości. Kampania do grupy odbiorców należy do workflow broadcast. Batch, który wskazywał grupę, wymaga najpierw rozwiązania członkostwa; zobacz sekcję o rezygnacjach, bo to ten sam problem.
  • body staje się text. To jedyna zmiana nazwy, która dotyczy każdego miejsca wywołania.
  • client_reference nie jest kluczem idempotentności. Sinch definiuje go jako identyfikator dodawany do raportu doręczenia batcha, więc koreluje, ale nie deduplikuje. Jeśli polegałeś na nim, żeby ponowienie było bezpieczne, nie byłeś chroniony; tutaj robi to Idempotency-Key.
  • Nic nie odpowiada category. Zdecyduj per typ wiadomości, czy to transactional, marketing, authentication czy service.

Przenieś rezygnacje

Sinch rejestruje, kto jest zapisany, a Bird potrzebuje wiedzieć, kto zrezygnował. Ta inwersja to właściwa praca.
Sinch zarządza odbiorcami jako grupami, a grupa może się automatycznie aktualizować na podstawie słów kluczowych: subskrybent, który wyśle STOP, jest usuwany z grupy, a subskrybent, który wyśle SUBSCRIBE, jest dodawany. Rezygnacja jest więc zakodowana jako nieobecność na liście, a nie obecność na niej, a nieobecności nie da się wyeksportować: numer, którego brak w grupie, mógł zrezygnować, mógł nigdy nie dołączyć albo mógł zostać usunięty importem sześć miesięcy temu.
Odtwórz dane zamiast je eksportować. Twój własny log wiadomości przychodzących jest wiarygodnym źródłem, bo część rezygnacji rozpoczęła się jako wiadomości przychodzące, a inne przyszły przez wsparcie, formularze lub inny kanał preferencji, i te wiadomości istnieją niezależnie od tego, co teraz mówi członkostwo w grupie. Jeśli oprócz grupy trzymałeś własną flagę rezygnacji, ta flaga jest lepszym dowodem niż członkostwo. Przekaż odtworzoną listę do pętli wyciszeń i pokaż ją osobie odpowiedzialnej za konto przed importem: błędny wpis tutaj po cichu zatrzymuje wiadomości, które zamierzałeś wysłać.
Wyciszenie w Bird to jedna para nadawca–subskrybent, więc subskrybent wyciszony u trzech nadawców to trzy rekordy. Odczyt i zarządzanie wyciszeniami zawiera polecenie oraz wyjaśnia, dlaczego ręczne wyciszenie blokuje każdą kategorię, łącznie z transakcyjną.
Od tego momentu Bird samodzielnie odpowiada na słowa kluczowe stop z własnego katalogu per kraj, więc automatyczna aktualizacja grupy nie ma odpowiednika do odtworzenia: subskrybent, który wyśle STOP, tworzy wyciszenie bez udziału Twojej aplikacji. Powody się kumulują, a nie zastępują, więc para zaimportowana jako manual, która później wyśle STOP, ma dwa rekordy i wiadomości pozostają wstrzymane, dopóki oba się nie zakończą.

Przetłumacz statusy doręczeń

Użyj tej tabeli do porównania koncepcji cyklu życia, a nie do mechanicznej zamiany nazw zdarzeń. Bird wybiera zdarzenie błędu na podstawie zgłoszonego statusu i powodu. Odrzucone żądanie API nie tworzy wiadomości; odrzucenie po akceptacji może wygenerować sms.rejected, w tym odrzucenie przez operatora. Brak dowodu doręczenia pozostaje nieznany. Zachowaj surowy status i kod dostawcy obok znormalizowanego wyniku.
Referencja raportów doręczeń Sinch obejmuje statusy queued, dispatched, delivered i kilka odrębnych końcowych stanów błędu. Zachowaj kod i status na poziomie odbiorcy podczas translacji raportowania.
Koncepcja SinchDecyzja integracyjna Bird
Queued / DispatchedŚledź akceptację i przekazanie do operatora osobno za pomocą sms.accepted i sms.sent.
DeliveredRejestruj wynik sieciowy przez sms.delivered; nie dowodzi odczytania.
Failed / Rejected / DeletedSprawdź zgłoszony powód. Zdarzenia błędu Bird nie są wybierane przez prostą zamianę nazw.
Aborted / Expired / CancelledZachowaj przyczynę i etap. Pojedyncza wysyłka API w Bird nie ma timera harmonogramu ani ważności, który odtworzyłby te mechanizmy.
UnknownPozostaw wynik jako niepewny; nie traktuj braku interpretowalnego potwierdzenia jako doręczenia.
sms.expired w Bird następuje po raporcie wygaśnięcia od operatora. Przeanalizuj istniejące zachowanie wygaśnięcia i anulowania osobno od tego zdarzenia, zamiast mapować każdy timeout na nie.
Statusy pośrednie są raportowane tylko wtedy, gdy batch zażądał raportowania per_recipient, co jest częścią tego, co zmienia się poniżej.
Tracisz kontrolę raportowania doręczeń per wysyłkę i warto powiedzieć to wprost. Batch Sinch wybiera własną granularność raportu i może nadpisać callback URL planu usługowego dla tej jednej wysyłki. Bird nie ma żadnego z tych mechanizmów: raportowanie to subskrypcja obszaru roboczego, każde subskrybowane zdarzenie jest dostarczane i nie ma nadpisania per wiadomość. Jeśli używałeś delivery_report, żeby wyciszyć głośne kampanie, to filtrowanie przenosi się do Twojego handlera. Jeśli kierowałeś raporty jednej kampanii na inny endpoint, teraz to jeden endpoint plus rozgałęzienie albo druga subskrypcja.
Zarejestruj endpoint raz, podając typy zdarzeń, które chce obsługiwać Twój handler: zdarzenia sms.* wymienione powyżej to lista do subskrypcji i nie ma wildcard, który je zastępuje. Bird wysyła JSON podpisane zgodnie ze Standard Webhooks; Utwórz endpoint zawiera polecenie i jedną rzecz do poprawnego wykonania przy pierwszym wywołaniu, czyli zapisanie sekretu podpisu, który odpowiedź pokazuje dokładnie raz.
Bird raportuje błąd ze standardowym kodem error, takim jak invalid_destination, content_rejected, provider_unavailable lub recipient_opted_out; pełna lista znajduje się na stronie zdarzeń.

Przełączenie

Destynacje, nadawcy i rampa ruchu są niezależne od dostawcy i opisane w głównym przewodniku. Dwa elementy specyficzne dla Sinch należy umieścić w planie przełączenia.
Twoja marka i kampania 10DLC są zarejestrowane w The Campaign Registry przez Sinch i nie stają się automatycznie rejestracjami Bird. Potwierdź właściwą procedurę migracji lub rejestracji, zanim zlecisz płatne prace. Tu właśnie integracja się upraszcza. W Sinch API rejestracji jest na osobnym hoście od wysyłki i używa poświadczeń projektu zamiast tokenu planu usługowego, a własna dokumentacja Sinch mówi, że HTTP Basic jest przeznaczony tylko do celów testowych i ma silne ograniczanie liczby żądań, więc integracja produkcyjna buduje przepływ tokenów OAuth. W Bird /v1/sms/10dlc/* znajduje się obok /v1/sms/messages pod jednym bazowym URL i jednym kluczem, więc ten cykl życia tokenów jest wycofywany, a nie przenoszony. Zacznij od Rejestracja 10DLC, która opisuje znaczenie każdego pola i wywołanie requirements, które mówi, co podać, zanim utworzysz markę, bo to jest krok płatny.
Numery, które posiadasz w Sinch, wymagają przeniesienia, które organizuje wsparcie, według własnego harmonogramu, nie Twojego.

Następne kroki

Powiązane zasoby

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