Я уже некоторое время работаю с Alexa Skills Kit с моим кодом, развернутым в AWS Lambda, написанным на Node Js. Теперь я хочу интегрировать в него чат-ботов через сервис amazon Lex. Так что я могу управлять своим устройством с помощью Amazon Alexa и Amazon lex. Мой вопрос заключался в том, что если я буду использовать в Amazon Lex то же намерение и имя слота, что и в моем навыке Alexa Skill, будет ли код AWS Lambda работать из коробки? Или мне придется изменить код AWS Lambda, чтобы приспособить его к AWS Lex?
Интеграция Amazon Lex в AWS Lambda
Ответы (1)
Вам придется учитывать различия между Lex и Alexa. Наиболее заметные различия - это форматы запроса и ответа.
Заметные различия, о которых следует знать:
- Основные различия между форматами и передачей
sessionAttribtues
иslots
. - У Lex есть 4 встроенных
slotTypes
, которые Alexa не использует (пока?):AMAZON.EmailAddress,
,AMAZON.Percentage
,AMAZON.PhoneNumber
,AMAZON.SpeedUnit
иAMAZON.WeightUnit
. (Справочник.) - Лекс всегда передает полный пользовательский ввод через
inputTranscript
. Алекса нет. - Alexa предоставляет
resolutions
для значений слотов, но заполняет фактическое значение слота необработанными данными, извлеченными из ввода. - 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