ComparisoniMessage API7 min read
iMessage vs WhatsApp for AI agents
iMessage and WhatsApp compared for AI agents: reply windows, templates, buttons, text limits, voice notes, setup and fees. How to build one agent for both.

The short answer
WhatsApp and iMessage differ most in how conversations open. WhatsApp allows free-form replies for 24 hours after the person writes, then only approved templates. Flow's iMessage line replies to people who wrote to it. WhatsApp has buttons and templates, and iMessage has tapbacks, effects and edits.
Building on the iMessage API? Build on iMessage with Flow: one agent for iMessage, WhatsApp and Telegram. New to it? Read the iMessage API guide.
The big difference: how a conversation opens
| iMessage (Flow) | ||
|---|---|---|
| Free-form messages | For 24 hours after the contact’s last message | When the contact has written to the line before |
| Outside that | Only an approved template | A new contact is refused |
| Start a conversation | With a template, within your sender’s limits | Only on a dedicated line with the outbound add-on, within warm-up limits |
This is from Flow’s sending rules. On WhatsApp, the conversation carries window_open_until, and you can subscribe to conversation.window_closing to hear about it one hour before. On iMessage there is no timer to watch. If the person has written to the line, you can reply.
The design lesson is shared: reply, don’t broadcast. Agents that answer people who wrote first rarely meet the limits. Other iMessage providers differ on who can write first, so see the provider comparison.
What each can show
From Flow’s content types docs:
| iMessage | ||
|---|---|---|
| Text length | Up to 4,096 characters | Up to 9,999 |
| Buttons | Up to 3 reply buttons, else a list of 4 to 10 | None; numbered text with fallback |
| Templates | Yes | No |
| Reactions | Yes | Tapbacks, a fixed set |
| Effects | No | Yes |
| Typing | Within 24 hours of the contact’s last message | Within 5 minutes |
| Edit | No | Within 15 minutes |
| Unsend | No | Within 2 minutes |
| Locations and contact cards | Yes | No; a maps link or text with fallback |
If your agent leans on buttons, WhatsApp is the better stage. If it leans on a personal feel, with tapbacks and quick corrections, iMessage is. Setting fallback: "auto" lets one agent do both without branching. Tapbacks, typing and effects goes into the iMessage side.
Setup and fees
- WhatsApp. You connect a number in your own WhatsApp Business Account, under your own Meta app, with a live key. You create a Meta app, add the number with an approved display name, add a payment method in WhatsApp Manager and generate a system-user token. Meta bills its fees to you directly. The Flow team can also connect a number. There is no WhatsApp sandbox yet, so build on Telegram first with the same code.
- iMessage. A US number, shared or dedicated: a free shared line for up to 25 people a month, a $30 a month shared line for roughly 200 to 300 people, or your own number from $100 a month. A new dedicated line takes hours to activate, then warms up before it writes first at full rate.
Flow’s Pro plan lists a dedicated WhatsApp line, and iMessage is priced on its own: a free shared line, a $30 a month shared line for roughly 200 to 300 people, and dedicated lines from $100 a month. Dedicated lines can support writing first, subject to availability and warm-up limits. iMessage API pricing has worked examples.
Voice notes and identity
WhatsApp users send many voice notes. Each arrives as voice content with the audio file. Flow does not transcribe WhatsApp voice notes yet, so fetch the audio and transcribe it yourself if your agent needs the words. On iMessage, the agent gets the audio and a transcript. iMessage supports voice notes both ways, from mp3, wav, m4a, caf or aac files.
Identity differs. WhatsApp numbers are normalised to E.164. An iMessage handle can be a phone number or an email address, so do not assume a number. Do not assume the two are the same person either. Map them only through a verified account lookup. One agent on three channels explains.
Build one agent for both
The loop is the same on both: an inbound event, a model call with your tools, a reply. Three habits keep it portable:
- Ask before you send.
GET /v1/capabilities?conversation=conv_...says what the channel can show and whether the window is open. - Use
fallback: "auto". Buttons become numbered text, markdown becomes plain text. - Retry only what clears.
rate_limitedcarriesretry_after, andoutside_windowclears only when the person writes again, or when you send a template on WhatsApp.
Flow gives you one project that answers on iMessage, WhatsApp and Telegram, and works as an MCP server and CLI.
Frequently asked questions
What is the biggest difference between iMessage and WhatsApp for an agent?
How a conversation opens. On WhatsApp you can send free-form messages for 24 hours after the contact's last message, then only an approved template. On Flow's iMessage line, the contact must have written to the line first.
Does WhatsApp need message templates?
Outside the 24-hour window, yes. Business-initiated messages need an approved template. On Flow you create templates for your own WhatsApp number and receive a template.status_changed event when WhatsApp approves, rejects or pauses one.
Does iMessage have buttons?
No. WhatsApp shows up to three reply buttons, or a list for four to ten. On iMessage, Flow sends buttons as numbered text and still returns a button reply with the button's ID.
Who pays WhatsApp fees?
With your own WhatsApp Business Account, Meta bills its messaging fees to your business directly. Flow says WhatsApp fees are billed by Meta with no markup.
Can I build one agent for both?
Yes. With a messaging layer that applies each channel's rules, one handler answers on both. Ask the API what a conversation supports before you send.
Does Flow transcribe WhatsApp voice notes?
Not yet, per Flow's docs. A voice note arrives as voice content with the audio file, so fetch and transcribe it yourself if your agent needs the words.
Keep reading
All posts: the Flow blog. The Flow docs have the reference.
From reading to building
Your agent, on iMessage and everywhere else.
Flow gives your agent an iMessage line, and the same code answers on WhatsApp and Telegram and works as an MCP server and CLI. See how it works on iMessage.
Build on iMessage with Flow