Put Your App on iMessage and WhatsApp
Your customers won't download another app. Here's how to let them text yours instead.

Your customers already text all day: friends, family, the dentist. Most of them will never download your app or open your chat widget, but they will text you. The work is giving them something on the other end that knows your product, can actually do things in it, and knows when to bring in your team.
This guide is for founders and ops leads who already have a product and customers. It's part of our guide to customer-facing AI agents.
Can you put your app on iMessage?
Yes, as a number your customers text, not as something they install. Apple has no public API for iMessage bots, so there are three real ways to show up in Messages:
| Way in | What customers see | What it takes |
|---|---|---|
| A dedicated iMessage line | A number they save, like any contact | Ready right away on Keiki |
| Apple Messages for Business | Your verified name and logo | Apple's review, usually weeks |
| A Mac running Messages | A personal Apple ID | A Mac that has to stay awake and signed in |
An iMessage line is the one most companies start with, because either side can text first and nobody has to approve it. WhatsApp works the same way from a WhatsApp number. The rest of this guide puts one agent on both. (For the full list of options, see Is there an iMessage API?)
What you need
- A product with customers, and the five things they ask you about most. For example: "Where's my order?", "Can I move my appointment?", "How much do I owe?"
- Your website, docs or help center.
- Optional: your API or an MCP server, so the agent can do things in your product and not only answer.
- A Keiki account. No code is required. There's an SDK if you want one.
How to put your app on iMessage and WhatsApp
Step 1: Tell it about your company
Describe the job in a sentence or two, then point it at your sources:
"You answer customers for Acme. Help with orders, deliveries and returns. Send anything about refunds to the support team."
Add your website, docs and policies. You can also start from your website alone, and Keiki builds the first version of the agent from it.
What breaks first: the agent fills a gap with a guess. A customer asks about a policy you never wrote down, and it sounds sure anyway. Give it the sources for your top five questions before you share the number, and tell it to say "let me check with the team" when the answer isn't there.
Step 2: Connect your product
Answering questions is half the job. The other half is doing things: booking, paying, checking an order. Connect what you already have:
- Shopify or Stripe, from the dashboard.
- Your API, one endpoint per job.
- Your MCP server, if you have one. Its tools become the agent's tools.
"We plugged our existing MCP server into Keiki and had our iMessage agent texting real customers almost right away."
Perry Raskin, Head of Web & Integrations, Coverdash
If you're writing tools in code, each job is one tool. Anything that changes money or data asks a person first:
import { defineTool } from '@onkeiki/agents'
import { Effect, Schema } from 'effect'
export const rescheduleBooking = defineTool({
name: 'reschedule_booking',
description: 'Move an existing booking to a new time',
input: Schema.Struct({ bookingId: Schema.String, startsAt: Schema.String }),
policy: { approval: 'ask' },
execute: (input) => Effect.promise(() => acme.bookings.reschedule(input.bookingId, input.startsAt)),
})What breaks first: a write runs that nobody checked. Start with reads allowed and writes set to ask, then switch tools to allow one at a time as you trust what you see. See governed actions.
Step 3: Know who's texting
A customer asking "where's my order?" should only ever see their own orders. Each conversation on Keiki carries who the person is, recognized by their phone number or WhatsApp account, and with identity also by your own user ID and permissions. Per-customer memory means the agent remembers past chats, so nobody has to repeat their order number every time.
What breaks first: trusting an ID the agent passes in. Your API should still check that the order belongs to the person texting, the same way it does in your app.
Step 4: Share your number
The agent is set up once. Each channel is just another place your customers can reach it:
| Channel | Ready in |
|---|---|
| iMessage, dedicated line | Right away to a few days, by line type |
| About 5 minutes | |
| Slack, Telegram, email | Right away to a few minutes |
| Phone calls | Right away |
| Apple Messages for Business | After Apple's review (early access) |
Then put the number where customers already are. On your site, an sms: link opens Messages with the first text filled in:
<a href="sms:+15555550123?body=Hi">Text us</a>What breaks first: texting people who never texted you. Apple judges a line by how it behaves, and cold outreach is the fastest way to get one flagged. On Keiki's iMessage lines over 30 days, over 99% of conversations were started by the customer. Let them text first. See will an iMessage API get your number banned?
Step 5: Keep your team in every chat
Chats from every channel land in one inbox. When the agent isn't sure, it tells the customer a person is on it and flags the chat for you. From there, leave a note and the agent's next reply follows it, or take over and reply yourself. On Slack, your team can take over right in the thread.
What breaks first: a handoff that drops the context. Whoever steps in should see the whole conversation and what the agent already did, so the customer doesn't start over.
Step 6: Text it before your customers do
Text the agent your five most common questions. Then text it the way people actually do: three messages in a row, a typo, "actually, make it Saturday." Before you change the agent later, replay past conversations against the new version so one fix doesn't break five other answers.
The line is the easy part
Anyone can get a number. Getting an agent to work with real customers is the hard part, and it's what Keiki does:
| What goes wrong | What Keiki does |
|---|---|
| It gets flagged as spam | Paces sends and keeps your number healthy: 7,000 messages and 50 new conversations per line per day, never in bursts |
| It forgets who's texting | Knows each customer and remembers past chats |
| It can't do anything | Books, pays and checks status in your product, with approval on anything risky |
| It says something wrong | Your team sees every chat and can step in |
| It only works on iMessage | The same agent on WhatsApp, Slack, Telegram, email and phone calls |
| It breaks at 2am | Watches line health, pauses a conversation at risk, and moves sends to a healthy line |
Why customers text instead of downloading
An app is a place people have to remember to go. The average generative AI app keeps 0.9% of new users after 30 days (AppsFlyer). People who text a Keiki agent are 2 to 3 times more likely to still be texting it a month later. When we moved our own assistant from an app to an iMessage line, 30-day retention went from about 1% to roughly 50%, with the same model and the same tools. That's a daily-use assistant, the best case, and the full numbers are here.
Already have an agent?
Keep it. Bring your own agent to Keiki and you get the numbers, every channel and your team in the chat, without rebuilding anything.
FAQ
Is there an official iMessage API for businesses? Not for bots. Apple's official business channel is Apple Messages for Business, which needs Apple's review and a person reachable in every chat. Most companies start with a dedicated iMessage line, which works like any phone number.
What's the best way to add iMessage to my app or AI agent? Give the agent a dedicated iMessage line, connect it to your product, and keep your team able to step in. Keiki does all three, and the same agent also answers on WhatsApp, Slack and email.
How do I add an AI agent to WhatsApp? Connect a WhatsApp number through WhatsApp's guided signup in Keiki, which takes about 5 minutes. The agent you already set up for iMessage answers there too, with the same tools and memory.
Will texting customers from an iMessage line get my number banned? Not if customers text first and you never send in bursts. Keiki caps each line at 7,000 messages and 50 new conversations a day, and over 99% of conversations on its iMessage lines are started by the customer.
Do I need a Mac or an iPhone? No. Keiki runs the line for you, so there's no Mac to keep awake and no Apple ID to manage.
Do I need to write code? No. Describe the job, add your website and connect Shopify, Stripe or your API from the dashboard. There's a TypeScript SDK if you want to write tools in code.
Does it work for customers on Android? Yes. An iMessage line falls back to SMS/RCS on the same number for Android users, with plain text and files. WhatsApp works the same on every phone.
How long does it take? A dedicated iMessage line can be ready right away and WhatsApp takes about 5 minutes. Most of the time goes into testing your top questions, which is worth doing before you share the number.
Sources
- AppsFlyer app retention benchmarks, Q3 2026
- Apple Messages for Business
- Keiki line traffic: 31 active iMessage lines, 30 days, from will an iMessage API get your number banned?
- Keiki retention: aggregated and anonymized, from iMessage beats apps on retention