使用 Vercel AI SDK 构建 WhatsApp 智能体
传入的消息会送达设为该号码 Webhook 目标的路由处理器。处理器调用 generateText,并通过 Cloud API 发送答复。对于需要操作该号码的工具,来自 @ai-sdk/mcp 的 createMCPClient 通过 HTTP 连接 EasyCoexistence MCP 服务器,并借助 authProvider 以 OAuth 登录。
提供 createMCPClient 的软件包,即 AI SDK 的 MCP 客户端。
AI SDK 的 MCP HTTP 传输支持 OAuth,只需提供 authProvider。
同时使用 WhatsApp Business 应用和 Cloud API 的号码,吞吐量固定。
路由处理器如何接收 WhatsApp 消息?
在同一路由上实现两个方法,并将其设为该号码的 Webhook 目标,路径中带有一段较长的随机密钥。
GET 用于应答 Meta 的验证。从查询中读取 hub.mode、hub.verify_token 和 hub.challenge,比对令牌,然后以纯文本返回 challenge。通过 JSON 辅助函数返回是典型的错误:响应体会带上引号,Meta 就不会开始投递。
POST 用于接收事件。请尽快返回 200,之后再调用模型,因为 Meta 会重试响应较慢的请求,而在冷启动时同步运行模型,可能会对同一条消息回复两次。在响应发出后即结束函数的平台上,请把工作交给队列,或使用平台提供的响应后处理机制。
路径中的密钥就是身份验证。Meta 使用 Tech Provider 应用的密钥为每次投递签名,因此您这一侧无法校验 X-Hub-Signature-256 标头。
AI SDK 如何加载 WhatsApp 工具?
使用来自 @ai-sdk/mcp 的 createMCPClient 和 HTTP 传输,AI SDK 文档推荐在生产环境中使用这种方式。该传输接受服务器 URL 和 authProvider,EasyCoexistence MCP 服务器正是通过 authProvider 的 OAuth 完成授权:它发布 OAuth 元数据,支持动态客户端注册和 PKCE,并在登录后签发自己的令牌。无需在标头中放置 API 密钥。
客户端的工具可直接传入 generateText 或 streamText。随后模型会看到 list_numbers、send_message、send_template、get_number_health 等工具,其描述中注明了 24 小时窗口。调用结束后请关闭客户端:流式调用在 onEnd 回调中关闭,其他情况在 finally 块中关闭,这也是 AI SDK 文档的要求。
适用于需要由模型自行决定的场景。若只是回复刚收到的消息,在处理器中直接调用 Cloud API 更简短。
import { createMCPClient } from "@ai-sdk/mcp";
const mcp = await createMCPClient({
transport: {
type: "http",
url: "https://easycoexistence.com/api/mcp",
authProvider, // your OAuthClientProvider implementation
},
});
try {
const tools = await mcp.tools();
// pass tools to generateText({ model, tools, prompt })
} finally {
await mcp.close();
}号码使用 Coexistence 后有什么变化?
有两点代码需要知道。第一,可能已有真人在对话中。WhatsApp Business 应用在该号码上仍可使用,在手机上输入的每条回复都会以回显事件的形式送达路由。处理器在收到回显后,对该联系人暂停调用模型,就能避免模型盖过真人的回复。
第二,该号码的发送速率固定上限为每秒 20 条消息。对话型智能体远不会触及这个上限,但用 Promise.all 遍历联系人列表编写的群发循环会触及,所以请分批发送。
其余都是普通的 Cloud API。客户最后一条消息后的 24 小时内,允许发送自由文本。超过之后,只有已获批准的模板才能发出,自由文本会返回错误 131047,而客户不会看到任何内容。
常见错误
- 用 JSON 响应辅助函数返回 challenge。外层的引号会导致 Meta 的验证失败。
- 在响应 Meta 之前就运行 generateText。冷启动时,重试会产生第二条答复。
- 忘记关闭 MCP 客户端。每个请求都会留下一个未关闭的连接,直到平台将其终止。
在 easycoexistence.com 连接号码,将 Webhook 目标设为您的路由处理器,再通过一次 OAuth 登录添加 MCP 客户端。每个号码每月 US$ 9 起,随号码增加降至 US$ 1,前 3 天免费。
常见问题
这只能在 Vercel 上运行吗?
不是。AI SDK 是 TypeScript 库,路由可以运行在任何提供 HTTPS、并能应答 GET 和 POST 的主机上。
我一定要用 MCP 客户端吗?
回复消息不需要。使用该号码的令牌向 Cloud API 的消息端点发起 fetch 即可。当由模型选择要做什么时,MCP 才体现价值。
模型可以用哪家服务商?
AI SDK 支持的都可以。WhatsApp 这一侧与模型无关,所以更换服务商不会影响路由或 Cloud API 调用。
EasyCoexistence 能看到这些消息吗?
不能。Meta 直接投递到您的路由,消息内容绝不会存储在我们这边。
继续阅读
准备开始了吗?
几分钟即可设置 WhatsApp Coexistence,而不是几个月。应用会继续在手机上运行。
开始免费试用验证时间