给 LangChain 智能体配一个 WhatsApp 号码
LangChain 智能体接入 WhatsApp 分为两部分。收到的消息通过号码的 Webhook 送达您的 Web 路由,再由该路由调用智能体。要执行操作时,智能体可以通过 LangChain 的 MCPAdapter 并使用 OAuth 加载 EasyCoexistence MCP 工具,也可以用号码的访问令牌和 phone number id 直接调用 Cloud API。
使用 langchain.mcp 命名空间所需的 langchain[mcp] 最低版本,该命名空间仍处于 beta 阶段。
运行完整的 OAuth 2.1 流程:发现、动态客户端注册、浏览器重定向和令牌交换。
当收件人上次回复已超过 24 小时,Meta 返回的错误。
LangChain 智能体如何加载 WhatsApp 工具?
通过 MCPAdapter,即 LangChain 的 MCP 客户端。它会把 MCP 服务器的工具作为普通 LangChain 工具交给 create_agent。它要求 langchain[mcp] 版本为 1.4.0 或更高,目前标记为 beta。
身份验证交由 FastMCP 处理。在客户端传入 auth="oauth" 即可运行完整的 OAuth 2.1 流程:发现、动态客户端注册、浏览器重定向和令牌交换。EasyCoexistence MCP 服务器正是采用这种方式,因此无需创建或粘贴任何密钥。默认情况下,令牌保存在内存中,每次运行都要重复浏览器步骤;若使用带令牌存储的 FastMCP OAuth 提供方,则可在多次运行之间保留令牌。
加载完成后,智能体会看到这些工具及其说明:首先是 list_numbers,因为其他所有工具都需要从它获取 connection_id,然后是 send_message、send_template、list_templates、get_number_health 等。
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 消息如何送达智能体?
通过 Webhook,因为 MCP 做不到。该协议是请求与响应模式,服务器无法在客户写来消息时唤醒客户端。
把号码的 Webhook 目的地设置为您自己应用中的一个路由,并在 URL 路径中加入一段较长的随机密钥。该路由用原始 challenge 响应 Meta 的验证 GET 请求,接收每个 POST,立即返回 200 并把任务放入队列。随后由工作进程从负载中取出发送者和文本,并以此调用智能体,同时把发送者的号码作为线程 id,让记忆按客户分开保存。
请校验 URL 中的密钥,而不是 X-Hub-Signature-256 标头。Meta 使用 Tech Provider 的应用密钥签名,而该密钥从不共享,因此客户无法验证这个标头。
智能体应该通过 MCP 发送,还是通过 Cloud API 发送?
两种方式都可行,区别在于规则由谁掌握。MCP 工具把 WhatsApp 规则写在说明里,例如 send_message 只能在 24 小时窗口内使用,而 send_template 用于联系尚未写来消息的人。模型读到这些说明后,大多数时候能选对工具,在智能体可自由决策的场景中,这一点很有帮助。
如果智能体的任务很窄,例如总是回复刚写来消息的那个人,那么自己写一个简单工具,用号码的访问令牌向 Cloud API 的 messages 端点发送,会更简单。这样窗口检查就放在您的代码里,而绝不能违反的规则本来就应该放在这里。窗口之外发送自由文本会返回错误 131047,客户什么也收不到。
常见错误
- 指望 MCP 送达收到的消息。没有 Webhook 路由,智能体永远收不到客户的消息。
- 把 OAuth 令牌留在服务器内存中。每次重启都需要在浏览器重新登录,请用令牌存储保存它们。
- 所有客户共用一个线程。请以发送者的号码作为智能体记忆的键。
在 easycoexistence.com 连接号码,把 Webhook 目的地设置为您的路由,然后用一次 OAuth 登录把 MCP 工具载入智能体。每个号码每月 US$ 9 起,随号码增加降至 US$ 1,前 3 天免费。
常见问题
只支持 Python 吗?
MCPAdapter 的示例是 Python。Webhook 和 Cloud API 都是普通 HTTP,因此 LangChain 支持的任何语言都能完成接收和发送。
智能体每次都需要调用 list_numbers 吗?
它需要 connection_id,而 list_numbers 是获取 connection_id 的唯一途径。只有一个号码时,智能体在开始时调用一次即可。
团队仍然可以用手机回复吗?
可以。Coexistence 让 WhatsApp Business 应用继续可用,手机上的回复会作为 echo 事件送达您的路由,智能体可以将其纳入考虑。
EasyCoexistence 会读取对话内容吗?
不会。Meta 直接把消息送达您的路由,我们这边从不存储消息内容。MCP 工具只读取账户和号码的状态。
继续阅读
准备开始了吗?
几分钟即可设置 WhatsApp Coexistence,而不是几个月。应用会继续在手机上运行。
开始免费试用验证时间