#alexa #alexa-skills-kit #alexa-skill #login-with-amazon #ask-smapi-sdk
#alexa #alexa-skills-kit #alexa-навык #войдите в систему с помощью amazon #ask-smapi-sdk
Вопрос:
Я выполняю произнесение и другое автоматическое тестирование в моем потоке сборки / развертывания для моего навыка Alexa. Теперь я также хочу использовать simulate API (https://developer.amazon.com/en-US/docs/alexa/smapi/skill-simulation-api.html ), чтобы делать целые разговорные потоки, но я сразу же застреваю. В моем навыке используется ссылка на учетную запись, поэтому мне каким-то образом нужно передать учетные данные для пользователя. В документации я не вижу никакого способа передать какие-либо другие аргументы, кроме идентификатора сеанса, языка и выражения. Должен ли я каким-то образом использовать профиль LWA для входа в мой сервис, и в этом случае, как я это сделаю (поскольку это только идентификатор клиента и секрет клиента, без адреса электронной почты / пароля)?
Вот как я настроил код javascript для моего профиля LWA (который работает для всех запросов, кроме API моделирования и API вызова).
const ASK = require("ask-smapi-sdk");
const refreshTokenConfig = {
clientId: "amzn1.application-oa2-client.xxx",
clientSecret: "xxx",
refreshToken: "Atzr|xxx",
};
const smapiClient = new ASK.StandardSmapiClientBuilder()
.withRefreshTokenConfig(refreshTokenConfig)
.client();
Если бы я вызвал этот навык сейчас, используя simulate API, образец запроса / ответа выглядел бы примерно так.
await smapiClient.setSkillEnablementV1(skillId, "development");
const response = await smapiClient.simulateSkillV2(skillId, "development", {
device: {
locale: "en-US",
},
input: {
content: "Alexa, ask mySkill to do something",
},
session: {
mode: "FORCE_NEW_SESSION",
},
});
response
теперь этот раздел будет содержаться в ответе json.
body: {
version: "1.0",
response: {
outputSpeech: {
type: "SSML",
ssml: "<speak>Hi, to use mySkill, please go to your Alexa app and link your mySkill account.</speak>",
},
card: { type: "LinkAccount" },
shouldEndSession: true,
type: "_DEFAULT_RESPONSE",
},
sessionAttributes: {
...
},
userAgent: "ask-node/2.10.1 Node/v12.19.0",
},
},
Чтобы повторить мой вопрос, как я могу войти в систему пользователя программно, должен ли я каким-то образом использовать свой профиль LWA или есть другой процесс?
Спасибо!
Ответ №1:
У меня есть два класса, созданные для этого, чтобы облегчить мне жизнь
моделирование навыков:
const fetch = require('node-fetch');
class simulationId{
constructor(){
this.token = process.env.TOKEN
}
async requestSimulationId(utterance, skillId, locale){
var requestBody =
{
"session": {
"mode": "FORCE_NEW_SESSION"
},
"input": {
"content": utterance
},
"device": {
"locale": locale
}
}
const rawResponse = await fetch(skillId, {
method: 'POST',
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json',
'Authorization': this.token
},
body: JSON.stringify(requestBody)
});
const buildResponse = rawResponse.json();
return buildResponse;
}
}
module.exports = simulationId;
ответ simualtion:
const fetch = require('node-fetch');
class simulationResponse{
constructor(){
this.token = process.env.TOKEN
}
async requestSimulationResponse(simulationId, skillId){
const rawResponse = await fetch(skillId simulationId.id, {
method: 'GET',
headers:{
'Accept': 'application/json',
'Content-Type': 'application/json',
'Authorization': this.token
}});
const buildResponse = rawResponse.json();
return buildResponse;
}
}
module.exports = simulationResponse;