Есть ли способ запросить подтверждение у пользователя с помощью встроенного редактора вместо использования последующих намерений?

У меня есть два намерения get_name и get_age

в get_name я беру имя пользователя, это намерение разрешено для выполнения. В редакторе как запросить подтверждение имени?

если подтверждено, то я должен добавить выходной контекст в get_name, чтобы было вызвано намерение get_age.

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

function confirmation(agent){
    var entity_name = agent.name;
    var name = agent.parameters.name;
    var conv = agent.conv();
    conv.ask(`Is ${name} correct?`);
    agent.add(conv);
    var user_query = conv.query;
    if(user_query.entities.name=='yes'){
        agent.setContext({
            name: `${entity_name}`+'_done',
            lifespan: 2
        });
        agent.add(`Give your age ${name}`);
    }
}

person Abhinay    schedule 02.05.2019    source источник


Ответы (1)


Вы путаете пару понятий. Хотя можно использовать встроенный редактор для выполнения и можно подтвердить запись от пользователя без последующего намерения, вам все равно потребуются дополнительные намерения для выполнения подтверждения.

При программировании выполнения Dialogflow необходимо понимать две важные вещи:

  1. Все ответы пользователя должны проходить через намерение. Это не обязательно должно быть уникальным или последующим намерением, но намерение того, что говорит пользователь, всегда фиксируется таким образом.
  2. Когда намерение запускается, оно может отправить информацию обработчику намерения. Это единственный способ, которым обработчик намерений получает информацию от пользователя. Когда обработчик запускается, он не ждет дальнейших действий пользователя. Все, что он может сделать, это отправить ответ.

Итак, в вашем коде, как только вы отправили

conv.ask(`Is ${name} correct?`);
agent.add(conv);

вы не получите ответа от этого приглашения в том же обработчике намерений.

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

Ваша проблема аналогична описанной в эта статья, в которой указывается, что наш ответ основан на двух вещах:

  1. Текущее состояние (в вашем случае, какой вопрос вы просите подтвердить)
  2. Ответ пользователя («да», в этом случае вы сохраняете информацию и спрашиваете о следующем вопросе, или «нет», в этом случае вы повторяете вопрос)
person Prisoner    schedule 02.05.2019
comment
Спасибо, я не знал, что обработчик не ждет дальнейших действий. Это решило мою проблему. Я воспользуюсь другим намерением для обработки подтверждения. - person Abhinay; 02.05.2019