Запуск намерения с событием с помощью API.AI в действии Google

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

Чтобы привести пример. Я прикрепил изображения намерений, которые пытаюсь использовать. Я хочу, чтобы пользователь подсказал get_location намерение высказывания. Из этого мой код проверяет, есть ли у нас уже разрешения, и если нет, я хочу, чтобы намерение request-permission запускалось через событие. Как настроить событие, чтобы это было сделано?

Это разговор/рабочий поток, который я ищу: - Пользователь говорит: «Забронируйте время игры рядом со мной» - Это запускает мое намерение get_location - намерение get_location проверяет, было ли предоставлено разрешение с помощью isPermissionGranted() - оно понимает, что разрешения нет предоставлено — запускает намерение запроса-разрешения — запрашивать у пользователя разрешение

Вот как настраиваются мои намерения: введите здесь описание изображения

введите здесь описание изображения


person Antonio Cucciniello    schedule 02.08.2017    source источник
comment
Не могли бы вы отредактировать вопрос, чтобы привести пример диалога, который вы пытаетесь построить? И когда вы говорите разрешения, вы имеете в виду разрешения действий в Google (например, developers.google. ком/действия/помощник/)?   -  person Daniel Situnayake    schedule 03.08.2017
comment
Да, я пытаюсь получить разрешения на местоположение. Я могу получить разрешения. Я хочу, чтобы намерение разрешения запроса запускалось через событие, когда у меня нет разрешений от пользователя.   -  person Antonio Cucciniello    schedule 03.08.2017
comment
Когда вы вызываете помощник по разрешениям, помощник будет обрабатывать запросы разрешений от пользователя, если они еще не предоставили его, поэтому вам не нужно беспокоиться о том, чтобы запросить разрешение самостоятельно. Если вы используете клиентскую библиотеку Node.js, просто вызовите askForPermission.   -  person Daniel Situnayake    schedule 03.08.2017
comment
@DanImrie-Situnyayake Итак, проблема не в том, чтобы запрашивать разрешения, я могу убедиться, что могу запросить их, используя askForPermission(). Что я хочу сделать, чтобы запуск API.AI отправлял событие, которое вызывает автоматический запуск намерения request-permission. Сейчас происходит следующее: я говорю пользователю, что у нас нет разрешений, и говорю: «Могу я попросить у вас разрешения?» который выполняет намерение запроса разрешений через фразы, которые пользователь произносит. Я хочу, чтобы пользователю не приходилось спрашивать, можем ли мы сначала запросить разрешения, а сразу переходить к запросу разрешений.   -  person Antonio Cucciniello    schedule 04.08.2017
comment
@ DanImrie-Situnayake Я видел, что вы ответили на этот вопрос в пятницу, но теперь я больше не вижу вашего ответа. Не могли бы вы еще раз ответить на это?   -  person Antonio Cucciniello    schedule 07.08.2017
comment
Извинения - я понял, что в моем ответе была ошибка, и снял его, чтобы исправить. Я обновлю его сейчас.   -  person Daniel Situnayake    schedule 07.08.2017


Ответы (1)


Похоже, в вашей текущей реализации у вас есть такой поток:

  1. Пользователь говорит: «Забронируй время игры поблизости».
  2. get_location намерение совпало.
  3. In the webhook for get_location, you check if the user has previously granted permission with isPermissionGranted().
    • If they have previously granted, you move forward with looking up their local course.
  4. Если они ранее не предоставлялись, вы вызываете ask из веб-перехватчика, чтобы запросить у пользователя разрешение на получение разрешения на получение его местоположения.
  5. Если они говорят «да», намерение request-permission совпадает.
  6. В веб-перехватчике для request-permission вы вызываете askForPermission(), и помощник запрашивает у пользователя разрешение на получение его местоположения.
  7. Теперь вы продвигаетесь вперед, ища их местный курс.

В этом случае диалог будет следующим:

User: Book a tee time nearby
App:  Can I ask permission to get your location?
User: Yes
App:  [from Assistant] Can I access your location?
User: Yes
App:  Thanks, your local course is Pebble Beach and I booked you a tee time.

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

Для этого можно реализовать следующий поток:

  1. Пользователь говорит: «Забронируй время игры поблизости».
  2. get_location намерение совпадает.
  3. In the webhook for get_location, you check if the user has previously granted permission with isPermissionGranted().
    • If they have previously granted, you move forward with looking up their local course.
  4. Если они ранее не предоставлялись, вам следует вызвать askForPermission(), все еще находящийся в веб-перехватчике для get_location. Помощник запросит у пользователя разрешение на получение его местоположения.
  5. Чтобы обработать ответ на запрос разрешения, необходимо создать новое намерение и добавить к нему событие с именем actions_intent_PERMISSION (см. документы для справки). Это событие приведет к срабатыванию намерения, когда пользователь предоставил разрешение на определение местоположения.
  6. Создайте веб-перехватчик для этого нового намерения, который в своем веб-перехватчике подтверждает разрешение с помощью isPermissionGranted(), а затем переходит к поиску своего локального курса.

Теперь диалог будет следующим:

User: Book a tee time nearby
App:  [from Assistant] Can I access your location?
User: Yes
App:  Thanks, your local course is Pebble Beach and I booked you a tee time.
person Daniel Situnayake    schedule 04.08.2017