Dalam panduan ini, kami akan memandu anda melalui semua yang anda perlu tahu untuk membina chatbot Telegram pertama anda menggunakan JavaScript dan Node.js.
Untuk bermula, kita perlu mendaftarkan bot baru kami dengan apa yang dipanggil botfather untuk menerima token akses API kami.
Takeaways Key
Token API adalah langkah yang paling penting, kerana ini membolehkan anda menjalankan kod yang dapat melaksanakan tugas untuk bot.
1. Mencari botfather
Seterusnya, anda akan diminta untuk memasukkan nama pengguna untuk bot. Nama pengguna mestilah unik dan berakhir dalam bot. Oleh itu, saya memilih michiel_article_bot, kerana nama pengguna itu belum diambil. Ini juga akan menjadi nama pengguna yang anda gunakan untuk mencari bot dalam medan carian Telegram.
Bapabot akan mengembalikan mesej kejayaan dengan token anda untuk mengakses Telegram HTTP API. Pastikan untuk menyimpan token ini dengan selamat, dan pastinya tidak berkongsi dengan orang lain.
kita dapat mengubah suai bot lagi dengan menambahkan keterangan atau menetapkan perintah yang kita ingin bot tahu. Anda boleh mesej bot dengan teks /setcommands. Ia akan menunjukkan kepada anda cara memasukkan arahan dengan format Command1 - Description.
Untuk bot saya, saya menetapkan penanda buku perintah - simpan artikel yang menarik url.
Jika anda melihat bot anda sekarang, anda akan melihat ikon perintah di kotak sembang yang menunjukkan arahan yang ada. Anda boleh membuat lebih banyak arahan yang berfungsi dan tidak menyenaraikannya melalui Botfather. Walau bagaimanapun, dari sudut pandangan UX, saya cadangkan mendaftarkan semua arahan yang ada dengan Botfather.
kita boleh menetapkan privasi bot dengan /setprivacy. Anda boleh mengaktifkan atau melumpuhkannya. Secara lalai, nilai privasi ditetapkan untuk didayakan, yang bermaksud bot anda hanya akan menerima mesej yang bermula dengan simbol atau dengan menyebut nama pengguna bot.
Tetapan ini boleh dilumpuhkan yang bermaksud bahawa bot anda boleh menerima semua mesej yang dihantar ke kumpulan. Anda perlu menambah bot ke kumpulan anda untuk menerima semua mesej ini.
Senarai semua arahan yang ada boleh didapati di sini:
Akhirnya, kita bersedia untuk memulakan pengekodan. Pastikan anda mempunyai token akses API siap.
Pertama sekali, semasa tutorial ini, kami akan menggunakan kod berikut yang telah saya sediakan.
Ia adalah projek node.js mudah yang hanya mempunyai dua kebergantungan: dotenv dan node-telegram-bot-api. Pakej pertama digunakan untuk membuat fail konfigurasi .Env yang akan memegang token akses API kami. Pakej kedua bertindak sebagai pembalut node.js untuk API Bot Telegram, yang akan kami gunakan untuk tutorial ini.
Untuk memulakan, klon repositori GitHub dan buka projek dalam editor kegemaran anda. Seterusnya, buat fail .env dalam akar projek anda dan tambahkan satu baris - token = yourtoken. Gantikan anda dengan token yang anda terima dari Botfather.
Untuk memastikan sambungan berfungsi, menavigasi ke akar projek di terminal anda dan jalankan NPM bermula. Perintah permulaan NPM akan menjalankan fail app.js anda dan harus menyambung ke bot anda. Jika anda tidak melihat apa -apa kesilapan, kami baik untuk pergi!
Pertama sekali, kita perlu membuat bot dengan lulus token akses API kami dan menetapkan pilihan pengundian untuk benar. Ini bermakna bot akan menyemak mesej masuk secara berkala.
<span>require('dotenv').config(); </span><span>const TelegramBot = require('node-telegram-bot-api'); </span> <span>const token = process.env.TOKEN; </span> <span>// Created instance of TelegramBot </span><span>const bot = new TelegramBot(token, { </span> <span>polling: true </span><span>}); </span>
Sekarang bot telah dibuat, mari kita lihat coretan kod berikut yang mewakili perintah /penanda buku kami. Kami menetapkan pendengar untuk mesej teks yang masuk, Ontext, dan tentukan untuk mencari mesej yang bermula dengan /penanda buku, seperti yang kita nyatakan dalam rentetan regex.
Apabila mesej bermula dengan /penanda buku, kod kami akan dilaksanakan. Pertama sekali, kami menyimpan ID sembang, kerana kami ingin menghantar mesej kembali ke sembang pengguna ini.
Seterusnya, kami periksa sama ada pengguna telah menggunakan arahan dengan betul. Kami mengharapkan URL diluluskan dengan arahan seperti ini: /bookmark www.google.com.
Jika tidak ada URL yang ditentukan, kami menghantar mesej kembali ke CHATID yang disimpan memberitahu pengguna untuk memberi kami URL. Jika mereka menghantar URL, kami menyimpan URL dan menghantar mesej kejayaan mereka.
<span>// Listener (handler) for telegram's /bookmark event </span>bot<span>.onText(<span>/<span>\/bookmark</span>/</span>, (msg<span>, match</span>) => { </span> <span>const chatId = msg.chat.id; </span> <span>const url = match.input.split(' ')[1]; </span> <span>// 'msg' is the received Message from Telegram </span> <span>// 'match' is the result of executing the regexp above on the text content </span> <span>// of the message </span> <span>if (url === undefined) { </span> bot<span>.sendMessage( </span> chatId<span>, </span> <span>'Please provide URL of article!', </span> <span>); </span> <span>return; </span> <span>} </span> <span>URLs.push(url); </span> bot<span>.sendMessage( </span> chatId<span>, </span> <span>'URL has been successfully saved!', </span> <span>); </span><span>}); </span>
anda mungkin perasan kami menggunakan dua parameter untuk fungsi panggil balik Msg dan perlawanan. Harta MSG mewakili mesej penuh yang anda terima sedangkan perlawanan mewakili hasil dari ungkapan biasa yang telah kami tentukan. Imej di bawah menunjukkan anda MSG penuh, dan selepas ---- ia menunjukkan perlawanan.
Apabila kami mencuba perintah kami dalam sembang dengan bot, kami menerima hasil berikut:
Jika anda melihat hasil yang sama, tahniah! Anda baru sahaja membuat arahan bot pertama anda. Mari kita lihat pilihan yang lebih maju seperti menghantar papan kekunci dengan pilihan yang telah ditetapkan.
Sekarang kita tahu bagaimana untuk membuat arahan tersuai, mari kita lihat lebih mendalam pada pilihan papan kekunci. Adalah mungkin untuk menghantar papan kekunci yang telah ditetapkan dengan arahan anda untuk mengehadkan pilihan pengguna. Ia boleh semudah menyekat pengguna untuk menjawab dengan ya atau tidak
Mari kita lihat coretan kod berikut. Kami telah menambah parameter ketiga ke fungsi bot.sendmessage kami. Objek ini mentakrifkan pilihan untuk papan kekunci kami. Jika anda melihat lebih dekat di Reply_markup.Keyboard, anda dapati array yang mengandungi lebih banyak tatasusunan. Setiap array di sini mewakili baris dengan pilihan. Ini membantu anda dengan pilihan pemformatan yang lebih penting atau mempunyai teks butang yang lebih lama.
<span>// Listener (handler) for showcasing different keyboard layout </span>bot<span>.onText(<span>/<span>\/keyboard</span>/</span>, (msg) => { </span> bot<span>.sendMessage(msg.chat.id, 'Alternative keybaord layout', { </span> <span>'reply_markup': { </span> <span>'keyboard': [['Sample text', 'Second sample'], ['Keyboard'], ['I\'m robot']], </span> <span>resize_keyboard: true, </span> <span>one_time_keyboard: true, </span> <span>force_reply: true, </span> <span>} </span> <span>}); </span><span>}); </span>
Kod ini memberikan hasil berikut apabila menghantar mesej /papan kekunci ke bot kami.
Selanjutnya, kita juga boleh menentukan papan kekunci sebaris dengan data tambahan setiap pilihan.
Papan kekunci sebaris akan ditunjukkan dalam sembang, dan tidak di bawah kotak input mesej anda. Seperti yang kita mahu melabelkan URL yang kita serahkan, kita boleh melakukan ini dengan menunjukkan pengguna kategori yang tersedia. Ini adalah bagaimana papan kekunci kami kelihatan sekarang:
Mari kita lihat kod di bawahnya. Reply_markup kini mentakrifkan harta inline_keyboard. Selebihnya markup tetap sama. Setiap array mewakili baris. Walau bagaimanapun, bukannya hanya lulus teks, kita juga boleh lulus objek dengan teks dan callback_data untuk mengetahui pilihan apa yang telah anda pilih.
<span>require('dotenv').config(); </span><span>const TelegramBot = require('node-telegram-bot-api'); </span> <span>const token = process.env.TOKEN; </span> <span>// Created instance of TelegramBot </span><span>const bot = new TelegramBot(token, { </span> <span>polling: true </span><span>}); </span>
Bahagian seterusnya menerangkan cara menggunakan pengendali untuk menerima data panggil balik.
Sekiranya kita mahu menerima data panggilan balik, kita perlu mendengar peristiwa jenis ini.
<span>// Listener (handler) for telegram's /bookmark event </span>bot<span>.onText(<span>/<span>\/bookmark</span>/</span>, (msg<span>, match</span>) => { </span> <span>const chatId = msg.chat.id; </span> <span>const url = match.input.split(' ')[1]; </span> <span>// 'msg' is the received Message from Telegram </span> <span>// 'match' is the result of executing the regexp above on the text content </span> <span>// of the message </span> <span>if (url === undefined) { </span> bot<span>.sendMessage( </span> chatId<span>, </span> <span>'Please provide URL of article!', </span> <span>); </span> <span>return; </span> <span>} </span> <span>URLs.push(url); </span> bot<span>.sendMessage( </span> chatId<span>, </span> <span>'URL has been successfully saved!', </span> <span>); </span><span>}); </span>
Harta Mesej di CallbackQuery mengandungi keseluruhan mesej dari pengguna. Harta data mengandungi data panggil balik kategori kami.
anda mungkin telah melihat ralat reka bentuk sekarang. Bagaimana jika kita mempunyai dua arahan yang menghantar semula data panggilan balik? Anda mungkin mendapat tingkah laku atau balasan yang sangat pelik.
Oleh itu, adalah disyorkan untuk menghantar semula objek JSON yang tersendiri yang juga memegang label untuk mengenal pasti yang memerintah data panggilan balik. Lihatlah amalan terbaik berikut:
<span>// Listener (handler) for showcasing different keyboard layout </span>bot<span>.onText(<span>/<span>\/keyboard</span>/</span>, (msg) => { </span> bot<span>.sendMessage(msg.chat.id, 'Alternative keybaord layout', { </span> <span>'reply_markup': { </span> <span>'keyboard': [['Sample text', 'Second sample'], ['Keyboard'], ['I\'m robot']], </span> <span>resize_keyboard: true, </span> <span>one_time_keyboard: true, </span> <span>force_reply: true, </span> <span>} </span> <span>}); </span><span>}); </span>
Kami sedang dalam perjalanan untuk menjadi Telegram Bot Jedis. Untuk menjadi tuan yang dipelajari sepenuhnya, mari kita meneroka permintaan data.
3.3 Permintaan Data - Nombor Telefon
<span>// Listener (handler) for telegram's /label event </span>bot<span>.onText(<span>/<span>\/label</span>/</span>, (msg<span>, match</span>) => { </span> <span>const chatId = msg.chat.id; </span> <span>const url = match.input.split(' ')[1]; </span> <span>if (url === undefined) { </span> bot<span>.sendMessage( </span> chatId<span>, </span> <span>'Please provide URL of article!', </span> <span>); </span> <span>return; </span> <span>} </span> tempSiteURL <span>= url; </span> bot<span>.sendMessage( </span> chatId<span>, </span> <span>'URL has been successfully saved!', </span> <span>{ </span> <span>reply_markup: { </span> <span>inline_keyboard: [[ </span> <span>{ </span> <span>text: 'Development', </span> <span>callback_data: 'development' </span> <span>}, { </span> <span>text: 'Lifestyle', </span> <span>callback_data: 'lifestyle' </span> <span>}, { </span> <span>text: 'Other', </span> <span>callback_data: 'other' </span> <span>} </span> <span>]] </span> <span>} </span> <span>} </span> <span>); </span><span>}); </span>
Untuk membina chatbot telegram dengan node.js, anda perlu mempunyai pemahaman asas tentang JavaScript dan Node.js. Anda juga perlu memasang Node.js dan NPM (Pengurus Pakej Node) pada komputer anda. Di samping itu, anda perlu membuat bot di telegram menggunakan botfather, yang akan memberi anda tanda yang anda akan gunakan untuk berinteraksi dengan API Telegram. 🎜> Botfather adalah bot di telegram yang membolehkan anda membuat bot baru. Untuk membuat bot baru, mulakan sembang dengan Botfather, kemudian ikuti arahan. Anda akan diminta memilih nama dan nama pengguna untuk bot anda. Sebaik sahaja anda telah melakukan ini, Botfather akan memberi anda token, yang anda akan gunakan untuk berinteraksi dengan API Telegram. 🎜> Untuk berinteraksi dengan API Telegram menggunakan node.js, anda boleh menggunakan pakej nod-telegram-bot-api. Pakej ini menyediakan antara muka yang mudah dan kuat untuk API Telegram. Anda boleh memasangnya menggunakan npm, kemudian memerlukannya dalam kod anda. Anda kemudian boleh membuat bot baru menggunakan token yang disediakan oleh Botfather, dan menggunakan kaedah yang disediakan oleh pakej untuk berinteraksi dengan API. Pakej Node-Telegram-Bot-API menyediakan kaedah Ontext, yang boleh anda gunakan untuk mengendalikan mesej teks yang dihantar ke bot anda. Kaedah ini mengambil ungkapan biasa dan fungsi panggil balik sebagai hujah. Fungsi panggil balik dipanggil apabila mesej yang sepadan dengan ungkapan biasa diterima. Objek Mesej diserahkan kepada fungsi panggil balik, yang boleh anda gunakan untuk membalas mesej. Gunakan kaedah SendMessage yang disediakan oleh pakej Node-Telegram-Bot-API. Kaedah ini mengambil dua hujah: ID sembang penerima, dan teks mesej. Anda boleh mendapatkan ID sembang dari objek mesej yang dihantar ke fungsi panggil balik kaedah ontext.
Pakej nod-telegram-bot-api menyediakan kaedah untuk mengendalikan pelbagai jenis mesej. Sebagai contoh, anda boleh menggunakan kaedah OnPhoto untuk mengendalikan mesej foto, atau kaedah onsticker untuk mengendalikan mesej pelekat. Kaedah ini berfungsi sama dengan kaedah ontext, mengambil fungsi panggil balik yang dipanggil apabila mesej jenis yang sepadan diterima. Tambah arahan tersuai ke bot anda menggunakan kaedah arahan yang disediakan oleh pakej nod-telegram-bot-api. Kaedah ini mengambil rentetan dan fungsi panggilan balik sebagai argumen. Rentetan adalah nama arahan, dan fungsi panggil balik dipanggil apabila arahan diterima. Anda boleh menggunakan objek mesej yang dihantar ke fungsi panggil balik untuk bertindak balas terhadap arahan. bidang sembang. Pakej Node-Telegram-Bot-API menyediakan kaedah oninlineQuery, yang boleh anda gunakan untuk mengendalikan pertanyaan sebaris. Kaedah ini mengambil fungsi panggil balik, yang dipanggil apabila pertanyaan sebaris diterima. Anda boleh menggunakan objek pertanyaan sebaris yang diluluskan kepada fungsi panggil balik untuk menjawab pertanyaan. Satu kaedah biasa ialah menggunakan penyataan Console.log dalam kod anda untuk mencetak maklumat mengenai keadaan bot anda. Anda juga boleh menggunakan alat debugging seperti debugger node.js atau devtools krom. Di samping itu, pakej nod-telegram-bot-api menyediakan kaedah onError, yang boleh anda gunakan untuk mengendalikan sebarang kesilapan yang berlaku semasa bot anda sedang berjalan.
Atas ialah kandungan terperinci Cara Membina Chatbot Telegram Pertama Anda Dengan Node.js. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!