plugins/twilio-developer-kit/skills/twilio-rcs-messaging/SKILL.md
Send RCS Business Messages via Twilio. Covers compliance onboarding (7-part US process), sender profile setup, sending rich cards and carousels, SMS fallback, device support (Android + iOS 18 caveats), and common errors. Use this skill when building RCS messaging or onboarding an RCS sender.
npx skillsauth add openai/plugins twilio-rcs-messagingInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
RCS (Rich Communication Services) Business Messaging delivers branded, rich messages natively in the phone's default messaging app — no separate app needed. Messages show your brand logo, colors, and verified sender name. Supports rich cards, carousels, suggested actions, and media.
RCS uses the same messages.create() API as SMS and WhatsApp. For the full channel comparison and onboarding sequence, see twilio-messaging-overview.
| Platform | Support | Notes |
|----------|---------|-------|
| Android | Most devices via Google Messages | Carrier must also support RCS in the region |
| iOS | iOS 18+ | P2P RCS is not the same as RCS Business Messaging. A device that sends RCS to other people may not receive RCS Business Messages — this depends on both Apple and the carrier. Check via RcsCapabilityFetcher before sending. |
RCS availability depends on carrier approval per country. See RCS regional availability for the current list. US carriers (T-Mobile, AT&T, Verizon) are supported. Global support is expanding.
TWILIO_ACCOUNT_SID, TWILIO_AUTH_TOKEN
— See twilio-iam-auth-setup for credential setuppip install twilio / npm install twilioRCS onboarding takes 4-6 weeks minimum. A Twilio onboarding specialist reviews everything before carrier submission. You won't be charged until you go live.
Create your RCS Sender in Console with:
| Asset | Requirements | |-------|-------------| | Display name | Must be unique — carriers reject identical names + logos | | Logo | 224x224px, max 50KB, PNG/JPEG | | Banner | 1140x448px, max 200KB | | Accent color | Hex code, must have 4.5:1 contrast ratio vs white | | Description | What your business does and why you're messaging | | Phone number | Customer support contact number | | Website | Must match business identity |
For US-specific compliance details, see the RCS Compliance Onboarding Guide.
US carriers require:
| Rejection reason | Fix | |-----------------|-----| | Display name not unique | Choose a distinct name — carriers reject duplicates | | Logo/banner don't meet specs | Check dimensions and file size exactly | | Privacy policy doesn't mention messaging | Add RCS/SMS data handling section | | Sample messages don't match use case | Align samples with campaign description | | Opt-in process too vague | Show specific UI/flow for consent collection | | Business info doesn't match EIN | Legal name and EIN must match IRS records exactly | | Media URLs not publicly accessible | All images/videos must be on public URLs — carriers verify during review |
RCS uses the same messages.create() API. No address prefix needed — Twilio routes based on the sender type.
Python
import os
from twilio.rest import Client
client = Client(os.environ["TWILIO_ACCOUNT_SID"], os.environ["TWILIO_AUTH_TOKEN"])
message = client.messages.create(
messaging_service_sid="MGxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
to="+15558675310",
body="Your order has shipped! Track it here: https://example.com/track/12345"
)
print(message.sid, message.status)
Node.js
const twilio = require("twilio");
const client = twilio(process.env.TWILIO_ACCOUNT_SID, process.env.TWILIO_AUTH_TOKEN);
const message = await client.messages.create({
messagingServiceSid: "MGxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
to: "+15558675310",
body: "Your order has shipped! Track it here: https://example.com/track/12345",
});
console.log(message.sid, message.status);
Use Content Templates for rich RCS messages (cards with images, titles, descriptions, and action buttons). Create templates via twilio-content-template-builder, then send with contentSid:
Python
message = client.messages.create(
messaging_service_sid="MGxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
to="+15558675310",
content_sid="HXxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
content_variables='{"1": "Order #12345", "2": "$49.99"}'
)
When a recipient's device doesn't support RCS Business Messaging, Twilio automatically falls back to SMS — no code changes needed. This is handled at the Messaging Service level.
messagingServiceSid, Twilio checks RCS capability first, then falls back to SMSA single brand can have multiple RCS senders, but each must have a distinct use case (e.g., one for transactional, one for marketing). The use case must be clearly different — carriers reject duplicate-purpose senders for the same brand.
ISVs (Independent Software Vendors) registering RCS senders for client businesses:
| Error | Meaning | Fix | |-------|---------|-----| | Sender not approved | RCS sender hasn't completed carrier approval | Complete compliance onboarding; use test devices in the meantime | | Device not capable | Recipient can't receive RCS Business Messages | Twilio falls back to SMS automatically if fallback is configured | | Media URL inaccessible | Rich card image/video not publicly accessible | Host media on public URLs | | Display name rejected | Name conflicts with existing RCS sender | Choose a unique display name |
twilio-messaging-overviewtwilio-content-template-buildertwilio-messaging-servicestwilio-compliance-onboardingtwilio-numbers-senderstools
Top-level workflow skill for USD performance diagnosis and optimization. Use for slow loading, high memory, low FPS, or 'optimize my scene' requests; delegates auth/runtime setup to Phase 0 owners.
data-ai
Use when the user mentions MagicPath, designs, UI components, themes, canvas selections, or repo-to-canvas UI work; run magicpath-ai to search, inspect, install, or author components.
documentation
Use as the top-level router for Omniverse Realtime Viewer USD app requests and focused viewer reference documents.
tools
Turn Notion specs into implementation plans, tasks, and progress tracking; use when implementing PRDs/feature specs and creating Notion plans + tasks from them.