Errbot 入门(1)

简介

ChatBot,也就是聊天机器人,是近期偷偷热起来的东西之一,个人觉得原因很简单——太多系统需要运维了。

使用 Grafana 可以将各种监控、日志的东西进行跟踪,在同一个 Dashboard 进行展示,但是缺点也比较明显:

  1. Dashboard 需要定制,不够灵活,难于满足突发的个性化需要。
  2. 信息是单向流动的,无法进行远程干预。
  3. 插件开发需要兼顾前后端,前端漂亮的界面对运维来说,并非必要。

聊天机器人简单说来是一个需要很多二次开发的控制台,这个控制台的不同之处在于,可以和多种聊天室之类的东西进行集成,另外部分产品提供了认证、授权等功能;另外还有不少开源插件,用来同其他系统进行集成。称为机器人,应该说是一个历史遗留,跟 AI 大概有半毛钱的关系吧。

目前最流行的同类产品大概是 Github 的 Hubot,不过个人爱好问题,还是选择了 Python 的 Errbot。官方网站 http://errbot.io/ ,大致功能:

  • 内置多后端支持:
    • Slack
    • Telegram
    • XMPP
    • IRC
    • HipChat
  • 第三方后端支持:
    • Skype
    • Gitter
    • Cisco Spark
  • 内置访问控制
  • 聊天室支持
  • 输出模板支持
  • 本地存储支持
  • 消息回调功能
  • Webhook 支持
  • 自带文本终端

下面会写一点教程,尝试在 Slack 上,通过 Errbot 来和 Kubernetes 集群进行交互。大概分为三部分:

  1. 安装运行和一些基本操作
  2. Slack 的集成
  3. 插件编写入门

安装和运行

安装过程还是有点点烦的,所以我做了个 Docker 镜像,源码见后。

镜像已经在 DockerHub 上构建,Tag 为 dustise/errbot-image,简单运行docker run -it --rm dustise/errbot-image,就进入了文本调试界面,如图所示:

startup

输入!help(注意,要输入两次回车)会列出当前支持的命令列表。感叹号是 errbot 的命令前缀。输入!shutdown --confirm,会提示关机字样,errbot 进程退出。

接下来我们将其中的存储卷进行映射:

mkdir -p /var/volume/errbot

docker run -it --rm --name=errbot \
-v /var/volume/errbot:/errbot \
dustise/errbot-image

运行之后,我们可以在宿主机系统上看到 errbot 的 Home 文件夹,其中plugins/err-example中包含了一个样板插件,我们可以查看一下其中的内容:

** err-example.plug**

[Core]
Name = Example
Module = example

[Documentation]
Description = This is a simple plugin example to get you started.

[Python]
Version = 2+

** err-example.py**

from errbot import BotPlugin, botcmd
class Example(BotPlugin):
....
    @botcmd  # flags a command
    def tryme(self, msg, args):  # a command callable with !tryme
        return 'It *works* !'  # This string format is markdown.

字面上看来,这个 Example 中提供了一条叫tryme的命令,我们回到 bot 控制台,输入!tryme看一下结果,会发现系统返回了It works字样。

接下来我们添加一个新的命令,在 err-example.py 中加入:

    @botcmd(split_args_with=None)
    def who_are_you(self, msg, args):
       return "you are " + args[0]

这一个比上面的稍微复杂一些:

  1. botcmd 的 split_args_with 代表拆分参数
  2. 函数中的下划线,代表子命令,输入时可以使用!who are you的形式
  3. 拆分参数的结果,以数组形式保存在 args 中。

修改存盘之后,使用!restart命令重启 errbot。输入!who are you ali,会看到回显内容:you are ali

源代码

Dockerfile

FROM alpine
COPY prepare.sh /usr/local/bin
ENV CLIENT_VER=">=3.0.0,<4.0.0"
RUN /usr/local/bin/prepare.sh
WORKDIR /errbot
VOLUME ["/errbot"]
CMD ["/usr/local/bin/entry.sh"]

prepare.sh

#!/bin/sh
set -xe
env
apk update
apk upgrade
apk add python3
apk add python3-dev musl-dev gcc libffi-dev openssl-dev
pip3 install errbot
pip3 install "kubernetes$CLIENT_VER"
pip3 install sleekxmpp pyasn1 pyasn1-modules irc hypchat \
  slackclient python-telegram-bot prometheus_client

apk del musl-dev gcc libffi-dev --purge

cat >> /usr/local/bin/entry.sh << EOF
#!/bin/sh
if [ ! -f /errbot/config.py ]; then
    errbot --init
fi
errbot
EOF

chmod a+x /usr/local/bin/entry.sh
Avatar
崔秀龙

简单,是大师的责任;我们凡夫俗子,能做到清楚就很不容易了。

comments powered by Disqus
下一页
上一页