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

$reactions.timeout

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

Синтаксис

$reactions.timeout({ interval: 10, targetState: "/Start/Timeout" });
$reactions.timeout({ interval: "10 seconds", targetState: "./Timeout" });

Метод принимает в качестве аргумента объект с полями:

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

Значение 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: Спасибо за заказ. Как вы бы оценили наш сервис?
script: $reactions.timeout({ interval: "5 minutes", targetState: "/Goodbye" });

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

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