Vor kurzem habe ich ein Praktikum bei einem neuen IT-Unternehmen für mich gemacht und unser Projekt (meines Teams) war ein Telegramm-Bot, der einen Teil der Arbeit von Personalmanagern automatisiert. Die erste Woche wurde uns gegeben, um alles selbst zu lernen, was wir für notwendig halten (und ich bin überzeugt, dass der beste Weg, etwas zu lernen, das Üben ist), also begann ich zu handeln. Die Programmiersprache wurde als Python gewählt (wahrscheinlich ist aus dem Cover ersichtlich, warum), daher werde ich in diesem Artikel ein Beispiel damit analysieren.
BotFather
Um einen Kabel-Bot zu erstellen, können Sie einen Benutzer @ BotFather- Befehl / newbot schreiben . Es wird nach dem Namen und @Benutzernamen für den zukünftigen Bot gefragt . Hier ist nichts kompliziertes - es sagt Ihnen alles (Hauptsache, @username ist nicht beschäftigt und endet mit "bot"). BotFather sendet ein HTTP-API-Token, mit dem wir mit dem Bot arbeiten.
Telebot und die Kraft der Python
Es schien mir immer, dass das Erstellen eines Bots nicht so einfach ist. Ehrlich gesagt wollte ich es lange versuchen, aber entweder hatte ich nicht genug Zeit (ich dachte, es würde mehr als einen Abend dauern) oder ich konnte die Technologie nicht auswählen (ich habe mir das Tutorial für c # irgendwie angesehen). aber höchstwahrscheinlich war es nur Faulheit. Aber dann brauchte ich es, um zu funktionieren, also wagte ich es nicht länger aufzuschieben.
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()
Hier verwenden wir die set_webhook-Methode, ähnlich wie wir es früher durch Postman gemacht haben, und auf einer leeren Route schreiben wir "ein wenig Magie", um erfolgreich Bot-Updates zu erhalten. Dies ist natürlich kein sehr guter Weg, und in Zukunft ist es besser, die Funktionalität für die Verarbeitung eingehender Nachrichten selbst zu schreiben. Aber zuerst denke ich, dass dies die beste Lösung ist.
Fazit
Es ist wirklich nicht so schwierig, einen Telegramm-Bot in Python zu schreiben, aber es gibt auch Fallstricke, über die ich in diesem Artikel zu sprechen versucht habe. Dies ist natürlich nur der Anfang, aber der letzte Code kann als Vorlage für die Serverseite verwendet werden, die mit dem Telegrammbot funktioniert. Dann bleibt nur noch die Funktionalität nach Ihrem Ermessen zu erhöhen.