Веб Застосунок (WebApp)¶
Telegram Bot API 6.0 зробив революцію у розробці чат-ботів, використовуючи особливості Веб Застосунків.
Ви можете прочитати більше про це в офіційному блозі та документації.
aiogram реалізує прості утиліти для усунення головного болю, надаючи готові інструменти перевірки даних із Веб Застосунку Telegram на серверній стороні.
Використання¶
Наприклад, із фронтенду ви передасте application/x-www-form-urlencoded
в POST запиті із полем _auth
у тілі та хочете повернути інформацію про користувача у відповідь як application/json
from aiogram.utils.web_app import safe_parse_webapp_init_data
from aiohttp.web_request import Request
from aiohttp.web_response import json_response
async def check_data_handler(request: Request):
bot: Bot = request.app["bot"]
data = await request.post() # application/x-www-form-urlencoded
try:
data = safe_parse_webapp_init_data(token=bot.token, init_data=data["_auth"])
except ValueError:
return json_response({"ok": False, "err": "Unauthorized"}, status=401)
return json_response({"ok": True, "data": data.user.dict()})
Функції¶
- aiogram.utils.web_app.check_webapp_signature(token: str, init_data: str) bool [source]¶
Перевірка вхідного підпису даних ініціалізації Веб Застосунку
Джерело: https://core.telegram.org/bots/webapps#validating-data-received-via-the-web-app
- Параметри:
token – Токен бота
init_data – дані з фронтенду, що підлягають перевірці
- Повертає:
- aiogram.utils.web_app.parse_webapp_init_data(init_data: str, *, loads: ~typing.Callable[[...], ~typing.Any] = <function loads>) WebAppInitData [source]¶
Аналіз данихі ініціалізації Веб Застосунку і повернення їх як об’єкту WebAppInitData
Цей метод не забезпечує безпеку, тому вам не варто довіряти цим даним, замість цього використовуйте
safe_parse_webapp_init_data
.- Параметри:
init_data – дані з frontend для аналізу
loads
- Повертає:
- aiogram.utils.web_app.safe_parse_webapp_init_data(token: str, init_data: str, *, loads: ~typing.Callable[[...], ~typing.Any] = <function loads>) WebAppInitData [source]¶
Перевірка необроблених даних ініціалізації Веб Застосунку і повернення їх як об’єкту WebAppInitData
Видає
ValueError
, коли дані недійсні- Параметри:
token – токен бота
init_data – дані з фронтенду для аналізу і перевірки
loads
- Повертає:
Типи¶
- class aiogram.utils.web_app.WebAppInitData(**extra_data: Any)[source]¶
Об’єкт, що містить дані які передаються у Веб Застосунок під час його відкриття. Він порожній, якщо Веб Застосунок було запущено за допомогою кнопки клавіатури.
Джерело: https://core.telegram.org/bots/webapps#webappinitdata
- query_id: str | None¶
Унікальний ідентифікатор сеансу Веб Застосунку, необхідний для надсилання повідомлень через метод answerWebAppQuery.
- user: WebAppUser | None¶
Об’єкт, що містить дані про поточного користувача.
- receiver: WebAppUser | None¶
Об’єкт, що містить дані про співрозмовника поточного користувача в чаті, де бот був запущений через меню вкладення. Повертається тільки для веб-додатків, запущених через меню вкладень.
- chat: WebAppChat | None¶
Об’єкт, що містить дані про чат, в якому бот був запущений через меню вкладень. Повертається для супергруп, каналів і групових чатів - тільки для веб-додатків, запущених через меню вкладень.
- chat_type: str | None¶
Тип чату, з якого було відкрито веб-додаток. Може бути як «sender» для приватного чату з користувачем, який відкрив посилання, так і «private», «group», «supergroup» або «channel». Повертається тільки для веб-програм, запущених за прямим посиланням.
- chat_instance: str | None¶
Глобальний ідентифікатор, що унікальний для чату, з якого було відкрито веб-програму. Повертається тільки для веб-додатків, запущених за прямим посиланням.
- start_param: str | None¶
Значення параметра startattach, передане через посилання. Повертається лише для Веб Застосунків, коли їх запускають із меню вкладень за посиланням. Значення параметра start_param також буде передано в GET-параметр tgWebAppStartParam, тому Веб Застосунок може відразу завантажити правильний інтерфейс.
- can_send_after: int | None¶
Час в секундах після якого повідомлення може бути відправлене за допомогою метода answerWebAppQuery.
- auth_date: datetime¶
Unix час відкриття форми.
- hash: str¶
Хеш усіх переданих параметрів, за допомогою якого бот-сервер може перевірити їх дійсність.
- class aiogram.utils.web_app.WebAppUser(**extra_data: Any)[source]¶
Об’єкт що містить дані користувача Веб Застосунку.
Джерело: https://core.telegram.org/bots/webapps#webappuser
- id: int¶
Унікальний ідентифікатор користувача або бота. Це число може мати більше 32 значущих бітів, і деякі мови програмування можуть мати труднощі в його інтерпретації. Він має щонайбільше 52 значущі біти, тому 64-бітне ціле число або тип з плаваючою точністю подвійної точності є безпечним для зберігання цього ідентифікатора.
- is_bot: bool | None¶
True, якщо цей користувач бот. Повертаєтся лише в полі отримувача(receiver).
- first_name: str¶
Ім’я користувача або бота.
- last_name: str | None¶
Прізвище користувача або бота.
- username: str | None¶
Нік користувача або бота.
- language_code: str | None¶
Мовний тег IETF мови користувача. Повертаєтся лише в полі користувача(user).
True, якщо цей користувач має підписку Telegram Premium.
True, якщо цей користувач додав бота до меню вкладень.
- allows_write_to_pm: bool | None¶
True, якщо цей користувач дозволив надсилати йому повідомлення.
- photo_url: str | None¶
URL-адреса фотографії профілю користувача. Фотографія може бути у форматах .jpeg або .svg. Повертається лише для Веб Застосунків, запущених із меню вкладень.
- class aiogram.utils.web_app.WebAppChat(**extra_data: Any)[source]¶
Об’єкт чату.
Джерело: https://core.telegram.org/bots/webapps#webappchat
- id: int¶
Унікальний ідентифікатор цього чату. Це число може мати більше 32 значущих бітів, і деякі мови програмування можуть мати труднощі в його інтерпретації. Він має щонайбільше 52 значущі біти, тому 64-бітне ціле число або тип з плаваючою точкою подвійної точності є безпечним для зберігання цього ідентифікатора.
- type: str¶
Тип чату, може бути «group», «supergroup» або «channel»
- title: str¶
Назва чату
- username: str | None¶
Нік користувача або бота
- photo_url: str | None¶
URL-адреса фотографії чату. Фотографія може бути у форматах .jpeg або .svg. Повертається лише для Веб Застосунків, запущених із меню вкладень.