Намерение разрешения цепочки - PullRequest
0 голосов
/ 25 ноября 2018

Как правильно связать намерение разрешения с другим с помощью Dialogflow?

У меня есть две установки:

app.intent('ask_for_permission', async (conv) => {
  return conv.ask(new Permission({
    context: 'to get your location',
    permissions: 'DEVICE_PRECISE_LOCATION',
  })); 
})


app.intent('confirm_permissions', async (conv, params, confirmationGranted) => {
  conv.ask(`I think you gave me permission? ${params} ${confirmationGranted}`)
})

И в панели управления Dialogflow у меня есть такая настройка, поэтому намерение ask_for_permission следует намерению confirm_permissions следующим образом:

Dialogflow UI

Но всякий раз, когда я запускаю намерение ask_for_permission, пользователя спрашивают, хотят ли они поделиться своим местоположением, но отвечают либо yes, либо no на самом деле не побуждает пользователя перейти к следующему намерению.

enter image description here

Вот оно в симуляторе:

enter image description here

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

1 Ответ

0 голосов
/ 25 ноября 2018

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

Как часть этого, вы устанавливаете confirm_permissions контекст .Контекст отличается от намерения.То, что вы говорите, устанавливая выходной контекст таким, какой вы есть, заключается в том, что вы находитесь в состоянии с именем «verify_permissions», и при обработке ответов могут оцениваться Intents, которые должны запускаться только в этом состоянии.

Вместо этого я думаю, что вы хотите создать confirm_permissions намерение .В Dialogflow ответом будет событие actions_intent_PERMISSION, которое вы можете создать для обработки намерения.Это может выглядеть примерно так:

enter image description here

Обратите внимание:

  • Имя намерения - то, что вы хотитекак и другие Intents.
  • Событие является важным битом и должно быть установлено.Это совпадает с именем, которое отправляет Actions в Google как специальное имя намерения AoG (и заменяет точки подчеркиванием).
  • Поскольку мы указываем событие, мы не используем обучение
  • Не забудьте включить выполнение.

На стороне выполнения ваш код выглядит так, как будто он должен работать.

Причина, по которой вы получили«Скажи это еще раз» и тому подобные ответы: они взяты из намерения по умолчанию.Поскольку никакие Intents не были настроены так, чтобы соответствовать событию разрешения, он использовал заданное резервное намерение.

...