$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: Всего доброго, до свидания!