如何使用addErrorHandlers在Alexa的ASK SDK V2

问题描述 投票:0回答:1

我试图从升级V1我的技能要求SDK V2。我使用的addErrorHandlersStandardSkillBuilder功能有问题。当我在我的意图抛出一个错误,我的自定义错误处理程序不会被调用。我不知道如何使用它。

index.ts

import { SkillBuilders } from 'ask-sdk';
import { LambdaHandler } from 'ask-sdk-core/dist/skill/factory/BaseSkillFactory';

// import intents
import LaunchIntent from './alexa-intents/launch.intent';
import CustomErrorHandler from './alexa-intents/custom-error-handler';

function buildAlexaLambdaHandler(): LambdaHandler {
    return SkillBuilders.standard()
        .addRequestHandlers(
            new LaunchIntent()
        )
        .addErrorHandlers(new CustomErrorHandler())
        .lambda();
}

export const handler = buildAlexaLambdaHandler();

launch.intent.ts(抛出一个测试误差)

import { HandlerInput, RequestHandler } from 'ask-sdk';
import { Response } from 'ask-sdk-model'

export default class LaunchIntent implements RequestHandler {
    canHandle(handlerInput: HandlerInput): boolean {
        const request = handlerInput.requestEnvelope.request;
        return request.type === 'LaunchRequest';
    }

    handle(handlerInput: HandlerInput): Response {
        const responseBuilder = handlerInput.responseBuilder;
        const deviceId = handlerInput.requestEnvelope.context.System.device.deviceId;
        if (deviceId) {
            console.log('throwing error');
            throw new Error('test error');
        }
        return responseBuilder
            .speak('welcome')
            .getResponse();
    }
}

自定义错误handler.ts(试图赶上测试误差)

import { HandlerInput, ErrorHandler } from 'ask-sdk';
import { Response } from 'ask-sdk-model';

export default class CustomErrorHandler implements ErrorHandler {

    canHandle(handlerInput: HandlerInput): boolean {
        return true;
    }

    handle(handlerInput: HandlerInput, error: Error): Response {
        const request = handlerInput.requestEnvelope.request;
        const deviceId = handlerInput.context.System.device.deviceId;
        console.dir(error);

        return handlerInput.responseBuilder
            .speak('there was an error')
            .getResponse();
    }
}

我在本地运行我的技能使用bespoken-tools LambdaServer

import * as bst from 'bespoken-tools';

const server = new bst.LambdaServer('./src/index', 10000, true);
server.start(() => console.log('[init.dev]: server started and listening on port 10000!'));

在我的控制台日志,我看到我的控制台消息从发射意图处理“抛出的错误”,但我从来没有看到所谓的CustomErrorHandler或从任何控制台日志。在Alexa的开发者控制台模拟器,我得到“有与所请求的技能的响应问题”,因为没有响应过由CustomerErrorHandler增加。

node.js alexa alexa-skills-kit alexa-skill
1个回答
0
投票

Someone on the Alexa forums helped me find my issue.

基本上,我CustomErrorHandler不当访问deviceId和投掷的错误本身。改变在CustomErrorHandler这一行后,问题就解决了,并如预期的错误处理工作。

const deviceId = handlerInput.requestEnvelope.context.System.device.deviceId;

代替

const deviceId = handlerInput.context.System.device.deviceId;

别的东西,可能是很好的做法是有一个备份错误处理程序捕获错误在你的错误处理程序只是简单地打印出错误,以避免任何在备份处理机走错了。

© www.soinside.com 2019 - 2024. All rights reserved.