Récemment, j'ai obtenu un stage dans une nouvelle société informatique pour moi-même et notre projet (de mon équipe) était un robot de télégramme qui automatise une partie du travail des gestionnaires des ressources humaines. La première semaine nous a été consacrée à l'auto-apprentissage de tout ce que nous jugeons nécessaire (et je suis convaincu que la meilleure façon d'apprendre quelque chose est la pratique), alors j'ai commencé à agir. Le langage de programmation a été choisi python (il est probablement clair dans la couverture pourquoi), donc dans cet article, j'analyserai un exemple avec.
BotFather
Pour créer un cable-bot, vous pouvez écrire une commande utilisateur @BotFather / newbot . Il demandera le nom et le @username du futur bot. Rien de compliqué ici - il vous dit tout (l'essentiel est que @username n'est pas occupé et se termine par "bot"). BotFather enverra un jeton d'API HTTP, que nous utiliserons pour travailler avec le bot.
Telebot et la puissance de python
Il m'a toujours semblé que créer un bot n'était pas si simple. Honnêtement, je voulais essayer depuis longtemps, mais soit je n'avais pas assez de temps (je pensais que cela prendrait plus d'une soirée), soit je ne pouvais pas choisir la technologie (j'ai en quelque sorte regardé le tutoriel pour c #), mais très probablement, c'était juste de la paresse. Mais ensuite, j'en avais besoin pour fonctionner, alors je n'ai plus osé le remettre à plus tard.
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()
Ici, nous utilisons la méthode set_webhook, similaire à la façon dont nous l'avons fait plus tôt via postman, et sur une route vide, nous écrivons "un peu de magie" pour recevoir avec succès les mises à jour du bot. Bien sûr, ce n'est pas un très bon moyen, et à l'avenir, il est préférable d'écrire vous-même la fonctionnalité de traitement des messages entrants. Mais d'abord, je pense que c'est la meilleure solution.
Conclusion
Ce n'est vraiment pas si difficile d'écrire un robot de télégramme en python, mais il y a aussi des pièges dont j'ai essayé de parler dans cet article. Bien sûr, ce n'est que le début, mais le dernier morceau de code peut être utilisé comme modèle pour le côté serveur, qui fonctionnera avec le robot de télégramme. Ensuite, il ne reste plus qu'à augmenter la fonctionnalité à votre discrétion.