之前兩個小文兒跟大家探討了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一樣的機器人來幫你完成大部分的事情。