Gem: Telegram How To

Кто открыл мини-приложение

Что это

При открытии Telegram передаёт мини-приложению `initData`: кто его открыл (уникальный id, имя, иногда фамилия и юзернейм, язык, есть ли Premium, разрешил ли он боту писать, ссылка на фото), откуда, метку из ссылки и время. Данные подписаны, и сервер может проверить, что их прислал Telegram. Номера телефона в них нет.

Как сделать

  1. Приложение отправляет на твой сервер строку `Telegram.WebApp.initData` целиком, с каждым запросом.
  2. Сервер проверяет её: выстраивает все поля, кроме `hash`, по алфавиту строками… Сервер проверяет её: выстраивает все поля, кроме `hash`, по алфавиту строками `key=value`, подписывает их HMAC-SHA-256 ключом, сделанным из токена бота и слова `WebAppData`, и сравнивает результат с `hash`.
  3. Сервер смотрит `auth_date`, момент открытия, и отклоняет старые данные.
  4. Только после этого `user.id` становится ключом человека.
  5. Нужен телефон или разрешение писать? `requestContact` и `requestWriteAccess` спросят самого человека.
  6. Партнёр без твоего токена проверяет поле `signature` (Ed25519) открытым ключом Telegram; дай ему `initData` и id бота.

Осторожно

С Gem

Приветствие в мини-приложении каждого проекта спрашивает язык человека и разрешение ему писать, а прогресс сохраняется. Дальше Gem пишет только тем, кто разрешил этому проекту писать, на их языке, и под каждым сообщением есть кнопка, чтобы отписаться.

Источники

Открыть в Telegram ↗