Work feito nesta sessão: - Traefik routes.yml: crm.m5digital.net.br → twenty-crm (Twenty substitui Hermes CRM) - Backup pre-fase3 salvo em /root/backups/2026-07-06_pre-crm-reorg/ - 3 IPs hardcoded substituídos por container names (video, chatwoot, twenty) - API key OpenWA recuperada do .api-key (regenerada em 29/jun/2026) - Workflows n8n JSON prontos para WhatsApp → CRM e CRM → WhatsApp - Documentação completa em workflows/README-FASE5-OPENWA-TWENTY.md Pendência: import manual dos workflows via n8n UI após login wizard. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
114 lines
4.1 KiB
Markdown
114 lines
4.1 KiB
Markdown
# Fase 5 — Integração WhatsApp (OpenWA) ↔ Twenty CRM via n8n
|
|
|
|
## Status atual (06/jul/2026)
|
|
|
|
### ✅ O que está pronto
|
|
- OpenWA rodando (`https://wa.m5digital.net.br`), API funcional
|
|
- API key OpenWA recuperada: gravada em `/app/data/.api-key` (regenerada em 29/jun/2026)
|
|
- `https://crm.m5digital.net.br` apontando para Twenty CRM
|
|
- n8n rodando, 3 webhooks ativos (twenty-webhook, chatwoot-webhook, saleor-webhook)
|
|
- URL pública `https://n8n.m5digital.net.br/webhook/{path}` acessível externamente
|
|
- Workflows JSON prontos em:
|
|
- `/root/ecommerce/workflows/m5-openwa-to-twenty.json` (entrada WhatsApp → CRM)
|
|
- `/root/ecommerce/workflows/m5-twenty-to-openwa.json` (saída CRM → WhatsApp)
|
|
|
|
### ⚠️ Pendência: login do n8n
|
|
|
|
Ao longo da investigação:
|
|
- API key correta: `n8n_api_6878ecab2c6a0c5a58be3b265e1227075a3c60e3c7f430c574ec2043029bdc2d`
|
|
- Email correto do owner: `admin@m5online.com.br`
|
|
- Senha foi resetada (`user-management:reset`) — você precisa definir nova senha via wizard
|
|
|
|
**Ação sua**: ir em `https://n8n.m5digital.net.br`, completar setup wizard (vai pedir email + senha nova).
|
|
|
|
---
|
|
|
|
## Como importar os workflows via n8n UI (depois do login)
|
|
|
|
### Workflow 1: M5 — OpenWA → Twenty CRM
|
|
1. Abrir https://n8n.m5digital.net.br
|
|
2. Clicar **Workflows** no menu lateral
|
|
3. Botão **+ New workflow** (canto superior direito)
|
|
4. Clicar nos 3 pontinhos (⋮) → **Import from File...**
|
|
5. Selecionar `/root/ecommerce/workflows/m5-openwa-to-twenty.json`
|
|
6. **Activate** (toggle no topo)
|
|
|
|
**O que ele faz:**
|
|
- Recebe `POST https://n8n.m5digital.net.br/webhook/openwa-incoming`
|
|
- Filtra apenas evento `message.received` do OpenWA
|
|
- Extrai `phone`, `name`, `message` do payload
|
|
- Cria Note no Twenty CRM com `[Phone: 5511999999999] mensagem do cliente`
|
|
|
|
**Campos que serão gravados no Twenty** (assumindo schema padrão):
|
|
- `note.body` — texto da mensagem com prefixo do telefone
|
|
- `note.title` — "WhatsApp"
|
|
|
|
### Workflow 2: M5 — Twenty CRM → OpenWA (resposta)
|
|
1. Importar `/root/ecommerce/workflows/m5-twenty-to-openwa.json`
|
|
2. **Activate**
|
|
|
|
**O que ele faz:**
|
|
- Recebe `POST https://n8n.m5digital.net.br/webhook/twenty-outgoing`
|
|
- Pega `person.phone` + `note.body` do payload
|
|
- Envia via OpenWA API `POST /api/sessions/marcos-pessoal/messages/send-text`
|
|
|
|
---
|
|
|
|
## Como registrar o webhook no OpenWA (depois)
|
|
|
|
Quando você tiver uma sessão WhatsApp ativa (`READY` no dashboard), registrar webhook:
|
|
|
|
```bash
|
|
OPENWA_KEY="owa_k1_1e56b98c39a2daa5bdb537d04f35da17117021bedc8c1de80eaba2926c584b39"
|
|
SESSION="marcos-pessoal"
|
|
N8N_HOOK="https://n8n.m5digital.net.br/webhook/openwa-incoming"
|
|
|
|
curl -sk -X POST "https://wa.m5digital.net.br/api/sessions/$SESSION/webhooks" \
|
|
-H "X-API-Key: $OPENWA_KEY" \
|
|
-H "Content-Type: application/json" \
|
|
-d "{
|
|
\"url\": \"$N8N_HOOK\",
|
|
\"events\": [\"message.received\", \"session.status\"],
|
|
\"secret\": \"defina-seu-segredo-aqui\"
|
|
}"
|
|
```
|
|
|
|
**Saída esperada:** 201 Created com `id`, `sessionId`, `url`, `events`, `active: true`.
|
|
|
|
---
|
|
|
|
## Como conectar o Twenty → n8n (saída CRM)
|
|
|
|
1. Login no Twenty: https://crm.m5digital.net.br
|
|
2. **Settings → Webhooks** (canto superior direito)
|
|
3. New webhook:
|
|
- **URL**: `https://n8n.m5digital.net.br/webhook/twenty-outgoing`
|
|
- **Events**: `note.created`, `person.updated`
|
|
- **Secret**: mesma do n8n
|
|
4. Salvar
|
|
|
|
---
|
|
|
|
## Validação end-to-end
|
|
|
|
1. Enviar mensagem WhatsApp para o número da sessão `marcos-pessoal`
|
|
2. OpenWA dispara webhook → n8n recebe
|
|
3. n8n extrai dados → chama `https://crm.m5digital.net.br/graphql`
|
|
4. Verificar no Twenty: nova Note com `[Phone: ...] mensagem`
|
|
|
|
**Reverse:**
|
|
1. No Twenty, criar Note manualmente com texto "teste via CRM"
|
|
2. Webhook do Twenty dispara → n8n recebe
|
|
3. n8n chama OpenWA send-text
|
|
4. WhatsApp recebe a mensagem
|
|
|
|
---
|
|
|
|
## Próximas melhorias (depois que validação passar)
|
|
|
|
- Adicionar filtro por número (não criar Note de contatos bloqueados)
|
|
- Adicionar idempotência (não duplicar Note se mesma mensagem chegar 2x)
|
|
- Adicionar suporte a mídia (imagem, áudio, documento)
|
|
- Adicionar Lookup de Company por nome se a mensagem mencionar empresa
|
|
- Adicionar twilio de 24h após última msg (regra WhatsApp Business)
|