# 🔧 Configuração Completa DinastiAPI Private Referência completa de todas as opções de configuração do DinastiAPI Private. --- ## 📋 Tabela de Conteúdos 1. [Ordem de Carregamento](#ordem-de-carregamento) 2. [Configuração de Banco de Dados](#configuração-de-banco-de-dados) 3. [Autenticação e Segurança](#autenticação-e-segurança) 4. [Servidor e Rede](#servidor-e-rede) 5. [Logs e Debug](#logs-e-debug) 6. [WhatsApp Client](#whatsapp-client) 7. [Transports Globais](#transports-globais) 8. [Storage S3](#storage-s3) 9. [Flags CLI](#flags-cli) 10. [Paths por Sistema Operacional](#paths-por-sistema-operacional) 11. [Exemplo Completo](#exemplo-completo) --- ## 📥 Ordem de Carregamento (Prioridade Crescente) As configurações são carregadas na seguinte ordem: 1. **Defaults** (hardcoded no código) 2. **Arquivo .env** (se existir no diretório de execução) 3. **Variáveis de Ambiente** (ENV vars do sistema/shell) 4. **Flags CLI** (argumentos de linha de comando) **Exemplo de Precedência**: ```bash # Se você define no .env: DINASTIAPI_PORT=9000 # E executa com flag: ./dinastiapi --port=8080 # Resultado: Porta 8080 será usada (flag CLI tem maior prioridade) ``` --- ## 💾 Configuração de Banco de Dados ### SQLite (Padrão - Zero Configuração) **Recomendado para**: Desenvolvimento, testes, instâncias pequenas (< 10 usuários) ```bash # Sintaxe DATABASE_URL=sqlite: # Exemplos DATABASE_URL=sqlite:./data/dinastiapi.db # Linux/macOS (relativo) DATABASE_URL=sqlite:/var/lib/dinastiapi/db.sqlite # Linux (absoluto) DATABASE_URL=sqlite:$HOME/Library/Application Support/dinastiapi/db.sqlite # macOS DATABASE_URL=sqlite:C:/dinastiapi/data/db.sqlite # Windows ``` **Características**: - ✅ Sem instalação de servidor - ✅ Arquivo criado automaticamente - ✅ Ideal para desenvolvimento - ⚠️ Não recomendado para produção com múltiplas instâncias - ⚠️ Performance limitada para alto volume ### PostgreSQL (Recomendado para Produção) **Recomendado para**: Produção, múltiplas instâncias, alto volume ```bash # Sintaxe DATABASE_URL=postgresql://[user[:password]@][host][:port][/database][?param1=value1&...] # Exemplos DATABASE_URL=postgresql://dinastiapi:senha123@localhost:5432/dinastiapi DATABASE_URL=postgresql://user:pass@prod-db.example.com:5432/dinastiapi?sslmode=require DATABASE_URL=postgresql://admin:pass@dinastiapi.abc123.us-east-1.rds.amazonaws.com:5432/dinastiapi?sslmode=require # Com pool de conexões customizado DATABASE_URL=postgresql://user:pass@localhost:5432/dinastiapi?pool_max_conns=100&pool_min_conns=10 ``` **Parâmetros de Conexão**: - `sslmode`: `disable`, `require`, `verify-ca`, `verify-full` (padrão: `prefer`) - `connect_timeout`: Timeout de conexão em segundos (padrão: 30) - `application_name`: Nome da aplicação nos logs do PostgreSQL **Connection Pool** (variáveis ENV adicionais): ```bash DB_MAX_OPEN_CONNS=100 # Máximo de conexões abertas DB_MAX_IDLE_CONNS=10 # Máximo de conexões idle DB_CONN_MAX_LIFETIME=3600 # Tempo de vida máximo da conexão (segundos) ``` ### MySQL/MariaDB **Recomendado para**: Compatibilidade com infraestrutura existente ```bash # Sintaxe DATABASE_URL=mysql://[user[:password]@][host][:port][/database][?param1=value1&...] # Exemplos DATABASE_URL=mysql://dinastiapi:senha123@localhost:3306/dinastiapi DATABASE_URL=mysql://user:pass@prod-db.example.com:3306/dinastiapi DATABASE_URL=mysql://user:pass@35.123.45.67:3306/dinastiapi?charset=utf8mb4&parseTime=true # Google Cloud SQL DATABASE_URL=mysql://user:pass@/dinastiapi?unix_socket=/cloudsql/project:region:instance ``` **Parâmetros de Conexão**: - `charset`: Charset da conexão (recomendado: `utf8mb4`) - `parseTime`: Parse de TIME/DATETIME para Go time.Time (recomendado: `true`) - `loc`: Timezone (exemplo: `loc=America%2FSao_Paulo`) --- ## 🔐 Autenticação e Segurança ### Admin Token Token para autenticar endpoints administrativos (`/api/admin/*`). ```bash DINASTIAPI_ADMIN_TOKEN=seu-token-secreto-super-seguro-aqui ``` **Uso**: ```bash # Header HTTP Authorization: seu-token-secreto-super-seguro-aqui # Exemplo cURL curl -H "Authorization: $DINASTIAPI_ADMIN_TOKEN" \ http://localhost:8080/api/admin/users ``` **Endpoints Protegidos**: - `POST /api/admin/users` - Criar usuário - `GET /api/admin/users` - Listar usuários - `DELETE /api/admin/users/{id}` - Deletar usuário - `GET /api/admin/stats` - Estatísticas globais - `POST /api/admin/global/test` - Testar configurações globais ⚠️ **Importante**: Se não configurado, endpoints admin estarão **desprotegidos**! ### User Tokens Tokens de usuários são gerados automaticamente ao criar um usuário via Admin API. **Uso**: ```bash # Header HTTP token: token-do-usuario-aqui # Query Parameter http://localhost:8080/api/device/status?token=token-do-usuario # Exemplo cURL curl -H "token: token-do-usuario" \ http://localhost:8080/api/device/status ``` ### License Key ```bash LICENSE_KEY=DINASTIAPI-BASIC-C231653DD4F34B20 # ou LICENSE_KEY=DINASTIAPI-ENT-D456789ABCDEF123 # Enterprise features ``` **Tipos de Licença**: - **BASIC**: Recursos básicos (mensagens de texto, mídia, grupos) - **ENTERPRISE** (contém `-ENT-`): Recursos avançados - Carrosséis (carousel messages) - Botões interativos (interactive buttons) - Flows (formulários interativos) - Suporte prioritário **Verificar Licença**: ```bash curl http://localhost:8080/health # Retorna informações sobre licença ativa ``` --- ## 🌐 Servidor e Rede ### Endereço e Porta ```bash # Flags CLI ./dinastiapi --address=0.0.0.0 --port=8080 # Variáveis ENV DINASTIAPI_ADDRESS=0.0.0.0 DINASTIAPI_PORT=8080 ``` **Opções de Address**: - `0.0.0.0`: Aceita conexões de qualquer IP (padrão) - `127.0.0.1`: Apenas localhost (segurança extra) - `192.168.1.100`: IP específico da interface **Portas Comuns**: - `8080`: Padrão (desenvolvimento) - `80`: HTTP (requer root/sudo) - `443`: HTTPS (requer root/sudo + certificados) - `3000`, `5000`, `8000`: Alternativas ### Base URL (para Webhooks e Eventos) ```bash DINASTIAPI_ADDRESS=https://api.seudominio.com ``` Esta URL será **incluída em TODOS os eventos** enviados via webhook, RabbitMQ, SQS, etc., permitindo que sistemas externos saibam exatamente de onde o evento está vindo. **Exemplo de Evento**: ```json { "event": "message", "instance_id": "user123", "from": "5511999999999@s.whatsapp.net", "message": {...}, "dinastiapi_address": "https://api.seudominio.com" // ← Incluso automaticamente } ``` ### SSL/TLS ```bash # Flags CLI ./dinastiapi \ --sslcertificate=/path/to/cert.pem \ --sslprivatekey=/path/to/key.pem ``` **Recomendação**: Use reverse proxy (Nginx, Caddy, Traefik) para SSL: ```nginx # Nginx server { listen 443 ssl; server_name api.seudominio.com; ssl_certificate /etc/letsencrypt/live/api.seudominio.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/api.seudominio.com/privkey.pem; location / { proxy_pass http://localhost:8080; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; } } ``` --- ## 📊 Logs e Debug ### Nível de Log ```bash # Flag CLI ./dinastiapi --loglevel=info # Variável ENV DINASTIAPI_LOG_LEVEL=debug # debug, info, warn, error ``` **Níveis**: - `debug`: Máximo detalhamento (desenvolvimento) - `info`: Informações operacionais (padrão) - `warn`: Avisos não-críticos - `error`: Apenas erros críticos (produção) ### Tipo de Log ```bash # Flag CLI ./dinastiapi --logtype=console # ou json # Variáveis ENV LOG_TYPE=json # json ou console LOG_COLOR=true # colorir output (apenas console) ``` **Formatos**: - `console`: Logs legíveis para humanos (desenvolvimento) ``` 2025-11-07T10:30:15-03:00 INF Server started address=0.0.0.0 port=8080 ``` - `json`: Logs estruturados para parsing (produção) ```json {"level":"info","time":"2025-11-07T10:30:15-03:00","message":"Server started","address":"0.0.0.0","port":"8080"} ``` ### Debug WhatsApp (whatsmeow) ```bash # Flag CLI ./dinastiapi --wadebug=DEBUG # ou INFO # Variável ENV DINASTIAPI_DEBUG=debug # debug, info (vazio = desabilitado) ``` Habilita logs detalhados da biblioteca whatsmeow (conexão, protocolo WhatsApp, eventos). **Quando usar**: - ✅ Debugar problemas de conexão WhatsApp - ✅ Investigar eventos não recebidos - ✅ Troubleshooting de QR code - ⚠️ **Não** usar em produção (muito verbose) --- ## 📱 WhatsApp Client ### Configuração de Dispositivo ```bash # Nome do dispositivo (aparece no WhatsApp Web > Dispositivos Vinculados) SESSION_DEVICE_NAME=dinastiapi # OS Name (para detecção do WhatsApp) # Flag CLI: ./dinastiapi --osname="Mac OS 10" ``` ### Configuração Avançada (ENV vars globais) **Plataforma**: ```bash WA_PLATFORM=WEB # WEB, ANDROID, IOS, WINDOWS, MACOS, IPAD ``` **Versão do WhatsApp Web**: ```bash WA_VERSION=2.3000.1028259376 # primary.secondary.tertiary ``` **Canal de Release**: ```bash WA_RELEASE_CHANNEL=RELEASE # RELEASE, BETA, ALPHA, DEBUG ``` **Sub-plataforma Web**: ```bash WA_WEB_SUB_PLATFORM=WEB_BROWSER # WEB_BROWSER, APP_STORE, WIN_STORE, DARWIN, WIN32 ``` **Tipo de Conexão**: ```bash WA_CONNECT_TYPE=WIFI_UNKNOWN # CELLULAR_*, WIFI_UNKNOWN ``` **Tipo de Plataforma**: ```bash WA_PLATFORM_TYPE=CHROME # CHROME, FIREFOX, SAFARI, EDGE, etc. ``` ⚠️ **Nota**: Configurações avançadas geralmente não precisam ser alteradas. Use apenas se souber o que está fazendo. ### Proxy (Firewall Corporativo) ```bash WA_PROXY=http://proxy.empresa.com:8080 WA_PROXY=socks5://proxy.empresa.com:1080 ``` ### Skip Flags (Otimização de Recursos) ```bash # Global (aplicado a todos usuários se não configurado individualmente) GLOBAL_SKIP_MEDIA_DOWNLOAD=false # Pular download de mídia GLOBAL_SKIP_GROUPS=false # Ignorar mensagens de grupos GLOBAL_SKIP_NEWSLETTERS=false # Ignorar newsletters/canais GLOBAL_SKIP_BROADCASTS=false # Ignorar broadcasts GLOBAL_SKIP_OWN_MESSAGES=true # Ignorar mensagens próprias GLOBAL_SKIP_CALLS=false # Ignorar chamadas # Rejeitar chamadas automaticamente GLOBAL_AUTO_REJECT_CALL=false # Auto-rejeitar chamadas GLOBAL_REJECT_CALL_MESSAGE=Desculpe, não atendo chamadas via WhatsApp # Mensagem de rejeição ``` --- ## 🔄 Transports Globais Sistemas de entrega de eventos para todos os usuários. ### Webhook Global ```bash GLOBAL_WEBHOOK_ENABLED=true GLOBAL_WEBHOOK_URL=https://seu-webhook.com/events GLOBAL_WEBHOOK_EVENTS=Message,CallOffer,QR,Connected,Disconnected GLOBAL_WEBHOOK_TIMEOUT=30 # Timeout em segundos GLOBAL_WEBHOOK_RETRY_COUNT=3 # Tentativas de retry GLOBAL_WEBHOOK_RETRY_DELAY=2 # Delay base (segundos) GLOBAL_WEBHOOK_MAX_RETRY_DELAY=60 # Delay máximo (segundos) GLOBAL_WEBHOOK_BACKOFF_FACTOR=2.0 # Fator de backoff exponencial GLOBAL_WEBHOOK_MAX_CONCURRENCY=50 # Requisições paralelas máximas ``` **Eventos Disponíveis**: - `Message`: Mensagens recebidas/enviadas - `CallOffer`: Chamadas recebidas (voz/vídeo) - `QR`: QR code gerado - `Connected`: Cliente conectado - `Disconnected`: Cliente desconectado - `Presence`: Status de presença (online/offline/digitando) - `Receipt`: Recibos de leitura - `GroupInfo`: Eventos de grupo - `LoggedOut`: Sessão encerrada/logout - `All`: Todos os eventos **Nota importante**: - Os nomes dos eventos são **case-sensitive** e devem usar a nomenclatura canônica acima. - Em filtros individuais (webhook/rabbitmq por instância), listas CSV com espaços são normalizadas automaticamente. Exemplo válido: `Message, Disconnected`. ### RabbitMQ Global ```bash GLOBAL_RABBITMQ_ENABLED=true GLOBAL_RABBITMQ_URL=amqp://user:pass@localhost:5672/ GLOBAL_RABBITMQ_EVENTS=Message,CallOffer,QR GLOBAL_RABBITMQ_EXCHANGE=dinastiapi GLOBAL_RABBITMQ_EXCHANGE_TYPE=topic # topic, direct, fanout, headers GLOBAL_RABBITMQ_QUEUE=dinastiapi.events GLOBAL_RABBITMQ_QUEUE_TYPE=classic # classic, quorum GLOBAL_RABBITMQ_ROUTING_KEY=whatsapp.# GLOBAL_RABBITMQ_DURABLE=true GLOBAL_RABBITMQ_AUTO_DELETE=false GLOBAL_RABBITMQ_EXCLUSIVE=false GLOBAL_RABBITMQ_NO_WAIT=false GLOBAL_RABBITMQ_DELIVERY_MODE=2 # 1=non-persistent, 2=persistent # High-throughput optimization GLOBAL_RABBITMQ_CONNECTION_POOL_SIZE=50 GLOBAL_RABBITMQ_WORKER_COUNT=100 GLOBAL_RABBITMQ_QUEUE_BUFFER_SIZE=100000 GLOBAL_RABBITMQ_BATCH_SIZE=1000 GLOBAL_RABBITMQ_BATCH_TIMEOUT=100 # ms # Circuit breaker GLOBAL_RABBITMQ_CIRCUIT_BREAKER_THRESHOLD=10 GLOBAL_RABBITMQ_CIRCUIT_BREAKER_TIMEOUT=30 # segundos # Performance GLOBAL_RABBITMQ_PUBLISH_TIMEOUT=5000 # ms GLOBAL_RABBITMQ_MAX_RETRIES=12 GLOBAL_RABBITMQ_RETRY_DELAY=1000 # ms GLOBAL_RABBITMQ_QOS_PREFETCH_COUNT=100 # Flags avançadas GLOBAL_RABBITMQ_ENABLE_COMPRESSION=false GLOBAL_RABBITMQ_ENABLE_BATCHING=true GLOBAL_RABBITMQ_ENABLE_PERSISTENCE=true GLOBAL_RABBITMQ_ENABLE_CONFIRMATION=true # Logs e métricas GLOBAL_RABBITMQ_METRICS_INTERVAL=60 # segundos GLOBAL_RABBITMQ_ENABLE_DETAILED_LOGS=false GLOBAL_RABBITMQ_ENABLE_METRICS_LOG=true ``` ### AWS SQS Global ```bash GLOBAL_SQS_ENABLED=true GLOBAL_SQS_REGION=us-east-1 GLOBAL_SQS_QUEUE_URL=https://sqs.us-east-1.amazonaws.com/123456789012/dinastiapi-events GLOBAL_SQS_EVENTS=message,call,qr # Credenciais AWS GLOBAL_SQS_ACCESS_KEY=AKIAIOSFODNN7EXAMPLE GLOBAL_SQS_SECRET_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY GLOBAL_SQS_SESSION_TOKEN= # Opcional (IAM roles) GLOBAL_SQS_PROFILE=default # AWS CLI profile # FIFO Queue (ordem garantida) GLOBAL_SQS_USE_FIFO=false GLOBAL_SQS_MESSAGE_GROUP=dinastiapi # Obrigatório se FIFO=true # Performance GLOBAL_SQS_DELAY_SECONDS=0 # Delay de entrega (0-900) GLOBAL_SQS_MAX_RETRIES=12 GLOBAL_SQS_RETRY_DELAY=2 # segundos GLOBAL_SQS_TIMEOUT=30 # segundos ``` ### Redis Streams Global ```bash GLOBAL_REDIS_ENABLED=true GLOBAL_REDIS_ADDRESS=localhost:6379 GLOBAL_REDIS_USERNAME= # Redis 6+ GLOBAL_REDIS_PASSWORD=senha-redis GLOBAL_REDIS_TLS=false GLOBAL_REDIS_STREAM=dinastiapi:events GLOBAL_REDIS_EVENTS=message,call,qr GLOBAL_REDIS_MAX_LEN=10000 # Máximo de eventos no stream GLOBAL_REDIS_APPROXIMATE_TRIMMING=true # Trimming eficiente GLOBAL_REDIS_CONSUMER_GROUP=dinastiapi-consumers GLOBAL_REDIS_CONSUMER_NAME=worker-1 GLOBAL_REDIS_BLOCK_TIME=5000 # ms GLOBAL_REDIS_COUNT=100 # Mensagens por leitura GLOBAL_REDIS_MAX_RETRIES=12 GLOBAL_REDIS_RETRY_DELAY=2 # segundos ``` ### WebSocket Global ```bash GLOBAL_WEBSOCKET_ENABLED=true GLOBAL_WEBSOCKET_PATH=/ws/events GLOBAL_WEBSOCKET_EVENTS=message,call,qr GLOBAL_WEBSOCKET_MAX_CONNECTIONS=1000 GLOBAL_WEBSOCKET_READ_BUFFER=4096 GLOBAL_WEBSOCKET_WRITE_BUFFER=4096 GLOBAL_WEBSOCKET_PING_INTERVAL=30 # segundos GLOBAL_WEBSOCKET_PONG_TIMEOUT=10 # segundos GLOBAL_WEBSOCKET_MAX_MESSAGE_SIZE=1048576 # bytes (1MB) ``` **Conectar ao WebSocket**: ```javascript const ws = new WebSocket('ws://localhost:8080/ws/events'); ws.onmessage = (event) => { const data = JSON.parse(event.data); console.log('Event received:', data); }; ``` --- ## 📦 Storage S3 ### Configuração S3 Global ```bash GLOBAL_S3_ENABLED=true GLOBAL_S3_BUCKET=dinastiapi-media GLOBAL_S3_REGION=us-east-1 GLOBAL_S3_ACCESS_KEY=AKIAIOSFODNN7EXAMPLE GLOBAL_S3_SECRET_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY # Endpoint customizado (MinIO, DigitalOcean Spaces, etc.) GLOBAL_S3_ENDPOINT=https://s3.us-east-1.amazonaws.com # MinIO: GLOBAL_S3_ENDPOINT=http://minio:9000 # Path style (obrigatório para MinIO) GLOBAL_S3_FORCE_PATH_STYLE=false # MinIO: true # ACL (desabilitado por padrão no AWS) GLOBAL_S3_DISABLE_ACL=true # Entrega de mídia GLOBAL_S3_DELIVERY_MODE=url # url, base64, both GLOBAL_S3_PRESIGNED_EXPIRY=3600 # segundos (URLs pré-assinadas) # Retenção GLOBAL_S3_RETENTION_DAYS=30 # 0 = sem expiração GLOBAL_S3_CLEANUP_ENABLED=true GLOBAL_S3_CLEANUP_INTERVAL=86400 # segundos (24h) # Estrutura de chaves # Padrão: global/{userID}/{inbox|outbox}/{contactType}/{contactJID}/{year}/{month}/{day}/{mediaType}/{filename} GLOBAL_S3_KEY_PREFIX=global/ ``` **Delivery Modes**: - `url`: Retorna URL pré-assinada do S3 - `base64`: Retorna conteúdo em base64 no payload - `both`: Retorna URL + base64 (maior uso de banda) **Exemplo de Chave S3**: ``` global/user123/inbox/individual/5511999999999@s.whatsapp.net/2025/11/07/image/photo-1699380000.jpg ``` --- ## 🖥️ Flags CLI Todas as flags de linha de comando disponíveis: ```bash ./dinastiapi [flags] Flags: --address string Bind IP Address (default "0.0.0.0") --port string Listen Port (default "8080") --wadebug string Enable whatsmeow debug (INFO or DEBUG) --logtype string Type of log output (console or json) (default "console") --loglevel string Log level (debug, info, warn, error) (default "info") --color Enable colored output for console logs --skipmedia Do not attempt to download media in messages --osname string Connection OSName in Whatsapp (default "Mac OS 10") --sslcertificate string SSL Certificate File --sslprivatekey string SSL Certificate Private Key File --admintoken string Security Token to authorize admin actions --version Display version information and exit ``` **Exemplo de Uso Combinado**: ```bash ./dinastiapi \ --address=0.0.0.0 \ --port=8080 \ --logtype=json \ --loglevel=info \ --wadebug=INFO \ --admintoken=meu-token-secreto ``` --- ## 📁 Paths por Sistema Operacional ### Linux **Execução Local**: ```bash # Relativo ao diretório do binário ./dinastiapi ├── ./data/ # Database SQLite ├── ./logs/ # Log files ├── ./buffer/ # Event buffer └── ./static/ # Web assets ``` **Instalação Systemd** (`/opt/dinastiapi`): ```bash /opt/dinastiapi/ ├── data/ # Database ├── logs/ # Logs ├── buffer/ # Event buffer └── static/ # Web assets /usr/local/bin/dinastiapi # Binário /etc/systemd/system/dinastiapi.service # Service file ``` ### Windows **Execução Local**: ```powershell C:\dinastiapi\ ├── data\ # Database ├── logs\ # Logs ├── buffer\ # Event buffer ├── static\ # Web assets └── dinastiapi-private-windows-amd64.exe ``` **Instalação NSSM**: ``` C:\dinastiapi\ # Mesmo path acima C:\Windows\System32\nssm.exe # NSSM ``` ### macOS **Execução Local**: ```bash ./dinastiapi ├── ./data/ ├── ./logs/ ├── ./buffer/ └── ./static/ ``` **Instalação LaunchDaemon**: ```bash /opt/dinastiapi/ # Instalação /usr/local/bin/dinastiapi # Binário /Library/LaunchDaemons/com.dinastiapi.plist # Service plist ``` **Paths alternativos (macOS)** (não usados por padrão, mas comuns): ```bash ~/Library/Application Support/dinastiapi/ # Dados do usuário ~/Library/Logs/dinastiapi/ # Logs ``` --- ## 📄 Exemplo Completo de Configuração Arquivo `.env` com todas as opções principais: ```bash # ============================================================================= # DINASTIAPI PRIVATE - CONFIGURAÇÃO COMPLETA # ============================================================================= # ======================================== # LICENÇA E IDENTIFICAÇÃO # ======================================== LICENSE_KEY=DINASTIAPI-BASIC-C231653DD4F34B20 INSTANCE_ID=producao-sp-01 SERVER_IP=203.0.113.50 APP_ENV=production APP_REGION=sa-east-1 GIT_COMMIT=a59c1501 # ======================================== # SERVIDOR E REDE # ======================================== DINASTIAPI_ADDRESS=https://api.seudominio.com DINASTIAPI_PORT=8080 # ======================================== # BANCO DE DADOS # ======================================== # PostgreSQL (produção) DATABASE_URL=postgresql://dinastiapi:senha@postgres:5432/dinastiapi?sslmode=require # Connection pool DB_MAX_OPEN_CONNS=100 DB_MAX_IDLE_CONNS=10 DB_CONN_MAX_LIFETIME=3600 # ======================================== # AUTENTICAÇÃO # ======================================== DINASTIAPI_ADMIN_TOKEN=admin-token-super-secreto-aqui # ======================================== # LOGS E DEBUG # ======================================== DINASTIAPI_LOG_LEVEL=info LOG_TYPE=json LOG_COLOR=false DINASTIAPI_DEBUG= # ======================================== # TIMEZONE # ======================================== TZ=America/Sao_Paulo # ======================================== # WHATSAPP CLIENT # ======================================== SESSION_DEVICE_NAME=dinastiapi # Configurações avançadas (geralmente não precisam ser alteradas) # WA_PLATFORM=WEB # WA_VERSION=2.3000.1028259376 # WA_RELEASE_CHANNEL=RELEASE # Skip flags (otimização de recursos) GLOBAL_SKIP_MEDIA_DOWNLOAD=false GLOBAL_SKIP_GROUPS=false GLOBAL_SKIP_NEWSLETTERS=false GLOBAL_SKIP_BROADCASTS=false GLOBAL_SKIP_OWN_MESSAGES=true GLOBAL_SKIP_CALLS=false # Rejeição automática de chamadas GLOBAL_AUTO_REJECT_CALL=true GLOBAL_REJECT_CALL_MESSAGE=Desculpe, não atendo chamadas via WhatsApp # ======================================== # WEBHOOK GLOBAL # ======================================== GLOBAL_WEBHOOK_ENABLED=true GLOBAL_WEBHOOK_URL=https://webhook.seudominio.com/events GLOBAL_WEBHOOK_EVENTS=Message,CallOffer,QR,Connected,Disconnected GLOBAL_WEBHOOK_TIMEOUT=30 GLOBAL_WEBHOOK_RETRY_COUNT=3 GLOBAL_WEBHOOK_MAX_CONCURRENCY=50 # ======================================== # RABBITMQ GLOBAL # ======================================== GLOBAL_RABBITMQ_ENABLED=true GLOBAL_RABBITMQ_URL=amqp://admin:senha@rabbitmq:5672/ GLOBAL_RABBITMQ_EVENTS=Message,CallOffer,QR GLOBAL_RABBITMQ_EXCHANGE=dinastiapi GLOBAL_RABBITMQ_QUEUE=dinastiapi.events GLOBAL_RABBITMQ_ROUTING_KEY=whatsapp.# # High-throughput optimization GLOBAL_RABBITMQ_CONNECTION_POOL_SIZE=50 GLOBAL_RABBITMQ_WORKER_COUNT=100 GLOBAL_RABBITMQ_QUEUE_BUFFER_SIZE=100000 GLOBAL_RABBITMQ_BATCH_SIZE=1000 GLOBAL_RABBITMQ_ENABLE_BATCHING=true GLOBAL_RABBITMQ_ENABLE_CONFIRMATION=true # ======================================== # S3 GLOBAL # ======================================== GLOBAL_S3_ENABLED=true GLOBAL_S3_BUCKET=dinastiapi-media GLOBAL_S3_REGION=us-east-1 GLOBAL_S3_ACCESS_KEY=AKIAIOSFODNN7EXAMPLE GLOBAL_S3_SECRET_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY GLOBAL_S3_DISABLE_ACL=true GLOBAL_S3_DELIVERY_MODE=url GLOBAL_S3_RETENTION_DAYS=30 # ======================================== # AWS SQS GLOBAL (OPCIONAL) # ======================================== GLOBAL_SQS_ENABLED=false # GLOBAL_SQS_REGION=us-east-1 # GLOBAL_SQS_QUEUE_URL=https://sqs.us-east-1.amazonaws.com/123456789012/dinastiapi-events # ======================================== # REDIS STREAMS GLOBAL (OPCIONAL) # ======================================== GLOBAL_REDIS_ENABLED=false # GLOBAL_REDIS_ADDRESS=redis:6379 # GLOBAL_REDIS_PASSWORD=senha-redis # GLOBAL_REDIS_STREAM=dinastiapi:events # ======================================== # WEBSOCKET GLOBAL (OPCIONAL) # ======================================== GLOBAL_WEBSOCKET_ENABLED=true GLOBAL_WEBSOCKET_PATH=/ws/events GLOBAL_WEBSOCKET_MAX_CONNECTIONS=1000 # ============================================================================= # FIM DA CONFIGURAÇÃO # ============================================================================= ``` --- ## 🔍 Validação de Configuração ### Testar Configuração ```bash # Ver configuração ativa ./dinastiapi --help # Testar startup (Ctrl+C para sair) ./dinastiapi --loglevel=debug # Verificar health endpoint curl http://localhost:8080/health # Verificar configuração de DB curl http://localhost:8080/health | jq '.database' ``` ### Verificar Logs ```bash # Logs em tempo real (console) ./dinastiapi --logtype=console --color=true --loglevel=debug # Logs em arquivo ./dinastiapi > logs/app.log 2>&1 & tail -f logs/app.log # Systemd (Linux) sudo journalctl -u dinastiapi -f # LaunchDaemon (macOS) tail -f /opt/dinastiapi/logs/stdout.log # Docker docker logs -f dinastiapi ``` ### Debug de Problemas ```bash # 1. Verificar ENV vars carregadas env | grep DINASTIAPI env | grep GLOBAL # 2. Testar conexão de banco de dados # PostgreSQL: psql $DATABASE_URL -c "SELECT version();" # MySQL: mysql --uri=$DATABASE_URL -e "SELECT VERSION();" # SQLite: sqlite3 ./data/dinastiapi.db ".schema" # 3. Testar webhooks curl -X POST https://seu-webhook.com/events \ -H "Content-Type: application/json" \ -d '{"test": "evento de teste"}' # 4. Testar RabbitMQ # Ver filas: rabbitmqadmin list queues # Ver exchanges: rabbitmqadmin list exchanges # 5. Testar S3 aws s3 ls s3://dinastiapi-media/ ``` --- ## 📚 Recursos Adicionais - **Instalação**: [INSTALL.md](./INSTALL.md) - **README**: [../README.md](../README.md) - **API Docs**: `http://localhost:8080/api/docs` - **Changelog**: [../CHANGELOG.md](../CHANGELOG.md) - **Suporte**: suporte@dinastiapi.com --- **Versão do Guia**: 1.0 **Última Atualização**: 2025-11-07