Перейти к основному содержимому

timeout

Тег задает таймаут — автоматический переход в другой стейт, если от пользователя нет ответа.

Синтаксис

timeout: /Start/Timeout || interval = 10
timeout: ./Timeout || interval = "10 seconds"

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

Тег имеет обязательный параметр interval — интервал времени, в течение которого ожидается ответ от пользователя.

Формат интервала

Значение interval может быть числом или строкой.

  • Если это число, то оно обозначает количество секунд таймаута.
  • Если это строка, то она обозначает продолжительность таймаута в человекочитаемом виде.

Максимальное значение интервала — 99 часов.

Строковые значения interval должны удовлетворять регулярному выражению:

(\s*(?<h>\d{0,2})\s*(hours|hour|h))?(\s*(?<m>\d{0,2})\s*(minutes|minute|min|m))?(\s*(?<s>\d{0,2})\s*(seconds|second|sec|s))?\s*
Примеры строковых значений interval
  • 5 seconds
  • 1 sec
  • 3s
  • 1 min
  • 1 minute
  • 10 minutes
  • 1 hour
  • 10 hours
  • 3 min 1 sec
  • 1h5m3s

Особенности

Одновременно может быть активен только один таймаут. Если в одном стейте использовать тег несколько раз, в сценарии возникнет ошибка.

Использование в сценарии

В примере ниже бот запрашивает у пользователя оценку сервиса.

  • Если пользователь дает оценку, бот фиксирует ее в аналитике с помощью метода $analytics.setNps и прощается.
  • Если пользователь не дает оценку в течение 5 минут, бот больше не ждет ее и прощается с пользователем.
state: ServiceEvaluation
a: Спасибо за заказ. Как вы бы оценили наш сервис?
timeout: /Goodbye || interval = "5 minutes"

state: GetEvaluation
q: $regex<\d+>
a: Спасибо. Ваше мнение важно для нас.
script: $analytics.setNps(parseInt($parseTree.text));
go!: /Goodbye

state: Goodbye
a: Всего доброго, до свидания!