Как настроить сценарий проверки подписки на TG-канал

Что Мы Делаем

Пошаговая инструкция на примере сценария «подпишись на канал — получи лид-магнит»: пользователь нажимает кнопку, бот проверяет через Telegram Bot API, подписан ли он на нужный канал, и в зависимости от результата либо выдаёт PDF-гайд, либо просит сначала подписаться.

Как это работает

В FSTRK есть готовый DTL-тег telegram.is_channel_member — он сам обращается к Telegram и возвращает, состоит ли пользователь в нужном канале. Собирать HTTP-запрос к Telegram Bot API вручную больше не нужно: вся логика проверки укладывается в один тег внутри процедуры узла.

Тег работает только если бот добавлен в канал администратором. Без этого Telegram будет возвращать ошибку доступа независимо от того, подписан пользователь или нет.

Шаг 1. Готовим бота и канал

  1. Добавьте бота администратором в канал — зайдите в настройки канала в Telegram → «Администраторы» → «Добавить администратора» → выберите вашего бота. Права можно выдать минимальные, важен сам факт членства бота в канале.
  2. Узнайте ID канала через веб-версию Telegram:
    • откройте web.telegram.org и войдите в свой аккаунт;
    • откройте нужный канал в списке чатов;
    • посмотрите на адресную строку браузера — в ней будет числовой ID канала со знаком минус и префиксом -100, например -1001234567890. Это и есть готовый chat_id, который используется в запросе ниже.

Шаг 2. Создаём узел проверки подписки

Создаём в сценарии узел — например, назовём его ЛидМагнит - проверка подписки — и включаем в его настройках тумблер «Действия». Во вкладке «Расширенный режим (DTL-код)» прописываем логику проверки и ветвления:

{% telegram.is_channel_member channel_uid=tg_channel_id contact_id=messenger_id as is_member %}
{# проверяем результат для данного пользователя #}
{% if is_member %}
{# пользователь подписан на канал #}
{% switch "ЛидМагнит - выдача PDF" %}
{% else %}
{# пользователь не подписан на канал #}
{% switch "ЛидМагнит - не подписан" %}
{% endif %}

Заменяем tg_channel_id на ID канала из Шага 1 (например, -1001234567890). messenger_id трогать не нужно — это системная переменная, она автоматически подставит Telegram ID пользователя, который сейчас находится в сценарии.

Названия узлов — под ваш сценарий

"ЛидМагнит - выдача PDF" и "ЛидМагнит - не подписан" — это узлы, которые нужно создать заранее и подставить сюда свои названия. Не забудьте это сделать перед публикацией сценария — иначе switch будет ссылаться на несуществующий узел.

Шаг 3. Собираем сценарий вокруг проверки

Пример полной цепочки для лид-магнита:

  1. Пользователь нажимает кнопку «Забрать PDF-гайд» в любом месте сценария.
  2. Бот переходит в узел «ЛидМагнит — подписка», который просит подписаться на канал (со ссылкой на него) и содержит кнопку со ссылкой на канал, а также кнопку «Я подписался».
  3. Кнопка «Я подписался» ведёт в узел проверки подписки из Шага 2.
  4. Дальше срабатывает ветвление:
    • если подписан → узел «ЛидМагнит — выдача PDF» отправляет сообщение с прикреплённым файлом;
    • если не подписан → узел «ЛидМагнит — не подписан» объясняет, что подписка не найдена, и повторно показывает кнопку «Проверить снова».

Кнопка повторной проверки

Кнопку «Проверить снова» в узле «не подписан» настраиваем с типом действия «Переход на узел», а в качестве целевого узла указываем «ЛидМагнит — проверка подписки» — тот же узел из Шага 2. Кнопка просто повторяет проверку заново: если пользователь уже подписался, сработает ветка с выдачей PDF, если нет — снова окажется в этом же узле «не подписан».

Если проверка не срабатывает

Если is_member всегда приходит пустым/ложным независимо от реальной подписки — проверьте по порядку:

  • бот действительно добавлен в канал администратором (Шаг 1, пункт 1);
  • channel_uid в теге совпадает с ID из адресной строки веб-версии Telegram, вместе со знаком - и префиксом 100;
  • contact_id в теге действительно содержит messenger_id, а не что-то заменённое вручную по ошибке.

Итог

Мы настроили узел с HTTP-запросом к Telegram Bot API, разобрали ответ через DTL-условие и собрали вокруг него законченный сценарий выдачи лид-магнита с проверкой подписки и возможностью повторить попытку. Логика проверки не привязана к конкретному лид-магниту — тот же узел можно переиспользовать в любом другом сценарии, где нужно закрыть контент подпиской на канал.

Точно такой же сценарий, но для мессенджера MAX — в статье Как настроить сценарий проверки подписки на MAX-канал.