Интеграция Amazon Lex в AWS Lambda - PullRequest
1 голос
/ 18 марта 2019

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

1 Ответ

1 голос
/ 19 марта 2019

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

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

  1. Основные различия между форматами и передачей sessionAttribtues и slots.
  2. Lex имеет 4 встроенных slotTypes, которые Alexa не использует (пока?): AMAZON.EmailAddress,, AMAZON.Percentage, AMAZON.PhoneNumber, AMAZON.SpeedUnit и AMAZON.WeightUnit. ( Reference. )
  3. Lex всегда передает полный пользовательский ввод через 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"
  }
}
...