Ограничения

Суммарное количество блоков «Стартовое условие» и «Не состояние с условием» не должно превышать 500 в одном проекте.

В конструкторе есть два специальных типа блоков, в которые невозможно перейти:

  • Не состояние;
  • Не состояние с условием.

Что означает «нельзя перейти»?

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

Такие блоки удобно использовать для:

  • отправки дополнительных сообщений;
  • запуска цепочек рассылок;
  • показа персональных предложений;
  • проверки введенных пользователем данных;
  • обработки callback-событий;
  • быстрых ответов.

Подробнее о рассылках и проверке данных читайте в разделе Пример проверки данных.


Блок «Не состояние с условием»

Не состояние с условием — это темно-серый блок.

По своему принципу работы он практически полностью повторяет Стартовое условие.

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

Важно

Среди всех условных блоков «Не состояние с условием» имеет самый низкий приоритет и проверяется последним.


Блок «Не состояние»

Не состояние — это серый блок без условия.

В отличие от обычного блока Состояние, перейти в него нельзя.

Блок удобно использовать, если необходимо:

  • отправить сообщение, не меняя текущее состояние пользователя;
  • запускать цепочки сообщений по таймеру;
  • выполнять проверки введенных данных;
  • создавать сервисные уведомления.

Поскольку пользователь никогда не входит в этот блок, он также не может «выйти» из него. Благодаря этому блок идеально подходит для фоновых сценариев.

Работа таймеров

Если сообщение отправляется по таймеру, по умолчанию оно отменяет другие ожидающие сообщения с таймером.

Чтобы этого не происходило, откройте настройки стрелки и отключите переключатель Отменить сообщения с таймером.

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

Ниже показана схема, демонстрирующая работу блока Не состояние.

После того как пользователь отправляет сообщение «привет», он попадает в блок Состояние и остается в нем благодаря зацикленной стрелке.

Параллельно запускается отдельная цепочка сообщений через блок Не состояние, которая работает независимо и не переводит пользователя в другое состояние.

Даже если пользователь продолжит писать сообщения, он останется в основном блоке, а сообщения из блока Не состояние будут приходить по расписанию.

Пример проверки данных

Блок Не состояние удобно использовать для проверки данных, которые вводит пользователь.

Чаще всего таким способом проверяют:

  • номер телефона;
  • адрес электронной почты;
  • дату;
  • ИНН;
  • другие данные с определенным форматом.

Для проверки используются регулярные выражения.

Полный список готовых регулярных выражений доступен в статье Список полезных регулярных выражений.

Предположим, бот просит пользователя ввести номер телефона.

Из этого блока выходят две стрелки:

  • к блоку Не состояние;
  • к блоку Состояние.

Для стрелки, ведущей к блоку Состояние, укажите регулярное выражение:

^(+)?((\d{2,3}) ?\d|\d)(([ -]?\d)|( ?(\d{2,3}) ?)){5,12}\d$

и выберите тип сравнения Регулярное выражение.

В результате схема будет работать следующим образом:

  • если пользователь введет корректный номер телефона — он перейдет дальше по воронке;
  • если формат окажется неверным — переход не произойдет, а бот отправит сообщение «Это не номер телефона».

При этом пользователь останется в текущем состоянии и сможет повторять ввод до тех пор, пока не отправит корректные данные.