Проверка подписки на канал/группу в Telegram

Проверка подписки работает только в Telegram.

Проверить подписан ли пользователь на группу/канал можно с помощью запроса к Телеграм API методом getChatMember.

Для этого оформите в конструкторе экраны:

1. Создайте экран с компонентом Нативный запрос или просто Запрос. Если вы используете обычный запрос, выберите метод POST и заполните URL запроса:

https://api.telegram.org/botТОКЕН/getChatMember

Где вместо ТОКЕН — токен вашего бота в Телеграм.

В Нативном запросе добавлять токен и выбирать метод не нужно.

2. Добавьте тело запроса:

{
"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 пользователя, у которого мы будем проверять подписку. Можно оставить без изменений, тогда будет проверяться пользователь, который попал на компонент Запрос в боте.

3. Добавьте бота, из которого будет отправляться запрос, администратором со всеми правами в группу/канал. На этот канал мы будем проверять подписку.

4. Добавьте экран с Развилкой. Настройте переход на Развилку с Нативного запроса, в случае удачного выполнения запроса.

5. Проверяйте в Развилке переменную last_native_request.result.status

Это значит, что развилка будет брать значение с этой переменной, если использовать Нативный запрос. Если вы используете обычный запрос, то развилка будет брать значение с last_request.result.status

6. Настройте Цели развилки для перехода пользователя на экраны в зависимости от наличия/отсутствия подписки.

В ответе от сервера в переменной last_native_request.result.status могут быть следующие значения:

  • member — пользователь является подписчиком;
  • left — пользователь не подписан;
  • kicked — пользователь удален;
  • administrator — админ;
  • creator — создатель.

Чтобы в зависимости от ответа сервера пользователь попадал на соответствующий экран, настройте Цели развилки для каждого ответа.

Также возможен вариант с двумя Целями: одна для подписавшихся пользователей, а другая для тех, кто не подписался. Однако, если этот вариант будет тестироваться администратором, создателем или удаленным участником из канала/группы, то даже в случае успешного выполнения запроса они не получат уведомление. Сообщение придет только пользователям, не являющимся администраторами, создателями канала или теми, кто был удален из группы админом.

Вместо этого, вы можете использовать вариант с регулярным выражением:

(member|creator|administrator)

Это регулярное выражение должно быть в Цели Развилки для того, чтобы подписавшиеся пользователи, а также администраторы и создатель группы/канала попадали на отдельный экран. Во второй цели может быть другое регулярное выражение:

(left|kicked)

Такое регулярное выражение будет пропускать только пользователей не подписавшиеся и удаленных. В данном случае, удаленным из чата вместе с неподписавшимися пользователями придет отдельный экран, также свой собственный экран получат участники группы канала, создатель и администраторы.

7. Оформите экраны для ответа пользователю.

Как открывать доступ к каналу/группе после оплаты в боте, можно посмотреть тут →

Оплату на стороннем сайте можно сделать с помощью Внешнего события

В начало ↑