title: ASK error, TypeError: Cannot read property 'type' of undefined
body: <p>I'm creating a skill that will call back different incidents at different dates and times from a DynamoDB table through Alexa. </p>
  
  <p>My 3 columns are data, time and incident </p>
  
  <p>I've defined my partition and sort key in my Lambda function as </p>
  
  <p><div class="snippet" data-lang="js" data-hide="false" data-console="true" data-babel="false">
  <div class="snippet-code">
  <pre class="snippet-code-js lang-js prettyprint-override"><code>let GetMachineStateIntent = (context, callback) =&gt; {    
    var params = {
      TableName: "updatedincident",
      Key: {
          date: "2017-03-21",
          time: "07:38",
          incident: "Blocked Primary",
      }
    };</code></pre>
  </div>
  </div>
  </p>
  
  <p>When I try to test my skill I can't seem to recall the incident correctly, the error I'm getting in Cloudwatch is:</p>
  
  <blockquote>
    <p>2018-03-28T14:48:53.397Z   042319cb-4a3e-49ae-8b33-1641367107d4    Unexpected error occurred in the skill handler! TypeError: Cannot read property 'type' of undefined
    at exports.handler.e (/var/task/index.js:70:16)</p>
  </blockquote>
  
  <p>as well as:</p>
  
  <blockquote>
    <p>2018-03-28T14:48:53.417Z   042319cb-4a3e-49ae-8b33-1641367107d4
    {
        "errorMessage": "Unexpected error"
    }</p>
  </blockquote>
  
  <p>Here is my code from index.js</p>
  
  <p><div class="snippet" data-lang="js" data-hide="false" data-console="true" data-babel="false">
  <div class="snippet-code">
  <pre class="snippet-code-js lang-js prettyprint-override"><code>var AWSregion = 'us-east-1';  // us-east-1
  var AWS = require('aws-sdk');
  var dbClient = new AWS.DynamoDB.DocumentClient();
  AWS.config.update({
      region: "'us-east-1'"
  });
  
  let GetMachineStateIntent = (context, callback) =&gt; {    
    var params = {
      TableName: "updatedincident",
      Key: {
        date: "2018-03-28",
        time: "04:23",
      }
    };
    dbClient.get(params, function (err, data) {
      if (err) {
         // failed to read from table for some reason..
         console.log('failed to load data item:\n' + JSON.stringify(err, null, 2));
         // let skill tell the user that it couldn't find the data 
         sendResponse(context, callback, {
            output: "the data could not be loaded from your database",
            endSession: false
         });
      } else {
         console.log('loaded data item:\n' + JSON.stringify(data.Item, null, 2));
         // assuming the item has an attribute called "incident"..
         sendResponse(context, callback, {
            output: data.Item.incident,
            endSession: false
         });
      }
    });
  };
  
  
  function sendResponse(context, callback, responseOptions) {
    if(typeof callback === 'undefined') {
      context.succeed(buildResponse(responseOptions));
    } else {
      callback(null, buildResponse(responseOptions));
    }
  }
  
  function buildResponse(options) {
    var alexaResponse = {
      version: "1.0",
      response: {
        outputSpeech: {
          "type": "SSML",
          "ssml": `&lt;speak&gt;&lt;prosody rate="slow"&gt;${options.output}&lt;/prosody&gt;&lt;/speak&gt;`
        },
        shouldEndSession: options.endSession
      }
    };
    if (options.repromptText) {
      alexaResponse.response.reprompt = {
        outputSpeech: {
          "type": "SSML",
          "ssml": `&lt;speak&gt;&lt;prosody rate="slow"&gt;${options.reprompt}&lt;/prosody&gt;&lt;/speak&gt;`
        }
      };
    }
    return alexaResponse;
  }
  
  exports.handler = (event, context, callback) =&gt; {
    try {
      var request = event.request;
      if (request.type === "LaunchRequest") {
        sendResponse(context, callback, {
          output: "welcome to my skill. what data are you looking for?",
          endSession: false
        });
    }
      else if (request.type === "IntentRequest") {
        let options = {};         
        if (request.intent.name === "GetMachineStateIntent") {
          GetMachineStateIntent(context, callback);
        } else if (request.intent.name === "AMAZON.StopIntent" || request.intent.name === "AMAZON.CancelIntent") {
          sendResponse(context, callback, {
            output: "ok. good bye!",
            endSession: true
          });
        }
        else if (request.intent.name === "AMAZON.HelpIntent") {
          sendResponse(context, callback, {
            output: "you can ask me about incidents that have happened",
            reprompt: "what can I help you with?",
            endSession: false
          });
        }
        else {
          sendResponse(context, callback, {
            output: "I don't know that one! please try again!",
            endSession: false
          });
        }
      }
      else if (request.type === "SessionEndedRequest") {
        sendResponse(context, callback, ""); // no response needed
      }
      else {
        // an unexpected request type received.. just say I don't know..
        sendResponse(context, callback, {
            output: "I don't know that one! please try again!",
            endSession: false
        });
      }
    } catch (e) {
      // handle the error by logging it and sending back an failure
      console.log('Unexpected error occurred in the skill handler!', e);
      if(typeof callback === 'undefined') {
         context.fail("Unexpected error");
      } else {
         callback("Unexpected error");
      }
    }
  };</code></pre>
  </div>
  </div>
  </p>
  
  <p>and this is my handler GetMachineState.js</p>
  
  <p><div class="snippet" data-lang="js" data-hide="false" data-console="true" data-babel="false">
  <div class="snippet-code">
  <pre class="snippet-code-js lang-js prettyprint-override"><code>function sendResponse(context, callback, responseOptions) {
    if(typeof callback === 'undefined') {
      context.succeed(buildResponse(responseOptions));
    } else {
      callback(null, buildResponse(responseOptions));
    }
  }
  
  function buildResponse(options) {
    var alexaResponse = {
      version: "1.0",
      response: {
        outputSpeech: {
          "type": "SSML",
          "ssml": `&lt;speak&gt;&lt;prosody rate="slow"&gt;${options.output}&lt;/prosody&gt;&lt;/speak&gt;`
        },
        shouldEndSession: options.endSession
      }
    };
    if (options.repromptText) {
      alexaResponse.response.reprompt = {
        outputSpeech: {
          "type": "SSML",
          "ssml": `&lt;speak&gt;&lt;prosody rate="slow"&gt;${options.reprompt}&lt;/prosody&gt;&lt;/speak&gt;`
        }
      };
    }
    return alexaResponse;
  }
  
  exports.handler = (event, context, callback) =&gt; {
    try {
      var request = event.request;
      if (request.type === "LaunchRequest") {
        sendResponse(context, callback, {
          output: "welcome to my skill. what do you want to find?",
          endSession: false
        });
      }
      else if (request.type === "IntentRequest") {
        let options = {};         
        if (request.intent.name === "GetMachineStateIntent") {
          // this is where we will wire up the dynamo call
          // for now, just send a simple response and end the session
          sendResponse(context, callback, {
            output: "cinema not implemented yet!",
            endSession: true
          });
        } else if (request.intent.name === "AMAZON.StopIntent" || request.intent.name === "AMAZON.CancelIntent") {
          sendResponse(context, callback, {
            output: "ok. good bye!",
            endSession: true
          });
        }
        else if (request.intent.name === "AMAZON.HelpIntent") {
          sendResponse(context, callback, {
            output: "you can ask me about incidents that have happened",
            reprompt: "what can I help you with?",
            endSession: false
          });
        }
        else {
          sendResponse(context, callback, {
            output: "I don't know that one! Good bye!",
            endSession: true
          });
        }
      }
      else if (request.type === "SessionEndedRequest") {
        sendResponse(context, callback, ""); // no response needed
      }
      else {
        // an unexpected request type received.. just say I don't know..
        sendResponse(context, callback, {
            output: "I don't know that one! Good bye!",
            endSession: true
        });
      }
    } catch (e) {
      // handle the error by logging it and sending back an failure
      console.log('Unexpected error occurred in the skill handler!', e);
      if(typeof callback === 'undefined') {
         context.fail("Unexpected error");
      } else {
         callback("Unexpected error");
      }
    }
  };</code></pre>
  </div>
  </div>
  </p>