Вход в 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 заключается в следующем:
- Ваше действие запрашивает у пользователя согласие на доступ к его профилю Google.
- После того как пользователь дает согласие, ваше действие получает токен идентификатора Google, который содержит информацию профиля Google пользователя.
- Подтвердите и декодируйте токен, чтобы прочитать содержимое профиля. Если вы используете клиентскую библиотеку Actions on Google для Node.js или клиентскую библиотеку Java, она проверяет и декодирует токен за вас.
Ваше действие использует этот токен, чтобы проверить, существует ли информация профиля Google пользователя в вашей системе.
- Если это так, значит, пользователь уже вошел в вашу систему под своей учетной записью Google. Пользователь может продолжить разговор с Помощником, связав свою личность со своей учетной записью Google.
Если этого не произойдет, пользователь может создать новую учетную запись в вашей системе, используя информацию, содержащуюся в токене 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.
В этом случае у пользователя нет обычного заказа, поскольку он новичок в сервисе, поэтому ваше действие спрашивает, что он хочет заказать. Вы также можете спросить пользователя, хочет ли он сделать свой последний заказ обычным.