场景

对于技术人员来说,在聊天群里沟通技术问题是一个非常痛苦的事情。如果群里同时在讨论多个问题时,你一言我一语根本无法辨别是在回复哪一个问题?slack 完美的解决了这一痛点,每当一个用户在指定的 Slack channel 发出消息,Slack 便会创建一条新的 thread,用户所有的对话都在该 Thread 内部进行。这样便可以将问题区分开来。 hubot  机器人可以根据问题中的关键词匹配对应的处理人,并加入 SLA 机制,可以帮助快速解决问题。

安装 hubot

curl -sL https://rpm.nodesource.com/setup_10.x | sudo bash -
yum install nodejs -y
yum install npm -y
npm install -g yo generator-hubot
git clone git@gitlab.4pd.io:hurricane/4pd-slack.git
cd /4pd-slack
cd hubot
yo hubot && npm install hubot-slack --save
sed -i 's/"hubot-heroku-keepalive",//g' external-scripts.json
sed -i 's/"hubot-redis-brain",//g' external-scripts.json
rm hubot-scripts.json

开发 hubot 机器人

将写好的 nodejs 程序放在 scripts 目录下即可。
可以参考 https://www.npmjs.com/package/@slack/web-api

连接 hubot 和 slack

那么怎么和slack打通呢?其实也很简单,你只需要在slack上安装好hubot的插件,它会自动生成一个token,把这个token记下来,输入

env HUBOT_SLACK_TOKEN=xoxb-你的token ./bin/hubot --adapter slack

这时候hubot就启动起来,等待接收命令了。
创建启动脚本

#!/usr/bin/env bash
set -ex
#启动hubot nodejs程序
cd /app/slack/hubot && HUBOT_SLACK_TOKEN="xoxb-xxxxxx-1270720228165-HpAQnuHwNxfKv0oglKUWCm6w" bin/hubot --adapter slack > logs/hubot_$(date +"%Y-%m-%d").logs


为了方便运维,将程序集成在了 docker 镜像里,通过 entrypoint 实现容器启动时,自动执行 hubot 启动脚本

# 创建并启动容器
docker run -itd  -p 8003:8003 --name slack-hubot-oncall-2  -v /home/qiaolongbiao/slack:/app/slack -w "/app/slack" docker.4pd.io/base-image-for-slack:0.2 /bin/bash --entrypoint

# 代码更新
cd /home/qiaolongbiao/slack  && git pull