Receiving RCS Messages

Prerequisites

Before proceeding, ensure you have obtained an RCS sandbox agent and API key as described in the prerequisites.

Installation

Create a Gemfile in your project directory:

1source "https://rubygems.org"
2
3gem "sinatra"
4gem "json"
5gem "dotenv"
6gem "rcs", "2.0.0.pre.rc.5"

Install the dependencies:

$bundle install

This guide uses version rcs 2.0.0.pre.rc.5. Requires Ruby version >= 2.7.0

Configuration

Create an .env file in your project root and add your Pinnacle API key:

PINNACLE_API_KEY="your_api_key" # pnclk_
AGENT_ID="your_agent_id" # agent_
PINNACLE_SIGNING_SECRET="your_signing_secret" # pss_

Setting Up a Webhook

To receive inbound RCS messages, you need to configure a webhook in the Pinnacle dashboard:

  1. Navigate to Development > Webhooks in the Pinnacle dashboard
  2. Click Create new webhook
  3. Give your webhook a descriptive name
  4. Enter your webhook endpoint URL
    • For local development, use an ngrok tunnel pointing to localhost:4567/inbound-rcs
    • For production, use your deployed server URL
  5. Add your RCS sandbox agent to your webhook for it to receive messages. You must also whitelist the devices you want to test with by navigating to your sandbox agent and adding test device phone numbers.

Creating Your Webhook Endpoint

Create a new Ruby file (e.g., main.rb) and add the following snippet to the right.

The code above creates a Sinatra endpoint that:

  • Receives webhook POST requests at /inbound-rcs
  • Processes incoming message events and replies to a button press by the user

Running Your Server

Start the Sinatra server:

$ruby main.rb

Your server will start on http://localhost:4567. If you’re using ngrok for local development, start it in a separate terminal:

$ngrok http 4567

Use the ngrok URL (e.g., https://abc123.ngrok.io/inbound-rcs) as your webhook endpoint in the Pinnacle dashboard.

Testing Your Webhook

Go to localhost:4567/send-rcs/+12345678910 (e.g., to your whitelisted number). If there are no errors, you should see something like

1{
2 "success": true,
3 "response": "#<OpenStruct messageId=7401, segments=1, totalCost=0.03, recipient=\"+18708977103\", sender=\"agent_pinnacleNbjn\", status=\"queued\">"
4}

and receive a message on your whitelisted device like this: rcs message

If you’re not receiving any messages, make sure you have

  • Your RCS sandbox agent associated with your webhook
  • Your test device is whitelisted

If you tap “Hello!”, your whitelisted device should receive a text saying “Hello! Button clicked successfully.”

With that, your webhook should now be successfully receiving inbound RCS messages as well message status updates for outbound messages! You can monitor these statuses by filtering events by their message direction set to outbound:

1case event_type
2when 'MESSAGE.STATUS'
3 puts "Message status update: #{payload['status']}"
4 # Handle status updates for your outbound messages here
5end

For more detail about processing the message payload received, please view the process method.