Обработчики команд
Что это такое
Обработчики команд — это механизм, который позволяет боту реагировать на текстовые сообщения пользователей. Это самый популярный тип обработчиков, с которого обычно начинается знакомство с ботом (например, команда /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 тоже сработают |
Пример использования
Задача: приветствовать пользователя при запуске бота
- Тип обработчика: Команда
- Команда:
/start - Реакция:
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 |
[\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 |
| Текст | Низкая | Низкая | Точные фразы («Привет», «Спасибо») |
| Регулярное выражение | Высокая | Высокая | Переменный текст, извлечение данных, сложные условия |
💡 Совет: Если вы только начинаете — используйте Команды и Текст. Регулярные выражения подключайте по мере усложнения логики бота.
🔗 Связанные разделы
- Обработчики вложений — для работы с фото, видео, документами
- Обработчики системных сообщений — для отслеживания событий в чатах
- Макрос regex — для работы с регулярными выражениями внутри реакций