WhatsApp — бот
Только режим «вендора»
Условия Meta запрещают AI-провайдерам работать на платформе. Аккаунт должен принадлежать клиенту — значит, self-serve пропадает.
LiveCEO · channel research · 22 июля 2026
Что делать по шагам, где подводные камни и как следить за трейд-оффами.
WhatsApp — бот
Только режим «вендора»
Условия Meta запрещают AI-провайдерам работать на платформе. Аккаунт должен принадлежать клиенту — значит, self-serve пропадает.
WhatsApp — импорт истории
Практически нет
API истории не существует. Единственный бэкфилл отдаёт 180 дней клиентского инбокса 1:1 — без групп. Остальные пути банят номер.
iMessage
Агент на Mac или ничего
Вердикт не изменился, но теперь с ценой: 6–10 недель на v1 и 2–4 недели в год на поддержку, бессрочно.
Те же ~14 человеко-дней, но $0 за сообщение, безлимит, внутри тенанта клиента — без Meta, без операторов, без верификаций, без 24-часового окна. А перед любым следующим каналом стоит вынести адаптер: чат-логика уже трижды скопирована руками, и это уже приводило к продовому инциденту.
Дата: 2026-07-22. Задача владельца: «что нужно, чтобы подключить WhatsApp и iMessage». Это план работ, а не реализация — в этой ветке ни один канал не написан.
Дополняет research-personal-messaging-ingestion.md (2026-07-15), где уже разобран iMessage и построен Telegram Personal. Здесь — WhatsApp с нуля и пересмотр трёх устаревших утверждений по iMessage.
Легенда достоверности: ✅ проверено вторым агентом по первоисточнику · 📄 цитата из документа Meta/Apple/суда (один проход) · 📰 вторичный источник · 📊 оценка, не факт.
| Канал | Можно ли подключить | Что реально блокирует |
|---|---|---|
| WhatsApp — бот | Да, но только в режиме «вендора» (аккаунт принадлежит клиенту) | Условия Meta запрещают AI-провайдерам работать на платформе. Это контракт, а не техника |
| WhatsApp — импорт истории | Практически нет | API истории не существует. Единственный бэкфилл отдаёт клиентский инбокс 1:1, не внутренние чаты |
| iMessage | Да, но только через агент на Mac | Нет облачного API. Нужно подписанное нативное приложение и его поддержка каждый год |
Если нужен канал «сотрудник спрашивает с телефона» — самый дешёвый путь не WhatsApp, а бот в Microsoft Teams: $0 за сообщение, безлимит, внутри тенанта клиента, без Meta, без операторов, без верификаций и окон. Трудозатраты те же ~14 человеко-дней. (цены Azure Bot Service 📄)
WhatsApp Business Solution Terms, изменены 2026-03-06 (https://www.whatsapp.com/legal/business-solution-terms) 📄:
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… are strictly prohibited from accessing or using the WhatsApp Business Solution, whether directly or indirectly… 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.
Что это значит для LiveCEO:
Дверь, которая остаётся открытой — следующее предложение того же документа 📄:
Notwithstanding the foregoing, you may retain an AI Provider as your Third Party Service Provider… you may not directly or indirectly allow Business Solution Data… to be used to create, develop, train, or improve any machine learning or artificial intelligence systems…
Отсюда два возможных режима — и выбор делается до первой строчки кода:
| Режим | Кто владеет WABA, номером, верификацией | Возможен? |
|---|---|---|
| Платформа — LiveCEO подключает клиентов сам, self-serve | LiveCEO | ❌ Прямо запрещён |
| Вендор — LiveCEO обслуживает аккаунт клиента как его подрядчик | Клиент | ✅ Разрешён оговоркой |
Цена режима «вендор»: пропадает self-serve. Каждый клиент проходит верификацию Meta руками. Это ровно то, что North Star продукта называет «zero operator touch».
Задача юристу до старта: оговорка запрещает использовать Business Solution Data для «create, develop, train, or improve» AI-систем. Мы не обучаем модели — мы пишем markdown-вики, которую агент читает в момент ответа. Это retrieval, а не обучение, но формулировка широкая, и импорт переписки в вики, которую читает ассистент — вопрос к юристу, не к инженеру.
Порядок обязателен: этапы 2 и 3 нельзя начать, пока не закрыт этап 1, а код (этап 4) без этапов 2–3 негде тестировать, кроме тестового номера.
| # | Действие | Подводный камень |
|---|---|---|
| 1.1 | Выбрать режим «вендор» и зафиксировать, что WABA оформляется на клиента | Соблазн оформить на LiveCEO ради скорости — это прямое нарушение п. 0 |
| 1.2 | Проверить у юриста пункт про Business Solution Data | Импорт переписки в вики — отдельный вопрос, не тот же, что ответы бота |
| 1.3 | Решить, что делаем с алертами | Спойлер: вне 24-часового окна они не работают, см. трейд-офф T1 |
⚠️ Это самая слабая часть ресёрча. Агент, которому досталась тема онбординга, вернул заглушки, а бюджет веб-поиска кончился раньше, чем её удалось переделать. Последовательность ниже — стандартный флоу Meta, лид-таймы не подтверждены первоисточником в этой работе. Проверять перед тем, как давать клиенту сроки.
| # | Действие | Кто | Подводный камень |
|---|---|---|---|
| 2.1 | Создать Meta Business Portfolio | Клиент | — |
| 2.2 | Пройти Business Verification (документы юрлица) | Клиент | Без верификации лимит остаётся 250 получателей/24ч ✅ и потолок шаблонов 250 вместо 6000 ✅ |
| 2.3 | Завести WhatsApp Business Account (WABA) | Клиент | — |
| 2.4 | Выделить отдельный телефонный номер | Клиент | Номер не должен быть привязан к действующему аккаунту WhatsApp. Забрать номер у живого корпоративного WhatsApp = сломать людям текущую переписку |
| 2.5 | Пройти проверку display name | Клиент | Отклоняется за несоответствие названию юрлица |
| 2.6 | Выдать LiveCEO доступ к активам как Third Party Service Provider | Клиент | Это и есть юридическое основание из п. 0 — не пропускать |
Лимиты, которые точно известны ✅ (изменения от 2025-10-07, документация): лимиты считаются на портфолио, а не на номер; старт — 250 получателей/24ч; следующий уровень 2 000 даётся за business verification или за 2 000 доставленных качественных шаблонов уникальным номерам за 30 дней; статус «Flagged» отменён; автоповышение проверяется каждые 6 часов.
Для Q&A-бота эти лимиты не важны: они ограничивают только сообщения вне окна.
| # | Действие | Подводный камень |
|---|---|---|
| 3.1 | Создать Meta App, добавить продукт WhatsApp | — |
| 3.2 | Забрать App Secret — им подписываются вебхуки | Это 5-е поле креденшла; у Telegram он один |
| 3.3 | Создать System User и постоянный токен с правами whatsapp_business_messaging, whatsapp_business_management | Временные токены живут 24 часа — на них нельзя запускаться |
| 3.4 | Настроить вебхук: ответить на GET с hub.mode/hub.verify_token/hub.challenge, вернув hub.challenge plain text | Это третий, новый паттерн регистрации — не как у Telegram (вызов API) и не как у Slack (challenge в POST-теле). Готового кода в репозитории нет |
| 3.5 | Проверить подпись X-Hub-Signature-256 (HMAC-SHA256 по сырому телу) | Структурно совпадает со Slack — src/lib/slackSig.ts (62 строки) переносится почти дословно |
| 3.6 | Прогнать сквозной тест на тестовом номере, потом переключить на боевой | — |
Канал в этом репозитории — не плагин. Точка расширения (OtherSourceIngester, src/lib/ingesterRegistry.ts:93-95) существует только для импорта источников, не для чатов. Telegram и Slack — параллельные рукописные реализации.
| # | Что писать | Дней 📊 | Откуда копировать |
|---|---|---|---|
| 4.1 | Вебхук-роут | 2.0 | src/app/api/webhooks/telegram/route.ts (440 строк) |
| 4.2 | Исходящий клиент + логика 24ч окна | 1.5 | src/lib/telegramBot.ts (105) — окно новое, аналога нет |
| 4.3 | Форматтер | 2.0 | src/lib/slackFormat.ts (519) — диалект маркерный, как в Slack |
| 4.4 | Таблица org_whatsapp_bots + WHATSAPP_KEY_ENC_KEY + CRUD | 1.5 | src/lib/secretBox.ts, db.ts:1790-1899 |
| 4.5 | Settings UI (5 полей вместо одного токена) | 2.0 | SettingsView.tsx:1209-1441 |
| 4.6 | whatsapp_links — привязка номера к сотруднику | 1.0 | telegram_links, scripts/init-db.sql:1216-1229 |
| 4.7 | Алерты notifyWhatsApp с честной обработкой закрытого окна | 1.0 | alertNotify.ts:41-132 |
| 4.8 | Тесты | 1.5 | test/telegramFormat.test.ts |
| 4.9 | Сквозная проверка, документация | 1.5 | — |
Хорошая новость по 4.6: чат WhatsApp — это 1:1 с номером телефона, структурно как chat_id у Telegram, а не как общий канал Slack. Поэтому WhatsApp не унаследует дыру Slack, где для orgs с управлением доступом бот жёстко отказывает (src/app/api/webhooks/slack/route.ts:361-376), а пуш алертов подавлен целиком (src/lib/alertNotify.ts:233-250).
Плохая новость по 4.3: в WhatsApp нет ссылок с текстом-якорем. Сегодня telegramFormat.ts:76-88 превращает [label](url) в настоящий <a href>. В WhatsApp каждая ссылка на источник в вики превратится в голый URL внутри текста. Для продукта, ценность которого — ответы со ссылками на источники, это заметная деградация.
Каждый рукописный канал стоит ~2 400 строк в ~15–20 файлах: Telegram ~2 400, Slack ~2 370. Совпадение и есть доказательство — общего адаптера нет, каждый канал выводит одну и ту же форму заново.
| Путь | Человеко-дней 📊 |
|---|---|
| WhatsApp как 5-я копия | ~14 |
| Вынести адаптер + перевести на него Telegram и Slack + WhatsApp | ~22.5 (+8.5) |
Окупаемость +8.5 дней — на втором канале после WhatsApp. Но у рефакторинга есть и самостоятельный аргумент: src/lib/chatGate.ts:1-7 прямо описывает уже случившийся продовый инцидент — руками скопированные предикаты разъехались и на несколько дней закрыли оргам чат.
Общего API истории нет. У ресурса messages единственный метод — POST ✅. Документация Graph API говорит прямо ✅:
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.
Сообщения Cloud API хранятся у Meta максимум 30 дней ради ретрансляции, без эндпоинта на чтение 📄. Для обычного и Business-приложения сквозное шифрование означает, что у Meta читаемого контента нет вообще — поэтому отчёт «Request account info» дословно сообщает: «This report does not include your messages» 📄.
Единственный настоящий бэкфилл — Coexistence ✅ (документация):
| Параметр | Значение |
|---|---|
| Глубина | до 180 дней |
| Что входит | только чаты 1:1 — групповые исключены полностью 📄 |
| Медиа | только за последние 14 дней, остальное потеряно навсегда 📄 |
| Как отдаётся | одноразовый поток вебхуков в 3 фазы, не запрашиваемый эндпоинт |
| Дедлайн | синхронизация обязана уложиться в 24 часа после онбординга, иначе всё заново 📄 |
Почему это не решает нашу задачу. Coexistence отдаёт историю номера WhatsApp Business App, то есть клиентский инбокс компании. Это не личные чаты сотрудников, и групповые чаты — где и живёт внутреннее обсуждение — исключены явно. Для «мозга компании» это корпус поддержки клиентов, а не институциональное знание. Источник реальный и легальный, но не тот.
Вердикт от 2026-07-15 не изменился: агент на Mac или ничего. Ниже — во что это обходится.
| Утверждение (2026-07-15) | Статус сейчас |
|---|---|
| «Messages for Business закрыт для новых партнёров в 2026» | ❌ Не подтверждается. Страница онбординга Apple по-прежнему описывает открытый путь: заявка → ревью → Integration → Brand Onboarding → Launch 📄. Прежний вывод опирался на один недатированный пост на форуме. Но канал всё равно нерелевантен — он только входящий, бизнес «cannot identify or message customers by phone number alone» 📄 |
| «ЕС не признал iMessage гейткипером, Февр. 2024» | ✅ Подтверждено и усилено. Суд ЕС 2026-07-08 (дела T-1079/23, T-1080/23, T-214/24) признал жалобу Apple по классификации iMessage неприемлемой 📄. Решение от 12.02.2024 в силе, обязательств по интероперабельности у iMessage нет. Срок на апелляцию — примерно до конца сентября 2026 |
| «текст в macOS 26 лежит в attributedBody, а не в text» | ✅ Подтверждено. Парсер imessage-exporter жив: v4.2.0 от 2026-06-18, релизы каждые 3–6 недель, поддержка Tahoe 26.5.2 📄 |
| # | Действие | Сколько 📊 | Подводный камень |
|---|---|---|---|
| 1 | Apple Developer Program — $99/год 📄 | дни | Для организации нужен D-U-N-S. Официального SLA по срокам проверки Apple не публикует |
| 2 | Написать агент: Swift, menu-bar + LaunchAgent, чтение chat.db, парсинг typedstream, курсор по max ROWID, HTTPS-выгрузка | 6–10 недель | Rust/Tauri/Electron не экономят: FDA, регистрация login item, подпись и нотаризация — требования ОС, а не UI-фреймворка |
| 3 | Подписать Developer ID + включить Hardened Runtime (обязателен) + нотаризовать notarytool + stapler 📄 | часы | Нотаризация быстрая: «most software within 5 minutes, 98% within 15 minutes», лимит 75 отправок/день 📄 |
| 4 | Раздать и получить Full Disk Access | зависит | App Store исключён категорически: MAS требует App Sandbox, а entitlement на чужие данные (com.apple.security.files.all) убран после OS X 10.11 📄 |
| 4a | — на управляемом парке: PPPC-профиль через MDM (com.apple.TCC.configuration-profile-policy, ключ SystemPolicyAllFiles) 📄 | — | Это реальный путь для компании с корпоративными маками |
| 4b | — на личном Mac: сотрудник кликает сам в System Settings | — | Нужны права админа: Apple разрешает самостоятельное согласие обычному пользователю только для ListenEvent и ScreenCapture 📄 |
| 5 | Приёмный эндпоинт в LiveCEO, привязанный к орг + человеку | ~3 дня 📊 | — |
| 6 | Автообновление Sparkle | ~2 дня 📊 | Отдельная пара ключей EdDSA, не связанная с подписью Apple; ротация возможна только если меняется один ключ за раз 📄 |
| 7 | Поддержка: 2–4 недели/год, навсегда 📊 | ежегодно | chat.db — приватная схема без версионирования и без контракта |
BlueBubbles — ближайший технический аналог этого агента (open source, Full Disk Access, читает chat.db в фоне). Его раздача через Homebrew отключается 2026-09-01, потому что сборка не проходит Gatekeeper: Apple пометила аккаунт разработчика мейнтейнера и подпись сломалась (issue #790 от 2026-04-07, не закрыт) 📰. Отдельно: поломки под macOS 26 у них открыты почти год, минимум шесть issue, а macOS 27 уже в публичной бете 📰.
Читать это так: ежегодный налог на поддержку — наблюдаемый факт, и аккаунт разработчика может быть помечен за софт этой категории. Наш дизайн безопаснее (только чтение, ничего не отправляем, Apple ID не трогаем, устройство не подделываем), но прецедент стоит знать заранее.
Готовой замены нет: Decipher TextMessage ($29.99) — ручной экспорт на одной машине 📄; LeapXpert / TeleMessage / Theta Lake / Smarsh архивируют iMessage для комплаенса, но своей архитектурой, цены не публикуют, вход через demo 📄.
Главное правило — доктрина репозитория: никаких молчаливых деградаций. Каждый сбой ниже обязан всплывать в логе как ошибка, а не «тихо не отправилось».
| # | Трейд-офф | Что сломается на практике | Сигнал / метрика | Где смотреть | Порог | Действие |
|---|---|---|---|---|---|---|
| T1 | 24-часовое окно | Алерт, отправленный позже 24ч после последнего сообщения сотрудника, не доставится. Q&A при этом работает нормально | Ошибка отправки вне окна | Лог alert.notify_failed + счётчик отказов исходящих | любой >0 | Сразу решить продуктово: либо алерты только в Telegram, либо шаблон со ссылкой на веб |
| T2 | Шаблоны не вмещают ответ | Обход «отправим шаблоном» не работает: тело 1024 символа ✅, в переменных запрещены переводы строк и табы ✅ | Отклонения шаблонов | Вебхук message_template_status_update, поле reason | любое отклонение | Не пытаться «сделать шаблон пообщее» — это отдельная причина отказа |
| T3 | Цена с 2026-10-01 | Сегодня Q&A-бот стоит $0 (сервисные сообщения бесплатны с 2024-11-01 📄). С 1 октября 2026 Meta начинает брать за них деньги 📄 | Счёт Meta | Billing + pricing_analytics | появление ненулевого счёта | Пересчитать юнит-экономику. Тарифы Meta обещала опубликовать до 2026-09-01, на дату работы их нет |
| T4 | Качество номера | Падение рейтинга → ограничения на исходящие | phone_number_quality_update | Вебхук + WhatsApp Manager | жёлтый | Разбираться сразу; статус «Flagged» отменён с 2025-10-07 ✅, но рейтинг остался |
| T5 | Лимиты рассылки | Упор в лимит блокирует сообщения вне окна; ответы в окне продолжают работать | max_daily_conversations_per_business | Вебхук (заменил старое поле на номер) ✅ | приближение к тиру | Для Q&A не критично — но алерты упрутся первыми |
| T6 | Трактовка «primary functionality» | Meta может в одностороннем порядке решить, что мы AI Provider, и отключить аккаунт клиента | Метрики нет. Это контрактный риск | Ревизия условий | изменение редакции Terms | Поставить календарное напоминание на пересмотр business-solution-terms; аккаунт оформлен на клиента — значит и риск на клиенте, это надо проговорить |
| T7 | Ссылки без якорей | Все цитаты источников станут голыми URL в тексте | Качественный, не метрика | Ревью ответов | — | Показать владельцу реальный ответ до релиза |
| T8 | iMessage: релиз macOS | Каждый осенний релиз ломает чтение chat.db | Рост ошибок парсинга агентом | Ошибки приёмного эндпоинта | любой всплеск после релиза ОС | Держать 2–4 недели/год в плане; следить за релизами imessage-exporter |
| T9 | iMessage: аккаунт разработчика | Apple может пометить аккаунт → подпись и обновления встают (прецедент BlueBubbles) | Сбой нотаризации в CI | notarytool в пайплайне | первый отказ | План Б на раздачу заранее |
| T10 | Неофициальные клиенты WhatsApp | Бан номера клиента, без апелляции | — | — | — | Не делать. См. ниже |
messages (входящие) · message_template_status_update (T2) · phone_number_quality_update (T4) · account_update / лимиты (T5). Историю вебхуков Meta не отдаёт ✅ — что не сохранили в момент доставки, то потеряно.
Неофициальные клиенты (Baileys, whatsapp-web.js, WPPConnect, whatsmeow). Технически работают: привязка по QR или 8-символьному коду, затем синхронизация истории 📰. Но это прямое нарушение Terms of Service, где названы реверс-инжиниринг и автоматизированный доступ 📄. Принуждение — техническое, не судебное: в мае 2025 волна банов и предупреждений накрыла пользователей whatsmeow и Baileys без разбора, включая аккаунты с малым объёмом, которые только отвечали на входящие; мейнтейнер закрыл issue как «not planned», потому что решения нет 📰 (whatsmeow#810).
Худший исход здесь — молчаливый бан номера якорного клиента.
Для ориентира, кто есть кто: 2Chat и Wassenger — настоящие сертифицированные BSP на официальном Cloud API. Whapi.cloud, Periskope, TimelinesAI, Unipile, Maytapi — обёртки над неофициальным WhatsApp Web; Maytapi так и пишет на главной: «Unofficial WhatsApp API» 📰.
Путь через DMA не существует. Обязательство по интероперабельности — это статья 7, а не 6(7) 📄, и запросить её может только «поставщик услуг межличностной коммуникации, не использующих номера». LiveCEO таким не является: на другом конце разговора нет человека. Для масштаба: к запуску в ноябре 2025 интеграцию довели ровно двое — BirdyChat и Haiket 📰, а Matrix/Element, реально подходящий проект, так и не выпустил её, назвав условия «economically unviable» 📄.
Локальные базы устройств (msgstore.db.crypt15, ChatStorage.sqlite) расшифровываются, но требуют root, 64-символьного ключа пользователя или незашифрованного локального бэкапа — и недоступны вовсе, если включено сквозное шифрование бэкапов 📰. Это разовый форензик-снимок, а не конвейер.
| Что | Сколько |
|---|---|
| WhatsApp-бот, как 5-я рукописная копия | ~14 человеко-дней 📊 |
| То же, но сначала вынести адаптер и перевести Telegram + Slack | ~22.5 человеко-дней 📊 |
| Стоимость сообщений сегодня | $0 (сервисные бесплатны с 2024-11-01) 📄 |
| Стоимость сообщений с 2026-10-01 | по прайсу за сообщение, тарифы ещё не опубликованы 📄 |
| iMessage: агент v1 | 6–10 недель 📊 + $99/год 📄 |
| iMessage: поддержка | 2–4 недели в год, бессрочно 📊 |
| Teams-бот (альтернатива) | ~14 человеко-дней 📊, $0 за сообщение 📄 |
Исследование выполнено веером из 11 параллельных агентов по первоисточникам, с последующей состязательной проверкой, где второй агент обязан был опровергнуть каждое ключевое утверждение.
Проверка прошла не полностью: аккаунт упёрся в месячный лимит расходов, из 139 агентов упало 95. Состязательную проверку прошли механика Cloud API и раздел про окно и шаблоны (отсюда большинство значков ✅). Не прошли: цены, iMessage, Mac-агент, неофициальный импорт, DMA, альтернативы — там стоит 📄 или 📰.
Две темы вернули мусор вместо результата и переделаны вручную: пункт про AI-политику (цитата в развилке 0 получена напрямую с whatsapp.com) и онбординг — из-за него этап 2 помечен предупреждением, лид-таймы там не подтверждены.
Отдельно: ни одна долларовая цифра не является цитатой Meta. Их прайс отдаётся JS-подгружаемым CSV/PDF, который не достаётся ни одним способом (проверено и на живой странице, и на снимке Wayback от 2026-06-20: ноль тегов <table>, ноль ссылок на .csv/.pdf в ~1.2 МБ HTML) 📄.
Meta / WhatsApp. Business Solution Terms · Terms of Service · Messaging Policy · Messages API · Webhooks · Отправка и 24ч окно · Компоненты шаблонов · Ревью шаблонов · Цены · Платные сервисные сообщения с 01.10.2026 · history webhook · Coexistence onboarding · Лимиты с 07.10.2025 · Хранение и приватность · Request account info
Apple. Messages framework · App Sandbox · Hardened Runtime · Нотаризация · PPPC / MDM · SMAppService · Стоимость программы · Full Disk Access · Messages for Business — онбординг · Messages for Business — FAQ
Суд ЕС и DMA. Решение 08.07.2026, пресс-релиз 96/26 · Назначение гейткиперов 06.09.2023 · Matrix об условиях Meta
Альтернативы и проекты. Azure Bot Service — цены · Telegram Bot API · imessage-exporter · BlueBubbles issue #790 · whatsmeow issue #810 · Sparkle