UiPath Documentation
agents
latest
false
Guia do Usuário de Agentes
Importante :
A localização de um conteúdo recém-publicado pode levar de 1 a 2 semanas para ficar disponível.

Configuração de acesso anônimo

Configure acesso anônimo para incorporar agentes de chat para usuários sem contas da UiPath, para portais voltados para o cliente e aplicativos voltados para o público.

Visão geral​

O acesso anônimo permite que você incorpore seus agentes de conversa baseados em chat para usuários que não têm contas da UiPath. Isso é útil para aplicativos voltados para o cliente, portais públicos ou qualquer cenário em que você queira que os usuários interajam com seu agente sem exigir a autenticação da UiPath.

O acesso anônimo exige:

  1. Um aplicativo externo confidencial configurado no UiPath Admin
  2. Um ponto de extremidade do token hospedado por sua organização para lidar com a autenticação
  3. Uma URL de agente incorporado configurada com os parâmetros de autenticação
AVISO:

Apps externos confidenciais com escopo de aplicativos permitem acesso anônimo sem autenticação do usuário. Configurar permissões cuidadosamente para evitar o acesso não intencional a dados. Recomendamos fortemente a colocação de agentes anônimos por trás do seu próprio portal ou login para mitigar abusos.

Usuários pretendidos: usuários que precisam acessar agentes de conversa sem uma conta do Automation Cloud.

Pré-requisitos​

Antes de começar, certifique-se de ter:

  • Um agente de conversa publicado no Orchestrator.
  • Acesso de administrador da organização ao portal de administração da UiPath.
  • Infraestrutura para hospedar uma função sem servidor ou ponto de extremidade de API (por exemplo, AWS Lambda, Azure Functions, Google Cloud Functions).

Etapa 1: crie o aplicativo externo​

  1. Na página inicial da UiPath, navegue até Administrador.
  2. Selecione Apps Externos.
  3. Selecione Adicionar aplicativo.
  4. Preencha os detalhes do aplicativo:
    • Nome do aplicativo: dê ao aplicativo um nome que o desceva.
    • Tipo de aplicativo: selecione Aplicativo confidencial.
  5. Adicione os seguintes escopos como escopos de aplicativo:
APIEscopo
OrchestratorOR.Jobs
OrchestratorOR.Execution
OrchestratorOR.Users
OrchestratorOR.Folders
TracesTraces.Api
Agentes de conversaConversationalAgents
  1. Selecione Adicionar (você não precisa de uma URL de redirecionamento para esse cliente).
  2. Um pop-up exibe o ID do aplicativo e o Segredo do aplicativo.
Importante:

Copie o segredo do aplicativo e armazene-o com segurança. Você não poderá visualizá-lo novamente após fechar essa janela e precisará dele ao criar o ponto de extremidade do token.

Observação:

Adicionar quaisquer escopos como escopos de usuário em vez de escopos de aplicativos faz com que o aplicativo de chat solicite o login do usuário, destruindo a finalidade do acesso anônimo.

Etapa 2: configurar permissões de aplicativos externos​

Após criar o aplicativo externo, configure suas permissões para controlar quais recursos o agente anônimo pode acessar.

Atribuir acesso no nível do tenant​

  1. Navegue para o Orchestrator.
  2. Selecione Tenant no canto superior esquerdo.
  3. Selecione Gerenciar acesso na barra de ferramentas.
  4. Selecione Apps externos.
  5. Selecione Atribuir aplicativo externo.
  6. Pesquise e selecione o aplicativo externo que você criou.
  7. Em Funções adicionais, selecione as funções necessárias:
    • Mínimo necessário: Automation User.
    • Acrescente funções adicionais apenas conforme necessário para seu caso de uso.
  8. Selecione Atribuir.

Atribuir acesso no nível da pasta​

  1. Navegue até Pastas no Orchestrator.
  2. Para cada pasta, o agente precisa de acesso a:
    1. Selecione a pasta.
    2. Selecione Atribuir aplicativo de conta/grupo/externo.
    3. Selecione seu aplicativo externo no menu suspenso.
    4. Atribua as funções necessárias.
    5. Selecione Atribuir.
Observação:

O aplicativo externo é restrito a quaisquer recursos para os quais ele não tenha permissões explícitas. Certifique-se de que o aplicativo tenha acesso a todos os contextos, ferramentas e recursos de que o agente de conversa precisa.

Etapa 3: criar um ponto de extremidade do token​

Um ponto de extremidade do token é necessário porque o agente de conversa incorporado não pode armazenar segredos do cliente com segurança.Seu ponto de extremidade do token autentica-se com a UiPath usando as credenciais do cliente e retorna um token de acesso ao agente incorporado.

Recomendamos uma arquitetura sem servidor para o ponto de extremidade do token:

  • Baixo custo: por exemplo, o preço do AWS Lambda para 3.000.000 respostas/mês é de aproximadamente USD 0,40.
  • Manutenção mínima: sem servidores para gerenciar.
  • Dimensionamento fácil: lida com picos de tráfego automaticamente.

Considerações de segurança​

AVISO:

O segredo do cliente é altamente confidencial.Se ele for exposto involuntariamente, exclua imediatamente o segredo e gere um novo nas configurações do Aplicativo externo.

Certifique-se de que a implementação do seu ponto de extremidade do token:

  • Armazena o segredo do cliente com segurança (variáveis de ambiente, gerente de segredos)
  • Valida solicitações de origens para evitar acesso não autorizado
  • Usa HTTPS para todas as comunicações

Exemplo de implementação​

O seguinte código JavaScript pode ser adaptado para sua plataforma sem servidor. O corpo da resposta deve retornar {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' }
    };
  }
}

Variáveis de Ambiente​

Configure as seguintes variáveis de ambiente em sua plataforma sem servidor:

VariávelDescription
CLIENT_IDO ID do aplicativo da etapa 1
CLIENT_SECRETO segredo do aplicativo da etapa 1

O método exato para definir variáveis de ambiente depende da sua plataforma de hospedagem.

Configuração de origens permitidas​

A Array ALLOWED_ORIGINS fornece segurança rejeitando solicitações de token de fontes não autorizadas. Configure essa lista para incluir:

  • https://cloud.uipath.com/* (necessário para o agente incorporado)
  • https://staging.uipath.com se você precisar permitir solicitações de um ambiente de preparação
  • Os domínios do seu aplicativo se estiver sendo testado localmente ou de outros ambientes

Etapa 4: incorporar o agente com acesso anônimo​

Com o ponto de extremidade do token configurado, incorpore o agente de conversa usando o seguinte 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 acesso anônimo​

ParâmetroRequiredDescription
agentIdSimO ID de versão do agente publicado
externalAuthSimDefina como true para habilitar o acesso anônimo
authEndpointSimURL do ponto de extremidade do seu token
externalUserIdSimIdentificador exclusivo para o usuário (consulte a nota abaixo)
Observação:

O externalUserId é um valor que você define e mantém. Ele separa e recupera o histórico de chat do usuário. Use um ID de usuário significativo se você precisar manter o histórico do chat ou um GUID aleatório se a persistência do histórico do chat não for necessária.

Exemplo de URL incorporado​

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

Exemplo 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>
Observação:

Se o parâmetro externalAuth=true estiver ausente, o agente incorporado usará o fluxo de redirecionamento de login padrão em vez de acesso anônimo.

Solução de problemas​

O ponto de extremidade do token retorna 403​

  • Verifique se sua lista ALLOWED_ORIGINS inclui os domínios corretos.
  • Verifique se o cabeçalho de origem da solicitar está sendo enviado corretamente.
  • Teste o ponto de extremidade diretamente para isolar o problema.

A solicitação de token falha com erro de autenticação​

  • Verifique se as variáveis CLIENT_ID e CLIENT_SECRET de ambiente estão definidas corretamente.
  • Confirme que o aplicativo externo ainda está ativo no UiPath Admin.
  • Verifique se o URL do ponto de extremidade do token no código aponta para o ambiente UiPath correto.

O agente não pode acessar recursos​

  • Revise as funções atribuídas ao aplicativo externo no Orchestrator.
  • Verifique se as permissões no nível da pasta estão configuradas para todas as pastas necessárias.
  • Verifique se os escopos adicionados ao aplicativo externo correspondem ao acesso à API necessário.

Histórico do chat não persiste​

  • Certifique-se de estar usando um externalUserId consistente para o mesmo usuário.
  • Verifique se o ID do usuário está sendo passado corretamente no URL integrado.

Próximas Etapas​

Esta página foi útil?

Conectar

Precisa de ajuda? Suporte

Quer aprender? Academia UiPath

Tem perguntas? Fórum do UiPath

Fique por dentro das novidades