Как принимать дату и время в сценарии
$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?
Вне зависимости от того, в каком формате клиент напишет дату — словами или числами — бот сохранит дату в формате, указанном во втором условии.
Пример диалога:
Что дальше?
Далее вы можете дополнить свой сценарий следующими способами:
- Сравнить дату со свободными датами и использовать сценарий бронирования для доработки логики бота.
- Принять другую нужную вам информацию, например, имя, телефон и электронную почту клиента, воспользовавшись примером из урока Сбор контактных данных.
Или отправить полученные данные: