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

Подключите к агенту LangChain номер WhatsApp

WhatsApp для агента LangChain состоит из двух частей. Входящие сообщения приходят на ваш веб-маршрут через вебхук номера, а маршрут вызывает агента. Чтобы действовать, агент загружает инструменты EasyCoexistence MCP через MCPAdapter из LangChain с OAuth либо обращается к Cloud API напрямую, используя токен номера и phone number id.

1.4.0

Минимальная версия langchain[mcp] для пространства имён langchain.mcp, которое находится в бета-версии.

auth="oauth"

Выполняет полный процесс OAuth 2.1: обнаружение, динамическая регистрация клиента, перенаправление в браузер и обмен токенами.

131047

Ошибка 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 и остальные.

Load the tools into an agent, from LangChain's documented pattern
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

Подключите номер на 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 за несколько минут, а не месяцев. Приложение продолжит работать на телефоне.

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

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

Агент LangChain в WhatsApp через Cloud API