Концептуальное руководство по входу в Google (Dialogflow)

Вход в Google (GSI) для Ассистента обеспечивает наиболее удобный интерфейс для пользователей и является самым простым процессом для реализации разработчиками. С помощью GSI ваше действие может запросить доступ к профилю Google вашего пользователя во время разговора и, если пользователь дает согласие, получить его имя, адрес электронной почты и изображение профиля. Затем ваше действие может использовать эту информацию, чтобы проверить, есть ли у пользователя учетная запись Google в вашей системе. Если нет, ваше действие спрашивает пользователя, хотят ли они создать новую учетную запись в вашей системе на основе информации своего профиля Google.

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

  • У вас нет существующей системы аутентификации и/или вы ожидаете, что у всех ваших пользователей будет учетная запись Google. Например, если ваше действие нацелено конкретно на Ассистента, вы можете ожидать, что у всех ваших пользователей будут учетные записи Google.
  • У вас есть существующая система аутентификации, и вы хотите связать только тех пользователей, которые вошли в вашу систему, используя свои учетные записи Google.

Чтобы убедиться, что GSI является для вас подходящим решением, см. страницу «Выберите тип привязки учетной записи» .

Ключевые термины

Прежде чем читать о том, как работает GSI, ознакомьтесь со следующими терминами:

  • Токен Google ID: подписанное подтверждение личности пользователя, содержащее основную информацию профиля пользователя Google (имя, адрес электронной почты и изображение профиля). Токен Google ID — это веб-токен JSON (JWT).

    Ниже приведен пример декодированного токена:

{
  "sub": 1234567890,        // The unique ID of the user's Google Account
  "iss": "https://accounts.google.com",        // The token's issuer
  "aud": "123-abc.apps.googleusercontent.com", // Client ID assigned to your Actions project
  "iat": 233366400,         // Unix timestamp of the token's creation time
  "exp": 233370000,         // Unix timestamp of the token's expiration time
  "name": "Jan Jansen",
  "given_name": "Jan",
  "family_name": "Jansen",
  "email": "jan@gmail.com", // If present, the user's email address
  "locale": "en_US"
}
  • Вспомогательное намерение для входа в учетную запись: вспомогательное намерение, которое вы вызываете, чтобы запросить у Ассистента процесс связывания учетной записи. Дополнительную информацию см. в разделе Вход в учетную запись .
    • Контекстная строка: настраиваемая строка, которую вы добавляете в вспомогательное намерение входа в учетную запись, которая сообщает пользователю, почему вам нужно, чтобы он связал свою учетную запись.

Как это работает

Фундаментальный процесс GSI заключается в следующем:

  1. Ваше действие запрашивает у пользователя согласие на доступ к его профилю Google.
  2. После того как пользователь дает согласие, ваше действие получает токен идентификатора Google, который содержит информацию профиля Google пользователя.
  3. Подтвердите и декодируйте токен, чтобы прочитать содержимое профиля. Если вы используете клиентскую библиотеку Actions on Google для Node.js или клиентскую библиотеку Java, она проверяет и декодирует токен за вас.
  4. Ваше действие использует этот токен, чтобы проверить, существует ли информация профиля Google пользователя в вашей системе.

    1. Если это так, значит, пользователь уже вошел в вашу систему под своей учетной записью Google. Пользователь может продолжить разговор с Помощником, связав свою личность со своей учетной записью Google.
    2. Если этого не произойдет, пользователь может создать новую учетную запись в вашей системе, используя информацию, содержащуюся в токене Google ID. Затем пользователь может продолжить разговор с Помощником, связав свою новую учетную запись.

Процесс входа в Google

В этом разделе описаны различные процессы, которые могут произойти при входе в Google.

Последовательность 1: информация о пользователе существует в вашей системе.

На следующей диаграмме показан сквозной поток, который происходит с GSI, когда информация о пользователе уже существует в вашей системе:

В этом случае вы вызываете вспомогательное намерение actions.intent.SIGN_IN с настраиваемой вами контекстной строкой. Это намерение запрашивает у пользователя разрешение на доступ к информации его профиля Google.

После согласия пользователя Ассистент отправляет запрос, содержащий информацию профиля для user@gmail.com . В этом случае информация, содержащаяся в токене Google ID для user@gmail.com , соответствует учетной записи в вашей системе, поэтому личность пользователя в вашем действии автоматически связывается с этой учетной записью. Затем ваш вебхук может прочитать обычный заказ пользователя из базы данных и ответить соответствующим образом.

Последовательность 2: информация о пользователе не существует в вашей системе.

На следующей диаграмме показан сквозной поток, который происходит с GSI, когда информация о пользователе не существует в вашей системе:

В этом случае информация, содержащаяся в токене идентификатора Google для user@gmail.com , не соответствует учетной записи в вашей системе, поэтому Ассистент спрашивает пользователя, хочет ли он создать новую учетную запись. Пользователь может завершить процесс создания учетной записи голосом, а не передавать его на экранированное устройство.

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

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