Membangun Bot Telegram Pertama Anda: Panduan Langkah demi Langkah

Diterbitkan: 2022-03-11

Chatbots sering disebut-sebut sebagai revolusi dalam cara pengguna berinteraksi dengan teknologi dan bisnis. Mereka memiliki antarmuka yang cukup sederhana dibandingkan dengan aplikasi tradisional, karena mereka hanya mengharuskan pengguna untuk mengobrol, dan chatbots seharusnya memahami dan melakukan apa pun yang diminta pengguna dari mereka, setidaknya secara teori.

Banyak industri mengalihkan layanan pelanggan mereka ke sistem chatbot. Itu karena penurunan besar dalam biaya dibandingkan dengan manusia yang sebenarnya, dan juga karena ketahanan dan ketersediaan yang konstan. Chatbots memberikan tingkat dukungan pengguna tanpa biaya tambahan yang substansial.

Saat ini, chatbot digunakan dalam banyak skenario, mulai dari tugas-tugas kasar seperti menampilkan data waktu dan cuaca hingga operasi yang lebih kompleks seperti diagnosis medis dasar dan komunikasi/dukungan pelanggan. Anda dapat merancang chatbot yang akan membantu pelanggan Anda ketika mereka mengajukan pertanyaan tertentu tentang produk Anda, atau Anda dapat membuat chatbot asisten pribadi yang dapat menangani tugas-tugas dasar dan mengingatkan Anda kapan waktunya untuk pergi ke rapat atau gym.

Ada banyak pilihan di mana Anda dapat menggunakan chatbot Anda, dan salah satu penggunaan yang paling umum adalah platform media sosial, karena kebanyakan orang menggunakannya secara teratur. Hal yang sama dapat dikatakan tentang aplikasi perpesanan instan, meskipun dengan beberapa peringatan.

Telegram adalah salah satu platform IM yang lebih populer saat ini, karena memungkinkan Anda untuk menyimpan pesan di cloud, bukan hanya di perangkat Anda, dan juga menawarkan dukungan multi-platform yang baik, karena Anda dapat memiliki Telegram di Android, iOS, Windows, dan hampir platform lain yang dapat mendukung versi web. Membangun chatbot di Telegram cukup sederhana dan membutuhkan beberapa langkah yang membutuhkan sedikit waktu untuk menyelesaikannya. Chatbot dapat diintegrasikan dalam grup dan saluran Telegram, dan juga berfungsi sendiri.

Dalam tutorial ini, kami akan membuat bot Telegram yang memberi Anda gambar avatar dari Avatar yang Menggemaskan. Contoh kita akan melibatkan pembuatan bot menggunakan Flask dan menyebarkannya di server Heroku gratis.

Untuk menyelesaikan tutorial ini, Anda perlu menginstal Python 3 di sistem Anda serta keterampilan pengkodean Python. Selain itu, pemahaman yang baik tentang cara kerja aplikasi akan menjadi tambahan yang bagus, tetapi bukan keharusan, karena kami akan membahas sebagian besar hal yang kami sajikan secara mendetail. Anda juga perlu menginstal Git di sistem Anda.

Tentu saja, tutorialnya juga membutuhkan akun Telegram yang gratis. Anda dapat mendaftar di sini. Akun Heroku juga diperlukan, dan Anda bisa mendapatkannya secara gratis di sini.

Menghidupkan Bot Telegram Anda

Untuk membuat chatbot di Telegram, Anda perlu menghubungi BotFather, yang pada dasarnya adalah bot yang digunakan untuk membuat bot lain.

Perintah yang Anda butuhkan adalah /newbot yang mengarah ke langkah-langkah berikut untuk membuat bot Anda:

Tutorial bot Telegram - contoh tangkapan layar

Bot Anda harus memiliki dua atribut: nama dan nama pengguna. Nama akan muncul untuk bot Anda, sedangkan nama pengguna akan digunakan untuk menyebutkan dan berbagi.

Setelah memilih nama bot dan nama pengguna Anda—yang harus diakhiri dengan “bot”—Anda akan mendapatkan pesan yang berisi token akses Anda, dan Anda jelas harus menyimpan token akses dan nama pengguna Anda untuk nanti, karena Anda akan membutuhkannya.

Kode Logika Chatbot

Kami akan menggunakan Ubuntu dalam tutorial ini. Untuk pengguna Windows, sebagian besar perintah di sini akan berfungsi tanpa masalah, tetapi jika Anda menghadapi masalah dengan pengaturan lingkungan virtual, silakan lihat tautan ini. Untuk pengguna Mac, tutorial ini akan berfungsi dengan baik.

Pertama, mari kita buat lingkungan virtual. Ini membantu mengisolasi persyaratan proyek Anda dari lingkungan Python global Anda.

 $ python -m venv botenv/

Sekarang kita akan memiliki direktori botenv/ yang akan berisi semua pustaka Python yang akan kita gunakan. Silakan dan aktifkan virtualenv menggunakan perintah berikut:

 $ source botenv/bin/activate

Pustaka yang kami butuhkan untuk bot kami adalah:

  • Flask: Kerangka kerja web mikro yang dibangun dengan Python.
  • Python-telegram-bot: Pembungkus Telegram dengan Python.
  • Permintaan: Pustaka http Python yang populer.

Anda dapat menginstalnya di lingkungan virtual menggunakan perintah pip sebagai berikut:

 (telebot) $ pip install flask (telebot) $ pip install python-telegram-bot (telebot) $ pip install requests

Sekarang mari kita menelusuri direktori proyek kita.

 . ├── app.py ├── telebot │ ├── credentials.py │ | . │ | you can build your engine here │ | . │ └── __init__.py └── botenv

Dalam file credentials.py kita akan membutuhkan tiga variabel:

 bot_token = "here goes your access token from BotFather" bot_user_name = "the username you entered" URL = "the heroku app link that we will create later"

Sekarang mari kita kembali ke app.py kita dan membaca kode langkah demi langkah:

 # import everything from flask import Flask, request import telegram from telebot.credentials import bot_token, bot_user_name,URL
 global bot global TOKEN TOKEN = bot_token bot = telegram.Bot(token=TOKEN)

Sekarang kita memiliki objek bot yang akan digunakan untuk tindakan apa pun yang kita perlukan untuk dilakukan oleh bot.

 # start the flask app app = Flask(__name__)

Kita juga perlu mengikat fungsi ke rute tertentu. Dengan kata lain, kita perlu memberi tahu Flask apa yang harus dilakukan ketika alamat tertentu dipanggil. Info lebih detail tentang Flask dan rute dapat ditemukan di sini.

Dalam contoh kami, fungsi rute merespons URL yang pada dasarnya adalah /{token} , dan ini adalah URL yang akan dipanggil Telegram untuk mendapatkan respons atas pesan yang dikirim ke bot.

 @app.route('/{}'.format(TOKEN), methods=['POST']) def respond(): # retrieve the message in JSON and then transform it to Telegram object update = telegram.Update.de_json(request.get_json(force=True), bot) chat_id = update.message.chat.id msg_id = update.message.message_id # Telegram understands UTF-8, so encode text for unicode compatibility text = update.message.text.encode('utf-8').decode() # for debugging purposes only print("got text message :", text) # the first time you chat with the bot AKA the welcoming message if text == "/start": # print the welcoming message bot_welcome = """ Welcome to coolAvatar bot, the bot is using the service from http://avatars.adorable.io/ to generate cool looking avatars based on the name you enter so please enter a name and the bot will reply with an avatar for your name. """ # send the welcoming message bot.sendMessage(chat_id=chat_id, text=bot_welcome, reply_to_message_id=msg_id) else: try: # clear the message we got from any non alphabets text = re.sub(r"\W", "_", text) # create the api link for the avatar based on http://avatars.adorable.io/ url = "https://api.adorable.io/avatars/285/{}.png".format(text.strip()) # reply with a photo to the name the user sent, # note that you can send photos by url and telegram will fetch it for you bot.sendPhoto(chat_id=chat_id, photo=url, reply_to_message_id=msg_id) except Exception: # if things went wrong bot.sendMessage(chat_id=chat_id, text="There was a problem in the name you used, please enter different name", reply_to_message_id=msg_id) return 'ok'

Cara intuitif untuk membuat fungsi ini bekerja adalah kita akan memanggilnya setiap detik, sehingga memeriksa apakah pesan baru telah tiba, tetapi kita tidak akan melakukannya. Sebagai gantinya, kami akan menggunakan Webhook yang memberi kami cara untuk membiarkan bot memanggil server kami setiap kali pesan dipanggil, sehingga kami tidak perlu membuat server kami menderita dalam loop sementara menunggu pesan datang.

Jadi, kami akan membuat fungsi yang kami sendiri perlu panggil untuk mengaktifkan Webhook Telegram, pada dasarnya memberitahu Telegram untuk memanggil tautan tertentu ketika pesan baru tiba. Kami akan memanggil fungsi ini satu kali saja, ketika kami pertama kali membuat bot. Jika Anda mengubah tautan aplikasi, maka Anda harus menjalankan fungsi ini lagi dengan tautan baru yang Anda miliki.

Rute di sini bisa apa saja; Andalah yang akan menyebutnya:

 @app.route('/setwebhook', methods=['GET', 'POST']) def set_webhook(): # we use the bot object to link the bot to our app which live # in the link provided by URL s = bot.setWebhook('{URL}{HOOK}'.format(URL=URL, HOOK=TOKEN)) # something to let us know things work if s: return "webhook setup ok" else: return "webhook setup failed"

Sekarang semuanya sudah diatur, mari kita buat beranda yang bagus sehingga kita tahu mesinnya sudah menyala.

 @app.route('/') def index(): return '.' if __name__ == '__main__': # note the threaded arg which allow # your app to have more than one thread app.run(threaded=True)

Mari kita lihat versi lengkap app.py:

 import re from flask import Flask, request import telegram from telebot.credentials import bot_token, bot_user_name,URL global bot global TOKEN TOKEN = bot_token bot = telegram.Bot(token=TOKEN) app = Flask(__name__) @app.route('/{}'.format(TOKEN), methods=['POST']) def respond(): # retrieve the message in JSON and then transform it to Telegram object update = telegram.Update.de_json(request.get_json(force=True), bot) chat_id = update.message.chat.id msg_id = update.message.message_id # Telegram understands UTF-8, so encode text for unicode compatibility text = update.message.text.encode('utf-8').decode() # for debugging purposes only print("got text message :", text) # the first time you chat with the bot AKA the welcoming message if text == "/start": # print the welcoming message bot_welcome = """ Welcome to coolAvatar bot, the bot is using the service from http://avatars.adorable.io/ to generate cool looking avatars based on the name you enter so please enter a name and the bot will reply with an avatar for your name. """ # send the welcoming message bot.sendMessage(chat_id=chat_id, text=bot_welcome, reply_to_message_id=msg_id) else: try: # clear the message we got from any non alphabets text = re.sub(r"\W", "_", text) # create the api link for the avatar based on http://avatars.adorable.io/ url = "https://api.adorable.io/avatars/285/{}.png".format(text.strip()) # reply with a photo to the name the user sent, # note that you can send photos by url and telegram will fetch it for you bot.sendPhoto(chat_id=chat_id, photo=url, reply_to_message_id=msg_id) except Exception: # if things went wrong bot.sendMessage(chat_id=chat_id, text="There was a problem in the name you used, please enter different name", reply_to_message_id=msg_id) return 'ok' @app.route('/set_webhook', methods=['GET', 'POST']) def set_webhook(): s = bot.setWebhook('{URL}{HOOK}'.format(URL=URL, HOOK=TOKEN)) if s: return "webhook setup ok" else: return "webhook setup failed" @app.route('/') def index(): return '.' if __name__ == '__main__': app.run(threaded=True)

Itu adalah kode terakhir yang akan Anda tulis di tutorial kami. Sekarang kita dapat melanjutkan ke langkah terakhir, meluncurkan aplikasi kita di Heroku.

Luncurkan Aplikasi Kami di Heroku

Kami membutuhkan beberapa hal sebelum kami membuat aplikasi kami.

Heroku tidak dapat mengetahui pustaka apa yang digunakan proyek Anda, jadi kami harus memberi tahunya menggunakan file requirements.txt —masalah umum adalah Anda salah mengeja persyaratan, jadi berhati-hatilah—untuk membuat file persyaratan menggunakan pip:

 pip freeze > requirements.txt

Sekarang Anda memiliki file persyaratan Anda siap untuk pergi.

Sekarang Anda memerlukan Procfile yang memberi tahu Heroku di mana aplikasi kita dimulai, jadi buat file Procfile dan tambahkan yang berikut ini:

 web: gunicorn app:app

Langkah bouncing: Anda dapat menambahkan file .gitignore ke proyek Anda sehingga file yang tidak digunakan tidak diunggah ke repositori.

Dari dasbor Heroku Anda, buat aplikasi baru. Setelah Anda melakukannya, itu akan mengarahkan Anda ke halaman Deploy . Kemudian, buka tab Pengaturan di jendela baru dan salin domain aplikasi yang akan menjadi seperti https://appname.herokuapp.com/ dan tempel di variabel URL di dalam credentials.py .

Tangkapan layar dasbor Heroku

Sekarang, kembali ke tab Deploy dan lanjutkan dengan langkah-langkah:

Catatan: Pengguna Windows dan macOS dapat mengikuti langkah-langkah yang dijelaskan di sini.

Masuk ke Heroku:

 $ heroku login

Harap dicatat bahwa metode ini terkadang macet dalam waiting for login , jika ini terjadi pada Anda, coba login menggunakan:

 $ heroku login -i

Inisialisasi repositori Git di direktori kami:

 $ git init $ heroku git:remote -a {heroku-project-name}

Terapkan aplikasi:

 $ git add . $ git commit -m "first commit" $ git push heroku master

Pada titik ini, Anda akan melihat kemajuan pembangunan di terminal Anda. Jika semuanya berjalan baik-baik saja, Anda akan melihat sesuatu seperti ini:

 remote: -----> Launching... remote: Released v6 remote: https://project-name.herokuapp.com/ deployed to Heroku remote: remote: Verifying deploy... done.

Sekarang buka halaman aplikasi (tautan domain yang Anda salin sebelumnya) dan tambahkan di akhir tautan /setwebhook sehingga alamatnya akan menjadi seperti https://appname.herokuapp.com/setwebhook . Jika Anda melihat webhook setup ok , itu berarti Anda siap untuk pergi!

Sekarang Bicaralah dengan Bot Anda

Versi langsung dari Telegram chatbot
Versi langsung dari bot

Sentuhan Akhir, Tips, dan Trik

Sekarang Anda memiliki bot Telegram dan berjalan, 24/7, tanpa perlu campur tangan Anda. Anda dapat menambahkan logika apa pun yang Anda inginkan ke bot, jadi, misalnya, Anda dapat membuat bot Anda lebih realistis dengan menambahkan status "mengetik" dan mengirimkan status foto sebagai berikut:

Cuplikan kode berikutnya dari fungsi respond() :

 if text == "/start": # print the welcoming message bot_welcome = """ Welcome to coolAvatar bot, the bot is using the service from http://avatars.adorable.io/ to generate cool looking avatars based on the name you enter so please enter a name and the bot will reply with an avatar for your name. """ # send the welcoming message bot.sendChatAction(chat_id=chat_id, action="typing") sleep(1.5) bot.sendMessage(chat_id=chat_id, text=bot_welcome, reply_to_message_id=msg_id) else: try: # clear the message we got from any non alphabets text = re.sub(r"\W", "_", text) # create the api link for the avatar based on http://avatars.adorable.io/ url = "https://api.adorable.io/avatars/285/{}.png".format(text.strip()) # reply with a photo to the name the user sent, # note that you can send photos by url and telegram will fetch it for you bot.sendChatAction(chat_id=chat_id, action="upload_photo") sleep(2) bot.sendPhoto(chat_id=chat_id, photo=url, reply_to_message_id=msg_id) except Exception: # if things went wrong bot.sendMessage(chat_id=chat_id, text="There was a problem in the name you used, please enter different name", reply_to_message_id=msg_id)

Seperti yang Anda lihat di cuplikan, kami menambahkan tindakan mengetik ketika kami akan mengirim informasi tentang bot yang dalam format teks, dan menambahkan tindakan unggah foto ketika kami akan mengirim foto untuk membuat bot lebih realistis . Lebih banyak tindakan dapat ditemukan di sini.

Anda juga dapat mengubah gambar dan deskripsi bot dari saluran BotFather agar lebih ramah.

Banyak contoh bot telegram yang lebih sederhana dapat ditemukan di halaman python-telegram-bot di GitHub.

Anda dapat membangun bot kami dan menjadikannya bot AI super berikutnya—yang perlu Anda lakukan hanyalah mengintegrasikan logika Anda dalam fungsi respond() . Misalnya, logika Anda dapat berada dalam modul terpisah dan dapat dipanggil di dalam fungsi respond() seperti:

 . ├── app.py ├── telebot │ ├── credentials.py │ ├──ai.py │ | . │ | you can build your engine here │ | . │ └── __init__.py └── botenv

Dan di dalam ai .py :

 def generate_smart_reply(text): # here we can do all our work return "this is a smart reply from the ai!"

Impor sekarang di aplikasi .py :

 import re from time import sleep from flask import Flask, request import telegram From telebot.ai import generate_smart_reply from telebot.credentials import bot_token, bot_user_name,URL

Kemudian panggil saja di dalam kode respond() .

 def respond(): # retrieve the message in JSON and then transform it to Telegram object update = telegram.Update.de_json(request.get_json(force=True), bot) chat_id = update.message.chat.id msg_id = update.message.message_id # Telegram understands UTF-8, so encode text for unicode compatibility text = update.message.text.encode('utf-8').decode() # for debugging purposes only print("got text message :", text) # here call your smart reply message reply = generate_smart_reply(text) bot.sendMessage(chat_id=chat_id, text=reply, reply_to_message_id=msg_id)

Sekarang Anda dapat membuat bot Anda bekerja seperti yang Anda inginkan—lanjutkan dan buat hal besar berikutnya!

Saya harap Anda bersenang-senang membangun bot Telegram pertama Anda.

Sumber daya tambahan

  • Membangun Chatbot menggunakan Telegram dan Python
  • Mengatur Telegram Bot WebHook Anda dengan cara mudah
  • Repositori Python-telegram-bot
  • Menyebarkan dengan Git di Heroku
  • Dokumentasi Python Telegram Bot
Terkait: Buat Chatbot WhatsApp, Bukan Aplikasi