Ağ işlemlerine yardımcı olmak için bir chatbot oluşturmayı öğretin (kod eklenmiştir)

Yazar: Melisha Dsouza

Çeviri: Wu Jindi

Redaksiyon: Guo Xiangjie

Bu makale hakkında 3000 kelime , 10 dakikadan fazla okumanız tavsiye edilir.

Bu makale, ağ işlemlerini uygulamak için bir sohbet botu oluşturmaya yönelik basit bir öğreticidir.

Bu eğitimde, ağ işlemlerine yardımcı olmak için sohbet robotlarının nasıl kullanılacağını öğreneceğiz. Akıllı operasyonlara doğru ilerlerken, dikkat edilmesi gereken bir diğer alan da hareketliliktir. Yapılandırma, onarım ve hatta sorun giderme için bir komut dosyası kullanmak iyidir, ancak yine de bu programları veya komut dosyalarını denetlemek, başlatmak ve hatta yürütmek için birinin hazır bulunmasını gerektirir.

Nokianın MIKA'sı, operatörlerin ağ sorunlarını gidermek ve onarmak için kullanabilecekleri iyi bir sohbet botu örneğidir. Nokia'nın bloguna göre, MIKA, bu tek ağın gerçek durumuna dayalı olarak bir uyarı önceliği bilgisi verecek ve mevcut durumu, mevcut soruna en iyi çözümü belirlemek için ağın ve diğer ağların tüm hizmet geçmişiyle karşılaştıracak. .

Nokianın MIKA'sı https://networks.nokia.com/services/digital-assistant-as-a-service Nokianın blogu https://www.nokia.com/blog/chatting-bots-home-work

Ağ işlemlerine yardımcı olmak için bir chatbot oluşturalım. Bu kullanım örneği için, yaygın olarak kullanılan bir sohbet uygulaması olan Slack'i kullanacağız. Splunk'ın akıllı veri analizi yeteneklerine referansla, çevre hakkında biraz anlayış kazanmak için kullanıcılar ve sohbet robotları arasında bazı etkileşimler göreceğiz.

Bu eğitim, Abhishek Ratan tarafından yazılan "Pratik Ağ Otomasyonu-İkinci Baskı" kitabından alınmıştır. Bu kitap size ağ otomasyonunun temel kavramlarını tanıtacak ve veri merkezinizin sağlamlığını ve güvenliğini geliştirmenize yardımcı olacaktır.

Bu eğiticinin kodu GitHub'da bulunabilir:

Github bağlantısı: https://github.com/PacktPublishing/Practical-Network-Automation-Second-Edition/tree/master/Chapter0

Web çerçevesini konuşlandırdığımızda, aynı çerçeveyi Slack sohbet botuyla etkileşim kurmak için kullanacağız ve bu da Splunk ile etkileşime girecek. Ayrıca ağ cihazlarıyla doğrudan etkileşime girebilir, böylece gerektiğinde yönlendiriciyi Slack'ten yeniden başlatmak gibi bazı karmaşık sohbetler başlatabiliriz. Bu, nihayetinde, belirli bir yere veya ofise sabitlenmek zorunda kalmadan her yerde (cep telefonlarında bile) görevleri yerine getirebilen mühendisler için hareketlilik sağlar.

Bir chatbot oluşturmak için temel adımlar şunlardır:

1. Slack'te bir çalışma alanı (veya hesap) oluşturun:

2. Çalışma alanınızda bir uygulama oluşturun (Örneğimizde, mybot adında bir uygulama oluşturduk):

3. Aşağıdakiler uygulama hakkında temel bilgilerdir (Uygulama Kimliği ve İstemci Kimliği, bu uygulamayı benzersiz şekilde tanımlayan diğer bilgilerle birlikte kullanılabilir):

4. Bu uygulamaya bot işlevi ekleyin:

5. Etkinlik aboneliği ekleyin ve mesajı yayınlayacak harici API ile eşleyin.

Etkinlik aboneliği, birinin sohbette bir sohbet botuna referans yazması ve ardından bu API'yi çağırmak için sohbet botunu ve sohbete girilen verileri kullanması anlamına gelir:

Burada önemli bir adım, sohbet mesajlarını almak için URL'yi girdikten sonra, bu belirli URL'yi Slack'ten doğrulamamız gerektiğidir. Doğrulama, API uç noktasının, Slack'ten gönderilen yanıtla aynı yanıt olan bir dize veya JSON biçiminde dönmesidir. Aynı yanıtı alırsak Slack, uç noktanın gerçek olduğunu onaylar ve doğrulandı olarak işaretler. Bu tek seferlik bir işlemdir ve API URL'sindeki herhangi bir değişiklik bu adımın tekrarlanmasına neden olacaktır.

Aşağıdaki, Ops API çerçevesindeki belirli sorgulara yanıt veren Python kodudur:

1. şahin ithalatı 2. json'u içe aktar 3. def on_get (self, req, resp): 4. # GET isteğini işler 5. resp.status = falcon.HTTP_200 # Varsayılan durum 6. resp.body = json.dumps ({"Sunucu Çalışıyor!"}) 7. def on_post (self, req, resp): 8. # POST İsteğini İşler 9. yazdır ("Gönderide") 10. data = req.bounded_stream.read () 11. deneyin: 12. # Son noktayı Slack'e doğrulama 13. veri = json.loads (veri) 14. # Varsayılan durum 15. resp.status = falcon.HTTP_20016. # Soru dizesini yanıt olarak geri gönder 17. resp.body = veri 18. hariç: 19. # URL zaten doğrulandı 20. resp.status = falcon.HTTP_20021. resp.body = ""

Bu, Slack'ten bir "sorgulama" gönderilirse, aynı "sorgulama" yı döndüreceğini doğrulayacaktır. Bu değer, Slack kanalının sohbet verilerini göndermesi için bitiş noktasının doğru uç nokta olduğunu doğrular.

6. Bu uygulamayı (veya sohbet botunu) herhangi bir kanala ( Bu, bir grup sohbetine kullanıcı eklemeye benzer):

Belirli sohbet mesajlarına yanıt veren temel API çerçeve kodu aşağıdaki işlemleri gerçekleştirir:

  • Slack'e gönderilen herhangi bir mesajın üç saniye içinde 200 kez yanıt verdiğini onaylayın. Değilse, Slack şunları bildirir: uç noktaya ulaşılamaz.
  • Sohbet robotlarından (gerçek kullanıcılardan değil) gönderilen mesajların yanıt mesajı olarak tekrar gönderilmediğinden emin olun. Bu, bir döngüye neden olabilir, çünkü sohbet botundan gönderilen mesaj Slack sohbetinde yeni bir mesaj olarak değerlendirilecek ve sonra tekrar URL'ye gönderilecektir. Bu, sonunda sohbeti kullanılamaz hale getirecek ve sohbette yinelenen mesajlara neden olacaktır.
  • Yanıt, Slack'ten gelen yanıtın kimliği doğrulanmış bir kaynaktan gelmesini sağlamak için Slack'e geri gönderilecek olan belirteç ile doğrulanır.

kod aşağıdaki gibi gösterilir:

1. şahin ithalatı 2. json'u içe aktar 3. ithalat istekleri 4. base64'ü içe aktar 5. splunkquery içe aktarma çalıştırmasından 6. splunk_alexa'dan alexa içe aktarma 7. channel_connect, set_data kanal içe aktarımından 8. sınıf Bot_BECJ82A3V (): 9. def on_get (self, req, resp): 10. # GET isteğini işler 11. resp.status = falcon.HTTP_200 # Varsayılan durum 12. resp.body = json.dumps ({"Sunucu Çalışıyor!"}) 13. def on_post (self, req, resp): 14. # POST İsteğini İşler 15. baskı ("Gönderide") 16. data = req.bounded_stream.read () 17. deneyin: 18. bot_id = json.loads (veri) 19. bot_id == "BECJ82A3V" ise: 20. print ("Aynı bottan gelen mesajı yoksay") 21. resp.status = falcon.HTTP_20022. resp.body = "" 23. dönüş 24. hariç: 25. print ("Hayat devam ediyor ...") 26. deneyin: 27. # Son noktayı Slack'e doğrulama 28. data = json.loads (veri) 29. # Varsayılan durum 30. resp.status = falcon.HTTP_20031. # Sınama dizesini yanıt olarak geri gönder 32. resp.body = veri 33. hariç: 34. # URL zaten doğrulandı 35. resp.status = falcon.HTTP_20036. resp.body = "" 37. baskı (veri) 38. veri = json.loads (veri) 39. # Kanal ve veri bilgilerini alın 40. kanal = veri 41. text = veri 42. # Slack uç noktasına erişmek için Aracının kimliğini doğrulayın 43. token = "xoxp-xxxxxx" 44. # Parametreleri ayarla 45. baskı (tip (veri)) 46. yazdır (metin) 47. set_data (channel, token, resp) 48. # İsteği işleyin ve gevşek kanala bağlanın 49. channel_connect (metin) 50. dönüş 51. # falcon.API örneği, gunicorn'dan çağrılabilir 52.app = falcon.API () 53. # merhabaDünya sınıfı somutlaştır 54.Bot3V = Bot_BECJ82A3V () 55. # helloWorld sınıfına URL eşleme 56.app.add_route ("/ slack", Bot3V)
  • Kanal etkileşim yanıtı gerçekleştirin

Bu kod, sohbet kanalında sohbet botu kullanılarak gerçekleştirilen belirli sohbeti açıklar. Ek olarak, bu, belirli bir kullanıcı veya kanal kimliğine yanıtı ve Slack API'ye yönelik kimlik doğrulama jetonunu kullanacaktır.

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

Bu, Slack sohbet mesajlarının veya yanıtlarının kaynaklandıkları belirli kanalda görüntülenmesini sağlar. Örnek olarak, belirli değerleri şifrelemek veya şifresini çözmek için sohbeti kullanacağız.

Örneğin, şifreli usernamepassword yazarsak, base64 değeri ile şifrelenmiş bir dize döndürür.

Benzer şekilde, şifre çözme yazarsak, sohbet robotu şifresi çözülmüş şifrelenmiş bir dizi döndürecektir.

kod aşağıdaki gibi gösterilir:

1. json içe aktar 2. ithalat istekleri 3. base64'ü içe aktar 4. splunk_alexa import alexa'dan 5. channel = "" 6. simge = "" 7. resp = "" 8. def set_data (Kanal, Belirteç, Yanıt): 9. genel kanal, belirteç, yanıt 10. channel = Kanal 11. jeton = Jeton 12. resp = Yanıt 13.def send_data (metin): 14. global kanal, belirteç, res 15. baskı (kanal) 16.resp = request.post ("https://slack.com/api/chat.postMessage", data = '{"kanal": "' + kanal + '", "metin": "' + metin + '"} ', headers = {"Content-type": "application / json", "Yetkilendirme": "Taşıyıcı" + belirteç}, doğrulama = Yanlış) 17. 18.def channel_connect (metin): 19. global kanal, belirteç, yanıt 20.try: 21. baskı (metin) 22.arg = text.split ('') 23. print (str (arg)) 24.yol = arg.lower () 25. print (içindeki yol) 26. eğer yol: 27.print ("deecode api") 28. başka: 29. sonuç = alexa (arg, resp) 30.text = "" 31.try: 32. sonuçta i için: 33. baskı (i) 34. print (str (i.values ())) 35. i.values'teki j için (): 36. baskı (j) 37.text = metin + '' + j 38. # baskı (j) 39.if text == "" veya text == Yok: 40.text = "Yok" 41.send_data (metin) 42. geri dönüş 43. hariç: 44.text = "Yok" 45.send_data (metin) 46. geri dönüş 47. decode = arg 48. hariç: 49.print ("Lütfen kodu çözülecek bir dize girin") 50.text = "bağımsız değişken boş olamaz" 51.send_data (metin) 52. geri dönüş 53. deencode (bağımsız değişken, metin) 54. 55.def deencode (bağımsız değişken, metin): 56.global channel, token, resp 57. decode = arg 58.if arg == '- yardım': 59. # baskı ("Sinput") 60.text = "kodlama / kod çözme" 61.send_data (metin) 62. geri dönüş 63.if arg.lower () == "kodla": 64.encoded = base64.b64encode (str.encode (kod çözme)) 65.if '' kod çözmede: 66.text = "Kodlanmış dize:" + encoded.decode ('utf-8') 67.end_data (metin) 68. geri dönüş 69.else: 70.text = "usernamepassword örnek dize biçimi" 71.send_data (metin) 72. geri dönüş 73.try: 74.creds = base64.b64decode (kod çözme) 75.creds = creds.decode ("utf-8") 76. hariç: 77.print ("Dize kodunu çözerken sorun") 78.text = "Dizenin kodunu çözerken hata oluştu. Kodlanmış dizenizi kontrol edin." 79.end_data (metin) 80. geri dönüş 81.if '' str (kredi): 82.print ("kodu çözülmüş base64 kimlik bilgilerinde alt dize var") 83. # "" ilk eşleşmesine göre bölün 84.credentials = str (kredi) .split ('', 1) 85. kullanıcı adı = str (kimlik bilgileri) 86.password = str (kimlik bilgileri) 87.status = 'başarı' 88.else: 89.text = "kodlanmış dizge standart biçimde değil, usernamepassword kullanın" 90.end_data (metin) 91.print ("kodlanmış base64, kullanıcı adı parolası standart biçimde değil") 92.username = "Geçersiz" 93.password = "Geçersiz" 94.status = 'başarısız' 95.temp_dict = {} 96.temp_dict = {'kullanıcı adı': kullanıcı adı, 'şifre': şifre} 97.temp_dict = durum 98.temp_dict = "" 99.temp_dict = "" 100. # result.append (temp_dict) 101. print (temp_dict) 102.text = "" + kullanıcı adı + "" + şifre 103.end_data (metin) 104. print (veya metin) 105.print (resp.status_code) 106. dönüş

Bu kod, sohbet robotuyla belirli bir sohbet bulmak için Splunk örneğini sorgular. Sohbet, şu anda kapalı olan herhangi bir yönetim arayüzünü (Loopback45) isteyecektir. Ek olarak, sohbette kullanıcılar tüm yönlendiricileri yukarı yönetim arayüzleriyle sorgulayabilir. Bu İngilizce yanıt bir Splunk sorgusuna dönüştürülecek ve durum, Splunk'ın yanıtına göre Slack sohbetine döndürülecektir.

Sonuçlara yanıt olarak Slack sohbetinde eylemler gerçekleştiren koda bakalım:

1. splunkquery içe aktarma çalıştırmasından 2. def alexa (veri, yanıt): 3. deneyin: 4. string = data.split ('') 5. hariç: 6. string = data 7. arama = ''. Birleştir (dize) 8. param = dize 9. print ("param" + param) 10. match_dict = {0: "yönlendirici yönetimi arayüzü", 1: "yönlendirici yönetimi geri döngüsü"} 11. aralık (2) için: 12. print (match_dict.split ('')) 13. print (search.split ('')) 14. test = liste (harita (lambda x: search.split ('') içindeki x, match_dict.split (''))) 15. baskı (test) 16. baskı (hayır) 17. Testte Yanlışsa: 18. geçiş 19. başka: 20. içinde değilse: 21. param.lower () == "yukarı" ise: 22. 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 " 23. elif param.lower () == "aşağı": 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. başka: 26. "Yok" u döndür 27. sonuç = çalıştır (sorgu, cevap) 28. dönüş sonucu

Durumu almak için aşağıdaki Splunk sorgusu:

  • UP arayüzü için - "sorgu" aşağıdaki gibidir:

index = "main" earliest = 0 | dedup interface_name, router_name | whereinterface_name = "Loopback45" ve interface_status = "up" | tablo yönlendirici_adı

  • AŞAĞI arayüz için (bunun dışındaki herhangi bir durum) - "sorgu" aşağıdaki gibidir:

index = "main" earliest = 0 | dedup interface_name, router_name | whereinterface_name = "Loopback45" ve interface_status! = "up" | tablo yönlendirici_adı

Sohbet botuyla sohbet etmenin nihai sonucuna ve sohbet geçmişine göre geri gönderilen yanıta bakalım.

Kodlama / kod çözme örnekleri aşağıdaki gibidir:

Gördüğümüz gibi, abhishekpassword123'ü kodlayan mesajla bir sohbet gönderdik. Bu sohbet API'ye POST isteği olarak gönderilir, ardından onu base64'e şifreler ve Kodlanmış dizeye ekler: ve döndürülür. Bir sonraki sohbette, aynı dizeyi geçmek için decode seçeneğini kullanıyoruz. Bu, API işlevinden gelen bilgilerin kodunu çözerek yanıt verecek ve Slack sohbetine abhishek ve password123 kullanıcı adı ile yanıt verecektir.

Splunk sorgu sohbeti örneğine bir göz atalım:

Bu sorguda, rtr1 üzerinde Loopback45 arayüzünü kapattık. Python komut dosyaları aracılığıyla veriler, bu arayüzlerin planlanmış keşfi sırasında Splunk'ta bulunur. Hangi yönetim arayüzünün (Loopback45) kapalı olduğunu bulduğunda, rtr1 ile yanıt verecektir. Slack sohbet, API'ye "hangi yönlendiricilerde yönetim arayüzünün kapalı olduğunu" iletir ve yükü aldıktan sonra, ikincisi istatistik almak için bir Splunk sorgusu çalıştırır. Dönüş değeri (bu örnekte rtr1) sohbette yanıt mesajı olarak döndürülecektir.

Benzer şekilde, "Yönetim arabiriminin hangi yönlendiricilerde çalışmadığı" ters sorgusu Splunk'u sorgulayacak ve sonunda rtr2, rtr3 ve rtr4'ün yanıtlarını paylaşacaktır (çünkü tüm bu yönlendiricilerdeki arabirimler yukarıdadır).

Bu sohbet kullanım durumu, basit sohbetin eksiksiz uçtan uca sorun giderme için kullanıldığından emin olmak için genişletilebilir. Sorunların temel tanımlanmasından, tanımlanan durumlara dayalı onarımlar gibi karmaşık görevlere kadar çok sayıda vaka oluşturmak için çeşitli arka uç işlevleri kullanılabilir.

sonuç olarak

Bu eğiticide, bazı gerçek kullanım durumlarını uyguladık ve sorun giderme gerçekleştirmek için chatbot kullanma tekniklerini inceledik. Bu kullanım senaryoları, mevcut ortamdaki temel zorluklar olan akıllı onarımlar yapma ve büyük ölçekli incelemeler yapma konusunda bize fikir verdi.

Ağınızı zorluk çekmeden otomatikleştirmek için Python'un gücünü nasıl kullanacağınızı öğrenmek için, kitabımıza bakın: "Pratik Ağ Otomasyonu-İkinci Sürüm".

Orjinal başlık:

Ağ işlemlerine yardımcı olmak için bir sohbet botu oluşturma

Orijinal bağlantı:

https://hub.packtpub.com/creating-a-chatbot-to-assist-in-network-operations-tutorial/

Çevirmen Profili

Wu Jindi , Syracuse Üniversitesi Bilgisayar Bilimleri Yüksek Lisansının ilk yılı. Zorluklarla yüzleşmek benim için en rahat durum, yapamadığım şeylere katlanmaya meyilliyim. Amacım erken yatıp erken kalkan bir Havalı Kız olmak.

- Bitiş -

Tsinghua-Qingdao Veri Bilimi Enstitüsü'nün resmi WeChat kamu platformunu takip edin " THU Veri Pastası "Ve kız kardeş numarası" Veri Pastası THU "Daha fazla ders avantajı ve kaliteli içerik elde edin.

3D efekti hissedin ve hikayeyi dinleyin. En havalı harita yazılımı "Google Earth" güncellendi!
önceki
Afrika kıyılarında, yüzeyden 50.000 kat daha yüksek rezervlerle nadir metal yatakları keşfedildi.
Sonraki
Beyaz kuğu, siyah kuğu, gri kuğu? Tanıma yapmak için evrişimli sinir ağını nasıl kullanacağınızı öğretin
0-5 trajedi! Wang Shuang'ın Paris'i 19 dakika içinde çöktü ve sezonun üçüncü tacını kaybetti.
Yine Shandong Dahan! 4 yaşındaki kız demiryolu raylarına düştü ve Shandong öğretmeni vurdu!
Tsinghua Üniversitesi, Peking Üniversitesi ve Zhejiang Üniversitesi'nin bilgisayar kursu kaynak koleksiyonlarının tümü burada (bağlantı ile)
"AI Truman World" den nasıl kaçılır (kaynaklarla)
Büyük üzüntü! Serie A küme düşme takımı Juventus'u 2-1 tersine çevirdi + 62 yıllık rekoru kırdı, 37 yaşındaki kıdemli oyuncu kutlamak için ayrıldı
Doktor, prematüre bebeklerin ebeveynlerine bir teşekkür mektubu yazdı Biyolojik ebeveynler ve geçici ebeveynler birlikte mucizeler yarattı
Beiqing Rehabilitasyon Bölümü'nün lideri olan Şangay Jiaotong Üniversitesi, yeni bir AI lisans bölümü kurmak için onaylandı ("Şangay Jiaotong Bölümü" envanteriyle)
Jindo Group: "Pazarlama gücü", küçük, orta ve mikro işletmelerin yüksek kaliteli gelişimi için temel itici güçtür
Sanya: Yılbaşında Yalong Körfezi'ndeki turistik otellerin ortalama fiyatı 3660 yuan.
Alipay, anti-sky cep telefonunu piyasaya sürdü: üç katlanabilir ekran, AI dolandırıcılık önleme, çalınan otomatik olarak iade edilebilir!
Sözlü Tarih · Sichuan Zhuqin Xie Huiren oğlu, Sichuan Zhuqin'den geçmek için mantoyu miras alıyor
To Top