Форум сайта python.su
День добрый.
Написал бота для Телеграма на Python, оттестировал с локального компа на GetUpdates, а дальше при выкладывании на Heroku заткнулся с переключением на Webhook. Сложность в том, что не выдает конкретной ошибки, а просто без детализации его прекращает (см лог ниже).
Впечатление, что ошибка где-то в этом блоке, по крайней мере к нему подходит без ошибок, но вроде все сделал по инструкциям из Интернета:
if __name__ == '__main__': if Run_On_Heroku: print('....004') def main(): print('....005') executor.start_webhook(dispatcher=dp, webhook_path=WEBHOOK_PATH, on_startup=on_startup, skip_updates=True, host=WEBAPP_HOST, port=WEBAPP_PORT) else: executor.start_polling(dp, on_shutdown=shutdown)
Офлайн
На Heroku переменные среды установил?
Офлайн
py.user.nextДа, конечно.
На Heroku переменные среды установил?
Отредактировано GeorgeSU (Сен. 18, 2021 02:24:40)
Офлайн
Сделай просто Webhook без всего. Убедись, что ты его можешь сделать вообще. Имеется в виду на Heroku. Ты ему должен посылать сообщение, на которое он должен отвечать.
В коде в этом копаться вряд ли есть смысл, так как видно, что он никакущий. Ошибок может быть миллион. Выглядит как такая бочка говна, в которой где-то в глубине плавает сосиска в упаковке, которую нужно достать. Ты давай ныряй туда сам, а мы тебе будем советовать, как с чистого начинать, чтобы покушать нормально.
Офлайн
py.user.nextСпасибо за образную характеристику ))) Учитывая что я вообще не программист, но вижу в чем есть потребность у коллег по отрасли, и для этого и полез в бото-писание чтобы запустить профильный канал в телеграме.
В коде в этом копаться вряд ли есть смысл, так как видно, что он никакущий. Ошибок может быть миллион. Выглядит как такая бочка говна, в которой где-то в глубине плавает сосиска в упаковке, которую нужно достать. Ты давай ныряй туда сам, а мы тебе будем советовать, как с чистого начинать, чтобы покушать нормально.
Офлайн
GeorgeSUНе, сделай новый питон-файл вообще пустой. И потом начинай его заполнять по минимуму. Там у тебя такой код: при получении сообщения от Telegram код должен на Webhook послать сообщение.
Убрал из кода всю содержательную часть
GeorgeSUНадо в Telegram зарегистрировать этот Webhook. Там ему посылаешь JSON-документ, в котором указываешь url. Так Telegram поймёт, куда перенаправлять команды.
Можешь посоветовать как эти вэбхуки запустить?
GeorgeSUЕсли будет готовый вариант даже простого эхо-бота, то лучше здесь оставить его с полным описанием. Кто-нибудь потом найдёт его случайно через поисковик типа Google или Яндекс и применит для своего обучения. При этом на GitHub'е его не нужно будет держать годами. А тут он сохранится.
Лучше давать ссылку на Гитхаб с кодом, или выкладывать оттуда код сюда?
Отредактировано py.user.next (Сен. 18, 2021 12:21:38)
Офлайн
Уфф, эхо-бот заработал. Дальше буду уже накручивать в него свои функционалы.
Оставляю на случай если кому-то понадобится Webhook для Телеграма, работающий на Heroku:
import asyncio from aiogram import Bot, types from aiogram.dispatcher import Dispatcher from aiogram.utils.executor import start_webhook import os #в переменных среды Heroku заданы TOKEN и HEROKU_APP_NAME BOT_TOKEN = os.getenv('TOKEN') HEROKU_APP_NAME = os.getenv('HEROKU_APP_NAME') # webhook настройки WEBHOOK_HOST = f'https://{HEROKU_APP_NAME}.herokuapp.com' WEBHOOK_PATH = f'/webhook/{BOT_TOKEN}' WEBHOOK_URL = f"{WEBHOOK_HOST}{WEBHOOK_PATH}" # webserver настройки WEBAPP_HOST = '0.0.0.0' WEBAPP_PORT = int(os.environ.get('PORT', '8443')) loop = asyncio.get_event_loop() bot = Bot(token=BOT_TOKEN, loop=loop) dp = Dispatcher(bot) #просто повтор сказанного пользователем @dp.message_handler() async def echo(message: types.Message): await bot.send_message(message.chat.id, message.text) async def on_startup(dp): await bot.delete_webhook(dp) await bot.set_webhook(WEBHOOK_URL) # и дальше все что надо после запуска async def on_shutdown(dp): # если что-то надо для окончания pass if __name__ == '__main__': start_webhook(dispatcher=dp, webhook_path=WEBHOOK_PATH, on_startup=on_startup, on_shutdown=on_shutdown, skip_updates=True, host=WEBAPP_HOST, port=WEBAPP_PORT)
Отредактировано GeorgeSU (Сен. 20, 2021 13:54:10)
Офлайн