chatwoot-develop/.context/planos/wuzapi_walkthrough.md

63 lines
3.1 KiB
Markdown

# Integração Nativa WuzAPI (V1 Final)
## Visão Geral
Integração 100% nativa do WuzAPI (Go) com o Chatwoot, eliminando a necessidade de n8n/Typebot. A solução suporta envio e recebimento de mensagens de texto, sincronização de mensagens do celular e automação de webhook.
## Conquistas Técnicas (V1.5)
### 1. Mensagens de Entrada (Inbound)
- **Parser Estrito**: Filtra e normaliza eventos do WuzAPI.
- **Deduplicação Inteligente**: Usa `Info.ID` para evitar mensagens duplicadas.
- **Tratamento de Loops**: Ignora eco de mensagens (`from_me`) se não for uma mensagem de sincronia.
### 2. Mensagens de Saída (Outbound) Fixado
- **Criptografia Real**: Tokens são armazenados com `encrypts` do Rails 7.
- **Autenticação Corrigida**:
- Problema Anterior: O banco salvava o token em `encrypted_wuzapi_user_token` mas o Rails buscava em `wuzapi_user_token`.
- Solução: Migração renomeou as colunas para o padrão do Rails (`wuzapi_user_token` contendo o dado criptografado).
- **Envio Confiável**: Headers de autenticação (`token: ...`) agora são gerados com o token decriptado corretamente.
### 3. Sincronia Mobile (Two-Way Sync)
- **Lógica de Espelhamento**: Mensagens enviadas pelo celular (App WhatsApp) são capturadas pelo Chatwoot.
- **Conversão de Tipo**: O sistema identifica `Info.IsFromMe == true` e converte para `message_type: :outgoing` e `sender: nil`.
- **Benefício**: Histórico completo da conversa, independente de onde foi enviada.
### 4. Automação (VPS Ready)
- **Configuração Automática de Webhook**:
- Ao criar um canal WuzAPI, o sistema dispara `after_create_commit :setup_webhooks`.
- Configura automaticamente a URL: `#{ENV['FRONTEND_URL']}/webhooks/whatsapp/#{phone_number}`.
- Define `events: ['All']` no WuzAPI.
## Guia de Instalação (VPS / Portainer)
### Variáveis de Ambiente Necessárias
Certifique-se de que estas variáveis estejam no `.env` da VPS:
```bash
FRONTEND_URL=https://seu-chatwoot.com
# Chaves de Criptografia (Gere com `rake secret`)
ACTIVE_RECORD_ENCRYPTION_PRIMARY_KEY=...
ACTIVE_RECORD_ENCRYPTION_DETERMINISTIC_KEY=...
ACTIVE_RECORD_ENCRYPTION_KEY_DERIVATION_SALT=...
```
### Passos de Deploy
1. **Pull Code**: Baixe a última versão.
2. **Migrations**: `bundle exec rails db:migrate` (Essencial para renomear colunas).
3. **Restart**: Reinicie os containers (`web` e `sidekiq`) para limpar caches de esquema.
### Troubleshooting Comum
| Sintoma | Causa Provável | Solução |
| ---------------------- | -------------------------- | --------------------------------------------------------------------------------------- |
| **Erro 401 no Envio** | Token salvo incorretamente | Reinicie o app e re-salve o token do canal. |
| **Mensagem não chega** | Webhook URL errada | Verifique se `FRONTEND_URL` está correto. Use "Atualizar" no canal para forçar o setup. |
| **Duplicidade** | Deduplicação falhando | Verifique logs por "WuzAPI: Ignoring duplicate". |