Всем привет. Пишу телеграмм бота на пулиннге, решил закинуть на сервер и одновременно с этим перевести его на вебхуки. Покопался в интернете, из исходников нашел такой код:
import logging
from aiogram import Bot, types, executor
from aiogram.contrib.middlewares.logging import LoggingMiddleware
from aiogram.dispatcher import Dispatcher
from aiogram.dispatcher.webhook import SendMessage
from aiogram.utils.executor import start_webhook
from aiogram.types import ParseMode
API_TOKEN = '000000:000000'
WEBHOOK_HOST = f'https://my domain'
WEBHOOK_PATH = f'/index.py'
WEBHOOK_URL = f'{WEBHOOK_HOST}{WEBHOOK_PATH}'
# webserver settings
WEBAPP_HOST = 'my domain.net' # or ip pip install --upgrade pip
WEBAPP_PORT = 8443
logging.basicConfig(level = logging.INFO)
bot = Bot(token = API_TOKEN)
dp = Dispatcher(bot)
dp.middleware.setup(LoggingMiddleware())
@dp.message_handler()
async def echo(message: types.Message):
print('echo enter')
return SendMessage(message.chat.id, message.text)
async def on_startup(dp):
await bot.delete_webhook()
await bot.set_webhook(url = WEBHOOK_URL)
# Пытаюсь отправить сразу на свой айдишник сообщение
return SendMessage(867690422, 'test')
async def on_shutdown(dp):
await bot.delete_webhook()
# Close DB connection (if used)
await dp.storage.close()
await dp.storage.wait_closed()
logging.warning('Bye!')
if __name__ == '__main__':
executor.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)
Далее, как понял, я должен выполнить следующие действия (Поправьте меня если я где-то ошибаюсь)
- Я закидываю скрипт выше по адресу "my.domain.net/index.py" на свой хостинг (REG.RU взял на месяц)
- Затем в переменную WEBHOOK_PATH устанавливаю '/index.py', а в WEBHOOK_URL указываю полный путь до index.py, ну и подставляю конечно же свой токен от бота.
- Затем я регаю свой вебхук по моему адресу 'my.domain.net/index.py' строчкой ниже:
await bot.set_webhook(url = WEBHOOK_URL)
Выводит сообщение что вебхуки успешно зарегистрированы.
- Запускаю бота и отправляю ему сообщения, на хостинге в журнале от телеги начинают приходить запросы
91.108.6.91 - - [13/Aug/2021:15:38:40 +0300] "POST /index.py HTTP/1.0" 403 299327 "-" "-"
Что означает, что доступ к этой странице запрещен хостингом. И соответственно сам бот ответа в телеге не дает.
Отсюда складывается сам вопрос, все ли я делаю правильно? Мне действительно нужно в WEBHOOK_URL указывать путь до своего скрипта? Если же все ок, то каким образом я могу открыть доступ для этой ссылки?
Я пробовал принимать запросы от телеги на PHP скрипте и все работает на ура. Но то же самое провернуть на питоне с кодом выше не получается, так как хостинг блокирует любые py скрипты. Хотя в настройках домена стоит галка на разрешение CGI скриптов + Python 3.9