要点总结
- Bird 的 Programmable Conversations API 将 WhatsApp、Messenger 和 SMS 统一到单一通信层,简化了多渠道机器人开发。
- 你可以使用 webhook 和简单的 POST 请求快速搭建一个 WhatsApp 待办事项机器人原型。
- ngrok 等工具可以将本地服务器暴露到公网,用于 webhook 测试,无需复杂的托管配置。
- API 可以处理跨多个渠道的对话,让你用一套逻辑同时支持 WhatsApp、WeChat 和其他应用。
- 使用 archiveConversation 端点来关闭对话,“topics,” 非常适合客服或工作流跟踪场景。
- 机器人逻辑可以通过简单的数据结构在内存中安全地管理并发对话。
- 同一个 webhook 处理程序可跨渠道工作,Bird 会根据发起对话的 ID 自动路由回复。
Bird 最近推出了 Programmable Conversations。它可以让企业将 WhatsApp、Messenger 和 SMS 等通信平台集成到自己的系统中,只需使用一个 API。
我想试一试,于是构建了一个 WhatsApp 待办事项机器人,毕竟谁不需要一个自动化待办清单来帮忙安排一天的工作呢?听起来可能很复杂,但实际上非常简单,我来和大家分享整个过程。
我在 MessageBird 工作,所以可以直接上手开始构建。如果你也想尝试,需要先申请提前体验。设置好 WhatsApp 渠道后,就可以登录 MessageBird 网站上的控制台开始操作了。
搭建 WhatsApp 机器人环境
我做的第一件事是阅读文档。我了解到,要从机器人接收消息,需要使用 webhook,这意味着机器人必须能够从互联网访问。构建此类 API 时,遵循 API 版本管理最佳实践对可维护性很重要。由于我刚开始编码,决定使用 ngrok。它可以从公网创建一条到本地 localhost 5007 端口的隧道。开始吧!
ngrok http 5007 -region eu -subdomain todobot
创建 webhook 并连接 Bird
接下来,我需要调用 Programmable Conversations API 来创建 webhook。这是一个发往 https://conversations.messagebird.com/v1/webhooks 的 POST 请求,大致如下:
很好。现在 Conversations API 会向以下地址发送 POST 请求:
https://todobot.eu.ngrok.io/create-hook,每当你之前设置的 WhatsApp 渠道上有新消息创建时就会触发。
webhook 载荷的格式如下:
我们想要回复这些消息。先从回显消息开始,怎么样?
发送回复和处理消息
现在到了有趣的部分。向以下地址发送 POST 请求:
https://conversations.messagebird.com/v1/conversations/<conversationID>/messages 来回复请求。
就这样。这就是创建一个像 5 岁小孩一样对话的机器人所需的全部代码。
以下是使用 Bird 的 Conversations API 让 WhatsApp 机器人开发快速且可扩展的原因:
| 功能 | 解决的问题 |
|---|---|
| 统一的对话 ID | 在 WhatsApp、WeChat、Messenger 等应用间维护单一对话线程 |
| 所有渠道使用单一 API | 复用机器人逻辑,无需为每个平台重写 |
| Webhook 驱动的自动化 | 无需轮询即可快速处理响应 |
| 归档 + 重新打开话题 | 整理客服历史记录和工作流 |
| 并发安全的结构 | 可靠地同时处理多个对话 |
现在,让我们开始构建完整的待办事项列表。首先,稍微修改 createHookHandler 函数,让它调用新的 handleMessage 函数,而不是 respond。
handle 会简单地解析消息、执行一些操作并选择回复内容。让我们看看 “add” 命令:
这里我们设置了:list := manager.fetch(whp.Conversation.ID)。本质上,“manager” 是一个并发安全的映射,将对话 ID 映射到待办事项列表。
待办事项列表是一个并发安全的字符串切片,全部存储在内存中!
归档对话和扩展你的机器人
还有一个重要功能!你可以归档对话。在某些应用中(如 CRM 系统),跟踪特定互动非常重要,例如评估客服人员的工作效率。Conversations API 允许你归档对话以 “close” 话题。如果用户/客户发送新消息,Conversations API 会自动打开一个新话题。
管理对话生命周期
此外,向 https://conversations.messagebird.com/v1/conversations/{id} 发送 PATCH 请求,并在请求体中设置正确的状态,即可归档该 ID 对应的对话。我们通过 “bye” 命令来实现:
archiveConversation 会执行 PATCH 请求,而 manager.close(whp.Conversation.ID) 会移除该待办事项对话。
不过,Programmable Conversations 是一个全渠道解决方案。如果你想在不同平台(比如 WeChat)上复用机器人代码怎么办?这种多渠道方式也是将咨询引导到低成本渠道策略的一部分。你该怎么做呢?
只需创建一个新的 webhook 指向该渠道!这个 webhook 向我们之前为 WhatsApp 使用的同一个 https://todobot.eu.ngrok.io/create-hook URL 发送请求!
之所以可行,是因为处理程序代码始终使用 webhook 载荷中的 conversationID 来回复消息,而不是硬编码的 channelID。MessageBird 的 Conversations API 会自动确定对话所属的渠道来发送消息。
想构建自己的机器人?查看 Github 上的完整代码:Wabot on Github,访问 WhatsApp 页面并点击 Contact Sales 按钮填写表单来申请 WhatsApp 的提前体验。祝你开发愉快!
问答
使用 Bird 的 API 构建 WhatsApp 机器人有多难?
出乎意料地简单。只需一个 webhook 和几个 API 调用,你就可以在几分钟内构建一个能读取和回复消息的功能完整的机器人。
接收消息需要特殊配置吗?
是的,机器人必须可从互联网访问。ngrok 等工具可以从本地机器创建安全隧道。
我可以为不同的消息应用使用同一套代码吗?
完全可以。Conversations API 对渠道进行了抽象,因此你的机器人可以使用相同的逻辑在 WhatsApp、WeChat 或 Messenger 上运行。
如何关闭或重置聊天线程?
向对话端点发送 PATCH 请求并设置适当的状态即可归档。任何新消息都会自动打开一个新对话。
在哪里可以找到示例代码?
完整的可运行演示 Wabot on GitHub 展示了消息处理、并发管理和归档的实现方式。
