- Primeros pasos
- Agentes de UiPath en Studio Web
- Acerca de los agentes de UiPath
- Licencia
- Agentes codificados en Studio Web
- Ejecución de agentes
- Primeros pasos con agentes conversacionales
- Licencias para agentes conversacionales
- Diseñar agentes conversacionales
- Evaluar agentes conversacionales
- Gestión de instancias
- Autopilot for Everyone
- Microsoft Teams
- Slack
- Configuración de acceso anónimo
- Observabilidad para agentes conversacionales
- Limitaciones y preguntas frecuentes
- Agentes y flujos de trabajo
- Mejores prácticas para construir agentes.
- Elegir el mejor modelo para tu agente
- Mejores prácticas para publicar e implementar agentes
- Mejores prácticas para el diseño de contexto.
- Prácticas recomendadas para DeepRAG y Transformación por Lote: JIT frente a estrategias basadas en índice.
- Solicitudes
- Trabajar con archivos
- Contextos
- Escalaciones y memoria del agente
- Evaluaciones
- Seguimientos de agente
- Puntuación del agente
- Gestión de agentes de UiPath
- Agentes de UiPath codificados

Guía del usuario de Agents
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:
- Una aplicación externa confidencial configurada en UiPath Admin
- Un PuntoFinal de token alojado por tu organización para gestionar la autenticación
- Una URL de agente incrustada configurada con los parámetros de autenticación
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
- Desde la página de inicio de UiPath, ve a Administrador.
- Selecciona Apps externas.
- Selecciona Añadir aplicación.
- 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.
- Añade los siguientes ámbitos como ámbitos de aplicación:
| API | Ámbito |
|---|---|
| Acceso a la API de Orchestrator | OR.Jobs |
| Acceso a la API de Orchestrator | OR.Execution |
| Acceso a la API de Orchestrator | OR.Users |
| Acceso a la API de Orchestrator | OR.Folders |
| Acceso a la API de seguimiento | Traces.Api |
| Agentes conversacionales | ConversationalAgents |
- Haz clic en Añadir (no se necesita una URL de redirección para este cliente).
- Una ventana emergente muestra el ID de aplicación y el secreto de aplicación.
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.
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
- Navega a Orchestrator.
- Selecciona tenant en la parte superior izquierda.
- Selecciona Administrar acceso en la barra de herramientas.
- Selecciona Apps externas.
- Selecciona Asignar aplicación externa.
- Busca y selecciona la aplicación externa que creaste.
- 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.
- Selecciona Asignar.
Asigna acceso en nivel de carpeta
- Ve a Carpetas en Orchestrator.
- Para cada carpeta a la que el agente necesite acceder:
- Selecciona la carpeta.
- Selecciona Asignar cuenta/grupo/aplicación externa.
- Selecciona tu aplicación externa en el menú desplegable.
- Asigna los roles necesarios.
- Selecciona Asignar.
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.
Arquitectura recomendada
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
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:
| Variable | Descripción |
|---|---|
CLIENT_ID | El ID de aplicación del paso 1 |
CLIENT_SECRET | El 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.comsi 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ámetro | Obligatorio | Descripción |
|---|---|---|
agentId | Sí | El ID de la versión del agente publicado |
externalAuth | Sí | Establécelo como true para habilitar el acceso anónimo |
authEndpoint | Sí | URL de tu PuntoFinal de Token |
externalUserId | Sí | Identificador exclusivo para el usuario (consulta la nota a continuación) |
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>
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_ORIGINSincluya 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_IDyCLIENT_SECRETse 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
externalUserIdcoherente para el mismo usuario. - Verifica que el ID de usuario se pase correctamente en la URL incrustada.
Próximos pasos
- Incrustación de iFrame y Apps: documentación de incrustación completa
- Licencias: comprende el consumo para usuarios anónimos
- Información general
- Requisitos previos
- Paso 1: crea la aplicación externa
- Paso 2: configura los permisos de aplicación externa
- Asigna acceso en el nivel de tenant
- Asigna acceso en nivel de carpeta
- Paso 3: crea un PuntoFinal de Token
- Arquitectura recomendada
- Consideraciones de seguridad
- Ejemplo de implementación
- Variables de entorno
- Configurar los orígenes permitidos
- Paso 4: incrusta el agente con acceso anónimo
- Parámetros de URL de acceso anónimo
- Ejemplo de URL incrustada
- Ejemplo de HTML
- Solución de problemas
- El PuntoFinal de Token devuelve 403
- La solicitud de token falla con error de autenticación
- El agente no puede acceder a los recursos
- El historial de chat no persiste
- Próximos pasos