Как перенести обработчик запросов Alexa в другой модуль - PullRequest
0 голосов
/ 11 декабря 2018

Я ищу вариант, как перенести мой обработчик запросов Alexa в другой модуль.Это мой подход:

  //index.js
  var Alexa = require('ask-sdk-core');
  var tests = require('./secondModule');

  var LaunchRequestHandler = tests('LaunchRequest','Hello, is this working?')

  var skillBuilder = Alexa.SkillBuilders.custom();

  exports.handler = skillBuilder
    .addRequestHandlers(
      LaunchRequestHandler
      )      
    .lambda();

и мой второй модуль выглядит следующим образом:

//secondModule.js
var Alexa = require('ask-sdk-core');

function Test(requestName, speechText){

    var request = requestName+"Handler"
    console.log("log: " +request)

    request = {
        canHandle(handlerInput) {
            console.log("log: "+request)
            return handlerInput.requestEnvelope.request.type === requestName;
        },
        handle(handlerInput) {

            return handlerInput.responseBuilder
                .speak(speechText)
                .reprompt(speechText)
                .withSimpleCard('Hello World', speechText)
                .getResponse();
        },
    };

}

module.exports = Test

Но если я попробую это так, ошибка '"errorMessage": "Невозможно прочитать свойство'canHandle' из неопределенного "'появляется.Может быть, у вас есть идея, как я могу это сделать?Я довольно новичок с Node и JavaScript

, вот мой package.json:

  {
  "name": "hello",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC",
  "dependencies": {
    "actions-on-google": "^2.5.0",
    "ask-sdk-core": "^2.0.0",
    "ask-sdk-model": "^1.0.0"
  }
}

1 Ответ

0 голосов
/ 14 декабря 2018

Вы не вернете request.Измените вашу Test функцию на эту:

function Test(requestName, speechText){

  var request = requestName+"Handler"
  console.log("log: " +request)

  return request = {
    canHandle(handlerInput) {
      console.log("log: "+request)
      return handlerInput.requestEnvelope.request.type === requestName;
    },
    handle(handlerInput) {

      return handlerInput.responseBuilder
            .speak(speechText)
            .reprompt(speechText)
            .withSimpleCard('Hello World', speechText)
            .getResponse();
    },
  };
}

Теперь это должно работать!

...