# 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= <número>
```

---

## 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 &lt; `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` |
