Módulo Orquestrador

O CITSmart X Orquestrador é o servidor de gestão da plataforma e o painel de operação que o acompanha. Nesta funcionalidade é possível acompanhar a frota de máquinas, os robôs publicados, as execuções, as filas de trabalho e os alertas, além de configurar gatilhos, recursos compartilhados e o acesso de cada pessoa.
O Orquestrador guarda e controla:
- os robôs publicados e suas versões;
- as máquinas onde os robôs executam;
- os jobs (execuções), as filas de trabalho e as orquestrações;
- o cofre de credenciais;
- as regras de acesso, a trilha de auditoria, a retenção de dados e os alertas.
O desenho dos robôs é feito no CITSmart X Studio (veja o módulo Studio). Os modelos de IA, os provedores e o assistente são tratados em o módulo IA.
Como o painel é organizado
O painel é acessado pelo navegador, no endereço do servidor (por padrão http://localhost:8080). O menu lateral agrupa as telas pela pergunta que cada uma responde:
Grupo | Pergunta | Telas |
|---|---|---|
Agora | O que está acontecendo? | Operação, Robôs, Orquestrações, Tarefas |
Entender | Por que aconteceu e quanto vale? | Falhas, Agente, Valor |
Configurar | O que vai acontecer? | Máquinas, Gatilhos, Recursos, Modelos de IA |
O menu pode ser recolhido para uma coluna de ícones com o botão “Recolher”, no rodapé do menu. Ao lado do menu, no rodapé, aparecem a identidade de quem está conectado (nome, papel e pastas) e o botão “sair”.
Conceitos
Robô, Orquestração e Máquina
A tela e a API usam palavras diferentes, de propósito. Use a palavra da tela no dia a dia; a tabela abaixo traduz para quem integra pela API.
Na tela | Na API e nos dados | O que é |
|---|---|---|
Robô | process, /api/processes, prefixo de id proc_ | A automação que alguém desenha, publica e versiona. |
Orquestração | plano, /api/plans, prefixo de id pln_ | O encadeamento de robôs, com dependência, prazo e recurso. |
Máquina | robot, /api/robots, prefixo de id rbt_ | O computador onde um robô executa, com o agente instalado. |
Nota: o mesmo vale para a linha de comando e para os identificadores técnicos. Variáveis de ambiente como NEXO_MASTER_KEY e a pasta de dados .nexo-data mantêm o nome técnico original.
Job
Job é uma execução de um robô em uma máquina. Os estados que aparecem nas telas são Pending (aguardando uma máquina), Running, Suspended (parado esperando uma pessoa decidir), Successful, Faulted e Stopped.
Um job que não está rodando tem sempre um motivo registrado, como falta de capacidade na máquina, grupo incompatível ou recurso compartilhado em uso. A tela Operação mostra esse motivo na seção “Jobs esperando”.
Fila
Fila é uma lista de itens de trabalho que as máquinas consomem. Cada item passa por New, InProgress e termina em Successful, Failed ou Abandoned. Veja Filas.
Cofre
Cofre é o local onde ficam as credenciais usadas pelos robôs. O valor é cifrado no servidor e nunca é exibido nas telas. Veja Cofre e credenciais.
Ciclo DEV, HOMOLOG e PROD
Todo robô publicado nasce em DEV e só chega a PROD depois de passar por HOMOLOG, com a aprovação de outra pessoa. O pacote aprovado é exatamente o que executa em produção. Veja Ciclo de vida e promoção.
Pasta
Pasta é a unidade de isolamento entre áreas ou clientes. Cada pessoa enxerga apenas os registros das pastas a que tem acesso. Veja Auditoria e segurança.
Páginas deste módulo
Primeiros passos
- Instalação e acesso: subir o servidor, configurar o .env e entrar no painel.
- Registrar máquina: conectar um computador ao Orquestrador.
Agora
- Operação: alertas, frota, filas, ciclo de vida e governança em uma tela.
- Robôs: catálogo de robôs publicados e execução na máquina do usuário.
- Orquestrações: execuções de orquestração, prazo e caminho crítico.
- Tarefas: decisões que dependem de uma pessoa.
Entender
- Falhas: o que mais quebra, agrupado por defeito.
- Agente: propostas de remediação e política de autonomia.
- Valor: economia líquida, custo e tarifas.
Configurar
- Máquinas: frota, capacidades e códigos de instalação.
- Gatilhos: disparo por chegada de arquivo, fila de mensagem ou webhook.
- Recursos: limites compartilhados, como licenças de um ERP.
Administração
- Filas: itens de trabalho, reserva, tentativas e alertas.
- Cofre e credenciais: criar credenciais e trocar a chave mestra.
- Ciclo de vida e promoção: DEV, HOMOLOG, PROD, assinatura e aprovação.
- Auditoria e segurança: papéis, pastas, trilha de auditoria, mascaramento e retenção.
- Alertas e webhooks: regras de alerta, canal de entrega e eventos para sistemas externos.
Instalação e acesso
Nesta funcionalidade é possível subir o CITSmart X Orquestrador, ajustar sua configuração pelo arquivo .env e entrar no painel de operação com um token de identidade ou com a conta da empresa.
A tela de entrada é exibida ao abrir o endereço do servidor no navegador, sempre que o acesso exige identificação.

Subir o servidor
Para subir a plataforma completa em ambiente de trabalho é necessário:
- Copiar o arquivo .env.exemplo para .env, na raiz do projeto, e ajustar os valores.
- Executar npm install e npm run build, na primeira vez.
- Executar o comando:
npm run subir
O comando sobe, em ordem, as dependências em contêiner (quando o Docker está disponível), o Orquestrador, uma máquina com o agente e o Studio. Cada serviço só é considerado pronto depois de responder, e o log de cada um fica em .nexo-data/logs/. Serviços que já estão no ar não são iniciados novamente.
Opções úteis:
Opção | Efeito |
|---|---|
npm run subir -- --studio=nenhum | Sobe apenas o servidor e a máquina. |
npm run subir -- --sem-docker | Não mexe nos contêineres. |
npm run subir -- --parar | Derruba somente o que o comando subiu. |
Para subir apenas o Orquestrador:
npm run orchestrator
O painel fica disponível em http://localhost:8080, ou na porta definida em NEXO_PORT.
Importante: sem a variável NEXO_MASTER_KEY, o servidor gera uma chave temporária e avisa na subida. Ao reiniciar, todas as credenciais do cofre ficam ilegíveis. Em uso real, defina sempre uma chave fixa. Veja Cofre e credenciais.
Variáveis do arquivo .env
Nenhuma variável é obrigatória para a primeira subida, mas os avisos exibidos pelo servidor devem ser lidos. As principais são:
Variável | Para que serve |
|---|---|
NEXO_HOST | Endereço em que o servidor escuta. O padrão do servidor é 0.0.0.0; o .env.exemplo usa 127.0.0.1. |
NEXO_PORT | Porta do servidor. Padrão 8080. |
NEXO_DATA_DIR | Pasta dos dados quando o armazenamento é em arquivo. Padrão .nexo-data/orchestrator. |
NEXO_DATABASE_URL | Endereço do PostgreSQL. Quando definida, os dados passam a ser gravados no banco. |
NEXO_MASTER_KEY | Chave mestra do cofre, com pelo menos 16 caracteres. |
NEXO_ENCRYPT_AT_REST | Com valor true, cifra no armazenamento os argumentos e saídas de job e os payloads de fila. |
NEXO_TOKENS | Tokens de acesso por ambiente, no formato token:sujeito:kind:papel:pasta1\|pasta2. |
NEXO_SESSION_TTL_MINUTES | Duração da sessão do painel, em minutos. Padrão de 8 horas. |
NEXO_ALERT_WEBHOOK | Endereço que recebe os alertas padrão. Veja Alertas e webhooks. |
NEXO_REQUIRE_SIGNATURE | Exigência de assinatura de pacote: never, prod ou always. Veja Ciclo de vida e promoção. |
Nota: as variáveis também aceitam o prefixo CITSMART_ como apelido. Quando as duas formas existem, a variável NEXO_ prevalece.
Entrar no painel
O servidor decide qual caminho de entrada oferecer.
Entrar com token de identidade
Em instalações sem provedor de identidade, a tela de entrada exibe o campo “Token de identidade”.
Para entrar com token é necessário:
- Acessar o endereço do painel no navegador.
- Colar o token recebido no campo “Token de identidade”.
- Selecionar o botão “Entrar”.
O token é trocado por uma sessão e não fica guardado no navegador. Ele pode ser o token de bootstrap definido em NEXO_TOKENS ou o token de uma identidade criada pela administração.
O formato de NEXO_TOKENS é:
NEXO_TOKENS="tkAna:ana:user" # admin, todas as pastas
NEXO_TOKENS="tkJoao:joao:user:operador:fld_a1b2c3" # operador de uma pasta
Nota: quando o papel é omitido, o token é de administração. Esse é o token que cria as demais identidades.
Entrar com a conta da empresa
Quando o servidor tem um provedor de identidade configurado (OIDC, como o Keycloak ou o Microsoft Entra ID), a tela de entrada exibe um botão com o texto “Entrar com a conta da empresa”, ou o texto definido em NEXO_OIDC_LABEL. Nesse caso o campo de token não é exibido.
Para configurar o provedor é necessário definir:
Variável | Para que serve |
|---|---|
NEXO_OIDC_ISSUER | Endereço do provedor. Aceita o endereço de autorização colado do provedor, com ?client_id=. |
NEXO_OIDC_CLIENT_ID | Identificador do cliente. Dispensável quando já vem no endereço do provedor. |
NEXO_OIDC_CLIENT_SECRET | Segredo do cliente. Opcional: sem ele, o cliente é tratado como público (PKCE). |
NEXO_OIDC_REDIRECT_URI | Endereço de retorno, por exemplo https://orquestrador.empresa.com.br/api/auth/oidc/callback. |
NEXO_OIDC_ROLE_MAP | Mapa de grupo do provedor para papel, em JSON. |
NEXO_OIDC_FOLDER_MAP | Mapa de grupo do provedor para pasta, em JSON. |
NEXO_OIDC_GROUPS_CLAIM | Caminho do campo que traz os grupos no token, quando não é o padrão. |
NEXO_OIDC_DEFAULT_ROLE | Papel de quem não pertence a nenhum grupo mapeado. Sem esta variável, o papel é auditor. |
NEXO_OIDC_SCOPES | Escopos solicitados. Com offline_access, a renovação da sessão consulta o provedor. |
Importante: sem NEXO_OIDC_ROLE_MAP, vale o padrão: quem pertence ao grupo Administradores, Administrators, admin ou admins entra como administrador. Quem controla esse grupo no provedor controla o acesso total ao Orquestrador. O servidor anuncia essa regra na subida. Declare a variável para mudar o padrão, ou declare {} para que nenhum grupo vire papel.
Sessão, identidade e saída
Depois de entrar, o rodapé do menu lateral mostra o nome, o papel e o escopo de pastas da pessoa, por exemplo “docs · admin · todas as pastas”. Ao passar o ponteiro sobre o papel, a tela informa os grupos recebidos do provedor, o que ajuda quando o papel não é o esperado.
Para encerrar a sessão é necessário selecionar o botão “sair”. A sessão é encerrada no servidor, e não apenas apagada do navegador. Quem administra pode consultar as sessões abertas e encerrá-las pela API (GET /api/auth/sessions e POST /api/auth/sessions/:id/revoke).
Nota: quando nenhum token de ambiente e nenhuma identidade de usuário estão cadastrados, o servidor fica aberto e todo acesso é de administração. Esse modo serve apenas para o primeiro contato, em ambiente local. Criar a primeira identidade de usuário fecha o acesso.
Armazenamento dos dados
Por padrão, os dados ficam em arquivos na pasta de dados, o que atende a uma instalação pequena. Para volume maior, defina NEXO_DATABASE_URL.
Para migrar uma instalação que já tem dados em arquivo para o PostgreSQL é necessário:
- Executar a simulação:
- Executar a migração:
- Subir o servidor com NEXO_DATABASE_URL definida.
A migração confere os registros copiados antes de informar sucesso, e a pasta de dados original permanece intacta.
Importante: a cifra em repouso (NEXO_ENCRYPT_AT_REST=true) torna os campos cifrados não consultáveis, e a perda da chave mestra passa a significar a perda desses dados. Desligá-la depois de ligada torna ilegível o que já foi gravado cifrado.
Mais de um servidor
É possível subir dois servidores Orquestradores sobre o mesmo banco. Apenas um deles, o líder, executa os trabalhos de fundo (agendamentos, varredura de gatilhos e avanço das orquestrações), o que evita disparos duplicados. Se o líder para normalmente, o outro assume em segundos; se o líder cai de forma abrupta, a troca leva cerca de 18 segundos.
Esse modo exige PostgreSQL. Com armazenamento em arquivo, dois servidores não enxergam as gravações um do outro, e o servidor avisa na subida.
O endereço /health informa qual nó é o líder e não exige credencial, o que o torna adequado para balanceadores e monitoramento.
Próximos passos
- Registrar máquina
- Auditoria e segurança
Operação
Nesta funcionalidade é possível acompanhar, em uma única tela, o que está acontecendo na plataforma: os alertas abertos, a situação da frota de máquinas, as execuções das últimas 24 horas, as filas de trabalho, os pedidos de aprovação pendentes e a integridade da trilha de auditoria.
A funcionalidade pode ser acessada através do menu de navegação: Agora > Operação.

A tela é atualizada sozinha a cada 5 segundos, e o horário da última atualização aparece no canto superior direito, ao lado do texto “atualizado”. A atualização é suspensa enquanto há um campo em edição na tela.
Nota: as seções Infraestrutura de TI, Integração, Orquestrações, Inteligência artificial e Governança só aparecem quando há conteúdo a exibir, ou quando o papel da pessoa permite vê-las. A seção Governança, por exemplo, aparece apenas para quem pode ler a trilha de auditoria.
Alertas abertos
A seção “Alertas abertos” é a primeira da tela porque lista o que exige ação. Cada alerta mostra:
- a mensagem, por exemplo “Fila 'notas-fiscais' com 124 itens pendentes (limite 100)”;
- o nome da regra que disparou, a data e a hora;
- a indicação “webhook não entregue”, com o motivo, quando o aviso não chegou ao canal configurado.
A faixa colorida à esquerda indica a severidade: vermelha para crítico e âmbar para aviso.
Para reconhecer um alerta é necessário:
- Analisar a mensagem e tratar a causa.
- Selecionar o botão “OK” do alerta.
O alerta reconhecido deixa de aparecer na lista. As regras que geram os alertas estão descritas em Alertas e webhooks.
Abaixo dos alertas pode aparecer uma faixa de aviso informando que máquinas online não conseguem automatizar interface, porque a tela está bloqueada ou a máquina está na Sessão 0 do Windows. Os jobs de desktop não são despachados para essas máquinas.
Frota
A seção “Frota” reúne os indicadores principais:
Indicador | O que mostra |
|---|---|
robôs | Total de máquinas registradas. |
disponíveis | Máquinas prontas para receber um job. |
ocupados | Máquinas executando um job. |
offline | Máquinas sem sinal. |
jobs rodando | Execuções em andamento. |
na fila | Jobs aguardando uma máquina. |
esperando pessoa | Jobs parados aguardando uma decisão humana. |
falhas 24h | Jobs com falha nas últimas 24 horas. |
sucesso 24h | Percentual de sucesso nas últimas 24 horas. |
itens em fila | Itens de fila pendentes. |
Nota: o indicador rotulado “robôs” conta as máquinas registradas, e não os robôs publicados.
Os cartões mudam de cor quando exigem atenção: verde para situação saudável, âmbar para atenção e vermelho para problema.
Últimas 24 horas
O gráfico “Últimas 24 horas” mostra, hora a hora, as execuções com sucesso e as com falha. Ao passar o ponteiro sobre uma coluna, a tela informa a hora e as quantidades.
Jobs esperando
Quando há jobs pendentes, a seção “Jobs esperando” mostra, para cada robô, quanto tempo o job está esperando e por quê. Os motivos possíveis são:
Motivo exibido | Significado |
|---|---|
todas as máquinas compatíveis já estão no limite de jobs simultâneos | Há máquinas aptas, mas todas ocupadas. |
nenhuma máquina online tem as capacidades exigidas | Falta uma máquina com navegador, desktop, Excel ou outra capacidade que o robô exige. |
nenhuma máquina pertence aos grupos exigidos pelo robô | O robô exige um grupo de afinidade que nenhuma máquina tem. |
as máquinas estão com a tela bloqueada ou em Sessão 0 | O robô precisa de interface e nenhuma máquina permite. |
o robô atingiu o limite de execuções simultâneas | O limite de execuções do próprio robô foi alcançado. |
o job está reservado para uma máquina específica que não está disponível | O job só pode rodar em uma máquina determinada. |
não há nenhuma máquina online | Toda a frota está sem sinal. |
Robôs (7 dias) e Máquinas
As duas tabelas lado a lado resumem a última semana.
A tabela “Robôs (7 dias)” tem as colunas:
Coluna | O que mostra |
|---|---|
Robô | Nome, versão e identificador (clique no identificador para copiá-lo). O erro mais frequente aparece abaixo do nome. |
Estágio | DEV, HOMOLOG ou PROD. |
Exec. | Quantidade de execuções. |
Sucesso | Percentual de execuções bem-sucedidas. |
Médio | Duração média. |
p95 | Duração abaixo da qual ficam 95% das execuções. |
SLA | Percentual de execuções dentro da duração esperada, quando o robô declara uma. |
A tabela “Máquinas” tem as colunas Máquina (nome e computador), Estado, Jobs 24h (com o número de falhas entre parênteses) e Utilização (percentual com barra; acima de 85% a barra fica âmbar).
Filas
A seção “Filas” aparece quando existem filas e mostra, por fila: Pendentes, Em processo, Sucesso, Falha, Lead time, Vazão/h, Mais antigo e Esvazia em (estimativa de esvaziamento). Veja Filas.
O que o histórico sugere
Quando o histórico de execuções indica uma oportunidade ou um problema recorrente, a seção “O que o histórico sugere” lista o impacto (alto, médio ou baixo), o achado, a evidência e o que fazer.
Esperando uma pessoa
A seção “Esperando uma pessoa” lista as tarefas humanas pendentes, com o robô de origem, a quem a tarefa é dirigida, os desfechos possíveis, o tempo de espera e o prazo. As tarefas atrasadas são destacadas. Quem responde as tarefas usa a tela Tarefas.
Ciclo de vida
A seção “Ciclo de vida” mostra:
- a tabela de pedidos de promoção que aguardam decisão, com o pacote, a transição (por exemplo HOMOLOG para PROD), o solicitante, as aprovações reunidas, a evidência de execuções e a observação;
- os contadores “em DEV”, “em HOMOLOG”, “em PROD” e “em RETIRED”;
- o contador “aguardando aprovação”;
- o contador de pacotes em PROD assinados, com a exigência de assinatura em vigor.
Quando há pacotes em PROD sem assinatura verificável, uma faixa de aviso os lista. Veja Ciclo de vida e promoção.
Infraestrutura de TI
Aparece quando existe inventário de hosts. Mostra os hosts no inventário, os grupos, os hosts sem contato e os hosts com desvio. Um desvio é encontrado por uma execução de conferência, que não aplica nenhuma alteração: quem decide corrigir é uma pessoa.
Integração
Aparece quando há assinantes de evento ou chaves de API. Mostra os assinantes de evento, os desativados, as entregas na fila, as entregas desistidas, as chaves de API válidas, as chaves que atingiram a cota nos últimos 15 minutos e os tokens de máquina vencendo. Veja Alertas e webhooks.
Orquestrações
Aparece quando há execuções de orquestração em andamento ou reprovadas nas últimas 24 horas. Mostra, para cada execução aberta, o início, a contagem de nós por situação e o que cada nó está esperando. Os detalhes estão em Orquestrações.
Inteligência artificial
Aparece quando há provedores de IA cadastrados. Mostra, por provedor, o tipo, os modelos, se o dado sai da rede, o resultado da última sonda e o último uso, além de chamadas, tokens e custo estimado. O cadastro de provedores é tratado no módulo IA.
Retenção e mascaramento
Mostra por quantos dias são mantidos o log de execução, o argumento de job e o payload de fila, se o log é mascarado na ingestão e quantos valores já foram mascarados. Quando existe uma varredura de retenção, a tela informa o que foi removido na última execução. A trilha de auditoria não tem retenção. Veja Auditoria e segurança.
Governança
Aparece para quem pode ler a trilha de auditoria. Mostra o número de entradas e informa que a corrente está íntegra, seguido das ações recentes (quando, quem, ação, alvo e desfecho).
Importante: quando a trilha for alterada fora do Orquestrador, a seção exibe a mensagem “Trilha de auditoria ALTERADA fora do Orchestrator”, com a sequência em que o rompimento foi detectado. Trate como incidente antes de confiar no histórico.
Execuções recentes
A última seção lista as execuções mais recentes com o robô, o estado, a máquina, a duração, o horário e a mensagem de erro, quando há.
Robôs
Nesta funcionalidade é possível consultar os robôs publicados no Orquestrador, executar um robô na máquina de um usuário com a autorização dele e remover a publicação de uma versão.
A funcionalidade pode ser acessada através do menu de navegação: Agora > Robôs.

Cada robô aparece em um cartão com:
Informação | O que mostra |
|---|---|
Nome e versão | Nome do robô e a versão mais recente publicada, por exemplo v1.261019.676. |
Estágio | DEV, HOMOLOG ou PROD. Veja Ciclo de vida e promoção. |
assinado | Aparece quando o pacote tem assinatura digital. Ao passar o ponteiro, a tela mostra a impressão digital da chave. |
Número de versões | Aparece quando o robô tem mais de uma versão publicada, por exemplo “3 versoes”. |
Identificador | Código do robô (por exemplo proc_di6im9…). Ao selecioná-lo, o identificador completo é copiado. É ele que um gatilho, um agendamento ou uma chamada de API usam para disparar o robô. |
publicado / por | Data e hora da publicação e quem publicou. |
exige | Capacidades que a máquina precisa ter, por exemplo windows. |
tela | “precisa de sessao interativa”, quando o robô automatiza a interface e exige uma sessão aberta. |
A lista exibe somente a versão mais recente de cada nome. As versões anteriores continuam existindo e são contadas ao lado do nome.
Para localizar um robô é necessário:
- Digitar parte do nome ou da descrição no campo “Filtrar N publicacao(oes)”.
Nota: a lista é atualizada a cada 30 segundos. Quando nenhum robô foi publicado, a tela informa que a publicação é feita pelo Studio. O desenho e a publicação de robôs estão descritos no módulo Studio.
Executar um robô na máquina do usuário
Esta é a execução assistida: alguém está em contato com o operador e precisa que o robô execute no computador dela, naquele momento. Diferente de uma máquina registrada, que recebe trabalho de forma contínua e sem ninguém presente, a execução assistida só acontece com a autorização da pessoa, dada por um código.
O código é gerado pelo aplicativo CITSmart RPA Client, que a pessoa abre no computador. O código:
- é falado em voz alta pela pessoa ao operador;
- é de uso único e vence em poucos minutos;
- representa o consentimento para aquela execução, naquela máquina;
- fecha a sessão depois de três tentativas erradas.
Ao final da execução, a sessão volta a aguardar com um código novo.
Para executar um robô na máquina de um usuário é necessário:
- Solicitar à pessoa que abra o CITSmart RPA Client e informe o código exibido na tela dele.
- Localizar o robô e selecionar o botão “Executar na maquina do usuario”.
- No painel que se abre, escolher a sessão no campo “Maquina”. A lista mostra apenas as sessões que estão aguardando, com o nome do computador, o usuário e o tempo restante do código.
- Digitar o código no campo “Codigo que a pessoa ditou”, no formato XXXX-XXXX.
- Preencher, se o robô exigir, o campo “Argumentos (JSON, opcional)”, por exemplo {"numero":"NF-1"}.
- Selecionar o botão “Executar”.
Quando a execução é despachada, a tela informa a máquina e o identificador do job. Para desistir, selecione o botão “Cancelar”.
Nota: se nenhuma sessão estiver aguardando, o painel informa “Nenhuma sessao aguardando” e orienta a pessoa a abrir o CITSmart RPA Client primeiro. Se os argumentos não forem um JSON válido, a tela informa o erro antes de despachar.
Importante: executar um robô exige a permissão de disparar jobs. Papéis sem essa permissão, como auditor e revisor, não conseguem concluir a ação.
Remover a publicação de uma versão
Remover a publicação apaga a versão escolhida do catálogo. O histórico de execuções permanece, pois cada execução guarda o nome, a versão e o hash copiados.
Para editar um robô não é necessário remover nada: abra o robô no Studio, altere e publique uma nova versão. A versão anterior continua existindo.
Para remover a publicação de uma versão é necessário:
- Selecionar o botão “Remover publicacao” no cartão do robô. A tela confere o que depende dessa versão.
- Ler o resultado da conferência.
- Selecionar o botão “Remover ” para confirmar, ou “Cancelar” para desistir.
A remoção é recusada, com a indicação da saída para cada caso, quando:
Impedimento | Saída indicada |
|---|---|
A versão está em PROD. | Aposentar a versão primeiro (RETIRED), o que é reversível e fica na trilha. |
Há jobs ainda dependendo dela, inclusive suspensos esperando uma pessoa. | Esperar os jobs terminarem, pará-los, ou responder ou cancelar as tarefas pendentes. |
Há gatilhos apontando para ela. | Apontar os gatilhos para outra versão ou desligá-los. |
Há agendamentos que a usam. | Ajustar ou desligar o agendamento. |
Quando a remoção é possível, a tela pode exibir avisos, como o número de execuções do histórico que continuam registradas, ou que a versão está em HOMOLOG e alguém pode estar testando com ela.
Nota: a remoção só é aceita para quem tem a permissão de excluir robôs, que o papel autor possui e o operador não.
Orquestrações
Nesta funcionalidade é possível acompanhar as execuções de orquestração, isto é, o encadeamento de robôs com dependência entre eles. A tela mostra o estado de cada nó, o prazo projetado, o caminho crítico e permite simular o efeito de um atraso.
Uma orquestração descreve, por exemplo: “rodar o faturamento e a conciliação; quando os dois terminarem, emitir a nota; se o faturamento falhar, avisar o plantão; depois, de qualquer jeito, rodar a limpeza”. A orquestração é desenhada e publicada pelo Studio (veja o módulo Studio).
A funcionalidade pode ser acessada através do menu de navegação: Agora > Orquestrações.

Enquanto não houver execuções, a tela informa “Nenhuma execução de plano ainda” e indica o caminho para disparar uma, que é a chamada POST /api/plans/:id/run. A tela é atualizada a cada 5 segundos.
Consultar as execuções
A lista “Execuções de plano” mostra as 25 execuções mais recentes. Cada linha traz:
Informação | O que mostra |
|---|---|
Nome e versão | A orquestração executada. |
Estado | Running, Successful, Faulted ou outro estado de encerramento. |
segura por | Aparece quando a execução foi segurada por alguém. |
Contagem de nós | Quantos nós estão ok, rodando, esperando, falho ou pulado. |
Identificador e datas | Identificador da execução, início, término e, quando é uma sub-orquestração, a execução de origem. |
Para abrir os detalhes de uma execução é necessário:
- Selecionar a linha da execução. Selecionar novamente a mesma linha recolhe os detalhes.
Detalhes de uma execução
Prazo
A faixa de prazo informa o veredito da execução:
Veredito | Significado |
|---|---|
No prazo | A projeção termina antes do prazo declarado. |
Em risco | A folga ficou menor que a janela de aviso da orquestração. Ainda dá tempo de agir. |
Vai furar o prazo | A projeção termina depois do prazo. |
Furou o prazo | A execução terminou depois do prazo. |
A faixa mostra também o prazo, o horário projetado de término, a folga ou o atraso em minutos e o gargalo (o nó que mais pesa no caminho). Quando a orquestração não declara prazo, a tela informa o tempo que ainda falta e o gargalo.
A projeção usa a duração histórica de cada nó. Quando há nós sem histórico, uma faixa de aviso informa que a duração deles é um valor padrão e que a projeção vale menos por isso.
Grafo
O grafo desenha os nós em colunas, cada um depois de todos os nós de que depende. Cada nó mostra o nome, o tipo (quando não é um robô), o estado e as marcas SEGURO e opcional. A cor da faixa à esquerda do nó indica o estado:
Estado | Significado |
|---|---|
Successful | Concluído com sucesso. |
Faulted | Falhou. |
Running | Em execução. |
Pending | Esperando as dependências. |
Skipped | Descartado porque a condição de que dependia não ocorreu. |
Cancelled | Cancelado. |
Ready | Liberado para executar. |
Os nós e as ligações do caminho crítico são destacados em roxo. Uma ligação tracejada em vermelho indica uma dependência por falha, isto é, um nó que só executa se o anterior falhar.
Para ver os detalhes de um nó é necessário:
- Selecionar o nó no grafo.
O painel de detalhes mostra o identificador do nó, o tipo, o estado, onde o nó deveria executar e em qual máquina executou, os hosts afetados (quando o nó age sobre hosts), o job, a sub-execução, a tarefa humana (com link para Tarefas), a duração prevista e a origem dessa previsão, o início, o motivo (quando o nó está parado) e a intervenção feita por alguém, se houver.
Simular um atraso
A simulação responde “e se este nó atrasar 20 minutos?” sem alterar nada na execução.
Para simular um atraso é necessário:
- Escolher o nó no campo ao lado de “simular atraso:”.
- Informar o atraso, em minutos, no campo “min”.
- Selecionar o botão “aplicar”.
A faixa de prazo e o caminho crítico passam a refletir o cenário, que aparece ao lado, por exemplo “cenário: emitir-nf +20min”. Para voltar à projeção real, selecione o botão “limpar”.
Intervir em uma execução
A tela não oferece botões de intervenção. Quem opera uma execução em andamento usa a API, com as permissões de operação:
Operação | Chamada | Para quê |
|---|---|---|
Segurar a execução | POST /api/plan-runs/:id/hold | Impede que novos nós entrem na fila enquanto se investiga. Os jobs em andamento continuam. |
Liberar a execução | POST /api/plan-runs/:id/release | Retoma de onde parou. |
Cancelar a execução | POST /api/plan-runs/:id/cancel | Encerra a execução. |
Operar nós | POST /api/plan-runs/:id/nodes/operate | Aplica uma operação a um ou mais nós. |
A chamada de operação de nós aceita segurar, liberar, reexecutar, forcar-sucesso e contornar:
Operação | Efeito | Quando usar |
|---|---|---|
segurar | Não deixa o nó entrar na fila, mesmo liberado. | Investigar sem que o nó execute. |
liberar | Desfaz o segurar. | Retomar o nó. |
reexecutar | Volta o nó a pendente e o executa de novo. | O problema foi corrigido (por exemplo, o ERP voltou). |
forcar-sucesso | Marca o nó como bem-sucedido sem executar, e continua o fluxo. | O passo foi resolvido fora do sistema. |
contornar | Marca o nó como pulado, abandonando o ramo. | O ramo não faz sentido nesta execução. |
Exemplo, reexecutando todos os nós que falharam:
curl -X POST http://localhost:8080/api/plan-runs/$EXECUCAO/nodes/operate \
-H "authorization: Bearer $TOKEN" -H 'content-type: application/json' \
-d '{"operation":"reexecutar","onlyFailed":true,"reason":"ERP restabelecido"}'Nota: a chamada exige nodeIds (lista de nós) ou onlyFailed: true. O campo withDescendants: true estende a operação ao ramo inteiro. Um nó em execução não aceita operação: para interrompê-lo, pare o job. Quem interveio e o motivo ficam registrados no próprio nó e na trilha de auditoria.
Importante: forcar-sucesso e contornar parecem próximas e são opostas. A primeira continua o fluxo como se o passo tivesse dado certo; a segunda abandona o ramo.
Observações
Nota: uma orquestração só é publicada se for válida. Ciclos, dependências para nós inexistentes e nós sem robô são recusados na publicação, e o ciclo é informado com o caminho completo.
Nota: um nó marcado como opcional que falha não reprova a orquestração.
Tarefas
Nesta funcionalidade é possível responder às tarefas humanas, isto é, os pontos em que uma automação parou para esperar a decisão de uma pessoa, como a aprovação de um pagamento acima da alçada ou a conferência de um documento lido com baixa confiança.
A funcionalidade pode ser acessada através do menu de navegação: Agora > Tarefas.

A tela “Minhas tarefas” é separada do painel de operação porque o uso é diferente: o painel serve para acompanhar a frota, e esta tela serve para trabalhar. Ela tem cabeçalho próprio, com a identidade de quem está conectado e o botão “sair”, e exibe uma tarefa por vez em um cartão.
A tela lista as tarefas pendentes dirigidas à própria pessoa, ao papel dela ou a ninguém em particular. Quando não há nenhuma, informa “Nada esperando você agora”. A lista é atualizada a cada 15 segundos, exceto enquanto a pessoa digita em um campo.
Entender uma tarefa
Cada cartão mostra:
Informação | O que mostra |
|---|---|
Título | O que precisa ser decidido. Aparece a marca “atrasada” quando o prazo venceu. |
Linha de contexto | Nome do robô, identificador do job, data de criação e prazo. |
Descrição | Texto explicativo definido pelo autor do robô. |
O que a automação leu | Tabela com os dados que o robô coletou e que embasam a decisão. |
Campos do formulário | Informações que a pessoa precisa preencher. Os campos obrigatórios têm um asterisco. |
Botões | Os desfechos possíveis, como “aprovar” e “rejeitar”. Quando o robô não define desfechos, o botão é “Confirmar”. |
Responder uma tarefa
Para responder uma tarefa é necessário:
- Ler o título, a descrição e a tabela “O que a automação leu”.
- Preencher os campos do formulário, quando existirem.
- Selecionar o botão com o desfecho escolhido.
Se algum campo obrigatório estiver vazio, a tela informa “Preencha:” seguido do nome dos campos e não registra a resposta. Quando a resposta é aceita, a tela informa “Registrado:” com o desfecho, e o job volta para a fila e continua de onde parou.
Nota: a retomada não repete o que já foi concluído. Os passos anteriores do robô são reaplicados do diário de execução, e não executados de novo. O robô fica livre enquanto a tarefa espera, de modo que uma resposta que leve dias não ocupa nenhuma máquina.
Nota: a resposta é registrada na trilha de auditoria com quem decidiu, o desfecho e o que foi preenchido.
Importante: responder exige a permissão de responder tarefas, que os papéis operador, revisor e admin possuem. Para quem não a tem, a tela exibe a mensagem “O papel ... não tem a permissão task:answer. Você vê as tarefas, mas não pode respondê-las.” e os botões ficam desabilitados.
Tarefas atrasadas
Uma tarefa tem prazo quando o autor do robô define um. Depois do prazo, o cartão recebe a marca “atrasada”, e a seção “Esperando uma pessoa” da tela Operação destaca a tarefa. A regra de alerta human-task-overdue avisa o canal configurado quando há tarefas fora do prazo. Veja Alertas e webhooks.
Cancelar uma tarefa
A tela não oferece o cancelamento. Quem tem a permissão de gerir tarefas (operador e admin) cancela pela API, com POST /api/human-tasks/:id/cancel. O cancelamento também devolve o job à fila, e na retomada ele termina como falha de negócio explicada, em vez de ficar suspenso para sempre.
Um robô que tem tarefas pendentes não pode ter a publicação removida. Veja Robôs.
Falhas
Nesta funcionalidade é possível descobrir o que mais quebra na operação. A tela agrupa as falhas de execução que têm a mesma causa, mostra quantas vezes cada defeito ocorreu, em quais robôs e quando foi a última ocorrência, e permite pedir uma hipótese de causa à inteligência artificial.
A funcionalidade pode ser acessada através do menu de navegação: Entender > Falhas.

Tela Falhas com os defeitos mais frequentes do período
Como as falhas são agrupadas
A mensagem de erro de um job quase nunca se repete literalmente, porque carrega identificadores, números de documento, datas e caminhos de arquivo. Para que doze ocorrências do mesmo defeito não apareçam como doze defeitos diferentes, o Orquestrador reduz cada mensagem à sua forma, a assinatura, e agrupa as falhas que têm a mesma assinatura.
Esse agrupamento é um cálculo sobre o histórico e não usa IA.
Escolher o período
Para escolher o período de análise é necessário:
- Selecionar um dos botões ao lado de “período:”: “24h”, “7 dias”, “30 dias” ou “90 dias”. O período selecionado fica destacado.
Indicadores
Dois cartões resumem o período:
Cartão | O que mostra |
|---|---|
falha(s) no período | Total de execuções que terminaram com falha. |
defeito(s) distinto(s) | Quantidade de assinaturas diferentes entre essas falhas. |
O que mais quebra
A seção “O que mais quebra” lista os defeitos, do mais frequente ao menos frequente. Cada linha mostra:
Informação | O que mostra |
|---|---|
N× | Quantas vezes o defeito ocorreu no período. |
Mensagem | Um exemplo da mensagem de erro. |
Robôs | Os robôs em que o defeito ocorreu. |
Passos | Os nós ou passos em que o erro aconteceu, quando conhecidos. |
N robô(s) | Em quantas máquinas o defeito apareceu. |
última | Data e hora da última ocorrência. |
Padrão de horário | Aviso, em âmbar, quando o defeito se concentra em uma faixa de horário. |
Quando não há falhas, a tela informa “Nenhuma falha neste período.” A tela é atualizada a cada 15 segundos.
Ver os detalhes de um defeito
Para ver os detalhes é necessário:
- Selecionar a linha do defeito. Selecionar novamente a recolhe.
A área aberta mostra a assinatura do defeito e a lista dos jobs que falharam, com o complemento “+N outros” quando há mais jobs do que os exibidos.
Diagnosticar com IA
A IA lê o log da falha mais recente do grupo e propõe uma hipótese e um próximo passo. Ela não corrige, não reexecuta e não fecha alertas. Cada diagnóstico usa uma chamada ao modelo e, por isso, tem custo; o resultado fica guardado no job.
Para diagnosticar um defeito é necessário:
- Abrir os detalhes do defeito.
- Selecionar o botão “diagnosticar com IA”.
- Aguardar o fim do texto “diagnosticando…”.
O diagnóstico mostra:
Campo | O que mostra |
|---|---|
Hipótese | A causa provável. Aparece “guardada” quando vem de um diagnóstico anterior. |
Evidências | Os fatos do log e do histórico que sustentam a hipótese. |
Próximo passo | A ação sugerida. |
Rodapé | A categoria, a confiança (alta, média ou baixa), o modelo usado, o custo, a data e o material analisado (linhas de log e ocorrências no período). |
Para pedir uma nova opinião é necessário:
- Selecionar o botão “diagnosticar de novo”.
Nota: o diagnóstico depende de um provedor de IA e de uma rota para a finalidade diagnostico. Quando eles não existem, a tela informa “Não foi possível diagnosticar” e orienta o cadastro. A configuração de provedores e rotas é tratada no módulo IA.
Relação com o Agente
Para falhas em nós de uma orquestração, o agente de remediação pode propor uma ação corretiva. Veja Agente.
Agente
Nesta funcionalidade é possível acompanhar o agente de remediação, que observa a operação, identifica problemas conhecidos e propõe uma ação corretiva. A pessoa aprova ou recusa cada proposta, a menos que a política da instalação autorize o agente a executar sozinho as ações de menor risco.
A funcionalidade pode ser acessada através do menu de navegação: Entender > Agente.

Tela Agente com a autonomia, as propostas e o catálogo de ações
A tela é atualizada a cada 15 segundos.
Como o agente decide
O agente segue quatro regras:
- Propõe antes de agir. Por padrão, nenhuma ação roda sozinha; a proposta espera uma pessoa.
- O catálogo é fechado. O agente só pode executar as ações listadas na tela, e o risco de cada ação é declarado no catálogo, e não deduzido.
- A ação irreversível nunca roda sozinha. Essa regra vale para qualquer configuração de autonomia.
- Toda proposta traz a evidência. A proposta mostra o sintoma observado, as ocorrências anteriores e, quando existe, quantas vezes a mesma ação resolveu o mesmo caso antes.
Um sintoma desconhecido vira “Avisar o plantão”, e não é ignorado.
Autonomia
A faixa no topo da tela mostra a política em vigor, por exemplo “Autonomia: nenhuma”, com o texto explicativo:
Autonomia | Efeito |
|---|---|
nenhuma | O agente propõe e espera. Nada roda sozinho. É o padrão. |
seguras | O agente executa sozinho o que é seguro e propõe o resto. |
reversiveis | O agente executa sozinho o que é seguro e o que é reversível, e propõe o irreversível. |
A autonomia é definida em remediacao na política da instalação, e pode ser definida por pasta em remediacaoPorPasta, porque as áreas não correm o mesmo risco. A política também aceita maxPorHora (teto de ações automáticas por hora e por pasta, padrão 6) e bloqueadas (ações que nunca rodam sozinhas naquela pasta). Para alterar a política é necessário usar PUT /api/policy, com o papel admin:
curl -X PUT http://localhost:8080/api/policy \ -H "authorization: Bearer $TOKEN" -H 'content-type: application/json' \ -d '{"remediacao":{"autonomia":"seguras","maxPorHora":6}}'
Importante: ligar a autonomia é a mudança de política de maior efeito, porque a plataforma passa a agir em produção sem uma pessoa. A mudança fica registrada na trilha de auditoria. Recomenda-se ligar a autonomia somente depois de ler algumas propostas e concluir que elas fazem sentido.
Esperando você
A seção “Esperando você (N)” lista as propostas que aguardam decisão. Cada proposta mostra:
Informação | O que mostra |
|---|---|
Título da ação e risco | Por exemplo “Reexecutar o nó”, com a marca seguro, reversivel ou irreversivel. |
Tempo | Há quanto tempo a proposta foi criada. |
Sintoma | O que o agente observou. |
Lista de motivos | Evidências, como “este mesmo sintoma já apareceu 3 vez(es)” e “resolveu 7 de 8 vez(es) neste mesmo caso”. |
esperando porque | O motivo de a proposta não ter sido executada sozinha. |
Para decidir uma proposta é necessário:
- Ler o sintoma e os motivos.
- Selecionar o botão “Aprovar e executar” para que a ação seja executada, ou o botão “Recusar”.
- Ao recusar, informar o motivo na janela que se abre. O motivo fica na trilha de auditoria.
Nota: aprovar ou recusar exige a permissão de disparar jobs, que os papéis operador, autor e admin possuem. A recusa não conta como evidência de que a ação não funcionaria; ela só registra que uma pessoa preferiu outro caminho.
O que o agente fez
A seção “O que o agente fez” lista as últimas 30 propostas já decididas, com o resultado e quem decidiu (“o agente” ou o nome da pessoa). Os estados possíveis são aplicada, falhou, recusada e superada.
O que ele PODE fazer
A seção “O que ele PODE fazer” mostra o catálogo completo de ações:
Ação | Risco | O que faz |
|---|---|---|
Reexecutar o nó | seguro | Executa o nó de novo. Serve para falhas passageiras, como o ERP que caiu por um minuto. |
Liberar o recurso preso | seguro | Devolve a reserva de um recurso cujo dono terminou. Serve para a trava que ficou de um job que morreu sem devolver. |
Avisar o plantão | seguro | Envia o alerta com o diagnóstico e o histórico. Não conserta nada. |
Seguir sem o nó opcional | reversível | Marca como pulado um nó declarado opcional que está travando a orquestração. Nó obrigatório não pode ser pulado. |
Desligar o gatilho | reversível | Para um gatilho que está disparando em laço, para conter o estrago enquanto alguém investiga. |
Tirar o robô de circulação | reversível | Marca a máquina como indisponível. A máquina termina o que já pegou e não recebe mais nada. |
Reprocessar a partição inteira | irreversível | Executa de novo toda a janela de dados. Pode reenviar arquivo, refazer lançamento e atingir sistema de terceiro. |
Limites de proteção
O agente tem três limites contra o excesso de propostas:
- uma proposta por combinação de sintoma, alvo e ação, enquanto a anterior estiver aguardando;
- um teto de ações automáticas por hora, por pasta;
- um teto de propostas por ciclo, e a tela informa quando o corte acontece.
O agente observa a janela das últimas seis horas, inclusive execuções já terminadas com falha durante a madrugada.
Quando a ação “Avisar o plantão” é executada, o aviso sai pelo evento agente.proposta, entregue aos assinantes de webhook de saída: o agente não tem canal próprio. Veja Alertas e webhooks.
Valor
Nesta funcionalidade é possível medir quanto a automação devolve à organização. A tela calcula, para o período escolhido, a economia bruta (o trabalho manual que deixou de ser feito), o custo das execuções e o resultado líquido, por robô e por pasta, e mostra ao lado do número tudo o que ainda não foi declarado.
A funcionalidade pode ser acessada através do menu de navegação: Entender > Valor.

Tela Valor com economia líquida, lacunas e tarifas em uso
A tela é atualizada a cada 30 segundos.
Como o número é calculado
- O que não foi declarado não vira economia. O tempo que uma pessoa levaria para fazer o trabalho à mão é o único dado que o produto não consegue medir; por isso ele é declarado por robô. Robô sem esse tempo aparece na lista de pendências e fica fora da economia.
- O custo conta todas as execuções que terminaram, inclusive as que falharam, porque a máquina ficou ocupada do mesmo jeito.
- A economia conta somente as execuções bem-sucedidas, porque a execução que falhou não poupou o trabalho de ninguém.
- O custo de IA vem do registro das chamadas ao modelo, vinculadas ao job, e aparece junto ao custo do robô.
- O retorno (“poupado por real gasto”) fica em branco quando não houve custo.
Escolher o período
Para escolher o período é necessário:
- Selecionar um dos botões de “Periodo”: “7 dias”, “30 dias”, “90 dias” ou “1 ano”.
Indicadores do período
Cartão | O que mostra |
|---|---|
ECONOMIA líquida no período | Economia bruta menos o custo. Quando o resultado é negativo, o cartão passa a se chamar “CUSTO líquido no período”. |
economia bruta | Valor das horas de pessoa poupadas, com o total de horas. |
custo | Custo total das execuções, com o total de horas de máquina. |
poupado por real gasto | Quantas vezes a economia cobre o custo. |
execucoes | Número de execuções no período. |
O que este número ainda não cobre
A faixa “O que este número ainda não cobre” lista o que impede o resultado de ser completo, por exemplo:
- a tarifa da hora de robô não foi informada, e o custo está subestimado;
- o custo da hora de pessoa não foi informado, e a economia não pode ser calculada;
- N processos sem tempo manual declarado ficaram fora da economia, com o nome de cada um.
Cada item é uma tarefa pendente para quem administra. À medida que os dados são declarados, a lista diminui.
Por processo
A tabela “Por processo” detalha cada robô:
Coluna | O que mostra |
|---|---|
Robô | Nome do robô. Quando falta o tempo manual, aparece “falta declarar o tempo manual · nao entra na economia”. |
Execucoes | Número de execuções no período. |
Horas de máquina | Tempo de máquina consumido. |
Custo | Custo total, com o custo de IA em linha separada, quando existe. |
Horas poupadas | Horas de pessoa que a automação evitou. |
Economia | Valor das horas poupadas. |
Resultado | Economia menos custo. Verde quando positivo e vermelho quando negativo. |
Por pasta
Quando a instalação tem mais de uma pasta com execuções, a tabela “Por pasta” mostra, para cada pasta, o número de robôs, as execuções, o custo, a economia e o resultado, com uma barra proporcional. A divisão é feita somente por pasta, a mesma unidade usada para permissão e escopo.
Tarifas em uso
A seção “Tarifas em uso” mostra a tarifa da “hora de máquina” e a da “hora de pessoa (com encargos)”. Enquanto elas não forem informadas, aparece um traço no lugar do valor.
Declarar o tempo manual de um robô
O tempo manual é o tempo que uma pessoa levaria para executar o trabalho uma vez, em minutos. Para declará-lo é necessário usar a API, com um papel que pode publicar robôs (autor ou admin):
curl -X PUT http://localhost:8080/api/processes/$ROBO/manual-time \ -H "authorization: Bearer $TOKEN" -H 'content-type: application/json' \ -d '{"minutosManuais":12,"pessoasPorExecucao":1}'
O campo pessoasPorExecucao é opcional e indica quantas pessoas o trabalho manual exigiria.
Importante: o campo é em minutos. Valores acima de um dia (1440 minutos) por execução são recusados, porque quase sempre são horas digitadas onde se pede minutos.
Informar as tarifas
As tarifas ficam na política da instalação e podem ser alteradas sem reiniciar o servidor. Para informá-las é necessário usar a API, com o papel admin:
curl -X PUT http://localhost:8080/api/policy \ -H "authorization: Bearer $TOKEN" -H 'content-type: application/json' \ -d '{"tarifas":{"horaDeRobo":35,"horaDePessoa":60,"moeda":"BRL"}}'
Nota: tarifa acima de 100 mil por hora é recusada, pelo mesmo motivo do tempo manual. A mudança de tarifa fica registrada na trilha de auditoria, porque dobrar a hora de pessoa dobra a economia declarada.
Nota: os mesmos dados estão disponíveis em formato JSON em GET /api/value?dias=30, para quem quiser montar um relatório próprio.
Máquinas
Nesta funcionalidade é possível consultar as máquinas que executam os robôs, verificar o estado e as capacidades de cada uma e gerar o código de instalação para conectar uma nova máquina.
Uma máquina é o computador onde o agente do CITSmart X está instalado. Ela mantém contato com o Orquestrador por batimentos periódicos e recebe os jobs compatíveis com as capacidades e os grupos dela.
A funcionalidade pode ser acessada através do menu de navegação: Configurar > Máquinas.

Tela Máquinas com a frota registrada
A tela é atualizada a cada 10 segundos.
Consultar a frota
Cada máquina aparece em um cartão com:
Informação | O que mostra |
|---|---|
Nome | Nome da máquina no Orquestrador, por exemplo robo-sp-01. |
Estado | Available (pronta), Busy (executando), Draining (termina o que já pegou e não recebe mais nada) ou Offline (sem sinal). |
tela bloqueada | Aparece quando a automação de interface não consegue rodar naquela máquina. |
maquina | Nome do computador na rede, por exemplo SRV-RPA-SP-01. |
visto | Há quanto tempo a máquina enviou o último sinal. |
agente | Versão do agente instalado. |
grupos | Grupos de afinidade a que a máquina pertence. |
Capacidades | Etiquetas browser, desktop, excel, ocr, pdf, ad e terminal. A etiqueta riscada indica que a máquina não tem aquela capacidade. |
Para localizar uma máquina é necessário:
- Digitar parte do nome no campo “Filtrar N maquina(s)”.
Nota: uma máquina que fica mais de 60 segundos sem enviar sinal passa a Offline. Os jobs que ela executava voltam para a fila. O alerta de máquina sem sinal está descrito em Alertas e webhooks.
Como um job escolhe a máquina
O Orquestrador só entrega um job a uma máquina que atenda a todos os critérios, avaliados do mais simples ao mais custoso:
- a máquina é aquela a que o job foi reservado, quando há reserva;
- a máquina tem as capacidades que o robô exige;
- a máquina pertence a algum dos grupos exigidos pelo robô;
- a sessão da máquina permite automação de interface, quando o robô a exige;
- o robô não atingiu o limite de execuções simultâneas;
- a máquina não atingiu o limite de jobs simultâneos.
Quando nenhuma máquina serve, o motivo aparece na seção “Jobs esperando” da tela Operação.
Adicionar uma máquina
Para adicionar uma máquina é necessário:
- Selecionar o botão “+ Adicionar maquina”.
- Ler o quadro que se abre, com os passos a executar na máquina que vai executar os robôs.
- Copiar o código exibido, com o botão “Copiar”.
- Instalar e registrar o agente na máquina, informando o código quando ele pedir.
- Selecionar o botão “Fechar” no quadro.
O código tem o formato ci_XXXX-XXXX, vale por 30 minutos e serve para uma única máquina. O procedimento completo na máquina está em Registrar máquina.
Códigos esperando instalação
Os códigos gerados que ainda não foram usados aparecem na seção “Codigos esperando instalacao”, com o início do código e o tempo para vencer. Por segurança, o código completo só é exibido no momento da geração.
Para revogar um código é necessário:
- Selecionar o botão “Revogar” na linha do código.
- Confirmar a pergunta “Revogar este codigo?”.
Quem ainda não instalou o agente precisará de um novo código.
Grupos e limite de jobs
Os grupos de afinidade e o limite de jobs simultâneos de cada máquina são definidos pela API, porque a tela só exibe esses dados. Para isso é necessário ter a permissão de gerir máquinas (papéis operador e admin):
curl -X POST http://localhost:8080/api/robot-groups \ -H "authorization: Bearer $TOKEN" -H 'content-type: application/json' \ -d '{"name":"financeiro"}' curl -X POST http://localhost:8080/api/robots/$MAQUINA/groups \ -H "authorization: Bearer $TOKEN" -H 'content-type: application/json' \ -d '{"groups":["financeiro"],"maxConcurrentJobs":2}'
Os grupos também podem ser informados no registro, com a opção --grupos.
Tirar uma máquina de circulação
Uma máquina em Draining termina o job em andamento e não recebe novos. O agente de remediação pode propor essa ação quando uma máquina falha tudo o que recebe. Veja Agente.
Registrar máquina
Nesta funcionalidade é possível conectar um computador ao Orquestrador para que ele passe a executar robôs. O registro troca o código de instalação por uma identidade exclusiva da máquina, de modo que revogar uma máquina não afeta as outras.
O procedimento começa no painel, na tela Máquinas, e termina na própria máquina, pela linha de comando do agente.
Antes de começar
- O Orquestrador deve estar acessível pela rede a partir da máquina. Veja Instalação e acesso.
- Quem gera o código precisa da permissão de gerir máquinas, que os papéis operador e admin possuem.
- A máquina precisa ter o agente do CITSmart X instalado. Os exemplos abaixo usam a linha de comando do projeto (npm run runner --); em uma instalação com o executável nexo, o comando é nexo maquina ....
Gerar o código de instalação
Para gerar o código é necessário:
- Acessar Configurar > Máquinas.
- Selecionar o botão “+ Adicionar maquina”.
- Copiar o código exibido, que tem o formato ci_XXXX-XXXX.
O código vale por 30 minutos e serve para uma única máquina. Depois de usado, ou revogado, ou vencido, não funciona mais.
Registrar a máquina
Na máquina que vai executar os robôs, é necessário:
- Abrir um terminal.
- Executar o comando de registro, informando o endereço do Orquestrador, o código e, opcionalmente, o nome e os grupos:
npm run runner -- maquina registrar --orquestrador http://orquestrador.empresa:8080 --codigo ci_XXXX-XXXX --nome robo-sp-01 --grupos financeiro
- Conferir a mensagem de confirmação, que informa o nome registrado, o identificador da máquina e o endereço do Orquestrador.
As opções do comando são:
Opção | Para que serve |
|---|---|
--orquestrador | Endereço do Orquestrador. Também pode vir da variável NEXO_ORCHESTRATOR. |
--codigo | Código de instalação gerado na tela Máquinas. Também pode vir da variável NEXO_CODIGO. |
--token | Alternativa ao código, para registrar com a credencial de uma pessoa que tenha permissão de registrar máquinas. |
--nome | Nome da máquina no Orquestrador. Por padrão, o nome do computador. |
--grupos | Grupos de afinidade, separados por vírgula. |
--jobs | Quantidade de jobs simultâneos. Por padrão, 1. |
O agente detecta as capacidades da máquina (navegador, desktop, Excel e outras) e as informa no registro. A máquina passa a aparecer na tela Máquinas.
Nota: se uma máquina com o mesmo nome e o mesmo computador já existir, o registro a reaproveita: a identidade é renovada e o histórico é mantido. Quando o código foi gerado com nome ou grupos sugeridos, esses valores prevalecem sobre os informados no comando.
Importante: o agente guarda na máquina a identidade recebida no registro. Ela é renovada automaticamente a cada batimento, e a validade padrão é de 30 dias. Uma máquina que deixa de bater perde o acesso quando o prazo vence, e a tela Operação mostra, na seção Integração, quantos tokens de máquina estão vencendo.
Iniciar o agente automaticamente
Para que o agente inicie sozinho a cada logon no Windows é necessário:
- Executar o comando:
npm run runner -- maquina instalar
Para remover o início automático, use maquina desinstalar. Para controlar o agente instalado, use maquina iniciar e maquina parar. Para consultar o registro e o início automático, use maquina estado.
Nota: o agente roda na sessão interativa do usuário, e não como serviço do Windows, porque os robôs que automatizam interface precisam de uma área de trabalho aberta. Tela bloqueada ou Sessão 0 impedem esse tipo de automação, e a tela Máquinas mostra a marca “tela bloqueada”.
Verificar a máquina
Para verificar se a máquina opera sem assistência é necessário:
- Executar o comando:
npm run runner -- maquina diagnostico
O diagnóstico lista as verificações com os resultados OK, AVISO ou ERRO, e indica o comando que corrige cada problema. As verificações incluem o registro, o início automático, a sessão, a área de trabalho e o navegador. Ao final, ele informa se a máquina está pronta para operação sem assistência.
Confiar apenas em pacotes assinados
Para que a máquina execute somente pacotes assinados por chaves conhecidas é necessário:
- Obter a impressão digital da chave de assinatura. Veja Ciclo de vida e promoção.
- Executar o comando:
npm run runner -- maquina confiar SHA256:...
Sem argumentos, maquina confiar lista as chaves fixadas. Enquanto nenhuma chave estiver fixada, a máquina aceita pacotes sem assinatura.
Importante: fixar as chaves na máquina é o passo que protege contra um Orquestrador comprometido, e não apenas contra um pacote corrompido.
Gatilhos
Nesta funcionalidade é possível cadastrar e acompanhar os gatilhos, que disparam um robô ou uma orquestração quando um evento acontece, em vez de depender de um horário. O Orquestrador oferece três tipos de gatilho:
Tipo | Dispara quando |
|---|---|
Chegada de arquivo | Um arquivo novo aparece em uma pasta observada. |
Fila de mensagem | Chega uma mensagem em uma fila AMQP (RabbitMQ) ou em um tópico Kafka. |
Webhook de entrada | Um sistema externo chama um endereço do Orquestrador, com uma chamada assinada. |
A funcionalidade pode ser acessada através do menu de navegação: Configurar > Gatilhos.

Tela Gatilhos com o formulário Cadastrar gatilho
A tela é atualizada a cada 10 segundos. Quando não há nenhum gatilho, ela informa “Nenhum gatilho cadastrado” e lembra que a operação começa por relógio (agenda) ou por evento (gatilho).
Consultar os gatilhos
Os gatilhos são agrupados na tela. Primeiro vêm os que têm problema, na seção “Com problema (N)”. Depois, os demais, nas seções “Filas de mensagem”, “Webhooks de entrada” e “Chegada de arquivo”, cada uma com a quantidade entre parênteses.
Cada gatilho aparece em um cartão com:
Informação | O que mostra |
|---|---|
Nome e tipo | Nome do gatilho e uma etiqueta com o tipo. |
Situação | desligado, observando, consumindo, conectando, sem conexao, ouvindo, recusando ou com erro, conforme o tipo. |
ultimo disparo | Há quanto tempo o gatilho disparou pela última vez. |
Onde | A pasta e o padrão do arquivo; a fila ou o tópico e o grupo; ou o endereço de webhook assinado. |
Números | Contadores como “jobs criados”, “mensagens”, “descartadas”, “chamadas” e “recusas”. |
Configuração | Valores em vigor, como prefetch, tentativas, janela da assinatura e o que o gatilho dispara. |
Mensagens de problema | “conexao”, “ultima recusa” e “ultimo erro”, com a causa. |
Avisos | Alertas sobre configurações arriscadas, descritos adiante. |
Os botões de cada cartão são “Desligar” (ou “Ligar”), “Esquecer arquivos” (somente em gatilhos de arquivo), “Editar” e “Remover”.
Cadastrar um gatilho
Para cadastrar um gatilho é necessário:
- Acessar Configurar > Gatilhos e localizar o formulário “Cadastrar gatilho”, ao final da tela.
- Preencher o campo “Nome”, com minúsculas, dígitos, ponto, hífen ou sublinhado, por exemplo chegada-de-extrato. O nome não muda depois de criado.
- Escolher o “Tipo”: “Chegada de arquivo”, “Fila de mensagem” ou “Webhook de entrada”. O tipo não muda depois de criado.
- Escolher o que o gatilho “Dispara”: “Um robo” ou “Uma orquestracao”.
- Preencher “Nome ou id do alvo” com o nome ou o identificador do robô ou da orquestração. O alvo precisa existir e não pode estar aposentado.
- Preencher os campos do tipo escolhido, descritos a seguir.
- Selecionar o botão “Cadastrar”.
Se algum dado estiver inválido, a tela exibe a mensagem de erro ao lado do botão.
Nota: o cadastro de gatilhos exige a permissão de escrever agendamentos, que os papéis operador e admin possuem.
Chegada de arquivo
Campo | Para que serve |
|---|---|
Pasta observada | Onde o arquivo chega, por exemplo C:/entrada. |
Padrao do nome | Quais nomes disparam, por exemplo *.csv. |
Mover para (opcional) | Pasta para onde o arquivo é movido depois de disparar. |
Como o gatilho de arquivo funciona:
- O gatilho só dispara depois que o arquivo fica igual (mesmo tamanho e mesma data) por um tempo mínimo, 15 segundos por padrão. Isso evita processar um arquivo ainda em cópia.
- Arquivo vazio não dispara.
- Cada arquivo dispara uma vez. O mesmo nome com conteúdo novo (outro tamanho ou outra data) é tratado como arquivo novo.
- Por ciclo são disparados, no máximo, 20 arquivos, do mais antigo ao mais recente. O que sobra dispara no ciclo seguinte.
- O arquivo chega ao robô como argumento arquivo (caminho completo), além de nomeDoArquivo, diretorio e tamanho.
- Quando “Mover para” é informado, o arquivo é movido antes do disparo, e o argumento já aponta para o novo local. Se a movimentação falha, nada é disparado e o gatilho tenta de novo no ciclo seguinte.
- A pasta é observada pelo próprio Orquestrador, ou por uma máquina designada, quando a pasta só é visível para ela.
Fila de mensagem
Campo | Para que serve |
|---|---|
Corretor | “AMQP (RabbitMQ)” ou “Kafka”. |
Asset com a url | Nome do item do cofre que guarda o endereço do corretor. Use este campo quando o endereço tem senha. |
Ou a url direta | Endereço do corretor, sem senha. |
Fila | Nome da fila (AMQP). |
Topicos | Tópicos separados por vírgula (Kafka). |
Grupo (Kafka) | Grupo de consumo (Kafka). É obrigatório e decide se dois servidores dividem as partições. |
Fila morta (AMQP) | Para onde vai a mensagem que esgotou as tentativas. |
Prefetch | Quantas mensagens o corretor entrega de uma vez. Padrão 10. |
Tentativas | Quantas vezes uma mensagem é entregue antes de ser descartada. Padrão 3. |
Como o gatilho de fila funciona:
- A mensagem só é confirmada ao corretor depois que o job foi criado e gravado. Se a criação falha, a mensagem volta para a fila.
- Mensagens repetidas não criam um segundo job.
- Gatilho desligado devolve as mensagens, em vez de descartá-las. A fila acumula e a leitura continua ao religar.
- Uma mensagem que falha repetidamente sai da fila depois do limite de tentativas, para não travar o consumo.
- O consumo não depende do servidor líder: dois servidores dividem a carga.
Importante: sem fila morta no AMQP, a mensagem que passa do limite de tentativas é apagada, e não há como investigar o que não entrou. O cartão exibe esse aviso. Também é exibido um aviso quando o endereço do corretor foi gravado no cadastro, e não no cofre: se ele tiver senha, a senha fica no registro.
Nota: o consumo de AMQP e de Kafka exige que os pacotes do corretor estejam instalados no servidor. Sem eles, o servidor informa o que instalar.
Webhook de entrada
Campo | Para que serve |
|---|---|
Maximo por minuto | Limite de chamadas por minuto, para proteger a frota de uma rajada. Padrão 120. |
Janela da assinatura (ms) | Por quanto tempo uma chamada assinada vale. Padrão 300000 (5 minutos). |
O gatilho de webhook recebe chamadas em POST /api/hooks/<token>. A chamada precisa ser assinada com o segredo do gatilho:
Cabeçalho | Conteúdo |
|---|---|
x-nexo-instante | Data e hora da chamada, por exemplo 2026-10-19T17:00:00Z. |
x-nexo-assinatura | HMAC-SHA256, em hexadecimal, do texto <instante>.<corpo>, calculado com o segredo. |
x-nexo-entrega | Identificador da entrega, usado para ignorar chamadas repetidas. |
Os argumentos do disparo, definidos pela API no campo arguments do gatilho, podem usar o conteúdo do corpo JSON da chamada, com marcadores como {{ corpo.pedido.id }}. Uma chamada aceita responde 202 com o identificador do job (ou da execução, quando o alvo é uma orquestração). Uma chamada com assinatura inválida, fora da janela de tempo ou com o gatilho desligado é recusada; uma chamada repetida responde 200 e não dispara de novo; acima do limite por minuto, a resposta é 429.
Importante: o endereço e o segredo do webhook são entregues uma única vez, na resposta da criação pela API (POST /api/triggers), junto com um exemplo de chamada. A tela não os exibe. Guarde o segredo na hora. Para trocá-lo, use POST /api/triggers/:id/rotate: o segredo anterior deixa de valer imediatamente, e o sistema que chama precisa ser atualizado.
Editar um gatilho
Para editar um gatilho é necessário:
- Selecionar o botão “Editar” no cartão do gatilho.
- Alterar os campos desejados. “Nome” e “Tipo” não podem ser alterados.
- Selecionar o botão “Salvar”, ou “cancelar” para desistir.
Ligar, desligar e remover
- Para pausar um gatilho sem perder a configuração, selecione o botão “Desligar”. Para retomá-lo, selecione “Ligar”.
- Para remover, selecione o botão “Remover” e confirme. O que o gatilho observava deixa de disparar, sem aviso e sem erro em lugar nenhum.
- Para reprocessar arquivos que já foram disparados e continuam na pasta, selecione o botão “Esquecer arquivos” e confirme. Os arquivos ainda presentes serão processados de novo no próximo ciclo.
Nota: não é possível remover a publicação de um robô que tem gatilhos apontando para ele. Veja Robôs.
Observações
Nota: quando um gatilho dispara em laço, o agente de remediação pode propor desligá-lo. Veja Agente.
Nota: todas as alterações de gatilho ficam registradas na trilha de auditoria.
Recursos
Nesta funcionalidade é possível cadastrar e acompanhar os recursos globais, isto é, os limites que não pertencem a um robô nem a uma orquestração, e sim ao mundo lá fora. Exemplos: as 8 licenças de diálogo de um ERP, que são as mesmas para todos os robôs que falam com ele, ou o fechamento contábil, que não pode executar duas vezes ao mesmo tempo.
Limitar cada robô separadamente não impede a nona sessão de derrubar o ERP. O recurso global resolve isso: o job só entra em execução quando consegue reservar tudo o que pediu.
A funcionalidade pode ser acessada através do menu de navegação: Configurar > Recursos.

Tela Recursos com o formulário Cadastrar recurso
A tela é atualizada a cada 5 segundos. Enquanto não há recursos, ela informa “Nenhum recurso global cadastrado” e exibe somente o formulário de cadastro.
Tipos de recurso
Tipo na tela | Como funciona |
|---|---|
Quantitativo (N vagas) | Um conjunto com capacidade definida, como licenças, conexões ou sessões. Cada job pede uma quantidade, e o restante fica disponível. |
Exclusivo (um por vez) | Uma trava: quem a segura impede os demais de entrar. |
Cadastrar um recurso
Para cadastrar um recurso é necessário:
- Acessar Configurar > Recursos e localizar o formulário “Cadastrar recurso”.
- Preencher o campo “Nome”, com minúsculas, dígitos, ponto, hífen ou sublinhado, por exemplo licencas-erp. É o nome que os robôs e os nós de orquestração usam para pedir o recurso.
- Escolher o “Tipo”, por exemplo “Quantitativo (N vagas)”.
- Preencher o campo “Capacidade” com quantos cabem ao mesmo tempo, por exemplo 8. O campo é exibido somente no tipo quantitativo.
- Preencher o campo “Descricao”, por exemplo “Licencas simultaneas do ERP”.
- Selecionar o botão “Cadastrar”.
Se algum dado estiver inválido, a tela exibe o motivo ao lado do botão. O nome e o tipo não mudam depois de criados.
Importante: o cadastro, a edição, o desligamento e a remoção de recursos exigem a permissão de gerir a política da instalação, que somente o papel admin possui. Os demais papéis com acesso de leitura só consultam a tela.
Acompanhar os recursos
Com recursos cadastrados, a tela mostra o resumo “Recursos globais”:
Cartão | O que mostra |
|---|---|
cadastrado(s) | Total de recursos. |
job(s) esperando recurso | Quantidade de trabalhos parados porque o recurso está cheio ou travado. |
trava(s) exclusiva(s) ativa(s) | Quantas travas estão em uso exclusivo no momento. |
Abaixo, a seção “Pools” traz um cartão por recurso, com:
- o nome, o tipo e as marcas desligado (drenando), EXCLUSIVO (trava em uso) e sem folga (nenhuma vaga livre);
- a descrição;
- para o tipo quantitativo, uma barra de uso e o total “em uso / capacidade”, em que cada vaga ocupada identifica o dono;
- a lista de donos, com a quantidade que cada um segura e o horário em que reservou, ou a indicação “Livre: ninguém detém este recurso agora.”;
- a fila de espera, com o tempo de espera, o robô, o job, a “prio. efetiva” e o motivo da espera;
- a “Contenção acumulada”, que é o total de trabalhos que já esperaram pelo recurso e a data da última espera. É o número que ajuda a dimensionar o pool.
Como a reserva funciona
- Tudo ou nada. O job reserva todos os recursos que pediu de uma só vez. Isso impede o impasse em que dois jobs seguram cada um metade do que o outro precisa.
- O motivo da espera é gravado no job. A mensagem informa qual recurso, quanto falta e com quem ele está. Um pedido maior que a capacidade tem mensagem própria, porque nunca caberá.
- A prioridade envelhece. A cada 10 minutos de espera, o job ganha um ponto de prioridade, para que nenhum trabalho fique parado indefinidamente atrás de outros mais prioritários.
- Pedidos grandes não ficam para trás. Depois de 5 minutos de espera, o job que precisa de várias vagas passa a reservar o que falta, e pedidos de prioridade efetiva menor deixam de furar a fila.
- A reserva é solta no fim do job. Isso vale para qualquer desfecho, inclusive falha. Um job suspenso esperando uma pessoa continua segurando o recurso, porque vai voltar.
Editar, desligar e remover
Para alterar um recurso é necessário:
- Selecionar o botão “editar” no cartão do recurso.
- Alterar a capacidade ou a descrição.
- Selecionar o botão “Salvar”, ou “cancelar” para desistir.
Para parar de aceitar novos usos sem perder a configuração, selecione o botão “desligar (drenar)”. O recurso fica marcado como desligado (drenando), e quem já o segura termina normalmente. Para reativá-lo, selecione “religar”.
Para remover, selecione o botão “remover” e confirme. Os robôs e os nós que pedem o recurso passam a ficar parados esperando um recurso que não existe mais.
Reconciliar reservas
Se um robô cai sem devolver a reserva, o Orquestrador a solta quando percebe que o dono já não está vivo. Para forçar a conferência imediata é necessário:
- Selecionar o botão “reconciliar reservas”, ao lado do título “Pools”.
A tela informa quantas reservas sem dono vivo foram soltas, ou que nada precisou ser solto.
Pedir um recurso em um robô ou em uma orquestração
O pedido de recurso é declarado no robô ou no nó da orquestração, no Studio, com o nome do recurso e a quantidade. Quando o robô e o nó pedem o mesmo recurso, vale o pedido do nó, por ser mais específico. Veja o módulo Studio.
Nota: o agente de remediação pode propor a ação “Liberar o recurso preso” quando a reserva ficou com um dono que já terminou. Veja Agente.
Filas
Nesta funcionalidade é possível trabalhar com filas de itens de trabalho. Em vez de percorrer uma planilha, o robô consome itens de uma fila, um a um. Isso permite retomar o trabalho depois de uma falha, dividir o volume entre várias máquinas e rastrear cada item pela referência do sistema de origem, como o número de uma nota fiscal.
As filas não têm uma tela de cadastro. Elas nascem do uso, na primeira vez em que um item é enfileirado, e são acompanhadas na seção “Filas” da tela Operação, acessada pelo menu de navegação Agora > Operação.
Ciclo de vida de um item
Cada item de fila passa por estes estados:
Estado | Significado |
|---|---|
New | Aguardando uma máquina. |
InProgress | Reservado por uma máquina, com prazo para concluir. |
Successful | Processado com sucesso. |
Failed | Falhou e esgotou as tentativas, ou foi marcado para não tentar de novo. |
Abandoned | O prazo da reserva venceu repetidamente sem conclusão. |
Como o consumo funciona:
- Reserva atômica. Quando uma máquina pede o próximo item, ele é reservado para ela e nenhuma outra o recebe. A reserva tem prazo de 15 minutos.
- Prazo vencido. Se a máquina não conclui dentro do prazo, o item volta para New. Depois de esgotar as tentativas, o item passa a Abandoned, em vez de girar para sempre.
- Ordem. Os itens saem por prioridade, da maior para a menor, e, em igual prioridade, do mais antigo para o mais recente.
- Tentativas. Cada item permite 3 tentativas por padrão. Uma falha que permite nova tentativa devolve o item para New.
- Referência. O item pode ter uma referência do próprio cliente. A referência nunca é expurgada pela retenção, porque é o que mantém o item rastreável.
Acompanhar as filas no painel
A seção “Filas” da tela Operação mostra, para cada fila:
Coluna | O que mostra |
|---|---|
Fila | Nome da fila. |
Pendentes | Itens aguardando. Destacado quando maior que zero. |
Em processo | Itens reservados por uma máquina. |
Sucesso | Itens concluídos. |
Falha | Itens com falha. Destacado quando maior que zero. |
Lead time | Tempo médio entre a entrada do item e a conclusão. |
Vazão/h | Itens concluídos por hora. |
Mais antigo | Idade do item pendente mais antigo. |
Esvazia em | Estimativa de quando a fila esvazia, com a vazão atual. |
O indicador “itens em fila”, na seção Frota, soma os itens pendentes de todas as filas.
Enfileirar itens
Os itens são enfileirados por robôs, pelo Studio, por sistemas externos ou pela API. Para enfileirar é necessário ter a permissão de escrever em filas, que os papéis operador e admin possuem.
Para enfileirar um item pela API interna:
curl -X POST http://localhost:8080/api/queues/notas-fiscais/items \ -H "authorization: Bearer $TOKEN" -H 'content-type: application/json' \ -d '{"payload":{"numero":"44012","valor":1500.00},"reference":"NF-44012","priority":5}'
O corpo também aceita uma lista de itens, o que é o caminho para volume. Para sistemas externos, a API pública oferece POST /api/v1/queues/:fila/items, com chave de API, e a consulta de um item pela referência do próprio cliente em GET /api/v1/queues/:fila/items/:ref. Veja Alertas e webhooks.
Consultar e reprocessar
Operação | Chamada |
|---|---|
Resumo das filas | GET /api/queues |
Itens de uma fila, com filtro por estado | GET /api/queues/:fila/items?status=Failed |
Recolocar na fila os itens com falha ou abandonados | POST /api/queues/:fila/retry-failed |
O reprocessamento coloca de volta em New todos os itens Failed e Abandoned da fila e zera o contador de tentativas.
Pasta da fila
A fila pertence a uma pasta, e a primeira inserção fixa essa pasta. A partir daí, quem está fora do escopo não vê a fila nem consome os itens dela: a resposta é “não encontrado”. Veja Auditoria e segurança.
Alertas de fila
Duas regras de alerta acompanham as filas:
Regra | Dispara quando |
|---|---|
queue-backlog | A fila tem itens pendentes em quantidade igual ou maior que o limite (padrão 100). |
queue-stalled | Há itens esperando há mais que o tempo limite (padrão 30 minutos) e nenhum item foi concluído nesse tempo. É pior que uma fila grande, porque indica que nenhuma máquina está consumindo. |
Veja Alertas e webhooks.
Retenção e proteção de dados
O conteúdo (payload) dos itens é expurgado depois de 7 dias por padrão, e o registro do item é mantido. Valores sensíveis, como CPF e número de cartão, são mascarados quando o item é consultado por pessoas. Com a cifra em repouso ligada, o conteúdo também é cifrado no armazenamento. A máquina que consome o item recebe o valor real. Veja Auditoria e segurança.
Gatilho por fila de mensagem
Filas de mensagem de um corretor externo (RabbitMQ ou Kafka) não são as filas de itens descritas nesta página: elas disparam robôs por meio de um gatilho. Veja Gatilhos.
Cofre e credenciais
Nesta funcionalidade é possível guardar no Orquestrador as credenciais e as configurações que os robôs usam, sem deixar senhas dentro do desenho do robô. O cofre guarda cada valor com o nome que o robô usa para pedi-lo, e o valor das credenciais nunca é exibido nas telas.
O cofre não tem uma tela própria no painel. O cadastro é feito pela API, e os robôs, o Studio, os gatilhos e a configuração de IA citam os itens pelo nome.
Tipos de item
Cada item do cofre é um asset, com um nome único e um tipo:
Tipo | O que guarda |
|---|---|
text | Um texto, como um endereço ou um código. |
number | Um número. |
boolean | Verdadeiro ou falso. |
credential | Um usuário e uma senha. A senha é cifrada. |
Itens que não são credenciais são guardados em claro, e por isso não devem conter segredos.
Como a proteção funciona
- A senha é cifrada com AES-256-GCM, com uma chave derivada da variável NEXO_MASTER_KEY. Se o dado cifrado for alterado no armazenamento, a leitura falha, em vez de devolver um valor corrompido.
- O valor em claro nunca vai para o Studio nem para as telas. Apenas um robô, dentro de um job autenticado, recebe o valor, que é marcado como sensível para ser mascarado nos logs.
- Cada leitura de um segredo entra na trilha de auditoria com o nome do item, nunca com o valor.
- Os itens pertencem a uma pasta, e quem está fora do escopo da pasta não os enxerga.
Importante: defina NEXO_MASTER_KEY com uma chave fixa de pelo menos 16 caracteres. Sem ela, o servidor gera uma chave temporária, e todas as credenciais ficam ilegíveis depois de reiniciar.
Quem pode fazer o quê
Ação | Permissão | Papéis |
|---|---|---|
Listar os itens, sem os segredos | Ler assets | Todos os papéis com leitura geral. |
Criar, alterar e remover itens | Escrever assets | admin. |
Ler o valor de um segredo | Decifrar assets | admin e robo. Papéis como auditor e revisor não leem segredos. |
Criar ou alterar uma credencial
Para criar uma credencial é necessário:
- Acessar o Orquestrador com um papel que pode escrever assets (admin).
- Enviar o item pela API:
curl -X POST http://localhost:8080/api/assets \ -H "authorization: Bearer $TOKEN" -H 'content-type: application/json' \ -d '{"name":"SAP","type":"credential","username":"svc-rpa","password":"********","description":"Usuário de serviço do SAP"}'
O mesmo comando, com o mesmo nome, altera o item. Se o campo password for omitido na alteração, a senha atual é mantida. Um item de texto, número ou booleano usa o campo value no lugar de username e password.
Para consultar os itens, sem os segredos:
curl http://localhost:8080/api/assets -H "authorization: Bearer $TOKEN"
A resposta informa, para cada item, se ele tem um segredo guardado.
Para remover um item:
curl -X DELETE http://localhost:8080/api/assets/SAP -H "authorization: Bearer $TOKEN"
Nota: cada criação, alteração e remoção entra na trilha de auditoria, com o nome do item e a indicação de que o segredo foi alterado, mas nunca com o valor.
Usar uma credencial
- No robô: o robô pede a credencial pelo nome, por exemplo SAP, e recebe o usuário e a senha durante o job. Veja o módulo Studio.
- No gatilho de fila: o campo “Asset com a url” cita o item que guarda o endereço do corretor. Use-o quando o endereço tem senha. Veja Gatilhos.
- Na configuração de IA: a chave de acesso de um provedor de IA também fica no cofre. Veja o módulo IA.
Trocar a chave mestra
A troca da chave mestra é feita sem parar o servidor, em três etapas separadas no tempo. Isso evita o risco de tornar ilegível o que já foi gravado.
Para trocar a chave mestra é necessário:
- Colocar a chave nova em NEXO_MASTER_KEY e a chave antiga em NEXO_MASTER_KEY_PREVIOUS (várias chaves antigas podem ser separadas por vírgula).
- Reiniciar o servidor.
- Conferir quanto ainda depende da chave antiga:
npm run runner -- chave-mestra estado --orquestrador http://localhost:8080 --token $TOKEN
- Recifrar os valores, com o servidor no ar:
npm run runner -- chave-mestra rotacionar --orquestrador http://localhost:8080 --token $TOKEN
- Conferir novamente o estado. Quando nada depender da chave antiga, remover NEXO_MASTER_KEY_PREVIOUS e reiniciar.
A conferência e a recifra também estão disponíveis pela API, em GET /api/master-key e POST /api/master-key/rotate, e exigem o papel admin.
Importante: não remova a chave antiga enquanto o relatório indicar registros ilegíveis ou valores ainda cifrados com ela. A recifra só altera o que ainda está na chave antiga, e o resultado informa quantos valores foram recifrados.
Nota: a recifra alcança também os conteúdos de job, de fila e de tarefa humana, quando a cifra em repouso está ligada. Veja Instalação e acesso.
Ciclo de vida e promoção
Nesta funcionalidade é possível controlar onde cada versão de um robô pode executar. Todo robô publicado passa por estágios, e a mudança de estágio que afeta produção exige o pedido de uma pessoa e a aprovação de outra, com registro na trilha de auditoria.
O painel acompanha o ciclo de vida na seção “Ciclo de vida” da tela Operação, acessada pelo menu Agora > Operação, e mostra o estágio de cada robô na tela Robôs. O pedido e a decisão são feitos pela API, descrita nesta página.
Estágios
Estágio | Significado |
|---|---|
DEV | Versão recém-publicada, para desenvolvimento e testes. |
HOMOLOG | Versão em homologação. |
PROD | Versão em produção. |
RETIRED | Versão aposentada. Não executa mais, mas continua existindo com o histórico e a trilha. |
As transições permitidas são:
De | Para | Exige aprovação |
|---|---|---|
DEV | HOMOLOG | Sim |
DEV | RETIRED | Não |
HOMOLOG | PROD | Sim |
HOMOLOG | RETIRED | Não |
PROD | RETIRED | Sim |
RETIRED | PROD (retorno à versão anterior) | Sim |
Não existe a transição de DEV direto para PROD: pular a homologação é o atalho que o ciclo de vida existe para fechar.
Regras do ciclo:
- O pacote não é copiado. Promover muda o estágio do mesmo registro. O que foi aprovado em homologação é, byte a byte, o que executa em produção.
- Um pacote por robô em HOMOLOG e em PROD. Ao promover a versão 2 para PROD, a versão 1 é aposentada automaticamente, e o pedido registra qual versão saiu. O mesmo robô é identificado pela pasta e pelo nome.
- Descartar um rascunho não passa por revisor. DEV para RETIRED e HOMOLOG para RETIRED são aplicados na hora, e cancelam um pedido pendente daquele pacote.
- Tirar o PROD do ar exige aprovação, porque derruba produção.
- Um pacote RETIRED não executa. A tentativa de executá-lo é recusada. Para voltar a executar, o caminho é o retorno RETIRED para PROD, também com aprovação.
- Agendar um pacote fora de PROD avisa. Agendamento é execução sem ninguém presente, e apontá-lo para um pacote em DEV costuma ser descuido. O aviso não bloqueia, porque agendar homologação à noite é um caso legítimo.
- Cada job guarda o estágio em que executou. Promover o pacote depois não reescreve o histórico.
Solicitar uma promoção
Para solicitar uma promoção é necessário:
- Acessar o Orquestrador com um papel que pode solicitar promoções (autor ou admin).
- Enviar o pedido pela API, informando o estágio de destino e uma observação:
curl -X POST http://localhost:8080/api/processes/$ROBO/promote \ -H "authorization: Bearer $AUTOR" -H 'content-type: application/json' \ -d '{"toStage":"HOMOLOG","note":"testes concluídos"}'
A resposta traz o pedido com a evidência que o revisor vai ver: quantas execuções o pacote teve no estágio de origem, quantas tiveram sucesso e quando foi a última. A evidência é congelada no pedido.
A mesma operação existe para orquestrações, em POST /api/plans/:id/promote.
Nota: promover um pacote que nunca executou não é bloqueado. O pedido mostra “0 execuções” para quem decide, e a trilha registra que a aprovação foi dada assim.
Decidir um pedido
Os pedidos que aguardam decisão aparecem na tabela da seção “Ciclo de vida” da tela Operação, com a data, o pacote, a transição, o solicitante, as aprovações reunidas, a evidência e a observação.
Para aprovar ou recusar um pedido é necessário:
- Acessar o Orquestrador com um papel que pode aprovar (revisor ou admin).
- Consultar os pedidos pendentes:
curl 'http://localhost:8080/api/promotions?status=Pending' -H "authorization: Bearer $REVISOR"
- Enviar a decisão:
curl -X POST http://localhost:8080/api/promotions/$PEDIDO/approve \ -H "authorization: Bearer $REVISOR" -H 'content-type: application/json' \ -d '{"note":"conferido"}'
Para recusar, use /api/promotions/$PEDIDO/reject. Quem solicitou pode retirar o pedido com POST /api/promotions/:id/cancel.
Importante: quem solicita a promoção não pode aprová-la. Com a exigência de uma aprovação, o admin é a única exceção, porque uma instalação de uma só pessoa existe, e a aprovação do próprio admin é registrada na trilha como auto-aprovação. Com duas ou mais aprovações exigidas, essa exceção deixa de valer.
Quantas pessoas aprovam
A quantidade de aprovadores é uma política da instalação, de 1 a 5, com padrão 1. Ela é definida separadamente para homologação e para produção, em approval.approversForHomolog e approval.approversForProd:
curl -X PUT http://localhost:8080/api/policy \ -H "authorization: Bearer $ADMIN" -H 'content-type: application/json' \ -d '{"approval":{"approversForProd":2}}'
Regras do quórum:
- a mesma pessoa não conta duas vezes;
- uma recusa fecha o pedido, mesmo com quórum maior que um;
- a exigência é congelada no pedido, de modo que baixar a política depois não fecha um pedido que aguardava o segundo aprovador;
- sair de PROD também conta como PROD para o quórum;
- cada aprovação parcial entra na trilha de auditoria, com a indicação “1 de 2”, e a assinatura do pacote é conferida em toda aprovação.
Assinatura de pacote
A assinatura prova que o pacote que está em execução é o que foi aprovado e quem o assinou. Ela usa um par de chaves: a chave privada fica com quem assina (o autor ou a esteira de integração contínua) e nunca vai para o servidor; o Orquestrador guarda apenas a chave pública.
Para assinar e publicar um pacote é necessário:
- Gerar o par de chaves na máquina de quem assina e anotar a impressão digital:
npm run runner -- chaves nova --saida chave-financeiro.key npm run runner -- chaves mostrar --chave chave-financeiro.key
- Registrar a chave pública no Orquestrador, com o papel admin, pela API (POST /api/signing-keys, com name e publicKey).
- Assinar o pacote e publicá-lo:
npm run runner -- assinar robo.nexo.json --chave chave-financeiro.key --json | \ curl -X POST http://localhost:8080/api/processes \ -H "authorization: Bearer $AUTOR" -H 'content-type: application/json' -d @-
- Em cada máquina, fixar as chaves aceitas, para que a máquina exija a assinatura. Veja Registrar máquina.
Para conferir a integridade de um pacote, use GET /api/processes/$ROBO/verify.
A exigência de assinatura é definida pela variável NEXO_REQUIRE_SIGNATURE:
Valor | Efeito |
|---|---|
never | Padrão. Publicar, testar e promover sem assinar continua possível. |
prod | Publicar e testar sem assinar continua possível, mas promover para PROD não. |
always | A publicação de pacote sem assinatura é recusada. |
Importante: uma assinatura presente e inválida é sempre recusada, em qualquer política. Um pacote alterado depois de assinado nunca executa: o job falha com o motivo escrito.
Nota: revogar uma chave (POST /api/signing-keys/:id/revoke) não a apaga. Os pacotes assinados por ela passam a valer como não assinados, e a resposta informa quais foram afetados. A seção “Ciclo de vida” da tela Operação mostra quantos pacotes em PROD têm assinatura verificável e lista os que não têm.
Auditoria e segurança
Nesta funcionalidade é possível controlar quem pode fazer o quê no Orquestrador, onde cada pessoa pode atuar, o que fica registrado e por quanto tempo os dados são guardados. A configuração é feita pela API e pela política da instalação; o painel mostra o resultado nas seções Retenção e mascaramento e Governança da tela Operação, acessada pelo menu Agora > Operação.
Papéis
Cada pessoa, máquina ou sistema externo tem um papel. A permissão é conferida no servidor, e não apenas escondida na tela.
Papel | Pode | Deliberadamente não pode |
|---|---|---|
admin | Tudo, inclusive criar identidades, pastas, chaves e ler segredos. | Nada é restrito. |
autor | Publicar robôs, ajustar o tempo manual, solicitar promoção, disparar execuções e publicar no catálogo. | Aprovar promoção, administrar identidades, escrever assets. |
revisor | Ler tudo, aprovar ou recusar promoções, responder tarefas, ler e verificar a trilha. | Publicar e executar. |
operador | Disparar e parar jobs, gerir filas, máquinas, agendamentos, gatilhos, alertas e tarefas. | Publicar robôs, aprovar promoções, escrever assets. |
auditor | Ler tudo, ler e verificar a trilha. | Qualquer escrita e ler segredo em claro. |
robo | Pegar job, reportar eventos, consumir filas e ler segredos do cofre. | Publicar e ler a trilha. |
Para saber o que o acesso atual permite, consulte GET /api/me: a resposta traz o papel, as pastas e a lista de permissões.
Nota: quem solicita a promoção de um robô não pode aprová-la. Veja Ciclo de vida e promoção.
Pastas
Pasta é a unidade de isolamento entre áreas ou clientes. As regras são:
- a permissão concedida em uma pasta vale para as subpastas, e o contrário nunca vale;
- todo registro (robô, job, máquina, fila, credencial, gatilho, recurso) pertence a uma pasta; o que não informa pasta pertence à raiz;
- fora do escopo da pessoa, a resposta é “não encontrado”, porque confirmar que um registro existe já é um vazamento entre clientes. A falta de permissão dentro do escopo é a resposta “proibido”;
- o despacho de jobs também respeita a pasta: uma máquina só recebe jobs da pasta dela e das subpastas.
Para criar uma pasta é necessário usar a API, com o papel admin:
curl -X POST http://localhost:8080/api/folders \ -H "authorization: Bearer $ADMIN" -H 'content-type: application/json' \ -d '{"name":"Financeiro","description":"Área financeira"}'
O campo opcional aiLocalOnly restringe os modelos de IA da pasta aos que mantêm o dado dentro da rede. Veja o módulo IA.
Identidades
Quem entra no painel e quem chama a API é identificado por um token ou pela conta da empresa. Veja Instalação e acesso.
Para criar uma identidade é necessário:
- Acessar o Orquestrador com um token de administração.
- Enviar o cadastro pela API:
curl -X POST http://localhost:8080/api/principals \ -H "authorization: Bearer $ADMIN" -H 'content-type: application/json' \ -d '{"name":"bruno","role":"autor","folders":["fld_a1b2c3"]}'
O token da identidade aparece uma única vez, na resposta. O servidor guarda apenas o hash do token. Se o token for perdido, use POST /api/principals/:id/rotate: o token anterior deixa de valer, e o histórico de quem era é mantido.
Importante: enquanto não existe nenhum token de ambiente nem identidade de usuário, o servidor fica aberto e todo acesso é de administração. Criar a primeira identidade de usuário fecha o acesso. Enrolar uma máquina não o fecha: o registro cria automaticamente uma identidade de papel robo, com o escopo da pasta da máquina.
Chaves de API para sistemas externos
Sistemas externos usam chaves de API próprias, que alcançam somente a API pública (/api/v1) e não a API interna. A chave tem papel, pasta, validade e cotas, e o valor aparece uma única vez. Uma chave nunca assume o papel admin.
curl -X POST http://localhost:8080/api/api-keys \ -H "authorization: Bearer $ADMIN" -H 'content-type: application/json' \ -d '{"name":"ERP do cliente","role":"operador","expiresInDays":90}'
A seção Integração da tela Operação mostra as chaves válidas e as que atingiram a cota. Veja Alertas e webhooks.
Trilha de auditoria
Toda requisição que muda estado entra na trilha antes de a resposta ser enviada. A tentativa negada entra sempre. Os batimentos das máquinas e a ingestão de eventos não entram, para não afogar o que importa. Cada entrada registra quem, quando, a ação, o alvo, a pasta e o desfecho (allowed, denied ou error).
A leitura de um segredo é registrada com o nome do item, nunca com o valor.
As entradas são encadeadas: cada uma carrega o hash da anterior, de modo que alterar uma linha rompe a corrente.
Para consultar a trilha é necessário ter a permissão de leitura da trilha (admin, revisor ou auditor):
curl 'http://localhost:8080/api/audit?outcome=denied&limit=50' -H "authorization: Bearer $TOKEN"
Os filtros disponíveis são actor, action, target, targetId, outcome, from, to e limit.
Para verificar a integridade da corrente:
curl http://localhost:8080/api/audit/verify -H "authorization: Bearer $TOKEN"
A verificação também roda na subida do servidor, com aviso, e o resultado aparece na seção Governança da tela Operação.
Selo da trilha
A corrente detecta a alteração parcial, mas não a reescrita completa por quem tem acesso de escrita ao banco. O selo fecha essa brecha: uma chave privada que não está no servidor assina a ponta da trilha. Depois disso, reescrever a trilha antes do selo deixa de passar na verificação.
Para selar a trilha é necessário:
- Registrar a chave pública de selagem no Orquestrador. Veja Ciclo de vida e promoção.
- Executar, em uma máquina que guarda a chave privada, de preferência em uma tarefa agendada diária:
npm run runner -- trilha selar --orquestrador http://localhost:8080 --chave /custodia/signing.key
A regra de alerta audit-unsealed avisa quando a trilha está há mais de 24 horas sem selo, e só dispara em instalações que têm uma chave registrada.
O selo não impede a manipulação: ele prova que ela aconteceu.
Mascaramento de dados sensíveis
O mascaramento protege os dados que passam pelo Orquestrador. Ele atua em dois momentos:
- Na ingestão do log, de forma irreversível, quando maskLogs está ligado (padrão).
- Na leitura, por pessoas e por webhooks de saída, quando maskPayloadsOnRead está ligado. A máquina que executa o job recebe o valor real.
Por padrão, são mascarados os campos de nomes como senha, password, secret, segredo, token, apikey, authorization, pin, cvv, cartao, cpf, cnpj e rg. A comparação ignora acento, maiúscula, _ e -. Também são mascarados valores que parecem CPF, CNPJ ou número de cartão e passam no dígito verificador:
Original | Exibido |
|---|---|
pedido 20260826123 | Sem alteração, porque não passa no dígito verificador. |
CPF 529.982.247-25 | CPF ***.***.***-25 |
cartao 4111 1111 1111 1111 | cartao **** **** **** 1111 |
A seção “Retenção e mascaramento” da tela Operação mostra se o log é mascarado e quantos valores já foram mascarados. Com a cifra em repouso ligada, o conteúdo de jobs, filas e tarefas também é cifrado no armazenamento. Veja Instalação e acesso.
Retenção
A retenção define por quanto tempo cada tipo de dado é guardado. Os valores padrão são:
Dado | Padrão | Observação |
|---|---|---|
Log de execução | 30 dias | Também limitado a 50.000 entradas. 0 significa sem limite. |
Argumento e saída de job | 7 dias | O conteúdo é expurgado e o job é mantido. |
Registro de job | Sem limite | Remover o registro vem desligado. |
Conteúdo de item de fila | 7 dias | A referência e o erro nunca são expurgados. |
Registro de item de fila | Sem limite | |
Alertas | 90 dias | |
Entregas de webhook | 30 dias | |
Chaves de idempotência | 7 dias | |
O expurgo mantém o registro e marca que o conteúdo foi removido, para que um registro sem argumentos não seja confundido com uma execução que rodou sem argumentos.
A varredura roda a cada hora. A trilha de auditoria não tem retenção: ela não pode ser truncada nem apagada.
Para consultar a política em vigor:
curl http://localhost:8080/api/policy -H "authorization: Bearer $TOKEN"
Para alterar a política, com o papel admin, envie somente o que muda. A diferença fica registrada na trilha:
curl -X PUT http://localhost:8080/api/policy \ -H "authorization: Bearer $ADMIN" -H 'content-type: application/json' \ -d '{"retention":{"jobPayloadRetentionDays":3}}'
Para aplicar a política imediatamente, em vez de esperar a varredura horária, use POST /api/retention/apply.
Nota: a política também reúne a validade dos tokens de máquina (robotTokenDays, padrão 30 dias), a quantidade de aprovadores, as cotas de uso da API, as tarifas do livro de valor e a autonomia do agente. Veja Valor e Agente.
Sessões do painel
A sessão do painel usa um cookie que o JavaScript da página não alcança. Quem administra pode consultar as sessões abertas em GET /api/auth/sessions e encerrar qualquer uma com POST /api/auth/sessions/:id/revoke. Entradas e saídas do painel, inclusive a tentativa recusada, entram na trilha.
Alertas e webhooks
Nesta funcionalidade é possível ser avisado quando algo exige atenção, sem depender de alguém olhar o painel, e integrar o Orquestrador a sistemas externos por meio de eventos.
Há dois mecanismos:
- Alertas: regras que avaliam o estado da operação e, quando disparam, aparecem na tela Operação e são enviadas a um endereço (webhook).
- Webhooks de saída: assinaturas de eventos, como “job concluído” ou “tarefa criada”, que o Orquestrador entrega a um sistema externo com assinatura.
Alertas
Como os alertas funcionam
- As regras são avaliadas a cada minuto.
- Cada regra tem um intervalo de espera (cooldown), de 15 minutos por padrão, para que um alerta repetido não vire ruído.
- Quando a entrega ao endereço falha, o alerta continua registrado e aparece no painel com a mensagem “webhook não entregue”, seguida do motivo. A falha de entrega não interrompe a operação.
- Os alertas abertos aparecem no topo da tela Operação. Para reconhecer um alerta, selecione o botão “OK”.
Regras padrão
Quando a variável NEXO_ALERT_WEBHOOK está definida e ainda não existe nenhuma regra, o servidor cria seis regras que enviam os alertas para esse endereço:
NEXO_ALERT_WEBHOOK=https://hooks.exemplo.com/rpa npm run orchestrator
Regra | Tipo | Limite | Espera entre alertas |
|---|---|---|---|
Job falhou | job-faulted | 1 job | 10 minutos |
Tarefa humana atrasada | human-task-overdue | 1 tarefa | 60 minutos |
Robo sem sinal | robot-offline | 5 minutos | 30 minutos |
Fila represada | queue-backlog | 100 itens | 60 minutos |
Trilha sem selo | audit-unsealed | 24 horas | 720 minutos |
Fila parada | queue-stalled | 30 minutos | 30 minutos |
Nota: sem a variável, o servidor sobe sem nenhuma regra, e a mensagem de subida informa “sem webhook configurado”.
Tipos de regra
Tipo | Dispara quando | O limite significa | O alvo (opcional) restringe a |
|---|---|---|---|
job-faulted | Jobs falham depois da última avaliação. Crítico a partir de 5 falhas. | Quantidade de jobs com falha. | Nome do robô. |
queue-backlog | A fila tem itens pendentes em quantidade igual ou maior que o limite. | Quantidade de itens (padrão 100). | Nome da fila. |
queue-stalled | Há itens esperando e nenhum foi concluído no tempo do limite. É crítico. | Minutos (padrão 30). | Nome da fila. |
robot-offline | Uma máquina está sem sinal. Crítico quando todas estão sem sinal. | Minutos (padrão 5). | Nome da máquina. |
sla-breach | O percentual de execuções dentro do tempo esperado fica abaixo do mínimo, com pelo menos 3 execuções nas últimas 24 horas. | Percentual mínimo (padrão 90). | Nome do robô. |
human-task-overdue | Há tarefas humanas pendentes fora do prazo. Crítico quando o atraso passa de 24 horas. | Quantidade de tarefas (padrão 1). | Nome do robô ou do papel. |
infra-drift | A conferência mais recente de um robô de infraestrutura encontrou desvio de configuração. | Janela em horas (padrão 24). | Nome do robô. |
audit-unsealed | A trilha de auditoria está há tempo demais sem selo. | Horas sem selo (padrão 24). | Não se aplica. |
Importante: nas regras infra-drift e audit-unsealed o limite é em horas, e nas demais regras de tempo é em minutos. Confira a unidade antes de configurar.
Cadastrar uma regra
Para cadastrar uma regra é necessário:
- Acessar o Orquestrador com um papel que gerencia alertas (operador ou admin).
- Enviar a regra pela API:
curl -X POST http://localhost:8080/api/alert-rules \ -H "authorization: Bearer $TOKEN" -H 'content-type: application/json' \ -d '{"name":"Fila de notas represada","kind":"queue-backlog","threshold":50,"target":"notas-fiscais","cooldownMinutes":30,"channel":{"type":"webhook","url":"https://hooks.exemplo.com/rpa"}}'
Os campos kind e channel.url são obrigatórios. Um tipo desconhecido é recusado, e a resposta informa os tipos válidos: isso evita uma regra com o nome digitado errado que apareceria como ativa e nunca dispararia. O campo opcional channel.headers acrescenta cabeçalhos fixos à chamada.
Outras chamadas:
Operação | Chamada |
|---|---|
Listar as regras | GET /api/alert-rules |
Remover uma regra | DELETE /api/alert-rules/:id |
Avaliar as regras agora | POST /api/alert-rules/evaluate |
Listar os alertas | GET /api/alerts (com open=false para incluir os reconhecidos) |
Reconhecer um alerta | POST /api/alerts/:id/ack |
O que o endereço recebe
Cada alerta é enviado por POST, com corpo JSON:
{ "origem": "nexo-rpa", "regra": "Fila represada", "tipo": "queue-backlog", "severidade": "warning", "mensagem": "Fila 'notas-fiscais' com 124 itens pendentes (limite 100)", "detalhes": { "filas": { "notas-fiscais": 124 }, "limite": 100 }, "em": "2026-10-19T17:05:36.000Z" }
A chamada espera uma resposta em até 10 segundos. Resposta diferente de sucesso é registrada como falha de entrega.
Nota: a retenção dos alertas é de 90 dias por padrão. Veja Auditoria e segurança.
Webhooks de saída
Os webhooks de saída avisam um sistema externo quando algo acontece, em vez de o sistema perguntar de minuto em minuto. Cada entrega vira um registro no instante em que o evento ocorre, e só depois alguém tenta entregá-la, de modo que um reinício do servidor não perde avisos.
Eventos
Evento | Quando ocorre |
|---|---|
job.started, job.completed, job.faulted, job.suspended | O job inicia, conclui, falha ou fica suspenso aguardando uma pessoa. |
task.created, task.answered | Uma tarefa humana é criada ou respondida. |
queue.item.failed | Um item de fila falha. |
process.published | Um robô é publicado. |
alert.raised | Um alerta dispara. |
agente.proposta | O agente de remediação avisa o plantão. |
infra.drift | Uma conferência encontra desvio de configuração. |
plan.completed, plan.faulted | Uma execução de orquestração termina com sucesso ou com falha. |
A assinatura aceita um prefixo com curinga, como job.*, e pode ser vinculada a uma pasta.
Cadastrar um assinante
Para cadastrar um webhook de saída é necessário:
- Acessar o Orquestrador com um papel que gerencia webhooks (admin).
- Enviar o cadastro pela API:
curl -X POST http://localhost:8080/api/webhooks \ -H "authorization: Bearer $ADMIN" -H 'content-type: application/json' \ -d '{"name":"ERP","url":"https://erp.cliente.com/orquestrador","events":["job.*","task.created"]}'
- Guardar o segredo devolvido na resposta. Ele aparece uma única vez.
- Provar a integração antes do primeiro evento real, com POST /api/webhooks/:id/test.
A URL aceita somente http ou https, não aceita credencial embutida e pode ser restrita a uma lista de hosts permitidos na instalação.
Como a entrega chega
Cada entrega traz cabeçalhos que identificam o evento e a tentativa:
Cabeçalho | Conteúdo |
|---|---|
x-nexo-event | O evento, por exemplo job.completed. |
x-nexo-delivery | Identificador da entrega. Use-o para ignorar entregas repetidas. |
x-nexo-attempt | Número da tentativa. |
x-nexo-signature | t=<instante>,v1=<assinatura>: HMAC-SHA256, com o segredo, do texto <instante>.<corpo>. |
Para conferir a assinatura, o sistema receptor calcula o HMAC-SHA256 do texto <instante>.<corpo> com o segredo, compara com v1 e recusa entregas cujo instante tenha mais de 5 minutos de diferença. O instante faz parte do que é assinado, de modo que uma entrega capturada não pode ser reenviada depois.
O conteúdo da entrega passa pelo mesmo mascaramento da leitura por pessoas.
Falhas e reenvio
Quando o sistema receptor não responde com sucesso, a entrega é tentada de novo com espera crescente: no total, cinco tentativas, com intervalos de 15 segundos, 1 minuto, 5 minutos e 30 minutos. Depois disso a entrega fica como dead, visível para consulta e reenvio manual:
Operação | Chamada |
|---|---|
Listar as entregas desistidas | GET /api/webhook-deliveries?status=dead |
Reenviar uma entrega | POST /api/webhook-deliveries/:id/retry |
Desativar ou reativar um assinante | POST /api/webhooks/:id/disable e POST /api/webhooks/:id/enable |
Remover um assinante | DELETE /api/webhooks/:id |
Importante: uma entrega desistida é a única evidência de um aviso que nunca chegou: o job foi um sucesso, e o sistema externo simplesmente não soube. A seção Integração da tela Operação mostra as entregas na fila e as desistidas, e o contador fica vermelho quando há desistências.
Integração por chave de API
Para o caminho inverso, em que um sistema externo dispara robôs e enfileira itens, o Orquestrador oferece a API pública /api/v1, protegida por chave de API própria. O contrato está em GET /api/v1/openapi.json. Veja Auditoria e segurança para a criação de chaves.
O disparo aceita o cabeçalho Idempotency-Key: repetir a requisição com a mesma chave devolve o mesmo job, sem executar o robô duas vezes.
curl -X POST http://localhost:8080/api/v1/jobs \ -H 'authorization: Bearer nxk_...' -H 'content-type: application/json' \ -H 'idempotency-key: ERP-PEDIDO-4711' \ -d '{"process":"Conciliacao bancaria","arguments":{"data":"2026-08-26"}}'
Para disparar um robô a partir de um evento externo sem usar uma chave de API, use um gatilho do tipo webhook de entrada. Veja Gatilhos.