Iniciar sessãoIniciar teste gratuito
Meta Tech Provider

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.

1.4.0

Versão mínima de langchain[mcp] para o espaço de nomes langchain.mcp, que está em beta.

auth="oauth"

Executa o fluxo OAuth 2.1 completo: descoberta, registo dinâmico de cliente, redirecionamento no navegador e troca de token.

131047

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.

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)

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.
Fazer isto com a EasyCoexistence

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 gratuito

Verificado em

Agente LangChain no WhatsApp, Cloud API