Agents × Gemini Enterprise

Ces valeurs remplissent toutes les commandes de la page. Elles restent dans votre navigateur. Rien n'est envoyé nulle part.

Parcours complet · projet des agents → app Gemini Enterprise

Des agents à vous, dans Gemini Enterprise

Déployer un agent (Cloud Run en A2A, ou Agent Runtime) dans son propre projet, le brancher sur l'app Gemini Enterprise d'un autre projet, puis lui faire utiliser les données de l'utilisateur (Gmail, Agenda, Drive, Sheets…) avec son accord. Un ou plusieurs fournisseurs. Tout ce qui peut l'être est scripté.

Sans Docker : Cloud BuildScript, Terraform ou console OAuth : bouton « Autoriser »Model ArmorAucune suppression possible
0 · Vue d'ensemble

Qui parle à qui

Gemini Enterprise est l'assistant d'entreprise de Google : un chat, des connecteurs (Drive, Gmail…) et des agents. Nos agents vivent dans un projet à part. L'app les appelle, avec son compte de service, et, s'il le faut, avec le jeton de l'utilisateur.

Utilisateur

Le chat

Ouvre un agent, pose une question
1re fois si OAuth : « Autoriser »
Rôle Agent User sur l'agent
question
Projet de l'app

{{PROJET_APP}}

App {{APP_ID}} ({{GE_LOCATION}})
Compte de l'app :
{{GE_SA}}
Autorisations OAuth (client + portées)
appel A2A
ou Agent Runtime
Projet des agents

{{PROJET_AGENTS}}

Cloud Run : {{K}}-a2a-shell (A2A)
Agent Runtime : {{K}}-shell
Model Armor, Gemini, journaux
Client OAuth + API Gmail, Drive… (recommandé)
Identité 1

L'utilisateur

Son compte Acme. Il voit un agent seulement s'il a le rôle Agent User. Avec OAuth, l'agent agit avec ses droits à lui.

Identité 2

Le compte de l'app

{{GE_SA}} appelle l'agent. Il lui faut ① run.invoker sur chaque service Cloud Run, ② discoveryengine.serviceAgent sur le projet des agents (Agent Runtime).

Identité 3

Le compte de l'agent

{{K}}-a2a-shell-sa : appelle Gemini, écrit ses journaux, passe par Model Armor. Rien d'autre.

Deux façons d'héberger un agent

A2A sur Cloud RunAgent Runtime (Vertex AI)
Ce qu'on donne à l'appLa carte de l'agent (JSON)Le chemin projects/…/reasoningEngines/…
Droit de l'app① roles/run.invoker sur le service② roles/discoveryengine.serviceAgent sur le projet
OAuthUne autorisation par agentPlusieurs (une par fournisseur)
Mise à jourNouvelle révision, même adresseNouvelle ressource : nouveau chemin à rajouter dans l'app
Quand le choisirPar défaut ; protocole ouvert, réutilisablePlusieurs fournisseurs OAuth ; sessions gérées par Google

Le catalogue des agents

Un dossier par agent dans agents/trio/, décrit dans catalogue.json (nom, description, questions d'exemple, et le bloc oauth). Scripts et Terraform lisent ce fichier.

À savoir

L'API de Gemini Enterprise (streamAssist) ne sait pas appeler un agent A2A ou ADK ajouté à l'app (documentation Google). Un agent personnalisé se teste dans le chat, ou en appelant l'agent directement comme le fait l'app (onglet Dépannage).

1 · Projet des agents

Déployer un agent

Tout se fait depuis un terminal Mac ou Linux. Il n'y a pas de Docker : l'image est construite par Cloud Build, dans Google Cloud. L'app n'a pas besoin d'exister à cette étape.

Le poste

  • gcloud connecté : gcloud auth login et gcloud auth application-default login
  • Python 3.12 à 3.14
  • Mac sans droits d'installation : pip install --no-deps -r agents/trio/requirements-poste.txt

Vos droits

Vérification en lecture seule, groupes compris :

./scripts/verifier_droits.sh

La configuration

Un fichier config/12-1-agents-dans-projet-exp.env. Les champs de l'app peuvent rester vides tant qu'on ne publie pas.

Charger la configuration

source scripts/config.sh config/12-1-agents-dans-projet-exp.env

Affiche un résumé : projets, agents, et « (pas encore : agents seuls) » si l'app est vide.

Préparer (une fois par projet)

./scripts/deployer_shell.sh preparer   # filtres Model Armor, dépôt d'images, compte de construction

Déployer l'agent

./scripts/deployer_shell.sh cloudrun {{K}}   # A2A : image (Cloud Build), compte, service privé
./scripts/deployer_shell.sh runtime {{K}}    # et/ou Agent Runtime
== {{K}} (Cloud Run)   adresse {{URL}}
-- 1/3 l'image, construite par Cloud Build (environ 1 min 20 s)   … SUCCESS
-- 2/3 son compte de service et ses 3 rôles
-- 3/3 le service Cloud Run (privé)
Service URL: {{URL}}

Tester (3 à 5 minutes après)

./scripts/deployer_shell.sh tester {{K}}

« OK : les agents répondent en A2A v0.3, avec mémoire de conversation ». Pour un agent OAuth, la réponse « cliquez sur Autoriser » est normale : le test n'envoie pas de jeton utilisateur.

La fiche pour Gemini Enterprise

./scripts/deployer_shell.sh carte {{K}}

Écrit carte-{{K}}.json et affiche tout ce qu'il faut coller dans l'app : nom, description, carte sur une ligne, chemin Agent Runtime, étape Authentification, questions proposées, droits.

La carte vient de carte_a2a.py, au format attendu par Google. Pas celle de /.well-known/agent-card.json : elle a des champs en plus, et Gemini Enterprise la refuse.

Relancer est sans danger : ce qui existe est gardé. cloudrun reconstruit l'image : nouvelle révision, même adresse. Supprimer : python scripts/nettoyer.py --agent {{K}} --supprimer (affiche d'abord l'inventaire).

Choisir les agents dans la configuration

AGENTS="{{K}}"                  # ce qui doit EXISTER (vide = tout le catalogue)
AGENTS_OAUTH="{{K}}={{AUTH}}"   # seulement pour un agent OAuth

Appliquer

source scripts/config.sh config/12-1-agents-dans-projet-exp.env
cd 01-bis-cloud-run-a2a/terraform     # Agent Runtime : 02-bis-agent-runtime/terraform
terraform init && terraform plan     # 1 agent sans app : 22 to add ; +7 par agent
terraform apply

for_each sur le catalogue : une image par agent, et ajouter un agent n'en touche aucun autre. Les agents OAuth ont aussi leurs API Google activées.

Lire ce qu'il faut pour l'app

terraform output cards    # la carte de chaque agent A2A
terraform output oauth    # autorisations attendues + portées
terraform output agents   # (02-bis) le chemin de chaque agent Agent Runtime

Avec PUBLIER=oui et les valeurs de l'app, Terraform ajoute aussi les agents à l'app, autorisation comprise.

L'image

Cloud Build se lance depuis le terminal (aucun bouton console ne prend notre dossier) : gcloud builds submit … --config=01-bis-cloud-run-a2a/cloudbuild.yaml. Le guide 12-1-3 donne la commande complète.

Le service Cloud Run

🔎 Cloud Run → Déployer un conteneur → l'image → nom {{K}}-a2a-shell → région {{REGION}} → Exiger l'authentification → compte de service de l'agent → variables (fichier env-{{K}}.yaml).

Vérifier

L'URL du service doit être exactement {{URL}} : elle est écrite dans la carte.

Détail clic par clic : docs/12-1-3-deployer-agents-console.md.

2 · Projet des agents + projet de l'app

Brancher l'agent sur l'app

Trois choses : les droits du compte de l'app (dans le projet des agents), l'ajout de l'agent (dans l'app), l'accès des utilisateurs. Attendez 2 à 3 minutes après les droits.

Droit ① · agents A2A

Cloud Run Invoker sur le service

🔎 Cloud Run → {{K}}-a2a-shell → Sécurité → Ajouter un compte principal → {{GE_SA}} → rôle Cloud Run Invoker (Demandeur Cloud Run) → Enregistrer.

gcloud run services add-iam-policy-binding {{K}}-a2a-shell \
  --region={{REGION}} --project={{PROJET_AGENTS}} \
  --role=roles/run.invoker --member=serviceAccount:{{GE_SA}}
Droit ② · agents Agent Runtime

Discovery Engine Service Agent sur le projet

🔎 IAM → Accorder l'accès → {{GE_SA}} → rôle Discovery Engine Service Agent. Une fois pour tous les agents.

gcloud projects add-iam-policy-binding {{PROJET_AGENTS}} --condition=None \
  --role=roles/discoveryengine.serviceAgent --member=serviceAccount:{{GE_SA}}

Voir les droits (lecture seule) : IAM → cocher « Include Google-provided role grants » → filtre gcp-sa-discoveryengine. Ou ./scripts/connecter_app.sh verifier. Les deux droits en une commande, avec confirmation : ./scripts/connecter_app.sh droits {{K}}.

La carte, sur une ligne

./scripts/deployer_shell.sh carte {{K}}     # ou : cat carte-{{K}}.json

Dans l'app

🔎 Gemini Enterprise → l'app → Agents → + Add agent → Custom agent via A2A → collez toute la ligne, du premier { au dernier } → Preview agent details → Next.

Authentication

Agent sans OAuth : Skip & Finish. Agent OAuth : ne pas cliquer Skip, voir l'onglet 3.

Le nom

L'agent → Edit → {{NOM}} (A2A). Ou en une commande, avec les questions proposées : onglet 5.

Le chemin de l'agent

./scripts/deployer_shell.sh carte {{K}}     # « [Agent Runtime] projects/{{NUM_AGENTS}}/locations/{{REGION}}/reasoningEngines/… »

Dans l'app

+ Add agent → Custom agent via Agent Runtime → Authorizations : rien (sans OAuth) → Next → Agent name {{NOM}}, description du catalogue, Agent Runtime resource path → Create.

Nouvelle version ?

Agent Runtime crée une nouvelle ressource. Retirez l'ancienne entrée de l'app et ajoutez le nouveau chemin.

L'accès des utilisateurs

L'agent → User permissions → Add → un groupe (recommandé) ou une adresse → rôle Agent User → Save. Sans ce rôle, l'agent n'apparaît pas dans le chat.

Le test

Overview → lien de l'app web → Agents → {{NOM}} → « {{EX}} ». 20 à 40 s la 1re fois (démarrage).

Ce qu'on envoie aux équipes qui ont leurs propres agents

Leur agent est dans leur projet. Elles donnent le droit, puis nous envoient la carte ou le chemin :

Pour brancher votre agent sur l'app Gemini Enterprise ({{PROJET_APP}}), merci de :
1. donner au compte {{GE_SA}}
   - roles/run.invoker sur votre service Cloud Run (agent A2A), ou
   - roles/discoveryengine.serviceAgent sur votre projet (agent Agent Runtime) ;
2. nous envoyer la carte A2A (JSON, une ligne) ou le chemin projects/…/reasoningEngines/… ;
3. si l'agent agit avec le compte de l'utilisateur (OAuth) : l'ID client, et les portées voulues (le secret par un canal sûr).
Région de l'agent : europe-* (app en {{GE_LOCATION}}).
3 · Le compte de l'utilisateur

Un agent qui agit avec l'accord de l'utilisateur

Exemples : Rapport e-mails (courriels, Gmail en lecture) et Espace de travail (workspace : Gmail, Agenda, Drive en lecture, Google Sheets en lecture et modification, sans suppression). L'utilisateur clique une fois sur « Autoriser ». Ensuite, l'agent reçoit son jeton à chaque question.

Le flux, étape par étape

Tout est scripté, sauf un geste

Google ne publie pas d'API pour créer un client OAuth : 2 minutes dans la console, et le script affiche le lien. Tout le reste passe par les scripts et Terraform : API Google, déploiement, fiche, autorisation, ajout, personnalisation.

Projet des agentsScript

Activer les API de l'agent, voir ses portées

source scripts/config.sh config/12-1-agents-dans-projet-exp.env
./scripts/deployer_shell.sh oauth {{K}}
== courriels
▶ gcloud services enable gmail.googleapis.com --project={{PROJET_AGENTS}}
  portées (A2A)           : https://www.googleapis.com/auth/gmail.readonly
  portées (Agent Runtime) : … + https://www.googleapis.com/auth/cloud-platform
Client OAuth (une fois, console, 2 min) : https://console.cloud.google.com/auth/clients?project={{PROJET_AGENTS}}

Les API et les portées viennent du bloc "oauth" de l'agent dans catalogue.json.

Projet des agentsConsole · 2 min

Le client OAuth

  1. 🔎 Google Auth Platform → si besoin Commencer : nom de l'application, e-mail, audience Interne.
  2. Clients → + Créer un client → Application Web → nom ge-{{K}}.
  3. URI de redirection autorisés, ces deux-là exactement :
https://vertexaisearch.cloud.google.com/oauth-redirect
https://vertexaisearch.cloud.google.com/static/oauth/oauth.html

→ Créer → notez l'ID client (à mettre dans « Vos valeurs ») et le secret. Ne les mettez jamais dans le dépôt.

Projet des agentsScript

Déployer l'agent avec son autorisation

AGENTS_OAUTH="{{K}}={{AUTH}}" ./scripts/deployer_shell.sh cloudrun {{K}}
./scripts/deployer_shell.sh tester {{K}}   # 3 à 5 min après : « cliquez sur Autoriser » = normal

L'agent reçoit AUTH_ID={{AUTH}}. En A2A, le nom de l'autorisation dans l'app peut être différent ; sur Agent Runtime, il doit être identique.

Projet des agentsScript

La fiche, avec l'URL d'autorisation complète

AGENTS_OAUTH="{{K}}={{AUTH}}" CLIENT_ID={{CLIENT_ID}} ./scripts/deployer_shell.sh carte {{K}}
  3. Authentication (ne PAS cliquer Skip) :
      Nom de l'autorisation  : {{AUTH}}
      Authorization URL      : {{AUTH_URL}}
      Token URL              : https://oauth2.googleapis.com/token
      Scopes                 : {{SCOPES}}
      PKCE / HTTP Basic      : décochés
Projet des agents

Le droit de l'app sur le service

Droit ① sur {{K}}-a2a-shell, comme pour tout agent A2A (onglet 2).

Projet de l'appConsoleou script

Ajouter l'agent avec l'autorisation

Console : Custom agent via A2A → la carte → Authentication : remplissez les champs de la fiche. Ne cliquez pas sur Skip.

ChampValeur
Nom de l'autorisation{{AUTH}} (lisible : il s'affiche à l'utilisateur)
Client ID / secretCeux du client OAuth
Authorization URLCelle de la fiche (avec access_type=offline et prompt=consent, obligatoires)
Token URLhttps://oauth2.googleapis.com/token
Scopes{{SCOPES}}
PKCE / HTTP BasicDécochés pour Google

Ou par script, avec les valeurs de l'app données devant les commandes (le fichier de config n'est pas touché) :

export PROJET_APP={{PROJET_APP}} NUM_APP={{NUM_APP}} GE_LOCATION={{GE_LOCATION}}
export GE_PROJECT={{PROJET_APP}} GE_APP={{APP_ID}}
./scripts/autorisation_oauth.sh create {{AUTH}} ~/Downloads/client_secret_XXX.json "{{SCOPES}}" "{{NOM}}"
AUTH_ID={{AUTH}} ./scripts/add_agent_to_ge.sh a2a carte-{{K}}.json "{{NOM}} (A2A)"   # + droit run.invoker
./scripts/personnaliser_agent.sh "{{NOM}} (A2A)" {{K}}                              # questions proposées, langue
Chat

Le test

Agent User pour vous → ouvrez l'agent → « {{EX}} » → encadré Authorize → fenêtre Google → Autoriser → la réponse, avec vos données. Ensuite, plus d'encadré : l'accès est gardé.

Ce que l'agent « Espace de travail » peut faire, et ne fera jamais

ServicePortéePeutNe peut pas
Gmailgmail.readonlyChercher, lire, résumerEnvoyer, supprimer (Google refuse)
Agendacalendar.events.readonlyVoir les réunionsCréer, modifier, supprimer
Drivedrive.readonlyChercher, lire Docs et SlidesModifier, supprimer un fichier
SheetsspreadsheetsLire, écrire, formules, ajouter des lignes, onglets, mise en forme, tri, graphiques, créer un classeurRien supprimer ni vider : bloqué par le code, avant tout appel à Google

Google n'a pas de portée « Sheets sans suppression ». Les outils n'acceptent donc qu'une liste de modifications sans perte, et sheets_ecrire refuse de vider une cellule remplie. Testé : à « Supprime l'onglet Archives », l'agent refuse et propose de le masquer.

4 · Google + Atlassian + …

Plusieurs fournisseurs d'identifiants

Une autorisation = un fournisseur. Une seule autorisation Google couvre Gmail, Agenda, Drive, Sheets et BigQuery : les portées s'additionnent dans un seul consentement. Un autre fournisseur, comme Atlassian, Airtable ou Databricks, demande une autre autorisation.

A2A (Cloud Run)

Une seule autorisation par agent

L'app envoie un jeton (agentAuthorization). Plusieurs fournisseurs ? Un agent par fournisseur : « Espace Google (A2A) » et « Jira (A2A) ». Le chat passe de l'un à l'autre.

Agent Runtime

Une liste d'autorisations

L'app envoie un jeton par autorisation (toolAuthorizations). Chaque outil prend le sien. L'utilisateur clique « Autoriser » une fois par fournisseur.

La règle de nommage (notre code)

AUTH_ID="acces-google,acces-atlassian" : les outils Google prennent le jeton de la 1re autorisation, les outils Atlassian celle dont l'ID contient « atlassian ». Donc : Google en premier, et le mot du fournisseur dans l'ID.

L'application OAuth Atlassian

  1. developer.atlassian.com/console/myapps → Create → OAuth 2.0 integration.
  2. Permissions : Jira API (read:jira-work, read:jira-user), Confluence API (search:confluence, read:confluence-content.summary).
  3. Authorization → Callback URL : https://vertexaisearch.cloud.google.com/static/oauth/oauth.html.
  4. Settings : Client ID et Secret. Distribution → Sharing : sinon, vous seul pouvez autoriser.

Déployer sur Agent Runtime avec les deux autorisations

AGENTS_OAUTH="workspace=acces-google,acces-atlassian" ./scripts/deployer_shell.sh runtime workspace
AGENTS_OAUTH="workspace=acces-google,acces-atlassian" CLIENT_ID={{CLIENT_ID}} ./scripts/deployer_shell.sh carte workspace

Dans l'app : deux autorisations

Custom agent via Agent Runtime → Authorizations → Add authorization deux fois. Les noms doivent être identiques à AGENTS_OAUTH.

acces-googleacces-atlassian
Authorization URLCelle de la fiche (Google, + cloud-platform, exigé sur Agent Runtime)https://auth.atlassian.com/authorize?audience=api.atlassian.com&client_id=…&scope=read%3Ajira-work%20read%3Ajira-user%20search%3Aconfluence%20read%3Aconfluence-content.summary%20offline_access&redirect_uri=…&response_type=code&prompt=consent
Token URLhttps://oauth2.googleapis.com/tokenhttps://auth.atlassian.com/oauth/token

Par script : AUTH_ID=acces-google,acces-atlassian ./scripts/add_agent_to_ge.sh adk <chemin> "Espace de travail". En A2A, le script refuse : « UNE seule autorisation par agent ».

Dans le chat

« Mes tickets Jira en cours ? » → un 2e bouton Authorize (Atlassian) → Accept → la liste. « Prépare ma semaine avec réunions, e-mails et tickets » → les trois sources dans une seule réponse.

Autres fournisseurs : les champs

FournisseurAuthorization URLToken URLPKCEHTTP Basic
Googleaccounts.google.com/o/oauth2/auth?…&access_type=offline&prompt=consentoauth2.googleapis.com/tokennonnon
Atlassianauth.atlassian.com/authorize?audience=api.atlassian.com&…auth.atlassian.com/oauth/tokennonnon
Airtableairtable.com/oauth2/v1/authorizeairtable.com/oauth2/v1/tokenouioui
Databricks<espace>/oidc/v1/authorize<espace>/oidc/v1/tokenouisi secret

Partout : déclarer chez le fournisseur les deux adresses de redirection de Gemini Enterprise. Atlassian, Airtable et Databricks n'ont pas encore été testés en vrai.

5 · Ce que voit l'utilisateur

Soigner l'expérience

L'encadré « The agent requires additional authorization for: … » et son bouton Authorize sont l'interface de Google : leur forme ne se change pas. En revanche, ce qui est écrit autour se règle.

ÉlémentComment
Couleur, forme, place du boutonnonInterface Google, la même pour tous
Langue (« Authorize » ou « Autoriser »)indirectGemini Enterprise en français ; pas de hl=en_US dans l'URL
Le nom après « authorization for: »ouiNom affiché de l'autorisation (displayName), ou un ID lisible (pas l'ID généré par la console)
Nom et icône de l'agentouidisplayName, icon
Questions proposées, texte de la zone de saisieouistarterPrompts, customPlaceholderText (pris dans le catalogue)
Fenêtre Google : nom de l'app, logo, e-mail d'assistanceouiGoogle Auth Platform → Branding, dans le projet du client OAuth
Message de l'agent si le jeton manque ou est refuséouiL'instruction de l'agent (déjà en français, avec la marche à suivre)

La fenêtre Google (sans risque)

Projet du client OAuth → 🔎 Google Auth Platform → Branding : nom (« Assistant Acme »), logo PNG 120×120, e-mail d'équipe. Puis Accès aux données → déclarer les portées : elles s'affichent en clair.

Le nom de l'autorisation

export PROJET_APP={{PROJET_APP}} NUM_APP={{NUM_APP}} GE_LOCATION={{GE_LOCATION}}
./scripts/autorisation_oauth.sh list                              # ID | nom affiché
./scripts/autorisation_oauth.sh renommer {{AUTH}} "{{NOM}}"

Si l'encadré montre encore l'ID après renommage, recréez l'autorisation avec un ID lisible, puis rattachez l'agent.

L'agent : nom, questions, texte de saisie, langue, icône

GE_PROJECT={{PROJET_APP}} GE_APP={{APP_ID}} GE_LOCATION={{GE_LOCATION}} \
  ./scripts/personnaliser_agent.sh "<nom actuel dans l'app>" {{K}} --icone icone.png
AVANT : {"displayName": "test gmail remote agent with auth"}
APRÈS : {"displayName": "{{NOM}} (A2A)", "starterPrompts": [{"text": "{{EX}}"}, …], "languageCode": "fr"}
Modifier cet agent dans l'app {{APP_ID}} (projet {{PROJET_APP}}) ? Tapez « oui » : oui
modifié : …  (retour arrière : ./scripts/personnaliser_agent.sh --annuler avant-<ID>.json)

Seuls ces champs changent (updateMask) : ni la carte, ni l'autorisation.

6 · Sécurité et gouvernance

Ce qui protège, à chaque étage

Services privés

Cloud Run sans accès public : seuls les comptes qui ont run.invoker appellent l'agent, c'est-à-dire l'app et vous.

Droits minimaux

Chaque agent a son compte, avec 3 rôles : Gemini, journaux, Model Armor. Le compte de l'app n'a que ① et ②.

Model Armor

Questions et réponses filtrées : injection de consignes, jailbreak, URL malveillantes, données sensibles, contenus dangereux.

Les droits de l'utilisateur

Avec OAuth, l'agent ne voit que ce que l'utilisateur voit. Le jeton n'est jamais enregistré (état temp:) ni écrit dans les journaux.

Portées minimales

Lecture seule partout, sauf Sheets. Aucun outil de suppression. Consentement Interne : comptes Acme uniquement.

Injection par le contenu

Un e-mail peut contenir « ignore tes règles ». L'agent traite ce contenu comme une donnée. Même trompé, il ne peut rien supprimer ni envoyer : les portées et le code l'en empêchent.

Le client OAuth : dans quel projet ?

Projet des agents (recommandé)Projet de l'app
API Gmail, Drive… à activerprojet des agents (script, Terraform)projet de prod de l'app
Quotas, suiviprojet des agentsprojet de l'app
Fenêtre Googlenom et logo de l'équipeun seul nom pour tous
Secret et rotationéquipe agentséquipe Gemini Enterprise
Changement en prod pour un agentaucun, à part l'ajout de l'agentAPI + client dans la prod

Les deux marchent. Projet des agents : un client par équipe ou par famille d'agents. Projet de l'app : seulement pour un client commun, géré par l'équipe Gemini Enterprise. Dans les deux cas, l'admin Google Workspace peut devoir approuver l'ID client (Sécurité → Contrôles des API).

En production

Lecture d'abord (connecter_app.sh verifier, autorisation_oauth.sh list, nettoyer.py sans --supprimer). Toute modification de l'app demande une confirmation (taper l'ID du projet, ou « oui »). personnaliser_agent.sh garde l'avant pour revenir en arrière.

7 · Si ça bloque

Dépannage

Ce que vous voyezCauseQue faire
La carte est refusée à l'ajoutCarte de /.well-known/agent-card.json, ou ligne coupée./scripts/deployer_shell.sh carte {{K}}, puis copier toute la ligne
KeyError: '{{K}}'catalogue.json pas à jour sur le posteRecopier tout le fichier
« The agent couldn't respond »Droits pas encore actifs, ou manquantsAttendre 3 min ; vérifier ① et ② avec {{GE_SA}}
part_metadata parameter is only supported in Gemini Developer API modeAncien commun.pyMettre à jour commun.py, puis deployer_shell.sh cloudrun {{K}}
Agent absent du chatPas de rôle Agent User, ou pas de licenceL'agent → User permissions → Agent User
redirect_uri_mismatchURI de redirection du client OAuthLes 2 URI, au caractère près
« Accès bloqué : votre administrateur… »L'admin Workspace bloque l'appFaire approuver l'ID client (Contrôles des API)
refus (403) … has not been used in projectAPI Google non activée./scripts/deployer_shell.sh oauth {{K}} (projet du client OAuth)
refus (403) … insufficient authentication scopesPortée absente de l'Authorization URLReprendre l'URL de la fiche ; retirer l'accès, puis réautoriser
refus (401)Jeton expiréRedemander ; sinon retirer l'accès sur myaccount.google.com/permissions
Pas de bouton AuthorizeAgent ajouté sans autorisation (Skip)Retirer l'agent de l'app, le rajouter avec l'étape Authentication
Agent Runtime : toujours « cliquez sur Autoriser »Nom de l'autorisation ≠ AGENTS_OAUTHMême ID des deux côtés
A2A : UNE seule autorisation par agentDeux fournisseurs en A2AAgent Runtime, ou un agent par fournisseur
« Pas de jeton Atlassian »ID sans le mot « atlassian », ou A2AOnglet 4 : règle de nommage
Réponse bloquée par Model ArmorDroits du compte de l'agent pas encore actifs, ou données sensiblesAttendre 2 à 5 min ; restreindre la demande
does not have storage.objects.get accessCompte de construction absent./scripts/deployer_shell.sh preparer
Service account … does not existCompte tout neuf, pas encore visibleLe script réessaie ; sinon relancer
Échec de pip install (watchdog) sur MacPas de paquet compilé pour Python 3.14pip install --no-deps -r agents/trio/requirements-poste.txt ; adk run au lieu de adk web

Appeler l'agent comme le fait l'app

curl -s -X POST "{{URL}}/" \
  -H "Authorization: Bearer $(gcloud auth print-identity-token)" \
  -H "Content-Type: application/json" -H "A2A-Version: 0.3" \
  -d '{"jsonrpc":"2.0","id":"1","method":"message/send","params":{"message":{"kind":"message","role":"user","messageId":"t1","parts":[{"kind":"text","text":"{{EX}}","metadata":{"source":"curl"}}]}}}' \
  | python3 -m json.tool

« completed » et une réponse : l'agent marche. Pour simuler l'app de bout en bout, avec son compte de service : ./scripts/simuler_gemini_enterprise.sh tout (guide 12-1-5).

Le parcours, à cocher

De zéro à un agent OAuth dans le chat

Chaque case reste cochée dans votre navigateur. L'ordre est celui qui a marché sur l'instance Acme.

Pour aller plus loin : les guides

  • docs/12-1-1-deployer-agents-shell.md : déployer par script, pas à pas
  • docs/12-1-2-deployer-agents-terraform.md · 12-1-3 (console)
  • docs/12-1-4-connecter-agents-app-gemini-enterprise.md : les droits, les messages aux équipes
  • docs/12-1-5-simuler-appel-gemini-enterprise.md : simuler l'app, sans l'app
  • docs/12-1-6-ajouter-agent-console-gemini-enterprise.md : la console de l'app, clic par clic
  • docs/12-1-7-agents-oauth-identite-outils.md : OAuth, identité
  • docs/12-1-8-agent-espace-de-travail-multi-oauth.md : Gmail, Agenda, Drive, Sheets ; plusieurs fournisseurs ; expérience
  • scripts/README.md : la carte de tous les scripts