Skip to main content
WhatsApp is not available yet. Flow is waiting on Meta’s approval as a Tech Provider. Until then there is no WhatsApp sandbox and no WhatsApp numbers: POST /v1/senders with "channel": "whatsapp" answers 501 not_implemented. Build on Telegram today; the code below does not change per channel, so it will answer on WhatsApp once it ships.
This page shows how an AI agent will answer people on WhatsApp once it is available: it receives messages, streams the model’s answer back as chat bubbles, uses buttons, and handles WhatsApp’s 24-hour window.
TypeScript
On serverless platforms that stop work when the response is sent, run the reply with your platform’s background helper (for example after() in Next.js or waitUntil()), or answer in the webhook response itself as shown below.

1. Build it on Telegram today

There is no WhatsApp sandbox yet. Run the same code on the Telegram sandbox bot:
  1. Get a test key, with no account: curl -X POST https://api.flow.engineer/v1/sandbox/keys (or npx @flow-engineer/messaging init). Set its key as FLOW_MESSAGING_KEY. See Keys and sign-in.
  2. Join the Telegram sandbox from your phone with the bot’s address.link (see Build a Telegram agent).
  3. Register your webhook, or on your laptop read events from the live stream (GET /v1/stream, see Local development), and send a message.
When the WhatsApp sandbox opens, the sandbox allowance will cover it.

2. Answer fast: reply in the webhook response

For short answers, skip the extra API call and return the reply from the webhook handler:
TypeScript
HTTP response body
Answer within 10 seconds; for anything slower, answer 200 {} at once and send with POST /v1/conversations/{conversation_id}/messages.

3. Voice notes

WhatsApp users send a lot of voice notes. Each one will arrive as voice content with the audio file (url, file_id):
Flow does not transcribe voice notes yet, so fetch the audio and transcribe it yourself if your agent needs the words. To send a voice note back, send voice content with an audio url or file_id.

4. Buttons and lists

WhatsApp will show up to 3 reply buttons, and a list for 4 to 10:
TypeScript
A tap arrives as message.received with button_reply content: { "type": "button_reply", "button_id": "upi", "label": "UPI" }. Labels are at most 20 characters.

5. The 24-hour window and templates

WhatsApp allows free-form messages only within 24 hours of the person’s last message. After that, and to message someone first, you must send an approved template.
  • Every event carries conversation.window_open_until.
  • A free-form send outside the window fails with 409 outside_window.
  • Subscribe to conversation.window_closing to get a warning 1 hour before it closes.
TypeScript
Once WhatsApp numbers are available, templates are created on your dedicated number with POST /v1/templates and reviewed by WhatsApp; you receive template.status_changed when one is approved, rejected or paused. See Going live.

6. What WhatsApp will support

7. Going live on WhatsApp

Not possible yet. When WhatsApp ships, Flow will host a dedicated number for you, your business will be verified through Meta, and your agent’s code stays the same. Until then, go live on your own Telegram bot, or ask the Flow team about an iMessage line.
WhatsApp’s business policy does not allow general-purpose AI assistants. Your agent must serve your business’s own customers (support, orders, bookings, updates). Agents that only reply to people who wrote first, about your business, are the safe pattern.