---
slug: agentes/portais
title: Portais no navegador
description: O agente trabalha nas páginas de um portal, como um ERP, logado como você, sem ver a sua senha.
sidebar:
  order: 6
---

O agente trabalha nas páginas de um portal que a empresa usa, como o Bling, o Sankhya ou um ERP regional: lê listas e tabelas, clica, preenche e escolhe, logado como você. Você entra no portal uma vez, na página da Kernel que a Siglata abre, com a sua senha e os seus códigos; nem a Siglata nem o agente os veem. A Kernel, fornecedora de navegadores da Siglata, guarda a sessão e entra de novo sozinha quando ela expira.

A [política de privacidade](https://www.siglata.com/privacidade#portals) diz o que a Kernel guarda e por quanto tempo, e os [termos](https://www.siglata.com/termos#portals) dizem quem responde pelo que os agentes fazem no portal.

## Conectar um portal [#connect]

Peça ao agente, por exemplo: "conecte o Bling". Ele chama `portal_connect` com o domínio do portal ou qualquer link para ele:

```js
return await portal_connect({ domain: "bling.com.br" });
```

A resposta traz um link para a página de conexão da Siglata. Abra-o, confirme que você pode automatizar essa conta e entre no portal na página da Kernel. Quando o login termina, a página mostra que o portal está conectado. Bancos, redes sociais e o login gov.br são recusados.

A conexão é sua: só você a usa. Um proprietário ou administrador conecta o portal da empresa com `visibility: "org"`, e ele serve a todo membro que não tem uma conexão própria com aquele domínio. No portal da empresa, todo membro lê as páginas (`portal_open`, `portal_read`, `portal_run`). Agir nele (`portal_act`, `portal_run_write`), entrar de novo e desconectá-lo pedem escrita: proprietários, administradores e quem recebeu escrita com `grant_set` e o `connectionId` que `portal_list` mostra.

`portal_list` mostra as conexões que você vê e o status atual: `authenticated` (pronta), `connecting` (alguém está entrando) ou `needs_auth` (mande o `url` para a pessoa entrar de novo). `portal_disconnect` exclui a sessão que a Kernel guarda, o login guardado e as concessões.

## Trabalhar nas páginas [#explore]

`portal_open` abre um navegador no portal, já logado, e lê a página: a árvore de acessibilidade (papéis e nomes dos elementos) e as tabelas visíveis, linha por linha.

```js
const { sessionId, page } = await portal_open({
  domain: "bling.com.br",
  url: "https://www.bling.com.br/produtos.php",
});
```

Na mesma sessão, `portal_read` lê de novo a página ou vai a outra página do portal, e `portal_act` clica, preenche ou escolhe um elemento pelo papel e nome que a página mostra:

```js
return await portal_act({
  sessionId,
  action: { kind: "fill", role: "textbox", name: "Pesquisar", value: "caneta" },
});
```

O agente nunca digita num campo de senha e para em qualquer link que saia do domínio do portal. A sessão dura 15 minutos.

## Guardar e repetir um roteiro [#scripts]

`portal_close` fecha a sessão e devolve os passos que funcionaram como um roteiro (`script`). O agente o guarda numa skill da empresa para repetir o trabalho depois:

- `portal_run` roda numa chamada um roteiro só de navegação (`goto`) e lê a última página.
- `portal_run_write` roda numa chamada um roteiro que clica, preenche ou escolhe, e pede escrita na conexão. Quem pode o quê se decide pelo acesso, e a Atividade registra cada execução.

## Créditos e logins expirados [#limits]

Antes de abrir o navegador, a Siglata reserva créditos para o limite de tempo da chamada ou sessão. O saldo disponível já desconta essa reserva; sem saldo suficiente, as ferramentas falham com `credits_exhausted`. O tempo usado é cobrado mesmo se a execução falhar. Ao fechar, a reserva restante é liberada. Chamadas na mesma sessão são atendidas em sequência, com cobrança e histórico gravados juntos. Uma falha ao registrar a cobrança faz a operação falhar e mantém o trecho pendente.

A Kernel confere a sessão de hora em hora e entra de novo sozinha com o login guardado. Quando uma ferramenta encontra o portal deslogado, ela mesma pede esse login à Kernel, espera até 2 minutos e continua; a Atividade registra o login como `portal_relogin`. Um roteiro só de navegação roda de novo; um roteiro que age não roda de novo, e o agente confere a página antes de repetir. Só quando esse login falha ou pede algo a você (um código, um CAPTCHA, uma escolha) a ferramenta falha com `portal_needs_login`, o link para você entrar e o código de erro da Kernel.

Para logins que um script na sua máquina usa, veja [Acessos a portais](/docs/agentes/acessos-a-portais).
