Как вызвать список, когда пользователь вводит элемент списка из другого намерения в диалоге - PullRequest
1 голос
/ 07 марта 2020

У меня есть список, показывающий 3 элемента, но когда я выбираю элемент из списка (intent1), он работает и запускает intent2, но после нескольких намерений, если я снова наберу имя элемента, intent2 не сработает и выдаст ответ отозванного намерения.

это мой код

const ItemList = {
    title: "Select to update.",
    items: {
      "Games": {
        title: "Games",
        description: "Click here to update Games details.",
        image: new Image({
          url: 'https://img.icons8.com/plasticine/2x/name.png',
          alt: 'p1',
        }),
      },
      "Books": {
        title: "Books",
        description: "Click here to update Books details.",
        image: new Image({
          url: 'https://img.icons8.com/plasticine/2x/name.png',
          alt: 'p2',
        }),
      },
      "Language": {
        title: "Language",
        description: "Click here to update Language details.",
        image: new Image({
          url: 'https://img.icons8.com/plasticine/2x/name.png',
          alt: 'p3',
        }),
      },
    },
  }


app.intent(SHOW_LIST_INTENT, (conv) => {
  conv.ask("Here's the list.");
  conv.ask(new List(ItemList));
});

app.intent(SELECTED_ITEM_INTENT, (conv, input, option) => {
    conv.contexts.set(AppContexts.AWAITING_ITEM, 1, {item: option});

    if (option === 'Games'){
      conv.ask(`Which is your favorite Game?`); 
    } else if (option === 'Language'){
      conv.ask(`Which ${option} do you know?`);
    } else if (option === 'Books'){
      conv.ask(`Your favorite ${option} name?`);
    }
});

app.intent(HANDLER_INTENT, (conv, parameters) => {
  const context = conv.contexts.get(AppContexts.AWAITING_ITEM);
  const selectedItem = context.parameters.item;


    if (selectedItem === 'Games'){
      conv.ask(`${parameters} is updated as your favorite Game. ` + `Your next preference?`);
      conv.ask(new Suggestions([`Add More Games`, `Show List`]));
    } else if (selectedItem === 'Books'){
      conv.ask(`${parameters} is updated as your favorite Book. ` + `Your next preference?`);
      conv.ask(new Suggestions([`Add More Books`, `Show List`]));
    } else if (selectedItem === 'Language'){
      conv.ask(`${parameters} is updated as your Language. ` + `Your next preference?`);
      conv.ask(new Suggestions([`Add More Language`, `Show List`]));
    }
});

exports.dialogflowFirebaseFulfillment = functions.https.onRequest(app);

Я хочу вызвать SELECTED_ITEM_INTENT, когда пользователь говорит Добавить больше игр

как это получить, есть что-нибудь отсутствует в коде.

ShowListIntent SelectedItemIntent HandlerIntent

1 Ответ

0 голосов
/ 08 марта 2020

Я думаю, что дизайн вашего разговора немного запутан, и это может затруднить выполнение именно того, что вы хотите.

Ваш SELECTED_ITEM_INTENT запускается только на основе взаимодействия со списком, и вы предлагаете им что-то сказать. Поскольку список больше не активен, и у вас нет настроенного Intents для обработки какой-либо из фраз, тогда ничего не будет совпадать.

Вместо того, чтобы полагаться на визуальный список (который не будет работать хорошо для всех Вспомогательные платформы), вы можете подходить к нему больше как к голосовой беседе. Под этой моделью вы можете изобразить разговоры, которые выглядят примерно так:

Agent: Would you like to update the Games, Books, or Language details?
User:  Games
Agent: What is your favorite game?
User:  Rock, paper, scissors
Agent: Rock, paper, scissors has been set as your favorite game. What would you like to update next?
User:  Another game
...

Или разговор может go примерно так

Agent: Would you like to update the Games, Books, or Language details?
User:  Game details
Agent: What is your favorite game?
User:  Rock, paper, scissors
Agent: Rock, paper, scissors has been set as your favorite game. What would you like to update next?
User:  Another game
...

Но что, если они скажут что-то подобное вместо этого?

Agent: Would you like to update the Games, Books, or Language details?
User:  Books
Agent: What is your favorite book?
User:  I meant game
Agent: What is your favorite game?
User:  Rock, paper, scissors
Agent: Rock, paper, scissors has been set as your favorite game. What would you like to update next?
User:  I don't know
...

Исходя из этого, мы можем подумать, что пользователи будут отвечать одним из трех способов:

  1. Указывая, какую категорию они хотят, с помощью таких фраз, как «Книга», « Игры »,« Сведения о языке »,« Я имею в виду игры »,« Добавить больше языков »,« Другая книга »и т. Д. c.
    • Это говорит о том, что каждая категория может быть хорошей сущностью для фраз, которые может сказать пользователь.
  2. Со значением того, что они обновляют
    • Это хорошо обрабатывается с помощью контекста, чтобы знать, когда мы запрашиваем что-то конкретное c. Как вы уже сделали.
  3. Обращение за помощью к таким фразам, как "Что я могу сделать?" или «Я не понимаю».

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

Но мы не рассмотрели несколько других вещей, которые мог бы сказать пользователь. Что, например, если бы у нас было

Agent: Rock, paper, scissors has been set as your favorite game. What would you like to update next?
User:  Add another one

Пользователь знает, что он просто установил игру, и он хочет установить другую. Но они не использовали термин «игра» специально. Нам нужно будет отслеживать, какую категорию они последний раз обновляли в контексте, и иметь другое намерение, которое может обрабатывать фразы типа «Добавить еще одну» или «То же самое».

Но что, если наши пользователи начнут делать это много, и у нас есть взаимодействие, такое как

Agent: Rock, paper, scissors has been set as your favorite game. What would you like to update next?
User:  Add a book named Dungeon Masters Guide

Здесь они объединились с вещами, которые мы рассматривали как отдельные намерения. Поэтому нам может понадобиться добавить Intent, который обрабатывает такие фразы, как эта, где они одновременно указывают и категорию, и информацию.

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