国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

創建聊天機器人以協助網絡操作

Eirunye / 1598人閱讀

摘要:讓我們創建一個聊天機器人來協助網絡運營。確保從聊天機器人不是來自任何真實用戶發送的任何消息再次不作為回復發回。

創建聊天機器人以協助網絡操作

來源 | 愿碼(ChainDesk.CN)內容編輯

愿碼Slogan | 連接每個程序員的故事

網站 | http://chaindesk.cn

愿碼愿景 | 打造全學科IT系統免費課程,助力小白用戶、初級工程師0成本免費系統學習、低成本進階,幫助BAT一線資深工程師成長并利用自身優勢創造睡后收入。

官方公眾號 | 愿碼 | 愿碼服務號 | 區塊鏈部落

免費加入愿碼全思維工程師社群 | 任一公眾號回復“愿碼”兩個字獲取入群二維碼


本文閱讀時長:11min

在本文中,我們將了解如何利用聊天機器人來協助網絡操作。隨著我們向智能化運營邁進,另一個需要關注的領域是移動性。有一個腳本可以執行配置,修復甚至故障排除,但它仍然需要存在來監視,啟動甚至執行這些程序或腳本。

諾基亞的MIKA是操作人員可以用來進行網絡故障排除和修復的聊天機器人的一個很好的例子。根據諾基亞的博客,MIKA根據此單個網絡的實際情況響應警報優先級信息,并將當前情況與此網絡及其他網絡過去事件的整個服務歷史進行比較,以確定當前網絡的最佳解決方案。

讓我們創建一個聊天機器人來協助網絡運營。對于這個用例,我們將使用廣泛使用的聊天應用程序Slack。參考Splunk的智能數據分析功能,我們會看到一些用戶聊天與聊天機器人的交互,以獲得對環境的一些了解。

當我們部署了我們的Web框架時,我們將利用相同的框架與Slack聊天機器人進行交互,而后者又將與Splunk進行交互。它還可以直接與網絡設備交互,因此我們可以啟動一些復雜的聊天,例如在需要時從Slack重啟路由器。這最終為工程師提供了移動性,他可以從任何地方(甚至是手機)處理任務,而不必綁定到某個位置或辦公室。

要創建聊天機器人,以下是基本步驟:

在Slack上創建一個工作區(或帳戶):

在工作區中創建一個應用程序(在我們的例子中,我們創建了一個名為的應用程序mybot):

以下是有關應用程序的基本信息(應用程序ID和客戶端ID可以與唯一標識此應用程序的其他信息一起使用):

為此應用程序添加bot功能:

添加事件訂閱并映射到將要發布消息的外部API。事件訂閱是指某人在聊天中鍵入對聊天機器人的引用,然后將使用此聊天機器人與聊天中鍵入的數據調用哪個API:

在這里,關鍵的一步是,一旦我們輸入接受聊天消息的URL,就需要從Slack驗證特定的URL。驗證涉及API端點將相同的響應作為從Slack發送到該端點的字符串或JSON發回。如果我們收到相同的響應,Slack確認端點是可信的并將其標記為已驗證。這是一次性過程,API URL中的任何更改都將導致重復此步驟。

以下是Ops API框架中的 Python代碼,它響應此特定查詢:

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=""

這將驗證,如果從Slack發送質詢,它將回復相同的質詢值,確認它是Slack通道發送聊天數據的正確端點。

將此應用程序(或聊天機器人)安裝到任何渠道(這類似于在群聊中添加用戶):

響應特定聊天消息的核心API框架代碼執行以下操作:

· 確認發送給Slack的任何帖子都會200在三秒內響應。如果沒有這樣做,Slack報告說: endpoint not reachable。

· 確保從聊天機器人(不是來自任何真實用戶)發送的任何消息再次不作為回復發回。這可以創建一個循環,因為從聊天機器人發送的消息將被視為Slack聊天中的新消息,并且它將再次發送到URL。這最終會使聊天無法使用,從而導致聊天中出現重復的消息。

· 使用將被發送回Slack的令牌對響應進行身份驗證,以確保來自Slack的響應來自經過身份驗證的源。

代碼如下:

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)

執行頻道交互響應:此代碼負責在聊天頻道中解釋使用chat-bot執行的特定聊天。此外,這將通過回復,特定用戶或通道ID以及對Slack API的身份驗證令牌進行響應,這確保了消息或回復Slack聊天的消息顯示在特定頻道上,從它發起的位置。作為示例,我們將使用聊天來加密或解密特定值。

例如,如果我們寫encrypt username[:]password,它將返回帶有base64值的加密字符串。

類似地,如果我們寫,聊天機器人將在解密編碼的字符串后返回。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實例以查找與聊天機器人的特定聊天。聊天會要求任何Loopback45當前關閉的管理界面()。另外,在聊天中,用戶可以詢問管理接口所在的所有路由器up。此英語響應將轉換為Splunk查詢,并根據Splunk的響應將狀態返回到Slack聊天。

讓我們看看執行動作來響應結果的代碼,對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查詢獲取狀態:

· 對于UP接口:查詢如下:

index="main" earliest=0 | dedup interface_name,router_name | where interface_name="Loopback45" and interface_status="up" | table router_name

· 對于DOWN接口(除了以外的任何狀態):查詢如下:

index="main" earliest=0 | dedup interface_name,router_name | where interface_name="Loopback45" and interface_status!="up" | table router_name

讓我們看看聊天機器人聊天的最終結果以及根據聊天記錄發回的響應。

編碼/解碼示例如下:

正如我們在這里看到的,我們發送了一條encode abhishek[:]password123 消息聊天。此聊天作為POST請求發送到API,后者又將其加密到base64并使用添加的單詞作為回復。在下一個聊天中,我們使用decode選項傳遞相同的字符串。這會通過解碼來自API函數的信息進行響應,并使用用戶名和密碼回復Slack聊天。Encoded string: abhishekpassword123

讓我們看一下Splunk查詢聊天的示例:

在此查詢中,我們已關閉 Loopback45 接口rtr1。在我們通過Python腳本計劃發現這些接口的過程中 ,數據現在位于Splunk中。當查詢哪個管理接口(Loopback45)關閉時,它將回復rtr1。松弛的聊天,On which routers the management interface is down會將此傳遞給API,在收到此有效負載后,它將運行Splunk查詢以獲取統計信息。返回值(在本例中為rtr1)將作為聊天中的響應返回。

類似地,中,反向查詢On which routers the management interface is up,將查詢的Splunk和最終共享回響應rtr2,rtr3和rtr4(因為所有這些路由器接口是UP)。

可以擴展此聊天用例,以確保使用簡單聊天可以進行完整的端到端故障排除。可以使用各種后端功能構建大量案例,從問題的基本識別到復雜任務,例如基于已識別情況的補救。

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/43574.html

相關文章

  • 來 DIY 個器人 - 收藏集 - 掘金

    摘要:能不能省掉這些煩瑣的步驟,讓開發人員自己完成呢現在好了,你可以用和把聊天機器人接入微信工具資源掘金今晚看了個電影,回得有點遲。 小花貓-網頁聊天機器人 - 前端 - 掘金 基于圖靈機器人API的網頁聊天機器人,輸入二維碼+你要說的話有驚喜哦~~~(菜單中的功能尚未開發完成,玩玩聊天功能就好了~)代碼開源在https://github.com/ColorfulCa... 了~... (英...

    mrli2016 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<