Restez organisé à l'aide des collections
Enregistrez et classez les contenus selon vos préférences.
Google Sign-In pour l'Assistant offre l'expérience utilisateur la plus simple et la plus simple possible
aux utilisateurs et aux développeurs
pour l'association et la création de compte. Votre action
peut demander l'accès au profil Google de votre utilisateur lors d'une conversation,
y compris le nom, l'adresse e-mail et la photo de profil de l'utilisateur.
Les informations du profil peuvent servir à créer une expérience utilisateur personnalisée.
dans votre action. Si vous avez des applications sur d'autres plates-formes qui utilisent Google Sign-In,
vous pouvez également trouver et associer le compte
d'un utilisateur existant, créer un nouveau compte,
et établir un canal de communication
direct avec l’utilisateur.
Pour associer un compte avec Google Sign-In, vous demandez à l'utilisateur de donner son consentement
pour accéder à son profil Google. Vous utilisez ensuite les informations de son profil, pour
exemple son adresse e-mail, pour
identifier l'utilisateur dans votre système.
Implémenter l'association de compte Google Sign-In
Suivez les étapes des sections suivantes pour ajouter une association de compte Google Sign-In à votre
action.
Configurer le projet
Pour configurer votre projet afin d'utiliser l'association de compte Google Sign-In, procédez comme suit:
Ouvrez la console Actions et sélectionnez un projet.
Cliquez sur l'onglet Développer, puis sélectionnez Association de comptes.
Activez le bouton bascule à côté de l'option Association de comptes.
Dans la section Création de compte, sélectionnez Oui.
Dans Type d'association, sélectionnez Google Sign-In.
Ouvrez la page Informations sur le client et notez la valeur du numéro client attribué par Google à vos actions.
Cliquez sur Enregistrer.
Concevoir l'interface utilisateur vocale pour le flux d'authentification
Vérifier si l'utilisateur est validé et démarrer le processus d'association de compte
Ouvrez votre projet Actions Builder dans la console Actions.
Créez une scène pour commencer à associer votre compte dans votre action:
<ph type="x-smartling-placeholder"></ph>
Cliquez sur Scenes (Scènes).
Cliquez sur l'icône add (+) (Ajouter) (+) pour ajouter une scène.
Dans la scène que vous venez de créer, cliquez sur le bouton Ajouter add.
pour Conditions.
Ajoutez une condition qui vérifie si l'utilisateur associé à la conversation est
un utilisateur validé. Si la vérification échoue, votre action ne peut pas associer le compte
pendant la conversation, et devrait
revenir à l'octroi d'un accès
qui ne nécessite pas d'association de compte.
Dans le champ Enter new expression, sous Condition, saisissez la logique suivante:
user.verificationStatus != "VERIFIED"
Sous Transition, sélectionnez une scène qui ne nécessite pas d'association de compte ou
une scène qui est le point d'entrée de la fonctionnalité réservée aux invités.
Cliquez sur l'icône d'ajout add pour Conditions.
Ajoutez une condition pour déclencher un flux d'association de comptes si l'utilisateur n'a pas
une identité associée.
Dans le champ Enter new expression, sous Condition, saisissez la logique suivante :
user.verificationStatus == "VERIFIED"
Sous Transition, sélectionnez la scène système Association de comptes.
Cliquez sur Enregistrer.
Après l'enregistrement, une nouvelle scène système d'association de comptes appelée <SceneName>_AccountLinking
est ajouté à votre projet.
Personnaliser l'association de comptes
Sous Scenes (Scènes), sélectionnez la scène système d'association de comptes.
Cliquez sur Envoyer la requête et ajoutez une courte phrase à décrire à l'utilisateur.
pourquoi l'action a besoin d'accéder à son identité (par exemple, "Pour enregistrer vos préférences").
Cliquez sur Enregistrer.
Sous Conditions, cliquez sur Si l'utilisateur réussit à associer le compte.
Configurez la manière dont le flux doit se dérouler si l'utilisateur accepte d'associer son compte.
Par exemple, vous pouvez appeler le webhook pour traiter toute logique métier personnalisée requise.
et revenir à la scène d'origine.
Cliquez sur Enregistrer.
Sous Conditions, cliquez sur Si l'utilisateur désactive ou ignore l'association de compte.
Configurez la manière dont le flux doit se dérouler si l'utilisateur n'accepte pas d'associer son
Google Cloud. Par exemple, envoyer un accusé de réception et rediriger l'utilisateur vers les scènes
qui ne nécessitent pas d'association de comptes.
Cliquez sur Enregistrer.
Sous Conditions, cliquez sur En cas d'erreur système ou réseau.
Configurez la manière dont le flux doit se dérouler si le flux d'association de compte ne peut pas être
terminée en raison d'erreurs système ou réseau.
Par exemple, envoyer un accusé de réception et rediriger l'utilisateur vers les scènes
qui ne nécessitent pas d'association de comptes.
Cliquez sur Enregistrer.
Accéder aux informations de profil dans votre backend
Une fois que l'utilisateur a autorisé votre action à accéder à son profil Google, vous recevez
un jeton d'ID Google contenant les informations du profil Google de l'utilisateur dans chaque
demande à votre action.
Pour accéder aux informations de profil de l'utilisateur, vous devez d'abord valider et décoder le jeton
en procédant comme suit:
Utilisez une bibliothèque de décodage JWT pour votre langage afin de décoder
et utiliser les clés publiques de Google (disponibles dans JWK
ou PEM) pour vérifier la signature du jeton.
Vérifiez que l'émetteur du jeton (champ iss dans le jeton décodé) est https://accounts.google.com
et que l'audience (champ aud dans le jeton décodé) est la valeur de
ID client attribué par Google à vos actions, attribué à votre projet
dans la console Actions.
Voici un exemple de jeton décodé:
{"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"}
Si vous utilisez la bibliothèque de traitement Actions on Google pour Node.js, procédez comme suit :
il se charge de valider et de décoder le jeton pour vous, et vous donne accès
le contenu du profil, comme indiqué dans les extraits de code suivants.
Pour traiter la demande d'accès aux données, vérifiez simplement que l'utilisateur déclaré par l'ID Google
ce jeton est déjà présent dans votre base de données. L'extrait de code suivant montre
Voici un exemple de la procédure à suivre pour vérifier si les commandes d'un utilisateur existent déjà dans une base de données Firestore:
...app.handle('Place_Order',asyncconv=>{constorder=conv.session.params.order;constuserDoc=dbs.user.doc(conv.user.params.uid);constorderHistory=userDoc.collection("orderHistory");if(orderHistory){//Orderhistoryexists,sotheuseralreadyplacedanorder.//Updatecounterforordertype.awaitorderHistory.doc(order).update({count:admin.firestore.FieldValue.increment(1)});}else{//FirstordertheyplaceawaitorderHistory.doc(order).set({option:order,count:1});options.forEach(opt=>{if(opt!=order){orderHistory.doc(opt).set({option:opt,count:0});}});}returnconv.add(`Your ${order} has been placed. `+'Thanks for using Boba Bonanza, see you soon!');});
Sauf indication contraire, le contenu de cette page est régi par une licence Creative Commons Attribution 4.0, et les échantillons de code sont régis par une licence Apache 2.0. Pour en savoir plus, consultez les Règles du site Google Developers. Java est une marque déposée d'Oracle et/ou de ses sociétés affiliées.
Dernière mise à jour le 2025/07/25 (UTC).
[[["Facile à comprendre","easyToUnderstand","thumb-up"],["J'ai pu résoudre mon problème","solvedMyProblem","thumb-up"],["Autre","otherUp","thumb-up"]],[["Il n'y a pas l'information dont j'ai besoin","missingTheInformationINeed","thumb-down"],["Trop compliqué/Trop d'étapes","tooComplicatedTooManySteps","thumb-down"],["Obsolète","outOfDate","thumb-down"],["Problème de traduction","translationIssue","thumb-down"],["Mauvais exemple/Erreur de code","samplesCodeIssue","thumb-down"],["Autre","otherDown","thumb-down"]],["Dernière mise à jour le 2025/07/25 (UTC)."],[[["\u003cp\u003eGoogle Sign-In for Assistant simplifies account linking and creation for both users and developers, enabling access to user profiles for personalized experiences.\u003c/p\u003e\n"],["\u003cp\u003eDevelopers can leverage Google Sign-In to link or create user accounts across platforms, facilitating seamless user journeys and communication.\u003c/p\u003e\n"],["\u003cp\u003eImplementing Google Sign-In involves configuring the project in Actions Console, designing the authentication flow in Actions Builder, and handling data access requests securely in your backend.\u003c/p\u003e\n"],["\u003cp\u003eUser profile information, such as name, email, and profile picture, can be accessed after user authorization and token validation, allowing for customized interactions within the Action.\u003c/p\u003e\n"],["\u003cp\u003eActions using account linking for financial information are subject to additional policies and review, requiring compliance with financial services policies before submission.\u003c/p\u003e\n"]]],[],null,["# Account linking with Google Sign-In\n\nGoogle Sign-In for the Assistant provides the simplest and easiest user experience\nto users and developers both for account linking and account creation. Your Action\ncan request access to your user's Google profile during a conversation,\nincluding the user's name, email address, and profile picture.\n\nThe profile information can be used to create a personalized user experience\nin your Action. If you have apps on other platforms and they use Google Sign-In,\nyou can also find and link to an existing user's account, create a new account,\nand establish a direct channel of communication to the user.\n\nTo perform account linking with Google Sign-In, you ask the user to give consent\nto access their Google profile. You then use the information in their profile, for\nexample their email address, to identify the user in your system.\n\nImplement Google Sign-In account linking\n----------------------------------------\n\nFollow the steps in the following sections to add Google Sign-In account linking to your\nAction.\n| **Note:** If you're implementing account linking to handle financial information, note that additional policies may apply to your Action. It can take us up to six weeks to review an Action with account linking for financial information, so factor that time in when planning your release schedule. To ease the review process, make sure you comply with the [financial services policies](/assistant/console/policies/general-policies#financial_services) before submitting your Action for review.\n\n### Configure the project\n\nTo configure your project to use Google Sign-In account linking, follow these steps:\n\n1. Open the Actions Console and select a project.\n2. Click the **Develop** tab and choose **Account linking**.\n3. Enable the switch next to **Account linking**.\n4. In the **Account creation** section, select **Yes**.\n5. In **Linking type** , select **Google Sign In**.\n\n6. Open **Client Information** and take note of the value of **Client ID issued by Google to your Actions**.\n\n7. Click **Save**.\n\n### Design the voice user interface for the authentication flow\n\n| **Warning:** Don't give users a required account linking prompt at the start of the conversation with your Action. Instead, give unauthenticated users a guest flow to show how your Action works, and then only ask for account linking if it's necessary to proceed. If users are leaving the Action consistently because of account linking issues, Google will not actively promote the Action, which may decrease the Action's user traffic.\n|\n|\n| **Note:** You must use [Actions Builder](/assistant/conversational/build#actions_builder) to build an Action that implements account linking.\n\n#### Check if the user is verified and start the account linking flow\n\n1. Open your Actions Builder project in the [Actions Console](https://console.actions.google.com).\n2. Create a new scene to start account linking in your Action:\n 1. Click **Scenes**.\n 2. Click the **add** (+) icon to add a new scene.\n3. In the newly created scene, click the add *add* icon for **Conditions**.\n4. Add a condition that checks if the user associated with the conversation is a a verified user. If the check fails, your Action can't perform account linking during the conversation, and should fall back to providing access to functionality that doesn't require account linking.\n 1. In the `Enter new expression` field under **Condition** , enter the following logic: `user.verificationStatus != \"VERIFIED\"`\n 2. Under **Transition**, select a scene that doesn't require account linking or a scene that is the entry point to guest-only functionality.\n\n1. Click the add *add* icon for **Conditions**.\n2. Add a condition to trigger an account linking flow if the user doesn't have an associated identity.\n 1. In the `Enter new expression` field under **Condition** , enter the following logic:: `user.verificationStatus == \"VERIFIED\"`\n 2. Under **Transition** , select the **Account Linking** system scene.\n 3. Click **Save**.\n\nAfter saving, a new account linking system scene called `\u003cSceneName\u003e_AccountLinking`\nis added to your project.\n\n#### Customize the account linking scene\n\n1. Under **Scenes**, select the account linking system scene.\n2. Click **Send prompt** and add a short sentence to describe to the user why the Action needs to access their identity (for example \"To save your preferences\").\n3. Click **Save**.\n\n1. Under **Conditions** , click **If user successfully completes account linking**.\n2. Configure how the flow should proceed if the user agrees to link their account. For example, call the webhook to process any custom business logic required and transition back to the originating scene.\n3. Click **Save**.\n\n1. Under **Conditions** , click **If user cancels or dismisses account linking**.\n2. Configure how the flow should proceed if the user doesn't agree to link their account. For example, send an acknowledging message and redirect to scenes that provide functionality that doesn't require account linking.\n3. Click **Save**.\n\n1. Under **Conditions** , click **If system or network error occurs**.\n2. Configure how the flow should proceed if the account linking flow can't be completed because of system or network errors. For example, send an acknowledging message and redirect to scenes that provide functionality that doesn't require account linking.\n3. Click **Save**.\n\n### Access profile information in your backend\n\nAfter the user authorizes your action to access their Google profile, you will receive\na Google ID token that contains the user's Google profile information in every subsequent\nrequest to your action.\n\nTo access the user's profile information, you need to first validate and decode the token\nby doing the following:\n\n1. Use a [JWT-decoding library](https://jwt.io/) for your language to decode the token, and use Google's public keys (available in [JWK](https://www.googleapis.com/oauth2/v3/certs) or [PEM](https://www.googleapis.com/oauth2/v1/certs) format) to verify the token's signature.\n2. Verify that the token's issuer (`iss` field in the decoded token) is `https://accounts.google.com` and that the audience (`aud` field in the decoded token) is the value of **Client ID issued by Google to your Actions**, which is assigned to your project in the Actions console.\n\nThe following is an example of a decoded token: \n\n```carbon\n{\n \"sub\": 1234567890, // The unique ID of the user's Google Account\n \"iss\": \"https://accounts.google.com\", // The token's issuer\n \"aud\": \"123-abc.apps.googleusercontent.com\", // Client ID assigned to your Actions project\n \"iat\": 233366400, // Unix timestamp of the token's creation time\n \"exp\": 233370000, // Unix timestamp of the token's expiration time\n \"name\": \"Jan Jansen\",\n \"given_name\": \"Jan\",\n \"family_name\": \"Jansen\",\n \"email\": \"jan@gmail.com\", // If present, the user's email address\n \"locale\": \"en_US\"\n}\n```\n\nIf you use the [Actions on Google Fulfillment library for Node.js](https://github.com/actions-on-google/assistant-conversation-nodejs),\nit takes care of validating and decoding the token for you, and gives you access to\nthe profile content, as shown in the following code snippets. \n\n```gdscript\n...\nconst app = conversation({\n // REPLACE THE PLACEHOLDER WITH THE CLIENT_ID OF YOUR ACTIONS PROJECT\n clientId: CLIENT_ID,\n});\n...\n// Invoked on successful completion of account linking flow, check if we need to\n// create a Firebase user.\napp.handle('linkAccount', async conv =\u003e {\n let payload = conv.headers.authorization;\n if (payload) {\n // Get UID for Firebase auth user using the email of the user\n const email = payload.email;\n if (!conv.user.params.uid && email) {\n try {\n conv.user.params.uid = (await auth.getUserByEmail(email)).uid;\n } catch (e) {\n if (e.code !== 'auth/user-not-found') {\n throw e;\n }\n // If the user is not found, create a new Firebase auth user\n // using the email obtained from Google Assistant\n conv.user.params.uid = (await auth.createUser({email})).uid;\n }\n }\n }\n});\n```\n\n### Handle data access requests\n\nTo handle data access request, just verify that the user asserted by the Google ID\ntoken is already present in your database. The following snippet of code shows\nan example of how to check if orders for a user already exist in a Firestore database: \n\n```perl\n...\napp.handle('Place_Order', async conv =\u003e {\n const order = conv.session.params.order;\n const userDoc = dbs.user.doc(conv.user.params.uid);\n const orderHistory = userDoc.collection(\"orderHistory\");\n if (orderHistory) {\n // Order history exists, so the user already placed an order.\n // Update counter for order type.\n await orderHistory.doc(order).update({ count: admin.firestore.FieldValue.increment(1)});\n } else {\n // First order they place\n await orderHistory.doc(order).set({ option: order, count: 1});\n options.forEach(opt =\u003e {\n if (opt != order) {\n orderHistory.doc(opt).set({ option: opt, count: 0});\n }\n });\n }\n return conv.add(`Your ${order} has been placed. ` +\n 'Thanks for using Boba Bonanza, see you soon!');\n});\n```\n\n\u003cbr /\u003e"]]