Démarrage rapide Work IQ A2A

Configuration requise

Enregistrer l’application dans Microsoft Entra

Inscrivez une application avec des autorisations pour accéder à Work IQ. Lorsque vous inscrivez l’application, vous obtenez deux valeurs : APP_ID et TENANT_ID. Utilisez ces valeurs avec l’exemple A2A pour tester la configuration de votre locataire.

Conseil

Vous créez un agent côté serveur (application web) ? Ce démarrage rapide utilise une inscription de client public (mobile/ordinateur de bureau) comme chemin d’accès le plus simple à un exemple fonctionnel. Si votre application est un service côté serveur qui appelle Work IQ pour le compte d’un utilisateur final (par exemple, un agent web qui connecte l’utilisateur et transmet ensuite son identité à Work IQ), utilisez une inscription client confidentielle avec un secret client ou un certificat. Échangez le jeton de l’utilisateur à l’aide du flux OBO (On-Behalf-Of). La surface API Work IQ et l’autorisation déléguée WorkIQAgent.Ask sont identiques dans les deux flux.

  1. Accédez au centre d’administration Microsoft Entra. Dans le volet de navigation gauche, sélectionnez ID Entra, puis sélectionnez Inscriptions d’applications.
  2. Sélectionnez Nouvelle inscription.
  3. Ajoutez un nom descriptif, définissez les types de comptes pris en charge sur Comptes dans ce répertoire organisationnel uniquement, puis sélectionnez Enregistrer.
  4. Copiez l’ID de l’application (client). Cette valeur correspond à votre APP_ID.
  5. Sélectionnez Authentification. Sélectionnez Ajouter une plateforme (ou Ajouter un URI de redirection). Dans la boîte de dialogue, sélectionnez Applications mobiles et de bureau.
    • Sélectionnez l’URI suggéré : https://login.microsoftonline.com/common/oauth2/nativeclient.
    • Sous URI de redirection personnalisés, ajoutez les deux URI suivants un par un (chacun sur sa propre ligne) :
      • http://localhost
      • ms-appx-web://microsoft.aad.brokerplugin/<APP_ID> (où <APP_ID> est votre APP_ID)
    • Sous Paramètres avancés, définissez Autoriser les flux clients publics sur Oui.
    • Sélectionnez Enregistrer.
  6. Sélectionnez Autorisations d’API, Ajouter une autorisation, puis les API utilisées par mon organisation. Work IQRecherchez , puis sélectionnez Autorisations déléguées. Sélectionnez WorkIQAgent.Ask, puis sélectionnez Ajouter des autorisations.
  7. Sélectionnez Accorder le consentement de l’administrateur pour [votre client]. Passez en revue la boîte de dialogue de confirmation, puis sélectionnez Oui.
  8. Copiez votre ID d’annuaire (locataire) à partir de la page de présentation de Microsoft Entra ID.

L’autorisation WorkIQAgent.Ask permet à l’application, au nom de l’utilisateur connecté, d’interroger son intelligence de travail Microsoft 365 (courrier, fichiers, réunions, conversations) via Work IQ.

Démarrage rapide : protocole A2A

Le protocole A2A (Agent-to-Agent) est une norme ouverte pour la communication entre les agents. Work IQ prend en charge A2A v1.0 (ce démarrage rapide) et v0.3. L’en-tête A2A-Version de demande contrôle la répartition des versions.

  • A2A-Version: 1.0 - V1.0 Wire Format (ce guide de démarrage rapide)
  • A2A-Version: 0.3 (ou en-tête omis) - format de fil v0.3 (conservé comme valeur par défaut sans en-tête pour une compatibilité descendante avec les clients v0.3 existants)

Obtenir l’exemple de code

Clonez l’exemple de référentiel à l’aide de la commande suivante.

git clone https://github.com/microsoft/work-iq-samples.git
cd work-iq-samples

Exécuter l’exemple (avec le SDK A2A)

L’exemple dotnet/a2a utilise le Kit de développement logiciel (SDK) .NET A2A.

cd dotnet/a2a
dotnet run -- --token WAM --appid <APP_ID> --tenant <TENANT_ID>

Exécution de l’exemple (HTTP brut, pas de SDK)

L’exemple dotnet/a2a-raw montre le protocole filaire sans abstraction SDK. L’utilisation de cet exemple est utile pour le portage vers non-.NET langues.

cd dotnet/a2a-raw
dotnet run -- --token WAM --appid <APP_ID> --tenant <TENANT_ID>

Action exécutée

Lorsque vous exécutez l’exemple, une invite de connexion s’affiche (boîte de dialogue WAM sous Windows, navigateur système sous macOS/Linux). Après vous être connecté, tapez un message à l’invite You > , puis appuyez sur Entrée. La réponse de l’agent apparaît ci-dessous. Type quit pour quitter.

── READY — Work IQ Gateway — Sync — https://workiq.svc.cloud.microsoft/a2a/ ──
Type a message. 'quit' to exit.

You > Summarize my recent emails from Alice.
Agent > You've exchanged 8 emails with Alice this week. Key threads:
  - ...
  (2145 ms)

You > quit

Mode de fonctionnement

Work IQ accepte A2A v1.0 sur JSON-RPC à https://workiq.svc.cloud.microsoft/a2a/. (A2A v1.0 définit également une liaison REST à /v1/message:send; Work IQ pourrait exposer cette liaison REST dans une prochaine mise à jour.)

Passerelle Work IQ

  • Point de terminaison : https://workiq.svc.cloud.microsoft/a2a/
  • Public de jeton : api://workiq.svc.cloud.microsoft
  • Portée :WorkIQAgent.Ask

Synchrone SendMessage

POST https://workiq.svc.cloud.microsoft/a2a/
Authorization: Bearer <token>
Content-Type: application/json
A2A-Version: 1.0

{
  "jsonrpc": "2.0",
  "id": "<request-guid>",
  "method": "SendMessage",
  "params": {
    "message": {
      "role": "ROLE_USER",
      "messageId": "<message-guid>",
      "parts": [
        {
          "text": "What meetings do I have today?"
        }
      ],
      "metadata": {
        "Location": {
          "timeZoneOffset": -480,
          "timeZone": "America/Los_Angeles"
        }
      }
    }
  }
}

L’en-tête A2A-Version: 1.0 de requête active les noms de méthode v1.0 (SendMessage) sur la passerelle. Sans elle, le serveur prend par défaut la version v0.3 et renvoie un JSON-RPC -32601 "Method not found" pour les noms de méthode v1.0.

La réponse est une enveloppe JSON-RPC contenant result.task la tâche de l’agent et une contextId pour multitour :

{
  "jsonrpc": "2.0",
  "id": "<request-guid>",
  "result": {
    "task": {
      "id": "<task-id>",
      "contextId": "ctx-1",
      "status": {
        "state": "TASK_STATE_COMPLETED"
      },
      "artifacts": [
        {
          "artifactId": "<artifact-id>",
          "name": "Answer",
          "parts": [
            {
              "text": "Today you have: 9 AM standup, 11 AM review with Dana, 2 PM customer call."
            }
          ]
        }
      ]
    }
  }
}

Work IQ exige que les Location métadonnées groundent les requêtes temporelles (« aujourd’hui » ou « cette semaine ») à l’heure locale de l’utilisateur.

Conversations à plusieurs tours

Pour conserver l’état de la conversation, transmettez la contextId réponse précédente dans le message suivant.

{
  "jsonrpc": "2.0",
  "id": "<request-guid-2>",
  "method": "SendMessage",
  "params": {
    "message": {
      "role": "ROLE_USER",
      "messageId": "<message-guid-2>",
      "contextId": "ctx-1",
      "parts": [
        {
          "text": "Tell me more about the 2 PM customer call."
        }
      ]
    }
  }
}

Détails du protocole clé (A2A v1.0)

  • Enveloppe JSON-RPC requise : chaque demande doit inclure jsonrpc, id, method, params.
  • POST vers l’URL de base : la méthode (SendMessage) se trouve à l’intérieur du corps JSON-RPC, pas dans le chemin d’URL.
  • Parties de présence de champ : les parties sont des objets plats avec l’un des , url, raw, ou data ensemble ; pas kind de textdiscriminateur.
  • SCREAMING_SNAKE_CASE énumérations : les rôles utilisent ROLE_USER / ROLE_AGENT; les états utilisent / TASK_STATE_WORKING / TASK_STATE_COMPLETEDTASK_STATE_FAILED / etc.
  • Wrapper de résultats : les réponses aux tâches apparaissent sous result.task.
  • Distribution de version :A2A-Version: 1.0 sélectionne v1.0 ; Omettre l’en-tête (ou l’envoi A2A-Version: 0.3) sélectionne v0.3, la valeur par défaut sans en-tête.

Découverte d’agent

Pour appeler un agent spécifique, transmettez son ID d’agent via --agent-id. Vous pouvez trouver l’ID d’un agent de deux manières.

L’interface CLI WorkIQ comprend une commande expérimentale list-agents qui répertorie les agents disponibles pour votre utilisateur connecté.

workiq config set experimental=true
workiq list-agents

Chaque ligne affiche le nom d’affichage, le fournisseur et l’ID d’agent de l’agent (la deuxième ligne de chaque entrée). Utilisez cet ID avec lors --agent-id de l’exécution de l’exemple.

Solution alternative : copiez à partir de l’URL de Microsoft 365 Copilot

  1. Accédez au site web Microsoft 365 Copilot Chat.
  2. Sélectionnez votre agent dans le volet de navigation de gauche.
  3. L’ID d’agent s’affiche dans la barre d’adresses du navigateur après /chat/agent/:
https://m365.cloud.microsoft/chat/agent/P_c0fd1ab0-cbf3-7eb9-1a7d-2d823549ef31.8ad61c39-5b6e-447c-b26a-a64eee436502
                                       └──────────────────────────── agent ID ─────────────────────────────────────┘

Le format est <LETTER>_<opaqueValue1>.<opaqueValue2>.

Transmettre l’ID d’agent à l’exemple

Importante

Traitez l’ID d’agent entier comme une chaîne opaque. Ne déconstruisez pas et n’analysez pas ses composants. Passez-le tel quel à l’API.

Transmettre l’ID d’agent en tant qu’argument à l’exemple

dotnet run -- --token WAM --agent-id <AGENT_ID> --appid <APP_ID> --tenant <TENANT_ID>

▶ Ouvrez une invite d’inventaire spécifique à l’agent dans la démonstration interactive.

Remarque

Certains agents Microsoft 365 (notamment les agents Word, Excel et PowerPoint dans l’interface utilisateur de Copilot Chat) sont conçus pour s’exécuter dans le contexte de ces produits Office et ne produisent pas de réponses utiles lorsqu’ils sont invoqués sans affichage via A2A.

Fonctionnalités A2A

Fonctionnalité Statut
SendMessage (synchronisation) ✅ Disponible
Multi-tours (contextId) ✅ Disponible
Parties de texte ✅ Disponible
Références ✅ Disponible (la forme Livraison est en cours de modernisation ; voir les notes de publication)

Authentification

Méthode Plateforme Utilisation
WAM (Gestionnaire de comptes Windows) Windows --token WAM --appid <APP_ID> --tenant <TENANT_ID>
Navigateur interactif macOS, Linux Même commande : Microsoft Identity Client revient à la connexion à un navigateur système.
JWT pré-obtenu N’importe lequel --token <JWT>(le jeton doit être émis pour votre application inscrite, et non pour un client arbitraire comme l’interface de ligne de commande Azure)

Résolution des problèmes

Symptôme Corriger
401 Unauthorized Le jeton aud ne correspond api://workiq.svc.cloud.microsoftpas . Vérifiez la revendication d’audience.
403 Forbidden (aucune erreur d’étendue) L’utilisateur n’est pas membre d’un plan de facturation basée sur l’utilisation. Attribuez et attendez 15 à 30 min.
403 Forbidden avec le Required scopes = [...] Le consentement de l’Administration n’a WorkIQAgent.Ask pas été accordé. Réexécutez le consentement de l’administrateur (installation de l’administrateur, étape 6 / étape 3 de l’interface de ligne de commande Azure).
WAM IncorrectConfiguration (3399614466) L’inscription à l’application manque l’URI de redirection du courtier. Rajoutez ms-appx-web://microsoft.aad.brokerplugin/<APP_ID> et réessayez.
WAM échoue toujours après la définition de l’URI de redirection Application monolocataire + /common incompatibilité d’autorité. Passez --tenant <TENANT_ID> que Microsoft Identity Client utilise l’autorité spécifique au locataire.
AADSTS65001: consent required Administration consentement n’a pas été accordé. Exécutez az ad app permission admin-consent --id <APP_ID>.
Vide 200 / pas de texte d’agent Si la licence Copilot de l’utilisateur a été attribuée récemment, la génération de l’index peut prendre de 15 à 30 minutes. Si vous avez appelé un agent Word/Excel/PowerPoint, ces agents s’exécutent dans le produit Office et ne produisent pas de réponses A2A découplées.