Подключите к агенту LangChain номер WhatsApp
WhatsApp для агента LangChain состоит из двух частей. Входящие сообщения приходят на ваш веб-маршрут через вебхук номера, а маршрут вызывает агента. Чтобы действовать, агент загружает инструменты EasyCoexistence MCP через MCPAdapter из LangChain с OAuth либо обращается к Cloud API напрямую, используя токен номера и phone number id.
Минимальная версия langchain[mcp] для пространства имён langchain.mcp, которое находится в бета-версии.
Выполняет полный процесс OAuth 2.1: обнаружение, динамическая регистрация клиента, перенаправление в браузер и обмен токенами.
Ошибка Meta, когда с момента последнего ответа получателя прошло более 24 часов.
Как агент LangChain загружает инструменты WhatsApp?
Через MCPAdapter, MCP-клиент LangChain, который передаёт инструменты сервера MCP в create_agent как обычные инструменты LangChain. Для него нужен langchain[mcp] версии 1.4.0 или новее, и он помечен как бета.
Аутентификацию берёт на себя FastMCP. Если передать в клиенте auth="oauth", выполняется полный процесс OAuth 2.1: обнаружение, динамическая регистрация клиента, перенаправление в браузер и обмен токенами. Именно этого ожидает сервер EasyCoexistence MCP, поэтому создавать или вставлять ключ не нужно. По умолчанию токены хранятся в памяти, и при каждом запуске шаг в браузере повторяется; провайдер OAuth из FastMCP с хранилищем токенов сохраняет их между запусками.
После загрузки агент видит инструменты вместе с их описаниями: сначала list_numbers, потому что каждому другому инструменту нужен connection_id из него, затем send_message, send_template, list_templates, get_number_health и остальные.
from fastmcp.client import Client
from langchain.agents import create_agent
from langchain.mcp import MCPAdapter
URL = "https://easycoexistence.com/api/mcp"
async def build_agent(model: str):
async with MCPAdapter(Client(URL, auth="oauth")) as adapter:
tools = await adapter.list_tools()
return create_agent(model, tools)Как входящее сообщение WhatsApp попадает к агенту?
Через вебхук, потому что MCP этого не умеет. Протокол построен на запросе и ответе, поэтому сервер не может разбудить клиента, когда пишет покупатель.
Укажите в качестве адреса вебхука номера маршрут в вашем приложении, поместив в путь URL длинный случайный секрет. Маршрут отвечает на проверочный GET-запрос Meta исходным challenge, принимает каждый POST, сразу возвращает 200 и ставит работу в очередь. Затем обработчик берёт из тела запроса отправителя и текст и вызывает с ними агента, используя номер отправителя как идентификатор потока, чтобы память хранилась отдельно для каждого клиента.
Проверяйте секрет в URL, а не заголовок X-Hub-Signature-256. Meta подписывает запросы секретом приложения Tech Provider, который никому не передаётся, поэтому клиент не может проверить этот заголовок.
Через что отправлять агенту: через MCP или через Cloud API?
Подходит любой вариант, а разница в том, у кого хранятся правила. Инструменты MCP несут правила WhatsApp в своих описаниях: например, send_message работает только внутри окна обслуживания клиентов (24 часа), а send_template нужен, чтобы написать тому, кто не писал первым. Модель, читающая эти описания, в большинстве случаев выбирает верный инструмент, и это помогает, когда агент принимает решения свободно.
Свой простой инструмент, который отправляет запрос на эндпоинт сообщений Cloud API с токеном номера, проще, если задача агента узкая, например всегда отвечать тому, кто только что написал. Тогда проверка окна находится в вашем коде, а именно там должно быть правило, которое нельзя нарушать. Свободный текст вне окна возвращается с ошибкой 131047, и клиент ничего не получает.
Распространённые ошибки
- Ожидать, что MCP доставит входящие сообщения. Без маршрута вебхука агент никогда не узнает о сообщении клиента.
- Оставлять токены OAuth в памяти на сервере. После каждого перезапуска снова потребуется вход через браузер; сохраняйте их в хранилище токенов.
- Использовать один поток для всех клиентов. Привязывайте память агента к номеру отправителя.
Подключите номер на easycoexistence.com, укажите свой маршрут в качестве адреса вебхука и загрузите инструменты MCP в агента с одним входом через OAuth. От US$ 9 за подключённый номер в месяц, до US$ 1 по мере добавления номеров, первые 3 дня бесплатно.
Часто задаваемые вопросы
Это работает только на Python?
Пример с MCPAdapter написан на Python. Вебхук и Cloud API представляют собой обычный HTTP, поэтому принимать и отправлять сообщения можно на любом языке, на котором работает LangChain.
Нужно ли агенту вызывать list_numbers каждый раз?
Ему нужен connection_id, а получить его можно только через list_numbers. Если номер один, агент вызывает его один раз в начале работы.
Может ли команда по-прежнему отвечать с телефона?
Да. Coexistence сохраняет работу приложения WhatsApp Business, а ответы с телефона приходят на ваш маршрут как события echo, которые агент может учитывать.
Читает ли EasyCoexistence переписку?
Нет. Meta доставляет данные прямо на ваш маршрут, а содержимое сообщений у нас не хранится. Инструменты MCP читают состояние аккаунта и номера.
Читайте дальше
Готовы начать?
Настройте WhatsApp Coexistence за несколько минут, а не месяцев. Приложение продолжит работать на телефоне.
Начать бесплатный пробный периодПроверено по состоянию на