# Quickstart — Spec 012 Onboarding → Lead **VM122:** `10.10.10.122:8080` · **VM112:** `10.10.10.112:8090` **Wizard:** https://onboard.ibytera.com **Desk:** https://desk.ligbox.com.br --- ## 1. Comportamento actual (Fase A — em produção) | Momento wizard | Webhook | Efeito Desk | |----------------|---------|-------------| | Valida domínio | `domain.validated` | Só evento funil | | Aplica DNS | `dns.applied` | Só evento funil | | **Criar conta agora** | `onboarding.started` | **Cria ticket** + backfill DNS/domínio | | Conta criada | `account.created` | Nota no ticket + actualiza assunto | | Infra OK | `infra.synced` | Nota | | Fim | `onboarding.completed` | `crm_track=onboarding_completed` | --- ## 2. Teste rápido (script) ```bash bash /opt/ligbox-ops-platform/scripts/verify-funnel-webhook.sh ``` Esperado na etapa `onboarding.started`: ``` ticket_created= True ticket_id= ``` --- ## 3. Teste manual VM112 → Desk ```bash # Simular «criar conta» (após domínio e DNS no wizard real) curl -sf -X POST http://10.10.10.122:8080/api/v1/webhooks/onboard \ -H "Content-Type: application/json" \ -H "X-Webhook-Secret: ligbox-ops-dev-secret" \ -d '{ "event": "onboarding.started", "domain": "teste.cliente.com", "session_id": "manual-test-001", "data": { "email": "admin@teste.cliente.com", "step": "create_account" } }' | python3 -m json.tool ``` Login Desk e confirmar ticket `[onboarding] teste.cliente.com — admin@teste.cliente.com`. --- ## 4. Abandono → Lead (Fase B — em produção) Worker VM122 corre `POST /api/v1/crm/leads/sync` a cada **15 min** (`LEAD_SYNC_INTERVAL_SEC=900`). Critério: **24h** (`ONBOARD_STALE_HOURS`) sem evento, etapa < `completed`, ticket `open`/`escalated`, `crm_track=onboarding`. ```bash # Listar leads curl -sf -H "Authorization: Bearer $TOKEN" \ http://10.10.10.122:8080/api/v1/crm/leads | python3 -m json.tool # Sync manual (worker / teste) curl -sf -X POST "http://10.10.10.122:8080/api/v1/crm/leads/sync" \ -H "X-Ops-Internal-Token: $OPS_INTERNAL_TOKEN" # Teste completo bash /opt/ligbox-ops-platform/scripts/verify-crm-leads.sh ``` **Desk UI:** menu **Leads**, painel no dashboard, badge `lead` / `abandonado` nas sessões, filtro **Leads** em Tickets. --- ## 5. Operação manual (até Fase B) 1. Desk → **Sessões ativas** → filtrar `stale=true` 2. Abrir ticket ligado à sessão 3. Contactar cliente pelo `account_email` no payload 4. Assumir sessão (Spec 010) se precisar completar wizard --- ## 6. Ficheiros | Componente | Path | |------------|------| | VM112 webhooks | `/opt/ibytera-mail-portal/backend/app/routers/onboarding.py` | | VM122 ingress | `/opt/ligbox-ops-platform/api/app/main.py` | | Spec | `specs/012-abandoned-onboarding-lead/spec.md` |