Telegram бот на Python: Web Apps с iogram

Web Apps: Новая функция Telegram

Web Apps – это функция Telegram, позволяющая встраивать приложения прямо в бота. Веб-приложение может быть страницей, интернет-магазином и т.д. API позволяет настраивать взаимодействие кнопок приложения с ботом.

Создание веб-приложения с использованием библиотеки iogram

Для создания веб-приложения используется библиотека iogram.

Отслеживание команды /start и создание кнопки

Отследим команду /start. При вводе этой команды покажем пользователю кнопку, открывающую веб-приложение. Используем обработчик для команды /start:

@dp.message_handler(commands=['start'])
async def start(message: types.Message):
    markup = types.ReplyKeyboardMarkup()
    button = types.KeyboardButton(text='Открыть веб-страницу', web_app=types.WebAppInfo(url='https://it-proger.com'))
    markup.add(button)
    await message.answer('Привет, мой друг!', reply_markup=markup)

Функция start принимает объект message и создаёт кнопку с помощью types.ReplyKeyboardMarkup. types.WebAppInfo указывает URL веб-приложения. Изначально используется https://it-proger.com, позже его заменят.

Создание и размещение HTML-страницы

Создадим HTML-файл (например, shop.html) с заголовком, изображением, текстом и кнопкой «Купить». Для отображения страницы в веб-приложении её необходимо выгрузить на удалённый сервер (локальный сервер не подходит). Можно использовать собственный веб-сайт или GitHub. В примере файл размещён на it-proger.com. Обновим URL в коде Python:

button = types.KeyboardButton(text='Открыть веб-страницу', web_app=types.WebAppInfo(url='https://it-proger.com/telegram.html'))

Поддержка Web Apps и стилизация CSS

Для поддержки Web Apps добавим скрипт из документации перед закрывающим тегом <body>. В примере стили CSS прописаны в HTML-файле для краткости, но лучше создать отдельный CSS-файл. Используем переменные из документации для настройки цветов под светлую/тёмную темы Telegram.

Взаимодействие с API Telegram и JavaScript

Добавим в HTML форму с полями для имени, email и телефона, а также кнопками «Купить» и «Оформить». Добавим JavaScript-код для обработки событий. Создадим объект tg для работы с API Telegram:

let tg = new TelegramWebApps();

При нажатии на «Купить» покажем форму, а при нажатии на «Оформить» отправим данные в бот с помощью tg.sendData(). Для работы с данными пользователя используем tg.initDataUnsafe.user. Обработка ошибок включает проверку длины полей и отображение сообщений об ошибках.

Обработка данных в боте

Добавим в Python-код декоратор для обработки данных из веб-приложения:

@dp.message_handler(content_types=['web_app_data'])
async def web_app_data(message: types.Message):
    # ... обработка данных ...

Обработчик получит данные из message.web_app_data.data, преобразует их в JSON-объект и выведет нужные значения.

Теперь можно добавлять веб-приложения в Telegram-бот, используя HTML, CSS и JavaScript для создания интерфейса и обработки данных, передавая эти данные обратно в бот.

Что будем искать? Например,программа