Zulip聊天機器人Python開發

hey123 8年前發布 | 11K 次閱讀 Python Python開發

Zulip是什么

Zulip是移動和桌面辦公聊天解決方案開發商一個強大的群組聊天軟件

就Zulip而言,該公司對消息的處理專注于會話,而不僅僅是基本的“聊天”。因此,消息流中包含主題和線程式回復,每個主題可以包含多個細分主題。

例如,在Zulip網站的一張截圖中,“工程”消息流中可以包含“文檔”、“新招聘”和“WebKit漏洞”等細分主題。

示例如下:

Zulip表示,這一功能將幫助用戶更好地找到對他們有意義的會話。

其他功能還包括:

強大而快速的搜索,以及能吸引開發者興趣的“極客”功能。如鍵盤快捷鍵、代碼高亮、應用程序接口(API),以及與Trac、Nagios、GitHub和Jenkins的整合等。

并且,Zulip還提供了標準的消息/聊天應用功能集合,其中包括拖動上傳文件、粘貼圖片、群聊、聲音通知、未收到消息的電子郵件通知,以及虛擬表情等。

最重要的一點,zulip還提供了聊天機器人接口。

一、我們用Zulip來做什么

在日常工作中,對于一些非技術的小伙伴們,由于需要查詢某業務數據結果之類,只有通過攻城獅臨時生成一大串數據,或者攻城獅提供調用某個API接口URL鏈接,直接在網頁瀏覽器中查看數據結果。如此一來,攻城獅還要花時間教小白如何看數據。

而且,如果API接口URL中涉及用戶授權認證,就容易暴露內部授權碼,得不償失了。

所以我們希望可以通過聊天機器人的開發,把這些非技術人員需要查詢的需求集成進去,然后智能解析他們發送的消息,并以友好方式自動答復數據結果。

舉個栗子。

如果我們需要使用豈安Red.Q(業務風險情報系統)服務查詢一些手機號碼或者IP地址是否有風險,并給機器人發送消息(我們約定多個數據以逗號隔離)

消息如下:

211.97.131.210,58.243.254.109,13136482589, 20160909

查詢結果:

13136482589:87.4,臨時號碼、收碼平臺、異常狀態
211.97.131.210:50.6,組織出口、爬蟲
58.243.254.109:81.9,vps服務器、組織出口、爬蟲
其他: 
20160909:無效內容(不符合有效ip和手機號碼基本格式)

二、如何實現

  • Zulip安裝步驟這里略。

    安裝好并登陸zulip系統,我們先在帳號設置里添加一個機器人redq-bot@bigsec.com,系統會生成對應的API Key。

打開zulip系統url( https://zulip.local/api ),系統提供了相關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"))</code></pre>

Red.Q案例里:

  • 通過消息事件回調函數client.call_on_each_message(redq)解析用戶發送給機器人的消息內容

    返回每個匹配內容的Red.Q服務API結果:

msgsend
def msgsend(sender, msg):
      client.send_message({
                  "type": "private",
                  "to": sender,
                  "content": msg
                   })

當腳本編寫完畢后,需要單獨去運行在某臺服務器上,該服務器需要與zulip服務器的api接口通信,一般為443或者80端口,交互流程如下:

此時,在zulip的Web界面找到此機器人并發送相關消息就可以愉快地進行聊天啦。

 

來自:https://segmentfault.com/a/1190000006884976

 

 本文由用戶 hey123 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!