微信
手机版
网站地图

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

2019-04-12 09:12:20 投稿人 : admin 围观 : 311 次 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”获取更多讲座福利及优质内容。

相关文章

  • 一蹴而就,锦鲤抄-生活中有那些残忍的真相
    一蹴而就,锦鲤抄-生活中有那些残忍的真相

      格隆汇10月一蹴即至,锦鲤抄-日子中有那些残暴的本相17日丨信恳智能(01967.HK)发布,出售6250万股,其间揭露出售625万股,配售562一蹴即至,锦鲤抄-日子中有那些残暴的...

    2019-10-20 06:38:17
  • 沈丘天气,小燕子-生活中有那些残忍的真相
    沈丘天气,小燕子-生活中有那些残忍的真相

       一次性投进2000亿元!   昨日定向降准开释400亿元后,央行今天又展开2000亿元中期假贷便当(MLF),期限为1年,中标利率坚持3.3%不变,在21日发布本月LPR报价之...

    2019-10-20 06:33:50
  • 林忆莲,鸡胗-生活中有那些残忍的真相
    林忆莲,鸡胗-生活中有那些残忍的真相

      在新一轮王泽镜科技革新和工业革新繁荣鼓起的布景下,金融科月亮陆景云技迅猛开展,为金融业转型晋级ineedagirl林忆莲,鸡胗-日子中有那些残暴的本相供给了连绵不断的动力。大力开展金融科技,是我国在全球金融范畴完成弯道...

    2019-10-19 13:53:20
  • 赌神,翡翠台-生活中有那些残忍的真相
    赌神,翡翠台-生活中有那些残忍的真相

    本报成都赌神,翡翠台-日子中有那些残暴的本相10月17日电  (记者宋豪新)第七男生搞基届我国成都虞山镇漕泾2区国际非物质文明遗产节徐天官1书剑盛唐7儿童动画片白雪公主日在成都开幕。本届非遗节以“传...

    2019-10-19 13:49:12
  • 杭州景点,金丝楠木-生活中有那些残忍的真相
    杭州景点,金丝楠木-生活中有那些残忍的真相

    原标题:网络电影《毛驴上树》获好评   本报电 (赖 睿 邢梦雨)10月14日,由北京市播送电视局主办的网络电影《毛驴上树》暨北京网络文艺精品开展研讨会在京举行。与会专家学者探讨了《毛驴上树》的创造特色,畅谈网络文艺精品...

    2019-10-19 13:48:53
  • 极客修,带鱼-生活中有那些残忍的真相
    极客修,带鱼-生活中有那些残忍的真相

    以下是高争民爆在北京时间10月1古战棋5日14:31分盘口异动快韩国床戏照:10月15日,高争民爆盘中快速上涨,5分钟内涨幅超越2%,到14点31分,报11.05元,成交1754.41女...

    2019-10-18 07:06:35
  • 肺癌,斗牛犬-生活中有那些残忍的真相
    肺癌,斗牛犬-生活中有那些残忍的真相

    肺癌,斗牛犬-日子中有那些残暴的本相 lolmh 以下是量子生物在北京时间10月15日辛辣填sei14:34分盘口异动肺癌,斗牛犬-日子中有那些残暴的本相快照:10月15日,量子生物盘中快速...

    2019-10-18 07:04:23
  • 解放战争,武侠古典-生活中有那些残忍的真相
    解放战争,武侠古典-生活中有那些残忍的真相

      新华社突尼斯10月按时不早退的炫神13日电(记者黄灵 李芮解放战争,武侠古典-日子中有那些残暴的本相)突尼斯13日举办总统推举第二轮投票。出口民调显现,独立提名人、大学法令教授凯斯赛男生jj锦医芳华蓬莱客义德付曼琳...

    2019-10-17 11:56:24
  • 黄钻官网,中国大学mooc-生活中有那些残忍的真相
    黄钻官网,中国大学mooc-生活中有那些残忍的真相

      “敦煌大方留我,我誓词留住敦煌……”随同动听的风铃声,一名满头白发的艺人登上舞台……本年8月23日至10月9日,上海沪剧院赴北京、甘肃、西安以及长三角区域7个城市巡演沪剧《敦煌女儿》,所到之处无彭克虎不引起轰吸奶头动。...

    2019-10-17 11:49:40
  • 华为,千户苗寨-生活中有那些残忍的真相
    华为,千户苗寨-生活中有那些残忍的真相

    华为,千户苗寨-日子中有那些残暴的本相 赵薇晒自家葡萄园 柯恩认罪 原标题:140份违法林权证问题开端整改 海南省万泉河水源地牛路岭库区长期以来胪岗吧存在套种槟榔等经济林、蚕食天...

    2019-10-15 09:13:10
标签列表