Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feature(bot): inline-button for registrations #294

Open
wants to merge 13 commits into
base: develop
Choose a base branch
from

Conversation

Hrushon
Copy link
Member

@Hrushon Hrushon commented Mar 27, 2023

Added InlineButton and MenuButton to call registration process template.

https://www.notion.so/Bot-cae1343ec01d42a897219b42f3add7ae

@Hrushon Hrushon temporarily deployed to healthcheck March 27, 2023 18:35 — with GitHub Actions Inactive
Copy link

@AntonRev AntonRev left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@Hrushon Hrushon temporarily deployed to healthcheck March 29, 2023 17:10 — with GitHub Actions Inactive
@Hrushon Hrushon requested a review from AntonRev March 29, 2023 17:25
Copy link

@AntonRev AntonRev left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Мне кажется добавление кнопок везде звучало лучше чем получилось. Может стоит убрать в меню? @Ivan-Skvortsov @ADesBiysk

@ADesBiysk
Copy link
Member

Мне кажется добавление кнопок везде звучало лучше чем получилось. Может стоит убрать в меню? @Ivan-Skvortsov @ADesBiysk

Мне inline кнопка не очень нравится. Я снял видео и задал вопрос в coreteam.

@Ivan-Skvortsov
Copy link
Member

Ivan-Skvortsov commented Apr 6, 2023

Насколько я понял из доков телеги, для вебапп, запущенного из инлайн кнопки и из меню можно использовать answerWebAppQuery .
Разница в том, что sendData - это js-функция из пакета телеги telegram-web-app.js и её можно дернуть на фронте, а answerWebAppQuery - это метод бота, который нужно дергать на бэке.
Получается, нам нужен дополнительный эндпойнт на бэке, на который будет получать данные из вебапп.

Если резюмировать, то порядок действий для получения данных из вебапп должен быть такой:

  1. Получаем данные из initData при помощи кастомного js-скрипта.
  2. При помощи того же скрипта отправляем данные на бэк на наш эндпойнт
  3. На бэке обрабатываем данные, как нам необходимо и вызываем answerWebAppData, чтобы отправить сообщение пользователю (тут нужно использовать web_app_query_id, чтобы не промахнуться с чатом)

P.S.: по сути, даже в answerWebAppQuery нет нужды, мы просто можем повесить на мейн баттон вебаппа скрипт, который выполняет п.п.1 и 2 и закрывает вебапп. А сообщение пользователю отправляем уже с бэка, в зависимости от результатов обработки

P.P.S.: ну и чтобы не делать дополнительные шаблоны и логику на бэке, есть смысл переделать и также и текущую реализацию.

Могу где-то ошибаться, поправьте меня)

@Hrushon
Copy link
Member Author

Hrushon commented Apr 8, 2023

Ребята, подскажите @Ivan-Skvortsov @ADesBiysk @AntonRev
То, что сейчас реализовано, я так понимаю - никого не устраивает?) Нужно переделывать?

Я просто не знаю js и поэтому очень много времени трачу на него :( не хотелось бы зависать над решением, которое не пригодится впоследствии)

@ADesBiysk
Copy link
Member

Ребята, подскажите @Ivan-Skvortsov @ADesBiysk @AntonRev То, что сейчас реализовано, я так понимаю - никого не устраивает?) Нужно переделывать?

Я просто не знаю js и поэтому очень много времени трачу на него :( не хотелось бы зависать над решением, которое не пригодится впоследствии)

Сейчас реализовано не так как хотелось бы. Пример, как должно работать можно посмотреть в этом боте: https://t.me/DurgerKingBot
Если данная задача требует много времени и усилий, то лучше взять другую и не мучить себя.

@Hrushon
Copy link
Member Author

Hrushon commented Apr 12, 2023

Понял, буду переделывать

Version #2.
Added InlineButton & MenuButton to call registration process template.
Added new handlers.
…aryery_backend into feature/new_registration_buttons
Version # 2.
Added InlineButton & MenuButton to call registration process template.
Added new handlers.
Temporarily commented out checking of the secret token in the `webhook` endpoint.
@Hrushon Hrushon force-pushed the feature/new_registration_buttons branch from 77e32fa to e14382d Compare April 16, 2023 16:27
@Hrushon Hrushon temporarily deployed to healthcheck April 16, 2023 16:27 — with GitHub Actions Inactive
Version # 2.
Added InlineButton & MenuButton to call registration process template.
Added new handler.
Temporarily commented out checking of the secret token in the `webhook` endpoint.
@Hrushon Hrushon temporarily deployed to healthcheck April 16, 2023 17:41 — with GitHub Actions Inactive
@Hrushon
Copy link
Member Author

Hrushon commented Apr 16, 2023

@Ivan-Skvortsov @ADesBiysk @AntonRev

Понятно, что это не окончательный вариант, посмотрите, что выходит. Так пойдет?

  1. Закомментировал проверку секретного ключа в вебхуке телеграм бота на время, чтоб проходили POST-запросы с шаблона регистрации. Пока не знаю - как в шаблоне секретный ключ получить.
  2. Вроде все неплохо, единственное, не очень смотрится, что сообщение метод answerWebAppQuery от имени пользователя отправляет.
  3. Может объединим обратно методы update_user_data и register_user? Столько повторяется там кода...

@Hrushon Hrushon requested a review from AntonRev April 16, 2023 17:51
}
});
} else {
tg.sendData(JSON.stringify(data));
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Предлагаю от sendData вообще отказаться и все кейсы (кейбоард кнопка, инлайн кнопка и меню) обрабатывать одинаково.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Если это возможно, конечно)

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

скорее невозможно, так как данные о чате и пользователе отсутствуют при активации формы регистрации с keyboard button в initDataUnsafe, а больше и взять то негде

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Неприятно, конечно)
Получается, нам нужно либо отказываться от кейбоард кнопки, либо писать отдельно логику для кейбоард и отдельно для инлайн/меню?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

почему отказываться?
сейчас же работает. чуток совсем добавилось логики для инлайн/меню кнопок.
для пользователя разница лишь в способе оповещения о получении данных с формы: при активации с кейборд кнопки - встроенное телеграмовское оповещение, а при активации с меню/инлайн кнопки - отправка ботом сообщения от имени пользователя в чат.

src/bot/handlers.py Outdated Show resolved Hide resolved
Comment on lines +48 to +54
bot_instance.add_handler(
TypeHandler(
dict,
get_web_app_query_data,
)
)
bot_instance.add_handler(MessageHandler(Regex(RE_PATTERN), web_app_data))
Copy link
Member

@Ivan-Skvortsov Ivan-Skvortsov Apr 21, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Довольно запутанно получилось, на мой взгляд)

Если я правильно понял назначение всех этих хэндлеров - ты пытаешься работать вокруг бота/чата телеги.
Попробуй посмотреть на эту задачу с другой стороны.
Фактически, у тебя есть полноценный фронт (вебапп) и полноценный бэкенд (собственно, наше приложение). При этом в бэкенде у тебя есть доступ к боту (bot_instance, который лежит в app.state).
То есть, для обработки данных из вебапп, чат телеги тебе не нужен вообще. Просто работай с ними как с любыми другими данными)

Вот, например, я накидал тестовый эндпойнт, который принимает запрос с данными из вебапп и отправляет пользователю инлайн сообщение, что все ок (взял кусок из твоего кода).
image

Copy link
Member Author

@Hrushon Hrushon Apr 21, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@Ivan-Skvortsov
если это для того, чтобы только избавиться от функции get_web_app_query_data, то да, спасибо, попробую сделать так.

Copy link
Member Author

@Hrushon Hrushon Apr 21, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@Ivan-Skvortsov эта функция будет срабатывать получается вразрез с очередью бота update_queue, не могу оценить - насколько это критично? ощущение, что это не очень хорошо

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Мне кажется, в данном случае нам это неважно. Я думаю, работу с вебапп нужно рассматривать как работу бэка с фронтом)
Могу ошибаться, конечно)

Version # 3.
Added InlineButton & MenuButton to call registration process template.
Added new handler.
Added new endpoint for a requests with data coming from registration form launched via the keyboard button.
…aryery_backend into feature/new_registration_buttons
@Hrushon Hrushon temporarily deployed to healthcheck April 21, 2023 17:01 — with GitHub Actions Inactive
Hrushon and others added 2 commits April 23, 2023 09:43
Version # 4.
Added InlineButton & MenuButton to call registration process template.
Added new handler.
Added new endpoint for a requests with data coming from registration form launched via the keyboard button.
Changed the function of the registration template rendering in terms of adding a url from the settings-file to receive requests with data launched via `inline/menu` button.
@Hrushon Hrushon temporarily deployed to healthcheck April 23, 2023 03:58 — with GitHub Actions Inactive
…aryery_backend into feature/new_registration_buttons
Version # 5.
Added InlineButton & MenuButton to call registration process template.
Added new handler.
Added new endpoint for a requests with data coming from registration form launched via the keyboard button.
Changed the function of the registration template rendering in terms of adding a url from the settings-file to receive requests with data launched via `inline/menu` button.
…aryery_backend into feature/new_registration_buttons
@Hrushon Hrushon temporarily deployed to healthcheck April 29, 2023 10:32 — with GitHub Actions Inactive
…aryery_backend into feature/new_registration_buttons
Version # 6.
Added InlineButton & MenuButton to call registration process template.
Added new handler.
Added new endpoint for a requests with data coming from registration
form launched via the keyboard button.
Changed the function of the registration template rendering in terms of
adding a url from the settings-file to receive requests with data
launched via `inline/menu` button.
@Hrushon Hrushon temporarily deployed to healthcheck May 21, 2023 09:46 — with GitHub Actions Inactive
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants