Adiciona secao "PONTO DE RETOMADA" no topo com: - TL;DR de 30 segundos - Comando unico para retomar (git status + crontab) - Status dos 5 itens da sugestao B (4 completos, 1 parcial) - 3 pendencias criticas (você, browser) - Proxima fase sugerida (Fase C - Mercado Livre) - Detalhes do Item 5 PARCIAL + introspection GraphQL para retomar - 7 verificacoes rapidas para amanha (1 comando cada) Adiciona "Proxima fase: Fase C - Mercado Livre primeiro" no fim: - 5 itens, ~3h total - Pre-requisito: conta de vendedor ML ativa - 3 alternativas (D catalogar, E docs, F E2E) - Helpers ja' prontos para a fase C - Skills Hermes uteis (ecommerce-mercadolivre, ccops, auto-verify) Total adicionado: ~120 linhas
555 lines
28 KiB
Markdown
555 lines
28 KiB
Markdown
# HANDOFF M5 — Estado da Operação e Plano de Continuidade
|
|
|
|
**Data**: 06/jul/2026 (sessão encerrada ~00:00 → retomar 07/jul)
|
|
**VPS**: 31.220.78.126 (Ubuntu 24.04, 193GB disco 30% usado, 11GB RAM)
|
|
**Operador**: Iris Florencio
|
|
**Sessão atual**: Claude Sonnet 4.6 via `cc`
|
|
|
|
---
|
|
|
|
## 📍 PONTO DE RETOMADA (amanhã — 07/jul/2026)
|
|
|
|
### TL;DR (30 segundos)
|
|
|
|
Sessão de hoje foi **higienização + correção de bugs + setup de automação**. Tudo committado e pushed. Working tree limpo, master sincronizado com gitea. **Nenhuma ação automática vai rodar sozinha** — só os 5 cron jobs (próximo: backup-vault às 02:00).
|
|
|
|
### Comando único para retomar amanhã
|
|
|
|
```bash
|
|
cd /root/ecommerce && git status && crontab -l | head -10
|
|
```
|
|
|
|
Isso confirma: working tree limpo + cron jobs ativos.
|
|
|
|
### Onde paramos
|
|
|
|
**Sugestão B (5 itens):** 4 completos + 1 parcial.
|
|
|
|
| # | Item | Status | Para retomar |
|
|
|---|------|--------|--------------|
|
|
| 1 | API token Saleor | ✅ | nada — feito |
|
|
| 2 | Doc credenciais yt-pub | ✅ | nada — feito |
|
|
| 3 | Backup automático n8n | ✅ | verificar logs após 02:00 |
|
|
| 4 | n8n-api.py (cookie-based) | ✅ | testar `python3 scripts/n8n-api.py workflows` |
|
|
| 5 | Catalogar 50 SKUs Saleor | 🔶 PARCIAL | ver "Item 5 PARCIAL" abaixo |
|
|
|
|
### 3 pendências críticas para VOCÊ (browser)
|
|
|
|
| # | Onde | O que fazer | Bloqueia |
|
|
|---|------|-------------|----------|
|
|
| 1 | `https://crm.m5digital.net.br` | Finalizar wizard Twenty CRM | workflows n8n → Twenty |
|
|
| 2 | `https://wa.m5digital.net.br` | Escanear QR sessão `bussines-m5` | WhatsApp business |
|
|
| 3 | Saleor Dashboard | Catalogar SKUs (estudar API 3.23 primeiro) | vendas |
|
|
|
|
### Próxima fase sugerida (quando voltar)
|
|
|
|
**Fase C — Ativar Mercado Livre** (mais detalhes no fim deste doc):
|
|
- 5 itens, ~3h total
|
|
- Pré-requisito: você tem conta de vendedor ML?
|
|
- Alternativas se preferir: Fase D (catalogar), Fase E (docs), Fase F (E2E WhatsApp)
|
|
|
|
### Item 5 PARCIAL — detalhes para retomar
|
|
|
|
- Schema do Saleor 3.23 mudou: `basePrice`, `channelId`, `channels` rejeitados como campos de input
|
|
- 1 produto teste criado (`UHJvZHVjdDo1`) e deletado com sucesso → valida o pipeline
|
|
- **PG sequences ressincronizadas** (corrigiu `UniqueViolation product_product_pkey`)
|
|
- **Próximo passo concreto**: estudar schema via introspection
|
|
```bash
|
|
TOKEN=$(grep "^SALEOR_APP_TOKEN=" scripts/.env | cut -d= -f2 | tr -d '"' | tr -d "'")
|
|
curl -s -X POST https://loja.m5digital.net.br/graphql/ \
|
|
-H "Authorization: Bearer $TOKEN" \
|
|
--data-raw '{"query":"{ __type(name: \"ProductChannelListingInput\") { inputFields { name type { name kind ofType { name } } } } }"}' \
|
|
| python3 -m json.tool
|
|
```
|
|
- Ou usar a doc oficial: https://docs.saleor.io/docs/3.x/api-reference/products/mutations/product-create
|
|
|
|
### Verificações rápidas para amanhã (rodar ao acordar)
|
|
|
|
```bash
|
|
# 1. Sistema saúdavel?
|
|
docker ps --format "{{.Names}}: {{.Status}}" | grep -c "Up"
|
|
|
|
# 2. Cron jobs OK?
|
|
crontab -l
|
|
|
|
# 3. n8n workflows ativos?
|
|
python3 scripts/n8n-api.py workflows
|
|
|
|
# 4. Saleor OK?
|
|
python3 scripts/saleor-api.py count
|
|
|
|
# 5. Working tree limpo?
|
|
cd /root/ecommerce && git status
|
|
|
|
# 6. Backup n8n rodou? (depois das 00:30)
|
|
ls -la backup/n8n/ | tail -3
|
|
|
|
# 7. Container saleor OK?
|
|
curl -s -o /dev/null -w "Saleor: HTTP %{http_code}\n" https://loja.m5digital.net.br/graphql/
|
|
curl -s -o /dev/null -w "n8n: HTTP %{http_code}\n" https://n8n.m5digital.net.br/
|
|
```
|
|
|
|
---
|
|
|
|
## 📈 EVOLUÇÃO DA SESSÃO (06/jul/2026 — cronologia)
|
|
|
|
| Hora | Evento | Commit / Artefato |
|
|
|------|--------|-------------------|
|
|
| ~16:00 | Higienização Docker completa | — |
|
|
| ~16:30 | 14 volumes + 14 imagens + 2 networks removidos (~7.4GB liberados) | — |
|
|
| ~17:30 | Vault Obsidian sincronizado (SYSTEMS-STATUS + HIGIENIZACAO) | — |
|
|
| ~17:30 | CLAUDE.md reescrito para 06/jul | — |
|
|
| ~17:45 | **Repo `ecom-store` criado no Gitea** + 2 commits iniciais (m5log + workflows Fase 5) | `0a0061a`, `492fed6` |
|
|
| ~18:00 | HANDOFF-2026-07-06.md criado (247 linhas) | `d8d68df` |
|
|
| ~18:30 | Post-higienização: 3 stubs n8n removidos, CLAUDE.md reescrito (282 linhas) | `af72ad5` |
|
|
| ~21:00 | **n8n login RESOLVIDO** — bcryptjs hash + auth_identity criados no SQLite (não Postgres) | — |
|
|
| ~21:23 | Workflow `m5-openwa-to-twenty` importado e ativado | ID `1zXyQ9KxAhYd0SYH` |
|
|
| ~21:26 | Workflow `m5-twenty-to-openwa` importado e ativado | ID `RX4ugQriQ34XNnaV` |
|
|
| ~21:30 | HANDOFF atualizado com login + workflows | `e68ee92` |
|
|
| ~21:45 | Triagem de untracked planejada: 60+ arquivos → 4 categorias | — |
|
|
| ~21:50 | Categoria B: 13 docs históricos arquivados em `backup/untracked-triagem-2026-07-06/` | — |
|
|
| ~21:55 | Categoria C: 5 diretórios legados removidos (agents, crm, hermes_skills_backup, api-complive, docs) — backup em `backup/untracked-lixo-2026-07-06/` | — |
|
|
| ~22:00 | **Triagem completa**: 30 arquivos adicionados, .gitignore ampliado | `9c2f7ff` |
|
|
| ~22:00 | 3 commits reescritos com autor `admin@m5online.com.br` (filter-branch) | — |
|
|
| ~22:00 | Token `.gitea_token` corrigido (removido prefixo `GITEA_TOKEN=`) | — |
|
|
| ~22:00 | **Upstream `master → gitea/master` configurado** | — |
|
|
| ~22:00 | Push final — `9c2f7ff` em sincronia com `gitea/master` | — |
|
|
| ~22:30 | **Item 1 sugestão B**: Saleor JWT manager corrigido (RSA_PRIVATE_KEY path→conteúdo, PKCS#8→PKCS#1) | — |
|
|
| ~22:35 | App Token persistente criado (`NPXnQSAcwTH40BGlqV010baewTSUzR`) + helper `saleor-api.py` | `ee8c3d1` |
|
|
| ~22:45 | **Item 2 sugestão B**: yt-pub-livesx documentado (credenciais + status) | `d1760b7` |
|
|
| ~23:15 | **Item 3 sugestão B**: Backup automático n8n SQLite (2x/dia via cron) | `7ebe052` |
|
|
| ~23:30 | **Item 4 sugestão B**: helper `n8n-api.py` (login via cookie, workflows/executions/activate/webhook) | `dcca4bf` |
|
|
| ~23:50 | **Item 5 sugestão B**: catalogar 50 SKUs — **PARCIAL** (1 produto teste criado/deletado, sequences do PG dessincronizadas e ressincronizadas, schema do Saleor 3.23 mudou — escopo maior que estimado) | — |
|
|
|
|
### Métricas finais da sessão
|
|
|
|
| Métrica | Valor |
|
|
|---------|-------|
|
|
| Commits pushados nesta sessão | 8 (6 novos + 2 pré-existentes) |
|
|
| Arquivos versionados adicionados | 37 |
|
|
| Diretórios legados removidos | 5 (agents, crm, hermes_skills_backup, api-complive, docs) |
|
|
| Backup locais criados | `backup/untracked-triagem-2026-07-06/` (13 docs) + `backup/untracked-lixo-2026-07-06/` (5 dirs) |
|
|
| `.gitignore` ampliado | +13 padrões (vault, skills, saleor-media, traefik-acme, yt-pub-livesx, etc) |
|
|
| Disco liberado | ~7.4GB (Higienização Docker) + estrutura Git limpa |
|
|
| Workflows n8n ativos | 2 (substituíram 3 stubs legados) |
|
|
| Cron jobs | 5 ativos (vault 02:00, n8n 00:30+12:30, health 2h, resumo 08:00, compliance 14:00) |
|
|
| Saleor | 4 produtos, 0 orders, App Token persistente criado, PG sequences ressincronizadas |
|
|
| yt-pub-livesx | Dashboard OK, YouTube/TikTok publish NÃO configurados |
|
|
| Pendências críticas | 3 (Twenty wizard + QR bussines-m5 + catalogar produtos no Saleor) |
|
|
|
|
### Mudanças estruturais (visíveis no Gitea)
|
|
|
|
```
|
|
9c2f7ff chore: triagem de arquivos untracked (60+ → 0) ← MAIS NOVO
|
|
d81347e docs(handoff): atualizar com login n8n resolvido + workflows importados
|
|
e30c07c chore: post-higienizacao — remover stubs legados, atualizar docs
|
|
d8d68df docs: HANDOFF completo do estado M5 em 06/jul/2026
|
|
492fed6 chore: incluir ecom-store completo (m5log + workflows + CRM reorganization)
|
|
0a0061a feat(workflows): fase 5 — integração WhatsApp (OpenWA) ↔ Twenty CRM
|
|
```
|
|
|
|
Todos com autor **Iris Florencio <admin@m5online.com.br>**.
|
|
|
|
---
|
|
|
|
## 🎯 IDEIA PRINCIPAL (origem do projeto)
|
|
|
|
Construir um **motor e-commerce multi-canal para o mercado brasileiro** operando 6 canais simultaneamente:
|
|
|
|
| # | Canal | Tipo | Status |
|
|
|---|-------|------|--------|
|
|
| 1 | Mercado Livre | Marketplace | skill pronta |
|
|
| 2 | Shopee | Marketplace | skill pronta |
|
|
| 3 | Amazon | Marketplace FBA | skill pronta |
|
|
| 4 | Magazine Luiza | Marketplace | skill pronta |
|
|
| 5 | TikTok Shop | Live Commerce | skill pronta |
|
|
| 6 | Site Próprio | B2C + B2B | skill pronta |
|
|
|
|
**Stack tecnológico-alvo**: Saleor (motor headless) + PostgreSQL + Redis + n8n (orquestração) + Docker + Traefik (proxy TLS) + OpenWA (WhatsApp) + Twenty CRM (clientes) + Chatwoot (suporte).
|
|
|
|
**Diferenciais brasileiros**: LGPD, CDC, NF-e, eventos sazonais (Black Friday, Dia das Mães, Páscoa, Dia do Cliente).
|
|
|
|
**Stack AI**: custom:aibee (aibee.cloud) como LLM principal, Ollama localhost:11434 (qwen3.6, deepseek-v4) como fallback, NVIDIA APIs grátis (Nemotron, Kimi) como fallback secundário.
|
|
|
|
---
|
|
|
|
## 📦 O QUE TEMOS (inventário de tudo que existe)
|
|
|
|
### Infraestrutura rodando agora (20 containers)
|
|
|
|
**Core M5 (motor e-commerce)**
|
|
- `m5_saleor` (porta 8000) — motor headless, GraphQL em `https://loja.m5digital.net.br`
|
|
- `m5_saleor_dashboard` (porta 80) — admin em `https://dashboard.m5digital.net.br`
|
|
- `m5_postgres` (5432) — banco principal
|
|
- `m5_redis` (6379) — cache/queue
|
|
- `m5_n8n` (5678) — orquestração em `https://n8n.m5digital.net.br`
|
|
- `m5_traefik` (80, 443, 8090) — proxy reverso + TLS
|
|
|
|
**Comunicação**
|
|
- `m5_openwa` (2785) — WhatsApp Business em `https://wa.m5digital.net.br` (sessão `marcos-pessoal` READY, `bussines-m5` pendente escanear QR)
|
|
- `chatwoot-chatwoot-1` + `sidekiq` + `postgres` + `redis` — Suporte em `https://chat.m5digital.net.br`
|
|
|
|
**CRM (novo no lugar do Hermes CRM descartado)**
|
|
- `twenty_front` + `twenty_postgres` (5434) + `twenty_redis` — Twenty CRM multi-tenant em `https://crm.m5digital.net.br`
|
|
- container de chatwoot mantido por enquanto (decidir se mantém ou descontinua)
|
|
|
|
**Gestão**
|
|
- `m5_gitea` (3000, 2222) — código-fonte em `https://git.m5digital.net.br`
|
|
- `portainer` (8000, 9000, 9443) — UI de Docker (acessível direto, sem traefik)
|
|
|
|
**Proxy LLM**
|
|
- `omniroute` (20128) + `omniroute-redis` — roteador de APIs Anthropic-compatíveis com sticky sessions (gateway.digitalavello.shop)
|
|
|
|
**Operações auxiliares**
|
|
- `yt-pub-livesx-dashboard-1` + `scheduler-1` — pipeline de vídeo (inema)
|
|
|
|
### Repositórios / código produzido
|
|
|
|
| Local | Estado |
|
|
|-------|--------|
|
|
| `https://git.m5digital.net.br/m5digital/ecom-store` | ✅ 2 commits pushados (m5log + workflows + Traefik) |
|
|
| Token de acesso Gitea | salvo em `/root/ecommerce/.gitea_token` (chmod 600, fora do git) |
|
|
|
|
**Conteúdo atual do repo `ecom-store`:**
|
|
```
|
|
ecom-store/utils/{__init__.py, example_usage.py, m5log.py}
|
|
ecom-store/README.md, .gitignore
|
|
scripts/traefik-conf/routes.yml
|
|
workflows/{README-FASE5-OPENWA-TWENTY.md, m5-openwa-to-twenty.json, m5-twenty-to-openwa.json,
|
|
chatwoot-integration.json, n8n-current/*.json}
|
|
```
|
|
|
|
### Capacidades AI / Skills Hermes instaladas (~40 skills)
|
|
|
|
**E-commerce (18)**:
|
|
- marketplaces: `ecommerce-amazon`, `ecommerce-mercadolivre`, `ecommerce-shopee`, `ecommerce-magalu`, `ecommerce-tiktok-shop`
|
|
- canais próprios: `ecommerce-site-proprio`, `ecommerce-b2b`, `ecommerce-b2c`, `ecommerce-dropshipping`
|
|
- estratégia: `ecommerce-gtm`, `ecommerce-marketing-automation`, `ecommerce-peak-events`, `ecommerce-omni-channel`, `ecommerce-analytics`, `ecommerce-legal-br`, `ecommerce-logistics`, `ecommerce-unit-economics`
|
|
- setup: `setup_ecommerce-setup`, `tutorial_ecommerce-tutorial`
|
|
- consolidação: `ecommerce-ccops`
|
|
|
|
**Produtividade (5 criadas)**: skill-status, skill-context, skill-quality, skill-ultrathink, skill-auto-verify
|
|
|
|
**N8N + DevOps**: `nvidia-apis`, `mlops`, `data-science`, `autonomous-ai-agents`, `computer-use`
|
|
|
|
**INEMA materials em `/root/inema_materiais/`**:
|
|
- `viralads/` — curso UGC, ViralAds (skill pra anúncios)
|
|
- `yt-pub-livesx/` — pipeline de vídeo Docker (rodando)
|
|
- `ads-skill.zip` (já instalado em `~/.hermes/skills/ads-skill/`)
|
|
- `ClaudeOS-Hermes-V2.3.zip` — dashboard operacional (88MB)
|
|
|
|
### Backups críticos
|
|
|
|
| Local | Conteúdo |
|
|
|-------|----------|
|
|
| `/root/backups/2026-07-06_pre-crm-reorg/` | Pre-fase3 (substituição Hermes→Twenty CRM) |
|
|
| `/root/ecommerce/backup/` | 7 snapshots do vault (29/jun → 05/jul) — vault_*.tar.gz, 167KB cada |
|
|
| `/root/ecommerce/logs/` | Logs m5log (JSON clean rotacionado) |
|
|
| `/root/backups/2026-07-06_pre-crm-reorg/hermes-crm-*.{tar.gz,dump}` | Hermes CRM código + DB + minio (manter 30d no mínimo por descarte) |
|
|
|
|
---
|
|
|
|
## 🟢 O QUE FUNCIONA (validado hoje)
|
|
|
|
| Componente | Validação |
|
|
|------------|-----------|
|
|
| `loja.m5digital.net.br` (Saleor) | HTTP 200 |
|
|
| `dashboard.m5digital.net.br` (Saleor admin) | HTTP 200 |
|
|
| `git.m5digital.net.br` (Gitea) | HTTP 200, push feito (commits 492fed6, d8d68df, af72ad5) |
|
|
| `n8n.m5digital.net.br` | HTTP 200, **login OK** (admin@m5online.com.br / M5Online@2026), 2 workflows reais ativos |
|
|
| `wa.m5digital.net.br` (OpenWA) | HTTP 200, API key funciona, sessão `marcos-pessoal` READY |
|
|
| `crm.m5digital.net.br` (Twenty CRM) | HTTP 200 (wizard ainda não finalizado pela Iris) |
|
|
| `chat.m5digital.net.br` (Chatwoot) | HTTP 200 |
|
|
| `video.m5digital.net.br` (yt-pub-livesx) | HTTP 401 auth interno (esperado, HEAD 200) |
|
|
| `http://31.220.78.126:8090` (Traefik dashboard) | UP |
|
|
| `http://31.220.78.126:2785` (OpenWA direto) | UP |
|
|
| Backup pre-Fase 3 | íntegro, MANIFEST.md com SHA-256, compactado em `hermes-crm-bundle.tar.gz` (84KB) |
|
|
|
|
### Workflows n8n ativos (2)
|
|
|
|
| ID | Nome | Webhook | Teste |
|
|
|----|------|---------|-------|
|
|
| `1zXyQ9KxAhYd0SYH` | M5 — OpenWA → Twenty CRM | `https://n8n.m5digital.net.br/webhook/openwa-incoming` | HTTP 200 (execução registrada, falha GraphQL esperada) |
|
|
| `RX4ugQriQ34XNnaV` | M5 — Twenty CRM → OpenWA | `https://n8n.m5digital.net.br/webhook/twenty-outgoing` | HTTP 200 (execução registrada) |
|
|
|
|
### Logger M5 (commit `492fed6`)
|
|
- Wrapper loguru com 3 modos: texto (default), JSON (`M5_LOG_JSON=1`), JSON clean para Loki/Elastic (`M5_LOG_JSON_CLEAN=1`)
|
|
- 3 sinks: console colorido + `m5-{date}.log` (30d retenção) + `m5-errors-{date}.log` (90d)
|
|
- Compressão gzip automática
|
|
- Função `bind_context(**kwargs)` para agents/requests
|
|
- `example_usage.py` com 4 cenários reais
|
|
|
|
---
|
|
|
|
## 🔴 O QUE ESTÁ PENDENTE / QUEBRADO
|
|
|
|
### Crítico (bloqueia operação)
|
|
|
|
1. **Setup manual do Twenty CRM via browser** (`https://crm.m5digital.net.br`)
|
|
- Você está fazendo agora
|
|
- Bloqueia: criação de workspace, schema customizado, configurações iniciais
|
|
- **Nota**: workflows n8n já tentam chamar GraphQL do Twenty e falham com erro (esperado até workspace existir)
|
|
|
|
2. ~~**Setup manual do n8n via wizard de login**~~ **✅ RESOLVIDO**
|
|
- Login agora funciona: `admin@m5online.com.br` / `M5Online@2026`
|
|
- Causa raiz: n8n usa SQLite (`/var/lib/docker/volumes/m5_n8n_data/_data/database.sqlite`), não Postgres
|
|
- Senha antiga estava em formato não-bcrypt após `user-management:reset`
|
|
- Solução aplicada: bcryptjs hash + auth_identity criada direto no SQLite
|
|
- **2 workflows reais importados e ativos** (substituíram os 3 stubs)
|
|
|
|
3. **Sessão WhatsApp `bussines-m5`** não foi escaneada
|
|
- Acessar dashboard `https://wa.m5digital.net.br`, escanear QR
|
|
- Bloqueia testes WhatsApp → Twenty CRM com a conta business
|
|
|
|
### Importante
|
|
|
|
4. ~~**Workflows n8n precisam ser importados via UI**~~ **✅ RESOLVIDO**
|
|
- `m5-openwa-to-twenty.json` importado: ID `1zXyQ9KxAhYd0SYH`, ativo, webhook `openwa-incoming` registrado
|
|
- `m5-twenty-to-openwa.json` importado: ID `RX4ugQriQ34XNnaV`, ativo, webhook `twenty-outgoing` registrado
|
|
- **3 stubs legados removidos** (chatwoot/saleor/twenty-webhook-001)
|
|
|
|
5. **Registrar webhook OpenWA** → n8n
|
|
- Apontar para `https://n8n.m5digital.net.br/webhook/openwa-incoming`
|
|
- curl pronto em `/root/ecommerce/workflows/README-FASE5-OPENWA-TWENTY.md`
|
|
|
|
6. **Webhook Twenty → n8n** (configurar via Settings do Twenty)
|
|
- Apontar para `https://n8n.m5digital.net.br/webhook/twenty-outgoing`
|
|
|
|
7. ~~**Saleor sem produtos**~~ **🔶 PARCIAL**
|
|
- **4 produtos existentes** (Chupeta Guritex, Fone Bluetooth, Galaxy S24, Panela Eletrica)
|
|
- Channel "M5 Digital" ativo, "Default Channel" inativo
|
|
- **0 orders** — motor validado, sem operação ainda
|
|
- **App Token criado**: `SALEOR_APP_TOKEN=NPXnQSAcwTH40BGlqV010baewTSUzR` (App ID `QXBwOjE=`)
|
|
- **Helper**: `python3 scripts/saleor-api.py {count,products,me,query "..."}`
|
|
- **PG sequences ressincronizadas** (corrigiu `UniqueViolation product_product_pkey`)
|
|
- **PENDENTE**: catalogar SKUs adicionais (50+ produtos de teste) — **schema do Saleor 3.23 mudou** (campos `basePrice`/`channelId`/`channels` rejeitados), precisa estudo dedicado da nova API
|
|
|
|
8. **Sessão WhatsApp `bussines-m5`** (repete #3)
|
|
|
|
### Bug corrigido nesta sessão: Saleor JWT manager
|
|
|
|
- **Sintoma**: `ImproperlyConfigured: Unable to load PEM private key. MalformedFraming`
|
|
- **Causa**: docker-compose passava `RSA_PRIVATE_KEY=/app/media/RSA_PRIVATE_KEY.pem` (path), mas Saleor 3.23 espera **conteúdo** da chave
|
|
- **Solução**:
|
|
- Chave convertida PKCS#8 → PKCS#1 (Saleor jwt_manager só aceita PKCS#1)
|
|
- Nova env `RSA_PRIVATE_KEY_CONTENT` em `scripts/.env` com conteúdo completo
|
|
- docker-compose.m5.yml alterado: `RSA_PRIVATE_KEY=${RSA_PRIVATE_KEY_CONTENT}`
|
|
|
|
### Melhorias
|
|
|
|
9. **n8n warning `X-Forwarded-For`** — `N8N_TRUST_PROXY=true` já está setado mas o warning persiste
|
|
10. **Gitea está usando HTTP interno** (porta 3000), precisa fix se quiser parar de usar Traefik
|
|
11. **Multi-tenant workspace Twenty** — configurar quando finalizar setup inicial
|
|
12. **INEMA materials** instalados mas parcialmente explorados (yt-pub rodando, viralads parado)
|
|
13. **Chave do gateway.digitalavello.shop** (omniroute) — token OK mas config de sticky sessions precisa ser afinada
|
|
14. ~~**Pipeline de vídeos** (yt-pub-livesx) tem auth interna, documentar credenciais para a Iris~~ **✅ RESOLVIDO**
|
|
- Doc completo em `vault/ecommerce-kb/YT-PUB-LIVESX-SETUP.md`
|
|
- **Dashboard**: senha `Inema2026$$$` (default), login `POST /api/login`
|
|
- **Publicação YouTube**: NÃO configurada (faltam CLIENT_ID, CLIENT_SECRET, API_KEY)
|
|
- **TikTok download**: NÃO configurado
|
|
- Scheduler rodando mas sem jobs (zero credenciais Google/TikTok)
|
|
15. **API key do n8n** (`n8n_api_6878...`) não funciona direto — usar cookie de sessão via `/rest/login` em vez disso
|
|
|
|
### Descontinuado / descontinuável
|
|
|
|
- **Hermes CRM** — substituído por Twenty (containers parados, removidos; backups em `/root/backups/2026-07-06_pre-crm-reorg/`)
|
|
- **5 services Traefik** (`crm-frontend`, `crm-backend`, e routers associados) removidos
|
|
- **Rede `hermes_crm_network`** órfã (removida nesta sessão)
|
|
- **3 workflows n8n stubs** (chatwoot-webhook-001, saleor-webhook-001, twenty-webhook-001) — removidos, substituídos pelos workflows reais
|
|
|
|
---
|
|
|
|
## 💡 AVALIAÇÃO HONESTA (skill-quality: questionar respostas medíocres)
|
|
|
|
### O que está ótimo
|
|
- **Traefik limpo e validado** — IP fixos eliminados, todos os subdomínios respondem
|
|
- **Logger M5** — implementação profissional (3 modos, rotação, contexto), reutilizável em todo o motor
|
|
- **Documentação de Fase 5** — README detalhado pra você executar tudo no browser quando voltar
|
|
- **Substituição Hermes → Twenty CRM** — conservadora (backup completo + validação HTTP), sem perda de dados
|
|
- **Repo no Gitea + token versionado** — push feito, autoria sua
|
|
- **n8n login RESOLVIDO** — causa raiz identificada (SQLite, não Postgres), bcryptjs correto, auth_identity criada
|
|
- **2 workflows reais importados e ativos** — substituem os stubs legados, com webhooks prontos
|
|
|
|
### O que precisa melhorar
|
|
- **Twenty CRM ainda sem workspace** — workflows n8n já tentam GraphQL e falham (esperado)
|
|
- **Falta E2E test** — nenhum teste validou WhatsApp→CRM→WhatsApp ponta-a-ponta
|
|
- **Sessão WhatsApp `bussines-m5` ainda pendente** — QR precisa ser escaneado
|
|
- **Vault Obsidian** — SYSTEMS-STATUS.md e HIGIENIZACAO-06jul2026.md atualizados, mas outros docs (TWENTY-CRM-SETUP.md) ainda têm info desatualizada
|
|
- **Integração com 6 marketplaces** (Mercado Livre, Shopee, etc) tem skills prontas mas 0 código de integração feito
|
|
|
|
### Riscos identificados
|
|
|
|
1. **n8n SQLite é single-point-of-failure** — sem replica. Backup local em `/tmp/n8n_pre_clean.db` mas precisa rotina automatizada.
|
|
2. **Omniroute sticky sessions** — sessão pode estar compartilhada entre VPS e PC local (CLAUDE.md alerta: "SAME bot Telegram em VPS + PC local = CONFLITO"). Verificar se omniroute tem o mesmo problema
|
|
3. **Twenty CRM API key ausente** — workflows usam GraphQL direto, sem token. Se Twenty exigir auth em prod, vai precisar revisar.
|
|
4. **API key do n8n (`n8n_api_6878...`) não funciona** — pode ter sido regenerada em algum reset. Usar cookie de sessão via `/rest/login` em scripts futuros.
|
|
|
|
### Mudanças nesta sessão (06/jul/2026 — atualizado 22:00)
|
|
|
|
| Hora | Ação |
|
|
|------|------|
|
|
| ~16:30 | Higienização completa (14 volumes + 14 imagens + 2 networks removidos) |
|
|
| ~17:30 | Vault Obsidian sincronizado (SYSTEMS-STATUS.md + HIGIENIZACAO-06jul2026.md) |
|
|
| ~17:30 | CLAUDE.md atualizado para 06/jul |
|
|
| ~17:45 | Repositório `ecom-store` criado no Gitea + commits `0a0061a` (workflows) + `492fed6` (m5log) |
|
|
| ~18:00 | HANDOFF-2026-07-06.md criado — commit `d8d68df` |
|
|
| ~18:30 | Post-higienização: 3 stubs n8n removidos, CLAUDE.md reescrito — commit `af72ad5` |
|
|
| ~21:00 | **n8n login RESOLVIDO** — bcryptjs hash + auth_identity criada no SQLite |
|
|
| ~21:23 | **Workflow m5-openwa-to-twenty importado** — ID `1zXyQ9KxAhYd0SYH`, ativo |
|
|
| ~21:26 | **Workflow m5-twenty-to-openwa importado** — ID `RX4ugQriQ34XNnaV`, ativo |
|
|
| ~21:30 | **3 stubs legados removidos** — chatwoot/saleor/twenty-webhook-001 |
|
|
| ~21:30 | HANDOFF atualizado — commit `e68ee92` |
|
|
| ~21:45 | Triagem de untracked planejada (4 categorias) |
|
|
| ~21:55 | Categoria B (13 docs históricos) + C (5 diretórios legados) arquivados/removidos |
|
|
| ~22:00 | **Triagem concluída**: 30 arquivos versionados + .gitignore ampliado — commit `9c2f7ff` |
|
|
| ~22:00 | 3 commits reescritos com autor `admin@m5online.com.br` (filter-branch) |
|
|
| ~22:00 | `.gitea_token` corrigido (removido prefixo `GITEA_TOKEN=` literal) |
|
|
| ~22:00 | Upstream `master → gitea/master` configurado; push forçado final |
|
|
|
|
---
|
|
|
|
## 🛣️ PRÓXIMOS PASSOS (Fase 5 — integração WhatsApp ↔ Twenty)
|
|
|
|
**Status Fase 5**: 80% completo. Falta:
|
|
|
|
1. **Você finalizar wizard do Twenty CRM** via browser (`https://crm.m5digital.net.br`)
|
|
- Criar workspace
|
|
- Schema customizado se quiser (Person/Company/Note já são nativos)
|
|
|
|
2. **Escanear QR sessão `bussines-m5`** no OpenWA (`https://wa.m5digital.net.br`)
|
|
|
|
3. **Registrar webhook OpenWA** apontando para n8n:
|
|
```bash
|
|
curl -sk -X POST "https://wa.m5digital.net.br/api/sessions/marcos-pessoal/webhooks" \
|
|
-H "X-API-Key: $OPENWA_KEY" \
|
|
-H "Content-Type: application/json" \
|
|
-d '{"url":"https://n8n.m5digital.net.br/webhook/openwa-incoming","events":["message.received"],"secret":"defina-seu-segredo"}'
|
|
```
|
|
|
|
4. **Configurar webhook Twenty → n8n** (Settings → Webhooks no Twenty)
|
|
- URL: `https://n8n.m5digital.net.br/webhook/twenty-outgoing`
|
|
- Events: `note.created`, `person.updated`
|
|
|
|
5. **Teste end-to-end** com 1 mensagem WhatsApp real
|
|
|
|
### Outras opções
|
|
|
|
**Opção B — Pular pra motor e-commerce**
|
|
- Larga WhatsApp/Twenty pra depois
|
|
- Foca em catalogar produtos no Saleor (1 categoria → 100 SKUs de teste)
|
|
- Cria API token Saleor para uso programático
|
|
- Ativa 1 marketplace (provavelmente Mercado Livre, o de maior prioridade)
|
|
|
|
**Opção C — Higienização adicional** ✅ **CONCLUÍDA**
|
|
- ✅ Volumes + imagens + networks + stubs n8n removidos
|
|
- ✅ **Triagem de 60+ untracked concluída**: 30 arquivos versionados, 5 diretórios legados arquivados/removidos, 13 docs históricos em `backup/untracked-triagem-2026-07-06/`, 5 diretórios em `backup/untracked-lixo-2026-07-06/`, `.gitignore` ampliado (+13 padrões)
|
|
|
|
**Sugestão B (executada 06/jul)** ✅ 4/5 itens:
|
|
- ✅ Item 1: App Token Saleor + `scripts/saleor-api.py` (commit `ee8c3d1`)
|
|
- ✅ Item 2: yt-pub-livesx documentado (commit `d1760b7`)
|
|
- ✅ Item 3: Backup n8n automático 2x/dia (commit `7ebe052`)
|
|
- ✅ Item 4: `scripts/n8n-api.py` cookie-based (commit `dcca4bf`)
|
|
- 🔶 Item 5: Catalogar SKUs (parcial — Saleor 3.23 API mudou)
|
|
|
|
---
|
|
|
|
## 🚀 PRÓXIMA FASE SUGERIDA: Fase C — "Mercado Livre primeiro"
|
|
|
|
**Por quê?** Você tem motor pronto, mas zero receita. ML é o marketplace mais simples (REST + OAuth), com maior volume Brasil e skill pronta.
|
|
|
|
### Pré-requisito (VOCÊ)
|
|
- 🟡 Conta de vendedor no Mercado Livre ativa (se não tem, criar antes de começar)
|
|
- 🟡 Categoria piloto definida (sugestão: Eletrônicos, 1 produto, ex: Galaxy S24 que já existe)
|
|
|
|
### Itens da Fase C (em ordem)
|
|
|
|
| # | Item | Tempo | Bloqueio |
|
|
|---|------|-------|----------|
|
|
| 1 | Criar app em https://developers.mercadolivre.com.br/ + OAuth flow | 10min | você (conta ML) |
|
|
| 2 | Sincronizar 1 produto piloto (Galaxy S24) via ML API | 30min | só após #1 |
|
|
| 3 | Configurar webhooks ML → n8n (orders, questions) | 1h | só após #2 |
|
|
| 4 | Implementar workflow n8n `ml-incoming` (espelho do `m5-openwa-to-twenty`) | 1h | só após #3 |
|
|
| 5 | Teste E2E: publicar produto → receber pergunta → responder | 30min | só após #4 |
|
|
|
|
**Total**: ~3h se tudo der certo
|
|
|
|
### Alternativas à Fase C
|
|
|
|
**Fase D — Terminar catalogação Saleor**
|
|
- Estudar schema Saleor 3.23 (Item 5 parcial)
|
|
- Adicionar 50 SKUs de teste
|
|
- Bom se você quer **catálogo antes** de vender
|
|
|
|
**Fase E — Documentação final**
|
|
- Atualizar vault: TWENTY-CRM-SETUP, CHATWOOT-SETUP, INEMA-SETUP
|
|
- Adicionar diagramas de arquitetura
|
|
- Bom se você quer **base sólida** antes de crescer
|
|
|
|
**Fase F — Testes E2E WhatsApp↔CRM**
|
|
- Escanear QR `bussines-m5` + finalizar wizard Twenty
|
|
- Fazer 1 mensagem real fluir WhatsApp→n8n→Twenty→n8n→WhatsApp
|
|
- Bom se você quer **validar integrações** antes de qualquer venda
|
|
|
|
### Helpers já prontos para a Fase C
|
|
|
|
```bash
|
|
# Token Saleor (persistido em .env)
|
|
python3 scripts/saleor-api.py products --first 5
|
|
|
|
# n8n via cookie (workflows, executions, webhooks)
|
|
python3 scripts/n8n-api.py workflows
|
|
python3 scripts/n8n-api.py webhook https://n8n.m5digital.net.br/webhook/XPTO --data '{}'
|
|
|
|
# Cron (backup, health, resumo, compliance) ja' configurados
|
|
crontab -l
|
|
```
|
|
|
|
### Skills Hermes uteis
|
|
- `ecommerce-mercadolivre` — API ML, OAuth, sync produtos
|
|
- `ecommerce-ccops` — consolidacao operacional
|
|
- `skill-auto-verify` — testar antes de entregar
|
|
|
|
---
|
|
|
|
---
|
|
|
|
## 📁 ARQUIVOS IMPORTANTES REVISITAR
|
|
|
|
| Caminho | Para que serve |
|
|
|---------|----------------|
|
|
| `/root/ecommerce/HANDOFF-2026-07-06.md` | ESTE ARQUIVO |
|
|
| `/root/ecommerce/CLAUDE.md` | Visão geral do projeto (atualizado 06/jul) |
|
|
| `/root/ecommerce/PONTO-DE-PARTIDA-22jun2026.md` | Status detalhado do dia 22/jun |
|
|
| `/root/ecommerce/vault/ecommerce-kb/SYSTEMS-STATUS.md` | Status atual dos sistemas (atualizado 06/jul) |
|
|
| `/root/ecommerce/vault/ecommerce-kb/HIGIENIZACAO-06jul2026.md` | Log da limpeza |
|
|
| `/root/ecommerce/workflows/README-FASE5-OPENWA-TWENTY.md` | Passo-a-passo Fase 5 |
|
|
| `/root/ecommerce/workflows/m5-openwa-to-twenty.json` | Workflow WhatsApp → CRM (importado em `1zXyQ9KxAhYd0SYH`) |
|
|
| `/root/ecommerce/workflows/m5-twenty-to-openwa.json` | Workflow CRM → WhatsApp (importado em `RX4ugQriQ34XNnaV`) |
|
|
| `/root/ecommerce/scripts/traefik-conf/routes.yml` | Roteamento HTTP, 9 subdomínios |
|
|
| `/root/ecommerce/ecom-store/utils/m5log.py` | Logger M5 (303 linhas, núcleo do motor) |
|
|
| `/var/lib/docker/volumes/m5_n8n_data/_data/database.sqlite` | n8n DB real (SQLite) |
|
|
| `/tmp/n8n_pre_clean.db` | Backup pré-limpeza stubs |
|
|
| `/root/.claude/CLAUDE.md` | Skills Hermes auto-invocadas |
|
|
| `/root/inema_materiais/` | Material INEMA (cursos, ads, vídeo) |
|
|
| `/root/backups/2026-07-06_pre-crm-reorg/MANIFEST.md` | Inventário com SHA-256 |
|
|
|
|
---
|
|
|
|
## 🔐 Credenciais em uso (NÃO commitar)
|
|
|
|
| Sistema | User/Email | Senha |
|
|
|---------|-----------|-------|
|
|
| n8n | `admin@m5online.com.br` | `M5Online@2026` |
|
|
| OpenWA | API Key header | `owa_k1_1e56b98c39a2daa5bdb537d04f35da17117021bedc8c1de80eaba2926c584b39` |
|
|
| Gitea | `irisflorencio` | token em `/root/ecommerce/.gitea_token` (chmod 600, **sem prefixo GITEA_TOKEN=**) |
|
|
| Saleor | `admin@m5online.com.br` | `M5@Admin2026!` |
|
|
| Saleor | App Token (M5 API Service) | `NPXnQSAcwTH40BGlqV010baewTSUzR` (em `SALEOR_APP_TOKEN`) |
|
|
| Twenty CRM | (sem admin criado) | — |
|
|
| Chatwoot | `admin@m5online.com.br` | (password em `/root/ecommerce/scripts/.env`) |
|
|
|
|
> **⚠️ Git autor padrão**: a partir desta sessão, usar `admin@m5online.com.br` em todos os commits (não `iris@m5online.com.br`).
|
|
> Setar via: `git -c user.name="Iris Florencio" -c user.email="admin@m5online.com.br" commit ...`
|
|
> Ou atualizar global: `git config --global user.email admin@m5online.com.br`
|
|
|
|
> **Upstream configurado**: `master → gitea/master` — `git push`/`git pull` funcionam sem argumentos.
|