Recientemente, obtuve una pasantía en una nueva empresa de TI para mí y nuestro proyecto (el de mi equipo) era un bot de telegramas que automatiza parte del trabajo de los gerentes de recursos humanos. La primera semana nos la dieron para auto-estudiar lo que consideráramos necesario (y estoy convencido de que la mejor forma de aprender algo es practicando), así que comencé a actuar. Se eligió el lenguaje de programación python (probablemente de la portada quede claro por qué), por lo que en este artículo analizaré un ejemplo con él.
BotFather
Para crear un cable-bot, puede escribir un comando de usuario @BotFather / newbot . Le pedirá el nombre y @nombredeusuario para el futuro bot. Nada complicado aquí, te lo dice todo (lo principal es que @nombredeusuario no está ocupado y termina con "bot"). BotFather enviará un token de API HTTP, que usaremos para trabajar con el bot.
Telebot y el poder de Python
Siempre me pareció que crear un bot no es tan fácil. Honestamente, quise intentarlo durante mucho tiempo, pero o no tuve suficiente tiempo (pensé que tomaría más de una noche), o no pude elegir la tecnología (de alguna manera vi el tutorial de c #), pero lo más probable es que fuera solo pereza. Pero luego lo necesitaba para funcionar, así que no me atreví a posponerlo más.
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()
Aquí usamos el método set_webhook, similar a cómo lo hicimos antes a través de cartero, y en una ruta vacía escribimos "un poco de magia" para recibir con éxito las actualizaciones de los bots. Por supuesto, esta no es una muy buena manera, y en el futuro es mejor escribir la funcionalidad para procesar los mensajes entrantes usted mismo. Pero primero, creo que esta es la mejor solución.
Conclusión
Realmente no es tan difícil escribir un bot de telegrama en Python, pero también hay trampas de las que traté de hablar en este artículo. Por supuesto, esto es solo el comienzo, pero el último fragmento de código se puede usar como plantilla para el lado del servidor, que funcionará con el bot de telegramas. Entonces solo queda aumentar la funcionalidad a su discreción.