2017-02-27 7 views
3

StackOverflowでお役に立っている人!私は自分の助けと専門知識を必要としていることがわかりました。 Amazon Alexaスキルを作成するチュートリアルに従っていますが、ラムダ関数のコードをテストすると成功しますが、私が指定したサンプルの発声を使用すると、「現在の天気を得ています。私はちょうど応答、任意のタイプの応答が欲しいので、私はjsonプレースホルダからエンドポイントを使用しています:https://jsonplaceholder.typicode.com/usersこの時点で、実際のエンドポイントに関連していません。私は間違いなくどんな形の助けにも感謝します!事前にみんなとガールありがとう!ここでAmazon Lambdaから適切なJSON応答が得られません

は私のコードです:また、ここで

var https = require("https"); 



exports.handler = (event, context) => { 

    try{ 

    if (event.session.new){ 
    // New Session 
    console.log("new session!"); 
} 
    switch (event.request.type){ 

    case "LaunchRequest": 
    // > Launch Request 
     console.log("launch request!"); 
     context.succeed(
     generateResponse(
      buildSpeechletResponse("Welcome!!!!!!!! Let's make this work!", true), 
      {} 
     ) 
    ) 
     break; 

    case "IntentRequest": 
    // > Intent Request 
     console.log("intent request!"); // endpoint added here below 
     switch(event.request.intent.name){ 
     case "getWeatherIntent": 
      var endpoint = "https://jsonplaceholder.typicode.com/users"; // this works with this "placebo endpoint data" https://jsonplaceholder.typicode.com/posts ***** api.openweathermap.org/data/2.5/weather?zip=10005,us&APPID=08d6215ef934232110949692d5ffb8da 
      var body = "" 
      https.get(endpoint, (response) => { 
      response.on('data', (chunk) => {body += chunk}) 
      response.on('end',() => { 
       var data = JSON.parse(body); 
       var weatherCount = data.userId; // might have something to do with this variable 
       context.succeed(
       generateResponse(
        buildSpeechletResponse("current is ${weatherCount}", true), 
        {} 
       ) 
       ) 
      }) 
      }) 
     } 
     break; // endpoint added here above 

    case "SessionEndedRequest": 
    // > Session Ended Request 
     console.log("session ended request!"); 
     break; 

    default: 
     context.fail("invalid request type!: {event.request.type}"); 
    } 

    } catch(error) {context.fail("Exception: ${error}")} 



} 

// Helpers 
buildSpeechletResponse = (outputText, shouldEndSession) => { 
    return{ 
    outputSpeech:{ 
     type: "PlainText", 
     text: outputText 
    }, 
    shouldEndSession: shouldEndSession 
    } 
} 

generateResponse = (speechletResponse, sessionAttributes) => { 
    return { 
    version: "1.0", 
    sessionAttributes: sessionAttributes, 
    response: speechletResponse 
    } 
} 

は意図スキーマです:

{ 
    "intents":[ 
    { "intent": "getWeatherIntent" 
    } 
    ] 
} 

ここでラムダ要求される:

{ 
    "session": { 
    "sessionId": "SessionId.51e05faf-df95-420f-9cfc-3736b1839482", 
    "application": { 
     "applicationId": "amzn1.ask.skill.482872e5-20a2-4230-bce4-a06b212443e5" 
    }, 
    "attributes": {}, 
    "user": { 
     "userId": "amzn1.ask.account.AFOFPAF44SZKQRQDFH3FW7PZCVEZPXLLPPWT7CO76Z62I2DVI5EFTYSFD3YMEA56R4ACYUSPTPVFGCA2BCFJCNBVLBNWAWSIOCXHCDTW5UM5WNIRE6K35XZ67CM3W2DN3NLIPRVEFWBZ3D6ASD37EYJWBQQFOK4FXB5NMGQCLJVGBJKUJMCZXVEHXU74KLSDXOV5MIF3UZPFLRA" 
    }, 
    "new": true 
    }, 
    "request": { 
    "type": "IntentRequest", 
    "requestId": "EdwRequestId.4b18c102-47ea-4855-a5da-6407379c0384", 
    "locale": "en-US", 
    "timestamp": "2017-02-28T02:13:25Z", 
    "intent": { 
     "name": "getWeatherIntent", 
     "slots": {} 
    } 
    }, 
    "version": "1.0" 
} 

ここでは、ラムダ反応である:

{ 
    "version": "1.0", 
    "response": { 
    "outputSpeech": { 
     "type": "PlainText", 
     "text": "current is ${weatherCount}" 
    }, 
    "shouldEndSession": true 
    }, 
    "sessionAttributes": {} 
} 

変数$ {weatherCount}は、JSONから解析したものを返すのではなく、既に返されているはずですか?ここで

は(${weatherCount}に「$ {weatherCountを}」変更)バッククォートにテンプレートリテラルの前後に引用符を変更した後、新たなラムダ反応であるので、我々はそれが今働いている!:

{ 
    "version": "1.0", 
    "response": { 
    "outputSpeech": { 
     "type": "PlainText", 
     "text": "current is [object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]" 
    }, 
    "shouldEndSession": true 
    }, 
    "sessionAttributes": {} 
} 

何か上にあるかもしれません!キーは、テンプレートリテラルを囲む引用符をバッククォートに変更することでした。ここに、新しいラムダ要求と新しいラムダ応答があります。

Lamdba要求:

{ 
    "session": { 
    "sessionId": "SessionId.9f8cc454-110f-4610-a7fe-cd0918fd804f", 
    "application": { 
     "applicationId": "amzn1.ask.skill.482872e5-20a2-4230-bce4-a06b212443e5" 
    }, 
    "attributes": {}, 
    "user": { 
     "userId": "amzn1.ask.account.AFOFPAF44SZKQRQDFH3FW7PZCVEZPXLLPPWT7CO76Z62I2DVI5EFTYSFD3YMEA56R4ACYUSPTPVFGCA2BCFJCNBVLBNWAWSIOCXHCDTW5UM5WNIRE6K35XZ67CM3W2DN3NLIPRVEFWBZ3D6ASD37EYJWBQQFOK4FXB5NMGQCLJVGBJKUJMCZXVEHXU74KLSDXOV5MIF3UZPFLRA" 
    }, 
    "new": true 
    }, 
    "request": { 
    "type": "IntentRequest", 
    "requestId": "EdwRequestId.229831d9-3bd1-4173-a1c4-7664994a1a77", 
    "locale": "en-US", 
    "timestamp": "2017-02-28T02:39:30Z", 
    "intent": { 
     "name": "getWeatherIntent", 
     "slots": {} 
    } 
    }, 
    "version": "1.0" 
} 

新しいラムダ応答:

{ 
    "version": "1.0", 
    "response": { 
    "outputSpeech": { 
     "type": "PlainText", 
     "text": "current is 1" 
    }, 
    "shouldEndSession": true 
    }, 
    "sessionAttributes": {} 
} 
+0

バンプ、誰でも問題が何であるかを知っているのですか? – Marcode777

+0

インテントスキーマを貼り付けることはできますか? –

+0

こんにちは@AnthonyNeace。私はまだこれを理解しようとしているので、応答に感謝します。され、次の私の意図スキーマ:{ 「意図」:[ {「意図」:「getWeatherIntent」 } ] } – Marcode777

答えて

2

これはあなたのtemplate literalsの問題のように私には思えます。テンプレートリテラルは、一重引用符または二重引用符ではなく、バッククォートで囲む必要があります。テンプレートリテラルを使用するすべての文字列の引用符をバッククォートに置き換えます。例えばので

この:

"current is ${weatherCount}"

は次のようになります。

`current is ${weatherCount}` 

追加のトラブルシューティングのヒント:

  • あなたが使用可能なノードの最新バージョンを使用していることを確認してくださいAWSラムダに;この執筆時点では、それはv4.3.2です。古いバージョンのノードはテンプレートリテラルをサポートしていません。

  • これらの手順のいずれかが失敗した場合は、テンプレートリテラルを変数に置き換えて、問題としてそれを排除します。

  • コンソール。ログ出力はAWS Lambdaのクラウドウォッチに書き込まれます。これを使用して、ラムダ関数の各呼び出しをデバッグできます。詳細はこちら:http://docs.aws.amazon.com/lambda/latest/dg/nodejs-prog-model-logging.html

+0

解決済み!ありがとう@AnthonyNeace! – Marcode777

関連する問題