Изменить Amazon Lex Чат бот Часовой пояс
Теперь я интегрирую своего чат-бота amazon Lex в мою сеть. У меня проблема с часовым поясом. Часовой пояс находится на востоке США (Северная Вирджиния). Так что, если я скажу сегодня, это основано на времени Вирджинии. Поэтому я нахожу, как изменить часовой пояс, и предлагаю установить атрибут запроса часового пояса x-amz-lex: для моего региона. но я не знаю, как это сделать и где делать. Пожалуйста, помогите мне! Благодарю. Я использовал простой шаблон "https://s3.amazonaws.com/aws-bigdata-blog/artifacts/aws-lex-web-ui/artifacts/templates/master.yaml"
, Я скопировал коды из SnippetUrl и вставил на свою веб-страницу. Чат бот появляются. Так как я должен передать эти атрибуты запроса.
2 ответа
Наконец-то я получил решение. Если кто-то хочет узнать решение, проверьте на фото. Я просто пытаюсь исправить коды из aws github. Благодарю.
В шаблоне, который вы используете, может быть опция, но я не могу ее найти, поэтому вот что вам нужно знать об установке часовых поясов в Lex.
Прежде всего, единственный способ изменить часовой пояс по умолчанию для восточной части США - это использовать PostContent API или PostText API. Они действительно должны иметь настройку часового пояса в консоли Lex, чтобы вы могли установить часовой пояс по умолчанию, но они этого не делают.
Правильный путь:
AWS SDK необходим для использования PostContent API или PostText API для передачи ввода пользователя вашему боту чата Lex. При передаче данных в Lex таким образом, вы можете включить requestAttributes
с вводом пользователя, уникальным идентификатором и атрибутами сеанса (необязательно). Вот пример того, как вы бы установили timezone
в requestAttributes
Время в Сингапур:
{
"inputText": "What the user said.",
"requestAttributes": {
"x-amz-lex:time-zone" : "Singapore"
},
"sessionAttributes": null
}
Обходной путь:
Если вы не можете использовать или не можете использовать PostContent или PostText, вам нужно работать с тем, что у вас есть. Прямо сейчас, похоже, что вы используете только лямбда-функцию для выполнения, но вы также должны использовать ее для "инициализации и проверки".
Это будет передавать запрос вашей функции Lambda каждый раз, когда Lex обрабатывает ввод, и вы можете указать Lex точно, как ответить. Это дает вам гораздо больший контроль над вашим чат-ботом.
Чтобы понять формат запроса (иногда называемого "событием") и как отформатировать ответ в этой лямбда-функции, вам нужно прочитать эти документы.
Теперь Lex обрабатывает дату и время из пользовательского ввода...(В вашем примере пользователь говорит "сегодня")... и Lex заполнит слоты даты или времени чем-то вроде (date) 2018-11-02
(время) 13:00
который будет соответствовать восточному стандартному времени (UTC -5). Но Сингапур это UTC +8. Таким образом, вам нужно будет преобразовать эту дату и время в вашей функции Lambda и перезаписать слоты на эквивалентное сингапурское время, а затем передать эти слоты обратно в ответе вашего Lambda на Lex.
Есть несколько способов сделать это преобразование в зависимости от того, находится ли ваш Lambda в Node.js или Python, и множество ответов и руководств по преобразованию часового пояса.
Пример:
Пользовательский ввод: "Я хочу забронировать комнату для переговоров с 13:00 до 14:00 на сегодня"
Чтобы получить значения этого ввода, ваше намерение должно быть настроено примерно так:
3 слота: {date} {time_start} {time_end}
Намерение: "Я хочу забронировать комнату собрания с {time_start} на {time_end} для {date}"
Затем Lex проанализирует ввод и заполнит слоты (используя часовой пояс по умолчанию: Восток США). Затем Lex передаст запрос вашей лямбда-функции "инициализация и проверка". Запрос (или "событие") будет включать:
{
"currentIntent": {
"name": "BookRoom",
"slots": {
"date": "2018-11-05",
"time_start": "13:00",
"time_end": "14:00",
},
},
...
}
Затем в лямбда-функции вы можете принять эти значения (Node.js):
var date = event['currentIntent']['slots']['date'];
var time_start = event['currentIntent']['slots']['time_start'];
var time_end = event['currentIntent']['slots']['time_end'];
Теперь для вашей логики преобразования:
Поскольку в Сингапуре на 13 часов больше, чем в восточной части США, просто возьмите это время и прибавьте к нему 13 часов. Если при этом проходит полночь, то также увеличьте дату на 1 день.
Это будет работать для входных данных "сегодня", "завтра", "следующий вторник" или даже "25 января 2035 года", потому что Лекс анализирует все те же самые пути и просто доставляет их в вашу лямбду по умолчанию для восточно-американского времени, отформатированного как (Дата) yyyy-mm-dd
и время) hh:mm
,
После того, как вы конвертируете их, просто установите эти слоты в качестве новой даты и времени, а затем передайте слоты обратно Лексу в вашем ответе. Затем Lex будет хранить значения слотов по сингапурскому времени.