Before you start
A WhatsApp Business number you operate
An API key
X-API-Key on every relay request.How it works
- Forward: a customer messages your number. Meta notifies your service, and your service forwards the message to Ringg’s
/inboundendpoint, signed with your keys. - Reply: Ringg’s agent reads the whole conversation and writes a reply. Ringg posts it to your webhook as a
message.outboundevent, in a format you can send to Meta unchanged. - Send and acknowledge: your service sends the reply to Meta, then reports the result to Ringg’s
/ackendpoint. Ringg uses this to keep its record of the conversation true to what the customer actually saw.
Key terms
Supported features
Messages from your customers
/inbound always answers 202 accepted once the message is safely recorded. Whether the agent replies is decided afterwards, so a 202 does not mean a reply is coming. See No reply for a message.Messages Ringg asks you to send
Conversation features
Limits
Not supported yet
- Media understanding: the agent cannot read images, voice notes or documents. This is planned.
- Rich replies: the agent’s replies are plain text; Ringg never asks you to send media, interactive messages or WhatsApp Flows over the relay.
- Template sends mid-conversation: templates are only used to start a conversation.
What you set up
Details to share for setup
Share these for each WhatsApp number, separately for staging and production.What your WhatsApp service must do
Forward customer messages to /inbound
POST Meta’s value object to Ringg’s /inbound, unchanged, with value.messages[0].id set to Meta’s message id. Retry on a timeout or a 5xx; each message id is processed once.Sign every request
X-API-Key, and an HMAC-SHA256 signature of the exact request body in X-Relay-Timestamp and X-Relay-Signature. See Authentication.Receive Ringg's events on your webhook
2xx within 10 seconds. Don’t wait for Meta before answering: the chat’s next reply waits for your 2xx.Send each message.outbound to Meta, then ack it
delivery.message to Meta’s /{phone_number_id}/messages exactly as received, in delivery.sequence order per chat. Then call /ack with sent and Meta’s message id, failed with Meta’s error, or skipped if expires_at passed before you could send.Forward Meta's delivery statuses (recommended)
POST the statuses array from Meta’s status webhooks to /status. Ringg uses them to diagnose delivery problems.Also yours
- The 24-hour window. Free-form replies only reach a customer within 24 hours of their last message. Ringg answers inside that window. Outside it, use an approved template through
/outbound. - Media and interactive messages. The AI agent answers text only. Route images, voice notes, documents and interactive replies to your human agents. See What’s supported.
- Handover. When a human agent hands a chat to the AI, send the conversation so far in
prior_messages. When they take it back, stop forwarding that chat’s messages to Ringg. See Hand over from a human agent. - Custom variables. Send the customer details the agent’s prompt uses, such as a policy number, in
custom_argson every/inbound. Ringg reads them only when a message starts a chat. See Custom variables. - Clocks. Keep your servers on NTP. A signature more than 300 seconds old is rejected.
Before you go live
Test on staging
prior_messages, a failed ack and a /close.Check delivery end to end
message.outbound you receive gets an ack, and that replies reach the customer in order.Switch to production
What Ringg provides
Credentials and endpoints
Ringg sends you these once your number is registered, separately for staging and production, along with the staging base URL. The production base URL is in the Integration guide.Rotating the signing secret
Ringg can issue a new signing secret at any time while the old one keeps working. Switch your service to the new secret, confirm traffic is flowing, then ask Ringg to retire the old one. Requests signed with either secret are accepted in between, so there is no downtime.The AI agent
Ringg sets up and maintains the AI agent attached to your number:- Prompt and tone: written for your use case, in the languages your customers use.
- Knowledge: knowledge bases and tools, such as your product data, pricing APIs and document links.
- Handover: the agent continues a conversation your human agent started, without greeting again or asking for what the customer already said.
- Post-chat: analysis and chat events once a conversation closes.
Delivery behaviour
Durable acceptance, once-only processing, ordered and retried replies, and what happens to replies the customer never saw: Delivery guarantees.In the Ringg dashboard
- Numbers: your relay numbers carry a Relay WhatsApp tag.
- Logs → WhatsApp: every relay conversation, with its transcript and analysis. Where a human agent handed over, the transcript marks Handed over to AI agent and Handed over to human agent. The agent side is labelled Human agent or AI agent.
Support
What to send Ringg support is listed with the troubleshooting steps.Delivery guarantees
What Ringg promises on every relay number; the request and response details are in the Integration guide.FAQ
Does Ringg ever get our WhatsApp access token?
Does Ringg ever get our WhatsApp access token?
How is this different from connecting WhatsApp Business to Ringg?
How is this different from connecting WhatsApp Business to Ringg?
Can the same WhatsApp Business account be on Relay and connected to Ringg directly?
Can the same WhatsApp Business account be on Relay and connected to Ringg directly?
Does the AI agent understand images and voice notes?
Does the AI agent understand images and voice notes?
Why did /inbound return 202 but no reply came?
Why did /inbound return 202 but no reply came?
202 means the message is safely stored, not that a reply will follow. See No reply for a message.Can we retry /inbound?
Can we retry /inbound?
5xx: each message id is processed once, so a retry never causes a second reply.The customer sent three messages in a row. Why one reply?
The customer sent three messages in a row. Why one reply?
What if our webhook is down?
What if our webhook is down?
expires_at, ack it as skipped instead of sending it.Do we have to send the typing indicator?
Do we have to send the typing indicator?
message.typing is optional. Sending it shows the customer that the message was read and a reply is coming, which makes the wait feel shorter.How does the AI agent know what our human agent already discussed?
How does the AI agent know what our human agent already discussed?
prior_messages when you hand over.Can we change custom_args during a chat?
Can we change custom_args during a chat?
custom_args only from the message that starts a chat, so later messages can’t overwrite them. Send them with every message anyway: when a chat ends, the customer’s next message starts a new one, which reads them again. See Custom variables.Can we send the whole history on every handover?
Can we send the whole history on every handover?
How do we take a conversation back from the AI agent?
How do we take a conversation back from the AI agent?
Does the AI agent say it is an AI?
Does the AI agent say it is an AI?
Can the AI agent message a customer first?
Can the AI agent message a customer first?
/outbound, which follows WhatsApp’s 24-hour rule. You send the template; when the customer replies, the agent takes over.How long does a conversation stay open?
How long does a conversation stay open?
Do we get transcripts and analysis?
Do we get transcripts and analysis?
How do we rotate the signing secret?
How do we rotate the signing secret?
Are staging and production separate?
Are staging and production separate?