ошибка в навыке alexa "Возникла проблема с ответом запрошенного навыка" - PullRequest
0 голосов
/ 10 апреля 2020

У меня есть Alexa-хост-метод (node.js)

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

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

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

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

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

alexa: Какой гамбургер вы хотите, бургер Vegg ie, индейка, говядина или Classi c?

user: vegg ie

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

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

1 Ответ

0 голосов
/ 10 апреля 2020

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

...