2015-09-22 3 views
1

Я пытаюсь написать функцию Лямбды для умения Амазонки Алекса в NodeJS. Alexa - это тот цилиндрический динамик, который отвечает на ваш голос, а «умение» в основном является голосовым приложением для него. Эта функция принимает вход JSON от устройства Alexa и создает ответ, а затем отправляет новый JSON обратно на устройство для вывода.Amazon Alexa Skill Лямбда-код не будет выполняться

Этот код должен вытащить биткойн к курсу доллара США из BTC-e JSON, извлечь значение «avg» и вывести его на устройство Alexa.

Я долго не делал кодирования, поэтому, пожалуйста, простите любые глупые ошибки. Я взял пример кода и попытался изменить его для своих целей, но я получаю эту ошибку при выполнении в AWS:

{ 
    "errorMessage": "Unexpected identifier", 
    "errorType": "SyntaxError", 
    "stackTrace": [ 
    "Module._compile (module.js:439:25)", 
    "Object.Module._extensions..js (module.js:474:10)", 
    "Module.load (module.js:356:32)", 
    "Function.Module._load (module.js:312:12)", 
    "Module.require (module.js:364:17)", 
    "require (module.js:380:17)" 
    ] 
} 

Мой код here. У меня такое чувство, что проблема находится где-то в строках 84-106, потому что именно там я сделал большую часть своей работы.

Спасибо за любую помощь!

ответ

3

Код ниже должен работать, просто не комментируйте добавленный todo. У вас было несколько отсутствующих фигурных скобок, и я переключился на другую библиотеку запросов http, которая включена в AWMS lambda по умолчанию. Я также изменяю поток, чтобы сделать его более простым для меня, чтобы проверить, так что теперь он не запрашивает его, просто говорит вам последнюю цену бит-монеты.

var https = require('https'); 

// Route the incoming request based on type (LaunchRequest, IntentRequest, 
// etc.) The JSON body of the request is provided in the event parameter. 
exports.handler = function (event, context) { 
    try { 
     console.log("event.session.application.applicationId=" + event.session.application.applicationId); 

     /** 
     * Uncomment this if statement and populate with your skill's application ID to 
     * prevent someone else from configuring a skill that sends requests to this function. 
     */ 

     // TODO add this back in for your app 
     // if (event.session.application.applicationId !== "amzn1.echo-sdk-ams.app.") { 
     //  context.fail("Invalid Application ID"); 
     // } 

     if (event.session.new) { 
      onSessionStarted({requestId: event.request.requestId}, event.session); 
     } 

     if (event.request.type === "LaunchRequest") { 
      onLaunch(event.request, 
        event.session, 
        function callback(sessionAttributes, speechletResponse) { 
         context.succeed(buildResponse(sessionAttributes, speechletResponse)); 
        }); 
     } else if (event.request.type === "IntentRequest") { 
      onIntent(event.request, 
        event.session, 
        function callback(sessionAttributes, speechletResponse) { 
         context.succeed(buildResponse(sessionAttributes, speechletResponse)); 
        }); 
     } else if (event.request.type === "SessionEndedRequest") { 
      onSessionEnded(event.request, event.session); 
      context.succeed(); 
     } 
    } catch (e) { 
     context.fail("Exception: " + e); 
    } 
}; 

/** 
* Called when the session starts. 
*/ 
function onSessionStarted(sessionStartedRequest, session) { 
    console.log("onSessionStarted requestId=" + sessionStartedRequest.requestId 
       + ", sessionId=" + session.sessionId); 
} 

/** 
* Called when the user launches the skill without specifying what they want. 
*/ 
function onLaunch(launchRequest, session, callback) { 
    console.log("onLaunch requestId=" + launchRequest.requestId 
       + ", sessionId=" + session.sessionId); 

    // Dispatch to your skill's launch. 
    getWelcomeResponse(callback); 
} 

/** 
* Called when the user specifies an intent for this skill. 
*/ 
function onIntent(intentRequest, session, callback) { 
    console.log("onIntent requestId=" + intentRequest.requestId 
       + ", sessionId=" + session.sessionId); 
    getWelcomeResponse(callback); 
} 

/** 
* Called when the user ends the session. 
* Is not called when the skill returns shouldEndSession=true. 
*/ 
function onSessionEnded(sessionEndedRequest, session) { 
    console.log("onSessionEnded requestId=" + sessionEndedRequest.requestId 
       + ", sessionId=" + session.sessionId); 
    // Add cleanup logic here 
} 

// --------------- Functions that control the skill's behavior ----------------------- 

function getWelcomeResponse(callback) { 
     // If we wanted to initialize the session to have some attributes we could add those here. 
    var sessionAttributes = {}; 
    var cardTitle = "Bitcoin Price"; 
    var speechOutput = "Welcome to the Bitcoin Price skill, " 

    var repromptText = '' 
    var shouldEndSession = true; 

    var options = { 
     host: 'btc-e.com', 
     port: 443, 
     path: '/api/2/btc_usd/ticker', 
     method: 'GET' 
    }; 

    var req = https.request(options, function(res) { 
     var body = ''; 
     console.log('Status:', res.statusCode); 
     console.log('Headers:', JSON.stringify(res.headers)); 
     res.setEncoding('utf8'); 
     res.on('data', function(chunk) { 
      body += chunk; 
     }); 
     res.on('end', function() { 
      console.log('Successfully processed HTTPS response'); 

      body = JSON.parse(body); 

       console.log(body); 
       console.log('last price = ' + body.ticker.last); 

       speechOutput += "The last price for bitcoin was : " + body.ticker.last; 

       callback(sessionAttributes, 
       buildSpeechletResponse(cardTitle, speechOutput, repromptText, shouldEndSession)); 

      }); 
    }); 
    req.end(); 

} 

// --------------- Helpers that build all of the responses ----------------------- 

function buildSpeechletResponse(title, output, repromptText, shouldEndSession) { 
    return { 
     outputSpeech: { 
      type: "PlainText", 
      text: output 
     }, 
     card: { 
      type: "Simple", 
      title: "SessionSpeechlet - " + title, 
      content: "SessionSpeechlet - " + output 
     }, 
     reprompt: { 
      outputSpeech: { 
       type: "PlainText", 
       text: repromptText 
      } 
     }, 
     shouldEndSession: shouldEndSession 
    } 
} 

function buildResponse(sessionAttributes, speechletResponse) { 
    return { 
     version: "1.0", 
     sessionAttributes: sessionAttributes, 
     response: speechletResponse 
    } 
} 
+1

Большое вам спасибо! Вы действительно пошли выше и дальше и исправили все мои проблемы! Ты отличный человек. –

+0

Рады приветствовать, что я мог бы помочь. – inic

Смежные вопросы