Skip to content

Commit 209b482

Browse files
committed
docs: add websocket event guide
1 parent e6361b9 commit 209b482

19 files changed

Lines changed: 769 additions & 38 deletions

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ Portal oficial de documentação e referência técnica da CodeChat. Guias edito
1313
- Playground no navegador com cancelamento, timeout, resultado formatado e credenciais mascaradas.
1414
- Busca global por endpoint, rota, método, parâmetro, schema e evento (`Ctrl/Cmd + K`).
1515
- Catálogo de 41 webhooks reais: 27 por instância e 14 globais de Message Batch.
16-
- Guias editoriais existentes, changelog, migração e explicação explícita da ausência de WebSocket/SSE.
16+
- Guias editoriais existentes, changelog, migração e documentação do WebSocket de eventos.
1717

1818
O relatório de consistência da referência fica em [`docs/api-reference-audit.md`](docs/api-reference-audit.md).
1919

content/docs/changelog.mdx

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,12 @@ title: "Changelog da documentação"
33
description: "Marcos do portal e origem do conteúdo publicado."
44
---
55

6+
## 2026-07-14
7+
8+
- Guia de WebSocket de eventos incorporado com URLs, autenticação, allowlist de eventos, payloads e códigos de fechamento.
9+
- Variáveis `WEBSOCKET_*` adicionadas à documentação de ambiente.
10+
- Message Batch passou a documentar `ownerUserId` como isolamento dos eventos globais em `/ws/global/events`.
11+
612
## 2026-07-13
713

814
- Referência própria criada com Next.js, React, Fumadocs e renderização dinâmica do OpenAPI.
@@ -11,6 +17,6 @@ description: "Marcos do portal e origem do conteúdo publicado."
1117
- Guia e referência das nove operações persistentes de Message Batch incorporados.
1218
- As nove operações e os eventos de Message Batch foram classificados como recurso Pro, sem enforcement no runtime.
1319
- Catálogo ampliado para 41 eventos de webhook: 27 por instância e 14 globais de lote.
14-
- Ausência de WebSocket/SSE e de enforcement Pro documentada explicitamente.
20+
- Limites de tempo real e enforcement Pro documentados explicitamente.
1521

1622
O histórico do produto continua no repositório da API; esta página registra mudanças editoriais do portal.

content/docs/environment.mdx

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,13 @@ description: "Variáveis de ambiente e configuração do servidor."
2929
| `WHATSAPP_SESSION_POSTGRES_URL` | Não | `postgres://...` | String de conexão opcional e dedicada do PostgreSQL para as sessões do whatsmeow. Quando vazia, `DATABASE_URL` é usada pelo SQL store do whatsmeow. |
3030
| `WEBHOOK_GLOBAL_URL` | Não | `https://example.com/webhook` | URL do webhook global. Precisa ser `http` ou `https` absoluta; obrigatória somente quando `WEBHOOK_GLOBAL_ENABLED=true`. |
3131
| `WEBHOOK_GLOBAL_ENABLED` | Não | `false` | Habilita o envio de todos os eventos reconhecidos de todas as instâncias para `WEBHOOK_GLOBAL_URL`. O padrão é `false`. |
32+
| `WEBSOCKET_ENABLED` | Não | `true` | Habilita as rotas `/ws/instance/events` e `/ws/global/events`. O padrão é `true`. |
33+
| `WEBSOCKET_ALLOWED_ORIGINS` | Não | `http://localhost:3000,http://localhost:5173` | Lista separada por vírgula de origens aceitas para browsers. Quando vazia, clientes com `Origin` são rejeitados. |
34+
| `WEBSOCKET_ALLOW_EMPTY_ORIGIN` | Não | `true` | Permite clientes backend sem header `Origin`. |
35+
| `WEBSOCKET_PING_INTERVAL` | Não | `25s` | Intervalo de ping do servidor WebSocket. |
36+
| `WEBSOCKET_PONG_TIMEOUT` | Não | `60s` | Prazo máximo para receber pong antes de encerrar a conexão. |
37+
| `WEBSOCKET_WRITE_TIMEOUT` | Não | `10s` | Prazo máximo de escrita de frames. |
38+
| `WEBSOCKET_SEND_BUFFER` | Não | `256` | Tamanho do buffer por cliente WebSocket. |
3239
| `AUTHENTICATION_JWT_EXPIRES_IN` | Sim | `3600` | Expiração do JWT em segundos. O valor `0` remove a claim `exp`. |
3340
| `AUTHENTICATION_JWT_SECRET` | Sim | `strong-secret` | Chave secreta usada para assinar JWTs com HS256. |
3441
| `AUTHENTICATION_GLOBAL_AUTH_TOKEN` | Sim | `admin-token` | Token usado somente para criar e listar instâncias. |

content/docs/events-overview.mdx

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,22 @@
11
---
22
title: "Visão geral de eventos"
3-
description: "Como a API transforma eventos internos em entregas HTTP por webhook."
3+
description: "Como a API transforma eventos internos em entregas por webhook e WebSocket."
44
---
55

6-
A implementação atual publica eventos somente por **webhooks HTTP POST**. Há dois fluxos: eventos por instância, com envelope contendo `instance`, e eventos globais de Message Batch, sem esse campo.
6+
A implementação atual publica eventos por **webhooks HTTP POST** e por **WebSocket**. Há dois escopos: eventos por instância, com envelope contendo `instance`, e eventos globais de Message Batch, sem esse campo.
77

88
## O que está implementado
99

1010
- 41 nomes públicos: 27 eventos por instância e 14 eventos globais de Message Batch.
1111
- Webhook por instância com flags em `events`.
1212
- Webhook global controlado por `WEBHOOK_GLOBAL_URL` e `WEBHOOK_GLOBAL_ENABLED`.
13+
- WebSocket por instância em `/ws/instance/events`.
14+
- WebSocket global em `/ws/global/events`.
1315
- Fila em memória com múltiplos workers para eventos por instância.
1416
- Outbox PostgreSQL com retry e backoff para eventos globais de Message Batch.
1517

1618
## Limites operacionais
1719

1820
Eventos por instância não têm retry automático nem dead-letter queue. Eventos de Message Batch são reagendados pela outbox após falhas, com backoff persistente. Nenhum dos fluxos garante ordem ou assinatura HMAC; o `x-request-id` serve apenas para correlação.
1921

20-
Também não há endpoint WebSocket ou Server-Sent Events no runtime auditado. Veja [Tempo real](/docs/realtime) para a decisão de integração correta.
22+
O WebSocket entrega em tempo real, mas em modo best-effort e sem replay automático. Veja [WebSocket de eventos](/docs/websocket) para URLs, autenticação, payloads e códigos de fechamento.

content/docs/faq.mdx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ Sim, o middleware global aceita exatamente `apikey`, `x-api-key` e `apiKey`. Se
1313

1414
## A CodeChat oferece WebSocket?
1515

16-
Não no runtime auditado. Não existem rota de upgrade, WebSocket ou SSE; tempo real é entregue por [webhooks](/api-reference/webhooks).
16+
Sim. A API expõe `/ws/instance/events` para eventos por instância e `/ws/global/events` para eventos globais de Message Batch. Consulte [WebSocket de eventos](/docs/websocket).
1717

1818
## Endpoints Pro retornam `402`?
1919

content/docs/message-batches.mdx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@ apikey: <token-global>
1616

1717
Os aliases `x-api-key` e `apiKey` também são aceitos pelas mesmas regras do middleware global. O token global é administrativo e, no runtime atual, não existe ACL adicional por usuário/instância. Na criação, todas as instâncias são consultadas, precisam existir e possuir autenticação; seus IDs internos e um snapshot dos nomes são persistidos. Nomes vazios ou repetidos são rejeitados.
1818

19+
`ownerUserId` e opcional na criacao. Quando omitido, o valor persistido e `global`. Esse campo isola os eventos de WebSocket em `/ws/global/events`: o `sub` do JWT de usuario precisa ser igual ao `ownerUserId` do lote.
20+
1921
## Arquitetura e persistência
2022

2123
- `message_batches`: definição, estado, lease e contadores derivados.
@@ -38,6 +40,7 @@ apikey: <token-global>
3840
```json
3941
{
4042
"name": "Aviso de manutenção",
43+
"ownerUserId": "user-123",
4144
"instances": ["codechat-01", "codechat-02"],
4245
"recipients": ["5531999999999", "5531888888888"],
4346
"message": {

content/docs/meta.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
"---Eventos e entrega---",
2424
"events-overview",
2525
"webhooks",
26+
"websocket",
2627
"envelope",
2728
"headers",
2829
"retries",

content/docs/migration.mdx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ Use este roteiro ao substituir uma integração construída sobre as rotas legad
1010
- Mantenha separados o token global e o JWT da instância. A migração de rota não altera a finalidade de cada credencial.
1111
- Preserve os nomes, tipos e valores dos campos JSON até confirmar a operação equivalente no OpenAPI.
1212
- Não transforme aliases de headers, paths ou payloads em um contrato novo durante a troca de runtime.
13-
- Trate webhooks como o canal de eventos implementado. A API Go auditada não expõe WebSocket nem SSE.
13+
- Trate webhooks e WebSocket como canais distintos: webhooks para entrega HTTP e WebSocket para assinatura best-effort em tempo real.
1414

1515
## Rotas atuais e aliases
1616

content/docs/realtime-events.mdx

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
---
22
title: "Eventos em tempo real"
3-
description: "Como consumir os eventos existentes sem inventar um transporte WebSocket ou SSE."
3+
description: "Como consumir os eventos por webhook ou WebSocket."
44
---
55

6-
Não há catálogo separado de eventos WebSocket/SSE. O catálogo implementado reúne **41 eventos de webhook**: 27 por instância e 14 globais de Message Batch, descritos em [Webhooks](/docs/webhooks#eventos).
6+
O catálogo implementado reúne **41 eventos públicos**: 27 por instância e 14 globais de Message Batch. Esses nomes são usados tanto nos [Webhooks](/docs/webhooks#eventos) quanto no [WebSocket de eventos](/docs/websocket).
77

8-
Uma arquitetura comum é:
8+
Uma arquitetura comum para entrega persistente é:
99

1010
1. CodeChat envia `POST` ao seu endpoint de webhook.
1111
2. Seu backend valida, persiste e reconhece a entrega com `2xx`.
1212
3. Seu backend publica o evento aos clientes autorizados pelo canal interno escolhido.
1313

14-
O terceiro passo pertence à sua aplicação; nomes de salas, URLs, autenticação e semântica de reconexão não fazem parte do contrato atual da CodeChat API.
14+
Para consumo direto em tempo real, abra uma conexão WebSocket para `/ws/instance/events` ou `/ws/global/events`, informando exatamente um `event` e o `token` adequado na query string. O WebSocket é best-effort e não substitui persistência ou replay no seu backend.

content/docs/realtime.mdx

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,17 @@
11
---
22
title: "Tempo real"
3-
description: "O canal disponível hoje e o que não existe no runtime auditado."
3+
description: "Canais disponíveis para eventos HTTP e WebSocket."
44
---
55

66
## Estado atual
77

8-
A CodeChat API Go auditada **não registra endpoint WebSocket nem Server-Sent Events (SSE)**. Não existe URL de conexão, protocolo de inscrição ou cliente oficial para esses transportes no código atual.
8+
A CodeChat API Go entrega eventos por [webhooks HTTP](/docs/webhooks) e por [WebSocket de eventos](/docs/websocket). Webhooks são a integração persistente por HTTP POST; WebSocket é um canal em tempo real, best-effort, para assinar um evento por conexão.
99

10-
Eventos são entregues por [webhooks HTTP](/docs/webhooks). Para uma experiência em tempo real na sua aplicação, receba o webhook no seu backend e distribua o evento aos seus próprios clientes pelo transporte que você controla.
10+
Não há Server-Sent Events (SSE) documentado. Para integrações que exigem replay ou reconstrução de estado, combine WebSocket com os endpoints REST persistentes correspondentes.
1111

12-
## Por que `/websocket` redireciona para cá
12+
## URLs principais
1313

14-
URLs antigas ou esperadas como `/websocket` e `/websocket/events` são preservadas apenas como redirecionamentos informativos no portal. Elas não representam rotas da API e não devem ser usadas como endereço de conexão.
14+
- Eventos por instância: `ws://localhost:8084/ws/instance/events?event=connection.update&token=<INSTANCE_JWT>`
15+
- Eventos globais: `ws://localhost:8084/ws/global/events?event=message.batch.progress&token=<USER_JWT>`
1516

16-
Se um transporte em tempo real for adicionado ao runtime no futuro, esta página e o OpenAPI devem ser atualizados a partir da implementação antes de publicar exemplos.
17+
Consulte [WebSocket de eventos](/docs/websocket) para autenticação, allowlist de eventos, payloads, heartbeat, códigos de fechamento e exemplo de cliente JavaScript.

0 commit comments

Comments
 (0)