2017-03-09 1 views
1

Ich möchte eine GET-Anfrage an eine Website mit der Amazon-Profil-API. Ich versuche zu tun, was im letzten Code-Chunk in diesem Artikel beschrieben ist: https://developer.amazon.com/blogs/post/Tx3CX1ETRZZ2NPC/Alexa-Account-Linking-5-Steps-to-Seamlessly-Link-Your-Alexa-Skill-with-Login-wit (sehr Ende des Artikels) und es passiert einfach nicht. Meine Callback-Funktion scheint nie aufgerufen zu werden.So rufen Sie Web-Service von Alexa Lambda-Funktion

Ich habe die erforderliche context.succeed(), eigentlich die neueste Version davon, und bekomme immer noch keine Ergebnisse. Ich weiß, dass die URL gut ist, wie ich es nehmen und in einen Browser kopieren und einfügen kann, und es gibt ein erwartetes Ergebnis zurück.

Hier ist eine SO-Antwort auf die Verwendung der entsprechenden Kontextfunktionsaufrufe innerhalb des Rückrufs, die ich ausprobiert habe. Why is this HTTP request not working on AWS Lambda?

Ich verwende keine VPC.

Was mache ich falsch? Ich fühle mich wie ein Idiot, als ich dies erforscht und Lösungen für 2 Tage versucht habe. Ich protokolliere die vollständige URL, und wenn ich diese aus der Protokolldatei kopiere/einfüge und sie in ein Browserfenster lege, erhalte ich ein gültiges Ergebnis. Danke für Ihre Hilfe. Hier

ist der Code:

function getUserProfileInfo(token, context) { 

console.log("IN getUserProfileInfo"); 

var request = require('request'); 

var amznProfileURL = 'https://api.amazon.com/user/profile?access_token='; 

amznProfileURL += token; 

console.log("calling it"); 

console.log(amznProfileURL); 

console.log("called it"); 


request(amznProfileURL, function(error, response, body) { 

if (!error && response.statusCode == 200) { 

var profile = JSON.parse(body); 

console.log("IN getUserProfileInfo success"); 

console.log(profile); 

context.callbackWaitsForEmptyEventLoop = false; 
callback(null, 'Success message'); 

} else { 

console.log("in getUserProfileInfo fail"); 

console.log(error); 

context.callbackWaitsForEmptyEventLoop = false; 
callback('Fail object', 'Failed result'); 
} 
}); 

console.log("OUT getUserProfileInfo"); 

} 

Dies ist die Log-Ausgabe I in Cloudwatch erhalten:

2017-03-08T22: 20: 53.671Z 7e393297-044d-11e7-9422-39f5f7f812f6 IN getUserProfileInfo 2017-03-08T22: 20: 53.728Z 7e393297-044d-11e7-9422-39f5f7f812f6 OUT getUserProfileInfo

+0

Vielleicht sollten Sie die Protokollausgabe veröffentlichen, alle Geheimnisse weggelassen. – Paul

+0

Ich habe relevante Log-Ausgabe hinzugefügt. – PaulPerry

Antwort

1

Problem könnte sein, dass Sie var request = require('request'); verwenden die externe Abhängigkeit ist und benötigen Sie eine verpackte Lambda depl zu machen Liebe, damit es funktioniert. Siehe diese Antwort für relevante Informationen.

AWS Node JS with Request

Eine andere Möglichkeit ist, dass Sie NodeJS Modul wie var http= require('http'); die eingebaute Modul die Anforderungen vornehmen können. Auf diese Weise können Sie einfach die Bereitstellung von Lambda-Skripten vornehmen.

Referenz

http://docs.aws.amazon.com/lambda/latest/dg/nodejs-create-deployment-pkg.html

Verwandte Themen