Bot Telegram dengan Python. Panduan lengkap untuk menulis bot dengan nilai tukar dari awal

Bot di Telegram adalah program yang membantu menjalin kontak dengan audiens atau menyederhanakan tindakan yang sebelumnya harus dilakukan secara manual. Program-program ini ditulis khusus untuk platform messenger. Bot bekerja dengan cara ini: pengguna mengirim perintah melalui baris input, dan sistem merespons dengan teks atau pesan interaktif. Terkadang program bahkan meniru tindakan orang sungguhan – bot semacam itu menginspirasi lebih banyak kepercayaan di antara pelanggan.

Ada beberapa jenis sistem untuk bantuan otomatis kepada pengguna. Beberapa bot hanya berkomunikasi dengan pelanggan, yang lain secara teratur memberikan informasi. Tidak mungkin untuk secara jelas membagi program menjadi beberapa jenis – pengembang sering menggabungkan beberapa fungsi dalam satu bot.

Anda dapat menulis bot sederhana untuk Telegram dengan elemen interaktif berupa tombol di layar dalam 9 langkah. Mari kita lihat masing-masing secara rinci dan jawab beberapa pertanyaan:

  • cara memulai bot;
  • cara mendaftarkan keyboard bawaan dari satu atau lebih tombol;
  • cara memprogram tombol untuk fungsi yang diinginkan;
  • apa itu mode inline dan bagaimana cara mengaturnya untuk bot yang ada.

Langkah 0: latar belakang teoretis tentang API bot Telegram

Alat utama yang digunakan untuk membuat bot Telegram adalah Antarmuka Pemrograman Aplikasi HTML, atau HTML API. Elemen ini menerima permintaan pengunjung dan mengirimkan tanggapan berupa informasi. Desain yang sudah jadi menyederhanakan pekerjaan pada program. Untuk menulis bot untuk Telegram, Anda perlu menggunakan alamat email ini: https://api.telegram.org/bot/METHOD_NAME

Agar bot berfungsi dengan benar, token juga diperlukan – kombinasi karakter yang melindungi program dan membuka aksesnya ke pengembang tepercaya. Setiap token adalah unik. String ditugaskan ke bot saat dibuat. Metodenya bisa berbeda: getUpdates, getChat, dan lainnya. Pilihan metode tergantung pada algoritma apa yang diharapkan pengembang dari bot. Contoh token:

123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11

Bot menggunakan permintaan GET dan POST. Parameter metode sering kali harus ditambahkan – misalnya, ketika metode sendMessage seharusnya mengirim id obrolan dan beberapa teks. Parameter untuk penyempurnaan metode dapat diteruskan sebagai string kueri URL menggunakan application/x-www-form-urlencoded atau melalui application-json. Metode ini tidak cocok untuk mengunduh file. Encoding UTF-8 juga diperlukan. Dengan mengirimkan permintaan ke API, Anda bisa mendapatkan hasilnya dalam format JSON. Lihatlah respons program untuk mengambil informasi melalui metode getME:

DAPATKAN https://api.telegram.org/bot/getMe{ ok: benar, hasil: { id: 231757398, first_name: "Bot Nilai Tukar", nama pengguna: "exchangetestbot" } }

Hasil akan diperoleh jika ok sama dengan benar. Jika tidak, sistem akan menunjukkan kesalahan.

Ada dua cara untuk mendapatkan pesan khusus di bot. Kedua metode ini efektif, tetapi cocok untuk kasus yang berbeda. Untuk mendapatkan pesan, Anda dapat menulis permintaan secara manual dengan metode getUpdates – program akan menampilkan array Update data di layar. Permintaan harus dikirim secara teratur, setelah menganalisis setiap array, pengiriman diulang. Offset adalah parameter yang menentukan jumlah catatan yang dilewati sebelum memuat hasil baru untuk menghindari kemunculan kembali objek yang diperiksa. Manfaat metode getUpdates akan berperan jika:

  • tidak ada cara untuk mengonfigurasi HTTPS;
  • bahasa skrip yang kompleks digunakan;
  • server bot berubah dari waktu ke waktu;
  • bot dimuat dengan pengguna.

Metode kedua yang dapat ditulis untuk menerima pesan pengguna adalah setWebhook. Ini digunakan sekali, tidak perlu terus-menerus mengirim permintaan baru. Webhook mengirimkan pembaruan data ke URL yang ditentukan. Metode ini memerlukan sertifikat SSL. Webhook akan berguna dalam kasus ini:

  • bahasa pemrograman web digunakan;
  • bot tidak kelebihan beban, pengguna tidak terlalu banyak;
  • server tidak berubah, program tetap berada di server yang sama untuk waktu yang lama.

Dalam instruksi lebih lanjut, kami akan menggunakan getUpdates.

Layanan Telegram @BotFather dirancang untuk membuat bot obrolan. Pengaturan dasar juga diatur melalui sistem ini – BotFather akan membantu Anda membuat deskripsi, memasang foto profil, menambahkan alat pendukung. Perpustakaan – kumpulan permintaan HTML untuk bot Telegram – tersedia di Internet, jumlahnya cukup banyak. Saat membuat program contoh, pyTelegramBotApi digunakan.

Langkah 1: Menerapkan Permintaan Nilai Tukar

Pertama, Anda perlu menulis kode yang melakukan kueri. Kami akan menggunakan saat menulis API PrivatBank, di bawah ini adalah tautannya: https://api.privatbank.ua/p24api/pubinfo?json&exchange&coursid=5. Anda perlu menggunakan metode ini dalam kode Anda:

  • load_exchange – menemukan nilai tukar dan menampilkan informasi yang disandikan;
  • get_exchange – menampilkan data tentang mata uang tertentu;
  • get_exchanges – menampilkan daftar mata uang sesuai dengan sampel.

Hasilnya, kode dalam file pb.py terlihat seperti ini:

impor ulang permintaan impor import json URL = 'https://api.privatbank.ua/p24api/pubinfo?json&exchange&coursid=5' def load_exchange(): return json.loads(requests.get(URL).text) def get_exchange(ccy_key ): untuk exc di load_exchange(): if ccy_key == exc['ccy']: return exc return False def get_exchanges(ccy_pattern): result = [] ccy_pattern = re.escape(ccy_pattern) + '.*' untuk exc di load_exchange(): jika re.match(ccy_pattern, exc['ccy'], re.IGNORECASE) bukan None: result.append(exc) mengembalikan hasil

Program dapat mengeluarkan respons berikut untuk permintaan yang ditentukan:

[ { ccy:"USD", base_ccy:"UAH", beli:"25.90000", sale:"26.25000" }, { ccy:"EUR", base_ccy:"UAH", beli:"29.10000", sale:"29.85000 " }, { ccy:"RUR", base_ccy:"UAH", beli:"0.37800", sale:"0.41800" }, { ccy:"BTC", base_ccy:"USD", beli:"11220.0384", sale: "12401.0950" } ]

Langkah 2: Buat Bot Telegram dengan @BotFather

Anda dapat membuat program untuk menerima pesan dan menanggapinya menggunakan layanan @BotFather. Buka halaman Telegram-nya dan masukkan perintah /newbot. Instruksi akan muncul di obrolan, yang menurutnya Anda harus menuliskan nama bot terlebih dahulu, lalu alamatnya. Saat akun bot dibuat, pesan selamat datang yang berisi token akan muncul di layar. Untuk konfigurasi lebih lanjut, gunakan perintah ini:

  • /setdescription – deskripsi;
  • /setabouttext – informasi tentang bot baru;
  • /setuserpic – foto profil;
  • / setinline – mode sebaris;
  • /setcommands – deskripsi perintah.

Pada langkah konfigurasi terakhir, kami menjelaskan /help dan /exchange. Ketika semua langkah telah selesai, saatnya untuk beralih ke pengkodean.

Langkah 3: Menyiapkan dan Meluncurkan Bot

Mari kita buat file config.py. Di dalamnya, Anda perlu menentukan kode bot unik dan zona waktu di mana program akan menemukan informasi.

TOKEN = '' # ganti dengan token bot AndaTIMEZONE = 'Europe/Kiev' TIMEZONE_COMMON_NAME = 'Kiev'

Selanjutnya, kami membuat file lain dengan mengimpor pb.py yang ditulis sebelumnya, perpustakaan, dan komponen lain yang diperlukan. Pustaka yang hilang diinstal dari sistem manajemen paket (pip).

impor telebotimport configimport pbimport datetimeimport pytzimport jsonimport traceback P_TIMEZONE = pytz.timezone(config.TIMEZONE) TIMEZONE_COMMON_NAME = config.TIMEZONE_COMMON_NAME

Mari kita gunakan konten pyTelegramBotApi untuk membuat bot. Kami mengirim token yang diterima menggunakan kode berikut:

bot = telebot.TeleBot(config.TOKEN) bot.polling(none_stop=True)

Parameter none_stop memastikan bahwa permintaan terus dikirim. Pengoperasian parameter tidak akan terpengaruh oleh kesalahan metode.

Langkah 4: Tulis /start Command Handler

Jika semua langkah sebelumnya dilakukan dengan benar, bot sudah mulai bekerja. Program menghasilkan permintaan secara teratur karena menggunakan metode getUpdates. Sebelum baris dengan elemen none_stop, kita memerlukan sepotong kode yang memproses perintah /start:

@bot.message_handler(commands=['start']) def start_command(message): bot.send_message( message.chat.id, 'Greetings! I can show you exchange rates.n' + 'Untuk mendapatkan nilai tukar tekan / exchange.n' + 'Untuk mendapatkan bantuan tekan /help.' )

RSЂRё perintah=['mulai'] sama dengan Benar start_command dipanggil. Isi pesannya ada di sana. Selanjutnya, Anda perlu mengimplementasikan fungsi kirim_pesan dalam kaitannya dengan pesan tertentu.

Langkah 5: Buat /help Command Handler

Perintah /help dapat diimplementasikan sebagai tombol. Dengan mengkliknya, pengguna akan dibawa ke akun Telegram pengembang. Beri nama tombol, seperti "Tanya pengembang". Setel parameter reply_markup, yang mengarahkan pengguna ke tautan, untuk metode send_message. Mari kita tulis dalam kode parameter yang membuat keyboard (InlineKeyboardMarkup). Anda hanya perlu satu tombol (InlineKeyboardButton).

Kode pengendali perintah terakhir terlihat seperti ini:

@bot.message_handler(commands=['help']) def help_command(message): keyboard = telebot.types.InlineKeyboardMarkup() keyboard.add( telebot.types.InlineKeyboardButton( 'Tanya pengembang', url='ваша а а офиль' ) ) bot.send_message( message.chat.id, '1) Untuk menerima daftar mata uang yang tersedia tekan /exchange.n' + '2) Klik pada mata uang yang Anda minati.n' + '3) Anda akan menerima pesan yang berisi informasi mengenai sumber dan mata uang target, ' + 'kurs beli dan kurs jual.n' + '4) Klik “Perbarui” untuk menerima informasi terkini terkait permintaan. ' + 'Bot juga akan menunjukkan perbedaan antara nilai tukar sebelumnya dan saat ini.n' + '5) Bot mendukung inline. Jenis @ dalam obrolan apa pun dan huruf pertama mata uang.', reply_markup=keyboard )

Tindakan kode dalam obrolan Telegram:

Bot Telegram dengan Python. Panduan lengkap untuk menulis bot dengan nilai tukar dari awal

Langkah 6: Menambahkan /exchange Command Handler

Langkah ini diperlukan untuk menampilkan tombol dengan simbol mata uang yang tersedia di chat. Papan ketik di layar dengan opsi akan membantu Anda menghindari kesalahan. PrivatBank menyediakan informasi tentang rubel, dolar, dan euro. Opsi InlineKeyboardButton berfungsi seperti ini:

  1. Pengguna mengklik tombol dengan penunjukan yang diinginkan.
  2. getUpdates menerima panggilan balik (CallbackQuery).
  3. Menjadi diketahui bagaimana menangani penekanan keyboard – informasi tentang tombol yang ditekan ditransmisikan.

/exchange handler kode:

@bot.message_handler(commands=['exchange']) def exchange_command(message): keyboard = telebot.types.InlineKeyboardMarkup() keyboard.row( telebot.types.InlineKeyboardButton('USD', callback_data='get-USD') ) keyboard.row( telebot.types.InlineKeyboardButton('EUR', callback_data='get-EUR'), telebot.types.InlineKeyboardButton('RUR', callback_data='get-RUR') ) bot.send_message( message.chat .id, 'Klik pada mata uang pilihan:', reply_markup=keyboard )

Hasil dari kode di Telegram:

Bot Telegram dengan Python. Panduan lengkap untuk menulis bot dengan nilai tukar dari awal

Langkah 7: Menulis handler untuk tombol keyboard bawaan

Paket pyTelegramBot Api berisi fungsi dekorator @bot.callback_query_handler. Komponen ini dirancang untuk menerjemahkan panggilan balik menjadi suatu fungsi – API membuka dan membuat ulang panggilan. Ini dieja seperti ini:

@bot.callback_query_handler(func=lambda call: True) def iq_callback(query): data = query.data if data.startswith('get-'): get_ex_callback(query)

Mari kita juga menulis metode get_ex_callback:

def get_ex_callback(query): bot.answer_callback_query(query.id) send_exchange_result(query.message, query.data[4:])

Ada metode lain yang berguna – answer_callback_query. Ini membantu untuk menghilangkan beban antara menekan tombol dan menampilkan hasilnya di layar. Anda dapat mengirim pesan ke send_exchange_query dengan mengirimkan beberapa kode mata uang dan Pesan. Mari kita tulis send_exchange_result:

def send_exchange_result(message, ex_code): bot.send_chat_action(message.chat.id, 'mengetik') ex = pb.get_exchange(ex_code) bot.send_message( message.chat.id, serialize_ex(ex), reply_markup=get_update_keyboard(ex ), parse_mode='HTML' )

Sedangkan chatbot menerima hasil request dari bank API, pengunjung melihat tulisan “mengetik pesan”. Sepertinya orang sungguhan yang menjawab. Untuk menampilkan indikator seperti itu di layar, Anda perlu menambahkan baris status input. Selanjutnya, kita akan menggunakan get_exchange – dengan bantuannya, program akan menerima penunjukan mata uang (rubel, euro, atau dolar). send_message menggunakan metode tambahan: serialize_ex mengonversi mata uang ke format lain, dan get_update_keyboard menyiapkan tombol lunak yang memperbarui informasi dan mengirim data pasar mata uang ke obrolan lain.

Mari kita tulis kode untuk get_update_keyboard. Dua tombol perlu disebutkan – t dan e berarti tipe dan pertukaran. Item switch_inline_query untuk tombol Bagikan diperlukan agar pengguna dapat memilih dari beberapa obrolan. Pengunjung akan dapat memilih kepada siapa akan mengirim nilai tukar dolar, rubel, atau euro saat ini.

def get_update_keyboard(ex): keyboard = telebot.types.InlineKeyboardMarkup() keyboard.row( telebot.types.InlineKeyboardButton( 'Update', callback_data=json.dumps({ 't': 'u', 'e': { ' b': ex['beli'], 's': ex['sale'], 'c': ex['ccy'] } }).replace(' ', '') ), telebot.types.InlineKeyboardButton ('Bagikan', switch_inline_query=ex['ccy']) ) kembalikan keyboard

Terkadang Anda perlu melihat seberapa besar nilai tukar telah berubah dalam waktu singkat. Mari kita tulis dua metode untuk tombol Perbarui sehingga pengguna dapat melihat kursus sebagai perbandingan.

Perbedaan antara nilai tukar diteruskan ke serializer melalui parameter diff.

Metode yang ditentukan hanya berfungsi setelah data diperbarui, mereka tidak akan memengaruhi tampilan pertama kursus.

def serialize_ex(ex_json, diff=None): hasil = '' + ex_json['base_ccy'] + ' -> ' + ex_json['ccy'] + ':nn' + 'Beli: ' + ex_json['beli'] jika diff: hasil += ' ' + serialize_exchange_diff(diff['beli_diff']) + 'n' + 'Jual: ' + ex_json['sale'] + ' ' + serialize_exchange_diff(diff['sale_diff']) + 'n' else: result += 'nSell: ' + ex_json['sale'] + 'n' return result def serialize_exchange_diff(diff): result = '' if diff > 0: hasil = '(' + str(diff) + ' " src="https://sworg/images/core/emoji/2.3/svg/2197.svg">" src="https://sworg/images /core/emoji/72x72/2197.png">" src="https://sworg/images/core/emoji/72x72/2197.png">)' elif diff < 0: result = '(' + str( diff)[1:] + ' " src="https://sworg/images/core/emoji/2.3/svg/2198.svg">" src="https://sworg/images/core/emoji/72x72 /2198.png">" src="https://sworg/images/core/emoji/72x72/2198.png">)' mengembalikan hasil

Bayangkan jika pengunjung ingin mengetahui nilai tukar dolar. Inilah yang terjadi jika Anda memilih USD dalam pesan:

Bot Telegram dengan Python. Panduan lengkap untuk menulis bot dengan nilai tukar dari awal

Langkah 8: Menerapkan Update Button Handler

Mari tulis kode untuk menangani tindakan dengan tombol Perbarui dan tambahkan bagian iq_callback_method ke dalamnya. Ketika item program dimulai dengan parameter get, Anda harus menulis get_ex_callback. Dalam situasi lain, kami mengurai JSON dan mencoba mendapatkan kunci t.

@bot.callback_query_handler(func=lambda call: True) def iq_callback(query): data = query.data if data.startswith('get-'): get_ex_callback(query) else: try: if json.loads(data)[ 't'] == 'u': edit_message_callback(query) kecuali ValueError: lulus

Jika t sama dengan u, Anda perlu menulis program untuk metode edit_message_callback. Mari kita uraikan proses ini langkah demi langkah:

  1. Mengunduh informasi terkini tentang keadaan pasar mata uang (exchange_now = pb.get_exchange(data['c']).
  1. Menulis pesan baru melalui serializer dengan diff.
  2. Menambahkan tanda tangan (get_edited_signature).

Jika pesan awal tidak berubah, panggil metode edit_message_text.

def edit_message_callback(query): data = json.loads(query.data)['e'] exchange_now = pb.get_exchange(data['c']) text = serialize_ex( exchange_now, get_exchange_diff( get_ex_from_iq_data(data), exchange_now ) ) + 'n' + get_edited_signature() jika query.message: bot.edit_message_text( text, query.message.chat.id, query.message.message_id, reply_markup=get_update_keyboard(exchange_now), parse_mode='HTML' ) elif query.inline_message_id : bot.edit_message_text( teks, inline_message_id=query.inline_message_id, reply_markup=get_update_keyboard(exchange_now), parse_mode='HTML' )

Mari kita tulis metode get_ex_from_iq_data untuk mengurai JSON:

def get_ex_from_iq_data(exc_json): kembali { 'beli': exc_json['b'], 'penjualan': exc_json['s'] }

Anda akan memerlukan beberapa metode lagi: misalnya, get_exchange_diff, yang membaca informasi lama dan baru tentang biaya mata uang dan menampilkan perbedaannya.

def get_exchange_diff(terakhir, sekarang): return { 'sale_diff': float("%.6f" % (float(now['sale']) - float(last['sale']))), 'buy_diff': float ("%.6f" % (float(sekarang['beli']) - float(terakhir['beli']))) }

Yang terakhir, get_edited_signature, menunjukkan waktu terakhir kali kursus diperbarui.

def get_edited_signature(): kembalikan 'Diperbarui ' + str(datetime.datetime.now(P_TIMEZONE).strftime('%H:%M:%S')) + ' (' + TIMEZONE_COMMON_NAME + ')'

Akibatnya, pesan yang diperbarui dari bot dengan nilai tukar yang stabil terlihat seperti ini:

Bot Telegram dengan Python. Panduan lengkap untuk menulis bot dengan nilai tukar dari awal

Saat kursus berubah, perbedaan antara nilai ditampilkan dalam pesan karena parameter yang ditentukan.

Bot Telegram dengan Python. Panduan lengkap untuk menulis bot dengan nilai tukar dari awal

Langkah 9: Implementasi Mode Tertanam

Mode bawaan diperlukan untuk dengan cepat mengirim informasi dari program ke obrolan apa pun – sekarang Anda tidak perlu menambahkan bot ke percakapan sebagai peserta. Ketika pengguna Telegram memasukkan nama bot dengan tanda @ di depannya, opsi konversi akan muncul di atas baris input. Jika Anda mengklik salah satu item, bot akan mengirim pesan ke percakapan dengan hasil dan tombol untuk memperbarui dan mengirim data. Nama pengirim akan berisi keterangan “via ".

InlineQuery diteruskan ke query_text melalui perpustakaan. Kode menggunakan fungsi answer_line untuk mengambil hasil pencarian sebagai larik data dan elemen inline_query_id. Kami menggunakan get_exchanges sehingga bot menemukan beberapa mata uang berdasarkan permintaan.

@bot.inline_handler(func=lambda query: True) def query_text(inline_query): bot.answer_inline_query( inline_query.id, get_iq_articles(pb.get_exchanges(inline_query.query)) )

Kami meneruskan array data ke get_iq_articles untuk mengembalikan objek dari InlineQueryResultArticle melalui metode ini.

def get_iq_articles(pertukaran): hasil = [] untuk exc dalam pertukaran: result.append( telebot.types.InlineQueryResultArticle( id=exc['ccy'], title=exc['ccy'], input_message_content=telebot.types.InputTextMessageContent ( serialize_ex(exc), parse_mode='HTML' ), reply_markup=get_update_keyboard(exc), description='Convert ' + exc['base_ccy'] + ' -> ' + exc['ccy'], thumb_height=1 ) ) kembali hasil

Sekarang, jika Anda menulis @ dan spasi di baris, hasil pencarian akan muncul di layar – opsi untuk mengkonversi ke tiga mata uang yang tersedia.

Bot Telegram dengan Python. Panduan lengkap untuk menulis bot dengan nilai tukar dari awal

Pengguna dapat menyaring hasil dengan memasukkan mata uang yang diinginkan.

Setelah mengklik mata uang yang diinginkan dari daftar, obrolan menerima pesan yang sama dengan yang diterima pengguna bot. Anda juga dapat menggunakan tombol Perbarui. Gambar di bawah ini menunjukkan pesan yang diperbarui yang dikirim melalui bot:

Bot Telegram dengan Python. Panduan lengkap untuk menulis bot dengan nilai tukar dari awal

Kesimpulan

Sekarang Anda tahu cara membuat bot untuk Telegram. Anda dapat menambahkan alat yang berguna ke program Anda: tombol untuk memperbarui dan mengirim hasilnya ke pengguna messenger lain dan mode bawaan yang memungkinkan Anda menggunakan fungsi bot di luar obrolan dengannya. Berdasarkan instruksi ini, Anda dapat membuat bot sederhana dengan fungsi lain – tidak hanya yang akan menunjukkan nilai tukar. Jangan takut untuk bereksperimen dengan perpustakaan, API, dan kode untuk membuat asisten otomatis yang akan mengobrol dengan pelanggan di Telegram dan memperkuat koneksi orang yang tertarik dengan perusahaan.

1 Komentar

  1. Publikasi fantastis

Tinggalkan Balasan