Output SFTP
Acumula mensagens e as grava como arquivos em um servidor SFTP.
O arquivo não é fechado a cada mensagem: ele vai sendo preenchido, uma linha por mensagem, e é finalizado quando para de chegar dado novo por um tempo. É isso que evita milhares de arquivos minúsculos no servidor.
Campos
Conexão
| Campo | O que é | Padrão |
|---|---|---|
| Host | Endereço do servidor SFTP. | — |
| Porta | Porta de conexão. | 22 |
| Usuário | Usuário de acesso. | — |
| Secret (senha) | O Secret com a senha. | — |
| Caminho remoto | Diretório no servidor onde os arquivos serão gravados. Ex.: /uploads. | / |
Arquivo
| Campo | O que é | Padrão |
|---|---|---|
| Inatividade (segundos) | Quanto tempo sem mensagem nova até o arquivo ser fechado e renomeado para o nome final. Enquanto está sendo escrito, o arquivo tem um nome temporário — só o nome final indica que ele está completo. | 300 |
| Template do nome do arquivo | Como o nome do arquivo é montado. Aceita funções de data e formatação — ex.: data-{{ now | date "2006-01-02" }}.json. A lista completa de funções está em masterminds.github.io/sprig. | data-{{ now | date "2006-01-02" }}.json |
| Campo do cabeçalho (header line) | Nome de um header da mensagem cujo valor é gravado como primeira linha do arquivo. Serve para arquivos CSV com cabeçalho. Deixe em branco se não precisar. | vazio |
Quando Campo do cabeçalho está preenchido e chega uma mensagem cujo valor daquele header é diferente do valor usado no arquivo atual, o arquivo é fechado e um novo é aberto. Assim, dados com layouts diferentes nunca se misturam no mesmo arquivo.
O que este Output precisa ler do tópico
| Parte | Como é usada |
|---|---|
| Value | Gravado como uma linha do arquivo, seguido de quebra de linha |
| Key | Não é usada |
| Headers | Só o header nomeado em Campo do cabeçalho, se configurado |
O conteúdo do Value é gravado como está — não é reformatado nem validado. Se o Value for JSON, o arquivo fica em formato NDJSON (um JSON por linha). Se for uma linha CSV, o arquivo fica em CSV.
Exemplo 1 — arquivo JSON por linha
Mensagens lidas do tópico:
Value: {"pedido":1234,"cliente":"ACME","total":199.90}
Value: {"pedido":1235,"cliente":"Contoso","total":88.00}
Value: {"pedido":1236,"cliente":"ACME","total":15.50}
Arquivo gravado em /uploads/data-2026-07-26.json:
{"pedido":1234,"cliente":"ACME","total":199.90}
{"pedido":1235,"cliente":"Contoso","total":88.00}
{"pedido":1236,"cliente":"ACME","total":15.50}
Exemplo 2 — arquivo CSV com cabeçalho
Com Campo do cabeçalho preenchido com header, e mensagens produzidas por um
Transform:
Value: 1234;ACME;199.90 Headers: header=pedido;cliente;total
Value: 1235;Contoso;88.00 Headers: header=pedido;cliente;total
Arquivo gravado:
pedido;cliente;total
1234;ACME;199.90
1235;Contoso;88.00
Uma mensagem de Value vazio vira uma linha em branco no arquivo — veja Mensagens de Value vazio.
Como o arquivo é finalizado
- A primeira mensagem abre um arquivo temporário no Caminho remoto.
- Cada mensagem seguinte vira mais uma linha nele.
- Passados os segundos de Inatividade sem nada novo, o arquivo é fechado e renomeado para o nome final montado pelo template.
O nome temporário indica arquivo ainda em escrita — veja Arquivos e o conceito de "roll".