Tôi đang xây dựng một kỹ năng Alexa và yêu cầu tôi lưu trữ userId của người dùng. Tôi đã cố gắng truy xuất nó với event.session.user.userId
. Tuy nhiên, khi tôi gọi console.log(event.session.user.userId)
, đầu ra theo nghĩa đen là amzn1.ask.account.[unique-value-here]
. Tôi đã xem xét một số câu hỏi tương tự, và không ai trong số họ cung cấp một câu trả lời đủ rõ ràng cho tôi.Làm thế nào để có được một userId Alexa?
Tôi không chắc chắn đây có phải là lỗi hay không, chỉ là nhà phát triển hoặc nếu userId đơn giản được ẩn danh. Nếu vậy, có cách nào để có được userId thực tế không? Tôi tưởng tượng sẽ có, vì Amazon đã viết toàn bộ hướng dẫn về nó ở đây:
Tuy nhiên, sau một ngày dài gỡ lỗi, tôi không chắc chắn những gì có thật và những gì không còn nữa.
var request = require('request');
var firebase = require('firebase');
var config = {
apiKey: "my-api-key",
authDomain: "stuff...",
databaseURL: "more stuff...",
storageBucket: "even more stuff...",
};
firebase.initializeApp(config);
// Get a reference to the database
var database = firebase.database();
exports.handler = (event, context) => {
try {
// New session
if (event.session.new) {
// New Session
console.log("NEW SESSION");
}
// Launch Request
switch (event.request.type) {
case "LaunchRequest":
var url = "https://api.random.org/json-rpc/1/invoke";
var myRequest = {
"jsonrpc": "2.0",
"method": "generateStrings",
"params": {
"apiKey": "another-api-key",
"n": "1",
"length": "3",
"characters": "abcdefghijklmnopqrstuvwxyz"
},
"id": 24
}
var pin;
request.post(
url,
{json: myRequest},
function (error, response, body) {
if (!error && response.statusCode == 200) {
console.log(event.session.user.userId); // **Here**, output is literally amzn1.ask.account.[unique-value-here]
pin = body.result.random.data[0];
writeUserPin(pin);
var welcome = "Welcome";
var pinStatement = "Your 3 letter or number pin is: " + processPinForSpeech(pin);
context.succeed(
generateResponse(
buildSpeechletReponse(welcome + pinStatement, true),
{}
)
);
console.log(pin);
}
else {
console.log(error);
}
}
);
console.log("LAUNCH REQUEST");
break;
// Intent Request
case "IntentRequest":
console.log("INTENT REQUEST");
break;
// Session Ended Request
case "SessionEndedRequest":
console.log("SESSION ENDED REQUEST");
break;
default:
context.fail(`INVALID REQUEST TYPE: ${event.request.type}`);
}
}
catch (error) {
context.fail(`Exception: ${error}`);
}
}
// Helpers
buildSpeechletReponse = (outputText, shouldEndSession) => {
return {
outputSpeech : {
type: "PlainText",
text: outputText
},
shouldEndSession: shouldEndSession
};
}
generateResponse = (speechletResponse, sessionAttributes) => {
return {
version: "1.0",
sessionAttributes: sessionAttributes,
response: speechletResponse
};
}
function writeUserPin(pin) {
console.log("writing stuff");
firebase.database().ref('newPins/' + pin).set({
num : ""
});
}
function processPinForSpeech(pin) {
var wordNumArr = ["zero", "one", "two", "three", "four",
"five", "six", "seven", "eight", "nine"];
processedPin = "";
for (i = 0; i < pin.length; i++){
var currentChar = pin.charAt(i);
if (isNaN(Number(currentChar))){
processedPin += currentChar + ". ";
}
else {
processedPin += wordNumArr[Number(currentChar)] + ". ";
}
}
return processedPin
}
Sau đây là đầu ra trên các bản ghi CloudWatch:
16:16:19
START RequestId: 48e335c5-d819-11e6-bc01-a939911adc24 Version: $LATEST
16:16:19
2017-01-11T16:16:19.639Z 48e335c5-d819-11e6-bc01-a939911adc24 NEW SESSION
16:16:19
2017-01-11T16:16:19.758Z 48e335c5-d819-11e6-bc01-a939911adc24 LAUNCH REQUEST
16:16:20
2017-01-11T16:16:20.457Z 48e335c5-d819-11e6-bc01-a939911adc24 amzn1.ask.account.[unique-value-here]
16:16:20
2017-01-11T16:16:20.457Z 48e335c5-d819-11e6-bc01-a939911adc24 writing stuff
16:16:20
2017-01-11T16:16:20.520Z 48e335c5-d819-11e6-bc01-a939911adc24 dd2
16:16:20
END RequestId: 48e335c5-d819-11e6-bc01-a939911adc24
16:16:20
REPORT RequestId: 48e335c5-d819-11e6-bc01-a939911adc24 Duration: 1005.48 ms Billed Duration: 1100 ms Memory Size: 128 MB Max Memory Used: 38 MB
Trước hết, cảm ơn bạn rất nhiều vì câu trả lời của bạn! Nó rất chi tiết. Một điều tôi không chắc chắn tôi hiểu là làm thế nào tôi có thể xác định duy nhất một người dùng bằng cách lưu event.session.user.userId của họ vào Firebase, nếu tất cả các giá trị này đều giống nhau. Bạn có thể giải thích thêm một chút không? –
Chúng chỉ giống nhau cho một người dùng cá nhân của kỹ năng của bạn; ví dụ, một người khác sử dụng kỹ năng của bạn với một echo khác nhau sẽ có một giá trị duy nhất khác sau 'amzn1.ask.account'. Vì vậy, đối với bất kỳ người dùng nào, bạn có thể lưu giá trị này vào bất kỳ cửa hàng dữ liệu nào - không chỉ Firebase - và nó sẽ là duy nhất cho người dùng đó. –
Vậy tại sao giá trị của tôi theo nghĩa đen là "[unique-value-here]" và không phải là một chuỗi ngẫu nhiên? Có phải vì tôi là nhà phát triển không? –