FTP_CONNECT - Conectar ao Servidor FTP
O que é este Node?
O FTP_CONNECT é o node responsável por estabelecer conexão com servidores FTP/FTPS remotos. Este é o ponto de entrada para todas as operações de transferência de arquivos via protocolo FTP.
Por que este Node existe?
Servidores FTP são amplamente usados para transferência de arquivos entre sistemas. O FTP_CONNECT existe para:
- Gerenciar Transferências de Arquivos: Conectar a servidores para upload/download de documentos, imagens e dados
- Integrar com Sistemas Legados: Muitos sistemas ainda usam FTP como método principal de troca de dados
- Automatizar Backups: Fazer backup automático de arquivos para servidores remotos
- Sincronizar Dados: Manter arquivos sincronizados entre diferentes sistemas
Como funciona internamente?
Quando o FTP_CONNECT é executado, o sistema:
- Valida Credenciais: Verifica se host, username e password foram fornecidos
- Determina Porta: Usa porta 21 (padrão FTP) ou porta customizada
- Configura Segurança: Define se usa FTP padrão ou FTPS (FTP com SSL/TLS)
- Estabelece Conexão: Cria conexão TCP com o servidor remoto
- Autentica: Envia credenciais e aguarda confirmação
- Se falhar: Retorna erro com detalhes da falha de conexão
- Se sucesso: Mantém conexão aberta para operações subsequentes
Código interno (ftp-executor.service.ts:268-282):
private async connectFTP(client: FTP.Client, data: FTPNodeData): Promise<void> {
const config: FTPConnectionConfig = {
host: data.host!,
port: data.port || 21,
user: data.username!,
password: data.password!,
secure: data.secure || false
};
this.logger.debug(`Connecting to FTP server: ${config.host}:${config.port}`);
await client.access(config);
this.logger.debug('FTP connection established');
}
Quando você DEVE usar este Node?
Use FTP_CONNECT sempre que precisar de transferir arquivos via protocolo FTP:
Casos de uso
- Upload de Relatórios: "Enviar relatórios diários gerados pelo sistema para servidor FTP do cliente"
- Download de Arquivos CSV: "Baixar arquivos CSV de pedidos do servidor FTP do fornecedor para processar"
- Backup Automatizado: "Fazer backup de documentos importantes para servidor FTP externo todas as noites"
Quando NÃO usar FTP_CONNECT
- Transferências Modernas: Use SFTP_CONNECT (mais seguro) ou APIs REST quando disponíveis
- Armazenamento Cloud: Use S3, Google Drive ou Dropbox nodes para cloud storage
- Arquivos Pequenos: Para enviar arquivos via WhatsApp, use node MEDIA diretamente
Parâmetros Detalhados
host (string, obrigatório)
O que é: Endereço do servidor FTP (domínio ou IP).
Padrão: Nenhum (obrigatório)
Flow completo para testar:
{
"name": "Teste FTP Connect - Host",
"nodes": [
{
"id": "start_1",
"type": "start",
"position": { "x": 100, "y": 100 },
"data": { "label": "Início" }
},
{
"id": "ftp_1",
"type": "ftp",
"position": { "x": 300, "y": 100 },
"data": {
"label": "Conectar FTP",
"parameters": {
"host": "ftp.example.com",
"username": "user",
"password": "pass123",
"operation": "list",
"remotePath": "/",
"outputVariable": "ftp_connection"
}
}
},
{
"id": "message_1",
"type": "message",
"position": { "x": 500, "y": 100 },
"data": {
"label": "Confirmar Conexão",
"parameters": {
"message": "Conectado ao servidor: {{ftp_connection.host}}"
}
}
},
{
"id": "end_1",
"type": "end",
"position": { "x": 700, "y": 100 },
"data": { "label": "Fim" }
}
],
"edges": [
{ "source": "start_1", "target": "ftp_1" },
{ "source": "ftp_1", "target": "message_1" },
{ "source": "message_1", "target": "end_1" }
]
}
Teste: Inicie o flow. Sistema deve mostrar "Conectado ao servidor: ftp.example.com"
port (number, opcional)
O que é: Porta TCP do servidor FTP.
Padrão: 21 (porta padrão FTP)
Flow completo para testar:
{
"name": "Teste FTP Connect - Porta Customizada",
"nodes": [
{
"id": "start_1",
"type": "start",
"position": { "x": 100, "y": 100 },
"data": { "label": "Início" }
},
{
"id": "ftp_1",
"type": "ftp",
"position": { "x": 300, "y": 100 },
"data": {
"label": "Conectar FTP Porta 2121",
"parameters": {
"host": "ftp.custom.com",
"port": 2121,
"username": "admin",
"password": "secret",
"operation": "list",
"remotePath": "/",
"outputVariable": "ftp_result"
}
}
},
{
"id": "message_1",
"type": "message",
"position": { "x": 500, "y": 100 },
"data": {
"label": "Confirmar",
"parameters": {
"message": "Conectado na porta customizada!"
}
}
},
{
"id": "end_1",
"type": "end",
"position": { "x": 700, "y": 100 },
"data": { "label": "Fim" }
}
],
"edges": [
{ "source": "start_1", "target": "ftp_1" },
{ "source": "ftp_1", "target": "message_1" },
{ "source": "message_1", "target": "end_1" }
]
}
Teste: Se o servidor usar porta não-padrão (como 2121 ou 2222), especifique aqui.
username (string, obrigatório)
O que é: Nome de usuário para autenticação no servidor FTP.
Padrão: Nenhum (obrigatório)
Flow completo para testar:
{
"name": "Teste FTP Connect - Username",
"nodes": [
{
"id": "start_1",
"type": "start",
"position": { "x": 100, "y": 100 },
"data": { "label": "Início" }
},
{
"id": "input_1",
"type": "input",
"position": { "x": 300, "y": 100 },
"data": {
"label": "Pedir Username",
"parameters": {
"message": "Digite o username do FTP:",
"variableName": "ftp_user"
}
}
},
{
"id": "ftp_1",
"type": "ftp",
"position": { "x": 500, "y": 100 },
"data": {
"label": "Conectar com Username Dinâmico",
"parameters": {
"host": "ftp.example.com",
"username": "{{ftp_user}}",
"password": "pass123",
"operation": "list",
"remotePath": "/"
}
}
},
{
"id": "message_1",
"type": "message",
"position": { "x": 700, "y": 100 },
"data": {
"label": "Confirmar",
"parameters": {
"message": "Autenticado como: {{ftp_user}}"
}
}
},
{
"id": "end_1",
"type": "end",
"position": { "x": 900, "y": 100 },
"data": { "label": "Fim" }
}
],
"edges": [
{ "source": "start_1", "target": "input_1" },
{ "source": "input_1", "target": "ftp_1" },
{ "source": "ftp_1", "target": "message_1" },
{ "source": "message_1", "target": "end_1" }
]
}
Teste: Digite um username válido. Sistema deve autenticar com sucesso.
password (string, obrigatório)
O que é: Senha para autenticação no servidor FTP.
Padrão: Nenhum (obrigatório)
Flow completo para testar:
{
"name": "Teste FTP Connect - Password",
"nodes": [
{
"id": "start_1",
"type": "start",
"position": { "x": 100, "y": 100 },
"data": { "label": "Início" }
},
{
"id": "variable_1",
"type": "variable",
"position": { "x": 300, "y": 100 },
"data": {
"label": "Definir Senha Segura",
"parameters": {
"variableName": "ftp_password",
"value": "MySecureP@ssw0rd!"
}
}
},
{
"id": "ftp_1",
"type": "ftp",
"position": { "x": 500, "y": 100 },
"data": {
"label": "Conectar com Senha",
"parameters": {
"host": "ftp.example.com",
"username": "admin",
"password": "{{ftp_password}}",
"operation": "list",
"remotePath": "/"
}
}
},
{
"id": "message_1",
"type": "message",
"position": { "x": 700, "y": 100 },
"data": {
"label": "Sucesso",
"parameters": {
"message": "Autenticado com segurança!"
}
}
},
{
"id": "end_1",
"type": "end",
"position": { "x": 900, "y": 100 },
"data": { "label": "Fim" }
}
],
"edges": [
{ "source": "start_1", "target": "variable_1" },
{ "source": "variable_1", "target": "ftp_1" },
{ "source": "ftp_1", "target": "message_1" },
{ "source": "message_1", "target": "end_1" }
]
}
Teste: Senha será usada de forma segura através de variável. Nunca hardcode senhas no flow!
secure (boolean, opcional)
O que é: Ativa FTPS (FTP com SSL/TLS) para conexão criptografada.
Padrão: false (FTP sem criptografia)
Flow completo para testar:
{
"name": "Teste FTP Connect - FTPS Seguro",
"nodes": [
{
"id": "start_1",
"type": "start",
"position": { "x": 100, "y": 100 },
"data": { "label": "Início" }
},
{
"id": "ftp_1",
"type": "ftp",
"position": { "x": 300, "y": 100 },
"data": {
"label": "Conectar FTPS Seguro",
"parameters": {
"host": "ftps.example.com",
"port": 990,
"username": "secure_user",
"password": "secure_pass",
"secure": true,
"operation": "list",
"remotePath": "/"
}
}
},
{
"id": "message_1",
"type": "message",
"position": { "x": 500, "y": 100 },
"data": {
"label": "Confirmar Segurança",
"parameters": {
"message": "Conexão FTPS estabelecida com criptografia SSL/TLS!"
}
}
},
{
"id": "end_1",
"type": "end",
"position": { "x": 700, "y": 100 },
"data": { "label": "Fim" }
}
],
"edges": [
{ "source": "start_1", "target": "ftp_1" },
{ "source": "ftp_1", "target": "message_1" },
{ "source": "message_1", "target": "end_1" }
]
}
Teste: Use secure: true para servidores FTPS. Porta padrão FTPS é 990.
Parâmetros
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| host | string | Sim | Endereço do servidor FTP (domínio ou IP) |
| port | number | Não | Porta TCP (padrão: 21) |
| username | string | Sim | Nome de usuário para autenticação |
| password | string | Sim | Senha para autenticação |
| secure | boolean | Não | Ativar FTPS - SSL/TLS (padrão: false) |
| operation | string | Sim | Operação: list (para testar conexão) |
| remotePath | string | Não | Caminho remoto (padrão: /) |
| outputVariable | string | Não | Variável para armazenar resultado (padrão: ftp_result) |
Exemplo 1: Conexão FTP Simples para Listar Arquivos
Objetivo: Conectar a servidor FTP e listar arquivos do diretório raiz
JSON para Importar
{
"name": "Conexão FTP Simples",
"nodes": [
{
"id": "start_1",
"type": "start",
"position": { "x": 100, "y": 100 },
"data": { "label": "Início" }
},
{
"id": "ftp_1",
"type": "ftp",
"position": { "x": 300, "y": 100 },
"data": {
"label": "Conectar ao FTP",
"parameters": {
"host": "ftp.dlptest.com",
"port": 21,
"username": "dlpuser",
"password": "rNrKYTX9g7z3RgJRmxWuGHbeu",
"secure": false,
"operation": "list",
"remotePath": "/",
"outputVariable": "file_list"
}
}
},
{
"id": "message_1",
"type": "message",
"position": { "x": 500, "y": 100 },
"data": {
"label": "Mostrar Resultado",
"parameters": {
"message": "Encontrados {{file_list.count}} arquivos no servidor!"
}
}
},
{
"id": "end_1",
"type": "end",
"position": { "x": 700, "y": 100 },
"data": { "label": "Fim" }
}
],
"edges": [
{ "source": "start_1", "target": "ftp_1" },
{ "source": "ftp_1", "target": "message_1" },
{ "source": "message_1", "target": "end_1" }
]
}
Saída esperada:
Sistema: Encontrados 5 arquivos no servidor!
Exemplo 2: Conexão FTPS Segura com Credenciais Dinâmicas
Objetivo: Pedir credenciais ao usuário e conectar via FTPS seguro
JSON para Importar
{
"name": "FTPS com Credenciais Dinâmicas",
"nodes": [
{
"id": "start_1",
"type": "start",
"position": { "x": 100, "y": 100 },
"data": { "label": "Início" }
},
{
"id": "input_1",
"type": "input",
"position": { "x": 100, "y": 200 },
"data": {
"label": "Pedir Host",
"parameters": {
"message": "Digite o endereço do servidor FTP:",
"variableName": "server_host"
}
}
},
{
"id": "input_2",
"type": "input",
"position": { "x": 100, "y": 300 },
"data": {
"label": "Pedir Username",
"parameters": {
"message": "Digite seu username:",
"variableName": "server_user"
}
}
},
{
"id": "input_3",
"type": "input",
"position": { "x": 100, "y": 400 },
"data": {
"label": "Pedir Senha",
"parameters": {
"message": "Digite sua senha:",
"variableName": "server_pass"
}
}
},
{
"id": "ftp_1",
"type": "ftp",
"position": { "x": 300, "y": 300 },
"data": {
"label": "Conectar FTPS",
"parameters": {
"host": "{{server_host}}",
"port": 990,
"username": "{{server_user}}",
"password": "{{server_pass}}",
"secure": true,
"operation": "list",
"remotePath": "/",
"outputVariable": "connection_result"
}
}
},
{
"id": "message_1",
"type": "message",
"position": { "x": 500, "y": 300 },
"data": {
"label": "Confirmar",
"parameters": {
"message": "✅ Conectado com segurança ao {{server_host}}!"
}
}
},
{
"id": "end_1",
"type": "end",
"position": { "x": 700, "y": 300 },
"data": { "label": "Fim" }
}
],
"edges": [
{ "source": "start_1", "target": "input_1" },
{ "source": "input_1", "target": "input_2" },
{ "source": "input_2", "target": "input_3" },
{ "source": "input_3", "target": "ftp_1" },
{ "source": "ftp_1", "target": "message_1" },
{ "source": "message_1", "target": "end_1" }
]
}
Saída esperada:
Sistema: Digite o endereço do servidor FTP:
Usuário: ftps.example.com
Sistema: Digite seu username:
Usuário: admin
Sistema: Digite sua senha:
Usuário: ********
Sistema: ✅ Conectado com segurança ao ftps.example.com!
Resposta do Node
{
"success": true,
"data": {
"ftp_result": {
"success": true,
"path": "/",
"files": [],
"count": 0
},
"operation": "list",
"host": "ftp.example.com",
"timestamp": "2025-01-15T10:30:00.000Z"
},
"executionTime": 1234
}
Boas Práticas
✅ SIM:
- Use
secure: truesempre que possível para criptografar conexões - Armazene credenciais em variáveis, nunca hardcode no flow
- Teste conexão com operação
listantes de outras operações - Use porta 990 para FTPS e 21 para FTP padrão
- Valide se servidor está acessível antes de processar múltiplos arquivos
❌ NÃO:
- Não exponha senhas em logs ou mensagens
- Não use FTP sem criptografia para dados sensíveis
- Não hardcode credenciais diretamente nos parâmetros
- Não assuma que porta 21 sempre funcionará (alguns usam portas customizadas)
Dicas
💡 Dica 1: FTP padrão (porta 21) não criptografa dados. Use FTPS (porta 990, secure:true) ou SFTP para segurança.
💡 Dica 2: Servidores FTP públicos para teste: ftp.dlptest.com (user: dlpuser, pass: rNrKYTX9g7z3RgJRmxWuGHbeu)
💡 Dica 3: Se conexão falhar, verifique firewall (porta TCP deve estar aberta) e credenciais.
💡 Dica 4: FTPS (FTP + SSL) ≠ SFTP (SSH File Transfer Protocol). São protocolos diferentes! Use SFTP_CONNECT para SFTP.
Próximos Nodes
→ FTP_UPLOAD - Enviar arquivo para servidor FTP → FTP_DOWNLOAD - Baixar arquivo do servidor FTP → FTP_LIST - Listar arquivos no servidor FTP → SFTP_CONNECT - Conectar via SFTP (mais seguro)