UiPath Documentation
agents
latest
false
Importante :
La localización de contenidos recién publicados puede tardar entre una y dos semanas en estar disponible.
UiPath logo, featuring letters U and I in white

Guía del usuario de Agents

Última actualización 6 de abr. de 2026

Configuración de acceso anónimo

Información general

El acceso anónimo te permite incrustar agentes conversacionales para los usuarios que no tienen cuentas de UiPath. Esto es útil para aplicaciones orientadas al cliente, portales públicos o cualquier escenario en el que quieras que los usuarios interactúen con tu agente sin requerir la autenticación de UiPath.

El acceso anónimo requiere:

  1. Una aplicación externa confidencial configurada en UiPath Admin
  2. Un PuntoFinal de token alojado por tu organización para gestionar la autenticación
  3. Una URL de agente incrustada configurada con los parámetros de autenticación
ADVERTENCIA:

Las Apps externas confidenciales con ámbito de aplicación permiten el acceso anónimo sin autenticación de usuario. Configura los permisos cuidadosamente para evitar el acceso no intencional a los datos. Recomendamos encarecidamente utilizar agentes detrás de tu propio portal o iniciar sesión para mitigar el abuso.

Usuarios previstos: usuarios que necesitan acceder a los agentes conversacionales sin una cuenta de Automation Cloud.

Requisitos previos

Antes de comenzar, asegúrate de tener:

  • Un agente conversacional publicado en Orchestrator.
  • Acceso de administrador de organización al portal de administración de UiPath.
  • Infraestructura para hospedar una función sin servidor o un PuntoFinal de API (por ejemplo, AWS Lambda, Azure Functions, Google Cloud Functions).

Paso 1: crea la aplicación externa

  1. Desde la página de inicio de UiPath, ve a Administrador.
  2. Selecciona Apps externas.
  3. Selecciona Añadir aplicación.
  4. Rellena los detalles de la aplicación:
    • Nombre de la aplicación: da a la aplicación un nombre descriptivo.
    • Tipo de Aplicación: selecciona Aplicación confidencial.
  5. Añade los siguientes ámbitos como ámbitos de aplicación:
APIÁmbito
Acceso a la API de OrchestratorOR.Jobs
Acceso a la API de OrchestratorOR.Execution
Acceso a la API de OrchestratorOR.Users
Acceso a la API de OrchestratorOR.Folders
Acceso a la API de seguimientoTraces.Api
Agentes conversacionalesConversationalAgents
  1. Haz clic en Añadir (no se necesita una URL de redirección para este cliente).
  2. Una ventana emergente muestra el ID de aplicación y el secreto de aplicación.
Importante:

Copia el secreto de la aplicación y guárdalo de forma segura. No podrás verlo de nuevo después de cerrar esta ventana y lo necesitarás al crear el PuntoFinal del Token.

Nota:

Añadir cualquier ámbito como ámbito de usuario en lugar de ámbito de aplicación hace que la aplicación de chat solicite el inicio de sesión del usuario, lo que anula el propósito del acceso anónimo.

Paso 2: configura los permisos de aplicación externa

Después de crear la aplicación externa, configura sus permisos para controlar a qué recursos puede acceder el agente anónimo.

Asigna acceso en el nivel de tenant

  1. Navega a Orchestrator.
  2. Selecciona tenant en la parte superior izquierda.
  3. Selecciona Administrar acceso en la barra de herramientas.
  4. Selecciona Apps externas.
  5. Selecciona Asignar aplicación externa.
  6. Busca y selecciona la aplicación externa que creaste.
  7. En Roles adicionales, selecciona los roles requeridos:
    • Mínimo requerido: Automation User.
    • Añade roles adicionales solo según sea necesario para tu caso de uso.
  8. Selecciona Asignar.

Asigna acceso en nivel de carpeta

  1. Ve a Carpetas en Orchestrator.
  2. Para cada carpeta a la que el agente necesite acceder:
    1. Selecciona la carpeta.
    2. Selecciona Asignar cuenta/grupo/aplicación externa.
    3. Selecciona tu aplicación externa en el menú desplegable.
    4. Asigna los roles necesarios.
    5. Selecciona Asignar.
Nota:

La aplicación externa está restringida de cualquier recurso del que no tenga permisos explícitos.Asegúrate de que la aplicación tenga acceso a todos los contextos, herramientas y recursos que necesita el agente conversacional para satisfacer sus necesidades.

Paso 3: crea un PuntoFinal de Token

Se requiere un PuntoFinal de Token porque el agente conversacional incrustado no puede almacenar de forma segura los secretos del cliente.Tu punto final de token se autentica con UiPath utilizando las credenciales de cliente y devuelve un token de acceso al agente incrustado.

Recomendamos una arquitectura sin servidor para el PuntoFinal de Token:

  • Bajo coste: por ejemplo, el precio de AWS Lambda para 3 000 000 respuestas/mes es de aproximadamente 0,40 USD.
  • Mantenimiento mínimo: no hay servidores que gestionar.
  • Escalado fácil: maneja los picos de tráfico automáticamente.

Consideraciones de seguridad

ADVERTENCIA:

El secreto de cliente es muy sensible. Si se expone sin querer, elimina inmediatamente el secreto y genera uno nuevo en la configuración de la aplicación externa.

Asegúrate de la implementación de tu PuntoFinal de Token:

  • Almacena el secreto de cliente de forma segura (variables de entorno, gestor de secretos)
  • Valida los orígenes de la solicitud para evitar el acceso no autorizado
  • Utiliza HTTPS para todas las comunicaciones

Ejemplo de implementación

El siguiente código JavaScript se puede adaptar para tu plataforma sin servidor. El cuerpo de respuesta debe devolver {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 entorno

Configura las siguientes variables de entorno en tu plataforma sin servidor:

VariableDescripción
CLIENT_IDEl ID de aplicación del paso 1
CLIENT_SECRETEl secreto de la aplicación del paso 1

El método exacto para establecer las variables de entorno depende de tu plataforma de alojamiento.

Configurar los orígenes permitidos

El array ALLOWED_ORIGINS proporciona seguridad al rechazar las solicitudes de Token de fuentes no autorizadas. Configura esta lista para incluir:

  • https://cloud.uipath.com/* (necesario para el agente incrustado)
  • https://staging.uipath.com si necesitas permitir solicitudes de un entorno de prueba
  • Los dominios de tu aplicación si se realizan pruebas localmente o desde otros entornos

Paso 4: incrusta el agente con acceso anónimo

Con el PuntoFinal de Token configurado, incrusta el agente conversacional utilizando el siguiente formato de URL:

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>

Parámetros de URL de acceso anónimo

ParámetroObligatorioDescripción
agentIdEl ID de la versión del agente publicado
externalAuthEstablécelo como true para habilitar el acceso anónimo
authEndpointURL de tu PuntoFinal de Token
externalUserIdIdentificador exclusivo para el usuario (consulta la nota a continuación)
Nota:

El externalUserId es un valor que defines y mantienes. Separa y recupera el historial de chat del usuario. Usa un ID de usuario significativo si necesitas mantener el historial de chat, o un GUID aleatorio si no se requiere la persistencia del historial de chat.

Ejemplo de URL incrustada

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

Ejemplo 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>
Nota:

Si falta el parámetro externalAuth=true, el agente incrustado utiliza el flujo de redirección de inicio de sesión estándar en lugar de acceso anónimo.

Solución de problemas

El PuntoFinal de Token devuelve 403

  • Verifica que tu lista ALLOWED_ORIGINS incluya los dominios correctos.
  • Comprueba que el encabezado de origen de la solicitud se envíe correctamente.
  • Prueba el PuntoFinal directamente para aislar la incidencia.

La solicitud de token falla con error de autenticación

  • Verifica que las variables de entorno CLIENT_ID y CLIENT_SECRET se establezcan correctamente.
  • Confirma que la aplicación externa siga activa en UiPath Admin.
  • Comprueba que la URL del PuntoFinal del Token en el código apunte al entorno de UiPath correcto.

El agente no puede acceder a los recursos

  • Revisa los roles asignados de la aplicación externa en Orchestrator.
  • Verifica que los permisos en el nivel de carpeta estén configurados para todas las carpetas necesarias.
  • Comprueba que los ámbitos añadidos a la aplicación externa coincidan con el acceso a la API requerido.

El historial de chat no persiste

  • Asegúrate de utilizar un externalUserId coherente para el mismo usuario.
  • Verifica que el ID de usuario se pase correctamente en la URL incrustada.

Próximos pasos

¿Te ha resultado útil esta página?

Conectar

¿Necesita ayuda? Soporte

¿Quiere aprender? UiPath Academy

¿Tiene alguna pregunta? Foro de UiPath

Manténgase actualizado