Baru-baru ini, saya mendapat magang di perusahaan IT baru untuk diri saya sendiri dan proyek kami (tim saya) adalah bot telegram yang mengotomatiskan bagian dari pekerjaan manajer SDM. Minggu pertama diberikan kepada kami untuk belajar mandiri apa pun yang kami anggap perlu (dan saya yakin bahwa cara terbaik untuk mempelajari sesuatu adalah berlatih), jadi saya mulai bertindak. Bahasa pemrograman dipilih python (mungkin sudah jelas dari sampul kenapa), jadi pada artikel ini saya akan menganalisa contoh dengannya.
BotFather
Untuk membuat bot-kabel, Anda dapat menulis perintah pengguna @BotFather / newbot . Ini akan menanyakan nama dan @namapengguna untuk bot masa depan. Tidak ada yang rumit di sini - ini memberi tahu Anda segalanya (yang utama adalah @namapengguna tidak sibuk dan diakhiri dengan "bot"). BotFather akan mengirim token API HTTP, yang akan kita gunakan untuk bekerja dengan bot.
Telebot dan kekuatan python
Menurut saya, membuat bot tidak semudah itu. Sejujurnya, saya ingin mencoba untuk waktu yang lama, tetapi saya tidak punya cukup waktu (saya pikir ini akan memakan waktu lebih dari satu malam), atau saya tidak dapat memilih teknologinya (entah bagaimana saya menonton tutorial untuk c #), tapi kemungkinan besar itu hanya kemalasan. Tapi kemudian saya membutuhkannya untuk bekerja, jadi saya tidak berani menundanya lagi.
python . , , . ( ) 6 (!) . :
import telebot
bot = telebot.TeleBot('1111105161:AAHIjyAKY4fj62whM5vEAfotuixC5syA-j8')
@bot.message_handler(commands=['start'])
def start_command(message):
bot.send_message(message.chat.id, "Hello!")
bot.polling()
/start, . : telebot ( pyTelegramBotAPI pip install pyTelegramBotAPI
( pip install telebot
!), , , BotFather. , ( “/start”), , , “Hello!”. , , , . - , "" .
Flask & Requests
Telebot, , , “”. , hr- (), / / . , . python - flask. , 5000- (http://localhost:5000/):
from flask import Flask
app = Flask(__name__)
@app.route("/", methods=["GET"])
def index():
return "Hello, World!"
if __name__ == "__main__":
app.run()
, . (habr), . , “Hello!” :
from flask import Flask, request
import requests
app = Flask(__name__)
def send_message(chat_id, text):
method = "sendMessage"
token = "1111105161:AAHIjyAKY4fj62whM5vEAfotuixC5syA-j8"
url = f"https://api.telegram.org/bot{token}/{method}"
data = {"chat_id": chat_id, "text": text}
requests.post(url, data=data)
@app.route("/", methods=["POST"])
def receive_update():
chat_id = request.json["message"]["chat"]["id"]
send_message(chat_id, "Hello!")
return "ok"
if __name__ == "__main__":
app.run()
, . , . , , . telegram API setWebhook. , url, ( http://localhost:5000/). , : " localhost", localhost . , setWebhook https url-. ngrok, . ngrok, “ngrok http 5000”. :
setWebhook, , postman. post https://api.telegram.org/bot<>/setWebhook url. :
telebot, . , flask’e, . ? -, send_message . :
from flask import Flask, request
import telebot
app = Flask(__name__)
bot = telebot.TeleBot('1111105161:AAHIjyAKY4fj62whM5vEAfotuixC5syA-j8')
@app.route("/", methods=["POST"])
def receive_update():
chat_id = request.json["message"]["chat"]["id"]
bot.send_message(chat_id, "Hello!")
return "ok"
if __name__ == "__main__":
app.run()
, , , , @bot.message_handler - , (, , , . .). , flask , telebot. bot.polling(), “ ”. , - . , :
from flask import Flask, request
import telebot
bot = telebot.TeleBot('1111105161:AAHIjyAKY4fj62whM5vEAfotuixC5syA-j8')
bot.set_webhook(url="https://8c6f687b75c9.ngrok.io")
app = Flask(__name__)
@app.route('/', methods=["POST"])
def webhook():
bot.process_new_updates(
[telebot.types.Update.de_json(request.stream.read().decode("utf-8"))]
)
return "ok"
@bot.message_handler(commands=['start'])
def start_command(message):
bot.send_message(message.chat.id, 'Hello!')
if __name__ == "__main__":
app.run()
Di sini kami menggunakan metode set_webhook, serupa dengan yang kami lakukan sebelumnya melalui tukang pos, dan di rute kosong kami menulis "sedikit ajaib" agar berhasil menerima pembaruan bot. Tentu saja, ini bukan cara yang baik, dan di masa mendatang lebih baik menulis sendiri fungsionalitas untuk memproses pesan masuk. Tapi pertama-tama, saya pikir ini adalah solusi terbaik.
Kesimpulan
Sebenarnya tidak terlalu sulit untuk menulis bot telegram dengan python, tetapi ada juga jebakan yang saya coba bicarakan di artikel ini. Tentu saja, ini baru permulaan, tetapi potongan kode terakhir dapat digunakan sebagai templat untuk sisi server, yang akan bekerja dengan bot telegram. Kemudian tinggal meningkatkan fungsionalitas sesuai kebijaksanaan Anda.