bot

bot


Ketika kami telah menentukan alasan untuk membuat bot , sekarang saatnya untuk memikirkan bagaimana kami berencana untuk mengatur proses pengembangan dan alat apa yang akan kami butuhkan. Lebih lanjut, kami akan menunjukkan dalam praktik bagaimana membuat bot pertama Anda dan bagaimana mengajarkannya untuk mengubah pesan kami keluar.


Pada bagian ini, kami merencanakan bagaimana membangun aplikasi dan alat pengembangan apa yang digunakan. Selanjutnya, kami akan menunjukkan cara membuat bot Telegram pertama Anda dan akan mengajarkannya untuk membalikkan pesan kami. 

Karena ini adalah manual untuk pemula, kami akan menjalankan server dengan satu titik akhir yang akan menerima pesan telegram kami dan akan membuat jawaban.

Untuk itu, kami akan menggunakan alat berikut:

  • bottlehttps://bottlepy.org/docs/dev/ — for our server; a simple and lightweight WSGI micro web-framework
  • requests https://2.python-requests.org//en/master/  — for sending requests to telegram. request lib does not need to be overrepresented. It is universally used throughout the world in a variety of projects.
  • Note: you have to install these tools on your computer. We will need them later. For that, open your bash console and install it via pip

Catatan: Anda harus menginstal alat ini di komputer Anda. Kami akan membutuhkannya nanti. Untuk itu, buka konsol bash Anda dan instal melalui pip


pip install bottle requests


  • ngrok – this is an app which provides us with public URLs for our interaction with Telegram WebHook throughout the development phase (look for info on WebHook below). It is useful, as Telegram will not be able to make a connection with our local server because we cannot specify our local address in the Telegram API configuration.
  • You should download ngrok from the official site  https://ngrok.com/download and put the installed app in the folder with the project.
  • ngrok - ini adalah aplikasi yang memberi kami URL publik untuk interaksi kami dengan Telegram WebHook selama fase pengembangan (lihat info tentang WebHook di bawah). Ini berguna, karena Telegram tidak akan dapat membuat koneksi dengan server lokal kami karena kami tidak dapat menentukan alamat lokal kami dalam konfigurasi API Telegram. 
  • Anda harus mengunduh ngrok dari situs resmi dan meletakkan aplikasi yang terinstal di folder dengan proyek.

Bagaimana Cara Membuat Bot Pertama Anda?

Jika Anda tertarik pada ini, jelajahi bagian ini di mana kami akan memberikan tutorial pengembangan bot Telegram terperinci.


Hal pertama yang pertama. Anda harus mendaftar di Telegram (jelas). Saya merekomendasikan untuk menggunakan klien https://web.telegram.org/  untuk menguji konsep dasar.

Buka aplikasi Telegram, cari @BotFather dan mulai obrolan. Kirim / newbotperintah dan ikuti instruksi. Setelah menyelesaikan langkah-langkah awal, Anda akan mendapatkan -

Wells, sebenarnya itu. Saat ini bot 100% pasif.

Anda perlu menginisialisasi percakapan dengan bot Anda. Buka pencarian dan ketikkan nama bot Anda. Mulai percakapan dengan mengklik tombol / mulai . Ketikkan sesuatu seperti "Halo". Pesan ini penting karena ini adalah pembaruan pertama yang akan diterima bot Anda.

Jika ini adalah pengalaman pertama Anda membangun API, Anda dapat dengan mudah mendapatkan ide menggunakan browser web. Buka tab baru di browser Anda dan gunakan URL api Telegram -

https://api.telegram.org/bot<token>/getUpdates

Ketika Anda membuka URL ini di browser web Anda, Anda membuat permintaan ke server Telegram, yang merespons kembali dengan JSON.Respons menyerupai kamus Python. Anda harus melihat sesuatu seperti ini:

{"ok":true,"result":[{"update_id":523349956, 
 "message":{"message_id":51,"from":{"id":303262877,"first_name":"YourName"},"chat":{"id":303262877,"first_name":"YourName","type":"private"},"date":1486829360,"text":"Hello"}}]} 

Jika Anda membuka dokumentasi bot dan memeriksa / metode bagiansendMessage Anda akan melihat bahwa metode ini memerlukan 2 parameter tambahan chat_id dan teks . Di bilah pencarian browser Anda dapat menggunakan parameter rantai ? untuk yang pertama dan & untuk semua konsekuensinya. Kirim pesan akan terlihat seperti ini -


/sendMessage?chat_id=303262877&text=test

Cobalah untuk mendapatkan balasan dari bot Anda dengan menggantichat_id dengan bot yang Anda dapatkan dengan menelepon / getUpdates .Dalam kasus saya ini adalah 303262877. Parameter teks terserah Anda.Permintaan akan terlihat seperti ini

https://api.telegram.org/bot<your-token>/sendMessage?chat_id=&text=<your-text>


WebHook

(Anda dapat melewati bagian ini jika Anda terbiasa dengan WebHook)


Singkatnya, WebHook adalah konsep API yang semakin populer. Konsep WebHook sederhana. WebHook adalah panggilan balik HTTP: HTTP POST yang terjadi ketika sesuatu terjadi; pemberitahuan acara sederhana melalui HTTP POST.

Untuk menjelaskan lebih banyak, kadang-kadang interaksi antara aplikasi online memerlukan respons langsung terhadap acara tersebut, sementara solusi untuk koneksi yang konstan dan terus menerus sebagian besar merepotkan, menuntut, dan sulit untuk didukung. Dalam hal ini, solusi terbaik dan termudah adalah panggilan balik langsung melalui HTTP (paling sering POST).

Dengan kata lain, solusi ini memastikan respons terhadap peristiwa apa pun di dalam satu aplikasi dengan mengirimkan permintaan HTTP POST ke aplikasi lain yang terhubung untuk menginformasikan atau membuatnya merespons.

Konsep yang tepat ini disebut WebHook. Ini banyak digunakan untuk:

  • menerima data secara real time
  • menerima data dan meneruskannya
  • memproses data dan memberikan sesuatu sebagai balasannya

Tampaknya itu adalah solusi terbaik untuk interaksi klien Telegram (aplikasi Telegram) dengan proyek kami.


Bagian Coding

Akhirnya, kami memulai bagian paling praktis di mana Anda akan dapat mengembangkan bot Telegram.


Tugas utama: ajarkan bot kami untuk membalikkan pesan kami

Pertama, buat folder untuk proyek bot kami.

Kedua, buat file bot.py untuk membuat server botol.

Selanjutnya, kami mengembangkan bot.py


from bottle import run, post
@post('/')  # our python function based endpoint
def main():  
    return
if __name__ == '__main__':  
    run(host='localhost', port=8080, debug=True)

Mari kita coba untuk memulai server kami. Untuk ini, buka bash di folder bot Anda.

python bot.py

Dalam hasilnya, Anda akan melihat sesuatu seperti ini:

Lalu, buka tab baru. Di tab selanjutnya, kita akan mulai ngrok


./ngrok http <our_server_port>

./ngrok http 8080

Setelah itu, Anda akan melihat sesuatu seperti ini:

Sekarang, mari kita atur WebHook.

https://api.telegram.org/bot<your_token>/setWebHook?url=https://<your_ngrok_url.ngrok.io/

  • Catatan: untuk menemukan URL ngrok, Anda harus meluncurkan ngrok.Kemudian, pada layar yang mirip dengan yang di bawah ini, Anda akan menemukan URL (disorot pada tangkapan layar kami). URL ini Anda gunakan di tautan untuk pengaturan WebHook.

Respons untuk mengikuti tautan harus seperti

{"ok":true,"result":true,"description":"Webhook was set"}

Mari kita periksa apakah Anda berhasil mengatur WebHook. Ikuti tautan ini menggunakan token Anda:

https://api.telegram.org/bot<your_token>/getWebhookInfo

Jika semuanya benar, Anda akan melihat nilai alamat ngrok yang sama di depan kunci URL yang Anda tentukan saat mengonfigurasi.

Selamat, ini hidup!


Sekarang, kita perlu menerapkan mekanisme permintaan / respons pesan. 

Pada dasarnya, titik akhir kami mendapatkan data dalam format json. Jadi, biasanya, Anda akan melihat pesan data.

from bottle import run, post, request as bottle_request  # <--- we add bottle request
@post('/')
def main():  
    data = bottle_request.json  # <--- extract all request data
    print(data)
return
if __name__ == '__main__':  
    run(host='localhost', port=8080, debug=True)

Seharusnya ada sesuatu seperti itu di tab konsol Anda di mana server diluncurkan.

{'update_id': <integer>, 'message': {'message_id': <integer>, 'from': {'id': <your telegram id>, 'is_bot': False, 'first_name': '<your telegram name>', 'last_name': '<...>', 'username': '<...>', 'language_code': 'en-En'}, 'chat': {'id': <integer chat id>, 'first_name': '<...>', 'last_name': '<...>', 'username': '<...>', 'type': 'private'}, 'date': 1535022558, 'text': '1'}}

Informasi lebih rinci tentang parameter yang dapat Anda temukan di https://core.telegram.org/bots/api


Sekarang, kita harus mengekstrak chat_id dan text untuk membalikkan pesan kita dan mengirim jawabannya.

from bottle import (  
    run, post, response, request as bottle_request
)
def get_chat_id(data):  
    """
    Method to extract chat id from telegram request.
    """
    chat_id = data['message']['chat']['id']
return chat_id
def get_message(data):  
    """
    Method to extract message id from telegram request.
    """
    message_text = data['message']['text']
    return message_text
def change_text_message(text):  
    """
    To turn our message backwards.
    """
    return text[::-1]
@post('/')
def main():  
    data = bottle_request.json
    answer_data = prepare_data_for_answer(data)
return response  # status 200 OK by default

Sekarang, kita sudah menyiapkan jawabannya. Mari kita kirim ke bot Telegram.

import requests  
from bottle import (  
    run, post, response, request as bottle_request
)
BOT_URL = 'https://api.telegram.org/bot<YOUR_TOKEN>/' # <--- add your telegram token here; it should be like https://api.telegram.org/bot12345678:SOMErAn2dom/
def get_chat_id(data):  
    """
    Method to extract chat id from telegram request.
    """
    chat_id = data['message']['chat']['id']
return chat_id
def get_message(data):  
    """
    Method to extract message id from telegram request.
    """
    message_text = data['message']['text']
return message_text
def send_message(prepared_data):  
    """
    Prepared data should be json which includes at least `chat_id` and `text`
    """ 
    message_url = BOT_URL + 'sendMessage'
    requests.post(message_url, json=prepared_data)  # don't forget to make import requests lib
def change_text_message(text):  
    """
    To enable turning our message inside out
    """
    return text[::-1]
def prepare_data_for_answer(data):  
    answer = change_text_message(get_message(data))
json_data = {
        "chat_id": get_chat_id(data),
        "text": answer,
    }
return json_data
@post('/')
def main():  
    data = bottle_request.json
answer_data = prepare_data_for_answer(data)
    send_message(answer_data)  # <--- function for sending answer
return response  # status 200 OK by default
if __name__ == '__main__':  
    run(host='localhost', port=8080, debug=True)

Setelah semua persiapan dan pengkodean, jika semuanya berfungsi, mari kita coba mengobrol dengan bot kami.

Sekarang, mari kita membuat kode kita lebih mudah dibaca dan menerapkan struktur OOP.

import requests  
from bottle import Bottle, response, request as bottle_request
class BotHandlerMixin:  
    BOT_URL = None
def get_chat_id(self, data):
        """
        Method to extract chat id from telegram request.
        """
        chat_id = data['message']['chat']['id']
return chat_id
def get_message(self, data):
        """
        Method to extract message id from telegram request.
        """
        message_text = data['message']['text']
return message_text
def send_message(self, prepared_data):
        """
        Prepared data should be json which includes at least `chat_id` and `text`
        """       
        message_url = self.BOT_URL + 'sendMessage'
        requests.post(message_url, json=prepared_data)
class TelegramBot(BotHandlerMixin, Bottle):  
    BOT_URL = 'https://api.telegram.org/bot000000000:aaaaaaaaaaaaaaaaaaaaaaaaaa/'
def __init__(self, *args, **kwargs):
        super(TelegramBot, self).__init__()
        self.route('/', callback=self.post_handler, method="POST")
def change_text_message(self, text):
        return text[::-1]
def prepare_data_for_answer(self, data):
        message = self.get_message(data)
        answer = self.change_text_message(message)
        chat_id = self.get_chat_id(data)
        json_data = {
            "chat_id": chat_id,
            "text": answer,
        }
return json_data
def post_handler(self):
        data = bottle_request.json
        answer_data = self.prepare_data_for_answer(data)
        self.send_message(answer_data)
return response
if __name__ == '__main__':  
    app = TelegramBot()
    app.run(host='localhost', port=8080)

Cukup banyak. Sekarang Anda memiliki bot Telegram yang berfungsi yang bahkan bisa mengeja "mobil balap" mundur. Selamat! Anda dapat menemukan kode kesalahan di https://devcenter.heroku.com/articles/error-codes .

Dengan akun gratis Anda akan menghadapi batasan tertentu. Namun di sini Anda memiliki bot yang berfungsi penuh.


Report Page