之前两个小文儿跟大家探讨了what -- chatops是怎样一回子事和why -- chatops所带来的一系列益处,接下来我们就说说how -- 如何从零开始搭建一个chatops机器人。
上图是top3的三个opensource的chatbot framework,其中HU-BOT是GitHub最早开源的一个chatbot project,基于coffee script+nodejs编写。LITA借鉴了hubot的大部分功能并有一些创新,基于Ruby编写。Err是基于python编写的。
下面我们就开始做一个简单的chatops实践,首先要选择一个团队的IM工具,这里我们选择用slack. 其次选一个chatbot framework, 由于我个人对ruby的偏爱,所以我们选择LITA.
因为我一般选择在我自己的mac上编码,所以我选择手工安装,mac一般都自带的ruby 2.0,所以只需安装redis(LITA通过redis做持久化)和LITA就可以了。
1.开发环境搭建
a. 安装LITA, 文档在这里https://docs.lita.io/getting-started/installation/
b. 安装redis看这里 https://redis.io/download
手动安装LITA键入sudo gem install lita,然后用lita help来验证是否安装成功,如果得到如下结果就说明成功了。
2. 创建每一个Lita实例
lita new helloword 创建最一个lita实例
3. 第一个handler
进到helloworld那个目录下,创建一个文件,这个例子中我们把他命名成hello.rb, 如下
解释一下这个handler, “route(/^sayhi/, :hello)”是lita的一条路由,可以理解成lita的监听规则,lita会用"^sayhi"这个正择表达式去匹配address给lita的消息,一经匹配成功lita就会跑对应的方法hello。"response"可以把他理解成chat的上下文切入工具,可以通过response回复一些信息。
4.然后在lita_config.rb中引入hello.rb
在lita_config.rb中加入一行,require './hello'
接下来就在shell环境下小试一下牛刀,打开lita_config.rb配置lita的adapter为shell(默认)
在终端到helloworld目录下键入lita start来启动lita,之后键入Lita sayhi来验证我们添加的第一个功能sayhi. 你可以看到我们给lita一个sayhi指令,然后lita给我们回复了“hi, this is our first chatbot, welcome here!”,如果你也得到如下结果的话,那么恭喜你有了一个好的开始!
slack做为adapter
首先要在团队的slack中申请一个lita的token -- 到https://your_team.slack.com/apps申请lita应用,如果你所在的组织没有审计slack app使用的话,会很顺利的申请到一个lita。打开刚刚申请 的lita应用,可以看到如下图所示的api toke
然后回支终端,到之前创建的helloworld目录下,打开lita_config.rb,将adapter设置为slack并添加token,如下图所示(请用自己的token来替换下图的"xxx...")
添加gem"lita-slack"到Gemfile中,通过bundle install命令安装相关包之后就是见证奇迹的时刻了
lita start
确认启动之后,到slack的channel中将刚才我们启动的lita添加到channel中,接下来就可以和他对话了
到此我们已经创建了第一个chatbot, 很简单,对吗?虽然只提供了一个简单的功能,但是可以无限扩展的,这篇小文的目的是给大家一个简单的指引,从而可以快速的搭起一个bot, 至于bot的功能,我认为只要你敢想敢做,是没有什么不可能的(也来一碗鸡汤,不过这是事实:))。
其实chatbot是一个很了不起的的集成工具,要以将任意系统集成到bot中,这样就可以实现多个系统的自由,快速的协作从而提高工作效率。
结合之前两篇文章,针对chatops已经讨论了what, why and how, 希望大家有兴趣的话可以发散自己的思维,把chatops应用到工作和生活中。由于最近比较忙,所以这次更新的比较慢,不过答应大家的事情搞完了,松了口气!之后会看情况不定期讨论一些security或应用场景相关的实践,大家也可以加我wechat交流。
最后,chatops的世界很多彩绚丽,相信如果你愿意付出时间,一定可以做出一个像jarvis一样的机器人来帮你完成大部分的事情。