轉(zhuǎn)自:segmentfault.com
Zulip是什么
Zulip是移動和桌面辦公聊天解決方案開發(fā)商
一個強大的群組聊天軟件
目前已被Dropbox收購并完全開源
(github:https://github.com/zulip/zulip)
就Zulip而言,該公司對消息的處理專注于會話,而不僅僅是基本的“聊天”。因此,消息流中包含主題和線程式回復(fù),每個主題可以包含多個細分主題。
例如,在Zulip網(wǎng)站的一張截圖中,“工程”消息流中可以包含“文檔”、“新招聘”和“WebKit漏洞”等細分主題。
示例如下:
Zulip表示,這一功能將幫助用戶更好地找到對他們有意義的會話。
其他功能還包括:
強大而快速的搜索,以及能吸引開發(fā)者興趣的“極客”功能。如鍵盤快捷鍵、代碼高亮、應(yīng)用程序接口(API),以及與Trac、Nagios、GitHub和Jenkins的整合等。
并且,Zulip還提供了標準的消息/聊天應(yīng)用功能集合,其中包括拖動上傳文件、粘貼圖片、群聊、聲音通知、未收到消息的電子郵件通知,以及虛擬表情等。
最重要的一點,zulip還提供了聊天機器人接口。
一、我們用Zulip來做什么
在日常工作中,對于一些非技術(shù)的小伙伴們,由于需要查詢某業(yè)務(wù)數(shù)據(jù)結(jié)果之類,只有通過攻城獅臨時生成一大串?dāng)?shù)據(jù),或者攻城獅提供調(diào)用某個API接口URL鏈接,直接在網(wǎng)頁瀏覽器中查看數(shù)據(jù)結(jié)果。如此一來,攻城獅還要花時間教小白如何看數(shù)據(jù)。
而且,如果API接口URL中涉及用戶授權(quán)認證,就容易暴露內(nèi)部授權(quán)碼,得不償失了。
所以我們希望可以通過聊天機器人的開發(fā),把這些非技術(shù)人員需要查詢的需求集成進去,然后智能解析他們發(fā)送的消息,并以友好方式自動答復(fù)數(shù)據(jù)結(jié)果。
舉個栗子。
如果我們需要使用豈安Red.Q(業(yè)務(wù)風(fēng)險情報系統(tǒng))服務(wù)查詢一些手機號碼或者IP地址是否有風(fēng)險,并給機器人發(fā)送消息(我們約定多個數(shù)據(jù)以逗號隔離)
消息如下:
211.97.131.210,58.243.254.109,13136482589, 20160909
查詢結(jié)果:
13136482589:87.4,臨時號碼、收碼平臺、異常狀態(tài)
211.97.131.210:50.6,組織出口、爬蟲
58.243.254.109:81.9,vps服務(wù)器、組織出口、爬蟲
其他:
20160909:無效內(nèi)容(不符合有效ip和手機號碼基本格式)
二、如何實現(xiàn)
- Zulip安裝步驟這里略。安裝好并登陸zulip系統(tǒng),我們先在帳號設(shè)置里添加一個機器人redq-bot@bigsec.com,系統(tǒng)會生成對應(yīng)的API Key。
打開zulip系統(tǒng)url(https://zulip.local/api),系統(tǒng)提供了相關(guān)API的使用說明,python說明如下:
Python API
#!/usr/bin/env python
import zulip
import sys
# Keyword arguments 'email' and 'api_key' are not required if you are using ~/.zuliprc
client = zulip.Client(email="*********************",
api_key="********************",
site=https://zulip.local/api )
# Send a stream message
client.send_message({
"type": "stream",
"to": "Denmark",
"subject": "Castle",
"content": "Something is rotten in the state of Denmark."
})
# Send a private message
client.send_message({
"type": "private",
"to": "hamlet@example.com",
"content": "I come not, friends, to steal away your hearts."
})
# Print each message the user receives
# This is a blocking call that will run forever
client.call_on_each_message(lambda msg: sys.stdout.write(str(msg) + "\n"))
# Print every event relevant to the user
# This is a blocking call that will run forever
# This will never be reached unless you comment out the previous line
client.call_on_each_event(lambda msg: sys.stdout.write(str(msg) + "\n”))
Red.Q案例里:
- 通過消息事件回調(diào)函數(shù)client.call_on_each_message(redq)解析用戶發(fā)送給機器人的消息內(nèi)容返回每個匹配內(nèi)容的Red.Q服務(wù)API結(jié)果:
msgsend
def msgsend(sender, msg):
client.send_message({
"type": "private",
"to": sender,
"content": msg
})
當(dāng)腳本編寫完畢后,需要單獨去運行在某臺服務(wù)器上,該服務(wù)器需要與zulip服務(wù)器的api接口通信,一般為443或者80端口,交互流程如下:
此時,在zulip的Web界面找到此機器人并發(fā)送相關(guān)消息就可以愉快地進行聊天啦。
今年第六屆大會PyConChina2016,由PyChina.org發(fā)起,CPyUG/TopGeek 等社區(qū)協(xié)辦,將在2016年9月10日(上海)9月25日(深圳)10月15日(北京、杭州)地舉辦的針對Python開發(fā)者所舉辦的最盛大和權(quán)威的Python相關(guān)技術(shù)會議,由PyChina社區(qū)主辦,致力于推動各類Python相關(guān)的技術(shù)在互聯(lián)網(wǎng)、企業(yè)應(yīng)用等領(lǐng)域的研發(fā)和應(yīng)用。
您可以點擊此處
了解更多詳情,或者掃描下圖二維碼: