Задать вопрос

Ошибка 403 // Телеграмм Бот на вебхуках?

Всем привет. Пишу телеграмм бота на пулиннге, решил закинуть на сервер и одновременно с этим перевести его на вебхуки. Покопался в интернете, из исходников нашел такой код:

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)


Далее, как понял, я должен выполнить следующие действия (Поправьте меня если я где-то ошибаюсь)
  1. Я закидываю скрипт выше по адресу "my.domain.net/index.py" на свой хостинг (REG.RU взял на месяц)
  2. Затем в переменную WEBHOOK_PATH устанавливаю '/index.py', а в WEBHOOK_URL указываю полный путь до index.py, ну и подставляю конечно же свой токен от бота.
  3. Затем я регаю свой вебхук по моему адресу 'my.domain.net/index.py' строчкой ниже:
    await bot.set_webhook(url = WEBHOOK_URL) Выводит сообщение что вебхуки успешно зарегистрированы.
  4. Запускаю бота и отправляю ему сообщения, на хостинге в журнале от телеги начинают приходить запросы
    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
  • Вопрос задан
  • 394 просмотра
Подписаться 1 Простой Комментировать
Решения вопроса 1
Altry
@Altry
Как-то была похожая тема.

Я советую поднимать бота на локалхосте на выбранном вами порту , а после в настройках веб-сервера(nginx или апач) проксировать все запросы на определенный урл на локалхост:порт вашего бота.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы