Изменить Amazon Lex Чат бот Часовой пояс - PullRequest
0 голосов
/ 01 ноября 2018

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

это мой чат-бот в amazon lex

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

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

Ответы [ 2 ]

0 голосов
/ 07 ноября 2018

Это решение image

Наконец-то я получил решение. Если кто-то хочет узнать решение, проверьте на фото. Я просто пытаюсь исправить коды из aws github. Спасибо.

0 голосов
/ 02 ноября 2018

В шаблоне, который вы используете, может быть опция, но я не могу ее найти, поэтому вот что вам нужно знать о настройке часовых поясов в 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, то вам нужно работать с тем, что у вас есть. Прямо сейчас, похоже, что вы используете только лямбда-функцию для выполнения, но вы также должны использовать ее для «инициализации и проверки».

enter image description here

Это будет передавать запрос к вашей лямбда-функции каждый раз, когда Лекс обрабатывает ввод, и вы можете указать Лексу, как именно ответить. Это дает вам намного больший контроль над вашим чат-ботом.

Чтобы понять формат Запроса (иногда называемого «Событием») и как отформатировать Ответ в этой функции Lambda, вам нужно прочитать эти документы .

Теперь 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" , потому что Lex анализирует все эти данные одинаково и просто доставляет их в вашу Lambda по умолчанию по восточному времени США, отформатированному как (дата) yyyy-mm-dd и (время) hh:mm.

После того, как вы конвертируете их, просто установите эти слоты в качестве новой даты и времени, а затем передайте слоты обратно Лексу в вашем ответе. Затем Lex будет хранить значения слотов по сингапурскому времени.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...