Веб Застосунок (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).

is_premium: bool | None

True, якщо цей користувач має підписку Telegram Premium.

added_to_attachment_menu: bool | None

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. Повертається лише для Веб Застосунків, запущених із меню вкладень.