ошибка в навыке alexa Возникла проблема с ответом запрошенного навыка

У меня есть метод, размещенный на Alexa (node.js)

пользователь: поговорить с тестовым ботом

алекса: добро пожаловать! вы можете обновить название или заказать еду. Что ты хочешь делать?

пользователь: заказ еды

алекса: можно заказать бургер, суп и коктейль. Что ты хочешь иметь?

пользователь: бургер

Алекса: Какой бургер вы бы предпочли: вегетарианский, индейский, с говядиной или классический бургер?

пользователь: veggie

алекса: ваш заказ на вегетарианский бургер размещен.

но всякий раз, когда пользователь говорит menutype (гамбургер), 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"
    }
}

person Vikas Patidar    schedule 10.04.2020    source источник


Ответы (1)


Ошибка слишком велика. Возможно, когда вы заглянете в консоль на Device log части, вы найдете больше информации об ошибке. См. Изображение для справки:  введите описание изображения здесь И, возможно, отключите делегат диалога.

person Bjørson Ålmer    schedule 10.04.2020