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

У $DATETIME свой формат данных, которые она может принимать, и свой формат вывода данных.

$DATETIME принимает дату в формате "15 декабря" и "15.12" и время в формате "12:45", "12 45" и "12 часов 45 минут".

Содержание $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 для решения практических задач?

$DATETIME принимает не только абсолютные значения времени, такие как "20 июня" и "20.06", но и относительные, такие как "сегодня", "вчера", "завтра", "через 4 дня" и т.д. Однако, сама системная сущность не имеет в себе информации о том, какая сегодня дата и какое сейчас время, поэтому не может рассчитать, что такое "сегодня", какая это будет дата. Мы можем воспользоваться сторонним сервисом http://markup.dusi.mobi для решения этой задачи.

Дата

Давайте создадим сценарий для приема даты.

Сценарий будет выглядеть примерно так:



Добавьте блок Текст:

На какую дату вы хотите забронировать столик?

На этот экран добавьте блок Интенты, добавьте готовый интент Дата и время. В этот же интент добавьте пример:

* $DATETIME *



Пример * $DATETIME * позволит нам принимать даты среди других слов. Например, принимать такой ввод как "наверное, сегодня" или "на сегодня".

Интент Дата и время свяжите с блоком Условия, в который скопируйте и вставьте:

$DATETIME.day || $DATETIME.day == "0"

С помощью этого выражения мы проверяем, указан ли день. Также добавим проверку на равенства дня нулю - такое значение может быть при вводе "сегодня".





Вариант Любая другая фраза на экране приема даты свяжите с этим же экраном приема даты:



Вариант else с блока Условия свяжите с экраном приема даты:



Само условие свяжите с блоком HTTP-запрос, который нужно оформить следующим образом:

метод Get

url:

http://markup.dusi.mobi/api/text?lang=ru&text=${queryText}

на вкладке RESPONSE укажите:

Имя переменной
response

Значение

JSON.parse($httpResponse)

Таким образом, мы конвертируем всё содержание запроса в формат JSON, затем запишем в переменную response, и будем использовать в следующей строке:

Имя переменной
fullDate
Значение
$response.tokens[0].formatted? $response.tokens[0].formatted : $response.tokens[1].formatted

Если есть значение $response.tokens[0].formatted, то будем использовать его. А если его нет, то будем использовать $response.tokens[1].formatted.

Вкладки BODY и HEADERS заполнять не нужно.





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

Вы хотите забронировать столик на $fullDate, верно?

От варианта Завершен с ошибкой сделайте связь с блоком Текст:

Ошибка $httpStatus



Вот что у нас получилось:



Тестирование

В тестовых целях можем добавить блок Переход на экран "Вы хотите забронировать столик на..."



Этот блок свяжите с экраном приема даты. Таким образом, нам не придется перезапускать сессию для проверки приема другого написания даты.

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

Если вы всё сделали правильно, то бот должен принимать ввод даты в таком формате:


Время

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



В первом условии напишите:

$DATETIME.hour && $DATETIME.minute

Во втором условии напишите:

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

При выводе напишите:

Вы хотели бы забронировать столик на $time?

Что дальше?

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

сравнить дату с свободными датами и использовать сценарий бронирование для доработки логики бота.

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

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

- в гугл таблицу;
- сообщением в телеграм;
- в группу в телеграме;
- в личные сообщения в вк;
- на почту.
Была ли эта статья полезна?
отменить
Спасибо!