Чтение контактов пользователя в приложении Google assistant - PullRequest
0 голосов
/ 28 апреля 2020

Я пытаюсь добавить диалоговую функцию Google Assistant для своего приложения для обмена сообщениями.

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

Рассмотрим следующий пример:

  1. Пользователь: Эй, Google, поговори со ScoopMessages
  2. Помощник: Добро пожаловать, кому ты хочешь отправить сообщение
  3. Пользователь: Боб
  4. Помощник: есть несколько Бобов, выберите, кому вы хотите отправить сообщение?

    Показывает все контакты с именами Боба в них

Я реализовал диалоги 1 и 2, но не могу реализовать 3 и 4. Я не нахожу ни одного блога / источника, где бы он показывал, как выбрать контакт. Это вообще возможно? Пожалуйста, укажите мне пример или дайте мне знать, как я могу построить эту функциональность?

1 Ответ

1 голос
/ 28 апреля 2020

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

  1. Аутентификация пользователя
  2. Получение контактной информации
  3. Устранение неоднозначности контактов
  4. Отправка сообщения

Аутентификация пользователя

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

В связи с этим вам потребуется токен доступа для вызова API Google. чтобы получить их контакты, и для этого токена доступа должна быть указана c авторизация для доступа к необходимой области. Последняя часть обманчива - одно только связывание аккаунта не сделает этого за вас, и вы не сможете получить их разрешение одним голосом. Самый простой подход - использовать схему «Google Sign In for Assistant» и «OAuth» вместе. Этот ответ о StackOverflow содержит некоторые рекомендации о том, как это будет работать.

Получение контактной информации

С помощью токена авторизации в Intent Hander где они дают имя, вы можете сделать запрос к контактам пользователя от их имени. Здесь, однако, вы сталкиваетесь с двумя конкурирующими API от Google, каждый со своими особенностями.

Контакты API - более старый протокол, и результаты возвращаются в XML с использованием их более старый формат gData, но он предлагает способ выполнения запросов. People API является более новым и возвращает данные в формате JSON, но не предлагает способ запроса полей. API People официально заменяет API Контактов, который "будет устаревшим в будущем" .

. С API Контактов вы можете выполнить запрос для термина который будет искать все текстовые поля в контактах пользователя. Чтобы использовать «Боб» из вашего примера, это может выглядеть примерно так:

GET https://www.google.com/m8/feeds/contacts/default/full?q=Bob

. С помощью API People вам нужно получить весь список их контактов, используя people.connections.list. метод, вероятно, указывающий, что вам нужны поля "names" и "nicknames". С помощью этого списка вы можете затем искать в полях совпадения.

Если есть одно совпадение, все хорошо.

Если имеется более одного совпадения ...

Устранение неоднозначности контактов

... вам придется ответить пользователю, запрашивающему это. Если число ограничено, вы, вероятно, можете сказать что-то вроде: «Кому вы хотите его отправить? Боб Смит или Джо Боб?»

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

Отправка сообщение

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

...