у меня есть бот на aiogram 2.25.2, мне нужно при старте бота получить json который присылает телеграм боту, важно то, что мне нужен именно исходный вебхук от телеги, а я могу получить лишь его часть, которую беру из объекта Message
1 2 3 |
@dp.message_handler(commands=['start']) async def start(message: types.Message): print(message) |
@l_vinton_l В aiogram, начиная с версии 2.x, при использовании стандартных обработчиков, таких как @dp.message_handler
, вы получаете обработанные данные, такие как объект Message
. Однако, чтобы получить исходные данные вебхука в формате JSON (весь запрос от Telegram API), вам нужно самостоятельно обрабатывать запросы к вебхуку. Для этого можно использовать встроенные возможности aiohttp, который является основой aiogram, и перехватывать вебхуки на уровне HTTP-запросов. Вот пример, как это можно сделать:
Мой пример
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 |
from aiogram import Bot, Dispatcher, types from aiogram.utils.executor import start_webhook from aiohttp import web import json API_TOKEN = 'YOUR_BOT_API_TOKEN' WEBHOOK_HOST = 'https://site.ru' WEBHOOK_PATH = '/webhook' WEBHOOK_URL = f"{WEBHOOK_HOST}{WEBHOOK_PATH}" bot = Bot(token=API_TOKEN) dp = Dispatcher(bot) # Обработчик для команды start @dp.message_handler(commands=['start']) async def start(message: types.Message): await message.reply("Привет!!!") # Получаем сырой JSON запрос от Telegram и выводим его async def handle_webhook(request): raw_data = await request.text() # Получаем сырые данные запроса print("Полученный вебхук (сырой JSON):") print(raw_data) # Обработка JSON данных update = types.Update(**json.loads(raw_data)) # Передача обработанных данных в aiogram Dispatcher.set_current(dp) Bot.set_current(dp.bot) await dp.process_update(update) return web.Response() # Основная конфигурация для вебхуков async def on_startup(app): await bot.set_webhook(WEBHOOK_URL) async def on_shutdown(app): await bot.delete_webhook() # Настройка веб-приложения aiohttp app = web.Application() app.router.add_post(WEBHOOK_PATH, handle_webhook) if __name__ == '__main__': start_webhook( dispatcher=dp, webhook_path=WEBHOOK_PATH, on_startup=on_startup, on_shutdown=on_shutdown, skip_updates=True, host='localhost', # Укажите ваш хост port=3000 # Укажите ваш порт ) |