Получение данных от Web App Telegram aiogram 3.0
Делаю кастомную форму в web app telegram,и когда при нажатии на кнопку Сохранить отправляю данные в виде строки от веб-приложения к боту с поvощью Senddata(), строка приходит, но не понятно, как её отловить, не нашёл в инете ни одного примера, хотя вроде как технологии уже год. Если писать просто @dp.message() или @route.messsage строка приходит, но тогда не примешь остальные текстовые сообщения. Как отловить данные через хэндэлер или какой-то фильтр?
Ответы (4 шт):
Тоже не нашел, поэтому так:
from typing import Union, Dict, Any
from aiogram.filters import Filter
from aiogram.types import Message
class WebAppDataFilter(Filter):
async def __call__(self, message: Message, **kwargs) -> Union[bool, Dict[str, Any]]:
return dict(web_app_data=message.web_app_data) if message.web_app_data else False
#... Инициализация бота
@dp.message(WebAppDataFilter())
async def handle_web_app_data(message: types.Message, web_app_data: types.WebAppData):
print(web_app_data)
await message.answer("Received web app data")
I have this code
@router.message(~F.message.via_bot) async def web_app2(message: Message): print(message.web_app_data) await message.answer("test")
Решил таким образом:
- @dp.message(F.content_type == ContentType.WEB_APP_DATA) или
- @dp.message(lambda message: message.web_app_data)
Есть еще 3й вариант, описанный вами. Но он не работает...
Можно использовать магический фильтр F.content_type, 100% работает:
from aiogram import F
from aiogram.types import Message, ContentType
# Хендлер:
@dp.message(F.content_type == ContentType.WEB_APP_DATA)
async def parse_data(message: Message):
data = message.web_app_data.data
print(data)