Pengembangan reaktif bot Telegram

Selamat siang, Habr'ovchan.

Dalam mencari berbagai informasi tentang mengembangkan bot untuk obrolan Telegram di Internet, saya menemukan bahwa semua tutorial cukup penuh dengan mekanisme yang berbeda untuk berinteraksi dengan perpustakaan telegram-bot-api , tidak ada yang sampai pada kesimpulan bahwa kehidupan kawan-kawan harus selalu ditingkatkan di sisi fasilitasi tenaga kerja (programmer secara alami malas), jadi saya memutuskan untuk menulis tutorial saya sendiri menggunakan perpustakaan pembungkus saya sendiri, yang saat ini hanya dapat membaca pesan dan mengirim jawaban kepada mereka, tetapi hal pertama yang pertama.

Mengapa chatbots dibutuhkan?



Topik pengembangan chatbot di zaman kita untuk berbagai jejaring sosial adalah masalah sensitif, sejak diperkenalkannya chatbot:

  1. Mengurangi waktu respons kepada pengguna untuk pertanyaan yang ia minati (dan untuk minat Anda, kontak cepat dengannya)
  2. Mengurangi beban pada dompet perusahaan N untuk menjaga karyawan memproses aplikasi manual

Pengenalan chatbot sama sekali tidak berarti bahwa seseorang tidak diperlukan sama sekali, karena selalu ada situasi tertentu yang membutuhkan partisipasi orang yang bertanggung jawab untuk memecahkan masalah tertentu, tetapi itu menyederhanakan dan mengotomatisasi masalah penyelesaian masalah rumah tangga, memproses aplikasi, serta mengirimkan informasi kepada orang yang bertanggung jawab, mempertahankan statistik dan hal-hal lain yang diinginkan jiwa.

Karena pengenalan asisten virtual tidak begitu aktif, dan kami sudah secara bertahap memasuki dekade ke-2 abad ke-21, saya menganggap perlu untuk menurunkan ambang batas untuk memasuki topik ini.

Mari kita mulai.

Perhatian

Sebuah proyek yang menggunakan pustaka wrapper yang diimplementasikan tidak menggunakan webhook, tetapi pooling yang lama, karena ia tidak memiliki tujuan penggelaran ke layanan spesifik seperti heroku (namun, ia memiliki fungsi dasar sehingga proyek ini hidup lebih lama atau lebih lama dan tidak tertidur pada panggilan pertama dari distributor. waktu pengoperasian berbagai layanan pengguna heroku lainnya). Gagasan utama dari proyek ini adalah untuk menyederhanakan pengembangan dan mengurangi jumlah "gerakan" ketika mengembangkan chatbot dengan fungsionalitas dasar - memproses permintaan pengguna yang masuk.

Bagaimana cara kerjanya di perpustakaan ini?




Sumber data utama adalah kamus tempat chatbot didasarkan (terkandung dalam file JSON dalam format), tetapi juga menyiratkan pemrosesan pesan pengguna dengan menulis logika program mereka sendiri.

Pertama, Anda perlu membuat bot di BotFather (kami akan menganggap lebih lanjut bahwa Anda membuat bot dan menerima token). Sekarang Anda perlu "mengambil" pustaka untuk diri sendiri dengan mengeksekusi perintah
go get "github.com/liquiddeath13/reactivetgbot" .

Selanjutnya, Anda perlu membuat file berformat .go dan memasukkan kode berikut di sana:

 package main import ( reactivetgbot "github.com/liquiddeath13/reactivetgbot" ) func main() { BotInstance := reactivetgbot.Init("YOUR_BOT_TOKEN", "PATH_TO_JSON_DICTIONARY") if BotInstance != nil { go BotInstance.Logic() //if we need host our application on Heroku and shouldn't think about uptime reactivetgbot.HerokuServiceUP("Telegram ChatBot by liquiddeath13") } } 

Variabel BotInstance berisi tautan ke instance chatbot dengan token yang ditentukan dan jalur ke kamus yang menyimpan pertanyaan dan jawaban.

Contoh kamus:

 [ { "Question" : "/about", "Answer" : "ChatBot created by liquiddeath13 in 2019 year" }, { "Question" : "Hello, how can i contact with your company?", "Answer" : "Hello, you can contact us by provided mail address. Email: coolnickname@hostname.domain" } ] 

Selanjutnya, chatbot mulai bekerja dengan API Telegram dan mengambil informasi dari sana tentang peristiwa yang terjadi di obrolan di mana ia berada. Jika pesan yang dijelaskan dalam kamus di bidang Pertanyaan tiba di alamat bot, maka itu akan membalas pesan dengan jawaban yang dipasangkan di bidang Jawaban (yaitu, pesan "Halo, bagaimana saya bisa menghubungi perusahaan Anda?" dalam contoh ini, bot akan menjawab "Halo, Anda dapat menghubungi kami dengan alamat surat yang disediakan. Email: coolnickname@hostname.domain").

Juga, seperti disebutkan sebelumnya, kawan-kawan tingkat lanjut dapat menentukan perilaku bot ketika menerima pesan dengan menambahkan pawang, misalnya:

 package main import ( "fmt" reactivetgbot "github.com/liquiddeath13/reactivetgbot" ) func main() { BotInstance := reactivetgbot.Init("YOUR_BOT_TOKEN", "PATH_TO_JSON_DICTIONARY") AskCounter := 0 if BotInstance != nil { BotInstance.AppendHandler("how much time people asked you?", func(Msg reactivetgbot.TGMessage) string { AskCounter++ return fmt.Sprintf("Hello.\n%d - so many time people asked me", AskCounter) }) go BotInstance.Logic() reactivetgbot.HerokuServiceUP("Telegram ChatBot by liquiddeath13") } } 

Contoh ini menjelaskan mekanisme untuk memproses pertanyaan "berapa banyak waktu yang ditanyakan orang kepada Anda?". Sebagai jawaban, bot akan memberi pengguna nilai yang menunjukkan berapa kali pengguna mengajukan pertanyaan yang ditentukan, setelah menambah penghitung.

Penempatan di Heroku (tidak ada iklan)


Chatbots, untuk beberapa alasan, merasa tidak enak pada layanan seperti heroku, karena sedikit fungsionalitas ditulis untuk mencegah layanan dari "tertidur" lebih awal, yaitu meniru aktivitas jaringan (mengakses sumber daya web sekali setiap lima menit)
Untuk menempatkan proyek pada Heroku, kita memerlukan utilitas godep, yang akan "mengemas" dependensi dalam proyek. Anda dapat "mengambilnya" dengan perintah go get github.com/tools/godep , Anda dapat mengemas dependensi dengan menjalankan perintah godep save di folder proyek.

Selanjutnya, kita perlu membuat akun di Heroku dan berkenalan dengan panduan penyebaran resmi. Jika Anda tidak punya banyak waktu untuk membaca, atau jika Anda ingin "semuanya sekaligus di satu tempat", maka semuanya bermuara pada serangkaian perintah berikut:

  1. Otorisasi pada sumber daya Heroku menggunakan CLI mereka dengan mengeksekusi perintah heroku login
  2. Menjalankan perintah git init di folder proyek
  3. Menjalankan perintah git remote add heroku ** git' , Heroku**
  4. Menjalankan perintah git add . untuk menambahkan semua file ke repositori lokal
  5. Menjalankan perintah git commit -m " , commit'"
  6. Menempatkan repositori lokal di repositori heroku menggunakan git push heroku master

Setelah tindakan selesai, tidak ada lagi yang perlu dilakukan - Heroku akan merakit proyek dalam mode otomatis, dan bot akan melakukan semua pekerjaan rutin untuk Anda atau bawahan Anda.
Untuk memantau siklus hidup suatu layanan web, Heroku memiliki perintah heroku logs --tail , yang memungkinkan Anda untuk memonitor log tindakan terbaru.

Pertimbangan pengembangan lebih lanjut


Direncanakan setidaknya untuk memperkenalkan dukungan untuk penangan yang mengembalikan bukan hanya string, tetapi pesan yang dihasilkan (peningkatan untuk mendukung berbagai lampiran dalam bentuk file).

upd: Saya sampai pada kesimpulan bahwa mekanisme emulasi yang diterapkan tidak berfungsi seperti yang diharapkan dan layanan tetap terjaga hanya selama 30 menit, dan kemudian "tertidur" hingga langsung mengetuk (tautan ke proyek selalu ada di kantor proyek di Heroku-like) hosters), meskipun mungkin hanya layak ditulis ulang di webhook . Tinggalkan keinginan saya sendiri, serta kebencian dan ide untuk perbaikan dengan cara apa pun yang nyaman - Saya akan senang mendengar dari Anda.

(Mungkin) tautan yang bermanfaat


Halaman Proyek Perpustakaan Wrapper
Halaman proyek perpustakaan API Telegram

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


All Articles