WhatsApp — bot surface
Blocked by contract
Meta's Business Solution Terms strictly prohibit AI providers from the platform where the AI is the primary functionality. Engineering was never the obstacle.
LiveCEO · channel research · 21 July 2026
What it actually takes to connect them. Research, not implementation.
WhatsApp — bot surface
Blocked by contract
Meta's Business Solution Terms strictly prohibit AI providers from the platform where the AI is the primary functionality. Engineering was never the obstacle.
WhatsApp — history ingest
Effectively no
No history API exists. The one real backfill returns 180 days of the company's own 1:1 customer inbox — not internal knowledge. The rest gets phone numbers banned.
iMessage
Mac agent or nothing
Verdict unchanged, now priced: ~6–10 person-weeks for v1 and ~2–4 person-weeks every year, forever.
Same ~14 person-days as WhatsApp, but $0 per message, unlimited, inside the customer's own Microsoft 365 tenant — no Meta, no carrier, no verification, no session window, no policy exposure. And whatever channel comes next, extract the adapter first.
Date: 2026-07-21. Commissioned by the owner: *"Research what it takes to connect WhatsApp & iMessage."* This is a build/buy/skip decision document, not an implementation. Nothing in this branch adds a channel.
Companion to research-personal-messaging-ingestion.md (2026-07-15), which already settled iMessage and built Telegram Personal. This document does the net-new WhatsApp work and revises three iMessage claims that no longer hold. Read that one first for the original iMessage reasoning; §4 here only records what changed.
Read this section before you act on a number.
This research ran as a fan-out of 11 parallel researchers against live primary sources, followed by an adversarial verification pass in which a second, independent agent had to re-fetch the source and try to *refute* each high-stakes claim. The verification pass largely did not complete — the account hit its monthly spend limit partway through, killing 95 of 139 agents. Verification landed for the Cloud API mechanics and the 24-hour-window/template dimensions, and for one claim on official ingest. It did not run for pricing, iMessage, the Mac agent, unofficial ingest, DMA, or alternatives.
Two dimensions — WhatsApp onboarding requirements and the WhatsApp AI policy — returned degenerate placeholder output and were re-researched by hand afterwards. The AI-policy clause in §3.1 was fetched directly from whatsapp.com by the author and is quoted verbatim; the onboarding lead-time question in §3.5 is the acknowledged hole in this document.
Every claim below is therefore tagged:
| Tag | Meaning |
|---|---|
| [V] | Verified — a second agent independently re-fetched a primary source and confirmed it |
| [P] | Primary — quoted from a Meta/Apple/Google/EU/court document, single pass, not adversarially re-checked |
| [S] | Secondary — vendor blogs, BSP docs, community reports; cross-checked where noted |
| [E] | Estimate — engineering judgement, explicitly not a sourced fact |
Do not treat an [S] dollar figure as a quote. Meta's own rate card is a JS-gated CSV/PDF download that could not be retrieved by any fetch method tried (confirmed against both the live page and a 20 Jun 2026 Wayback snapshot: zero <table> tags, zero .csv/.pdf hrefs in ~1.2 MB of HTML). [P] Every USD figure in §3.3 is a cross-checked secondary number.
| Question | Verdict |
|---|---|
| WhatsApp as a bot surface (shape A) — inbound question → agent turn → outbound answer | Do not build as a LiveCEO product. Meta's Business Solution Terms prohibit AI providers from using the platform where the AI is the primary functionality. A narrow vendor-mode path survives (customer owns the WhatsApp account, LiveCEO operates it) but it destroys self-serve. |
| WhatsApp as an ingest source (shape B) — pull history into the wiki | Effectively no. There is no history API. The one real backfill — Coexistence, 180 days — returns the company's own *customer* inbox, 1:1 only, once. That is not internal company knowledge. Everything else is a banned reverse-engineered client. |
| iMessage | Unchanged: Mac agent or nothing. Now with a price: ~6–10 person-weeks for v1, ~2–4 person-weeks/year forever, and a live cautionary precedent (§4.3). |
| What to do instead | Microsoft Teams bot (free, unlimited, inside the customer's own tenant) and/or a PWA with web push. Neither has a gatekeeper. |
The one-line answer for the owner: WhatsApp is not blocked by engineering, it is blocked by Meta's contract — and the part of it that *is* legal costs LiveCEO the self-serve onboarding that is the product's whole North Star. iMessage is unblocked but costs a new native app you have to maintain forever. The channel you already own (Telegram) does what both of these would do, for free, today.
"Connect WhatsApp" is two products with almost no shared code. Keep them apart or the estimate is meaningless.
Shape A — the bot surface. A user messages a number, LiveCEO runs an agent turn against the org's wiki, and answers. The pattern to clone is src/app/api/webhooks/telegram/route.ts (440 lines) and its deliberate twin src/app/api/webhooks/slack/route.ts (441 lines), plus outbound clients src/lib/telegramBot.ts (105) / src/lib/slackBot.ts (101) and formatters src/lib/telegramFormat.ts (509) / src/lib/slackFormat.ts (519).
Shape B — the ingest source. Pull message history into the org wiki, the way src/lib/telegramPersonal.ts (515 lines, MTProto phone→code→2FA) does for Telegram DMs.
The architectural fact that drives every estimate below: there is no channel adapter interface in this codebase. Telegram and Slack are parallel hand-written implementations whose header comments say they mirror each other. A WhatsApp bot is a 5th hand-written copy, not a plugin. The one genuine plugin point is OtherSourceIngester (src/lib/ingesterRegistry.ts:93-95), and it serves shape B only.
This is the finding that decides the question, and it is not in any of the engineering docs.
From the WhatsApp Business Solution Terms, last modified 6 March 2026, quoted verbatim (https://www.whatsapp.com/legal/business-solution-terms): [P]
Providers and developers of artificial intelligence or machine learning technologies, including but not limited to large language models, generative artificial intelligence platforms, general-purpose artificial intelligence assistants, or similar technologies as determined by Meta in its sole discretion ("AI Providers"), are strictly prohibited from accessing or using the WhatsApp Business Solution, whether directly or indirectly, for the purposes of providing, delivering, offering, selling, or otherwise making available such technologies when such technologies are the primary (rather than incidental or ancillary) functionality being made available for use, as determined by Meta in its sole discretion; provided, however, that such technologies may be made available to WhatsApp users who have registered phone numbers with a European Economic Area or Brazil country code.
Applied to LiveCEO, honestly:
There is one door left open, in the immediately following sentence: [P]
Notwithstanding the foregoing, you may retain an AI Provider as your Third Party Service Provider in accordance with these WhatsApp Business Solution Terms. In such cases, you may not directly or indirectly allow Business Solution Data, including any anonymous, aggregate, or derived forms of Business Solution Data, to be used to create, develop, train, or improve any machine learning or artificial intelligence systems, models, or technologies, including large language models (collectively, "AI Models"); provided that you may use Business Solution Data to fine-tune an AI Model that is for your exclusive use, so long as this does not result in Business Solution Data being used to create, develop, train, or improve any other AI Models.
What that carve-out actually costs. The customer — not LiveCEO — must own the WhatsApp Business Account, the phone number, and the Business Verification, and then retain LiveCEO as their Third Party Service Provider. That is a legitimate path. It is also the exact opposite of the product's North Star, which is *"a new org self-serves end-to-end … with zero operator touch."* Every WhatsApp customer becomes a hand-held enterprise onboarding.
Two more consequences worth flagging to counsel before anyone writes code:
The brief anticipated the window would break the product. The research says something more precise, and it matters.
How the window works. A 24-hour "customer service window" opens the moment a user messages or calls the business, and resets to a fresh 24 hours on every subsequent inbound message, with no cap on resets — it can stay open indefinitely as long as the user keeps replying. [V] Inside it, the business may send free-form messages of 17 permitted types, including plain text. [V] The instant it closes, *"you can only send pre-approved template messages"* — free-form sends are rejected outright. [V] (https://developers.facebook.com/documentation/business-messaging/whatsapp/messages/send-messages)
Why Q&A survives. A question-and-answer bot is inherently user-initiated. The user asks → the window opens → LiveCEO answers free-form, at length, for free. The next question resets the window. Ordinary Q&A never touches the template system at all.
Why alerts die. LiveCEO pushes alert notifications (src/lib/alertNotify.ts). A business- initiated alert at 3 a.m., 30 hours after the employee last spoke to the bot, falls outside the window and must be a template. Templates cannot carry an AI-written answer:
{{1}}.The compliant workaround is a short template with a URL button pointing at a web page holding the real answer — which is not "answering on WhatsApp," it is sending a link to the web app the customer already has.
Worth noting for perspective: Telegram already has a softer version of this constraint. The comment at src/app/api/webhooks/telegram/route.ts:225 records that *"a Telegram bot can only message a chat that first messaged it"* — which is why /subscribe exists as the per-chat opt-in gating all alert pushes. WhatsApp's rule is the same idea with an expiry clock attached. The difference is degree, not kind — but the degree is what breaks alerting.
The model. Conversation-based pricing was replaced by per-message pricing on 1 July 2025; you are billed when a template message is *delivered*, at a rate set by category and the recipient's country code. [P] Inbound user messages are never billed. [S]
Today, a LiveCEO Q&A bot costs $0.00 in Meta fees. Free-form service messages inside an open window have been free for all businesses since 1 November 2024. [P] A pure Q&A workload sends nothing else.
That ends on 1 October 2026 — ten weeks from now. From Meta's own sub-page: [P]
Effective October 1, 2026, Meta will charge on a per-message basis for service messages, consistent with how Meta charges for template messages… Any non-template message is charged as of October 1, 2026.
Meta has committed to publishing the new per-market rates by 1 September 2026 and had not done so as of this research date. So the honest cost model is: free until 30 September 2026, then a per-message charge at roughly local utility rates, which nobody can quote yet.
Illustrative run-rate for 1,000 employee questions/month once billing starts, using January-2026-vintage utility rates as a proxy — [S], directional only, not a quote:
| Employees based in | ~Monthly cost for 1,000 answers |
|---|---|
| India | ~$1.40–1.60 |
| United States | ~$4 |
| Brazil | ~$6.80–8 |
| Mexico | ~$8–9.80 |
| United Kingdom | ~$17–21 |
| Ukraine (CEE bucket) | ~$24–26 |
| Germany | ~$33–68 |
Ukraine is not listed individually by any source found; the figure is inferred from a shared CEE multiplier bucket that groups it with Poland, Romania and Hungary. The German spread is wide enough across sources that it should be treated as unknown rather than estimated.
Two other pricing facts worth knowing: Meta paused all Marketing-category templates to US phone numbers on 1 April 2025 with no announced end date (error 131049) [S], and there is no longer any free-conversation allowance — the old 1,000/month tier was superseded in November 2024. [P]
Grounded in the actual repo, file-by-file.
The anatomy of a channel. Telegram as a chat surface is ≈2,400 lines across ~19 files: webhook route (440) + connect/disconnect/status/link-code/link-status routes (745 total) + outbound client (105) + formatter (509) + identity plumbing in accessDb.ts:1042-1169, db.ts:1790-1899, alertNotify.ts:41-132 + two settings-UI components (SettingsView.tsx:1209-1441 and :194-377, 417 lines) + four schema blocks + 238 lines of tests. Slack's equivalent comes to ≈2,370 lines across ~14 files. That convergence is the finding: each hand-written channel costs ~2,400 lines regardless of provider, because there is no shared adapter. [E]
What WhatsApp reuses and what is new. Org identity from ?org=<uuid> in the URL we registered ports as-is. Auth layer 1 (?token= timing-safe compare) ports as-is. Auth layer 2 is Meta's X-Hub-Signature-256 HMAC over the raw body — structurally identical to src/lib/slackSig.ts (62 lines), so that file is a near-verbatim template. Genuinely new: Meta's GET subscribe handshake (echo hub.challenge back as plain text), which resembles neither Telegram's API-call registration nor Slack's POST-body challenge; and a 5-field credential (WABA ID, phone number ID, permanent token, app secret, verify token) versus Telegram's single token, needing its own sealed table and dedicated WHATSAPP_KEY_ENC_KEY.
The formatter is actually easier. WhatsApp's dialect is bare-marker like Slack's mrkdwn, so applyEmphasis's delimiter-stack parser ports nearly unchanged. But WhatsApp has no anchor-text links at all — not even Slack's <url|label>. Today telegramFormat.ts:76-88 turns [label](url) into a real <a href>; on WhatsApp every wiki citation degrades unconditionally to label (url) inline. That is the existing *fallback* branch becoming the only path — simpler code, worse answers, in a product whose value is cited answers.
The identity-link gap, and the one place WhatsApp wins. telegram_links (scripts/init-db.sql:1216-1229) maps chat_id → org_person. Slack has no equivalent, and the cost is concrete: for an access-managed org the Slack webhook hard-fails closed and never calls the agent (src/app/api/webhooks/slack/route.ts:361-376), and Slack alert push is suppressed entirely with a loud warning (src/lib/alertNotify.ts:233-250). A WhatsApp chat is 1:1 with a phone number, structurally like Telegram's chat_id rather than Slack's shared channel — so whatsapp_links ports almost directly and WhatsApp would not inherit Slack's gap.
Estimates [E]:
| Path | Person-days |
|---|---|
| (a) WhatsApp bot, copy-paste style (5th hand-written channel) | ~14 |
| (b) Extract a real channel adapter, re-port Telegram + Slack, then add WhatsApp | ~22.5 (extra ~8.5 over (a)) |
| (c) WhatsApp as ingest-only source — *if it were possible; see §4* | ~3.5 |
Option (b) deserves a hearing on its own merits, independent of WhatsApp. The "chat gate → rate limit → access scope → agent turn" sequence is already hand-copied three times (web chat, Telegram, Slack), and src/lib/chatGate.ts:1-7 documents that this exact duplication already caused a production incident once — hand-copied predicates drifted and locked orgs out of chat. Breakeven on the extra 8.5 days is the *second* channel added after WhatsApp.
Onboarding lead times — Business Verification document requirements and turnaround, display-name review, Tech Provider vs Solution Partner, App Review duration for whatsapp_business_messaging — were not established. The assigned researcher returned placeholder output and the search budget was exhausted before it could be redone.
What is known: messaging limits changed on 7 October 2025 — tiers are now scored per business *portfolio* rather than per phone number, the entry tier rose from 1,000 to 2,000 business-initiated conversations per 24h, the "Flagged" number status was eliminated, and auto tier-ups evaluate every 6 hours. New portfolios still start at 250 recipients/24h, and reaching 2,000 requires business verification *or* 2,000 delivered high-quality template messages to unique numbers in 30 days. [V] None of that constrains a Q&A bot, which only ever replies inside an open window.
If §3.1 had not already settled the question, this gap would need closing before any commitment. It does, so it does not.
The Cloud API's messages resource documents exactly one method: POST. There is no GET, no list, no search, no export. [V] Meta's Graph API webhooks documentation states it plainly: [V]
You will not be able to query historical webhook event notification data, so be sure to capture and store any webhook payload content that you want to keep.
(https://developers.facebook.com/docs/graph-api/webhooks/getting-started)
Cloud API messages are retained by Meta at most 30 days, for retransmission and delivery receipts, with no endpoint to pull them back out even inside that window. [P] For the consumer and Business apps, end-to-end encryption means Meta's servers never hold readable content at all — which is why WhatsApp's own "Request account info" report states verbatim *"This report does not include your messages."* [P] The Business Management API's analytics endpoints return counts and costs, never message bodies. [P]
This overturned the prior. The adversarial verifier found it while trying to refute "no backfill exists," and it is worth stating precisely because it is easy to over-read.
Coexistence (the WhatsApp Business App + Cloud API same-number feature; beta May 2025, global default by November 2025 [S]) pushes historical chat content through a dedicated history webhook during one-time onboarding, triggered by POSTing to smb_app_data with sync_type=history. [V] The exact shape: [P]
Why this does not help LiveCEO much. It backfills the history of a WhatsApp Business App number — i.e. the company's *customer-facing* inbox. It is not employees' personal WhatsApp, and it explicitly excludes group chats, which is where internal team conversation actually lives. For a company-brain product, this is a customer-support corpus, not institutional knowledge. It is a real and legitimate data source, and it is the wrong one.
Blunt answer: you can build "ingest the last 6 months of this business number's 1:1 customer chats, once, plus everything from today forward." You cannot build "ingest our company's WhatsApp history."
Reverse-engineered WhatsApp Web clients (Baileys, whatsapp-web.js, WPPConnect, whatsmeow) work mechanically: link by QR or 8-character pairing code, then a history sync pulls whatever backlog still lives on the user's phone. [S] Note the mechanism — on multi-device link, history comes from the primary phone's local store, never from Meta's servers, transferred as an E2E- encrypted blob. [P] So it can only ever include what that handset still retains.
It is a flat breach of the Terms of Service, which name reverse engineering, automated or unauthorized access, and building software that *"function[s] substantially the same as our Services"* as prohibited. [P] Enforcement is technical, not legal: in May 2025 a ban and warning wave hit whatsmeow and Baileys users indiscriminately, including low-volume accounts that were only replying to inbound messages; the maintainer closed the tracking issue "not planned" because there is no fix. [S] (https://github.com/tulir/whatsmeow/issues/810)
No public lawsuit by Meta against any of these libraries or the commercial resellers was found. [S] But Meta has litigated the identical "automated means / unauthorized manner" clause to a win against a Facebook/Instagram scraper (BrandTotal, settled 2022) [S] — so the posture for a *commercial reseller* of that access differs from a hobbyist's.
Vendor triage, since the marketing does not distinguish them: 2Chat and Wassenger are genuine Meta-certified BSPs on the official Cloud API. Whapi.cloud, Periskope, TimelinesAI, Unipile and Maytapi are unofficial QR-linked WhatsApp Web wrappers — Maytapi's own homepage brands itself *"Unofficial WhatsApp API for Developers."* [S]
Local device databases (Android msgstore.db.crypt15, iOS ChatStorage.sqlite) are decryptable but need root, the user's 64-hex backup key, or an unencrypted local iTunes/Finder backup — and are entirely unreachable if the user has WhatsApp's own E2E-encrypted-backup toggle on. [S] It is a one-shot forensic copy, not a pipeline.
Verdict: rejected. The failure mode is the customer's own phone number getting silently and un-appealably banned — the single worst outcome LiveCEO could hand an anchor customer.
Worth recording because it looks like a loophole and is not.
WhatsApp has been a designated DMA gatekeeper core platform service since 6 September 2023. [P] The messaging-interoperability obligation is Article 7, not Article 6(7) — 6(7) is a separate obligation about OS and hardware feature interoperability. [P] Article 7 lets *"any provider of number-independent interpersonal communications services"* request interoperability. The requester must itself be, or credibly intend to become, a competing consumer messaging service.
LiveCEO is not one and cannot become one to get message access. There is no human on the other end of the conversation; it fails the EECC definition of an interpersonal communications service outright. Meta's technical terms compound it: bilateral per-partner agreement, Signal Protocol or demonstrated equivalent, a WhatsApp-defined XMPP+Noise protocol, client IP disclosure to Meta, and no server-side message buffering on the partner's side. [P]
Reality check on how open this program is: as of the November 2025 launch, exactly two third parties had shipped — BirdyChat and Haiket. [S] Matrix/Element, an actual qualifying, well-funded messaging project that demoed a working bridge at FOSDEM in February 2024, still had not shipped as of its last public update and called the terms *"economically unviable."* [P]
The verdict of research-personal-messaging-ingestion.md stands: feasible only with a Mac agent. Apple still publishes no API to read Messages content; the Messages framework only builds interactive iMessage app extensions requiring live user action, and IdentityLookup only classifies incoming messages at delivery. [P] Nothing at WWDC 2025 or 2026 — the App Intents expansion, SiriKit's deprecation, "AI Shortcuts" — opens a route into the Messages database. [P]
Three claims in that document need revising.
The prior document asserted the program closed to new partners in 2026. Apple's own live onboarding page (https://register.apple.com/resources/messages/msp-onboarding/) still describes an open pathway for new Messaging Service Providers: create an org account at Apple Business Register, regional team reviews capabilities and go-to-market plan, then Integration → Brand Onboarding → Launch. No closure language anywhere. [P] Individual brands wanting to use an already-approved MSP can register at any time with no waitlist language. [P]
The "closed" claim traces to a single undated Zoho community post recounting a second-hand statement from Apple. That is not a source. Treat the program as open but irrelevant — it remains inbound/customer-initiated only, and Apple's own FAQ confirms a business *"cannot identify or message customers by phone number alone."* [P] It is a customer-support channel, not a route to company knowledge.
New since the last document: on 8 July 2026 the EU General Court ruled in Joined Cases T-1079/23, T-1080/23 and T-214/24 (Press Release 96/26). It upheld Apple's gatekeeper designation for the App Store and iOS/Safari, and ruled Apple's challenge concerning the iMessage classification inadmissible — because absent an actual gatekeeper designation, no DMA obligations attach to iMessage, so the classification produces no binding legal effect to challenge. [P] (https://curia.europa.eu/site/upload/docs/application/pdf/2026-07/cp260096en.pdf)
Net effect: the Commission's 12 February 2024 decision not to designate iMessage stands, and no DMA interoperability obligation applies to iMessage. Apple has until roughly mid-to-late September 2026 to appeal on points of law. No regulatory route is coming.
The technical picture holds. On macOS 26 (Tahoe) the text column is NULL and message content lives only in the attributedBody typedstream BLOB, requiring a reverse-engineered parser off-Mac. [P] imessage-exporter / the imessage_database Rust crate is very actively maintained — v4.2.0 "Stream Orchid" on 18 June 2026, releases every 3–6 weeks, explicit support for macOS Tahoe 26.5.2 and iOS 26.5.2. [P]
What shipping the Mac agent actually takes [P] unless marked:
com.apple.security.files.all — was removed after OS X 10.11. You ship Developer ID-signed and notarized, outside the store.com.apple.TCC.configuration-profile-policy, service key SystemPolicyAllFiles) — which is the realistic path for a company issuing employee Macs. On an unmanaged personal Mac the user must click through System Settings themselves, and needs admin rights to do it; Apple restricts standard-user self-consent to ListenEvent and ScreenCapture only.imessage-exporter shipped dedicated compatibility releases for iOS 17/Sonoma (Nov 2023) and iOS 26/Tahoe (Sep 2025) plus repeated patches between, and had to write a pure-Rust typedstream deserializer just to read message text.The warning, and it is a live one. BlueBubbles is the closest technical analog to this agent — open source, Full Disk Access, reads chat.db in the background. Its Homebrew distribution is being disabled on 1 September 2026 because it fails the macOS Gatekeeper check: Apple flagged the maintainer's Apple Developer account, blocking code-signing of the server binary (issue #790, opened 7 April 2026, still unresolved). [S] Separately, macOS 26 Tahoe breakage in that project is still open nearly a year after Tahoe shipped, across at least six issues — while macOS 27 is already in public beta. [S]
Read that as the actual risk profile: the annual-maintenance tax is real and observable, and a developer account can be flagged for shipping this category of software. Our design avoids BlueBubbles' worst exposure — we read only, never send, never touch the Apple ID, never spoof a device — but the account-flag precedent is not something to discover after building.
No off-the-shelf substitute exists. Decipher TextMessage ($29.99 one-time) is a single-machine manual export tool, not a fleet-to-server agent. [P] Enterprise archiving vendors (LeapXpert, TeleMessage, Theta Lake, Smarsh) capture iMessage for compliance but through their own relay architectures, publish no pricing, and are demo-gated. [P]
The research surfaced a better answer than either channel in the brief.
Microsoft Teams via Azure AI Bot Service. Unlimited messages for $0 on standard channels (which include Teams) on both the Free and Standard tiers, running entirely inside the company's own Microsoft 365 tenant. [P] (https://azure.microsoft.com/en-us/pricing/details/bot-services/) No Meta, no carrier, no verification, no session window, no per-message fee, no AI-provider prohibition. For reaching *employees* — which is what this whole exercise is for — it is the most practical unbuilt channel, and it lands in exactly the enterprise accounts LiveCEO is selling to.
A PWA with web push. Free per message on both platforms; the cost is building it, not running it. [P] Keeps the citation-rich answers that WhatsApp's lack of anchor links would destroy.
Ranked, for the record:
| Channel | Reach | Free-form long AI answers, anytime? | Meta/carrier cost per 1k msgs | Effort | Biggest blocker |
|---|---|---|---|---|---|
| Telegram (built) | Anyone with Telegram | Yes, within an opened chat | $0 | Done | Chat must message bot first |
| Microsoft Teams | Employees on M365 | Yes | $0 | ~14 person-days [E] | Customer must be on M365 |
| PWA + web push | Anyone | Yes | $0 | Larger | Install friction |
| Near-universal | Only inside 24h window | $0 today, per-message from 1 Oct 2026 | ~14 person-days | Meta bans AI providers (§3.1) | |
| RCS (RBM) | iOS 18+/Android, ~23 countries | Yes, 24h session window | ~$8.30–22 US + carrier surcharges [S] | Large | 3 separate US carrier approvals, no E2EE, not self-serve |
| SMS (Twilio) | Universal | Yes | ~$11–18 US [S] | Medium | A2P 10DLC registration; no formatting |
| iMessage | Apple users | N/A (ingest only) | N/A | 6–10 person-weeks | Native Mac app forever |
| Signal | — | — | — | — | No official bot/business API exists at all [P] |
One correction for the record, since the brief and common belief both get it wrong: RCS arrived on iPhone with iOS 18 in 2024, not iOS 26. [P] The 2026 news is end-to-end encryption, tied to GSMA Universal Profile 3.0 and reaching iPhone as an iOS 26.5 beta in May 2026 — and it covers person-to-person messaging only, never RCS Business Messaging. RBM has no E2EE in any form and Google can inspect message content. [P]
src/lib/chatGate.ts:1-7 already documents a production incident caused by the hand-copied duplication this would remove.Meta / WhatsApp (primary). https://www.whatsapp.com/legal/business-solution-terms · https://www.whatsapp.com/legal/business-terms · https://www.whatsapp.com/legal/terms-of-service · https://whatsappbusiness.com/policy/ · https://developers.facebook.com/docs/whatsapp/cloud-api/reference/messages/ · https://developers.facebook.com/docs/graph-api/webhooks/getting-started · https://developers.facebook.com/documentation/business-messaging/whatsapp/messages/send-messages · https://developers.facebook.com/documentation/business-messaging/whatsapp/templates/components/ · https://developers.facebook.com/documentation/business-messaging/whatsapp/templates/template-review · https://developers.facebook.com/documentation/business-messaging/whatsapp/templates/overview · https://developers.facebook.com/documentation/business-messaging/whatsapp/pricing · https://developers.facebook.com/documentation/business-messaging/whatsapp/pricing/non-template-messages · https://developers.facebook.com/documentation/business-messaging/whatsapp/webhooks/reference/history · https://developers.facebook.com/documentation/business-messaging/whatsapp/embedded-signup/onboarding-business-app-users · https://developers.facebook.com/documentation/business-messaging/whatsapp/data-privacy-and-security/ · https://developers.facebook.com/documentation/business-messaging/whatsapp/analytics/ · https://developers.facebook.com/documentation/business-messaging/whatsapp/upcoming-messaging-limits-changes/ · https://faq.whatsapp.com/526463418847093/ · https://faq.whatsapp.com/444002211197967 · https://engineering.fb.com/2021/07/14/security/whatsapp-multi-device/ · https://engineering.fb.com/2024/03/06/security/whatsapp-messenger-messaging-interoperability-eu/
Apple (primary). https://developer.apple.com/documentation/messages · https://developer.apple.com/documentation/identitylookup · https://developer.apple.com/documentation/security/app-sandbox · https://developer.apple.com/documentation/security/hardened-runtime · https://developer.apple.com/documentation/security/notarizing-macos-software-before-distribution · https://developer.apple.com/documentation/devicemanagement/privacypreferencespolicycontrol · https://developer.apple.com/documentation/servicemanagement/smappservice · https://developer.apple.com/support/compare-memberships/ · https://support.apple.com/guide/mac-help/control-access-to-information-and-features-mchl211c911f/mac · https://support.apple.com/104972 · https://register.apple.com/resources/messages/msp-onboarding/ · https://register.apple.com/resources/messages/messaging-documentation/faq
EU / courts. https://curia.europa.eu/site/upload/docs/application/pdf/2026-07/cp260096en.pdf · https://digital-markets-act.ec.europa.eu/commission-designates-six-gatekeepers-under-digital-markets-act-2023-09-06_en · https://www.berec.europa.eu/system/files/2025-03/BoR%20(25)%2021%20BEREC%20Opinion%20on%20Meta's%20reference%20offers.pdf
Google / other primary. https://developers.google.com/business-communications/rcs-business-messaging/terms-and-policies/data-security · https://developers.google.com/business-communications/rcs-business-messaging/carriers/billing/us-billing-model · https://azure.microsoft.com/en-us/pricing/details/bot-services/ · https://signal.org/docs/ · https://core.telegram.org/bots · https://sparkle-project.org/documentation/
Projects and secondary. https://github.com/ReagentX/imessage-exporter · https://github.com/BlueBubblesApp/bluebubbles-server/issues/790 · https://github.com/tulir/whatsmeow/issues/810 · https://github.com/WhiskeySockets/Baileys · https://github.com/pedroslopez/whatsapp-web.js/ · https://matrix.org/blog/2024/09/whatsapp-dma/ · https://about.fb.com/news/2025/11/messaging-interoperability-whatsapp-enables-third-party-chats-for-users-in-europe/ · https://www.twilio.com/en-us/sms/pricing/us · https://www.twilio.com/docs/rcs/regional · https://www.decipher.tools/decipher-textmessage.html · https://leapxpert.com/imessage/ · https://www.salesforce.com/en-us/wp-content/uploads/sites/4/Salesforce-Message-Credits-WhatsApp-Rate-Card-per-message-Feb-17-2026-onward.pdf