Tempo real
WebSocket
Namespace Socket.IO /ws/integration. Autentique no handshake e assine rooms por tenant/unidade.
connect → auth.apiKey → integration.ready
→ room.join { unitId } → ticket.* / dashboard.stats.updateAuth
Preferencial: auth: { apiKey } ou auth: { token }
Alternativas: header Authorization: Bearer, X-Api-Key ou query apiKey/token
Escopo mínimo: ws:tickets
Rooms
- integration:tenant:<tenantId> — automática no connect
- integration:dashboard:tenant:<tenantId> — se tiver dashboard:read
- integration:unit:<unitId> — via room.join
ts
import { io } from "socket.io-client";
const socket = io("https://api.4filas.com.br/ws/integration", {
auth: { apiKey: process.env.FOURFILAS_API_KEY },
transports: ["websocket"],
});
socket.on("integration.ready", (payload) => {
console.log(payload);
socket.emit("room.join", { unitId: "UNIT_UUID" });
});
socket.on("ticket.called", console.log);Eventos
integration.readyserver → clientEmitido após autenticação bem-sucedida (tenantId + scopes).
ticket.issuedserver → clientNova senha emitida.
ticket.calledserver → clientSenha chamada para atendimento.
ticket.updatedserver → clientAtualização de estado da senha.
ticket.completedserver → clientAtendimento concluído.
ticket.absentserver → clientCliente ausente.
ticket.forwardedserver → clientSenha encaminhada para outra unidade/fila.
dashboard.stats.updateserver → clientIndicadores do dashboard (room dashboard, exige scopes dashboard:read + ws:tickets).
room.join / room.leaveclient → serverEntra/sai da room de uma unidade: { unitId }.
ping / pongbidirecionalHealthcheck leve da conexão.