Как организовать webhook для телеграм (aiogram)?

Есть такой пример из офф сайта аиограма:
spoiler
import logging

from aiogram import Bot, types
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


API_TOKEN = 'BOT_TOKEN_HERE'

# webhook settings
WEBHOOK_HOST = 'https://your.domain'
WEBHOOK_PATH = '/path/to/api'
WEBHOOK_URL = f"{WEBHOOK_HOST}{WEBHOOK_PATH}"

# webserver settings
WEBAPP_HOST = 'localhost'  # or ip
WEBAPP_PORT = 3001

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):
    # Regular request
    # await bot.send_message(message.chat.id, message.text)

    # or reply INTO webhook
    return SendMessage(message.chat.id, message.text)


async def on_startup(dp):
    await bot.set_webhook(WEBHOOK_URL)
    # insert code here to run it after start


async def on_shutdown(dp):
    logging.warning('Shutting down..')

    # insert code here to run it before shutdown

    # Remove webhook (not acceptable in some cases)
    await bot.delete_webhook()

    # Close DB connection (if used)
    await dp.storage.close()
    await dp.storage.wait_closed()

    logging.warning('Bye!')


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,
    )


И я не понимаю как заставить это работать. Бот рабочий на пулинге стоял нормально.
Какие параметры задавать Host, Path, Url и т.д.? Пытался найти ответы в доках, но видимо плохо искал. Если есть ресурсы с этим связанные, то сбрасывайте.
айпи сервера условно 45.45.45.45
  • Вопрос задан
  • 4272 просмотра
Решения вопроса 1
Altry
@Altry
Чтобы заставить aiogram работать на вебхуках , понадобится собственный сервер на nginx или apache(nginx на мой взгляд лучше). Так же понадобится самоподписанный сертификат , или доменное имя с SSL.

WEBHOOK_HOST = 'Ip вашего сервера'
WEBHOOK_PATH = 'путь к апи где слушает ваш бот' #или пустое значение, если он слушает на стартовой странице.
WEBHOOK_URL = f"{WEBHOOK_HOST}{WEBHOOK_PATH}"


Работает это примерно так. AioHTTP поднимает собственный сервер на локалхосте и слушает на порте , который вы предварительно открыли. NGINX слушает 443(либо другой из портов , которые Telegram поддерживает для HTTPS), и перенаправляет все запросы на приложение вашего бота.

Касательно материалов для изучения - неплохая статья по настройке NGINX

И ,собственно , гайд от разработчиков - тык
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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