Системный объект @sys.duration
отправит вам Объект с двумя атрибутами: «сумма», которая содержит целое число, и «единица измерения», которая содержит строку.
Итак, в Javascript, это будет выглядеть примерно так:
{
"amount": 20,
"unit": "min"
}
Чтобы преобразовать это в секунды, вы должны посмотреть, сколько секунд в предоставленной «единице», и умножить ее на сумму.
Хороший способ сделать этот поиск - создать объект, в качестве атрибутов которого указаны возможные имена юнитов и значения в секундах. Это работает хорошо для большинства устройств до недели. Однако, когда вы набираете месяц или год (или дольше), вы сталкиваетесь с проблемами, поскольку количество секунд для этих периодов может быть переменным. Чтобы представить их, я отмечу их как отрицательное число, чтобы вы могли проверить, не удалось ли преобразование. (Я игнорирую проблемы с изменениями часов, например, из-за перехода на летнее и летнее время.)
Я не полностью протестировал этот код, но, похоже, он правильный. Эта функция позволяет передавать объект, отправленный в параметре the_duration
, и возвращает количество секунд:
function durationToSeconds( duration ){
const mult = {
"s": 1,
"min": 60,
"h": 60*60,
"day": 60*60*24,
"wk": 60*60*24*7,
"mo": -1,
"yr": -1,
"decade": -1
};
return duration.amount * mult[duration.unit];
}
Извлечение числа из строки, безусловно, возможно, и вы можете настроить эту функцию так, чтобы Кстати, поскольку Dialogflow уже предоставляет его вам как объект с нормализованными строками, это будет значительно сложнее.