Изменить Amazon Lex Чат бот Часовой пояс

Теперь я интегрирую своего чат-бота amazon Lex в мою сеть. У меня проблема с часовым поясом. Часовой пояс находится на востоке США (Северная Вирджиния). Так что, если я скажу сегодня, это основано на времени Вирджинии. Поэтому я нахожу, как изменить часовой пояс, и предлагаю установить атрибут запроса часового пояса x-amz-lex: для моего региона. но я не знаю, как это сделать и где делать. Пожалуйста, помогите мне! Благодарю. Я использовал простой шаблон "https://s3.amazonaws.com/aws-bigdata-blog/artifacts/aws-lex-web-ui/artifacts/templates/master.yaml", Я скопировал коды из SnippetUrl и вставил на свою веб-страницу. Чат бот появляются. Так как я должен передать эти атрибуты запроса.

это этот мой чат-бот в Амазонке Лекс

это мое облачное образование

Эти коды взяты из SnippetUrl в CodeBuildDeploy

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 будет хранить значения слотов по сингапурскому времени.

Другие вопросы по тегам