FT-FILE-POLL-V1· 1.0.1Integrações
Como configurar file polling SFTP/FTP
File polling busca arquivos de um diretório SFTP/FTP em intervalos regulares, baixa, processa pelo pipeline e marca como duplicado se já viu o arquivo.
Atualizado em 8/6/2026
Use file polling quando o parceiro deposita arquivos num servidor (SFTP, FTP, FTPS) e você precisa que o Lefia busque e processe automaticamente.
Na criação da integração, defina:
-
-
-
-
Cada arquivo gera uma
Se o arquivo for substituído por um com mesmo nome mas tamanho diferente, é tratado como novo. Se você precisar dedup por conteúdo, abra ticket pra adicionar hash SHA-256 no key.
Use
A resposta lista cada arquivo encontrado com
Configuração obrigatória
Na criação da integração, defina:
- Trigger type:
file_polling - Source connection: SFTP/FTP/FTPS com credenciais (host, porta, user, senha)
- Poll directory: caminho absoluto do diretório no servidor remoto (ex:
/inbound,/edi/orders) - Poll file pattern: padrão glob dos arquivos a buscar:
*.xml — qualquer arquivo XML-
INV_*.csv — começa com INV_ e termina em .csv
- pedido_???.dat — ? casa exatamente 1 caractere-
ou .* ou vazio — todos os arquivos
- Post-processing: o que fazer com o arquivo depois de processar
delete — apaga-
archive — move pra subpasta archive/ (criada se não existir)-
none — deixa em paz (cuidado: vai re-listar mesmo arquivo no próximo poll, mas não reprocessa graças à dedup)Como funciona a dedup
Cada arquivo gera uma
idempotency_key no formato file:<filename>:<size>. A constraint unique uq_messages_idempotency_key em (tenant_id, integration_id, idempotency_key) garante que o mesmo arquivo nunca é processado duas vezes — mesmo se duas execuções do cron rodarem em paralelo.Se o arquivo for substituído por um com mesmo nome mas tamanho diferente, é tratado como novo. Se você precisar dedup por conteúdo, abra ticket pra adicionar hash SHA-256 no key.
Teste manual
Use
dryRun: true pra ver o que casaria sem baixar nem processar:curl -X POST $BASE_URL/api/edi-hub/execute-file-poll \
-H "authorization: Bearer $CRON_SECRET" \
-H "content-type: application/json" \
-d '{"integrationId":"<uuid>","dryRun":true}'
A resposta lista cada arquivo encontrado com
status: dry_run.Limites conhecidos
- Arquivos baixam pra memória antes de inserir no banco (Buffer). Ok pra payload EDI/CSV típico (<10MB). Pra arquivos enormes abrir ticket de streaming.
- Não suporta polling recursivo em subdiretórios (só o diretório configurado).
- Glob suporta apenas
*e?. Sem**, sem[abc], sem brace expansion.
Histórico de versões
- 1.0.1
E2E real contra test.rebex.net validou connector SFTP: connect/sftp/readdir/glob/download em 4.1s, 7/7 steps OK. Resolve pendência aberta no snapshot 2026-05-07.
5/7/2026 · updated
- 1.0.0
File polling real: connector list/download/postProcess + glob matcher + dedup at-insert via idempotency_key. Substitui o TODO stub anterior em execute-file-poll/route.ts.
5/7/2026 · new