摘要:讓我們創(chuàng)建一個(gè)聊天機(jī)器人來(lái)協(xié)助網(wǎng)絡(luò)運(yùn)營(yíng)。確保從聊天機(jī)器人不是來(lái)自任何真實(shí)用戶發(fā)送的任何消息再次不作為回復(fù)發(fā)回。
創(chuàng)建聊天機(jī)器人以協(xié)助網(wǎng)絡(luò)操作
來(lái)源 | 愿碼(ChainDesk.CN)內(nèi)容編輯
愿碼Slogan | 連接每個(gè)程序員的故事
網(wǎng)站 | http://chaindesk.cn
愿碼愿景 | 打造全學(xué)科IT系統(tǒng)免費(fèi)課程,助力小白用戶、初級(jí)工程師0成本免費(fèi)系統(tǒng)學(xué)習(xí)、低成本進(jìn)階,幫助BAT一線資深工程師成長(zhǎng)并利用自身優(yōu)勢(shì)創(chuàng)造睡后收入。
官方公眾號(hào) | 愿碼 | 愿碼服務(wù)號(hào) | 區(qū)塊鏈部落
免費(fèi)加入愿碼全思維工程師社群 | 任一公眾號(hào)回復(fù)“愿碼”兩個(gè)字獲取入群二維碼
本文閱讀時(shí)長(zhǎng):11min
在本文中,我們將了解如何利用聊天機(jī)器人來(lái)協(xié)助網(wǎng)絡(luò)操作。隨著我們向智能化運(yùn)營(yíng)邁進(jìn),另一個(gè)需要關(guān)注的領(lǐng)域是移動(dòng)性。有一個(gè)腳本可以執(zhí)行配置,修復(fù)甚至故障排除,但它仍然需要存在來(lái)監(jiān)視,啟動(dòng)甚至執(zhí)行這些程序或腳本。
諾基亞的MIKA是操作人員可以用來(lái)進(jìn)行網(wǎng)絡(luò)故障排除和修復(fù)的聊天機(jī)器人的一個(gè)很好的例子。根據(jù)諾基亞的博客,MIKA根據(jù)此單個(gè)網(wǎng)絡(luò)的實(shí)際情況響應(yīng)警報(bào)優(yōu)先級(jí)信息,并將當(dāng)前情況與此網(wǎng)絡(luò)及其他網(wǎng)絡(luò)過(guò)去事件的整個(gè)服務(wù)歷史進(jìn)行比較,以確定當(dāng)前網(wǎng)絡(luò)的最佳解決方案。
讓我們創(chuàng)建一個(gè)聊天機(jī)器人來(lái)協(xié)助網(wǎng)絡(luò)運(yùn)營(yíng)。對(duì)于這個(gè)用例,我們將使用廣泛使用的聊天應(yīng)用程序Slack。參考Splunk的智能數(shù)據(jù)分析功能,我們會(huì)看到一些用戶聊天與聊天機(jī)器人的交互,以獲得對(duì)環(huán)境的一些了解。
當(dāng)我們部署了我們的Web框架時(shí),我們將利用相同的框架與Slack聊天機(jī)器人進(jìn)行交互,而后者又將與Splunk進(jìn)行交互。它還可以直接與網(wǎng)絡(luò)設(shè)備交互,因此我們可以啟動(dòng)一些復(fù)雜的聊天,例如在需要時(shí)從Slack重啟路由器。這最終為工程師提供了移動(dòng)性,他可以從任何地方(甚至是手機(jī))處理任務(wù),而不必綁定到某個(gè)位置或辦公室。
要?jiǎng)?chuàng)建聊天機(jī)器人,以下是基本步驟:
在Slack上創(chuàng)建一個(gè)工作區(qū)(或帳戶):
在工作區(qū)中創(chuàng)建一個(gè)應(yīng)用程序(在我們的例子中,我們創(chuàng)建了一個(gè)名為的應(yīng)用程序mybot):
以下是有關(guān)應(yīng)用程序的基本信息(應(yīng)用程序ID和客戶端ID可以與唯一標(biāo)識(shí)此應(yīng)用程序的其他信息一起使用):
為此應(yīng)用程序添加bot功能:
添加事件訂閱并映射到將要發(fā)布消息的外部API。事件訂閱是指某人在聊天中鍵入對(duì)聊天機(jī)器人的引用,然后將使用此聊天機(jī)器人與聊天中鍵入的數(shù)據(jù)調(diào)用哪個(gè)API:
在這里,關(guān)鍵的一步是,一旦我們輸入接受聊天消息的URL,就需要從Slack驗(yàn)證特定的URL。驗(yàn)證涉及API端點(diǎn)將相同的響應(yīng)作為從Slack發(fā)送到該端點(diǎn)的字符串或JSON發(fā)回。如果我們收到相同的響應(yīng),Slack確認(rèn)端點(diǎn)是可信的并將其標(biāo)記為已驗(yàn)證。這是一次性過(guò)程,API URL中的任何更改都將導(dǎo)致重復(fù)此步驟。
以下是Ops API框架中的 Python代碼,它響應(yīng)此特定查詢:
import falcon import json def on_get(self,req,resp): # Handles GET request resp.status=falcon.HTTP_200 # Default status resp.body=json.dumps({"Server is Up!"}) def on_post(self,req,resp): # Handles POST Request print("In post") data=req.bounded_stream.read() try: # Authenticating end point to Slack data=json.loads(data)["challenge"] # Default status resp.status=falcon.HTTP_200 # Send challenge string back as response resp.body=data except: # URL already verified resp.status=falcon.HTTP_200 resp.body=""
這將驗(yàn)證,如果從Slack發(fā)送質(zhì)詢,它將回復(fù)相同的質(zhì)詢值,確認(rèn)它是Slack通道發(fā)送聊天數(shù)據(jù)的正確端點(diǎn)。
將此應(yīng)用程序(或聊天機(jī)器人)安裝到任何渠道(這類似于在群聊中添加用戶):
響應(yīng)特定聊天消息的核心API框架代碼執(zhí)行以下操作:
· 確認(rèn)發(fā)送給Slack的任何帖子都會(huì)200在三秒內(nèi)響應(yīng)。如果沒有這樣做,Slack報(bào)告說(shuō): endpoint not reachable。
· 確保從聊天機(jī)器人(不是來(lái)自任何真實(shí)用戶)發(fā)送的任何消息再次不作為回復(fù)發(fā)回。這可以創(chuàng)建一個(gè)循環(huán),因?yàn)閺牧奶鞕C(jī)器人發(fā)送的消息將被視為Slack聊天中的新消息,并且它將再次發(fā)送到URL。這最終會(huì)使聊天無(wú)法使用,從而導(dǎo)致聊天中出現(xiàn)重復(fù)的消息。
· 使用將被發(fā)送回Slack的令牌對(duì)響應(yīng)進(jìn)行身份驗(yàn)證,以確保來(lái)自Slack的響應(yīng)來(lái)自經(jīng)過(guò)身份驗(yàn)證的源。
代碼如下:
import falcon import json import requests import base64 from splunkquery import run from splunk_alexa import alexa from channel import channel_connect,set_data class Bot_BECJ82A3V(): def on_get(self,req,resp): # Handles GET request resp.status=falcon.HTTP_200 # Default status resp.body=json.dumps({"Server is Up!"}) def on_post(self,req,resp): # Handles POST Request print("In post") data=req.bounded_stream.read() try: bot_id=json.loads(data)["event"]["bot_id"] if bot_id=="BECJ82A3V": print("Ignore message from same bot") resp.status=falcon.HTTP_200 resp.body="" return except: print("Life goes on. . .") try: # Authenticating end point to Slack data=json.loads(data)["challenge"] # Default status resp.status=falcon.HTTP_200 # Send challenge string back as response resp.body=data except: # URL already verified resp.status=falcon.HTTP_200 resp.body="" print(data) data=json.loads(data) #Get the channel and data information channel=data["event"]["channel"] text=data["event"]["text"] # Authenticate Agent to access Slack endpoint token="xoxp-xxxxxx" # Set parameters print(type(data)) print(text) set_data(channel,token,resp) # Process request and connect to slack channel channel_connect(text) return # falcon.API instance , callable from gunicorn app= falcon.API() # instantiate helloWorld class Bot3V=Bot_BECJ82A3V() # map URL to helloWorld class app.add_route("/slack",Bot3V)
執(zhí)行頻道交互響應(yīng):此代碼負(fù)責(zé)在聊天頻道中解釋使用chat-bot執(zhí)行的特定聊天。此外,這將通過(guò)回復(fù),特定用戶或通道ID以及對(duì)Slack API的身份驗(yàn)證令牌進(jìn)行響應(yīng),這確保了消息或回復(fù)Slack聊天的消息顯示在特定頻道上,從它發(fā)起的位置。作為示例,我們將使用聊天來(lái)加密或解密特定值。
例如,如果我們寫encrypt username[:]password,它將返回帶有base64值的加密字符串。
類似地,如果我們寫,聊天機(jī)器人將在解密編碼的字符串后返回。decrypt代碼如下:
import json import requests import base64 from splunk_alexa import alexa channl="" token="" resp="" def set_data(Channel,Token,Response): global channl,token,resp channl=Channel token=Token resp=Response def send_data(text): global channl,token,res print(channl) resp = requests.post("https://slack.com/api/chat.postMessage",data="{"channel":""+channl+"","text":""+text+""}",headers={"Content-type": "application/json","Authorization": "Bearer "+token},verify=False) def channel_connect(text): global channl,token,resp try: print(text) arg=text.split(" ") print(str(arg)) path=arg[0].lower() print(path in ["decode","encode"]) if path in ["decode","encode"]: print("deecode api") else: result=alexa(arg,resp) text="" try: for i in result: print(i) print(str(i.values())) for j in i.values(): print(j) text=text+" "+j #print(j) if text=="" or text==None: text="None" send_data(text) return except: text="None" send_data(text) return decode=arg[1] except: print("Please enter a string to decode") text=" argument cannot be empty" send_data(text) return deencode(arg,text) def deencode(arg,text): global channl,token,resp decode=arg[1] if arg[1]=="--help": #print("Sinput") text="encode/decode " send_data(text) return if arg[0].lower()=="encode": encoded=base64.b64encode(str.encode(decode)) if "[:]" in decode: text="Encoded string: "+encoded.decode("utf-8") send_data(text) return else: text="sample string format username[:]password" send_data(text) return try: creds=base64.b64decode(decode) creds=creds.decode("utf-8") except: print("problem while decoding String") text="Error decoding the string. Check your encoded string." send_data(text) return if "[:]" in str(creds): print("[:] substring exists in the decoded base64 credentials") # split based on the first match of "[:]" credentials = str(creds).split("[:]",1) username = str(credentials[0]) password = str(credentials[1]) status = "success" else: text="encoded string is not in standard format, use username[:]password" send_data(text) print("the encoded base64 is not in standard format username[:]password") username = "Invalid" password = "Invalid" status = "failed" temp_dict = {} temp_dict["output"] = {"username":username,"password":password} temp_dict["status"] = status temp_dict["identifier"] = "" temp_dict["type"] = "" #result.append(temp_dict) print(temp_dict) text=" "+username+" "+password send_data(text) print(resp.text) print(resp.status_code) return
此代碼查詢Splunk實(shí)例以查找與聊天機(jī)器人的特定聊天。聊天會(huì)要求任何Loopback45當(dāng)前關(guān)閉的管理界面()。另外,在聊天中,用戶可以詢問(wèn)管理接口所在的所有路由器up。此英語(yǔ)響應(yīng)將轉(zhuǎn)換為Splunk查詢,并根據(jù)Splunk的響應(yīng)將狀態(tài)返回到Slack聊天。
讓我們看看執(zhí)行動(dòng)作來(lái)響應(yīng)結(jié)果的代碼,對(duì)Slack聊天:
from splunkquery import run def alexa(data,resp): try: string=data.split(" ") except: string=data search=" ".join(string[0:-1]) param=string[-1] print("param"+param) match_dict={0:"routers management interface",1:"routers management loopback"} for no in range(2): print(match_dict[no].split(" ")) print(search.split(" ")) test=list(map(lambda x:x in search.split(" "),match_dict[no].split(" "))) print(test) print(no) if False in test: pass else: if no in [0,1]: if param.lower()=="up": query="search%20index%3D%22main%22%20earliest%3D0%20%7C%20dedup%20interface_name%2Crouter_name%20%7C%20where%20interface_name%3D%22Loopback45%22%20%20and%20interface_status%3D%22up%22%20%7C%20table%20router_name" elif param.lower()=="down": query="search%20index%3D%22main%22%20earliest%3D0%20%7C%20dedup%20interface_name%2Crouter_name%20%7C%20where%20interface_name%3D%22Loopback45%22%20%20and%20interface_status%21%3D%22up%22%20%7C%20table%20router_name" else: return "None" result=run(query,resp) return result
以下Splunk查詢獲取狀態(tài):
· 對(duì)于UP接口:查詢?nèi)缦拢?/p>
index="main" earliest=0 | dedup interface_name,router_name | where interface_name="Loopback45" and interface_status="up" | table router_name
· 對(duì)于DOWN接口(除了以外的任何狀態(tài)):查詢?nèi)缦拢?/p>
index="main" earliest=0 | dedup interface_name,router_name | where interface_name="Loopback45" and interface_status!="up" | table router_name
讓我們看看聊天機(jī)器人聊天的最終結(jié)果以及根據(jù)聊天記錄發(fā)回的響應(yīng)。
編碼/解碼示例如下:
正如我們?cè)谶@里看到的,我們發(fā)送了一條encode abhishek[:]password123 消息聊天。此聊天作為POST請(qǐng)求發(fā)送到API,后者又將其加密到base64并使用添加的單詞作為回復(fù)。在下一個(gè)聊天中,我們使用decode選項(xiàng)傳遞相同的字符串。這會(huì)通過(guò)解碼來(lái)自API函數(shù)的信息進(jìn)行響應(yīng),并使用用戶名和密碼回復(fù)Slack聊天。Encoded string: abhishekpassword123
讓我們看一下Splunk查詢聊天的示例:
在此查詢中,我們已關(guān)閉 Loopback45 接口rtr1。在我們通過(guò)Python腳本計(jì)劃發(fā)現(xiàn)這些接口的過(guò)程中 ,數(shù)據(jù)現(xiàn)在位于Splunk中。當(dāng)查詢哪個(gè)管理接口(Loopback45)關(guān)閉時(shí),它將回復(fù)rtr1。松弛的聊天,On which routers the management interface is down會(huì)將此傳遞給API,在收到此有效負(fù)載后,它將運(yùn)行Splunk查詢以獲取統(tǒng)計(jì)信息。返回值(在本例中為rtr1)將作為聊天中的響應(yīng)返回。
類似地,中,反向查詢On which routers the management interface is up,將查詢的Splunk和最終共享回響應(yīng)rtr2,rtr3和rtr4(因?yàn)樗羞@些路由器接口是UP)。
可以擴(kuò)展此聊天用例,以確保使用簡(jiǎn)單聊天可以進(jìn)行完整的端到端故障排除。可以使用各種后端功能構(gòu)建大量案例,從問(wèn)題的基本識(shí)別到復(fù)雜任務(wù),例如基于已識(shí)別情況的補(bǔ)救。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/43574.html
摘要:能不能省掉這些煩瑣的步驟,讓開發(fā)人員自己完成呢現(xiàn)在好了,你可以用和把聊天機(jī)器人接入微信工具資源掘金今晚看了個(gè)電影,回得有點(diǎn)遲。 小花貓-網(wǎng)頁(yè)聊天機(jī)器人 - 前端 - 掘金 基于圖靈機(jī)器人API的網(wǎng)頁(yè)聊天機(jī)器人,輸入二維碼+你要說(shuō)的話有驚喜哦~~~(菜單中的功能尚未開發(fā)完成,玩玩聊天功能就好了~)代碼開源在https://github.com/ColorfulCa... 了~... (英...
閱讀 3216·2021-11-23 09:51
閱讀 3558·2021-11-09 09:46
閱讀 3655·2021-11-09 09:45
閱讀 2938·2019-08-29 17:31
閱讀 1860·2019-08-26 13:39
閱讀 2715·2019-08-26 12:12
閱讀 3614·2019-08-26 12:08
閱讀 2235·2019-08-26 11:31