65.9K
CodeProject 正在变化。 阅读更多。
Home

为 Facebook Messenger 平台开发聊天机器人

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.67/5 (6投票s)

2017 年 1 月 11 日

CPOL

6分钟阅读

viewsIcon

23653

通过实际示例,解释用于开发聊天机器人的新 Facebook Messenger 平台。

引言

在电子商务在线商店出现之前,我们在选择商品或服务时总有机会与销售代表或分销商交谈。进入数字世界后,这个领域变得沉默了。这对客户方便吗?我认为不是。与通过多个目录和商店搜索相比,询问销售代表或经销商关于所需产品或服务的更简单。如今,几乎所有“现代”人都在使用即时通讯应用程序——WhatsApp、Facebook Messenger、Slack、Yahoo 等。Facebook 为开发人员提供了一个绝佳的机会,让他们能够通过启用实时对话——与简单的 AI 代表交谈,就像在商店里与真正的经销商交谈一样——使电子商务、在线商店、服务和其他分销机构对其客户更加友好。

背景

显然,大多数互联网用户对“聊天机器人”一词有负面联想。本文与垃圾邮件机器人无关,只讨论旨在通过使在线销售和商品分发更具互动性来简化客户生活的有用的小程序。

设计聊天机器人

通常,聊天机器人是一个小程序。就 Facebook Messenger(本文仅关注 Facebook 聊天机器人)而言,它被称为 webhook。它基本上是一个 Web 端点,用于接收来自 Facebook 的消息。Webhook 处理收到的消息——即从 Facebook 页面收到的聊天消息,对其进行分析,然后根据消息内容发送回复。回复可以只是一个 `string`——聊天机器人的回复消息,也可以是扩展内容,如图片、Web 链接、音频、视频等。基本上,我们可以定义开发 Facebook Messenger 聊天机器人的主要步骤:

  1. 创建一个将使用聊天机器人 webhook 与客户聊天的 Facebook 页面。(在为现有页面开发聊天机器人时,此步骤显然应被省略)。例如:https://#/sskotugoroshko
  2. 为 Messenger 聊天机器人注册 Facebook 应用 https://developers.facebook.com/apps
  3. 构建或租用带有某些 DNS 名称的 webhook 托管空间,例如:http://fbwebhookbotsem.herokuapp.com。Webhook 可以使用 .NET、PHP、Java 或 Node.Js 来完成,具体取决于你的偏好,托管环境应与之匹配。
  4. 以消息-回复的格式准备流程案例或聊天图,用于构建对话。
  5. 选择使用哪个人工智能引擎。可能的选项如下:
    • 使用原始的 if-else 逻辑进行自编码字符串解析。优点是高度可定制。
    • 使用基于 ELIZA AI 架构 的自编码聊天机器人核心。Eliza 是任何聊天机器人的经典、基础 AI 架构。它定义了支持类人对话(聊天)的基本原理和转折。
    • 构建自己的 AI 引擎,使用 NLP 或类似技术,这需要扎实的、先进的类人智能开发知识(神经网络、机器学习等)。
    • 如今最流行的是通过 Web API 使用外部 AI 引擎——例如 Wit.AIRecastAI,还有许多其他开放、现代的 AI API 正在涌现。
  6. 使用选定的 AI 引擎实现 webhook。
  7. 进行实时测试,以确保机器人按照预期进行对话。添加和监控聊天日志,以识别和修复困难的聊天案例。

对我而言,实现 webhook 的最佳技术是 Node.Js,它非常直观、简单、易于部署,而且托管费用便宜甚至免费。在本文中,我将在解释聊天机器人 webhook 的行为时使用 Facebook 提供的代码示例。代码示例可以从官方 GitHub 页面下载:https://github.com/fbsamples/messenger-platform-samples。这个例子是用 Node.Js 制作的,它支持非常简单的命令来展示 FB Messenger 平台的功能。如果为 webhook 后端选择了 Node.Js,可以使用 Heroku 进行托管。Heroku 提供免费托管套餐,对不同平台(包括 Node.Js)有流量限制。

创建页面

Facebook 聊天机器人设计用于在页面聊天中运行,因此在启动新聊天机器人时需要确定它将在哪个页面上运行。Facebook 页面的右上角有“创建页面”菜单。如果页面已存在,只需知道其页面 ID 即可。

查找页面 ID

  1. 转到你的页面。
  2. 点击“设置”。
  3. 点击“页面信息”。
  4. 你可以看到“Facebook 页面 ID”。

facebook page id

例如,我创建了一个鞋子在线商店的页面:https://#/sskotugoroshko

create facebook page

页面 ID 准备好后,下一步是创建 Facebook 应用。这应该在以下页面完成:https://developers.facebook.com/apps

create facebook app

创建应用后,需要配置 webhook 端点和页面之间的连接,称为“订阅应用到页面”。这在以下文档中有很好的解释:https://developers.facebook.com/docs/messenger-platform/guides/quick-start。完成后,应用设置屏幕应如下所示:

subscribe app to page

webhook setup fb app

非常重要!设置完成后,在实现 webhook 并通过所有聊天测试后,不要忘记将你的应用设置为公开可用。Facebook 应用页面 -> 设置选项卡。否则,公众将无法与你的机器人聊天。

make it live

为 NodeJs 在 heroku 上创建账户。

以下文章详细介绍了如何创建 heroku 账户和部署 NodeJs 应用:https://scotch.io/tutorials/how-to-deploy-a-node-js-app-to-heroku。账户设置和部署相当容易,我花了不到一个小时就完成了,应该需要大约 30 分钟。Heroku 账户可以免费使用。

对话流程图或聊天案例

这是编写聊天机器人代码的起点。你的客户必须提供聊天案例的图表来描述聊天机器人的预期行为。聊天案例的示例可以在我的介绍页面找到:http://fbwebhookbotsem.herokuapp.com/

编写聊天机器人 Webhook 代码

现在,页面已准备就绪,Facebook 应用已完全设置,托管环境已创建,聊天案例已考虑,是时候编写聊天机器人本身的代码了。要实现机器人,你需要遵循客户提供的聊天案例。我建议使用 Eliza 核心,它可以在 Github 或 Wit.AI Web 界面上找到。在 webhook 端,应用应在适当的地址监听 posted 数据,例如服务器运行过程的 Node.Js 代码:

/*
 * All callbacks for Messenger are POST-ed. They will be sent to the same
 * webhook. Be sure to subscribe your app to your page to receive callbacks
 * for your page. 
 * https://developers.facebook.com/docs/messenger-platform/
 *         product-overview/setup#subscribe_app
 *
 */
app.post('/webhook', function (req, res) {
  var data = req.body;

  // Make sure this is a page subscription
  if (data.object == 'page') {
    // Iterate over each entry
    // There may be multiple if batched
    data.entry.forEach(function(pageEntry) {
      var pageID = pageEntry.id;
      var timeOfEvent = pageEntry.time;

      // Iterate over each messaging event
      pageEntry.messaging.forEach(function(messagingEvent) {
        if (messagingEvent.optin) {
          receivedAuthentication(messagingEvent);
        } else if (messagingEvent.message) {
          receivedMessage(messagingEvent);
        } else if (messagingEvent.delivery) {
          receivedDeliveryConfirmation(messagingEvent);
        } else if (messagingEvent.postback) {
          receivedPostback(messagingEvent);
        } else if (messagingEvent.read) {
          receivedMessageRead(messagingEvent);
        } else if (messagingEvent.account_linking) {
          receivedAccountLink(messagingEvent);
        } else {
          console.log("Webhook received unknown messagingEvent: ", messagingEvent);
        }
      });
    });

    // Assume all went well.
    //
    // You must send back a 200, within 20 seconds, to let us know you've 
    // successfully received the callback. Otherwise, the request will time out.
    res.sendStatus(200);
  }
});

有关更多详细信息,请查看官方教程存储库:https://github.com/fbsamples/messenger-platform-samples

测试聊天机器人

聊天机器人实现后,需要确保其行为符合要求的流程。为此,你可以配置测试用户,他们可以在机器人处于开发或测试阶段(但尚未上线)时与机器人聊天(Facebook 应用设置页面,角色选项卡,角色菜单)。

add test users before app is live

聊天机器人的工作示例可以在我的 Facebook 页面上找到:https://#/sskotugoroshko/messages 或直接在 Messenger 页面:https://messenger.com/t/sskotugoroshko

机器人的介绍页面:http://fbwebhookbotsem.herokuapp.com/

chat with bot sample

历史

  • 2017 年 1 月 11 日:Sem 发表
© . All rights reserved.