# Migrate RCS from Sinch to Bird

Move the customer workflow as well as its send request. Keep the existing service available while your Bird agent, receiving handler and alternate route are tested with the same appointment or order scenario.

## Map the current integration

Sinch configures an RCS channel on a Conversation API app and accepts a contact ID or channel identity for the recipient. Inventory those objects using its [RCS setup reference](https://developers.sinch.com/docs/conversation/channel-support/rcs/set-up), then create the corresponding Bird sender and recipient mapping:

| Current dependency                               | Bird implementation                                                                                                                                       |
| ------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Conversation API app and RCS channel credentials | Bird workspace, installed RCS channel and authorized access key. Configure the business identity and launch markets for the receiving agent.              |
| Contact ID / RCS channel identity                | Resolve the same customer to Bird's `receiver.contacts` using `identifierKey: "phonenumber"` and the E.164 `identifierValue`, or a saved Bird contact ID. |
| Native card / carousel content                   | Build a Channels API `carousel` body with one or multiple items. Map titles, descriptions, media and actions explicitly.                                  |
| Saved message/conversation IDs                   | Retain the old IDs with the customer record. Save the new Bird message `id` and application `reference` for each new task.                                |
| Published content                                | Create and publish a Bird template; direct-channel sends use `template` instead of `body`.                                                                |

Sinch's [message-support reference](https://developers.sinch.com/docs/conversation/channel-support/rcs/message-support) distinguishes native message types from transcoded ones. Review the types your application actually sends, including any channel-specific overrides. Bird's [RCS sending reference](/docs/engagement-platform/api/channels-api/supported-channels/programmable-rcs/sending-messages) defines its receiving payload; changing only the URL or credential does not translate a Conversation API message.

## Build one native exchange

Run [your first RCS message](/docs/get-started/send-your-first-rcs-message) using Node.js, Python or cURL. Test the card, URL action and postback on your own handset. Rebuild a second, multi-card selection with the [rich-message examples](/docs/guides/rcs/rich-messages).

Map the response processing at its owning boundary:

| Sinch response path                                                                  | Bird response path                                                                              |
| ------------------------------------------------------------------------------------ | ----------------------------------------------------------------------------------------------- |
| `MESSAGE_INBOUND` containing `contact_message.choice_response_message.postback_data` | `rcs-google.inbound` message with the selected value in `body.text.actions[].postback.payload`. |
| `MESSAGE_DELIVERY` with `DELIVERED`                                                  | Message status `delivered`; preserve the transport message ID.                                  |
| `MESSAGE_DELIVERY` with `READ`                                                       | A separate message interaction of type `read`.                                                  |
| `MESSAGE_DELIVERY` with `FAILED` and a reason                                        | Inspect Bird's `sending_failed` or `delivery_failed` and its failure details.                   |

These Sinch fields are documented in its [RCS inbound and receipt examples](https://developers.sinch.com/docs/conversation/channel-support/rcs/message-support). Verify Bird notification signatures, deduplicate message/interaction IDs, and translate the selected payload into your saved application task. If both a click and an inbound reply describe the same choice, one handler owns the business action.

## Test channel selection

Sinch's [channel priority rules](https://developers.sinch.com/docs/conversation/channel-support/prioritize-channels) can try an existing conversation's active channel before contact preferences and application priority. Record your actual overrides and fallback content before changing that behavior.

A Bird channel send chooses that channel. A [Bird Navigator](/docs/guides/rcs/capability-and-fallback) owns a configured delivery chain: ordered `ottChannels`, launch-country scope, SMS senders and per-platform templates. Set that order explicitly and inspect coverage. Carry the relevant opt-outs into each platform before enrolling it.

Test a supported RCS recipient, a definite RCS reach failure followed by eligible SMS, and an opted-out contact whose chain stops. Read the navigator's overall status alongside `navigatorData.attempts`. Then test a delayed or lost response: your application should reconcile the existing send, not start another fallback chain.

## Move and reconcile traffic

Assign a bounded audience to Bird and keep one sending owner per appointment or order. Retain both provider handlers while earlier messages can still return replies. A customer responding to an older message must reach the current application record even after new traffic has moved.

Compare native RCS delivery, complete navigator delivery, received choices and completed business actions separately. Stop assigning new work to a failing route while inspecting its outstanding attempts; switching routing does not undo accepted sends. Keep each provider's identifiers with the original records needed for support.

- [Compare Bird and Sinch](/products/rcs/compare/bird-vs-sinch)
- [RCS migration index](/docs/guides/rcs/migrate)
- [Troubleshoot results](/docs/guides/rcs/troubleshooting)
- [RCS resources](/rcs/resources)
- [Explore RCS](/rcs-business-messaging)

## Related resources

- [What Is RCS for Business?](/explained/rcs/what-is-rcs-messaging) (answer)

[Get an implementation brief](/learn/workspace?topic=rcs)
