Telegram WebApps параметры

Разбираю веб-приложения телеграма и назрел вопрос. Я могу в сообщении передать inline-кнопку, для открытия, но я не понимаю как убедиться, что приложение открыто именно в телеграме. Заголовки на сервере ничего особенно не выдают. Появилась мысль (и быстро пропала, или не нашел инфы), будто-бы кнопка, само ее нажатие может отправить POST или добавить какой нибудь заголовок.

Вопрос, как убедиться, что ссылка для запуска кнопки точно открыта в тг, а еще лучше, что на нее нажал конкретный пользователь?

—-

Делаю бота который читает почтовый ящик и присылает в новых сообщение о новых письмах (отправитель, тема), а по inline-кнопке загружает само письмо. Но результат должен быть именно от клика по кнопке. Из идей думал передать в ссылке ID письма и с соленым хешем темы+отправителя. А в идеале было бы здорово добавить в заголовок авторизации, наверное…

UPD: документацию читал не внимательно


Ответы (1 шт):

Автор решения: stylok

Если я правильно понял ваш вопрос, то... Если ваше приложение запускается из инлайн-кнопки,то полноценной дефалтной авторизации там пока не предусмотрено. Однако вы можете на своём сайте/страничке помимо подключения https://telegram.org/js/telegram-web-app.js повесить отдельный js-скрипт, который будет контролировать ситуацию. По сути, со стороны Telegram-клиента происходит следующее. При запуске:

  1. Web Apps запускается с хэшем https://домен/путь/#tgWebAppData=... хэш естественно не передаётся серверу.
  2. После загрузки telegram-web-app.js в "браузере" клиента из этого длинного хэша помимо общих переменных формируется sessionStorage с учётными данными и прочим содержимым.

Как и на какой стадии распорядиться ими — дело вкуса. Например, наш отдельно взятый скрипт. Можно внедрить хоть на нулевом этапе, а проверив, что к нам коннектится именно Telegram-клиент (там в window есть ещё зацепки помимо хэша) отправить POST-запрос с пожеланием загрузить остальное. Но в целом, дабы избежать заморочек, логичнее воспользоваться сессионными переменными (данными о клиенте) из sessionStorage и использовать их для ваших действий.

→ Ссылка