Conceitos
Quase toda configuração do CMS combina os mesmos poucos objetos. Entender essa cadeia resolve a maior parte das dúvidas de uso.
Aplicação
Representa um sistema integrado (ERP, MES, WMS, balança, CLP…). Tem uma sigla curta — usada nas URLs e nos relatórios — e é a unidade de agrupamento do sistema: interfaces, definições, tokens, alertas e relatórios são sempre organizados por Aplicação.
A Aplicação também é a unidade de monitoramento de disponibilidade: o CMS verifica em ciclos a conexão dela (keep-alive), registra períodos online/offline e gera o relatório de uptime.
O seletor no topo da tela define a Aplicação em foco: escolhida uma, as telas passam a mostrar só o que pertence a ela, e a escolha acompanha a navegação.
As ferramentas de chamado (Help Desk) também são Aplicações, de uma categoria própria. Elas aparecem em Interfaces, Definição de Mensagem e nos filtros de Mensagens, mas ficam fora do seletor de Aplicação em foco e dos cadastros da fábrica.
Interface
Uma interface de processamento. Define como as mensagens daquele fluxo são consumidas:
- Ordem sequencial — uma mensagem por vez, preservando ordem de chegada.
- Paralela — várias mensagens simultâneas, com concorrência configurável.
A Interface pode ser bloqueada (manualmente ou automaticamente por uma regra de erro de negócio). Enquanto bloqueada, as mensagens continuam entrando mas não são entregues — o que evita disparar centenas de erros contra um sistema destino que já se sabe indisponível.
Definição de Entrega
O contrato de entrega: para onde a mensagem vai e como.
Tipo de entrega
Define o protocolo usado para entregar a mensagem no destino:
| Tipo | O que faz |
|---|---|
HTTP_POST | Envia o payload por POST para o endpoint do destino — o caso mais comum |
HTTP_PUT | Envia por PUT, para APIs REST que esperam substituição do recurso |
HTTP_PATCH | Envia por PATCH, para atualização parcial do recurso |
HTTP_DELETE | Chama o endpoint por DELETE, para remoção do recurso |
HTTP_SOAP | Monta e envia o envelope SOAP para o web service do destino |
MQTT_PUBLISH | Publica o payload num tópico do broker MQTT |
SQL_SERVER_EXEC | Executa um comando ou procedure no SQL Server destino |
ORACLE_EXEC | Executa um comando ou procedure no Oracle destino |
POSTGRES_EXEC | Executa um comando no PostgreSQL destino |
SQLITE_EXEC | Executa um comando no banco SQLite de destino — o arquivo .db da conexão |
INFLUXDB_WRITE | Grava pontos numa série temporal do InfluxDB destino |
MONGODB_WRITE | Grava a mensagem como documento numa coleção do MongoDB — inserindo, ou atualizando um documento existente |
SAP_RFC_CALL | Chama um módulo de função / BAPI no SAP com os dados da mensagem |
OPC_UA_WRITE | Escreve valores em tags de um servidor OPC UA (passa pelo gate de escrita) |
MODBUS_WRITE | Escreve valores em registradores Modbus TCP (passa pelo gate de escrita) |
PI_WEB_API_WRITE | Escreve valores em tags do PI System (AVEVA/OSIsoft) |
SPARKPLUG_CMD | Publica um comando no namespace Sparkplug B, sobre a mesma conexão MQTT |
FILE_WRITE | Grava o conteúdo num arquivo do diretório configurado na conexão |
Campos comuns a todos os tipos
| Campo | O que define |
|---|---|
| Sigla | Identificador da definição, único no sistema todo — não só na Interface. Entra na URL de recebimento, então mudá-la depois quebra quem já integra |
| Aplicação e Interface | A quem a definição pertence e por qual interface as mensagens passam |
| Tipo de mensagem | ASSINCRONA — persiste, enfileira e responde na hora; SINCRONA — espera a resposta do destino antes de responder ao chamador |
| URL de recebimento | Endereço público gerado para esta definição: POST /api/{sigla-da-interface}/{sigla-da-definicao} |
| Content-Type | Cabeçalho usado no envio ao destino (padrão application/json) |
| Validar Content-Type | Quando ligado, recusa mensagem cujo content-type não corresponde ao esperado |
| Encoding | Codificação do corpo enviado (padrão UTF-8) |
| Tamanho máximo do payload | Limite aceito no recebimento; acima disso a mensagem é recusada |
| Decodificação da mensagem | Converte o corpo antes de processar: NENHUM, BASE64, XML_UNESCAPED, URL_ENCODED, HEX, CHARSET_LATIN1, HTML_ENTITIES |
| Transformador | Script aplicado ao payload antes da entrega (opcional) |
| Modelo de Conteúdo | Texto com {{alias}} que substitui o payload como conteúdo entregue (opcional). Resolve contra a saída do Transformador |
| Timeout de envio | Segundos de espera pela resposta do destino antes de considerar falha (padrão 30) |
| Máximo de tentativas | Quantas vezes repetir uma falha técnica (padrão 3). Entre as tentativas o sistema espera 10 segundos |
| Credencial de destino | Credencial usada para autenticar a chamada de saída |
| Encaminhar resposta | Quando ligado, devolve ao chamador a resposta que o destino retornou |
| Ativar WebService (WSDL) | Publica o endpoint SOAP com WSDL dinâmico para esta definição |
| WS-Security no Header | Aceita autenticação por UsernameToken no envelope SOAP |
| Expor como ferramenta MCP | Deixa um agente de IA chamar esta Entrega, pelo Servidor MCP de integrações |
| Ativo | Desliga a definição sem apagá-la — deixa de receber mensagens |
Campos por tipo de entrega
| Tipo | Campos específicos |
|---|---|
HTTP_POST · HTTP_PUT · HTTP_PATCH · HTTP_DELETE | Host de destino e URI que compõem o endereço chamado |
HTTP_SOAP | Host de destino, URI e SOAP Action do web service |
MQTT_PUBLISH | QoS — 0 (no máximo uma vez) ou 1 (pelo menos uma vez). O broker vem da conexão da aplicação de destino |
SQL_SERVER_EXEC · ORACLE_EXEC · POSTGRES_EXEC · SQLITE_EXEC | Comando SQL executado no banco destino. Os placeholders :payload, :datetime e :transformer viram parâmetros bindados, nunca texto concatenado |
SAP_RFC_CALL | Nome da função/BAPI, mapeamento dos parâmetros IMPORT e TABLES, o payload de entrada esperado (com campos obrigatórios) e commit após a chamada — muitas BAPIs de escrita exigem commit explícito |
OPC_UA_WRITE | Tags de escrita (alias → NodeId), e o gate opcional: tag e valor de trigger que liberam a escrita, além do valor gravado após escrever |
MODBUS_WRITE | Tags de escrita (alias → tabela e endereço), e o gate opcional: tabela, endereço e valor de trigger, além do valor gravado após escrever |
PI_WEB_API_WRITE | Tags de escrita (alias → caminho no PI), origem do timestamp (agora ou campo do payload) e o modo de escrita |
INFLUXDB_WRITE | Measurement, mapeamento das colunas (cada alias vira tag ou field), precisão, origem do timestamp e o bucket de destino |
MONGODB_WRITE | Coleção de destino, modo de gravação (inserir um, inserir em lote, atualizar ou criar, somente atualizar), os campos da chave nos modos que casam com documento existente, e o campo de data da gravação |
FILE_WRITE | Caminho do arquivo dentro do diretório base, modo de escrita (criar novo ou anexar), encoding e escrita atômica |
SPARKPLUG_CMD | Grupo, Edge Node e Device do namespace, e as métricas do comando (alias → nome e tipo da métrica) |
Nas tags de escrita, o produtor da mensagem envia um objeto plano {alias: valor} — ele não
precisa conhecer os NodeIds nem os endereços internos do CLP, só os aliases configurados aqui.
Cada mensagem pode trazer só um subconjunto dos aliases: grava-se o que vier.
Definição de Coleta
O espelho da Definição de Entrega para o sentido inverso: em vez de esperar alguém enviar, o CMS vai buscar a mensagem.
Tipo de coleta
Define de onde e como o dado é obtido:
| Tipo | O que faz |
|---|---|
HTTP_GET / HTTP_POST | Chama um endpoint externo em intervalo agendado |
MQTT_TOPIC_SUBSCRIBER | Assina um tópico MQTT e reage a cada publicação |
SQL_SERVER / ORACLE / POSTGRES / SQLITE | Executa uma consulta e transforma o resultado em mensagens |
SAP_RFC | Chama um módulo de função / BAPI no SAP |
SAP_IDOC | Recebe IDocs enviados pelo SAP |
OPC_UA_TRIGGER | Observa uma tag OPC UA e dispara quando ela muda |
MODBUS_TRIGGER / MODBUS_POLL | Observa uma mudança ou varre registradores Modbus TCP |
INFLUXDB | Executa uma consulta Flux, InfluxQL ou SQL numa série temporal |
MONGODB | Lê documentos de uma coleção por filtro (find) ou pipeline (aggregate) |
SPARKPLUG_SUBSCRIBER | Assina um namespace Sparkplug B e recebe nascimentos e mudanças de métrica |
PI_WEB_API | Lê tags do PI System: valor atual, histórico, interpolado ou resumo |
FILE_WATCH | Observa um diretório e transforma cada arquivo que chega em mensagem |
Campos comuns a todos os tipos
| Campo | O que define |
|---|---|
| Sigla | Identificador da coleta, único no sistema todo. Entra na URL da API dinâmica de coleta |
| Aplicação e Interface | A quem a coleta pertence e por qual interface o resultado passa |
| Encaminhamentos | As Interfaces/Definições de destino para onde o payload coletado segue. Uma coleta pode alimentar vários destinos de uma vez |
| Parâmetros de entrada | Campos que um produtor externo pode enviar para POST /api/collect/{interface}/{coleta}, e que a coleta usa para montar a busca. Com eles, a coleta passa a rodar sob demanda |
| Ativar WebService (WSDL) | Publica a mesma API dinâmica também em SOAP, na operação ExecutarColeta. Exige parâmetros de entrada |
| Expor como ferramenta MCP | Deixa um agente de IA executar esta coleta, pelo Servidor MCP de integrações. Exige parâmetros de entrada |
| Transformador | Script aplicado ao payload coletado, antes do encaminhamento (opcional) |
| Máximo de tentativas | Quantas vezes repetir uma falha (padrão 3), com 10 segundos entre elas |
| Ativo | Desliga a coleta sem apagá-la — para o agendamento ou a assinatura |
| Resultado da última execução | Status, horário e mensagem de erro da última busca. Só se aplica aos tipos pull: os tipos por evento têm status de conexão em tempo real |
A periodicidade dos tipos pull pertence à Interface (intervalo em milissegundos ou expressão cron), não à Coleta. Ligar, desligar e executar na hora ficam na tela Agendadores.
Campos por tipo de coleta
| Tipo | Campos específicos |
|---|---|
HTTP_GET · HTTP_POST | URL de origem, parâmetros fixos, template de payload (no POST), credencial de origem, content-type de envio e timeout da coleta (padrão 30 s) |
MQTT_TOPIC_SUBSCRIBER | Conexão externa do broker, tópico assinado e QoS |
SQL_SERVER · ORACLE · POSTGRES · SQLITE | Conexão externa, query SELECT, modo de resultado, coluna chave e comando pós-coleta — o comando que marca como lido o que acabou de ser trazido |
SAP_RFC | Conexão externa, nome da função/BAPI, mapeamento dos parâmetros IMPORT e TABLES, e as variáveis de entrada que vêm de fora |
SAP_IDOC | Conexão externa (o listener) e os filtros de tipo de IDoc, tipo de mensagem e parceiro, que decidem quais IDocs esta coleta recebe |
OPC_UA_TRIGGER | Conexão externa, NodeId e valor do trigger que disparam a coleta, tags de leitura (alias → NodeId) e o reset após a leitura — valor gravado de volta na tag de trigger para “consumir” o sinal |
MODBUS_TRIGGER · MODBUS_POLL | Conexão externa, tabela, endereço e valor do trigger, tags de leitura (alias → tabela e endereço), intervalo de varredura, reset após a leitura e emitir somente se mudou |
INFLUXDB | Conexão externa, consulta, linguagem (Flux, InfluxQL ou SQL) e o bucket/database desta coleta |
MONGODB | Conexão externa, operação (find ou aggregate), coleção, filtro ou pipeline em JSON, projeção, ordenação, limite de documentos, formato do payload e o comando pós-coleta que marca os documentos lidos |
SPARKPLUG_SUBSCRIBER | Conexão externa (o broker), grupo, Edge Node e Device assinados, e se solicita rebirth ao conectar |
PI_WEB_API | Conexão externa, tags lidas, modo de leitura (valor atual, histórico, interpolado ou resumo), janela de tempo, intervalo e o modo de emissão |
FILE_WATCH | Conexão externa (o diretório base), subpasta, máscara de arquivo, encoding, modo de emissão e a ação após a leitura — mover, renomear ou deixar como está |
O modo de resultado das consultas SQL decide a granularidade:
LINHA_UNICA_PAYLOAD_UNICO (todo o resultado vira uma mensagem) ou UMA_LINHA_POR_PAYLOAD (cada
linha vira uma mensagem independente).
Transformador
Script JavaScript executado em sandbox (node:vm dentro de worker_threads, num pool isolado)
que recebe o payload e devolve outro: JSON ↔ XML, remapeamento de campos, cálculo de agregados.
O mesmo Transformador é reutilizável em Definições de Entrega e em Coletas. Pode ser escrito à mão no editor Monaco ou gerado por IA a partir de um exemplo de entrada, um de saída e um prompt — com histórico de gerações e aprovação explícita antes de entrar em uso.
Numa Entrega que recebe de vários sistemas em formatos diferentes, cada Aplicação produtora pode ter um Transformador próprio, que converte o formato dela para o da Entrega e roda antes do Transformador da Entrega — ver Transformador por Aplicação produtora.
Conexão Externa
Dados de conexão reutilizáveis, com botão de testar conexão. Coletas e Entregas apontam para uma Conexão em vez de repetir host/porta/usuário em cada configuração.
| Categoria | Tipos disponíveis |
|---|---|
| Bancos de dados | SQL Server, Oracle, PostgreSQL (inclui TimescaleDB), SQLite, InfluxDB, MongoDB (inclui Atlas, Azure Cosmos DB e AWS DocumentDB) |
| Chão de fábrica | OPC UA, MQTT (inclui Sparkplug B), Modbus TCP, PI Web API |
| SAP | SAP RFC / BAPI, SAP IDoc, SAP Gateway (OData), SAP CPI (Cloud Integration) |
| Arquivos | Diretório monitorado e gravado |
O tipo da conexão vinculada à Aplicação define quais tipos de Coleta e de Entrega ficam disponíveis
nela — uma Aplicação com conexão MongoDB, por exemplo, só oferece Coleta MONGODB e Entrega
MONGODB_WRITE.
Variáveis
Valores reutilizáveis que entram por {{nome}} nas configurações de Coletas, Entregas e
Transformadores — endereços, códigos de centro, nomes que mudam de ambiente para ambiente. Existem
em dois escopos: Globais (valem em todo o CMS) e Por Aplicação (valem só dentro dela).
Quando o mesmo nome existe nos dois, vale o valor da Aplicação.
Servem para tirar de dentro de cada configuração o que muda entre ambientes: o que difere de desenvolvimento para produção fica num lugar só, em vez de espalhado por dezenas de definições.
Credencial
Credenciais de autenticação usadas nas chamadas de saída (HTTP/SOAP): basic, bearer, token em header, WS-Security. Ficam cifradas em repouso e nunca são reexibidas pela API.
Integrações REST puras não precisam de adaptador dedicado: use HTTP_GET/HTTP_POST +
Credencial + Transformador. Os adaptadores nativos (SAP, OPC UA, Modbus, MongoDB…) existem só
porque esses protocolos não são HTTP.
Como tudo se conecta
Aplicação (MES)
└── Interface (MES_PALLET) ← ordem, concorrência, bloqueio
├── Definição (AnyToMES_Pallet) ← destino, timeout, tentativas, transformador
│ ├── Credencial ← como autenticar no destino
│ └── Transformador ← como converter o payload
└── Coleta (SAP_ProdOrder) ← origem externa + encaminhamentos
└── Conexão Externa ← host/porta/usuário do SAP, MQTT, OPC UA…