EnotPRO Logo EnotPRO

Обработчики команд

Что это такое

Обработчики команд — это механизм, который позволяет боту реагировать на текстовые сообщения пользователей. Это самый популярный тип обработчиков, с которого обычно начинается знакомство с ботом (например, команда /start).

Telegram имеет встроенную поддержку команд — слов, начинающихся с символа /. Однако обработчики EnotPro позволяют работать не только с ними, но и с обычным текстом, и даже со сложными регулярными выражениями.

Доступные подтипы

Подтип Что отслеживает Пример
Команда Текст, начинающийся с / /start, /menu, /help
Текст Любое текстовое сообщение «Привет», «Как дела?», «Сегодня хорошая погода»
Регулярное выражение Текст, соответствующий заданному шаблону Номер заказа, email, телефон, дата

Команда

Обработчик «Команда» срабатывает, когда пользователь отправляет сообщение, начинающееся с символа /.

Особенности работы в группах

В групповых чатах Telegram ведёт себя особенным образом:

  • Пользователь может отправить команду с упоминанием бота: /start@MyBot
  • Telegram автоматически удаляет упоминание из текста перед передачей боту
  • В переменной ${update.message.text} вы получите чистую команду: /start

💡 Что это даёт: вам не нужно прописывать варианты с упоминанием — бот сам их обработает.

Примеры команд

Команда Сработает на
/start /start, /start@MyBot
/help /help, /help@MyBot
/menu /menu, /menu@MyBot

Настройка

Параметр Значение Описание
Команда /start Текст команды (обязательно с /)
Игнорировать регистр ✅ / ❌ Если включено — /Start, /START тоже сработают

Пример использования

Задача: приветствовать пользователя при запуске бота

  1. Тип обработчика: Команда
  2. Команда: /start
  3. Реакция: SendMessage → «Привет, ${user.name}! Я бот-помощник.»

Текст

Обработчик «Текст» срабатывает на любое текстовое сообщение (кроме команд, начинающихся с /). Если вы хотите, чтобы бот отвечал на определённые фразы («Привет», «Пока», «Спасибо») — используйте этот тип.

⚠️ Внимание:

  • Обработчики типа «Текст» не срабатывают на команды (начинающиеся с /). Для команд используйте отдельный подтип.
  • Если вам нужно, чтобы обработчик срабатывал и на команды, и на текст — используйте «Регулярное выражение» с соответствующим шаблоном.

Примеры текстов

Условие Сработает на Не сработает на
Привет «Привет», «привет» (если включён ignore case) /start, «Здравствуй»
Как дела «Как дела?», «как дела» «Как у тебя дела?» (нужно точное совпадение)

Настройка

Параметр Значение Описание
Текст Привет Точная фраза, на которую должен реагировать бот
Игнорировать регистр ✅ / ❌ Если включено — разница между заглавными и строчными буквами игнорируется

Пример использования

Задача: бот отвечает «И тебе привет!» на любое приветствие

  • Тип обработчика: Текст
  • Команда: привет
  • Игнорировать регистр:
  • Реакция: SendMessage → «И тебе привет!»

Примечание: обработчик сработает только на точное слово «привет». На фразу «Привет, как дела?» — нет, так как там есть дополнительные слова. Для таких случаев используйте «Регулярное выражение».

Регулярное выражение

Описание

Обработчик «Регулярное выражение» срабатывает, когда текст сообщения соответствует заданному шаблону. Это самый гибкий, но и самый сложный подтип.

Когда использовать

  • Текст может меняться, но содержит определённую структуру (номер заказа, email, телефон)
  • Нужно извлечь часть сообщения (например, цифры из фразы «Мой возраст 25 лет»)
  • Фраза может быть в разных падежах или с дополнительными словами (например, «привет» и «привет, как дела»)

Правила составления

Правило Пояснение
1 Ограничение платформы Максимальная длина регулярного выражения в интерфейсе EnotPro — 128 символов. Само Telegram API таких ограничений не имеет.
2 Валидность Выражение должно быть валидным. Проверить можно на regex101.com (выберите синтаксис PCRE).
3 Синтаксис В EnotPro используется синтаксис PCRE (Perl Compatible Regular Expressions).

💡 Совет: Если вам нужно очень длинное выражение (например, для сложной валидации), разбейте его на несколько последовательных обработчиков или используйте макрос !{regex.match} внутри общего триггера.

Примеры регулярных выражений

Что ищем Регулярное выражение Сработает на
Любое приветствие (?i)^привет «привет», «Привет, как дела?», «ПРИВЕТ»
Число (одна и более цифр) \d+ «Мне 25 лет» → найдёт 25
Номер заказа (ровно 8 цифр) \b\d{8}\b «Заказ №12345678» → найдёт 12345678
Email [\w.-]+@[\w.-]+\.[a-z]{2,} «Моя почта example@mail.ru» → найдёт example@mail.ru
Команда или текст ^(/start)$ /start, привет (если нужно и то, и другое)

Извлечение данных (группы)

Если в регулярном выражении есть группы ( ), вы можете использовать их в реакциях.

Пример: обработчик на Мой возраст (\d+)

  • Пользователь пишет: «Мой возраст 25»
  • В переменной ${update.match.1} будет значение 25

Доступные переменные:

Переменная Что содержит
${handler.regex.list.0} Всё совпадение целиком
${handler.regex.list.1} Первая группа (первое найденное совпадение)
${handler.regex.list.N} N-ная группа

Настройка

Параметр Значение Описание
Регулярное выражение (?i)^привет Шаблон для поиска
Игнорировать регистр Обычно не требуется Флаг (?i) в выражении делает то же самое

Пример использования

Задача: бот извлекает номер заказа и отвечает «Ваш заказ №12345678 принят»

Параметр Значение
Тип обработчика Регулярное выражение
Регулярное выражение \b(\d{8})\b
Реакция SendMessage → «Ваш заказ №${update.match.1} принят»

Тест: пользователь пишет «Заказ №12345678» → бот отвечает «Ваш заказ №12345678 принят»

Настройки, общие для всех подтипов

Для всех обработчиков команд доступны следующие настройки (расположены в интерфейсе ниже поля ввода условия):

Настройка Описание
Приоритет Чем выше число, тем раньше обработчик будет проверяться. По умолчанию — 0.
Продолжить Если включено — после выполнения этого обработчика бот продолжит проверять следующие.
Задействовать в привате Включить/выключить работу в личных чатах с ботом.
Задействовать в чате Включить/выключить работу в группах и супергруппах.
Задействовать в каналах Включить/выключить работу в каналах (только для обработчиков, которые там имеют смысл).
Игнорировать регистр Не различать заглавные и строчные буквы (для команд и текста).

Ограничения и важные замечания

Ограничение Пояснение
1 Только текст Обработчики команд не срабатывают на медиа (фото, видео, стикеры) — для этого есть отдельный тип «Вложения».
2 Порядок проверки Бот проверяет обработчики в порядке убывания приоритета. Внутри одного приоритета — в порядке создания. Если несколько обработчиков подходят под условие, будет выполнен первый подходящий (если у него не включена опция «Продолжить»).
3 Команды в группах Команды с упоминанием бота автоматически преобразуются Telegram. Вам не нужно создавать отдельные обработчики для /start@MyBot.
4 Производительность Сложные или плохо составленные регулярные выражения могут увеличивать время ответа бота. Старайтесь делать их максимально конкретными.
5 Длина регулярного выражения Ограничение интерфейса платформы — не более 128 символов. Для более длинных выражений используйте макрос !{regex.match}.

Частые ошибки и их решение

Ошибка Решение
Обработчик на текст не срабатывает Проверьте, не включена ли опция «Игнорировать регистр», если нужно точное совпадение. Убедитесь, что в сообщении нет лишних пробелов.
Команда в группе не работает Telegram требует упоминания бота для команд из групп, если не настроено иначе. Убедитесь, что пользователь пишет /start@MyBot, а не просто /start. Либо настройте BotFather на режим без упоминания.
Регулярное выражение не находит то, что нужно Проверьте выражение на regex101.com. Обратите внимание на флаги (например, i для игнорирования регистра).
Несколько обработчиков срабатывают не в том порядке Настройте приоритет (больше число — выше приоритет) или используйте опцию «Продолжить».
Обработчик на текст срабатывает на команду Так и задумано. Тип «Текст» не срабатывает на /команды. Если нужно, чтобы срабатывало и на то, и на другое — используйте «Регулярное выражение».
Регулярное выражение длиннее 128 символов не сохраняется Это ограничение интерфейса платформы, а не Telegram API. Используйте макрос !{regex.match} внутри общего триггера для сложных проверок.

Примеры готовых обработчиков

Пример 1: команда /start

Тип: Команда
Условие: /start
Приоритет: 100 (самый высокий)
Реакции:
  - SendMessage: «Привет! Я бот. Напиши /help для списка команд.»
  - SetVarCloud: started = true

Пример 2: текст «спасибо»

Тип: Текст
Условие: спасибо
Игнорировать регистр: ✅
Приоритет: 0
Реакции:
  - SendMessage: «Пожалуйста! Всегда рад помочь.»

Пример 3: извлечение номера телефона

Тип: Регулярное выражение
Условие: (\+7|8)?\s*\(?\d{3}\)?\s*\d{3}[-]?\d{2}[-]?\d{2}
Приоритет: 0
Реакции:
  - SendMessage: «Вы отправили номер: ${update.match.0}»
  - SetVarCloud: phone = ${update.match.0}

Пример 4: извлечение возраста

Тип: Регулярное выражение
Условие: (?:мне |возраст |лет )?(\d{1,3})(?:\s*лет)?
Приоритет: 0
Реакции:
  - SendMessage: «Ваш возраст: ${update.match.1}»
  - SetVarCloud: age = ${update.match.1}

Как это работает на разных фразах:

  • «Мне 25 лет» → 25
  • «возраст 30» → 30
  • «42» → 42

Резюме

Подтип Гибкость Сложность Когда использовать
Команда Низкая Низкая Стандартные команды /start, /help, /menu
Текст Низкая Низкая Точные фразы («Привет», «Спасибо»)
Регулярное выражение Высокая Высокая Переменный текст, извлечение данных, сложные условия

💡 Совет: Если вы только начинаете — используйте Команды и Текст. Регулярные выражения подключайте по мере усложнения логики бота.

🔗 Связанные разделы

© 2025 EnotPRO. Все права защищены.