EntrarComeçar teste grátis
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 pelo webhook do número, e a rota invoca o agente. Para agir, o agente carrega as ferramentas MCP do EasyCoexistence pelo MCPAdapter do LangChain com OAuth, ou chama a Cloud API diretamente com o token e o phone number id do número.

1.4.0

Versão mínima do langchain[mcp] para o namespace langchain.mcp, que está em beta.

auth="oauth"

Executa o fluxo OAuth 2.1 completo: descoberta, registro 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 um agente LangChain carrega as ferramentas do WhatsApp?

Pelo MCPAdapter, o cliente MCP do LangChain, que entrega as ferramentas de um servidor MCP ao create_agent como ferramentas comuns do LangChain. Ele exige langchain[mcp] na versão 1.4.0 ou superior e está marcado como beta.

A autenticação é delegada ao FastMCP. Passar auth="oauth" no cliente executa o fluxo OAuth 2.1 completo: descoberta, registro dinâmico de cliente, redirecionamento no navegador e troca de token. É isso que o servidor MCP do EasyCoexistence espera, então não há chave para criar nem colar. Por padrão os tokens ficam na memória e cada execução repete a etapa do navegador; um provedor OAuth do FastMCP com armazenamento de tokens os mantém entre execuções.

Depois de carregadas, o agente vê as ferramentas com suas descrições: list_numbers primeiro, porque todas as outras pedem um connection_id vindo dela, depois send_message, send_template, list_templates, get_number_health e as demais.

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 uma mensagem recebida do WhatsApp chega ao agente?

Pelo webhook, porque o MCP não consegue fazer isso. O protocolo é de requisição e resposta, então nada nele permite que um servidor acorde um cliente quando um cliente escreve.

Aponte o destino do webhook do número para uma rota da sua própria aplicação, com um segredo longo e aleatório no caminho da URL. A rota responde ao GET de verificação da Meta com o challenge bruto, aceita cada POST, retorna 200 imediatamente e enfileira o trabalho. Um worker então extrai o remetente e o texto do payload e invoca o agente com eles, usando o número do remetente como id da thread para que a memória fique separada por cliente.

Verifique o segredo na URL, e não o cabeçalho X-Hub-Signature-256. A Meta assina com o app secret do Tech Provider, que nunca é compartilhado, então esse cabeçalho não pode ser validado pelo cliente.

O agente deve enviar pelo MCP ou pela Cloud API?

Os dois funcionam, e a diferença está em quem guarda as regras. As ferramentas MCP carregam as regras do WhatsApp em suas descrições, como send_message funcionar só dentro da janela de atendimento de 24 horas e send_template ser o caminho para alcançar 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 faz POST no endpoint de mensagens da Cloud API com o token do número, é mais simples quando a tarefa do agente é restrita, como sempre responder a quem acabou de escrever. Aí a checagem da janela fica no seu código, que é onde pertence uma regra que nunca pode ser quebrada. Texto livre fora da janela volta com 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 na memória em um servidor. Cada reinício pede um login no navegador; persista-os com um armazenamento de tokens.
  • Usar uma única thread para todos os clientes. Associe a memória do agente ao número do remetente.
Fazendo isso com o EasyCoexistence

Conecte o número em easycoexistence.com, aponte o destino do webhook para a sua rota e carregue as ferramentas MCP no agente com um único login OAuth. A partir de US$ 9 por número conectado por mês, caindo até US$ 1 conforme você adiciona números, com os 3 primeiros dias grátis.

Perguntas frequentes

Isso é só para Python?

O exemplo do MCPAdapter é em Python. O webhook e a Cloud API são HTTP puro, então qualquer linguagem em que o LangChain rode pode receber e enviar.

O agente precisa chamar list_numbers toda vez?

Ele precisa de um connection_id, e list_numbers é o único lugar de onde ele vem. Com um único número, o agente a chama uma vez no início.

A equipe ainda pode responder pelo celular?

Sim. A Coexistência mantém o app do WhatsApp Business funcionando, e as respostas feitas no celular chegam à sua rota como eventos echo que o agente pode levar em conta.

O EasyCoexistence lê a conversa?

Não. A Meta entrega direto na sua rota e o conteúdo das mensagens nunca é armazenado por nós. As ferramentas MCP leem o estado da conta e do número.

Continue lendo

Pronto para começar?

Configure o WhatsApp Coexistence em minutos, não em meses. O aplicativo continua funcionando no celular.

Começar teste grátis

Verificado em

Agente LangChain no WhatsApp, Cloud API