Aplikasi untuk kerangka kerja untuk bot multi-platform

gambar

Chatbots memasuki kehidupan informasi kami dengan ketat, semua jaringan sosial yang menghargai diri sendiri dan para pengirim pesan memiliki dukungan untuk bot, mereka menyediakan API yang nyaman untuk pengembangan dan penggunaannya, semua untuk kenyamanan pengguna dan pemrogram. Sekarang, untuk membuat bot di Telegram bahkan tidak perlu tahu bahasa pemrograman apa pun. Ada layanan yang memungkinkan Anda mendesain bot menggunakan antarmuka web. Dan ini benar-benar bagus, tetapi baru-baru ini saya mengalami masalah dan terkejut bahwa pada gelombang popularitas chatbot ini, yang sekarang bukan hanya fitur keren, tetapi juga alat penghasil pendapatan - praktis tidak ada jawaban.

Dan pertanyaannya adalah: bagaimana jika saya ingin membuat lebih dari satu bot untuk satu layanan? Misalnya, saya tahu bahwa CA duduk di Vkontakte dan Telegram, bagaimana saya bisa menulis bot dengan sedikit usaha untuk bekerja dengan orang-orang di sana dan di sana? Jika tiba-tiba (misalnya, sebagai pemilik toko online) saya juga ingin bekerja dengan audiens di Facebook menggunakan bot, apakah saya benar-benar perlu mengembangkan bot baru dari awal dan menulis ulang semua logika untuknya atau mencoba menggali API atau perpustakaan baru. Dan saya mencoba menemukan jawabannya di bawah potongan, saya bertanya ke meja.

Sebenarnya, ada solusi, dan ada banyak, tetapi semuanya bermuara pada kenyataan bahwa Anda harus meng-host bot Anda dengan layanan yang juga menyediakan platform. Dengan demikian, Anda tidak bisa mendapatkan solusi kotak. Mungkin saya salah dan tidak sepenuhnya mempelajari apa yang sebenarnya ada, tetapi fakta bahwa tautan pertama di Google tidak mengarah ke solusi sudah mengkhawatirkan. Ada juga Botman . Ini adalah pustaka open source yang benar-benar kuat dengan sekelompok chip dan dokumentasi yang komprehensif. Dan itu ditulis dalam PHP. Saya tidak menentang PHP , dalam hal apa pun saya tidak mengakuinya secara publik agar tidak membiakkan holivar yang tidak perlu, tetapi saya tidak merasa ingin mengembangkannya. Saya memutuskan untuk mencari sesuatu yang mirip dengan Python, selain Python, ada banyak perpustakaan yang memungkinkan Anda untuk bekerja dengan API Bot Telegram. Dan saya tidak menemukan apa-apa, jadi saya segera menyimpulkan bahwa itu layak untuk ditulis sendiri. (Mungkin seseorang tahu solusi yang cocok untuk bot multi-platform dengan sistem terbuka, saya akan senang dengan informasi apa pun)

Di sini, omong-omong, masalah lain adalah pembuatan bir. Saya sama sekali tidak tahu di mana lagi Anda dapat berbagi pekerjaan dengan audiens dalam bentuk artikel selain dari HabrΓ©. Saya akan sangat senang membantu dalam hal ini.

Nama Botovod datang dengan sendirinya.

Secara umum, saya akan memberikan kode kecil menggunakan Botovod dan menjelaskannya secara singkat.
Judul spoiler
from botovod import Botovod, Message, utils @utils.convert_to_text def handler_message(agent, chat, text): message = Message() message.text = "  " agent.send_message(chat, message) @utils.convert_to_images def handler_images(agent, chat, images): message = Message() message.text = "  " agent.send_message(chat, message) def handler_echo(agent, chat, message): agent.send_message(chat, message) settings = [ { "name": "telegram", "agent": "botovod.agents.telegram", "settings": {"token": "462755273:AzBZBQ7AAnqFEXqZ_P8Z-qvCddmjqTVAYPI", "method": "polling"} }, ] botovod = Botovod(settings) botovod.add_handler(handler_message) botovod.add_handler(handler_images) botovod.add_handler(handler_echo) botovod.start() 



Di sini kita mendefinisikan 3 penangan untuk pesan masuk, masing-masing mengirim sesuatu sebagai tanggapan. Yang pertama: "Saya menerima pesan," yang kedua: "Saya melihat foto," yang ketiga hanya akan mengirim kembali apa yang saya terima. Kemudian kami membuat bot manager (Botovod) dan memberikannya pengaturan untuk bot, di bot ini untuk bot di Telegram. Selanjutnya, kami secara berurutan menambahkan penangan pesan. Jika pesan tiba di bot, itu akan pergi ke penangan pertama yang setuju untuk menerimanya. Misalnya, jika audio dikirim kepada kami, maka penangan pertama akan mencoba menerimanya terlebih dahulu, tetapi menolak, karena ini bukan teks. Kemudian dia akan menerima yang kedua, tetapi juga menolak, karena ini bukan gambar, maka dia akan menerima yang ketiga, yang tidak memiliki batasan - dengan cara ini akan meneruskan audio orto Kendala dikenakan sebagai dekorator dari modul utils.

Sekarang saya akan mencoba untuk mengatakan secara detail apa itu:

Ada manajer bot - objek dari kelas Botovod - nama bot (masing-masing memiliki yang unik), kelas agen yang akan memprosesnya dan pengaturan untuk bot diteruskan ke dalam konstruktor. Handler juga ditambahkan ke manajer bot secara bergantian. Jika sebuah pesan tiba di bot, manajer akan memeriksa mereka pada gilirannya sampai ia menemukan pawang yang melempar pengecualian NotPassed. Penangan pertama yang ditambahkan diperiksa pertama, terakhir, masing-masing, terakhir. Jika Anda bermaksud menggunakan webhooks, maka manajer bot dapat terhubung ke server web. Untuk melakukan ini, manajer bot memiliki metode mendengarkan yang menerima nama bot, header, dan badan permintaan. Kemudian mengirimkan data ini ke parser agen, yang mengembalikan pesan yang dihasilkan, setelah pesan ini didorong melalui penangan. Sebagai tanggapan, metode mendengarkan mengembalikan kamus {"status": any_code, "header": dict (), "body": "any_text"}, di mana dalam header adalah header respons, dan di dalam tubuh adalah tubuh respons. Terkadang messenger / jejaring sosial mengharuskan server untuk mengembalikan objek, jadi saya pikir perilaku ini nyaman.

Saya akan memberikan contoh untuk Vkontakte bot dengan nama "vk-bot", dan Botovod akan terhubung ke server Django

 def view(request): response = manager.listen("vk-bot", request.headers, request.text) return HttpResponse(status = response["status"], headers = response["headers"], response["body"]) 


Pesan yang terbentuk adalah objek dari kelas Pesan. Ini mencakup bidang-bidang berikut: teks - teks pesan; gambar - daftar dengan gambar; audio - daftar dengan file suara; video - daftar video; dokumen - daftar dengan dokumen; lokasi - daftar dengan tempat di peta; raw - badan pesan mentah atau informasi tambahan untuk itu (kamus).

Juga, setiap daftar objek Pesan (gambar, audio, video, dokumen) berisi objek khusus yang kelasnya diwarisi dari Lampiran. Kelas lampiran secara default memiliki metode url dan file_path di mana parser agen biasanya menaruh informasi tentang file yang diterima. Daftar lokasi berisi objek Lokasi, ke konstruktor yang Anda harus melewati garis bujur dan garis lintang (garis bujur dan garis lintang).

Di bawah ini adalah contoh membangun pesan dalam penangan

 def handler(agent, chat, message): out = botovod.Message() image = botovod.Image() image.file_path = "/tmp/1.png" location = botovod.Location() out.images.append(image) out.text = " ,   " agent.send_message(chat, out) 


Ini semua yang ada di dalamnya untuk saat ini, tetapi saya berharap seseorang akan tertarik pada solusi seperti itu dan seseorang akan ingin membantu dengan saran, komentar, ide, dan mungkin partisipasi mereka sendiri dalam pengembangan. Terima kasih sudah membaca!

Tautan Github

Source: https://habr.com/ru/post/id422081/


All Articles