Dê um número de WhatsApp a um agente LangChain
Um agente LangChain recebe o WhatsApp em duas metades. As mensagens recebidas chegam à sua rota web através do webhook do número, e a rota invoca o agente. Para agir, o agente carrega as ferramentas MCP da EasyCoexistence através do MCPAdapter do LangChain com OAuth, ou chama diretamente a Cloud API com o token do número e o phone number id.
Versão mínima de langchain[mcp] para o espaço de nomes langchain.mcp, que está em beta.
Executa o fluxo OAuth 2.1 completo: descoberta, registo dinâmico de cliente, redirecionamento no navegador e troca de token.
Erro da Meta quando passaram mais de 24 horas desde a última resposta do destinatário.
Como carrega um agente LangChain as ferramentas do WhatsApp?
Através do MCPAdapter, o cliente MCP do LangChain, que entrega as ferramentas de um servidor MCP ao create_agent como ferramentas LangChain comuns. Requer langchain[mcp] na versão 1.4.0 ou posterior e está marcado como beta.
A autenticação é delegada ao FastMCP. Ao passar auth="oauth" no cliente, executa-se o fluxo OAuth 2.1 completo: descoberta, registo dinâmico de cliente, redirecionamento no navegador e troca de token. É isto que o servidor MCP da EasyCoexistence espera, por isso não há nenhuma chave para criar ou colar. Por predefinição, os tokens ficam em memória e cada execução repete o passo no navegador; um fornecedor OAuth do FastMCP com um armazenamento de tokens mantém-nos entre execuções.
Depois de carregadas, o agente vê as ferramentas com as respetivas descrições: primeiro list_numbers, porque todas as outras ferramentas recebem dela um connection_id, depois send_message, send_template, list_templates, get_number_health e as restantes.
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)Como chega ao agente uma mensagem de WhatsApp recebida?
Através do webhook, porque o MCP não o consegue fazer. O protocolo é de pedido e resposta, pelo que nada nele permite a um servidor acordar um cliente quando um cliente escreve.
Defina o destino do webhook do número como uma rota da sua própria aplicação, com um segredo longo e aleatório no caminho do URL. A rota responde ao GET de verificação da Meta com o desafio em bruto, aceita cada POST, devolve 200 de imediato e coloca o trabalho em fila. Um worker retira então o remetente e o texto do payload e invoca o agente com esses dados, usando o número do remetente como identificador da conversa, para que a memória fique separada por cliente.
Verifique o segredo no URL em vez do cabeçalho X-Hub-Signature-256. A Meta assina com o segredo da app do Tech Provider, que nunca é partilhado, pelo que o cliente não consegue validar esse cabeçalho.
O agente deve enviar através do MCP ou da Cloud API?
Ambos funcionam, e a diferença está em quem guarda as regras. As ferramentas MCP trazem as regras do WhatsApp nas suas descrições, como o send_message só funcionar dentro da janela de 24 horas e o send_template ser o caminho para contactar quem não escreveu. Um modelo que lê essas descrições escolhe a certa na maioria das vezes, e isso ajuda quando o agente decide livremente.
Uma ferramenta simples sua, que envia para o endpoint de mensagens da Cloud API com o token do número, é mais simples quando a tarefa do agente é estreita, por exemplo responder sempre a quem acabou de escrever. Nesse caso, a verificação da janela fica no seu código, que é o lugar de uma regra que nunca pode ser quebrada. Texto livre fora da janela devolve o erro 131047, e o cliente nunca vê nada.
Erros comuns
- Esperar que o MCP entregue as mensagens recebidas. Sem uma rota de webhook, o agente nunca ouve um cliente.
- Deixar os tokens OAuth em memória num servidor. Cada reinício exige um início de sessão no navegador; guarde-os num armazenamento de tokens.
- Usar uma única conversa para todos os clientes. Associe a memória do agente ao número do remetente.
Ligue o número em easycoexistence.com, defina o destino do webhook para a sua rota e carregue as ferramentas MCP no agente com um único início de sessão OAuth. A partir de US$ 9 por número ligado por mês, baixando até US$ 1 à medida que acrescenta números, com os primeiros 3 dias grátis.
Perguntas frequentes
Isto só funciona em Python?
O exemplo do MCPAdapter é em Python. O webhook e a Cloud API são HTTP simples, pelo que qualquer linguagem em que o LangChain funcione pode tratar da receção e do envio.
O agente precisa de list_numbers sempre?
Precisa de um connection_id, e list_numbers é o único sítio de onde ele vem. Com um só número, o agente chama-a uma vez no início.
A equipa ainda pode responder a partir do telemóvel?
Sim. A Coexistência mantém a app do WhatsApp Business a funcionar, e as respostas dadas no telemóvel chegam à sua rota como eventos echo que o agente pode ter em conta.
A EasyCoexistence lê a conversa?
Não. A Meta entrega diretamente na sua rota e o conteúdo das mensagens nunca é guardado do nosso lado. As ferramentas MCP leem o estado da conta e do número.
Continue a ler
Pronto para começar?
Configure a Coexistência do WhatsApp em minutos, não em meses. A aplicação continua a funcionar no telemóvel.
Começar período experimental gratuitoVerificado em