Telegram WebApps параметры
Разбираю веб-приложения телеграма и назрел вопрос. Я могу в сообщении передать inline-кнопку, для открытия, но я не понимаю как убедиться, что приложение открыто именно в телеграме. Заголовки на сервере ничего особенно не выдают. Появилась мысль (и быстро пропала, или не нашел инфы), будто-бы кнопка, само ее нажатие может отправить POST или добавить какой нибудь заголовок.
Вопрос, как убедиться, что ссылка для запуска кнопки точно открыта в тг, а еще лучше, что на нее нажал конкретный пользователь?
—-
Делаю бота который читает почтовый ящик и присылает в новых сообщение о новых письмах (отправитель, тема), а по inline-кнопке загружает само письмо. Но результат должен быть именно от клика по кнопке. Из идей думал передать в ссылке ID письма и с соленым хешем темы+отправителя. А в идеале было бы здорово добавить в заголовок авторизации, наверное…
UPD: документацию читал не внимательно
- https://core.telegram.org/bots/webapps#initializing-mini-apps
- https://core.telegram.org/bots/webapps#validating-data-received-via-the-mini-app
Ответы (1 шт):
Если я правильно понял ваш вопрос, то...
Если ваше приложение запускается из инлайн-кнопки,то полноценной дефалтной авторизации там пока не предусмотрено. Однако вы можете на своём сайте/страничке помимо подключения https://telegram.org/js/telegram-web-app.js
повесить отдельный js-скрипт, который будет контролировать ситуацию.
По сути, со стороны Telegram-клиента происходит следующее. При запуске:
- Web Apps запускается с хэшем
https://домен/путь/#tgWebAppData=...
хэш естественно не передаётся серверу. - После загрузки
telegram-web-app.js
в "браузере" клиента из этого длинного хэша помимо общих переменных формируется sessionStorage с учётными данными и прочим содержимым.
Как и на какой стадии распорядиться ими — дело вкуса. Например, наш отдельно взятый скрипт. Можно внедрить хоть на нулевом этапе, а проверив, что к нам коннектится именно Telegram-клиент (там в window есть ещё зацепки помимо хэша) отправить POST-запрос с пожеланием загрузить остальное. Но в целом, дабы избежать заморочек, логичнее воспользоваться сессионными переменными (данными о клиенте) из sessionStorage и использовать их для ваших действий.