Wie man ein Alexa-userId?
Baue ich ein Alexa-Fähigkeit, und es erfordert, dass die Speichere ich die userId des Benutzers. Ich habe versucht, um es abzurufen mit event.session.user.userId
. Allerdings, wenn ich rufe console.log(event.session.user.userId)
die Ausgabe ist buchstäblich amzn1.ask.account.[unique-value-here]
. Ich habe mehrere ähnliche Fragen, und keiner von Ihnen geben eine klare Antwort reicht für mich.
Ich bin mir nicht sicher, ob das ein bug ist, ein Entwickler-nur die Sache, oder wenn die Benutzer-id ist einfach anonymisiert. Wenn dem so ist, ist es ein Weg, um die tatsächlichen userId? Ich Stelle mir vor es wäre, da Amazon geschrieben hat, eine ganze Anleitung hier:
Jedoch, nach einem langen Tag mit Debuggen, ich bin mir nicht sicher, was real ist und was nicht mehr.
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": "abcdefghijklmnopqrstuvwxyz0123456789"
},
"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
}
Folgende ist die Ausgabe auf den CloudWatch logs:
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
- Von Ihnen positiv bewertet werden, dass er mich schmunzeln: "Aber nach einem langen Tag mit Debuggen, ich bin mir nicht sicher, was real ist und was nicht mehr.' Oh, und auch, weil das war eine schön detaillierte Frage!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Du machst es richtig. Diese
amzn1.ask.account.[unique-value-here]
ist in der Tat die vollständige Benutzer-id. Sie können beobachten, für sich selbst, indem Sie Ihren skill aus ein Echo, Protokollierung mehrere Anfragen an Ihre alexa Geschick, und die Beobachtung, dass dieuserid
zwischen diesen Anforderungen ist der gleiche Wert.Pro die JSON-Referenz:
Wenn Sie nur brauchen, um bestehen Benutzer-Attribute, die zwischen den Sitzungen, ist dieser Wert ausreichend und Sie können es verwenden, um eindeutig zu identifizieren, diese user so lange, wie Sie haben die Fertigkeit aktiviert.
Wenn Sie brauchen, um eine Verknüpfung mit einem Konto, den Wert, den Sie suchen, ist
accessToken
und lebt im selbenuser
Objekt nach erfolgreicher Konto-link. Pro der gleichen JSON-Referenz wie oben:amzn1.ask.account
. So für einen bestimmten Benutzer können Sie speichern Sie diesen Wert, um alle Daten zu speichern-nicht nur FB -- und es wird einzigartig sein, für den Anwender.[unique-value-here]
wird ersetzt durch die Entwickler, könnte nur etwas wie, dass.Gut, stellt sich heraus, ich mache alles richtig (für einmal). Der Grund, warum die userId war buchstäblich amzn1.Fragen.Konto.[unique " -Wert-hier] war, weil ich testen Sie es auf einem "Alexa" Sitzung Starten" test-event in der AWS Lambda-Konsole. Als ich fragte meine Echo-Punkt, um zu starten, die Fähigkeit, es generiert den eigentlichen Schlüssel. Das Problem ist gelöst.
userId
mit dem der Benutzer sich angemeldet hat und nichtamzn1.ask.account.[unique-value-here]
generiert Alexa auf die Aktivierung einer Fähigkeit und das ist nur passiert, während die Prüfung auf Echo Dot? Ich Teste über einen simulator und Alexa Konsole wie hier beschrieben: stackoverflow.com/questions/54699087/... und stackoverflow.com/questions/54700595/... und nicht die Beobachtung, dass das Verhalten.Sollten Sie versuchen, Lesen die Anfrage, die angezeigt wird, in der Test-Konsole von FRAGEN. Von dort aus haben Sie Zugriff auf die verschiedenen Variablen, die gesendet werden, um Ihre lambda-Funktion. Sie können auch manipulieren oder zu verwenden, wie pro Ihre Anforderung.