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

Как принимать дату и время в сценарии

$DATETIME — системная сущность, которая принимает и записывает данные о дате и времени.

У $DATETIME свой формат данных, которые она может принимать, и свой формат вывода данных. $DATETIME принимает дату в формате «15 декабря» и «15.12» и время в формате «12:45», «12 45» и «12 часов 45 минут».

$DATETIME принимает не только абсолютные значения времени, например «20 июня» и «20.06», но и относительные, например «сегодня», «вчера», «завтра», «через 4 дня» и т. д. Однако сама системная сущность не содержит информации о текущих дате и времени, поэтому не может рассчитать, что такое «сегодня», какая это будет дата.

Содержание $DATETIME

В зависимости от вводимых данных, $DATETIME может содержать в себе разные массивы данных:

При вводе «20 декабря 2019 12:45»

{"year":2019,"month":12,"day":20,"hour":12,"minute":45}

При вводе «20 декабря 2019» или «20.12 2019»

{"year":2019,"month":12,"day":20}

При вводе «12 часов 45 минут», «12:45» или «12 45»

{"hour":12,"minute":45}

Если этот формат не подходит для вашего случая, вы можете принимать значения времени, создавая свои собственные сущности.

Вы можете использовать $DATETIME в своем сценарии совместно с сервисом для проверки текущей даты и времени.

Добавление $DATETIME в сценарий

Чтобы использовать системную сущность $DATETIME в вашем сценарии, вы можете добавить на экран готовый интент Дата и время.

Этот интент сможет принимать такой ввод как «15.05», «20 декабря», «12:00» и т. д. Также, чтобы распознавать дату и время среди других слов, можете добавить к интенту шаблон с помощью $DATETIME:

В таком случае интент будет принимать не только ввод «15 декабря», но также «хорошо, 15 декабря», и из этого ввода брать только дату и время.

Чтобы протестировать, что попадает в $DATETIME, можете создать такой участок сценария:

При создании такого участка, если введенные данные не попадают в $DATETIME, бот будет возвращать вас на экран Введите дату и время. Если ввод попадает в $DATETIME, то бот будет выводить все содержание $DATETIME, а затем возвращать вас на экран ввода, чтобы вы могли протестировать другой ввод.

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

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

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

Время можно принимать с использованием $DATETIME в таком формате:

Свяжите готовый интент Дата и время с новым экраном. Добавьте блок Условия и напишите в нем $DATETIME.hour && $DATETIME.minute.

От ветки с условием создайте новый экран и добавьте на него условие:

$time = $DATETIME.hour + ":" + $DATETIME.minute

От последнего условия создайте связь с еще одним экраном и в блоке Текст напишите Вы хотели бы забронировать столик на $time?.

Вне зависимости от того, в каком формате клиент напишет время — словами или числами — бот сохранит время в формате, указанном во втором условии.

Пример диалога:

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

Дату можно принимать с использованием $DATETIME в таком формате:

Свяжите готовый интент Дата и время с новым экраном. Добавьте блок Условия и напишите в нем $DATETIME.day && $DATETIME.month.

Чтобы в дальнейшем вывести клиенту полную дату, вы можете дополнительно получить текущий год при помощи сервиса Текущие дата и время. Для этого добавьте в сценарий блок HTTP-запрос в соответствии с инструкцией для данного сервиса.

От варианта Завершен успешно HTTP-запроса создайте связь с новым экраном и добавьте следующее условие:

$date = $DATETIME.day + "." + $DATETIME.month + "." + $time.year

От последнего условия создайте экран с блоком Текст:

Вы хотели бы забронировать номер на $date?

Вне зависимости от того, в каком формате клиент напишет дату — словами или числами — бот сохранит дату в формате, указанном во втором условии.

Пример диалога:

Что дальше?

Далее вы можете дополнить свой сценарий следующими способами:

  • Сравнить дату со свободными датами и использовать сценарий бронирования для доработки логики бота.
  • Принять другую нужную вам информацию, например, имя, телефон и электронную почту клиента, воспользовавшись примером из урока Сбор контактных данных.

Или отправить полученные данные: