【问题标题】:error in alexa skill "There was a problem with the requested skill's response"Alexa技能错误“请求的技能响应有问题”
【发布时间】:2020-07-23 02:36:03
【问题描述】:

我正在使用 Alexa 托管 (node.js) 方法

用户:与测试机器人交谈

alexa:欢迎!您可以更新姓名或订购食物。你想做什么?

用户:点餐

alexa:你可以点汉堡、汤和奶昔。你想拥有什么?

用户:汉堡

alexa:你喜欢素食汉堡、火鸡汉堡、牛肉汉堡还是经典汉堡?

用户:蔬菜

alexa:您的素食汉堡订单已下单。

但每当用户说 menutype(burger) 时,alexa 都会回复“请求的技能的响应有问题”

这是我的代码

const StartedInProgressOrderFoodIntentHandler = {
  canHandle(handlerInput) {
    return handlerInput.requestEnvelope.request.type === "IntentRequest"
      && handlerInput.requestEnvelope.request.intent.name === "OrderFoodIntent"
      && handlerInput.requestEnvelope.request.dialogState !== 'COMPLETED';
  },
  handle(handlerInput) {
    return handlerInput.responseBuilder
      .addDelegateDirective()
        .getResponse();
  }
};

const BurgerGivenOrderFoodIntentHandler = {
  canHandle(handlerInput) {
    return handlerInput.requestEnvelope.request.type === "IntentRequest"
      && handlerInput.requestEnvelope.request.intent.name === "OrderFoodIntent"
      && handlerInput.requestEnvelope.request.intent.slots.menu.value 
      && handlerInput.requestEnvelope.request.intent.slots.menu.value === 'Burger'
      && !handlerInput.requestEnvelope.request.intent.slots.burgerType.value
  },
  handle(handlerInput) {
    return handlerInput.responseBuilder
      .speak('Which burger would you like Veggie, Turkey, Beef, or Classic burger?')
      .reprompt('Would you like a Veggie, Turkey, Beef, or Classic burger?')
      .addElicitSlotDirective('burgerType')
      .getResponse();
  }
};

const SoupGivenOrderFoodIntentHandler = {
  canHandle(handlerInput) {
    return handlerInput.requestEnvelope.request.type === "IntentRequest"
      && handlerInput.requestEnvelope.request.intent.name === "OrderFoodIntent"
      && handlerInput.requestEnvelope.request.intent.slots.menu.value
      && handlerInput.requestEnvelope.request.intent.slots.menu.value === 'Soup'
      && !handlerInput.requestEnvelope.request.intent.slots.soupType.value
  },
  handle(handlerInput) {
    return handlerInput.responseBuilder
      .speak("Which would you like tomato, manchow, onion, or corn soup?")
      .reprompt("Would you like a tomato, manchow, onion, or corn soup?")
      .addElicitSlotDirective('soupType')
      .getResponse();
  }
};

const ShakeGivenOrderFoodIntentHandler = {
  canHandle(handlerInput) {
    return handlerInput.requestEnvelope.request.type === "IntentRequest"
      && handlerInput.requestEnvelope.request.intent.name === "OrderFoodIntent"
      && handlerInput.requestEnvelope.request.intent.slots.menu.value
      && handlerInput.requestEnvelope.request.intent.slots.menu.value === 'Shake'
      && !handlerInput.requestEnvelope.request.intent.slots.shakeType.value
  },
  handle(handlerInput) {
    return handlerInput.responseBuilder
      .speak("Which would you like banana, chocolate, vanilla, milk, strawberry, or mango shake?")
      .reprompt("Would you like a banana, chocolate, vanilla, milk, strawberry, or mango shake?")
      .addElicitSlotDirective('shakeType')
      .getResponse();
  }
};

const CompletedOrderFoodIntentHandler = {
  canHandle(handlerInput) {
    return handlerInput.requestEnvelope.request.type === "IntentRequest"
        && handlerInput.requestEnvelope.request.intent.name === "OrderFoodIntent"
        && handlerInput.requestEnvelope.request.dialogState === "COMPLETED";
  },
  handle(handlerInput){

    const menu = handlerInput.requestEnvelope.request.intent.slots.menu.value;
    let type; 

    if (menu === 'Burger') {
        type = handlerInput.requestEnvelope.request.intent.slots.burgerType.value;
    } else if (menu === 'Soup') {
        type = handlerInput.requestEnvelope.request.intent.slots.soupType.value;
    } else if (menu === 'Shake') {
        type = handlerInput.requestEnvelope.request.intent.slots.shakeType.value;
    }

    const speechText = `Your order for ${type} ${menu} has been placed.`;
    return handlerInput.responseBuilder
        .speak(speechText)
        .getResponse();
  }
};

JSON 输入状态响应

"status": {
            "code": "ER_SUCCESS_MATCH"
         },

JSON 输出响应

{
    "body": {
        "version": "1.0",
        "response": {
            "directives": [
                {
                    "type": "Dialog.Delegate"
                }
            ],
            "type": "_DEFAULT_RESPONSE"
        },
        "sessionAttributes": {},
        "userAgent": "ask-node/2.7.0 Node/v10.19.0"
    }
}

【问题讨论】:

    标签: alexa alexa-skill alexa-slot


    【解决方案1】:

    错误太宽。也许当您在Device log 部分检查控制台时,您会发现更多错误信息。参考图片: 并且可能关闭对话委托。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-11-12
      • 2018-09-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-27
      相关资源
      最近更新 更多