Python|Python 的 ChatOps 库:Opsdroid 和 Errbot


Python|Python 的 ChatOps 库:Opsdroid 和 Errbot文章插图
学习一下 Python 世界里最广泛使用的 ChatOps 库:每个都能做什么 , 如何使用 。
-- Jeff Triplett, Lacey Williams Henschel
ChatOps 是基于会话导向而进行的开发 。 其思路是你可以编写能够对聊天窗口中的某些输入进行回复的可执行代码 。 作为一个开发者 , 你能够用 ChatOps 从 Slack 合并拉取请求 , 自动从收到的 Facebook 消息中给某人分配支持工单 , 或者通过 IRC 检查开发状态 。
在 Python 世界 , 最为广泛使用的 ChatOps 库是 Opsdroid 和 Errbot 。 在这个月的 Python 专栏 , 让我们一起聊聊使用它们是怎样的体验 , 它们各自适用于什么方面以及如何着手使用它们 。
OpsdroidOpsdroid 是一个相对年轻的(始于 2016)Python 开源聊天机器人库 。 它有着良好的开发文档 , 不错的教程 , 并且包含能够帮助你对接流行的聊天服务的插件 。
它内置了什么库本身并没有自带所有你需要上手的东西 , 但这是故意的 。 轻量级的框架鼓励你去运用它现有的连接器(Opsdroid 所谓的帮你接入聊天服务的插件)或者去编写你自己的 , 但是它并不会因自带你所不需要的连接器而自贬身价 。 你可以轻松使用现有的 Opsdroid 连接器来接入:

  • 命令行
  • Cisco Spark
  • Facebook
  • GitHub
  • Matrix
  • Slack
  • Telegram
  • Twitter
  • Websocket
Opsdroid 会调用使聊天机器人能够展现它们的“技能”的函数 。 这些技能其实是异步 Python 函数 , 并使用 Opsdroid 叫做“匹配器”的匹配装饰器 。 你可以设置你的 Opsdroid 项目 , 来使用同样从你设置文件所在的代码中的“技能” 。 你也可以从外面的公共或私人仓库调用这些“技能” 。
你同样可以启用一些现存的 Opsdroid “技能” , 包括 seen —— 它会告诉你聊天机器人上次是什么时候看到某个用户的 , 以及 weather —— 会将天气报告给用户 。
最后 , Opdroid 允许你使用现存的数据库模块设置数据库 。 现在 Opdroid 支持的数据库包括:
  • Mongo
  • Redis
  • SQLite
你可以在你的 Opdroid 项目中的 configuration.yaml 文件设置数据库、技能和连接器 。
Opsdroid 的优势Docker 支持:从一开始 Opsdroid 就打算在 Docker 中良好运行 。 在 Docker 中的指导是它 安装文档 中的一部分 。 使用 Opsdroid 和 Docker Compose 也很简单:将 Opsdroid 设置成一种服务 , 当你运行 docker-compose up 时 , 你的 Opsdroid 服务将会开启你的聊天机器人也将就绪 。
version: "3"
services:
opsdroid:
container_name: opsdroid
build:
context: .
dockerfile: Dockerfile
丰富的连接器: Opsdroid 支持九种像 Slack 和 Github 等从外部接入的服务连接器 。 你所要做的一切就是在你的设置文件中启用那些连接器 , 然后把必须的口令或者 API 密匙传过去 。 比如为了启用 Opsdroid 以在一个叫做 #updates 的 Slack 频道发帖 , 你需要将以下代码加入你设置文件的 connectors 部分:
- name: slack
api-token: "this-is-my-token"
default-room: "#updates"
在设置 Opsdroid 以接入 Slack 之前你需要 添加一个机器人用户。
如果你需要接入一个 Opsdroid 不支持的服务 , 在 文档 里有有添加你自己的连接器的教程 。
相当不错的文档: 特别是对于一个在积极开发中的新兴库来说 , Opsdroid 的文档十分有帮助 。 这些文档包括一篇带你创建几个不同的基本技能的 教程。 Opsdroid 在 技能 、 连接器 、 数据库, 以及 匹配器 方面的文档也十分清晰 。
它所支持的技能和连接器的仓库为它的技能提供了富有帮助的示范代码 。
自然语言处理: Opsdroid 的技能里面能使用正则表达式 , 但也同样提供了几个包括 Dialogflow,luis.ai,Recast.AI 以及 wit.ai 的 NLP API 。
Opsdroid 可能的不足Opsdroid 对它的一部分连接器还没有启用全部的特性 。 比如说 , Slack API 允许你向你的消息添加颜色柱、图片以及其他的“附件” 。 Opsdroid Slack 连接器并没有启用“附件”特性 , 所以如果那些特性对你来说很重要的话 , 你需要编写一个自定义的 Slack 连接器 。 如果连接器缺少一个你需要的特性 , Opsdroid 将欢迎你的 贡献。 文档中可以使用更多的例子 , 特别是对于预料到的使用场景 。
示例用法from opsdroid.matchers import match_regex
import random
@match_regex(r'hi|hello|hey|hallo')
async def hello(opsdroid, config, message):
text = random.choice(["Hi {}", "Hello {}", "Hey {}"]).format(message.user)
await message.respond(text)