Действие «Группы и каналы Telegram»
«Работа с группами и каналами в Telegram» — действие в сценарии действий, которое управляет каналом или группой Telegram от имени бота: публикации, модерация участников, проверка подписки, генерация инвайт-ссылок, выдача прав.
Для работы бот должен быть админом канала/группы с нужными правами.
Когда использовать
- Автопубликации в канал — анонсы новых товаров, акций, событий из бота.
- Геймификация: участие в боте требует подписки на канал — проверка.
- Модерация группы — банить за слова, выдавать варн, ограничивать.
- Закрытые сообщества: инвайт-ссылки выдаются только после оплаты.
- Распределение ролей: бот выдаёт права админа конкретным пользователям.
Часть 1. Подключение
Шаг 1. Добавьте бота в канал/группу
- В Telegram откройте канал/группу.
- Управление → Администраторы → Добавить администратора.
- Найдите вашего бота (
@your_bot). - Выдайте права: Публикация сообщений, Удаление сообщений, Бан пользователей, Добавление пользователей, Управление инвайт-ссылками (по необходимости).
Шаг 2. Узнайте ID
- Публичный канал/группа: используйте
@username. - Приватный: ID начинается с
-100.... Можно узнать, переслав сообщение из канала боту-инспектору (например,@username_to_id_bot).
Часть 1а. Бот, который работает внутри группы
Реагировать на сообщения в группе — не то же самое, что вести диалог в личке. Отличий три, и все три сбивают с толку, если о них не знать.
1. Из группы бот отвечает только стартовым блоком
Движок обрывает сценарий на любом следующем блоке. Иначе бот начал бы вести пошаговый диалог в общем чате и завалил бы его сообщениями.
Поэтому весь сценарий группы — это один блок, который ведёт сам на себя, а вся логика живёт в сценарии действий на этом блоке.
2. Текст блока уходит в личку, а не в группу
Ответить в группу текстом самого блока нельзя: сообщение уйдёт автору реплики в личные сообщения, а если он никогда не запускал бота — не уйдёт никуда.
В группу пишет отдельная операция «Отправка сообщения» этого действия, с адресом группы в поле канала: #{_tggroup_id} (в МАКС — #{_maxgroup_id}).
3. Что произошло в группе, известно только из системных переменных
Ни ответа подписчика, ни нажатой кнопки здесь нет. Есть набор переменных _tggroup_* (и _maxgroup_* в МАКС): кто написал, что написал, в какой группе, id сообщения, кто вошёл и кто вышел. Полный список — в разделе Системные переменные.
Основные:
| Переменная | Что содержит |
|---|---|
_tggroup | 1, если событие пришло из группы |
_tggroup_id | ID группы — им же адресуется ответ |
_tggroup_text | Текст сообщения |
_tggroup_user_id | Кто написал |
_tggroup_first_name | Имя написавшего |
_tggroup_message_id | ID сообщения — для ответа реплаем или удаления |
_tggroup_new_chat_member / _tggroup_left_chat_member | Кто вошёл и кто вышел |
Рецепт «Группа или канал Telegram/МАКС» (24-й в списке рецептов) собирает всю заготовку целиком: самозацикленный стартовый блок, разбор события и ответ в группу с правильными именами переменных.
Сообщение из группы, комментарий под постом, пост канала разбирает цепочка, стартовый блок которой слушает событие: переменная _tggroup (для МАКС — _maxgroup, для поста канала — _channelpost) упомянута в его сценарии или условиях переходов. Поэтому на одном боте могут жить и другие цепочки: комментарий человека, который раньше писал другой цепочке, всё равно попадёт в бот группы. Нажатие кнопки под сообщением группы или канала разбирает цепочка, где есть блок, на который ведёт кнопка. Личная переписка человека при этом остаётся в прежней цепочке.
Часть 2. Доступные операции
В сценарии действий → «Добавить действие» → «Работа с группами и каналами в Telegram».
14 операций:
| Операция | Назначение |
|---|---|
| Отправка сообщения | Публикация в канал/группу |
| Оплата звездами | Платный пост: фото/видео скрыты до оплаты звёздами Telegram |
| Ссылка на подписку за звёзды | Закрытый канал с ежемесячным списанием звёзд |
| Реакция на сообщение | Бот ставит эмодзи на сообщение |
| Темы форума | Создание, закрытие, открытие и удаление темы |
| ID темы форума | Есть у отправки, пересылки, копирования и опроса: сообщение уйдёт в тему, а не в общий поток |
| Список подарков / Подарок подписчику | Подарок за звёзды с баланса бота |
| Проверка подписки | 1 — подписан, 0 — нет. Статус участника — в переменной <имя переменной результата>_status и в _member_status: creator, administrator, member, restricted, left, kicked. С «ID пользователя» [BotID] это статус самого бота — так сценарий узнаёт, администратор ли бот в группе или канале |
| Удаление сообщения | По ID сообщения |
| Бан | Заблокировать пользователя |
| Снятие бана | Разблокировать |
| Установка ограничений | Запретить писать/добавлять стикеры/полл |
| Установка прав | Сделать админом, выдать конкретные права |
| Установка имени администратора | Кастомный «титул» в супергруппе |
| Генерация пригласительной ссылки | Простая инвайт-ссылка |
| Генерация ссылки с параметрами | С лимитом, сроком, по запросу |
| Одобрить вступление | Для каналов «по заявкам» |
| Отклонить вступление | То же, отказать |
| Получить список администраторов | Массив админов |
| Получить число участников | Сколько в канале |
| Изменение сообщения | Правка опубликованного поста |
| Закрепление / Открепление | Пост в шапке канала |
| Пересылка / Копирование | Перенести пост из другого канала |
| Опрос | Опрос в канале или группе |
| Данные канала/группы | Название, ссылка, число участников, закреплённый пост |
| Отзыв пригласительной ссылки | Закрыть выданную ссылку |

Скриншот 1. Список операций.
Клиенты из МАКСа, ВКонтакте и с сайта
Группа Телеграма может обслуживать клиентов любого мессенджера бота. Если подписчик пишет из МАКСа, ВКонтакте или с виджета сайта, операции, которые работают с самой группой или каналом, выполняет Телеграм-бот той же цепочки. Это отправка и правка сообщения, темы форума, закреп, пересылка, опрос, реакция, пригласительные ссылки и данные канала. Так собирается приёмная «все каналы в одну группу»: клиент пишет откуда угодно, а тема для него заводится в группе Телеграма.
Операции, которые касаются самого подписчика, по-прежнему работают только для подписчика из Телеграма: проверка подписки, бан, ограничения, права, заявки на вступление, звёзды и подарки. У клиента из МАКСа нет id в Телеграме.
Если в цепочке нет бота Телеграма, операция не выполнится, а в #{_error}
будет объяснение.
Кнопки под сообщением из кода
Кнопки, собранные в сценарии, передавайте набором. Это одна кнопка, у
которой название — #{имена}, а значение (или переход, или ссылка) —
#{значения}. В переменных лежат JSON-массивы строк одинаковой длины.
Движок развернёт набор в столько кнопок, сколько названий.
Если в поле кнопок положить переменную с JSON-массивом готовых кнопок
(#{кнопки}), движок тоже её разберёт. Но редактор сценария такое поле
не покажет, поэтому набор надёжнее.
Часть 3. Отправка сообщения (message)
| Поле | Значение |
|---|---|
| ID или username канала | @channelname или -1001234567890 |
| Сообщение | Текст с шаблонами замен и переменными |
| Кнопки | Inline-кнопки (URL, callback, WebApp) |
| Медиа | Фото, документы, аудио — загружаются здесь же, как в обычном сообщении бота |
| File ID | Идентификатор файла этого бота: фото, документ, видео, аудио |
| ID темы форума | Для супергрупп с темами: сообщение уйдёт в тему |
| Ответить на сообщение (ID) | Номер сообщения группы, на которое бот отвечает, например #{_tggroup_message_id} |
Бот опубликует от имени канала.
Комментарии канала живут в группе обсуждения, и каждая ветка — это цепочка
ответов. Укажите в поле «Ответить на сообщение (ID)» номер комментария
(#{_tggroup_message_id}), а в поле канала — группу обсуждения
(#{_tggroup_id}): ответ бота встанет в ту же ветку, прямо под вопросом,
и человек получит уведомление. ID темы форума здесь не нужен — он только
для групп с темами.
Сотрудник ответил в ветке сам — это обычное сообщение группы, в котором
#{_tggroup_reply_to_message_from_id} — автор вопроса. Ответ от имени
канала или анонимного администратора приходит с #{_tggroup_user_id}
136817688 и 1087968824 соответственно. #{_tggroup_sender_chat_id}
у комментария — канал поста, на который отвечают, а не автор.
Готовый бот на этом — «Комментарии канала → заявки».
Кнопка «Загрузить медиафайл» принимает файлы до 10 МБ: jpg, png, gif, pdf, doc, xls, zip, mp4, mp3 и остальные привычные форматы. Несколько файлов уйдут одной публикацией.
Большие файлы надёжнее отправлять по File ID: загрузите файл боту один раз, сохраните #{_fileId} и укажите его в поле File ID — тогда Telegram не будет перезаливать файл при каждой публикации.
Сообщение может состоять из одного медиа: текст в этом случае не обязателен.
Применения
- Анонс новой акции:
🔥 Скидка 30% до конца недели! - Новости магазина: новые товары с WebApp Магазин.
- Уведомления подписчикам канала о боте.
Часть 3.1. Оплата звездами — платный пост (starpayment)
Публикует в канал/группу платный пост: прикреплённые фото/видео скрыты, пока подписчик не оплатит доступ звёздами Telegram (Stars). Каждый подписчик оплачивает свой доступ отдельно.
| Поле | Значение |
|---|---|
| ID или username канала | Куда публиковать пост |
| Цена в звёздах | Целое 1–10000 ⭐ — одна цена за весь пост |
| Подпись | Необязательный текст (виден всем до оплаты) |
| Медиа | 1–10 элементов; для каждого — File ID и тип (фото/видео) |
| Кнопки | Только URL-кнопки |
За звёзды открываются только фото и видео. Документы, аудио, голосовые и GIF/анимации не поддерживаются.
- File ID должен принадлежать этому боту — получите его заранее (например, загрузив медиа боту отдельным шагом и сохранив
file_idв переменную). - Звёзды зачисляются на баланс бота; вывод — в @BotFather → Bot Settings → Payments (период удержания ~21 день).
Применение
- Закрытый платный контент в канале без отдельной платёжной системы.
- Продажа фото/видео-материалов «за звёзды» прямо из публикации.
Часть 3.2. Работа с опубликованным постом
Отправка кладёт номер поста в _group_message_id. По нему пост потом правят,
закрепляют и удаляют — сохраните номер в свою переменную, если вернётесь
к посту позже: следующая отправка перезапишет системную.
| Операция | Поля |
|---|---|
Изменение сообщения (mesedit) | канал, ID сообщения, новый текст |
Закрепление (pin) | канал, ID сообщения, уведомлять ли участников |
Открепление (unpin) | канал, ID сообщения (пусто — последнее закреплённое) |
Пересылка (forward) | откуда, ID сообщения, куда, тема форума |
Копирование (copy) | то же, но без подписи «Переслано из…» |
Удалённый и опубликованный заново пост теряет просмотры, реакции и все ссылки, которые на него уже дали. Правка сохраняет их.
Часть 3.3. Опрос (poll)
| Поле | Значение |
|---|---|
| Вопрос | Текст опроса |
| Варианты ответа | По одному в строке, от 2 до 12 |
| Анонимный опрос | Видно ли, кто как ответил |
| Можно выбрать несколько | Один ответ или несколько |
| ID темы форума | Для супергрупп с темами, необязательно |
Часть 3.4. Данные канала (chatinfo)
Кладёт в системные переменные: _chat_title, _chat_username,
_chat_description, _chat_link, _chat_membercount, _chat_pinned.
Весь ответ мессенджера можно дополнительно получить в свою переменную.
Часть 4. Проверка подписки (subscription)
| Поле | Значение |
|---|---|
| ID или username | Канал/группа для проверки |
| ID пользователя | Чью подписку проверять. Пусто — текущего подписчика |
| Имя переменной | Куда сохранить результат: 1 или 0 |
Подписанным считается любой, кто состоит в канале: участник, владелец, администратор и участник с ограничениями — тот, кому запрещено писать, но из канала он не вышел.
Если подписчик пришёл из MAX/VK/Viber — проверка вернёт 0.
Применение
«Подпишись на канал → получи бонус»:
Блок «Проверка подписки»
Сценарий действий «До»:
- TG канал → subscription для @your_channel → переменная sub
Условие #{sub} = 1 → блок «Бонус»
Условие #{sub} = 0 → блок «Подпишись и нажми кнопку Проверить»
Часть 5. Модерация: ban / unban / restrict / promote
Бан (ban)
| Поле | Значение |
|---|---|
| ID канала | Где банить |
| ID пользователя | Кого банить. [ClientID] — текущий клиент |
Снятие бана (unban)
Те же поля. Разбанит пользователя.
Ограничения (restrict)
Запрет писать/добавлять стикеры/полл/инвайтить на определённое время.
Права (promote)
Выдать права админа: публикация, удаление, бан, инвайт, видеочаты и т.д.
Кастомное имя (customtitle)
В супергруппах после promote можно дать «титул» — Главный модератор, Лучший продавец.
Часть 6. Инвайт-ссылки
Простая ссылка (exportinvitelink)
Сгенерирует постоянную инвайт-ссылку. Подписаться может кто угодно — действует бессрочно.
Ссылка с параметрами (createinvitelink)
| Параметр | Значение |
|---|---|
| Срок жизни | Через сколько секунд истечёт. Пусто или 0 — ссылка бессрочная |
| Лимит участников | Сколько может подписаться (1–99999). Пусто — без лимита |
| С заявкой | Требует одобрения админа (approvejoin / declinejoin) |
| Название | Метка ссылки в админке Telegram |
Применение: «Подписка PRO» — клиент оплатил, бот генерирует ссылку с лимитом 1 и отправляет ему.
Сделайте на каждую рекламу свою ссылку с заявкой и понятным названием.
Заявка приносит ссылку, по которой пришёл человек, — #{_joinrequest_invite_link}:
найдите по ней источник, одобрите заявку и запишите. После одобрения придёт
ещё и событие входа участника (#{_chatmember_joined} = 1) — второй раз
его не считайте; выход — #{_chatmember_left} = 1. Готовый бот на этом —
«Источники подписчиков канала» в модерации сообществ.
Одобрение/Отклонение (approvejoin / declinejoin)
Для каналов «по заявкам». Бот может автоматически принимать только тех, кто, например, оплатил доступ.
О новой заявке бот узнаёт сам: сценарий запускается с #{_joinrequest} = 1, группа — в #{_joinrequest_chat_id}, описание профиля — в #{_joinrequest_bio}. В первые 5 минут после заявки бот может написать человеку в личку — так задают вопросы анкеты до входа (готовый бот «Вход в группу по анкете»).
В поле ID пользователя — id того, кто подал заявку. Одобрять может и модератор из МАКСа или с сайта: если в поле не его собственный id, операция выполнится от Телеграм-бота той же цепочки.
Часть 7. Чтение информации
Список администраторов (getadministrators)
Возвращает массив админов канала. Используется для уведомлений всем админам.
Число участников (getmembercount)
Возвращает целое число — текущее количество подписчиков. Удобно для:
- Отображения статистики «Нас уже X участников»;
- Триггеров «Когда нас будет 1000, дадим скидку».
Часть 8. Удаление сообщения (mesdelete)
Удалить конкретное сообщение по ID. Применяется для:
- Самоудаления старых акций;
- Удаления тестовых публикаций по таймеру;
- Реакции на жалобу — удалить нарушающее сообщение.
Часть 9. Типовые сценарии
Сценарий 1. Анонс новой акции в канал
Блок «Запуск анонса» (по команде /announce от админа)
Сценарий действий «До»:
- TG канал → message:
канал: @promo_channel
текст: 🔥 #{promo_title}
До #{promo_date}, скидка #{promo_percent}%
кнопки: [«Открыть в боте»] → ссылка t.me/your_bot?start=promo
Сообщение админу: «✅ Анонс опубликован»
Сценарий 2. Геймификация — подпиской
Блок «Бонус за подписку»
Сценарий действий «До»:
- TG канал → subscription для @your_channel → переменная #{is_sub}
Условие #{is_sub} = 1 → блок «Бонус выдан»
- Глобальная переменная #{client_bonus} += 100
- Сообщение: «🎁 Вы получили 100 баллов!»
Условие #{is_sub} = 0 → блок «Подпишитесь»
- Сообщение: «Подпишитесь на @your_channel и нажмите Проверить»
- Кнопка «🔄 Проверить» → возврат на блок «Бонус за подписку»
Сценарий 3. PRO-канал по оплате
Цепочка «Успешная оплата PRO»
Сценарий действий «До»:
- TG канал → createinvitelink:
канал: -1001234567890 (приватный PRO-канал)
лимит: 1 (только этот клиент)
срок: 24 часа
→ сохранить ссылку в переменную #{invite_link}
Сообщение клиенту: «Доступ к PRO-каналу: #{invite_link}
Активна 24 часа.»
Сценарий 4. Автомодерация
Цепочка «Сообщение в группе» (триггер: новое сообщение в группе)
Сценарий действий «До»:
- JS код: проверить [Answer] на запрещённые слова
- Если запрещено:
- TG канал → mesdelete (удалить сообщение)
- TG канал → restrict (запретить писать на 1 час)
- Уведомление админам
Сценарий 5. Уведомление всем админам
Блок «SOS от клиента»
Сценарий действий «До»:
- TG канал → getadministrators → массив #{admins}
- Перебор массива → каждому отправить сообщение через [Группы Telegram → message]
Сценарий 6. Подписки «по заявкам»
Цепочка «Новая заявка» (триггер из Telegram)
Сценарий действий «До»:
- Проверка: оплачена ли подписка клиента
- Если да: TG канал → approvejoin
- Если нет: TG канал → declinejoin + сообщение «Сначала оплатите»
Часть 10. Архитектура
Принцип 1. ID каналов — в глобальные переменные
g_main_channel, g_pro_channel, g_support_group — храните там.
Принцип 2. Не пишите в каналы из сценариев клиента
Сообщения в публичных каналах должны быть редкими и осознанными. Не публикуйте «при каждом действии клиента» — только важные анонсы.
Принцип 3. Проверка подписки — частая операция
Запускайте каждый раз, когда нужен бонус. Telegram кеширует ~30 секунд — частые повторные проверки могут вернуть устаревшие данные.
Принцип 4. Резервируйте права бота
Если ушло одобрение прав из канала (админ убрал, ошибочное действие) — операции начнут возвращать ошибки. Добавьте проверку через getadministrators периодически.
Принцип 5. Инвайт-ссылки с лимитом
Для платных каналов всегда указывайте лимит = 1 и срок жизни (24 часа). Так одна оплата ≠ доступ для всего интернета.
Принцип 6. Логируйте модерацию
Бан, ограничение, удаление — в список «Модерация» с причиной и временем. Это покажет паттерны и защитит от ошибок.
Частые ошибки
403 chat not found— бот не админ или нет прав в канале. Проверьте.subscriptionвсегда возвращает0— клиент пришёл не из Telegram. Это вне Telegram-канала.- Не открывается приватный канал — username неверный для приватного. Используйте ID
-100.... - Кнопки в публикации не отображаются — для каналов работают только inline-кнопки (не reply-клавиатура).
createinvitelinkне работает — у бота нет права «Управление инвайт-ссылками». Включите в админке.- Превышение лимитов Telegram API —
429 Too Many Requests. Делайте паузу между массовыми операциями.
Что дальше
- Группы и каналы МАКС — аналог для MAX.
- Цепочки — триггер «при добавлении тега» для PRO-канала.
- Платежи — оплата → инвайт-ссылка.
- Глобальные переменные — ID каналов.
- Списки — лог модерации.