- 适配微信,集成Hubot
- 目标
- 一次登录,任何地方/时间/场合运行。
- 让Hubot给微信的用户提供方便与快捷的服务。
- 与公众号不一样。公众号的缺点: 不在微信起群当中,任何与公众号的互动,其他人看不见。 Hubot是一个具有真实微信号的机器人,其中的一大功能就是娱乐大众。独乐乐不如众乐乐。
- 微信网页版的基本功能
- 自动回复到微信群
- 可以回复多媒体信息(图片,动图,音乐)到微信群
- 自动回复某微信联系人
- 自动发送Hubot在线状态给维护者的微信
- 提供了foreverjs的起停脚本,方便监控Hubot的进程运行状态以及出问题的自动重启。
- 提供了一系列的后端运行脚本
- 集成 jenkins
- 集成图灵机器人 turing robot
- 一系列的百度api商店的查询接口集成
- 首先,你需要给机器人注册一个微信号。当然用你自己的也可以。
- 手机端:Hubot的微信要加到微信群里面。这样Hubot会监听群的信息,自动回复。
- 手机端:Hubot的微信要添加该微信群或联系人到你的联系人列表。
-
Hubot-weixin适配器提供了一个config.yaml文件,用来配置你的适配器,大部分配置项用于启动时登录所用。
-
众所周知,目前微信网页版的登录是通过扫描二维码的方式。目前这部分工作需要用户手工来做。
- 用chrome或者firefox的调试模式,扫描微信的二维码登录网页版一次。
- 在调试模式下,从webwxinit api 抓取以下数据
- header
- cookie
- BaseRequest
- Uin
- Sid
- Skey
- DeviceId
- 抓取到的数据填到config.yaml对应的配置项。
- 注意: 配置项里面有以下baseUrl的配置。你要根据Hubot登录的最终Url来配置。 因为微信的服务器对登录的微信号有分流。目前主要在wx或wx2上,媒体上传的有分file/file2。
-
maintainerName
- 该配置项用于配置运维Hubot的维护者的微信名称。该维护者必须要在Hubot的微信的联系人当中(手机端操作)。
- 配置ok后。Hubot会按照config.yaml中reportHealthInterval配置项设置的时间,定时上报在线状态给维护者。
-
webWxSyncInterval
- 该配置项用于定时去微信服务器获取Hubot微信所收到的微信。
- 默认值: 1500 毫秒,1.5秒
-
syncCheckInterval
- 该配置项用于配置定时发送心跳信息到微信服务器
- 默认值: 为了和目前微信网页版的行为保持一致,设置为30秒
-
listenOnAllGroups
- 默认值: true. Hubot会监听所有在它的联系人列表里面的微信群。
- 配置为false时,Hubot会按照配置项listenGroupNameList列表里面的微信群的名称进行监听与自动回复。
-
listenGroupNameList
- 该配置项用于Hubot只监听某些微信群。
-
其他配置项:暂时不累赘多说。应该知其名知其意的。细节可以看代码。
docker pull kasperdeng/hubot-weixin
- 镜像大学 83M,基于alpine linux
- 请在主机(host)上准备好以下配置文件
- config.yaml 和你的hubot登录微信的信息(cookie, Uin, SKey, deviceId)
- 在docker模式下,请配置
logToFile: true
以及wxLogPath: "/root/hubot/wxhubot.log"
- 比如
/home/kasper/dockerHubot/config.yaml
- 在docker模式下,请配置
- 存放你的脚本的目录
- 比如:
/home/kasper/dockerHubot/scripts
- 比如:
- config.yaml 和你的hubot登录微信的信息(cookie, Uin, SKey, deviceId)
- 启动命令例子如下, 通过
-v
(volume) 选项映射主机上的配置文件以及log文件docker run -d -v /home/kasper/dockerHubot/scripts:/root/hubot/scripts -v /home/kasper/dockerHubot/config.yaml:/root/hubot/node_modules/hubot-weixin/config.yaml -v /home/kasper/dockerHubot/wxhubot.log:/root/hubot/wxhubot.log kasperdeng/hubot-weixin
- 用该命令进入 docker 运行实例去调试.
docker run -it -v /home/kasper/dockerHubot/scripts:/root/hubot/scripts -v /home/kasper/dockerHubot/config.yaml:/root/hubot/node_modules/hubot-weixin/config.yaml -v /home/kasper/dockerHubot/wxhubot.log:/root/hubot/wxhubot.log kasperdeng/hubot-weixin /bin/sh
- 关于该镜像
kasperdeng/hubot-weixin
,请参考其Dockfile
- 首先,你肯定是要有hubot的(这个不在该文档说明了。请参考Hubot官网)
- 把
hubot-weixin
作为依赖加到hubot的package.json - 在你的Hubot的目录下,运行
npm install
- 启动hubot:
bin/hubot -a weixin
- 从当前github下载hubot-weixin的源码到指定目录
- 在Hubot的node_modules的目录下创建软链接到你的hubot-weixin目录
npm link <your hubot-weixin dir>
- 启动hubot:
bin/hubot -a weixin
-
遇到的问题
- 微信二维码扫描登录
- 没有微信官方的api的说明文档
-
登录的解决方案
- 手动用Hubot的微信号登录一次微信的网页版,并抓取所需要的信息:比如cookie,Uin, Sid,SKey
- 把抓取的信息配置到config.yaml
- Hubot启动后,Hubot登录的网页版可以直接关掉(关窗口,非logout)。Hubot会定时发心跳给微信服务器, 微信服务器会认为Hubot一直在登录网页版的。
-
如何解决问题
- 用chrome/firefox的调试模式,分析微信网页版的api调用
- 在终端中尝试用curl去试用微信网页版的api
- 分析微信api中各个参数的含义与用法
- 分析网页版的wxApp.js
-
注意事项(必看):
- Hubot在手机端的微信app最好在线,原因:微信服务器确认的网页版登录后,通过心跳检查Hubot是否一直在网页版
- 但是微信服务器大概过了两三天后,还会检查网页版和手机端app的一致性。如果手机端不在线,但网页版却一直在线,微信是不让用网页版的,但你的手机端重新登录后,Hubot还是马上能用,并收到信息的。
- 请参考README吧,呵呵
- Getting Started With Hubot on Windows/Unix-Like
- Backlog 管理
- 版本控制
- git
- IDE
- Sublime
- or WebStorm/Vim
- 开发环境
- Nodejs 和 npm
npm install
获取所有依赖的node模块.- 墙内的话,请添加选项
--registry=https://registry.npm.taobao.org
- 墙内的话,请添加选项
- 编程语言
- coffeeScript
- coffeelint 检查coffeescript代码的风格和bugs
- 请参考本repo的script目录的脚本
- Hubot后端脚本中的
msg
提供了http异步获取api数据的功能的
- 可以通过SHELL adapter先尝试功能,再集成到Hubot
-
bumblebee team
- 目前并没有太多新的功能和需求。主要集中在后端脚本的开发与idea的收集。
- 单元测试