我正在尝试使用 nestjs 构建自定义 Alexa 网络服务。如果我尝试从 AlexaController 调用 RequestHandler 中的服务,它不起作用,因为 this. 那里不可用(如果我在 requestHandler 中尝试 console.log(this) 我看到 {canHandle, handle} )并且服务器返回我该服务未定义。这是我的控制器:
import { Controller, HttpCode, Post, Req } from "@nestjs/common";
import {
ErrorHandler,
HandlerInput,
RequestHandler,
SkillBuilders,
} from "ask-sdk-core";
import { Response } from "ask-sdk-model";
import { Request } from "express";
import { MessagesService } from "src/services/messages/messages.service";
@Controller("alexa")
export class AlexaController {
constructor(private myService: MessagesService) {}
@Post()
@HttpCode(200)
async alexaSkill(@Req() req: Request) {
let skill = SkillBuilders.custom()
.addRequestHandlers(
this.LaunchRequestHandler // welcome
)
.addErrorHandlers(this.ErrorHandler)
.create();
return skill
.invoke(req.body)
.then((res) => {
return res;
})
.catch((err) => {
console.log(err);
});
}
LaunchRequestHandler: RequestHandler = {
canHandle(handlerInput: HandlerInput): boolean {
return handlerInput.requestEnvelope.request.type === "LaunchRequest";
},
handle(handlerInput: HandlerInput): Response {
const speechText = "Welcome to the Alexa Skills Kit, you can say hello!";
// here I want to call this.myService to do something.
this.myService.something("hi Alexa");
// it returns me this error: cannot call something of undefined
return handlerInput.responseBuilder
.speak(speechText)
.reprompt(speechText)
.withSimpleCard("Hello World", speechText)
.getResponse();
},
};
ErrorHandler: ErrorHandler = {
canHandle(handlerInput: HandlerInput, error: Error): boolean {
return true;
},
handle(handlerInput: HandlerInput, error: Error): Response {
console.log(`Error handled: ${error.message}`);
return handlerInput.responseBuilder
.speak("Sorry, I can't understand the command. Please say again.")
.reprompt("Sorry, I can't understand the command. Please say again.")
.getResponse();
},
};
}
这是我的 AlexaModule:
import { Module } from "@nestjs/common";
import { MessagesService } from "src/services/messages/messages.service";
import { AlexaController } from "./alexa.controller";
@Module({
controllers: [AlexaController],
providers: [MessagesService],
})
export class AlexaModule {}
如何使该服务在该 RequestHandler 中可见?有什么建议吗?提前致谢