使用Slack和Hubot搭建自己的机器人

五一假期在微博上看到「湾区日报」用户发的「湾区日报是如何运作的?」,里面提到了他是如何使用Slack进行自动化的工作。
于是想着自己也搞一个自动化的机器人,本来想着使用微信公众号进行开发,但是苦于没有认证无法使用高级接口,遂作罢。

1. 在Slack上创建一个Bot帐号

进入Slack官网创建App页面

Build your own

机器人只给我们自己使用,点击右侧"Make a Custom Integration"链接创建。

Custom Integration

点击Bots链接。

Bots

给机器人起个名字,点击Add按钮创建。

Bots

创建完成后,页面上会显示API Token,形如xoxb-xxxx-xxxx-xxx这样,记录下来,后面会用到。

至此,Slack上的机器人帐号创建完毕。

2. 安装Hubot

npm install -g hubot coffee-script yo generator-hubot
mkdir -p /path/to/hubot # 指定hubot文件目录
cd /path/to/hubot
yo hubot # 安装hubot,执行后需要输入一些配置信息
npm install hubot-slack --save # 安装hubot-slack适配器

启动我们的Hubot。

HUBOT_SLACK_TOKEN=第一步里的API Token ./bin/hubot --adapter slack

启动完成后,你在Slack的页面上可以看到这个机器人上线了。

3. 自定义开发

这里我将Hubot接受到的Slack消息,直接转发到了我的cgi上。
在cgi上根据不同的消息做不同的处理,返回不同的数据。

在script目录下新建一个文件,后缀名为.coffee,代码如下。

module.exports = (robot) ->
    robot.listen(
        (message) ->
            message.user.name is "你的Slack用户名" #这里限制只对我的回复做响应
            robot.brain.set 'message', message.rawText
        (response) ->
            req = "data=" + JSON.stringify({
                message: robot.brain.get('message'),
            })  
            robot.http("http://test.com/api") # 改为你自己的接口地址
                .header('Content-Type: application/x-www-form-urlencoded;charset=utf-8')
                .post(req) (err, res, body) ->
                    if err 
                        response.reply "请求接口失败" 
                        robot.emit 'error', err, res 
                        return
                    if res.statusCode isnt 200 
                        response.reply "接口返回非200"
                        return
                    response.send body
    )

效果

参考资料

HUBOT DOCUMENTATION
hubot docs
hubot-scripting
Slack! Hubot! Github!

标签: slack, hubot

已有 3 条评论

  1. herrdu herrdu

    感谢分享。
    搭建过程不是很难,不熟练的情况下走了弯路,不知道是不是可以直接放到服务器上呢? 是不是可以同时搭建两个?是不是可以放到服务器上呢?

    1. Don Don

      我已经放到服务器上跑了~ :)
      多个应该也是可以的。

  2. Corbin Corbin

    想接入微信的话 有hubot-weixin/WeChat 脚本

添加新评论