Интеграция Amazon Lex в AWS Lambda

Я уже некоторое время работаю с Alexa Skills Kit с моим кодом, развернутым в AWS Lambda, написанным на Node Js. Теперь я хочу интегрировать в него чат-ботов через сервис amazon Lex. Так что я могу управлять своим устройством с помощью Amazon Alexa и Amazon lex. Мой вопрос заключался в том, что если я буду использовать в Amazon Lex то же намерение и имя слота, что и в моем навыке Alexa Skill, будет ли код AWS Lambda работать из коробки? Или мне придется изменить код AWS Lambda, чтобы приспособить его к AWS Lex?


person Muneeb Rehman    schedule 18.03.2019    source источник


Ответы (1)


Вам придется учитывать различия между Lex и Alexa. Наиболее заметные различия - это форматы запроса и ответа.

Заметные различия, о которых следует знать:

  1. Основные различия между форматами и передачей sessionAttribtues и slots.
  2. У Lex есть 4 встроенных slotTypes, которые Alexa не использует (пока?): AMAZON.EmailAddress,, AMAZON.Percentage, AMAZON.PhoneNumber, AMAZON.SpeedUnit и AMAZON.WeightUnit. (Справочник.)
  3. Лекс всегда передает полный пользовательский ввод через inputTranscript. Алекса нет.
  4. Alexa предоставляет resolutions для значений слотов, но заполняет фактическое значение слота необработанными данными, извлеченными из ввода.
  5. Lex автоматически определит значение слота, если для этого slotType установлены синонимы.

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

Сравните форматы запросов / ответов:

в формате Alexa JSON
Формат Lex JSON

Пример запроса Alexa:

{
  "version": "1.0",
  "session": {
    "new": true,
    "sessionId": "amzn1.echo-api.session.[unique-value-here]",
    "application": {
      "applicationId": "amzn1.ask.skill.[unique-value-here]"
    },
    "attributes": {
      "key": "string value"
    },
    "user": {
      "userId": "amzn1.ask.account.[unique-value-here]",
      "accessToken": "Atza|AAAAAAAA...",
      "permissions": {
        "consentToken": "ZZZZZZZ..."
      }
    }
  },
  "context": {
    "System": {
      "device": {
        "deviceId": "string",
        "supportedInterfaces": {
          "AudioPlayer": {}
        }
      },
      "application": {
        "applicationId": "amzn1.ask.skill.[unique-value-here]"
      },
      "user": {
        "userId": "amzn1.ask.account.[unique-value-here]",
        "accessToken": "Atza|AAAAAAAA...",
        "permissions": {
          "consentToken": "ZZZZZZZ..."
        }
      },
      "apiEndpoint": "https://api.amazonalexa.com",
      "apiAccessToken": "AxThk..."
    },
    "AudioPlayer": {
      "playerActivity": "PLAYING",
      "token": "audioplayer-token",
      "offsetInMilliseconds": 0
    }
  },
  "request": {}
}

Пример запроса Lex:

{
  "currentIntent": {
    "name": "intent-name",
    "slots": {
      "slot name": "value",
      "slot name": "value"
    },
    "slotDetails": {
      "slot name": {
        "resolutions" : [
          { "value": "resolved value" },
          { "value": "resolved value" }
        ],
        "originalValue": "original text"
      },
      "slot name": {
        "resolutions" : [
          { "value": "resolved value" },
          { "value": "resolved value" }
        ],
        "originalValue": "original text"
      }
    },
    "confirmationStatus": "None, Confirmed, or Denied (intent confirmation, if configured)"
  },
  "bot": {
    "name": "bot name",
    "alias": "bot alias",
    "version": "bot version"
  },
  "userId": "User ID specified in the POST request to Amazon Lex.",
  "inputTranscript": "Text used to process the request",
  "invocationSource": "FulfillmentCodeHook or DialogCodeHook",
  "outputDialogMode": "Text or Voice, based on ContentType request header in runtime API request",
  "messageVersion": "1.0",
  "sessionAttributes": { 
     "key": "value",
     "key": "value"
  },
  "requestAttributes": { 
     "key": "value",
     "key": "value"
  }
}
person Jay A. Little    schedule 19.03.2019