Какова лучшая практика, чтобы избежать конфликтов высказываний в навыке Алекса? - PullRequest
0 голосов
/ 31 марта 2020

На скриншоте ниже у меня есть конфликт высказываний, который очевиден, потому что я использую одинаковые образцы сэмплов в обоих высказываниях.

enter image description here

Мой вопрос заключается в том, что навык, который я развиваю, требует использования одинаковых шаблонов в нескольких высказываниях, и я не могу заставить пользователей сказать что-то вроде «Да, я хочу продолжить» или «Я хочу сохранить…», что-то вроде этого.

В таком сценарии, что является наилучшей практикой, чтобы избежать конфликтов высказываний, а также иметь несколько похожих шаблонов?

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

Вот пример того, что я имею в виду:

Пользователь говорит что-то против {note} В навыке я проверяю это:

if(this$inputs.note.value === "no") {
  // auto route to stop intent
} else if(this$inputs.note.value === "yes") {
  // stays inside the same intent
} else {
  // does the database stuff and saves the value.
  // then asks the user whether he wants to continue
}

Вышеприведенное l oop продолжается до тех пор, пока пользователь не скажет «нет».

Но так ли это правильно? Если нет, то какова лучшая практика? Пожалуйста, предложите.

1 Ответ

1 голос
/ 31 марта 2020

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

Из опыта: это очень сложно / раздражает в реализации и не приведет к хорошему пользовательский опыт.

Для HaveMoreNotesIntent вам нужно выделить отдельные YesIntent и NoIntent, а затем направить пользователя к правильной функции / намерению на основе истории намерений (или * 1008). * контекст ). Вам нужно будет просто включить это в своем конфигурационном файле.

YesIntent() {
  console.log(this.$user.$context.prev[0].request.intent);
  // Check if last intent was either of the following
  if (
    ['TutorialState.TutorialStartIntent', 'TutorialLearnIntent'].includes(
      this.$user.$context.prev[0].request.intent
    )
  ) {
    return this.toStateIntent('TutorialState', 'TutorialTrainIntent');
  } else {
    return this.toStateIntent('TutorialState', 'TutorialLearnIntent');
  }
}

ИЛИ, если вы находитесь в состоянии , вы можете иметь намерения «да» и «нет» внутри этого состояния, которые будут работать только в это состояние.

ISPBuyState: {
  async _buySpecificPack() {
    console.log('_buySpecificPack');
    this.$speech.addText(
      'Right now I have a "sports expansion pack". Would you like to hear more about it?'
    );
    return this.ask(this.$speech);
  },
  async YesIntent() {
    console.log('ISPBuyState.YesIntent');
    this.$session.$data.productReferenceName = 'sports';
    return this.toStatelessIntent('buy_intent');
  },
  async NoIntent() {
    console.log('ISPBuyState.NoIntent');
    return this.toStatelessIntent('LAUNCH');
  },
  async CancelIntent() {
    console.log('ISPBuyState.CancelIntent()');
    return this.toStatelessIntent('LAUNCH');
  }
}

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...