Как организовать авторизацию в Telegram Bot в группах (PHP)?
Добрый вечер всем!
Встала задача разработать Telegram бота для пользователей сайта, через который будет происходить рассылка новых статей с нашего сайта.
Пользователь должен получать рассылку по статьям тех категорий, которые он выбрал в персональном кабинете на сайте.
Для того чтобы получать рассылку, пользователь должен авторизоваться в телеграм боте с помощью логина и пароля с сайта.
Хотим добавить кнопку - авторизоваться, после нажатия на которую нужно будет ввести сначала логин, а потом пароль.
Есть некоторые вопросы, которые возникают в силу неопытности разработки бота тг.
Как после нажатия "Авторизоваться" мой бэкенд должен понять, что следующий запрос будет запрос на ввод логина? Хранит ли сервер telegram какой нибудь statement для такого случая? Тогда как его инициировать? Или придется statement хранить у себя в базе/кеше итп? Или мне нужно будет перепроверять каждый раз предыдущее сообщение пользователя? Как такой кейс обычно решается. Поделитесь плз опытом.
Вы должны авторизовывать не сайт, а бота, т.е. зачем посылать логин и пароль? Просто попросите юзера в личном кабинете сохранить ник в телеграме. Когда он сохранит, создать уникальный токен. Потом попросить написать боту и прислать этот токен. Когда они совпадут, авторизация пройдена.
Я вас усышал.
На данный момент технически суть такова - хочу привязать id чата пользователя, который верно пришлет логин и пароль в боте к пользователю сайта (к пользователю же и прикреплены данные о подписках).
Суть просто - достать chat_id и прикрепить к пользователю из базы.
Потом попросить написать боту и прислать этот токен. Когда они совпадут, авторизация пройдена.
Вот меня интересует технически вот этот момент. Как бот должен понять, что сейчас в чат отправят токен? Или бот всегда должен прослушивать все сообщения и прогонять их через логику аутентификации (типа токен это или нет, совпаает ли он с каким либо сгенеренными токеном)?
Попросить пользователя вписать свой ник, потом вписать токен, сгенереный на сайте - не вариант. Как по мне - не юзер френдли. Тем более зачем генерить токен, если на сайте уже есть токен (login + password).
Вот меня интересует технически вот этот момент. Как бот должен понять, что сейчас в чат отправят токен?
Читайте документацию. Там написано, что можно использовать или лонг пулинг, или вебхук (ваш вариант - вебхук). Когда пользователь напишет боту, телеграм пришлет вам уведомление.
Тем более зачем генерить токен, если на сайте уже есть токен (login + password).
Читайте документацию. Там написано, что можно использовать или лонг пулинг, или вебхук (ваш вариант - вебхук). Когда пользователь напишет боту, телеграм пришлет вам уведомление.
Это я знаю, у меня вебхук, с этим проблем нет. Возможно я неверно описал задачу.
Для меня важно понимать - я должен каждое входящее сообщение проверять на логин/пароль (в моем случае)? Либо в ТГ сохраняется какой-нибудь id стейтмента после нажатия на кнопку "ввести логин/пароль"?
Ну к примеру - юзер нажал на кнопку "ввести логин" и в следующем сообщении пользователя будет какой-либо идентификатор, указывающий на то, что это сообщение является ответом на запрос о логине.
Будете передавать голый пароль? Ну вперед.
Тогда ответьте мне на вопрос, если вы делали сайт с авторизацией пользователя.
Перед аутентификацией ваши пользователи отправляют с формы "неголый" пароль?
Технически сообщения будут передаваться по https. У меня вебхук, как я писал выше.
Ramzesh Halifionakis, тут надо отвечать пользователю, чтобы он получил оповещение о комментарии, сайтодел.
Для меня важно понимать - я должен каждое входящее сообщение проверять на логин/пароль (в моем случае)? Либо в ТГ сохраняется какой-нибудь id стейтмента после нажатия на кнопку "ввести логин/пароль"?
Какой, блин, ещё стейтмент. Документацию пробовали читать? У сообщений есть message_id, если вы хотите отслеживать по ним, а ещё есть клавиатура и инлайн кнопки, есть команды. Сделать можно по-всякому: можно сделать команду, которая попросит пользователя ввести логин и пароль, сохранить команду куда-нибудь с привязкой к этому юзеру. Когда он введёт логин и пароль и отправит вам, проверять на сервере, какая была последняя команда, и если была команда, например, auth, то значит, к нам пришли логин и пароль, проверяем и принимаем решение.
Перед аутентификацией ваши пользователи отправляют с формы "неголый" пароль?
Есть большая разница в ощущениях пользователя. На сайте поле пароля скрыто, у бота - нет. Можно прочесть переписку с ботом и выцепить их. В общем, неужели ввести логин и пароль быстрее, чем токен?
Какой, блин, ещё стейтмент. Документацию пробовали читать? У сообщений есть message_id, если вы хотите отслеживать по ним, а ещё есть клавиатура и инлайн кнопки, есть команды. Сделать можно по-всякому: можно сделать команду, которая попросит пользователя ввести логин и пароль, сохранить команду куда-нибудь с привязкой к этому юзеру. Когда он введёт логин и пароль и отправит вам, проверять на сервере, какая была последняя команда, и если была команда, например, auth, то значит, к нам пришли логин и пароль, проверяем и принимаем решение.
Спасибо! Отсюда я понял, что сейтмент нужно у себя в бэке сохранять, у тг такой фишки нет (кроме как на контакты и геопозицию, как я понял).
Есть большая разница в ощущениях пользователя. На сайте поле пароля скрыто, у бота - нет. Можно прочесть переписку с ботом и выцепить их. В общем, неужели ввести логин и пароль быстрее, чем токен?
Согласен, тоже не идеальный вариант. Просто аудитория сайте не будет разбираться какой токен куда вписывать. Хотелось упростить.
В любом случае, я нашел ответ на свой вопрос. Спасибо.