ligbox-ops-platform/specs/044-foss-desk-ticket-sync/spec.md
Ligbox Spec Hub 3cb51e7ba7 spec 043/044: webmail gate contrato, chat bruto e sync Obsidian
Documenta liberação formal webmail (company_gate), decisões UX Painel Admin,
links Spec 044 tickets FOSS↔Desk, VM112 e chat bruto da sessão Roger.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-01 19:35:33 +00:00

111 lines
5.8 KiB
Markdown

# Spec 044 — Sincronização Tickets: Portal ↔ Desk ↔ FOSS
**Criado:** 2026-07-01
**Solicitado por:** Roger
**Status:** 📋 **Especificado — implementação pendente**
**Prioridade:** P1 (suporte unificado pós-activação)
**Sistemas:** VM112 Portal · VM122 Desk · VM123 FOSSBilling
---
## Resumo
Hoje existem **três filas de tickets isoladas**:
| Sistema | ID | Estado |
|---------|-----|--------|
| Portal wizard (VM112) | `OB-XXXXXXXX` | ✅ Activo — JSON local + portal cliente |
| Desk Ops (VM122) | `#N` / `CH-*` | ✅ Activo — webhook VM112 |
| FOSS Support (VM123) | `foss_ticket_id` | ❌ **Sem sync** com portal/Desk |
Esta spec define a **ponte bidireccional** Desk ↔ FOSS, preservando o portal wizard como canal de entrada do cliente e o Desk como **fonte de verdade operacional**.
**Contratos:**
- [ticket-field-mapping.md](./contracts/ticket-field-mapping.md) — chaves de correlação
- [ticket-sync-api.md](./contracts/ticket-sync-api.md) — webhooks e endpoints API
**Chat bruto:** [CHAT_BRUTO_WEBMAIL_GATE_TICKETS_SPEC043_044_20260701.txt](../../chat-bruto/CHAT_BRUTO_WEBMAIL_GATE_TICKETS_SPEC043_044_20260701.txt)
---
## Specs relacionadas
| Spec | Relação |
|------|---------|
| [001](../001-webhook-vm112-integration/spec.md) | Webhooks VM112 → Desk (base) |
| [010](../010-desk-assist-takeover/spec.md) | Escalada, ASM, `onboarding.escalated` |
| [012](../012-abandoned-onboarding-lead/spec.md) | Ticket único por jornada onboarding |
| [024](../024-openpanel-fossbilling/spec.md) | FOSS VM123, módulo Support |
| [027](../027-desk-rbac-function-matrix/contracts/vm123-product-roles.md) | `support` FOSS, roles comercial |
| [039](../039-ligbox-ops-authorization-catalog/spec.md) | `vm123_foss.support.ticket` |
| [041](../041-desk-operational-feed/spec.md) | Central Operacional — canal Tickets |
| [043](../043-desk-client-activation-sync/spec.md) | `external_customer_id` FOSS pós-activação |
---
## Arquitectura alvo
```
┌─────────────────────────────────────────────────────────────────────────┐
│ VM112 — Portal (onboard.ligbox.com.br) │
│ OB-* tickets · POST /api/onboarding/support/ticket │
│ Cliente acompanha: GET .../support/ticket/{OB-}/public │
└───────────────────────────────┬─────────────────────────────────────────┘
│ webhook onboarding.escalated (+ started)
┌─────────────────────────────────────────────────────────────────────────┐
│ VM122 — Desk (fonte de verdade ops) │
│ tickets.payload: wizard_ticket_id, foss_ticket_id, external_customer_id│
│ Staff: Chamados · Serviços · Central Operacional (041) │
└───────────────┬───────────────────────────────┬─────────────────────────┘
│ POST espelho (M2M) │ webhook FOSS → Desk
▼ ▼
┌─────────────────────────────────────────────────────────────────────────┐
│ VM123 — FOSSBilling Support │
│ Cliente: financeiro.ligbox.com.br/support │
│ Staff: /admin/support · API /api/admin/support/* │
└─────────────────────────────────────────────────────────────────────────┘
```
---
## Regras de negócio
1. **Um incidente = um ticket Desk** — nunca duplicar `#N` para a mesma `session_id` ou `foss_ticket_id`.
2. **Portal OB-** continua a existir para onboarding; Desk grava `wizard_ticket_id` no payload (já parcialmente implementado na UI).
3. **FOSS espelho** só após `external_customer_id` conhecido (Spec 043) — tickets de onboarding pré-FOSS ficam só Desk + OB-.
4. **Sync bidireccional de estado:** `open``in_progress``resolved``closed` (mapa em contrato).
5. **Cliente pós-activação** pode abrir ticket no FOSS client area **ou** no portal/console Ligbox; ambos convergem no Desk.
---
## Fases de implementação
| Fase | Entrega | VM |
|------|---------|-----|
| **A** | Documentação + contratos (esta spec) | CT130 |
| **B** | `foss_client.create_support_ticket()` + espelho Desk→FOSS | VM122 |
| **C** | Webhook FOSS → Desk (`POST /api/v1/webhooks/foss/support`) | VM122 + VM123 |
| **D** | UI Desk: link FOSS ticket + badge sync | VM122 |
| **E** | Portal pós-activação: criar via Desk API (propaga FOSS) | VM112 / Console |
Ver [tasks.md](./tasks.md).
---
## Fora de escopo (v1)
- OTRS (→ Spec 011)
- Sync automático e-mail inbound (→ Spec 041 fase B)
- Tickets Odoo Helpdesk
---
## Validação Roger
```bash
# 1) Cliente abre OB- no wizard → Desk #N com wizard_ticket_id
# 2) Activar conta (Spec 043) → external_customer_id preenchido
# 3) Staff responde no Desk → foss_ticket_id criado no FOSS
# 4) Cliente responde no FOSS → webhook actualiza nota no Desk #N
```