Обойти ответ Алекса Custom Skill Reoccuring ответ - PullRequest
0 голосов
/ 21 февраля 2019

Я создаю пользовательский навык Alexa, в котором я могу спросить имя пользователя и повторить его.(Работает нормально).Теперь следующая часть должна подтвердить имя пользователя.

Alexa: "Please confirm your name!"<br>
User:"-"

Alexa: "Please confirm your name!"<br>
User: "No"

Alexa: "Please confirm your name!"<br>
**User: "Yes I confirm"**  
End.

Теперь я пытаюсь добиться описанного выше поведения, поскольку Alexa должен запрашивать "Please confirm your name!" каждые 10 секунд, пока пользователь не ответит * 1006.*

"Yes, I confirm".

Я проверил документацию по API, но не смог найти никаких намерений, связанных с этим делом.

Пожалуйста, поделитесь информацией или решением.

Ответы [ 2 ]

0 голосов
/ 22 февраля 2019

Повторение каждые 10 секунд, когда пользователь не отвечает, не уверен, сможем ли мы это сделать.

Но мы можем достичь части Да / Нет.Один из способов сделать это - использовать государство.Здесь, в этом примере, я использую модуль node-cache для управления состоянием.

Рассмотрим нижеприведенное намерение с именем "ConfirmationQuestionIntent".Он устанавливает состояние «имя-подтверждения».

const ConfirmationQuestionIntentHandler = {
  canHandle(handlerInput) {
    return (
      handlerInput.requestEnvelope.request.type === "IntentRequest" &&
      handlerInput.requestEnvelope.request.intent.name === "ConfirmationQuestionIntent"
    );
  },
  handle(handlerInput) {
    const speechText = "Please confirm your name as 'John'.";
    myCache.set('state','confirm-name');
    return handlerInput.responseBuilder
      .speak(speechText)
      .reprompt(speechText)
      .getResponse();
  }
};

Теперь включите / добавьте два встроенных намерения, AMAZON.YesIntent и AMAZON.NoIntent.Рассмотрим AMAZON.NoIntent ниже, в функции обработчика.он проверяет, существует ли какое-либо состояние с именем «имя-подтверждения».Если он присутствует, он отвечает «Пожалуйста, подтвердите ваше имя как« Джон ».»и если нет, то отвечает ответом по умолчанию.

const NoBuiltInIntent = {
  canHandle(handlerInput) {
    return (
      handlerInput.requestEnvelope.request.type === "IntentRequest" &&
      handlerInput.requestEnvelope.request.intent.name === "AMAZON.NoIntent"
    );
  },

  handle(handlerInput) {
    const state = myCache.get("state");
    let speechText = "I didn't get this!. Could you please rephrase.";
    if(state === "confirm-name") speechText = "Please confirm your name as 'John'.";
    return handlerInput.responseBuilder
      .speak(speechText)
      .reprompt(speechText)
      .getResponse();
  }
};

Рассмотрим приведенный ниже AMAZON.YesIntent. В функции дескриптора он проверяет, существует ли какое-либо состояние с именем «verify-name».Если это так, то он отвечает «Спасибо за подтверждение» и удаляет состояние из кэша.Если нет, то он просит пользователя перефразировать.

const YesBuiltInIntent = {
  canHandle(handlerInput) {
    return (
      handlerInput.requestEnvelope.request.type === "IntentRequest" &&
      handlerInput.requestEnvelope.request.intent.name === "AMAZON.YesIntent"
    );
  },

  handle(handlerInput) {
    const state = myCache.get("state");
    let speechText = "I didn't get this!. Could you please rephrase.";
    if(state === "confirm-name") speechText = "Thanks for the confirmation.";
    myCache.del('state');
    return handlerInput.responseBuilder
      .speak(speechText)
      .reprompt(speechText)
      .getResponse();
  }
};

Таким образом, вы можете использовать «Состояние», чтобы определить, на какой сценарий отвечает пользователь, и затем предоставить правильный ответ.

0 голосов
/ 22 февраля 2019

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

Я предполагаю, что вы используете verifySlotDirective для подтверждения имени пользователя.

verifySlotDirective или просто любая директива подтверждения в Alexa работает со словами, которые только согласны или не согласны с сообщением подтверждения.например, ДА / НЕТ

Решение:

1 ) Если вы уже запросили имя пользователя (например, «Джон»),не спрашивайте это снова.Просто заставьте Алексу сказать:

Алекса : "Вас зовут Джон, верно?"Или "Ты сказал Джон? Пожалуйста, подтвердите?"

Пользователь : можно сказать Да / Нет для подтверждения.

Примечание : Alexa распознает только ограниченный набор международных имен.

2 ) Лучший способ получить имя пользователя - использовать профиль клиента Алекса Api , поэтому вам не придется беспокоиться о том, что Alexa не сможет распознать имя, не говоря уже о подтверждении пользователя.имя.

...