Geef een LangChain-agent een WhatsApp-nummer
Een LangChain-agent krijgt WhatsApp in twee helften. Inkomende berichten komen via de webhook van het nummer binnen op je webroute, en die route roept de agent aan. Om te handelen laadt de agent de MCP-tools van EasyCoexistence via LangChain's MCPAdapter met OAuth, of roept hij de Cloud API rechtstreeks aan met het token en het telefoonnummer-id van het nummer.
Minimale versie van langchain[mcp] voor de namespace langchain.mcp, die in bèta zit.
Voert de volledige OAuth 2.1-flow uit: discovery, dynamic client registration, browser-redirect en token-uitwisseling.
De fout van Meta wanneer er meer dan 24 uur voorbij zijn sinds de ontvanger voor het laatst antwoordde.
Hoe laadt een LangChain-agent de WhatsApp-tools?
Via MCPAdapter, de MCP-client van LangChain, die de tools van een MCP-server als gewone LangChain-tools aan create_agent doorgeeft. Het vereist langchain[mcp] vanaf versie 1.4.0 en staat als bèta gemarkeerd.
De authenticatie wordt aan FastMCP overgelaten. Met auth="oauth" op de client loopt de volledige OAuth 2.1-flow: discovery, dynamic client registration, de browser-redirect en de token-uitwisseling. Dat is wat de MCP-server van EasyCoexistence verwacht, dus je hoeft geen sleutel aan te maken of te plakken. Standaard staan tokens in het geheugen en herhaalt elke run de browserstap; een FastMCP OAuth-provider met een tokenopslag bewaart ze tussen runs.
Na het laden ziet de agent de tools met hun beschrijvingen: eerst list_numbers, omdat elke andere tool daar een connection_id van nodig heeft, daarna send_message, send_template, list_templates, get_number_health en de rest.
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)Hoe komt een inkomend WhatsApp-bericht bij de agent?
Via de webhook, want MCP kan dat niet. Het protocol werkt met verzoek en antwoord, dus een server kan er geen client mee wakker maken wanneer een klant schrijft.
Stel de webhook-bestemming van het nummer in op een route in je eigen applicatie, met een lang willekeurig geheim in het URL-pad. De route beantwoordt de verificatie-GET van Meta met de ruwe challenge, accepteert elke POST, geeft direct 200 terug en zet het werk in een wachtrij. Een worker haalt dan de afzender en de tekst uit de payload en roept de agent ermee aan, met het nummer van de afzender als thread-id zodat het geheugen per klant gescheiden blijft.
Controleer het geheim in de URL in plaats van de header X-Hub-Signature-256. Meta ondertekent met het app secret van de Tech Provider, dat nooit wordt gedeeld, dus de klant kan die header niet valideren.
Moet de agent verzenden via MCP of via de Cloud API?
Beide kan, en het verschil is wie de regels bewaakt. De MCP-tools dragen de WhatsApp-regels in hun beschrijvingen, zoals dat send_message alleen binnen het venster van 24 uur werkt en dat send_template de weg is naar iemand die niet heeft geschreven. Een model dat die beschrijvingen leest, kiest meestal de juiste, en bij een agent die vrij beslist helpt dat.
Een eigen eenvoudige tool die met het token van het nummer naar het endpoint voor berichten van de Cloud API post, is simpeler wanneer de taak van de agent smal is, zoals altijd antwoorden aan wie net schreef. Dan zit de controle op het venster in je eigen code, en daar hoort een regel die nooit gebroken mag worden thuis. Vrije tekst buiten het venster komt terug als fout 131047, en de klant ziet niets.
Veelgemaakte fouten
- Verwachten dat MCP inkomende berichten aflevert. Zonder webhook-route hoort de agent nooit iets van een klant.
- OAuth-tokens in het geheugen laten op een server. Elke herstart vraagt een browserlogin; bewaar ze met een tokenopslag.
- Eén thread voor alle klanten gebruiken. Gebruik het nummer van de afzender als sleutel voor het geheugen van de agent.
Verbind het nummer op easycoexistence.com, stel de webhook-bestemming in op je route en laad de MCP-tools met één OAuth-login in de agent. Vanaf US$ 9 per nummer per maand, dalend naar US$ 1 naarmate je nummers toevoegt, met de eerste 3 dagen gratis.
Veelgestelde vragen
Is dit alleen voor Python?
Het MCPAdapter-voorbeeld is Python. De webhook en de Cloud API zijn gewoon HTTP, dus elke taal waarin LangChain draait kan ontvangen en verzenden.
Heeft de agent list_numbers elke keer nodig?
Hij heeft een connection_id nodig, en list_numbers is de enige plek waar je die vandaan haalt. Bij één nummer roept de agent het één keer aan het begin aan.
Kan het team nog vanaf de telefoon antwoorden?
Ja. Coexistence houdt de WhatsApp Business-app werkend, en antwoorden vanaf de telefoon bereiken je route als echo-events die de agent kan meenemen.
Leest EasyCoexistence het gesprek?
Nee. Meta levert rechtstreeks bij je route af en de inhoud van berichten wordt bij ons nooit opgeslagen. De MCP-tools lezen de status van het account en het nummer.
Lees verder
Klaar om te beginnen?
Stel WhatsApp Coexistence in enkele minuten in, niet maanden. De app blijft op je telefoon werken.
Start je gratis proefperiodeGeverifieerd op