When to use
Use this when you need to deliver Rich Communication Services (RCS) messages to Android
handsets through Twilio's RCS Business Messaging (RBM): branded sender, verified logo,
rich cards, horizontal carousels, and tappable suggested replies/actions (dial, open URL,
share location, calendar). RCS gives read receipts and typing indicators that SMS cannot.
You also use it when you want a single send that gracefully degrades: if the destination
handset or carrier does not support RCS, Twilio falls back to SMS/MMS on the same
Messaging Service.
Not for: authoring or approving the reusable templates themselves (see
twilio-content-template-builder); WhatsApp interactive templates (see
twilio-whatsapp-messaging); plain SMS/MMS-only campaigns where no RCS sender exists.
Method
- Register and verify an RBM agent with Google through the Twilio Console (RCS sender).
Provide brand name, logo, colors, description, and contact info. Verification is a
Google-side review and can take days to weeks. Test devices can be allow-listed for
pre-launch testing before full verification.
- Create a Messaging Service and add your RCS sender to its sender pool. Add an SMS
number to the same pool so fallback has a route.
- Decision point: rich content or plain text? For plain text, send a normal message body
through the Messaging Service. For rich cards/carousels/suggested actions, author a
Content template (twilio/card, twilio/carousel, twilio/quick-reply,
twilio/call-to-action) and send by ContentSid.
- Decision point: SMS fallback required? If yes, ensure the Messaging Service has an SMS
sender; Twilio auto-falls-back when the handset is not RCS-capable. RCS-only content
(carousels) degrades to text/media on SMS.
- Send: POST to Messages with MessagingServiceSid + To + ContentSid (+ ContentVariables).
Do not set From when using a Messaging Service.
- Handle inbound: configure the Messaging Service inbound webhook to receive user taps
on suggested replies (postback data) and free-text replies.
- Track delivery via StatusCallback: queued, sent, delivered, read (RCS only), failed,
undelivered. A
read status confirms RCS delivery; its absence implies SMS fallback.
Example
from twilio.rest import Client
client = Client(account_sid, auth_token)
# Send an RCS card template; auto-falls back to SMS if handset is not RCS-capable.
msg = client.messages.create(
messaging_service_sid="MGxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
to="+15551234567",
content_sid="HXxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", # twilio/card content
content_variables='{"1": "Ada", "2": "ORD-4417"}',
)
print(msg.sid, msg.status)
Pitfalls
- RBM agent verification is gated by Google, not Twilio; nothing sends to real users until
verified. Use test devices during build.
- Do not pass both
From and MessagingServiceSid; RCS + fallback routing requires the
Messaging Service to pick the sender.
read status is RCS-only. SMS never reports read; do not treat missing read as failure.
- Carousels require 2-10 cards; a 1-card carousel is rejected. Suggested actions cap at 4
per card / 11 per standalone message (Google RBM limits).
- Media in RCS cards must be publicly reachable HTTPS URLs; Twilio fetches them at send.
- RCS is Android-centric. iMessage/iOS RCS interop varies by carrier and region; assume
SMS fallback for iOS unless verified.
Output format
A Message resource (SID starting SM/MM) with a status that transitions through
queued → sent → delivered → (read for RCS). Inbound taps arrive at your webhook as
postback payloads; delivery transitions arrive at your StatusCallback URL.
Reference
- Send endpoint:
POST https://api.twilio.com/2010-04-01/Accounts/{AccountSid}/Messages.json
with MessagingServiceSid, To, and either Body or ContentSid (+ ContentVariables).
- RCS sender + RBM agent are configured under Messaging in the Twilio Console; the agent is
registered/verified with Google RBM.
- Content types usable over RCS:
twilio/text, twilio/media, twilio/quick-reply,
twilio/call-to-action, twilio/list-picker, twilio/card, twilio/carousel.
- Google RBM limits: carousel 2-10 cards; up to 11 suggestions per message, 4 per card;
card media served over HTTPS.
- Status values:
queued, sending, sent, delivered, read (RCS), undelivered,
failed. Fallback to SMS is automatic when the handset is not RCS-capable.
- RCS Business Messaging is billed per RBM message (basic vs single/conversational rates
vary by region and Google's RBM pricing); SMS-fallback segments bill at standard SMS
rates. Confirm current per-message pricing in the Twilio Console before volume sends.
1---2name: twilio-rcs-messaging3description: Send RCS Business Messages through Twilio with rich cards, carousels, and suggested actions, falling back to SMS when RCS is unavailable.4---56## When to use78Use this when you need to deliver Rich Communication Services (RCS) messages to Android9handsets through Twilio's RCS Business Messaging (RBM): branded sender, verified logo,10rich cards, horizontal carousels, and tappable suggested replies/actions (dial, open URL,11share location, calendar). RCS gives read receipts and typing indicators that SMS cannot.12You also use it when you want a single send that gracefully degrades: if the destination13handset or carrier does not support RCS, Twilio falls back to SMS/MMS on the same14Messaging Service.1516**Not for:** authoring or approving the reusable templates themselves (see17twilio-content-template-builder); WhatsApp interactive templates (see18twilio-whatsapp-messaging); plain SMS/MMS-only campaigns where no RCS sender exists.1920## Method21221. Register and verify an RBM agent with Google through the Twilio Console (RCS sender).23 Provide brand name, logo, colors, description, and contact info. Verification is a24 Google-side review and can take days to weeks. Test devices can be allow-listed for25 pre-launch testing before full verification.262. Create a Messaging Service and add your RCS sender to its sender pool. Add an SMS27 number to the same pool so fallback has a route.283. Decision point: rich content or plain text? For plain text, send a normal message body29 through the Messaging Service. For rich cards/carousels/suggested actions, author a30 Content template (twilio/card, twilio/carousel, twilio/quick-reply,31 twilio/call-to-action) and send by ContentSid.324. Decision point: SMS fallback required? If yes, ensure the Messaging Service has an SMS33 sender; Twilio auto-falls-back when the handset is not RCS-capable. RCS-only content34 (carousels) degrades to text/media on SMS.355. Send: POST to Messages with MessagingServiceSid + To + ContentSid (+ ContentVariables).36 Do not set From when using a Messaging Service.376. Handle inbound: configure the Messaging Service inbound webhook to receive user taps38 on suggested replies (postback data) and free-text replies.397. Track delivery via StatusCallback: queued, sent, delivered, read (RCS only), failed,40 undelivered. A `read` status confirms RCS delivery; its absence implies SMS fallback.4142## Example4344```python45from twilio.rest import Client4647client = Client(account_sid, auth_token)4849# Send an RCS card template; auto-falls back to SMS if handset is not RCS-capable.50msg = client.messages.create(51 messaging_service_sid="MGxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",52 to="+15551234567",53 content_sid="HXxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", # twilio/card content54 content_variables='{"1": "Ada", "2": "ORD-4417"}',55)56print(msg.sid, msg.status)57```5859## Pitfalls6061- RBM agent verification is gated by Google, not Twilio; nothing sends to real users until62 verified. Use test devices during build.63- Do not pass both `From` and `MessagingServiceSid`; RCS + fallback routing requires the64 Messaging Service to pick the sender.65- `read` status is RCS-only. SMS never reports `read`; do not treat missing read as failure.66- Carousels require 2-10 cards; a 1-card carousel is rejected. Suggested actions cap at 467 per card / 11 per standalone message (Google RBM limits).68- Media in RCS cards must be publicly reachable HTTPS URLs; Twilio fetches them at send.69- RCS is Android-centric. iMessage/iOS RCS interop varies by carrier and region; assume70 SMS fallback for iOS unless verified.7172## Output format7374A Message resource (SID starting `SM`/`MM`) with a `status` that transitions through75queued → sent → delivered → (read for RCS). Inbound taps arrive at your webhook as76postback payloads; delivery transitions arrive at your StatusCallback URL.7778## Reference7980- Send endpoint: `POST https://api.twilio.com/2010-04-01/Accounts/{AccountSid}/Messages.json`81 with `MessagingServiceSid`, `To`, and either `Body` or `ContentSid` (+ `ContentVariables`).82- RCS sender + RBM agent are configured under Messaging in the Twilio Console; the agent is83 registered/verified with Google RBM.84- Content types usable over RCS: `twilio/text`, `twilio/media`, `twilio/quick-reply`,85 `twilio/call-to-action`, `twilio/list-picker`, `twilio/card`, `twilio/carousel`.86- Google RBM limits: carousel 2-10 cards; up to 11 suggestions per message, 4 per card;87 card media served over HTTPS.88- Status values: `queued`, `sending`, `sent`, `delivered`, `read` (RCS), `undelivered`,89 `failed`. Fallback to SMS is automatic when the handset is not RCS-capable.90- RCS Business Messaging is billed per RBM message (basic vs single/conversational rates91 vary by region and Google's RBM pricing); SMS-fallback segments bill at standard SMS92 rates. Confirm current per-message pricing in the Twilio Console before volume sends.