ChatOps 是对话驱动的开发。其理念是你可以编写代码,使其响应在聊天窗口中输入的内容而执行。作为一名开发者,你可以使用 ChatOps 从 Slack 合并拉取请求,自动将支持工单分配给来自 Facebook 消息的人,或者通过 IRC 检查部署状态。
在 Python 世界中,最广泛使用的 ChatOps 库是 Opsdroid 和 Errbot。在本月的 Python 专栏中,让我们聊聊使用它们的体验、各自的优点以及如何开始使用它们。
Opsdroid
Opsdroid 是一个相对年轻(自 2016 年以来)的开源聊天机器人库,用 Python 编写。它拥有良好的文档、出色的教程,并包含插件,可帮助你连接到流行的聊天服务。
内置功能
该库本身并没有包含你入门所需的一切,但这是有意为之的设计。这个轻量级框架鼓励你启用其现有的连接器(Opsdroid 将其称为帮助你连接到聊天服务的插件)或编写自己的连接器,但它不会因附带你可能不需要的连接器而变得臃肿。你可以轻松地为以下服务启用现有的 Opsdroid 连接器
Opsdroid 将聊天机器人执行的功能称为“技能”。技能是 async
Python 函数,并使用 Opsdroid 的匹配装饰器,称为“匹配器”。你可以配置你的 Opsdroid 项目以使用与你的配置文件位于同一代码库中的技能,或者从外部公共或私有仓库导入技能。
你也可以启用一些现有的 Opsdroid 技能,包括 seen,它可以告诉你特定用户上次被机器人看到的时间,以及 weather,它将向用户报告天气。
最后,Opsdroid 允许你使用其现有的数据库模块配置数据库。当前 Opsdroid 支持的数据库包括
你在 Opsdroid 项目的 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 之前,你必须 向你的 Slack 工作区添加一个机器人用户。
如果你需要连接到 Opsdroid 不支持的服务,文档 中提供了添加你自己的连接器的说明。
文档相当不错。 特别是对于一个处于积极开发中的年轻库来说,Opsdroid 的文档非常有用。文档包含一个 教程,它引导你创建几个不同的基本技能。关于 技能、连接器、数据库 和 匹配器 的 Opsdroid 文档也很清晰。
其支持的技能和连接器的仓库在你开始编写自己的自定义技能和连接器时提供了有用的示例代码。
自然语言处理: Opsdroid 支持其技能的正则表达式,以及多个 NLP API,包括 Dialogflow、luis.ai、Recast.AI 和 wit.ai。
Opsdroid 可能存在的问题
Opsdroid 尚未启用其某些连接器的全部功能。例如,Slack API 允许你向消息添加颜色条、图像和其他“附件”。Opsdroid Slack 连接器未启用“附件”功能,因此如果这些功能对你很重要,你需要编写自定义的 Slack 连接器。但是,如果某个连接器缺少你需要的功能,Opsdroid 会欢迎你的 贡献。文档可以添加更多示例,特别是预期用例的示例。
用法示例
hello/__init__.py
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)
configuration.yaml
connectors:
- name: websocket
skills:
- name: hello
repo: "https://github.com/<user_id>/hello-skill"
Errbot
Errbot 是一个“开箱即用”的开源聊天机器人。Errbot 于 2012 年发布,拥有任何人对成熟项目所期望的一切,包括良好的文档、出色的教程以及大量的插件,可帮助你连接到现有的流行聊天服务。
内置功能
与采用更轻量级方法的 Opsdroid 不同,Errbot 附带了安全构建自定义机器人所需的一切。
Errbot 原生支持 XMPP、IRC、Slack、Hipchat 和 Telegram 服务。它列出了通过社区提供的后端对其他 10 种服务的支持。
Errbot 的优点
良好的文档: Errbot 的文档成熟且易于使用。
动态插件架构: Errbot 允许你通过与机器人聊天来安全地安装、卸载、更新、启用和禁用插件。这使得开发和添加功能变得容易。对于有安全意识的人来说,由于 Errbot 的细粒度权限系统,这一切都可以被锁定。
当有人输入 !help
时,Errbot 使用你的插件文档字符串来生成可用命令的文档,这使得更容易了解每个命令的作用。
内置管理和安全: Errbot 允许你限制具有管理权限的用户列表,甚至具有细粒度的访问控制。例如,你可以限制哪些命令可以由特定用户和/或特定房间调用。
广泛的插件框架: Errbot 支持 hooks、回调、子命令、webhook、轮询和许多 更多功能。如果这些还不够,你甚至可以编写 动态插件。如果你想根据远程服务器上可用的命令启用聊天命令,此功能很有用。
附带测试框架: Errbot 支持 pytest,并附带一些有用的实用程序,使测试你的插件变得容易且可行。它的“测试你的插件”文档经过深思熟虑,并提供了足够的入门知识。
Errbot 可能存在的问题
初始 !: 默认情况下,Errbot 命令以感叹号 (!help
和 !hello
) 开头发出。有些人可能喜欢这样,但其他人可能会觉得烦人。值得庆幸的是,这很容易关闭。
插件元数据: 最初,Errbot 的 Hello World 插件示例看起来很容易使用。但是,我无法加载我的插件,直到我进一步阅读教程并发现我还需要一个 .plug
文件,Errbot 使用该文件来加载插件。这是一个很小的挑剔之处,但在我深入研究文档之前,这一点对我来说并不明显。
用法示例
hello.py
import random
from errbot import BotPlugin, botcmd
class Hello(BotPlugin):
@botcmd
def hello(self, msg, args):
text = random.choice(["Hi {}", "Hello {}", "Hey {}"]).format(message.user)
return text
hello.plug
[Core]
Name = Hello
Module = hello
[Python]
Version = 2+
[Documentation]
Description = Example "Hello" plugin
你使用过 Errbot 或 Opsdroid 吗?如果使用过,请留下评论,分享你对这些工具的印象。
1 条评论