Recentemente, consegui um estágio em uma nova empresa de TI para mim e nosso projeto (da minha equipe) era um bot de telegramas que automatiza parte do trabalho dos gerentes de RH. A primeira semana foi dada para estudarmos o que acharmos necessário (e estou convencido de que a melhor forma de aprender algo é praticando), comecei a agir. A linguagem de programação escolhida foi python (provavelmente está claro desde a capa o porquê), então neste artigo irei analisar um exemplo com ela.
BotFather
Para criar um cable-bot, você pode escrever um user @BotFather command / newbot . Ele pedirá o nome e @username para o futuro bot. Nada complicado aqui - ele diz tudo (o principal é que @ nomedousuário não está ocupado e termina com "bot"). BotFather enviará um token de API HTTP, que usaremos para trabalhar com o bot.
Telebot e o poder do python
Sempre me pareceu que criar um bot não é tão fácil. Sinceramente, queria tentar há muito tempo, mas ou não tive tempo suficiente (pensei que demoraria mais de uma noite) ou não consegui escolher a tecnologia (de alguma forma assisti ao tutorial para c #) mas provavelmente era apenas preguiça. Mas eu precisava que funcionasse, então não ousei adiar mais.
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()
Aqui, usamos o método set_webhook, semelhante a como fazíamos anteriormente por meio do carteiro, e em uma rota vazia, escrevemos "um pouco de mágica" para receber atualizações de bots com sucesso. Claro, essa não é uma maneira muito boa e, no futuro, é melhor escrever a funcionalidade para processar as mensagens que chegam você mesmo. Mas, primeiro, acho que essa é a melhor solução.
Conclusão
Na verdade, não é tão difícil escrever um bot de telegrama em python, mas também existem armadilhas sobre as quais tentei falar neste artigo. Claro, isso é apenas o começo, mas a última parte do código pode ser usada como um modelo para o lado do servidor, que funcionará com o bot do telegrama. Em seguida, resta apenas aumentar a funcionalidade a seu critério.