@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 уже предоставляет его вам как объект с нормализованными строками, это будет значительно сложнее.
person
Prisoner
schedule
01.05.2020