Skip to main content
Get your agent answering on your phone. Start with the Telegram sandbox; the same handler later works with your own bot, WhatsApp number or a Flow-connected iMessage line.

Connect and reply

1

Get a test key

From your project folder:
Terminal
This creates a test key without an account, writes FLOW_MESSAGING_KEY and FLOW_CLAIM_TOKEN to .env, and prints a sandbox link. It asks before installing coding-agent support or configuring the optional MCP connection.Already have a key? Use it instead of creating another app.
2

Join from your phone

Open the printed Telegram link and tap Start. If you found the bot another way, send the join message printed by the CLI.Check it worked: your app has a conversation with your phone. The sandbox only sends to people who have joined it.
3

Run the reply handler

Choose an SDK, install it and set FLOW_MESSAGING_KEY in your process environment. Node does not automatically load .env; use the run command below.
Check it worked: text “hello” to the bot and receive “You said: hello”. A send is queued first; watch message.sent or message.failed to learn its outcome.
4

Use your agent's answer

Replace the echo with a call to your model or agent. The TypeScript SDK’s reply() also accepts supported model streams and sends complete chat bubbles as they become ready.See streaming replies or choose your agent framework.

Sandbox limits

An anonymous test key allows one contact and 50 outbound messages, and expires after seven days. Sign in to keep the app and use the signed-in allowance. Use synthetic data and shared sandbox senders only for testing.

Use plain HTTP

The API works from any language. These alternatives use the same key and conversation:
curl
Go (HTTP)
Each kind of message has its own endpoint (/basic, /buttons, /list, /carousel, …), and its page opens with the channels it works on. A kind, field or value the channel does not take answers 422 unsupported_content and sends nothing; its hint says what to send instead.

Moving from the older API

The API is V0: every path starts with /v0, and each kind of message has its own endpoint instead of POST /v1/conversations/{conversation_id}/messages with content. There is no fallback, delivered_as, markdown format or capabilities endpoint, typing takes no state, and starts are flat ({"sender": "snd_...", "to": {...}, "kind": "basic", "text": "Hi"}).
  • Plain HTTP or the SDKs (@flow-engineer/messaging 0.4.0, flow-messaging 0.2.0): have your coding agent run the flow-messaging-migrate skill. In Claude Code, run claude plugin marketplace add flow-engineer/sdk, then claude plugin install flow-messaging@flow-engineer. The skill’s source is on GitHub.
  • Flow Framework: upgrade @flow-engineer/flow to 0.7.0. Your agent code does not change.

Receive signed webhooks

Use a public endpoint or forward events to localhost.

Go live

Connect your own sender and switch to a live key.