惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Microsoft Azure Blog
Microsoft Azure Blog
有赞技术团队
有赞技术团队
IT之家
IT之家
博客园 - 聂微东
Jina AI
Jina AI
Hugging Face - Blog
Hugging Face - Blog
Last Week in AI
Last Week in AI
Apple Machine Learning Research
Apple Machine Learning Research
WordPress大学
WordPress大学
小众软件
小众软件
爱范儿
爱范儿
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
V
Visual Studio Blog
雷峰网
雷峰网
酷 壳 – CoolShell
酷 壳 – CoolShell
阮一峰的网络日志
阮一峰的网络日志
宝玉的分享
宝玉的分享
博客园 - 三生石上(FineUI控件)
大猫的无限游戏
大猫的无限游戏
博客园 - Franky
量子位
月光博客
月光博客
博客园 - 【当耐特】
博客园 - 叶小钗

0x01 byte

我在 2025 年看完的书 西班牙之行 2025 年初展望 2024 年底曼谷之行 荐书:The Blind Watchmaker 王垠传播的「自然视力恢复法」真的有用吗? 从高考志愿到职业选择 浅谈 Apple Intelligence 2024 年,我为什么开始为搜索付费 运气与努力 刷新了一下对内容审查粒度的认知 离开心动和 TapTap 如何反转一个链表? 如何高效地协作开发:一些 Google 的实践 关于 LeanCloud 被心动/TapTap 收购 small talk #3:从 IPFS 聊到 Web 的开放性 small talk #2:聊聊用 M1 芯片的新 Mac 怀念两位老师:Stan Eisenstat 和 Paul Hudak small talk #1: 聊聊你的私有云 如何在 Emacs 里做所有事 Remark Ninja: 一个简单的评论系统 Woman、man、camera、TV:如何做一个完整的深度学习应用 荐书:走出戈壁:我的中美故事 LeanCloud 开始周期性远程工作了 树莓派:用 Pi-hole 来保护隐私和过滤广告 爱国指南 我在 2019 年觉得不错的几个习惯 WeWork 的兴衰和创投的游戏 计算机专业学生该如何提高自己 怎样利用好路上的时间
快速开发聊天机器人
blog.incoming@1byte.io (江宏) · 2016-06-19 · via 0x01 byte

聊天工具除了用来传递消息之外,还可以帮我们完成一些重复琐碎的工作,比如让它去追踪一些数据变化,象下图中的 Trump 会告诉我们发表在知乎上的帖子又增加了多少新的读者关注。

Trump - 知乎数据

Trump - 知乎数据

下面我就来介绍一下如何在 LeanEngine 上快速开发和部署一个像 Trump 这样的聊天机器人。因为我们团队使用的聊天工具是 BearyChat,所以就以 BearyChat 为例了。

首先,开始一个新的 Node.js 项目并把 RoLE 增加为依赖。RoLE 是 Robot on LeanEngine 的缩写,这是从我们自己的聊天室机器人抽象出来的一个库。不过因为已经有一个叫 role 的 NPM 包,所以包名就只能叫 role-model 了,也是个有趣的名字。用下面的命令把它加到你的项目里:

npm install --save role-model

这个库只有一个顶层 API createRobotApp()

const role = require('role-model');
const app = role.createRobotApp({
  chatService: 'bearychat',
  chatServiceOptions: {
    team: process.env.BEARYCHAT_TEAM,
    token: process.env.BEARYCHAT_TOKEN
  }
});

目前 chatService 参数暂时只支持 'bearychat',但支持其他聊天工具(包括微信服务号)是非常容易的,欢迎在 GitHub 提交 pull request。chatServiceOptions 是要传递给这个聊天工具的参数,对于 BearyChat 来说就是 team 和 token。为了避免 token 暴露在源代码中,我们从环境变量读取他的值。环境变量可以在云引擎的 web 控制台设置。

上一行代码的 app 有三个属性:

  • app.expressApp 是一个 Express 应用的实例,可以用它来定义新的 route 和 middleware,比如用来作为第三方服务的回调 hook。
  • app.leanEngine 是一个已经初始化过的 LeanEngine SDK 的实例,在普通 LeanEngine Node 应用中可以通过 require('leanengine') 得到并自己初始化。在这里提供出来以方便调用 LeanCloud 的各种服务,比如存储、IM 等。
  • app.robot 这是用来定义机器人行为的对象。

机器人的行为通过建立匹配条件和回调函数的关联来定义。匹配条件可以是一个关键词列表:

app.robot.addHandler(['ping'],
    context => context.respond('pong'));

当发来的消息包含列表中的所有关键词时,对应的函数就会被调用。

匹配条件也可以是正则表达式:

app.robot.addHandler(/ping/,
    context => context.respond('pong'));

如果正则表达式里有捕获组(capture group)的话,context.matches 里会有匹配到的字符串。

最灵活的方式是用一个函数作为匹配条件:

app.robot.addHandler((msg) => msg === "ping",
    context => context.respond('pong'));

在程序的最后运行:

这必须是主程序的最后一行,因为它会调用 app.expressApp.listen()

因为 RoLE 使用了 ES6 的一些功能,所以需要在 package.json 告诉 LeanEngine 使用 Node 4.x(未来也可以换成更高的版本)。

  "engines": {
    "node": "4.x"
  }

如果以前没有用过 LeanEngine,请先安装必要的命令行工具。然后按步骤将程序部署到 LeanEngine,在 LeanCloud 后台配置好自己的 *.leanapp.cn 二级域名,再到 BearyChat 的设置里增加一个 Hubot 类型的机器人,就可以和你的新机器人对话了。

最后贴出一些我们自己使用聊天机器人的截图,希望能抛砖引玉,给大家攒些灵感吧:

机器人「长者」的功能很多。比如测试一下从国内调用 LeanCloud 美国节点的 API 是不是畅通:

长者 - 测试美国节点

长者 - 测试美国节点

看看今天有谁请假:

长者 - 请假

长者 - 请假

请教一下人生的经验:

长者 - 支持不支持

长者 - 支持不支持

长者 - 清河的雷布斯

长者 - 清河的雷布斯

是不是觉得 Siri 什么的都弱爆了?