ВойтиНачать бесплатный пробный период
Meta Tech Provider

Создайте агента для WhatsApp на Vercel AI SDK

Входящие сообщения поступают в обработчик маршрута, указанный как адрес вебхука для номера. Обработчик вызывает generateText и отправляет ответ через Cloud API. Для инструментов, которые действуют на номере, createMCPClient из @ai-sdk/mcp подключается к серверу EasyCoexistence MCP по HTTP и входит через OAuth с помощью authProvider.

@ai-sdk/mcp

Пакет, который предоставляет createMCPClient, клиент MCP в AI SDK.

authProvider

OAuth поддерживается в HTTP-транспорте MCP в AI SDK через authProvider.

20 msg/s

Фиксированная пропускная способность для номера, который работает и в приложении WhatsApp Business, и в Cloud API.

Как обработчик маршрута получает сообщения WhatsApp?

Двумя методами на одном маршруте, который указан как адрес вебхука для номера, с длинным случайным секретом в пути.

GET отвечает на проверку Meta. Прочитайте из запроса hub.mode, hub.verify_token и hub.challenge, сравните токен и верните challenge как простой текст. Классическая ошибка: вернуть его через JSON-помощник. Тело приходит в кавычках, и Meta не начинает доставку.

POST получает события. Быстро верните 200 и вызывайте модель уже после этого: Meta повторяет медленные ответы, а холодный старт с вызовом модели внутри запроса может ответить на одно и то же сообщение дважды. На платформах, которые завершают функцию после отправки ответа, передайте работу в очередь или в механизм платформы для работы после ответа.

Секрет в пути и есть аутентификация. Meta подписывает каждую доставку секретом приложения Tech Provider, поэтому заголовок X-Hub-Signature-256 на вашей стороне проверить нельзя.

Как AI SDK загружает инструменты WhatsApp?

Через createMCPClient из @ai-sdk/mcp и HTTP-транспорт, который документация AI SDK рекомендует для рабочей среды. Транспорт принимает URL сервера и authProvider, и именно OAuth через authProvider авторизует сервер EasyCoexistence MCP: он публикует метаданные OAuth, поддерживает динамическую регистрацию клиентов и PKCE и выдаёт собственные токены после входа. API-ключа для заголовка нет.

Инструменты клиента передаются прямо в generateText или streamText. Модель видит list_numbers, send_message, send_template, get_number_health и другие, с описаниями, где указано окно в 24 часа. Закрывайте клиент после вызова: в колбэке onEnd для потока или в блоке finally в остальных случаях, как требует документация AI SDK.

Используйте это там, где решение должна принимать модель. Чтобы ответить на только что пришедшее сообщение, короче прямой вызов Cloud API из обработчика.

MCP client over HTTP with OAuth, as the AI SDK documents it
import { createMCPClient } from "@ai-sdk/mcp";

const mcp = await createMCPClient({
  transport: {
    type: "http",
    url: "https://easycoexistence.com/api/mcp",
    authProvider, // your OAuthClientProvider implementation
  },
});

try {
  const tools = await mcp.tools();
  // pass tools to generateText({ model, tools, prompt })
} finally {
  await mcp.close();
}

Что меняется, если номер работает в Coexistence?

Два момента, о которых код должен знать. Во-первых, в диалоге уже может быть человек. Приложение WhatsApp Business продолжает работать на номере, и каждый ответ, набранный на телефоне, приходит на маршрут как событие echo. Обработчик, который после echo приостанавливает модель для этого контакта, не даёт ей отвечать поверх человека.

Во-вторых, отправка ограничена фиксированными 20 сообщениями в секунду для номера. Диалоговый агент до этого предела не доходит, а цикл рассылки на Promise.all по списку контактов дойдёт, поэтому разбивайте его на пакеты.

Всё остальное представляет собой обычный Cloud API. В течение 24 часов после последнего сообщения клиента разрешён свободный текст. После этого проходит только одобренный шаблон, а свободный текст возвращает ошибку 131047, и клиент ничего не видит.

Распространённые ошибки

  • Возврат challenge через JSON-помощник. Кавычки вокруг него не проходят проверку Meta.
  • Вызов generateText до ответа Meta. При холодном старте повторная доставка приводит ко второму ответу.
  • Незакрытый клиент MCP. Каждый запрос оставляет открытое подключение, пока платформа его не завершит.
Настройка с EasyCoexistence

Подключите номер на easycoexistence.com, укажите обработчик маршрута как адрес вебхука и добавьте клиент MCP с одним входом через OAuth. От US$ 9 за подключённый номер в месяц, до US$ 1 по мере добавления номеров, первые 3 дня бесплатно.

Часто задаваемые вопросы

Это работает только на Vercel?

Нет. AI SDK является библиотекой TypeScript, а маршрут может работать на любом хосте, который отдаёт HTTPS и отвечает на GET и POST.

Нужен ли клиент MCP вообще?

Для ответа не нужен. Это делает fetch к эндпоинту сообщений Cloud API с токеном номера. MCP оправдан, когда модель сама выбирает действие.

Какой провайдер может быть у модели?

Любой, который поддерживает AI SDK. Сторона WhatsApp не зависит от модели, поэтому смена провайдера не затрагивает ни маршрут, ни вызов Cloud API.

Видит ли EasyCoexistence сообщения?

Нет. Meta доставляет их прямо в ваш маршрут, а содержимое сообщений у нас не хранится.

Читайте дальше

Готовы начать?

Настройте WhatsApp Coexistence за несколько минут, а не месяцев. Приложение продолжит работать на телефоне.

Начать бесплатный пробный период

Проверено по состоянию на

Vercel AI SDK в WhatsApp: Cloud API