DEV Community

Software Solutions
Software Solutions

Posted on

How RCS Can Be Used for Order and Delivery Updates: System Architecture & Implementation

For e-commerce platforms and logistics applications, order fulfillment notifications are critical transactional touchpoints. However, standard SMS notifications suffer from fundamental limitations: strict 160-character constraints, plain text formatting, unverified numeric sender IDs, and zero native interactivity. Customers are forced to click external links, open web browsers, and manually enter tracking IDs just to check where a package is.

Rich Communication Services (RCS) replaces plain text SMS with rich media, verified business identities, interactive action buttons, and real-time status cards directly inside the device's native messaging application.

Here is an engineering overview of how RCS transforms transactional order updates, how to structure RCS message payloads, and how to integrate RCS APIs with backend Order Management Systems (OMS).


Why Businesses Need Better Order Notifications

Traditional SMS delivery updates create avoidable operational friction for both consumers and backend support desks:

  1. High Support Load ("WISMO"): "Where Is My Order?" inquiries constitute up to 40% of total customer support volume for retail systems. Plain text SMS messages with unclickable or long tracking links lead to lost context and increased helpdesk tickets.
  2. Security & Phishing Vulnerabilities: Unverified SMS shortcodes look identical to SMS phishing (smishing) attempts. Customers are increasingly hesitant to click raw URLs inside unverified text threads.
  3. Channel Switching Friction: When a delivery issue occurs (e.g., missed delivery or wrong address), SMS forces the customer to switch channels—opening an email app or dialing a phone number—to resolve the issue.

RCS solves these issues by embedding real-time status updates, product images, and interactive action buttons directly into the message payload.


How RCS Works for Order Updates

RCS operates over IP networks (WiFi or Cellular Data) using universal Universal Profile standards supported across modern Android and iOS messaging clients.

When an order state changes inside your database, your backend dispatches an API request to an RCS Business Messaging (RBM) partner/carrier gateway. The gateway verifies sender credentials and delivers a rich card or carousel to the recipient. If the recipient's device or network does not support RCS, the gateway automatically falls back to a standard SMS text message, guaranteeing delivery.


Common RCS Order and Delivery Use Cases

1. Order Confirmation

Immediately upon checkout, dispatch a rich confirmation card showing the order summary, total amount paid, estimated delivery date, and a "View Order Details" button.

2. Payment Confirmation

Send a verified receipt card complete with transaction ID, itemized breakdown, and a one-tap button to download a PDF invoice.

3. Order Processing & Packaging

Notify the customer when their order moves to the fulfillment queue, maintaining continuous visibility throughout warehouse processing.

4. Shipment Notification

Deliver a tracking card the moment a shipping label is generated, featuring the carrier logo, tracking number, and an embedded "Track Shipment" button.

5. Out-for-Delivery Notification

Send a time-sensitive update when the local driver scans the parcel onto the delivery vehicle, complete with a live driver map button or drop-off instruction options.

6. Delivery Confirmation

Provide immediate proof of delivery featuring a photo thumbnail of the delivered package at the doorstep, along with quick-reply feedback buttons ("Package Received" / "Issue with Delivery").

7. Failed / Delayed Delivery Notification

If a delivery attempt fails, dispatch an urgent card with direct action buttons allowing the customer to "Reschedule Delivery" or "Redirect to Pickup Point" instantly.

8. Interactive Order Tracking

Allow customers to query order status directly inside the chat thread using suggested reply chips (e.g., "Where is package #10492?").


What an RCS Delivery Message Can Include

Unlike standard SMS, an RCS payload supports rich JSON structures containing:

  • Order Information: Structured text fields for Order ID, items, and delivery address.
  • Product Images: High-resolution thumbnail previews of the purchased items.
  • Tracking Buttons: Tappable Open-URL actions (openUrl) that launch live map tracking.
  • Delivery Status Badges: Visual status indicators (e.g., Processing, In Transit, Delivered).
  • Customer Support Options: Tappable phone/chat action triggers (dialAction) to connect instantly with helpdesk agents.
  • Suggested Replies: One-tap chip inputs (suggestedReply) allowing users to send structured responses without typing.

RCS Order Notifications vs Traditional SMS

Feature Traditional SMS RCS Order Messaging
Sender Identity Numeric Shortcode / Alpha Sender Verified Business Profile, Name & Logo
Media Support Plain Text (MMS requires extra cost) High-res Images, Maps & Inline Media
Interactivity Hyperlinks only Tappable Action Buttons & Quick Replies
Character Limit 160 characters per segment Up to 2,500 characters per message
Read Receipts Basic Carrier Delivery Receipts Real-time Open/Read Confirmation
Fallback N/A Automatic Fallback to SMS

Integrating RCS With an Order Management System

Architecturally, RCS acts as an outbound/inbound communications layer connected to your backend via REST APIs and Webhooks.

System Data Flow:

┌─────────────────────────┐
│     Customer Order      │
└────────────┬────────────┘
│
▼
┌─────────────────────────┐
│ Order Management System │ ◄── (Database State Change: 'SHIPPED')
└────────────┬────────────┘
│
▼  [ HTTPS POST JSON Payload ]
┌─────────────────────────┐
│     RCS Messaging API   │
└────────────┬────────────┘
│
▼  [ IP Carrier Gateway / RBM ]
┌─────────────────────────┐
│ Customer Messaging App  │
└────────────┬────────────┘
│
▼  [ User Taps "Reschedule Delivery" ]
┌─────────────────────────┐
│    Inbound Webhook      │ ──► Updates OMS Database State
└─────────────────────────┘
Enter fullscreen mode Exit fullscreen mode
  1. Order State Change: An event trigger fires inside your Order Management System (OMS), Enterprise Resource Planning (ERP), or e-commerce platform (e.g., Shopify, custom Laravel/PHP backend).
  2. API Dispatch: The OMS compiles the payload and sends an authenticated HTTP POST request to the RCS Provider API endpoint.
  3. Payload Delivery: The RCS Provider routes the message through carrier networks to the customer's native SMS/RCS application.
  4. Interactive Response: When the user taps a suggested reply or action button, the messaging client sends a response payload back to the RCS provider's gateway.
  5. Webhook Processing: The RCS provider forwards an inbound webhook event to your backend server, updating the order state automatically.

Automating RCS Delivery Notifications

To build a scalable automation engine, decouple your notification service using an event-driven architecture (e.g., RabbitMQ, Redis Pub/Sub, or AWS SQS).

Example JSON Payload for an Out-for-Delivery Notification

Below is an example of an RCS Rich Card JSON payload sent via an API gateway:

{
  "message": {
    "text": "Your order #89201 is out for delivery today!",
    "richCard": {
      "standaloneCard": {
        "cardOrientation": "VERTICAL",
        "cardContent": {
          "title": "Out for Delivery 🚚",
          "description": "Driver is on the way with your package. Estimated arrival: 2:30 PM - 4:00 PM.",
          "media": {
            "height": "MEDIUM",
            "contentInfo": {
              "fileUrl": "[https://cdn.yourdomain.com/images/order-89201-preview.jpg](https://cdn.yourdomain.com/images/order-89201-preview.jpg)",
              "forceUtf8": true
            }
          },
          "suggestions": [
            {
              "action": {
                "text": "Track Driver Live",
                "postbackData": "action=track_driver&order_id=89201",
                "openUrlAction": {
                  "url": "<a href="https://yourdomain.com/track/89201">https://yourdomain.com/track/89201</a>"
                }
              }
            },
            {
              "reply": {
                "text": "Leave at Doorstep",
                "postbackData": "action=instructions&type=doorstep&order_id=89201"
              }
            },
            {
              "action": {
                "text": "Call Support",
                "postbackData": "action=call_support&order_id=89201",
                "dialAction": {
                  "phoneNumber": "+18005550199"
                }
              }
            }
          ]
        }
      }
    }
  }
}
Enter fullscreen mode Exit fullscreen mode

RCS APIs, Webhooks, and Real-Time Status Updates

Handling real-time delivery status requires setting up secure HTTP Webhook listeners on your backend server.

Handling Inbound Webhooks
When a customer interacts with an RCS button (e.g., tapping "Leave at Doorstep"), your web service receives a POST payload containing the postbackData value:

{
  "sender": "+1234567890",
  "messageId": "msg_901238491",
  "postbackData": "action=instructions&type=doorstep&order_id=89201",
  "timestamp": "2026-09-21T14:10:00Z"
}
Enter fullscreen mode Exit fullscreen mode

Server-Side Webhook Controller (Node.js / Express Example):

app.post('/webhooks/rcs-inbound', async (req, res) => {
  const { sender, postbackData } = req.body;

  if (postbackData) {
    const params = new URLSearchParams(postbackData);
    const action = params.get('action');
    const orderId = params.get('order_id');

    if (action === 'instructions') {
      const type = params.get('type');

      // Update Order Management System Database
      await updateDeliveryInstructions(orderId, type);

      // Send Instant Confirmation Message Back via RCS API
      await sendRcsMessage(sender, {
        text: `Got it! Your instructions ("${type}") have been passed to the driver for Order #${orderId}.`
      });
    }
  }

  res.status(200).send('EVENT_RECEIVED');
});
Enter fullscreen mode Exit fullscreen mode

Best Practices for RCS Order Notifications

  1. Always Ensure Clean SMS Fallback: Design your notification workflows so that if RCS fails or the user is offline, a clear, plain text SMS with a fallback tracking URL is dispatched immediately.
  2. Keep Postback Data Structured: Format postbackData strings consistently (e.g., key-value pairs like action=track&id=123) to streamline server-side parsing.
  3. Optimize Image Assets: Compress product thumbnail images sent in rich cards. Use standard 16:9 or 2:1 aspect ratios to prevent improper cropping across varying mobile viewports.
  4. Use Real-Time Updates Responsibly: Avoid spamming customers with minor internal warehouse status changes. Reserve outbound notifications for actionable milestones (Order Placed, Shipped, Out for Delivery, Delivered, Exception).
  5. Secure Your Webhook Endpoints: Implement API token authentication and signature verification (e.g., HMAC SHA-256 headers) on your inbound webhook endpoints to prevent unauthorized requests.

Conclusion

Upgrading your transactional order pipeline from plain SMS to RCS significantly reduces support overhead, protects your brand against phishing, and delivers a superior customer fulfillment experience. By integrating RCS APIs directly with your Order Management System, you turn passive delivery notifications into interactive, real-time channels.

If you're interested in the broader business applications, features and implementation considerations of RCS, see our complete guide to RCS messaging for businesses.

About the Publisher

This technical architecture overview was prepared by the engineering team at Software Solutions—specializing in custom backend systems, API integrations, and enterprise messaging infrastructure.

Top comments (0)