作者都是各自领域经过审查的专家,并撰写他们有经验的主题. 我们所有的内容都经过同行评审,并由同一领域的Toptal专家验证.
Aminadav Glickshtein的头像

Aminadav Glickshtein

Aminadav有20年的专业经验. 他从7岁开始编程,编程对他来说就像母语一样.

以前在

恩斯特 & 年轻的
分享

很久以前,我为一家员工超过20万的企业开发了一个web应用程序。. 对网络应用的反馈促使我做了一个实验. 如果我创建一个WhatsApp会发生什么 聊天机器人 来解决特定的用例,而不是一个web应用程序? 人们会更喜欢它吗? 它会更有用吗?

但故事远不止于此. 聊天机器人有很大的潜力! 在这个 WhatsApp 聊天机器人教程, 我想分享我的学习之旅, 我发现的最佳实践, 我对这款应用vs. 聊天机器人的问题. 除此之外:聊天机器人有一天会取代所有传统应用吗?


我工作的公司在特拉维夫市中心有一个大约2000名员工的办公室. 停车位非常有限, 所以人们把车停在专门为双车位设计的地方, 一辆车挡住另一辆车的地方. 在每个双车位,第一个司机停在里面,第二个停在外面.

从白板到Web应用

在应用程序出现之前,有一块大板. 所有的司机都标出了他们停车的位置,以及他们的名字和电话号码. 在离开办公室之前,司机必须检查是否有人挡住了他们的车. 如果是这样的话, 他们必须打电话给另一位司机,并希望他们没有在开会,这样他们就可以把车挪开.

为了使这个过程更好,我创建了一个web应用程序.

最初的web应用概念, 显示出一排排的内外双车位,上面有数字,有时还有名字. 有名字的是蓝色的,没有名字的是绿色的.

很简单. 无后端. 无服务器托管. 无需数据库维护. 甚至没有任何UI框架. 没有webpack,也没有JS包! 就是普通的JavaScript.

它是由GitHub的免费静态页面托管. 数据库是FireBase,所以我们有实时支持和JSON支持,不需要后端.

用户界面很简单. 用户可以看到所有的停车位,并点击一个空车位来填写他们的详细信息. 如果它们已经停了,它将从浏览器的本地存储中获取数据. 如果他们点击了注册槽, 他们可以看到相关的联系方式,并可以选择打电话给司机.

它运行良好了将近一年. 不到一天的开发时间为许多人节省了时间,这是一项很好的投资.

从网络应用到聊天机器人

有一天,Facebook宣布他们将为WhatsApp发布一个API. 第二天,我哥哥买了一台带有Alexa功能的亚马逊Echo. 大约在那个时候,我也开始到处看到谷歌助手.

我开始想,也许世界正朝着聊天机器人的方向发展,所以我应该尝试一下. 用户会更喜欢使用聊天机器人吗? 我需要少给点支持吗? 它会仅仅通过利用不同的基础设施引入任何新的元功能吗?

我在普通的网络应用程序上得到了一些反馈, 我相信,如果我创造一个WhatsApp聊天机器人,可能会解决这个问题:

  • 这款应用在一些旧手机上运行不佳.
  • 它在地下(停车场所在的地方——那里没有好的移动信号)不工作。.
  • 司机希望发送信息给拦截者,而不是打开电话拨号器.
  • 司机希望在有人阻挡他们时收到推送通知, 而不是每次离开前打开web应用程序.

重要的是要记住,聊天平台的开发人员喜欢 电报 或WhatsApp多年来夜以继日地工作,以确保其应用程序的稳定性. 通过使用他们的资源和开发一个小的引擎来回答问题, 这将把可维护性的艰苦工作留给聊天平台开发人员. 我所要做的就是深入研究如何制作一个WhatsApp聊天机器人.

就在我开始开发新的停车助理聊天机器人之后, 我意识到这个想法有多棒. 添加新功能是如此简单和快速,我甚至不需要做端到端测试.

没有信号? 没有问题.

不仅如此,我也不再需要复杂的CI/CD过程. 如果它在聊天模拟器中工作,那么它将在任何地方工作. No .apk没有Xcode,没有App Store,也没有Google Play. 聊天机器人可以向用户发送信息,而不需要我注册设备, 使用PubSub或类似的服务推送通知, 或者保存用户令牌. 不需要身份验证系统——我使用用户的电话号码作为标识.

没有信号? 没有问题. 我不需要使用清单文件添加离线支持:WhatsApp给了我开箱即用的功能. 这条信息很快就会发出去,当用户去到wifi更好的上层时.

然后我意识到,每次聊天平台都会引入一个新功能, 我的应用程序将立即从中受益. 哇,这真是一笔不错的投资. (公平地说, 还有一个风险是,新特性可能会限制功能或创建需要更多开发工作的破坏性更改, 所以在实现业务关键型任务之前要仔细考虑).

写作 停车场助理这是WhatsApp聊天机器人的原型

要创建一个WhatsApp聊天机器人,第一个挑战是将消息从WhatsApp发送到你的程序中. 我发现最简单的解决方案是使用共享的Twilio电话号码. 它只是用于开发—当转移到生产时, 开发人员希望使用专用的电话号码.

Twilio的免费号码由许多Twilio用户共享. 将应用的最终用户与其他Twilio用户的应用区分开来, 最终用户必须向聊天机器人发送预定义的消息.

用户向共享号码发送特殊留言后, 所有的消息从他们的号码将直接到您的Twilio帐户和webhooks. 这就是为什么在生产中需要一个专用的号码——不能保证给定的用户只希望在给定的共享号码上使用一个应用程序.

发送WhatsApp消息

在Twilio的“可编程短信仪表板”上,左侧导航栏有一个“WhatsApp测试版”的链接:

A screenshot of Twilio's "Programmable SMS Dashboard," showing a graph of recent messages, 这是最近的错误和警告的图表. The fourth option in the navbar is "WhatsApp Beta."

点击它,开发者将看到一个带有“Sandbox”选项的页面.”

Twilio的WhatsApp沙盒设置步骤的截图, 等待一条特殊的WhatsApp消息发送到特定的号码.

要关联用户,他们需要向Twilio提供的号码发送一条特殊消息. 一旦用户这样做了,我们就可以开始通过Twilio向他们发送消息并处理他们的消息.

这是 一个例子 使用cURL发送消息:

旋度的http://api.为什么twilio.com/2010-04-01/Accounts/ {user_account} /消息.json' -X POST \
  ——data-urlencode 'To=whatsapp:+{to_phone_number}' \
  ——data-urlencode 'From=whatsapp:+{from_phone_number}' \
  ——data-urlencode 'Body={escaped_message_body}' \
  - u {user_account}: user_token

这是一条简单的短信. 但你也可以附加媒体(图像等).)回复你的留言. 这是一个节点.js的例子:

函数sendWhatsApp(to, body, media) {
  Const auth =
    “为什么twilio_clientid: 为什么twilio_api”
  const sendURL =
    “http://api.为什么twilio.com/2010-04-01/Accounts/ {account_id} /消息.json”
  const res =等待取回(sendURL, {
    标题:{
      授权:“基本”+缓冲区.从(身份验证).toString(“base64”),
    },
    方法:“文章”,
    身体:objToFORM (
      JSONRemoveUndefined ({
        到:“whatsapp:+972”+到.替换(/,/ g, " ").替换(/ ^ 0 /”、“),
        :“whatsapp: + 18454069614”,
        身体:身体,
        MediaUrl:媒体、
      }),
    ),
  })
}

函数objToFORM(obj) {
  const 参数个数 = new URL搜索Params()
  For (var a in obj) {
    参数个数.追加(a, obj [a])
  }
  返回参数
}

JSONRemoveUndefined(obj) {
  返回JSON.解析(JSON.stringify (obj))
}

就是这样:现在我们可以开始向客户端发送消息了! 但重要的是要记住WhatsApp消息的两个最关键的技术限制:

  1. 当机器人收到消息时,您可以免费发送一个文本回复. 超过这个还要花钱.
  2. 机器人只能在收到用户消息后的24小时窗口内向用户发送消息. 窗外, 机器人只能使用批准的模板发送消息, 我们稍后会看到.

接收WhatsApp消息

发送消息相当容易,但是接收和处理消息就更容易了.

“Twilio Sandbox for WhatsApp”页面的截图. 沙箱配置部分有两个端点URL字段, 用于“消息何时进入”和“状态回调URL”.沙盒参与者部分列出了用户id(格式为“whatsapp:”,后面跟着电话号码),并提供了与之前相同的说明,说明如何通过发送特殊消息邀请朋友到沙盒.

在Twilio的“沙盒”页面上, 开发者可以定义Twilio应该将收到的共享WhatsApp号码信息发送到哪里. 在开发过程中, 像Ngrok或Serveo这样的服务可以提供路由到本地开发人员机器的公共url.

Twilio WhatsApp的消息是这样的:

{
  “NumMedia”:“0”,
  “SmsSid”:“{sms_id}”,
  “SmsStatus”:“收到”,
  “正文”:“用户消息示例”,
  ”到“:”whatsapp: + {phone_number}”,
  “NumSegments”:“1”,
  “MessageSid”:“{message_sid}”,
  “AccountSid”:“{account_sid}”,
  “从”:“whatsapp: + {phone_number}”,
  “ApiVersion”:“2010-04-01”
}

这就是我们所需要的. 我们可以使用任何编程语言来获取这个信息, parse it, 试着理解用户的要求. 这可能会导致对数据库进行一些CRUD操作, 之后,bot可以在其回复中向用户传递适当的信息(或成功/失败消息). 这些是创建WhatsAppChatbot的基础.

消息模板

正如前面提到的, 聊天机器人只能向“当前”与它们互动的用户发送自由式信息, i.e.,在24小时窗口内. 但是如果您希望向新用户发送消息, 或者在窗外, 您必须使用预先批准的邮件模板. 这是为了防止垃圾邮件.

在我的用例中, 我想在有人阻塞时更新驱动程序, 即使他们不是聊天机器人的用户. 在Twilio中,点击“发件人”和“配置”.”

A screenshot of Twilio's "WhatsApp Enabled Senders" page, 清单数量, 他们的企业名称, 和状态(列出的一个标记为已批准), 另一个, "Waiting for Approval from WhatsApp.")

这是我选择的模板:

{{1}}阻塞了您的停车场出口. 他们走了我会通知你的.

几天后, Facebook批准了我的模板, 我就可以把这些信息发给每个有WhatsApp的人, 不仅仅是那些给聊天机器人发信息的司机.

从模板发送消息与发送常规消息完全相同,使用相同的API. WhatsApp会自动看到它与模板匹配,并批准该消息.

不仅仅是为了 停车场助理

当我想到网上商店时,这种策略让我感到兴奋:也许有一天,人们可以使用聊天机器人购买任何东西. 它就像发送WhatsApp信息和附加图片一样简单. 想象一下,如果用户能够在WhatsApp的每条消息上附加真钱. 买东西很简单. 用户可以通过与供应商的聊天机器人交谈,轻松地购买任何东西.

想象一下,一个聊天机器人取代了Waze或谷歌地图. 你把目的地的信息发给它. 聊天机器人平台正在追踪你的位置, 聊天机器人会给你发送一段录音信息,并根据导航系统的实时语音指示自动播放.

这不是幻想. WhatsApp目前支持实时位置共享——他们所需要的只是自动播放收到的信息的选项, 瞧.

想想Waze聊天机器人或出租车聊天机器人,而不是get或Uber应用. 你发一条信息说你在哪里,然后出租车来了,你用WhatsApp付款. 如此简单.

有些读者可能会想,“难道用户不是更喜欢图形界面,而不仅仅是打字界面吗??“我相信聊天机器人平台会给聊天机器人所有者发送按钮的选项, 图片, 和纯HTML框. Facebook已经支持 Webview for Messenger. 用户不需要安装任何东西,只需使用他们喜欢的即时通讯应用程序.

这些优势就是为什么开发人员希望创建WhatsApp聊天机器人来处理重要任务的原因, 像给 即时权威答案 关于冠状病毒大流行,以帮助遏制错误信息的传播.

关于将Web应用程序迁移到聊天机器人的7个结论

总而言之:

  • 很多次, 开发聊天机器人可以大大缩短开发时间, 因为不需要设计和规划图形用户界面. (也就是说, 在开始之前,有必要看看聊天机器人UX设计的细节, 向…学习 别人的错误.)
  • 给聊天机器人添加新功能要容易得多. 开发人员不需要重新设计或更改任何当前元素. 聊天机器人只需要开始理解新类型的消息.
  • 在默认情况下,有特殊需求的人更容易接触到聊天机器人.
  • 无需定制跨平台解决方案. 聊天机器人平台已经做到了这一点.
  • 用户更信任聊天机器人分享信息. 你不需要请求允许或显示警告.g., 用户可以简单地从他们的图库中选择一张图片并将其发送给聊天机器人——访问图库的权限已经授予了聊天平台.
  • 聊天平台很容易处理推送通知. 推送通知是用户遗忘应用和用户经常使用应用之间的区别.
  • 聊天平台可以帮你在离线和在线状态之间切换.

如何打造WhatsApp聊天机器人:告别建议和最佳实践

编写聊天机器人的优点非常明显. 建议准备建造一个的开发人员从小处开始, 用一个能理解一条信息的聊天机器人. 并且处理得很好.

聊天机器人应该只发送短消息. 人们不读长信息. 当你有重要的东西要发送,不能简洁地表达, 最好将消息分成几个小消息.

有个性的聊天机器人更受欢迎. 即使是一些最基本的“人类语言”也比“系统消息形式”的方式要好得多:“我将为您更新停车地图。,,而不是, “数据库已经更新了.“聊天机器人应该让用户觉得它是一台为用户服务的机器, 而不是一个执行技术操作的黑匣子,他们可能无法理解.

这篇WhatsApp聊天机器人教程没有详细介绍如何解析文本 自然语言信息 用户将发送给聊天机器人. 但是有抱负的 聊天机器人开发服务 欢迎大家仔细阅读 源代码 WhatsApp的停车助手(停车场助理) hackparkDialogFlow.ts(它接受用户的请求作为操作),以了解该方面是如何工作的.

有关如何检测不同类型的用户消息(同时遵循依赖注入方法进行编程)的更深入的文章,请参阅Toptal的文章 TypeScript聊天机器人教程.

祝你自己的WhatsApp聊天机器人开发顺利!

了解基本知识

  • WhatsApp的用途是什么?

    起初, WhatsApp是一款允许用户发送和接收短信的即时通讯应用, audio, video, 或任何其他文件给其他WhatsApp用户. 最近, Facebook为WhatsApp发布了一个API,使其能够通过聊天机器人自动发送和接收消息.

  • 使用WhatsApp安全吗?

    WhatsApp使用端到端加密解决方案, 所以没有人, 包括WhatsApp, 可以读取或检查它的消息. 这些消息在用户的设备上进行加密和解密.

  • 使用聊天机器人的好处是什么?

    很多次, 开发聊天机器人可以大大缩短开发时间, 因为不需要设计和规划图形用户界面,也不需要定制跨平台解决方案.

  • 为什么聊天机器人是未来?

    聊天机器人是未来,因为它们允许加速开发周期, 通过使用现有的更快地响应更改, 维护良好的平台. 聊天机器人会自动利用聊天平台与大量设备的兼容性. 在ux方面,聊天机器人为用户提供了一个统一的、易于导航的界面.

  • 为什么我们需要聊天机器人?

    聊天机器人让用户无需安装新的应用程序或学习新的用户界面即可轻松完成他们想要完成的任务. 通过使用聊天机器人,用户可以很容易地从他们正在使用的服务中获得更新.

  • WhatsApp有API吗?

    是的. 最近, Facebook为WhatsApp发布了一个新的API, 让企业以编程方式发送和接收WhatsApp消息. 开始使用WhatsApp API, 开发者的业务必须经过WhatsApp的验证和批准, 或者使用第三方提供商.

聘请Toptal这方面的专家.
现在雇佣
Aminadav Glickshtein的头像
Aminadav Glickshtein

位于 特拉维夫-雅福,以色列

成员自 2017年9月26日

作者简介

Aminadav有20年的专业经验. 他从7岁开始编程,编程对他来说就像母语一样.

Toptal作者都是各自领域经过审查的专家,并撰写他们有经验的主题. 我们所有的内容都经过同行评审,并由同一领域的Toptal专家验证.

以前在

恩斯特 & 年轻的

世界级的文章,每周发一次.

订阅意味着同意我们的 隐私政策

世界级的文章,每周发一次.

订阅意味着同意我们的 隐私政策

Toptal开发者

加入总冠军® 社区.