Перехватчик и перенаправление с помощью навыков Alexa

#alexa-skills-kit #alexa-skill

Вопрос:

  1. Может ли перехватчик быть назначен только одному намерению?
  2. Могу ли я перенаправить перехватчик на другое намерение?

Я создал перехватчик ответа, который проверяет, выиграл ли пользователь в игре, и перенаправляет с перехватчика на другое намерение. Отображается шаблон намерения APL перед перехватчиком, но звук, который говорит alexa, исходит от намерения, которое я перенаправил. И шаблон APL перенаправленного намерения не отображается.

Ответ №1:

Может ли перехватчик быть назначен только одному намерению?

Да, вы можете, вам нужно использовать ту же логику, что и функция canHandle в вашем перехватчике:

 canHandle(handlerInput: Alexa.HandlerInput) {
    // reuse this code
    return (
      Alexa.getRequestType(handlerInput.requestEnvelope) === "IntentRequest" amp;amp;
      Alexa.getIntentName(handlerInput.requestEnvelope) === "HelloWorldIntent"
    );
  },
 

Могу ли я перенаправить перехватчик на другое намерение?

Не совсем так, но вы можете сделать это по-другому. Перехватчик не отвечает на запрос. Это просто intercept the request для того, чтобы ваше Намерение могло справиться с этим. Тот intent отвечает на запрос.

Таким образом, вы можете поместить логику сеанса в перехватчик, и цель будет знать, выиграл пользователь в игре или нет.

Перехватчик

 const MyAwesomeInterceptor = {
  process(handlerInput) {
    const { attributesManager, requestEnvelope } = handlerInput;
    const sessionAttributes = attributesManager.getSessionAttributes();

    // Code logic ...

    sessionAttributes.hasWon = true
  }
}
 

Намерение

 const HelloWorldIntentHandler = {
  canHandle(handlerInput) {
    return (
      Alexa.getRequestType(handlerInput.requestEnvelope) === "IntentRequest" amp;amp;
      Alexa.getIntentName(handlerInput.requestEnvelope) === "HelloWorldIntent"
    );
  },

  handle(handlerInput) {
    const { attributesManager } = handlerInput;
    const sessionAttributes = attributesManager.getSessionAttributes();

    if (sessionAttributes.hasWon) {
      return handlerInput.responseBuilder.speak("You won").getResponse();
    } else {
      return handlerInput.responseBuilder.speak("You lost").getResponse();
    }
  },
};
 

Я рекомендую вам ознакомиться с документом, чтобы лучше понять, как работает Alexa.

Комментарии:

1. спасибо….ожидается что-то похожее на angular, где вы можете назначить перехватчик только для некоторых запросов. Я буду искать дока …..