agents
latest
false
Important :
La localisation du contenu nouvellement publié peut prendre 1 à 2 semaines avant d’être disponible.
UiPath logo, featuring letters U and I in white

Guide de l'utilisateur des Agents

Dernière mise à jour 18 mars 2026

Configuration de l'accès anonyme

Vue d'ensemble (Overview)

L’accès anonyme vous permet d’intégrer des Agents conversationnels pour les utilisateurs qui ne disposent pas de comptes UiPath.Cela est utile pour les applications orientées client, les portails publics ou tout scénario dans lequel vous souhaitez que les utilisateurs interagissent avec votre agent sans nécessiter d’authentification UiPath.

L’accès anonyme requiert :

  1. Une application externe confidentielle configurée dans UiPath Admin
  2. Un point de terminaison de jeton hébergé par votre Organization pour gérer l’authentification
  3. Une URL d’agent intégrée configurée avec les paramètres d’authentification
Avertissement :

Les Apps externes confidentielles entrant dans l'étendue de l’application permettent un accès anonyme sans authentification de l’utilisateur. Configurez soigneusement les autorisations pour empêcher l’accès involontaire aux données. Nous recommandons fortement de synchroniser des Agents anonymes derrière votre propre portail ou connexion pour atténuer les abus.

Utilisateurs prévus : utilisateurs qui doivent accéder aux Agents conversationnels sans compte Automation Cloud.

Prérequis

Avant de commencer, assurez-vous d'avoir :

  • Un agent conversationnel publié dans Orchestrator.
  • Accès de l’administrateur de l’Organization au portail Administrateur UiPath.
  • Infrastructure pour héberger une fonction sans serveur ou un point de terminaison d’API (par exemple, AWS Lambda, Azure Functions, Google Cloud Functions).

Étape 1 : créer l’application externe

  1. Depuis la page d’accueil d'UiPath, naviguez vers Admin.
  2. Sélectionnez Apps externes.
  3. Sélectionnez Ajouter une application.
  4. Renseignez les détails de l’application :
    • Nom de l’application : donnez à l’application un nom descriptif.
    • Type d’application : sélectionnez Application confidentielle.
  5. Ajoutez les étendues suivantes en tant qu'étendues d'application :
APIPortée
Accès à l'API OrchestratorOR.Jobs
Accès à l'API OrchestratorOR.Execution
Accès à l'API OrchestratorOR.Users
Accès à l'API OrchestratorOR.Folders
Accès à l'API TraçagesTraces.Api
Agents conversationnelsConversationalAgents
  1. Cliquez sur Ajouter (une URL de redirection n’est pas nécessaire pour ce client).
  2. Une fenêtre contextuelle affiche l’ID de l’application et le Secret de l’application.
Important :

Copiez le secret de l’application et stockez-le en toute sécurité. Vous ne pourrez pas l’afficher à nouveau après avoir fermé cette fenêtre et vous en aurez besoin lors de la création du point de terminaison de jeton.

Remarque :

L’ajout de toutes les étendues en tant qu’étendues d’utilisateurs au lieu d’étendues d’application amène l’application de chat à demander la connexion de l’utilisateur, contrecarrant l’objectif de l’accès anonyme.

Étape 2 : configurer les autorisations de l'application externe

Après avoir créé l’application externe, configurez ses autorisations pour contrôler les ressources auxquelles l’agent anonyme peut accéder.

Affecter un accès au niveau du locataire

  1. Accédez à Orchestrator.
  2. Sélectionnez Locataire en haut à gauche.
  3. Sélectionnez Gérer l’accès dans la barre d’outils.
  4. Sélectionnez Apps externes.
  5. Sélectionnez Affecter une application externe.
  6. Recherchez et sélectionnez l’application externe que vous avez créée.
  7. Sous Rôles supplémentaires, sélectionnez les rôles requis :
    • Minimum requis : Automation User.
    • Ajoutez des rôles supplémentaires uniquement si nécessaire pour votre cas d’utilisation.
  8. Sélectionnez Affecter.

Affecter un accès au niveau du dossier

  1. Naviguez vers Dossiers dans Orchestrator.
  2. Pour chaque dossier, l’agent doit accéder à :
    1. Sélectionnez le dossier.
    2. Sélectionnez Affecter un compte/groupe/application externe.
    3. Sélectionnez votre application externe dans la liste déroulante.
    4. Affectez les rôles nécessaires.
    5. Sélectionnez Affecter.
Remarque :

L’application externe ne peut pas utiliser les ressources pour lesquelles elle ne dispose pas d’autorisations explicites. Assurez-vous que l’application a accès à tous les contextes, outils et ressources dont l’agent conversationnel a besoin.

Étape 3 : créer un point de terminaison de jeton

Un point de terminaison de jeton est requis, car l’agent conversationnel intégré ne peut pas stocker en toute sécurité les secrets du client. Votre point de terminaison de jeton s’authentifie auprès d’UiPath à l’aide des informations d’identification du client et retourne un jeton d’accès à l’agent intégré.

Nous recommandons une architecture sans serveur pour le point de terminaison de jeton :

  • Faible coût : par exemple, la tarification d’AWS Lambda pour 3 000 000 réponses/mois est d’environ 0,40 USD.
  • Maintenance minimale : aucun serveur à gérer.
  • Mise à l’échelle facile : gère automatiquement les pics de trafic.

Considérations de sécurité

Avertissement :

Le secret du client est très sensible. S’il est exposé involontairement, supprimez immédiatement le secret et générez-en un nouveau dans les paramètres de l’application externe.

Assurez-vous de l’implémentation de votre point de terminaison de jeton :

  • Stocke le secret du client en toute sécurité (variables d’environnement, gestionnaire de secrets)
  • Valide les origines de la demande pour empêcher un accès non autorisé
  • Utilise HTTPS pour toutes les communications

Exemple d’implémentation

Le code JavaScript suivant peut être adapté pour votre plateforme sans serveur. Le corps de la réponse doit retourner {access_token: <token>} :

// Whitelist: Configure allowed origins for your deployment
const ALLOWED_ORIGINS = [
  'https://cloud.uipath.com/*',
  // Add your application domains here
];

function matchesOriginPattern(origin, pattern) {
  try {
    const originUrl = new URL(origin);
    const originBase = `${originUrl.protocol}//${originUrl.host}`;

    if (pattern.includes('*')) {
      const regexPattern = pattern
        .replace(/[.+?^${}()|[\]\\]/g, '\\$&')
        .replace(/\*/g, '.*');
      const regex = new RegExp(`^${regexPattern}$`);
      return regex.test(originBase);
    } else {
      return originBase.startsWith(pattern);
    }
  } catch (e) {
    return false;
  }
}

function checkOrigin(req) {
  const origin = req.headers.origin || req.headers.referer;

  if (!origin) {
    const host = req.headers.host;
    if (host && (host.includes('localhost') || host.includes('127.0.0.1'))) {
      return true;
    }
    return false;
  }

  return ALLOWED_ORIGINS.some(pattern => matchesOriginPattern(origin, pattern));
}

async function getClientAccessToken() {
  const clientId = process.env.CLIENT_ID;
  const clientSecret = process.env.CLIENT_SECRET;
  const scope = 'OR.Default ConversationalAgents Traces.Api';

  const params = new URLSearchParams({
    grant_type: 'client_credentials',
    client_id: clientId,
    client_secret: clientSecret,
    scope: scope
  });

  const response = await fetch('https://cloud.uipath.com/identity_/connect/token', {
    method: 'POST',
    headers: {
      'Content-Type': 'application/x-www-form-urlencoded',
    },
    body: params.toString()
  });

  if (!response.ok) {
    const errorText = await response.text();
    throw new Error(`Token request failed: ${response.status} ${errorText}`);
  }

  const data = await response.json();
  return data.access_token;
}

export async function token(context, req) {
  if (!checkOrigin(req)) {
    context.res = {
      status: 403,
      headers: { 'Content-Type': 'application/json' },
      body: { error: 'Origin not allowed' }
    };
    return;
  }

  try {
    const accessToken = await getClientAccessToken();
    context.res = {
      status: 200,
      headers: { 'Content-Type': 'application/json' },
      body: { access_token: accessToken }
    };
  } catch (error) {
    console.error('Error fetching access token:', error);
    context.res = {
      status: 500,
      headers: { 'Content-Type': 'application/json' },
      body: { error: 'Failed to fetch access token' }
    };
  }
}
// Whitelist: Configure allowed origins for your deployment
const ALLOWED_ORIGINS = [
  'https://cloud.uipath.com/*',
  // Add your application domains here
];

function matchesOriginPattern(origin, pattern) {
  try {
    const originUrl = new URL(origin);
    const originBase = `${originUrl.protocol}//${originUrl.host}`;

    if (pattern.includes('*')) {
      const regexPattern = pattern
        .replace(/[.+?^${}()|[\]\\]/g, '\\$&')
        .replace(/\*/g, '.*');
      const regex = new RegExp(`^${regexPattern}$`);
      return regex.test(originBase);
    } else {
      return originBase.startsWith(pattern);
    }
  } catch (e) {
    return false;
  }
}

function checkOrigin(req) {
  const origin = req.headers.origin || req.headers.referer;

  if (!origin) {
    const host = req.headers.host;
    if (host && (host.includes('localhost') || host.includes('127.0.0.1'))) {
      return true;
    }
    return false;
  }

  return ALLOWED_ORIGINS.some(pattern => matchesOriginPattern(origin, pattern));
}

async function getClientAccessToken() {
  const clientId = process.env.CLIENT_ID;
  const clientSecret = process.env.CLIENT_SECRET;
  const scope = 'OR.Default ConversationalAgents Traces.Api';

  const params = new URLSearchParams({
    grant_type: 'client_credentials',
    client_id: clientId,
    client_secret: clientSecret,
    scope: scope
  });

  const response = await fetch('https://cloud.uipath.com/identity_/connect/token', {
    method: 'POST',
    headers: {
      'Content-Type': 'application/x-www-form-urlencoded',
    },
    body: params.toString()
  });

  if (!response.ok) {
    const errorText = await response.text();
    throw new Error(`Token request failed: ${response.status} ${errorText}`);
  }

  const data = await response.json();
  return data.access_token;
}

export async function token(context, req) {
  if (!checkOrigin(req)) {
    context.res = {
      status: 403,
      headers: { 'Content-Type': 'application/json' },
      body: { error: 'Origin not allowed' }
    };
    return;
  }

  try {
    const accessToken = await getClientAccessToken();
    context.res = {
      status: 200,
      headers: { 'Content-Type': 'application/json' },
      body: { access_token: accessToken }
    };
  } catch (error) {
    console.error('Error fetching access token:', error);
    context.res = {
      status: 500,
      headers: { 'Content-Type': 'application/json' },
      body: { error: 'Failed to fetch access token' }
    };
  }
}

Variables de l'environnement

Configurez les variables d’environnement suivantes dans votre plateforme sans serveur :

VariableDescription
CLIENT_IDL’ID de l’application de l’étape 1
CLIENT_SECRETLe secret de l’application de l’étape 1

La méthode exacte pour définir des variables d’environnement dépend de votre plateforme d’hébergement.

Configuration des origines autorisées

L'Array ALLOWED_ORIGINS fournit une sécurité en rejetant les demandes de jetons provenant de sources non autorisées.Configurez cette liste pour inclure :

  • https://cloud.uipath.com/* (requis pour l’agent intégré)
  • https://staging.uipath.com si vous devez autoriser des demandes provenant d’un environnement d'organisation
  • Domaine(s) de votre application si vous testez localement ou à partir d’autres environnements

Étape 4 : intégrer l’agent avec un accès anonyme

Avec le point de terminaison de jeton configuré, intégrez l’agent conversationnel à l’aide du format d’URL suivant :

https://<cloud_env>.uipath.com/<organization>/<tenant>/autopilotforeveryone_/conversational-agents/?agentId=<agent_id>&externalAuth=true&authEndpoint=<token_endpoint_url>&externalUserId=<user_id>
https://<cloud_env>.uipath.com/<organization>/<tenant>/autopilotforeveryone_/conversational-agents/?agentId=<agent_id>&externalAuth=true&authEndpoint=<token_endpoint_url>&externalUserId=<user_id>

Paramètres d’URL en accès anonyme

ParamètreRequisDescription
agentIdOui (Yes)L’ID de publication de l’agent publié
externalAuthOui (Yes)Définissez sur true pour activer l’accès anonyme
authEndpointOui (Yes)URL de votre point de terminaison de jeton
externalUserIdOui (Yes)Identificateur unique pour l’utilisateur (consultez la remarque ci-dessous)
Remarque :

externalUserId est une valeur que vous définissez et maintenez.Il sépare et récupère l’historique de chat de l’utilisateur. Utilisez un ID de l'utilisateur significatif si vous devez maintenir l’historique de chat ou un GUID aléatoire si la persistance de l’historique de chat n’est pas requise.

Exemple d’URL intégrée

https://<cloud_env>.uipath.com/myorg/mytenant/autopilotforeveryone_/conversational-agents/?agentId=12345&externalAuth=true&authEndpoint=https://my-api.example.com/token&externalUserId=user-abc-123
https://<cloud_env>.uipath.com/myorg/mytenant/autopilotforeveryone_/conversational-agents/?agentId=12345&externalAuth=true&authEndpoint=https://my-api.example.com/token&externalUserId=user-abc-123

Exemple de HTML

<iframe
  src="https://<cloud_env>.uipath.com/myorg/mytenant/autopilotforeveryone_/conversational-agents/?agentId=12345&externalAuth=true&authEndpoint=https://my-api.example.com/token&externalUserId=user-abc-123"
  width="400"
  height="600"
  frameborder="0"
  allow="clipboard-write"
></iframe>
<iframe
  src="https://<cloud_env>.uipath.com/myorg/mytenant/autopilotforeveryone_/conversational-agents/?agentId=12345&externalAuth=true&authEndpoint=https://my-api.example.com/token&externalUserId=user-abc-123"
  width="400"
  height="600"
  frameborder="0"
  allow="clipboard-write"
></iframe>
Remarque :

Si le paramètre externalAuth=true est manquant, l’agent intégré utilise le flux de redirection de connexion standard au lieu de l’accès anonyme.

Résolution des problèmes

Le point de terminaison de jeton retourne 403

  • Vérifiez que votre liste ALLOWED_ORIGINS inclut les domaines corrects.
  • Vérifiez que l’en-tête d’origine de la demande est envoyé correctement.
  • Testez le point de terminaison directement pour isoler le problème.

La demande de jeton échoue avec une Error d’authentification

  • Vérifiez que les variables d'environnement CLIENT_ID et CLIENT_SECRET sont définies correctement.
  • Confirmez que l’application externe est toujours active dans UiPath Admin.
  • Vérifiez que l’URL du point de terminaison de jeton dans le code pointe vers l’environnement UiPath correct.

L’agent ne peut pas accéder aux ressources

  • Examinez les rôles affectés de l’application externe dans Orchestrator.
  • Vérifiez que les autorisations au niveau du dossier sont configurées pour tous les dossiers requis.
  • Vérifiez que les étendues ajoutées à l’application externe correspondent à l’accès à l’API requis.

L’historique de chat ne persiste pas

  • Assurez-vous d’utiliser un externalUserId cohérent pour le même utilisateur.
  • Vérifiez que l’ID de l’utilisateur est transmis correctement dans l’URL intégrée.

Prochaines étapes

Cette page vous a-t-elle été utile ?

Connecter

Besoin d'aide ? Assistance

Vous souhaitez apprendre ? UiPath Academy

Vous avez des questions ? UiPath Forum

Rester à jour