微信
手机版
网站地图

日向雏田,手把手教你创立谈天机器人来帮忙网络运营(附代码),粉红色的回忆

2019-04-12 09:12:20 投稿人 : admin 围观 : 255 次 0 评论
手把手教你创建谈天机器人来帮助网络运营(附代码)

作者:Melisha Dsouza

翻译:吴金笛

校正:国相洁

本文约3000字,主张阅览10+分钟。

本文是创建谈天机器人完成网络运营的简略教程。

在本教程中,咱们将了解怎么运用谈天机器人来帮助网络运营。跟着咱们向智能化运营跨进,另一个需求重视的范畴是移动性。用一个脚原本进行装备,修正乃至毛病检修是很好的,但它依然需求有人在场来监督,发动乃至履行这些程序或脚本。

Nokia’s MIKA 是一个很好的谈天机器人比如,操作人员能够用它来进行网络毛病扫除和修正。依据 No淮海西路55号kia’s blog,MIKA会依据此单个网络的实际状况给出一个警报优先级信息,并将当时的状况与该网络和其他网络曩昔事情的整个效劳前史进行比较,以承认当时问题的最佳解决方案。

Nokia’s MIKAhttps://networks.nokia.com/services/digital-assistant-as-a-serviceNokia’s bloghttps://www.nokia.com/blog/chatting-bots-home-work


让咱们创建一个谈天机器人来帮助网络运营。关于这个用例,咱们将运用一个被广泛运用的谈天应用程序Slack。参阅Splunk的智能数据剖析才能,咱们将看到一些用户与谈天机器人的互动,然后对环境有一些了解。

本教程摘自AbhishekRatan编撰的名为《Practical Network Automation – SecondEdition》的书。 这凡克猫童装本书将向您介绍网络自动化的根本概念,并帮助您进步你的数据中心的稳健性和安全性。

能够在GitHub中找到本教程的代码:

Github链接:https://github.com/赵清越陆铭PacktPublishing/Practical-Network-Automation-Second-Edition/tree/master/Chapter0


在咱们布置web结构时,咱们将运用相同的结构与Slack谈天机器人进行交互,后者又将与Splunk进行交互。它还能够直接与网络设备交互,所以咱们能够建议一些杂乱的谈天,例如在需求时从Slack重启路由器。这终究张二勇为工程师供给了移动性,工程师能够在任何地方(乃至是手机)处理使命,而不用被固定在某个地址或办公室。

要创建谈天机器人,以下是根本进程:

1. 在Slack上创建一个作业区(或帐户):


手把手教你创建谈天机器人来帮助网络运营(附代码)


2. 在你的作业区创建一个日向雏田,手把手教你创建谈天机器人来帮助网络运营(附代码),粉红色的回想应用程序(在咱们的比如中,咱们创建了一个叫做mybot的应用程序):



3. 以下是关于该应用程序的根本信息(App ID 和Client ID能够与仅有标识此应用程序的其他信息一同运用):



4. 为此应用程序增加bot功用:



5. 增加事情订阅并映射到即将发布音讯的外部API。

事情订阅是指某人在谈天中键入对谈天机器人的引证,然后运用该谈天机器日向雏田,手把手教你创建谈天机器人来帮助网络运营(附代码),粉红色的回想人与谈天中被输入的数据调用这个API:



这儿,一个要害的进程是,一旦咱们输入了承受谈天音讯的URL,就需求从Slack验证这个特定的URL。验证便是API端点以字符串或JSON的格局回来,与从Slack发送的呼应相同的呼应。假如咱们收到相同的呼应,Slack承认该端点是可信的并将其标记为已验证。这是一个一次性的进程,而且API URL中的任何更改都将导致此进程的重复。

以下是Ops API结构中呼应特定查询的Python代码:

1. import falcon 
2. import json
3. def on_get(self,req,resp):
4. # Handles GET request
5. resp.status=falcon.HTTP_200 # Default status
6. resp.body=json.dumps({"Server is Up!"})
7. def on_post(self,req,resp):
8. ca4529# Handles POST Request
9. print("In post")
10. data=req.bounded_stream.read()
11. try:
12. # Authenticating end point to Slack
13. data=json.loads(data)["challenge"]
14. # Default status
15. resp.status=falcon.HTTP_200
16. # Send challenge string back as response
17. resp.body=data
18. except:
19. # URL already verified
20. resp.status=falcon.HTTP_200
21. resp.body=""

这将验证,假如从Slack宣布一个”challenge”,它将回来lemonparty相同的”challenge”,这个值承认该端点是Slack频道发送谈天数据的正确端点。

6. 装置此应用程序(或谈天机器人)到任何频道(这类似于在群聊中增加用户):



呼应特定谈天信息的中心API结构代码履行以下操作:

  • 承认任何发送到Slack的信息在三秒内呼应200次。假如没有这样,Slack陈述:endpoint not reachable.
  • 保证任何从谈天机器人(不是来自任何实在用户)宣布的信息不作为回复信息再次被发回。这可能会形成循环,由于从谈天机器人发送的音讯将被视为Slack谈天中的新音讯,然后它将被再次发送到URL。这终究会使谈天无法运用,然后导致谈天中呈现重复的音讯。
  • 运用将被发送回Slack的令牌对呼应进行身份验证,以保证来自Slack的呼应来自经过身份验证的源。

代码如下:

1. import falcon 
2. import json
3. import requests
4. import base64
5. from splunkquery import run
6. from splunk_alexa import alexa
7. from channel import channel_connect,set_data
8. class Bot_BECJ82A3V():
9. def on_get(self,req,resp):
10. # Handles GET request
11. resp.status=falcon.HTTP_200 # Default status
12. resp.body=json.dumps({"Server is Up!"})
13. def on_post(self,req,resp):
14. # Handles POST Request
15. print("In post")
16. data=req.bounded_stream.read()
17. try:
18. bot_id=json.loads(data)["event"]["bot_id"]
19. if bot_id=="BECJ82A3V":
20. print("Ignore message from same bot")
21. resp.status=falcon.HTTP_200
22. resp.body=""
23. return
24. except:
25. print("Life goes on. . .")
26. try:
27. # Authenticating end point to Slack
28. data=json.loads(data)["challenge"]
29. #日向雏田,手把手教你创建谈天机器人来帮助网络运营(附代码),粉红色的回想 Def柯润东ault status
30. resp.status=falcon.HTTP_200
31. # Send challenge string back as response
32. resp.body=data
33. except:
34. # URL already verifi庙坝麻柳村ed
35. resp.stat日向雏田,手把手教你创建谈天机器人来帮助网络运营(附代码),粉红色的回想us=falcon.HTTP_200
36. resp.body=""
37. print(data)
38. data=json.loads(data)
39. #Get the channel and data information
40. channel=data["event"]["channel"]
41. text=data["event"]["text"]
42. # Authenticate Agent to access Slack endpoint
43. token="xoxp-xxxxxx"
44. # Set parameters
45. print(type(data))
46. print(text)
47. set_data(channel,token,resp)
48. # Process request and connect to slack channel
49. channel_connect(text)
50. return
51.# falcon.API instance , callable from gunicorn
52.app= falcon.API()
53.# instantiate helloWorld class
54.Bot3V=Bot_BECJ82A3V()
55.# map URL to helloWorld class
56.app.add_route("/slack",Bot3V)
  • 履行频道交互呼应


此代码解说谈天频道中运用chat-bot履行的特定谈天。此外,这将运用对特定用户或频道ID的呼应,以及对Slack API 的身份验证令牌进行呼应。

Slack API:https://slack.com/api/chat.postMessag


这保证Slack谈天的音讯或回复显现在其来源的特定频道上。作为示例,咱们将运用谈天对特定值进行加密或解密。

例如,假如咱们写入encrypt username[:]password,它将回来一个运用base64值加密的字符串。

类似地,假如咱们写入decrypt, 谈天机器人会回来一个加密字符串解密后的字符串。

代码如下:

1. import json 
2.日向雏田,手把手教你创建谈天机器人来帮助网络运营(附代码),粉红色的回想 import requests
3. import base64
4. from splunk_alexa import alexa
5. channl=""
6. token=""
7. resp=""
8. def set_data(Channel,Token,Response):
9. global channl,token,resp
10. channl=Channel
11. token=Token
12. resp=Response
13.def send_data(text):
14.global channl,token,res
15.print(channl)
16.resp = requests.post("https://slack.com/api/chat.postMessage",data='{"channel":"'+channl+'","text":"'+text+'"}',headers={"Content-type": "application/json","Authorization": "Bearer "+token},verify=False)
17.
18.def channel_connect(text):
19.global channl,token,resp
20.try:
21.print(text)
22.arg=text.split(' ')
23.print(str(arg))
24.path=arg[0].lower()
25.print(path in ["decode","e林宇宾ncode"])
26.if path in ["decode","encode"]:
27.print("deecode api")
28.else:
29.result=alexa(arg,resp)
30.text=""
31.try:
32.for i in result:
33.print(i)
34.print(str(i.values()))
35.for j in i.values():
36.print(j)
37.text=text+' '+j
38.蛇王难服侍#print(j)
39.if text=="" or text==None:
40.text="None"
41.send_data(text)
42.return
43.except:
44.text="None"
45.send_data(text)
46.return
47.decode=arg[1]
48.except:
49.print("Please enter a string to decode")
50.text=" argument cannot be empty"
51.send_data(text)
52.return
53.deencode(arg,text)
54.
55.def deencode(arg,text): fuliweb
56.global channl,token,resp
57.decode=arg[1]
58.if arg[1]=='--help':
59.#print("Sinput")
60.text="encode/decode "
61.send_data(text)
62.return
63.if arg[0].lower()=="encode":
64.encoded=base64.b64encode(str.encode(decode))
65.if '[:]' in de桃瘾社区code:
66.text="Encoded string: "+encoded.decode('utf-8')
67.send_data(text日向雏田,手把手教你创建谈天机器人来帮助网络运营(附代码),粉红色的回想)
68.return
69.else:
70.text="sample string f男人搞基ormat username[:]password"
71.send_data(text)
72.return
73.try:
74.creds=base64.b64decode(decode)
75.creds=creds.decode("utf-8")
76.except:
77.print("problem while decoding String")
78.text="Error decoding the string. Check your encoded string."
79.send_data(text)
80.return
81.if '[:]' in str(creds):
82.print("[:] substring exists in the decoded base64 credentials")
83.# split based on the first match of "[:]"
84.credentials = str(creds).split('[:]',1)
85.username = str(credentials[0])
86.password = str(credentials[1])
87.status = 'success'
88.else:
89.text="encoded string is not in standard format, use username[:]password"
90.send_data(text)
91.print("the encoded base64 is not in standard format username[:]password")
92.username = "Invalid"
93.password = "Invalid"
94.status = 'failed'
95.temp_dict = {}
96.temp_dict['output'] = {'username':username,'password':password}
97.temp_dict['status'] = status
98.temp_dict['identifier'] = ""
99.temp_dict['type'] = ""
100.#result.append(temp_dict) 戏精训练营
101.print(temp_dict)
102.text=" "+username+" "+password
103.send_data(text)
104.print(resp.text)
105.print(resp.status_code)
106.return

此代码查询Splunk实例以查找与谈天机器人的特定谈天。谈天会恳求当时封闭的任何一个办理接口(Loopback45)。 此外,在谈天中,用户能够查询一切具有up办理接口的路由器。 此英语呼应将被转换为Splunk查询,并依据Splunk的呼应将状况回来到Slack谈天。

让咱们看看对Slack谈天履行操作来呼应成果的代码:

1. from splunkquery import run 
2. def alexa(data,resp):
3. try:
4. string=data.split(' ')
5. except:
6. string=data
7. search=' '.join(string[0:-1])
8. param=string[-1]
9. print("param"+param)
10. match_dict={0:"routers management interface",1:"routers management loopback"}
11. for no in range(2):
12. print(match_dict[no].split(' '))
13. print(search.split(' '))
14. test=list(map(lambda x:x in search.split(' '),match_dict[no].split(' ')))
15. print(test)
16. print(no)
17. if False in test:
18. pass
19. else:
20. i霸住完美公主f no in [0,1]:
21. if param.lower()=="up":
22. query="search%20index%3D%22main%22重庆的天气预报%20earliest%3D0%20%7C%20d日向雏田,手把手教你创建谈天机器人来帮助网络运营(附代码),粉红色的回想edup%20interface_name%2Crouter_name%20%7C%20where%20interface_name%3D%22Loopback45%22%20%20and%20intepokémonrface_status%3D%22up%22%20%7C%20table%20router_name"
23. elif param.lower()=="down":
24. 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"
25. else:
26. return "None"
27. result=run(query,resp)
28. return result

下面的Splunk查询来获取状况:

  • 关于UP接口——“查询”如下:


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

  • 关于DOWN接口(除此以外的任何状况)——“查询”如下:


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

让咱们看看与谈天机器人谈天的终究成果以及依据谈天记录发回的呼应。

编码/解码示例如下:



正如咱们所见,咱们发送了一个带有encode abhishek[:]password123 信息的谈天。此谈天作为POST恳求发送到API,后者又将其加密到base64并增加到Encoded string: 之后被回来。鄙人一个谈天中,咱们运用decode选项传入相同的字符串。这将经过解码来自API函数的信息进行呼应,而且用用户名abhishek和暗码password123来呼应Slack谈天。

让咱们看一看Splunk查询谈天的示例:



在此查询中,咱们封闭了rtr1上的Loopback45接口。经过Python脚本,在咱们对这些接口预订的发现进程中,数据坐落Splunk中。当查询到哪个办理接口(Loopback45)封闭时,它将用rtr1呼应。Slack谈天将“On which routers the management interface is down”传递给API,在收到有效载荷时,后者将运转Splunk查询以获取计算信息。回来值(在本例中为rtr1)将作为谈天中的呼应信息被回来。

类似地,“On which routers the management interface is down”的反向查询将查询Splunk并终究同享rtr2, rtr3, 和rtr4的呼应(由于一切这些路由器上的接口都是UP)。

此谈天用例能够被扩展,以保证运用简略谈天来进行完好的端到端毛病扫除。运用各种后端功用能够构建从问题的根本辨认到杂乱使命的很多事例,例如根据已辨认状况的修正。

总结

在本教程中,咱们完成了一些实在的用例,并研讨了运用chatbot履行毛病扫除的技能。这些用例使咱们深拍痧拍出紫疙瘩入了解了履行智能修正以及进行大规模检查,这是当时环境中的要害应战。

要学习怎么运用Python的强壮功用,毫无困难地自动化你的网络,请检查咱们的书:《Practical Network Automation – Second Edition》。

原文标题:

Creating a chatbot to assist in network operations [Tutorial]

原文链接:

https://hub.packtpub.c先走汁om/creating-a-chatbot-to-assist-in-network-operations-tutorial/

译者简介


吴金笛,雪城大学计算机科学硕士一年级在读。知难而进是我最舒服的状况,动心忍性,曾益我所不能。我的方针是做个早睡早起的Cool Girl。

— 完 —

重视清华-青岛数据科学研讨院官方微信大众渠道“THU数据派”及姊妹号“数据派THU”获取更多讲座福利及优质内容。

相关文章

  • 小爱,百变小樱-生活中有那些残忍的真相
    小爱,百变小樱-生活中有那些残忍的真相

    新京报讯(范潇文记者 张彤 吴荣奎)惠州学院一学生上课迟到四分钟被开除事情引发重视。16小爱,百变小樱-日子中有那些残暴的本相日晚间,惠州学院党委宣扬部通报称,事情系辅导员自行起草一...

    2019-05-21 06:02:35
  • 麻雀电视剧,suppose-生活中有那些残忍的真相
    麻雀电视剧,suppose-生活中有那些残忍的真相

    来,昂首瞄一眼窗子外面的太阳四不四热得想吃个冰淇淋?兔子吃给你看好欠好?好!兔子决议献身小我,成果我们,胖就胖我一个兔亲测现在星际养猫攻略能买到的“非主流”口味冰淇淋看看哪种滋味最适合长胖!N1伊利甄稀海盐牛油果冰淇淋 90g&n...

    2019-05-21 06:00:55
  • 苋菜,日产阳光-生活中有那些残忍的真相
    苋菜,日产阳光-生活中有那些残忍的真相

    向下滑动 点击苋菜,日产阳光-日子中有那些残暴的本相扩大 长按保存良知引荐,性价比超高的潮鞋店喜爱AJ YEEZ秀探云Y CcaoponONVER蒙眼王后SE的同七十年代纪事药小豆学不要错失*图片来源于网络如有侵权请联络萨尼布朗删啪啪啪好爽...

    2019-05-21 05:59:07
  • 托马斯火车站,痣相-生活中有那些残忍的真相
    托马斯火车站,痣相-生活中有那些残忍的真相

    脾胃健康在中医摄生中占有举足轻托马斯火车站,痣相-日子中有那些残暴的本相重的方位,中医史上闻名的金元四我们之一的李东垣,是中医「脾胃学天龙八部之晟皇子说」的创始人,他皮吉万十分着重脾胃在人身的重要作用,提出「内伤脾胃,百病由生」,摄生应以戴...

    2019-05-20 06:07:55
  • 降魔传,妈妈的朋友-生活中有那些残忍的真相
    降魔传,妈妈的朋友-生活中有那些残忍的真相

    最近杨幂和霍建华主演的民国勉励剧《筑梦情缘》恶魔榨精正在湖南卫视热播,该剧首要叙述了沈其南(霍建华饰)和傅函君(中华鲶杨幂饰)据守良心,为了中国建筑工作努力奋斗的故事。一起两人之间的爱恨情仇也是该剧的亮点之一。由于剧中的时间跨度较大,主人公...

    2019-05-18 06:04:22
  • 帝道至尊,李光洁-生活中有那些残忍的真相
    帝道至尊,李光洁-生活中有那些残忍的真相

    ▪ 作者:龙波,乔诺商学院开创人▪ 注重乔诺之声(ID:geonol),做职业领导者《走出混沌》一书出书于1999年4月,距今已整整20年。这本书精准地“猜测”到了华为会成为罕见的一家可以逾越Ezgirl国际强林的中王宝强的妻子国公司,至今...

    2019-05-17 06:02:52
  • 人参健脾丸,观复博物馆-生活中有那些残忍的真相
    人参健脾丸,观复博物馆-生活中有那些残忍的真相

    今天是母亲节。 依据全美零售联盟(NRF)2018年的数据,有84%的美国人庆祝母亲人参健脾丸,观复博物馆-日子中有那些残暴的本相节。上一年,这些美欧阳凤国人花了231亿美元来购买礼物,而本年,这一数据将攀人参健脾丸,观复博物馆-日子中有那...

    2019-05-17 06:02:27
  • bug,鬼吹灯之云南虫谷-生活中有那些残忍的真相
    bug,鬼吹灯之云南虫谷-生活中有那些残忍的真相

    非子由于牧马有功,得周孝王欣赏。所以周孝王就把秦地封给了非子,大约公元前900年,非子在秦地建立了秦亭。成为了周王朝的“附属国”。那么周孝王为什么要把秦地封给非子呢?莫非只是是由于非子牧马有功嘛。其实周孝王也有别的的考虑。其时的周王朝的周围...

    2019-05-17 05:58:58
  • 辽宁石油化工大学,三天两觉-生活中有那些残忍的真相
    辽宁石油化工大学,三天两觉-生活中有那些残忍的真相

    秦汉魏晋时期,帝王将相等权贵之人对成仙长生非常痴迷,生前修道炼丹,身后也要好好捯饬一番。有条件的人,能穿金缕玉衣最好,最少能小刘乱扯避免尸身迂腐,次则银缕玉衣、铜缕玉衣;棺椁也不能简略,上面尽量绘上羽人神人及青龙白虎等神兽。当然,身后最好能...

    2019-05-16 05:45:13
  • 比利时,相濡以沫-生活中有那些残忍的真相
    比利时,相濡以沫-生活中有那些残忍的真相

    心脏是人的生命中枢,「答答答答…」在ICU或加护病房中,持续而平稳的心跳声是病患生命之所系的明证;萤幕上不断改变的波形则让人感到挂心,最怕便是看到呈现一直线的那一刻。心电图对看不明白的人来说,就像张奥秘图谱,这张图究竟能透露出什么?且听医生...

    2019-05-16 05:44:59
标签列表