zapo foi feito para cargas de trabalho longevas e multi-sessão. Esta página reúne as decisões operacionais que importam quando você passa do protótipo local.
Persista as credenciais (não refaça o pareamento)
Sessões de produção precisam usar uma store durável para os domíniosauth e Signal, além de um sessionId estável entre reinícios. A store em memória perde tudo ao sair, forçando um novo pareamento a cada boot.
sessionId deixa as credenciais anteriores órfãs — trate-o como a chave durável de um dispositivo/conta.
Escolha um backend de store
Você pode misturar backends por domínio (ex.:
auth/signal no Postgres, caches no Redis). Veja Instalação e a referência de stores.
Shutdown gracioso
Chamedisconnect() (nunca logout()) no shutdown — ele descarrega os dados pendentes de write-behind e fecha o socket sem desvincular o dispositivo, então o próximo boot retoma a partir da store.
Rode muitas sessões
Uma única store pode conter muitas contas independentes, cada uma indexada porsessionId. Crie um WaClient por conta:
Ajuste para throughput
- Write-behind agrupa as escritas de mensagens/threads/contatos fora do hot path. Ajuste
writeBehind.maxPendingKeys/maxWriteConcurrency/flushTimeoutMsao seu banco. (config) - History sync (
history.enabled) é ligado por padrão e adiciona um download inicial grande. Defina comofalsese você não persiste mailbox/threads/contacts; userequireFullSyncdeliberadamente. - Bots que não devem aparecer online:
markOnlineOnConnectéfalsepor padrão, então bots ficam invisíveis ao conectar. Passetrueapenas quando quiser uma presença “online” visível. - Timeouts (
iqTimeoutMs,keepAliveIntervalMs,deadSocketTimeoutMs, …) vêm com padrões de produção — sobrescreva só com motivo. (config)
Política de reconexão & erros
Ozapo não reconecta sozinho — assuma a política. Ligue um loop de backoff (Reconexão) e classifique as falhas (Erros & desconexões) para parar em razões fatais (banned, not_authorized, logout) em vez de martelar o servidor.
Logging
Use um logger estruturado em produção:pretty: false emite linhas JSON adequadas a agregadores de log. Caia para debug / trace só ao investigar.
Segurança & versionamento
- Credenciais são segredos.
WaAuthCredentialscontém as chaves do dispositivo — se você as persistir fora da store embutida, criptografe em repouso. (Autenticação) - Nunca habilite
dangerous.*em produção — essas flags desabilitam verificações de segurança. (config) - Versionamento. O
zapoé1.0e segue versionamento semântico — breaking changes só acontecem em um novo major. Use um range de versão ou lockfile como de costume, e revise o changelog antes de upgrades de major.
