Проверка подписки на канал/группу в Telegram
Проверка подписки работает только в Telegram.
Проверить подписан ли пользователь на группу/канал можно с помощью запроса к Телеграм API методом getChatMember.
Для этого оформите в конструкторе экраны:
1. Создайте экран с компонентом Нативный запрос или просто Запрос. Если вы используете обычный запрос, выберите метод POST и заполните URL запроса:
https://api.telegram.org/botТОКЕН/getChatMember
Где вместо ТОКЕН — токен вашего бота в Телеграм.
В Нативном запросе добавлять токен и выбирать метод не нужно.
3. Добавьте тело запроса:
{ "chat_id": "ID канала", "user_id": "{{this_user.platform_id}}" }
Где:
- ID канала — ID группы/канала, на который проверяется подписка. (Чтобы получить ID канала в Телеграм, нужно открыть канал в веб-версии. В конце адресной строки будет число — это и есть id канала. В начале этого числа допишите: -100. То есть, если в адресной строке веб-версии отобразилось web.telegram.org/a/#-2234567899, то в поле Telegram ID нужно вписать: -1002234567899. ID группы можно увидеть в разделе Пользователи после добавления бота в админы группы).
Также вместо ID канала можно вставить ссылку на канал в формате @botmothercom. Такая ссылка есть в настройках канала.
- user_id — id пользователя, у которого мы будем проверять подписку. Можно оставить без изменений, тогда будет проверяться пользователь, который попал на компонент Запрос в боте.
4. Добавьте бота, из которого будет отправляться запрос, администратором со всеми правами в группу/канал. На этот канал мы будем проверять подписку.
5. Добавьте экран с Развилкой. Настройте переход на Развилку с Нативного запроса, в случае удачного выполнения запроса.
6. Проверять будем переменную last_native_request.result.status Это значит, что развилка будет брать значение с этой переменной, если использовать Нативный запрос. Если вы используете обычный запрос, то развилка будет брать значение с last_request.result.status
7. Настройте Цели развилки для перехода пользователя на экраны в зависимости от наличия/отсутствия подписки.
В ответе от сервера в переменной last_native_request.result.status могут быть следующие значения:
- member — пользователь является подписчиком;
- left — пользователь не подписан;
- kicked — пользователь удален;
- administrator — админ;
- creator — создатель.
Чтобы в зависимости от ответа сервера пользователь попадал на соответствующий экран, настройте Цели развилки для каждого ответа.
Также возможен вариант с двумя Целями: одна для подписавшихся пользователей, а другая для тех, кто не подписался. Однако, если этот вариант будет тестироваться администратором, создателем или удаленным участником из канала/группы, то даже в случае успешного выполнения запроса они не получат уведомление. Сообщение придет только пользователям, не являющимся администраторами, создателями канала или теми, кто был удален из группы админом.
Также есть вариант с использованием регулярного выражения:
(member|creator|administrator)
Это регулярное выражение должно быть в Цели Развилки для того, чтобы подписавшиеся пользователи, а также администраторы и создатель группы/канала попадали на отдельный экран. Во второй цели может быть другое регулярное выражение:
(left|kicked)
Такое регулярное выражение будет пропускать только пользователей не подписавшиеся и удаленных. В данном случае, удаленным из чата вместе с неподписавшимися пользователями придет отдельный экран, также свой собственный экран получат участники группы канала, создатель и администраторы.
7. Оформите экраны для ответа пользователю
Как открывать доступ к каналу/группе после оплаты в боте, можно посмотреть тут
Оплату на стороннем сайте можно сделать с помощью Внешнего события