Skip to main content
Choose Server as a Flow’s Data source when its screens need data from your own systems, such as branches near a pincode, stock, prices, order status or availability from a system Ringg doesn’t connect to. WhatsApp normally requires every Flow endpoint to handle its RSA and AES encryption, key management and health checks. With this option, Ringg does all of that. Your server gets one plain JSON POST per screen change, signed so you can trust it, and returns the next screen as JSON.
This page is for developers. For the dashboard steps and how answers reach your assistant, see WhatsApp Flows and Flows with live data.

What you need to build

  1. A Flow in WhatsApp Manager whose screens read data from the endpoint.
  2. One HTTPS endpoint on your server that:
    • accepts POST requests with a JSON body;
    • checks the X-Ringg-Signature header against the raw body;
    • answers within 7 seconds with HTTP 200 and the next screen as JSON.
That is all. You don’t handle WhatsApp’s encryption keys, the health check (ping) or WhatsApp’s error notifications. Ringg answers those itself.

Example: find a showroom by pincode

The customer enters a pincode, your server looks up nearby showrooms, and the customer picks one. The same pattern works for any lookup.

1. The Flow

Create a Flow in WhatsApp Manager (Account tools → Flows → Create Flow), paste this into the code editor and Save. Don’t publish it yet.
What makes it a live-data Flow:
  • "data_api_version": "3.0" and a routing_model listing which screen can lead to which.
  • A data_exchange action. Its payload is exactly what your server receives as data.
  • A data block on each screen that shows your server’s values, with an __example__ for Meta’s preview. Your response must match these types.
You can also create this Flow in Ringg: in the Flows tab, select Create Flow, then Paste JSON with the design above, and Save draft. After connecting your server below, publish it from its details instead of WhatsApp Manager.

2. The endpoint

3. Connect it in Ringg

Choosing Server as a Flow's data source, saving it, and copying the signing secret

1

Open the Flow

Go to Tools → WhatsApp Business, select the Flows tab and open the Flow.
2

Enter your server's URL

Under Data source, select Set up data source, choose Server and enter your endpoint’s URL in Server URL, for example https://api.example.com/whatsapp-flow. It must start with https://. Select Save.
Find a showroom details: the Data source form with the encryption key notice, Choose data source set to Server, and Server URL https://api.acme-lending.example/whatsapp-flow with a description of the request, response and signature, above Cancel and Save

Choosing Server as the data source and entering its URL

3

Copy the signing secret

Ringg shows a signing secret once. Copy it with the copy icon and store it on your server, for example as RINGG_FLOW_SIGNING_SECRET. It can’t be shown again. If it is lost, select Edit source, tick Issue a new signing secret and save.
Data source showing Source https://api.acme-lending.example/whatsapp-flow, then Signing secret: copy it now, it won't be shown again, with the secret and a copy icon, and an Edit source button

The signing secret, shown once after saving

4

Check the endpoint

If Ringg says Meta kept this Flow’s own endpoint, the Flow was already published. Copy the URL shown, paste it as the Flow’s endpoint in WhatsApp Manager, and publish the Flow again. That URL is Ringg’s, not your server’s: WhatsApp calls Ringg, and Ringg calls you.
5

Finish in WhatsApp Manager

Open the Flow’s endpoint settings, connect the Meta app you use with Ringg, and run the health check. Ringg answers it, so it passes even before your server is live. Then Preview the Flow, which calls your server for real, and Publish it.
6

Add it to an assistant

Sync the Flows tab, then add the Flow to a WhatsApp assistant as described in WhatsApp Flows. Set Opens on to Loaded by the Flow’s endpoint, so your server is asked for the first screen.

Request reference

Ringg sends one POST for every step that needs your server.
context is {} when the Flow wasn’t sent by Ringg, for example in WhatsApp Manager’s preview. Don’t require it. Headers
Verify the signature against the exact bytes you received, before parsing them. Parsing the JSON and serialising it again changes the spacing, so the signature won’t match.

Response reference

Return HTTP 200 with a JSON body naming the next screen and the data it reads:
  • screen must be a screen of the Flow that the current screen can lead to in routing_model, or the current screen itself.
  • data must match the types in that screen’s data block.
Ringg passes your response to WhatsApp unchanged, so a response that breaks these rules shows the customer WhatsApp’s generic error.

Keep the customer on the screen with a message

Return the screen the request came from, with error_message in data. WhatsApp shows the message at the bottom of the screen and keeps what the customer entered.

Finish the Flow from your server

To close the Flow yourself, for example after you created an order, return WhatsApp’s SUCCESS screen with the request’s flow_token and anything you want to send back. You don’t need a SUCCESS screen in the Flow JSON.
The params reach the assistant as the customer’s submission, just like a Flow finished with a complete action: order_id=A-1042, showroom=MG Road. Use readable keys, since they are the labels the assistant sees.

Rules and limits

Test your endpoint

Send your server a signed request from a terminal before connecting it in Ringg:
You should get the PICK_SHOWROOM screen back. Then use Preview in WhatsApp Manager to run the Flow end to end.

Troubleshooting

Ringg sets its own encryption key on every number of the WhatsApp Business account when you save a data source. If you also run a WhatsApp Flow endpoint of your own on those numbers with a different key, it stops working. Move those Flows to a Server data source so Ringg handles the encryption for all of them.