Valós idejű csatornák
A Vecton felületei a változásokról WebSocketen értesülnek. A szerver
Laravel Reverb, Pusher-kompatibilis protokollal,
így bármely Pusher-kliens (például pusher-js + laravel-echo) használható.
A csatornák üzenetei elsősorban a Vecton saját felületeinek szólnak (gyakran csak egy „változott” jelzés, ami után a felület újratölti az adatot), és nem verziózott szerződések. Szerver-szerver integrációhoz használj webhookot. A csatornák akkor hasznosak, ha saját felületet építesz, ami élőben követi a szervezet változásait.
Kapcsolódás
-
Kapcsolati adatok — a tenant-hostról, a felhasználó tokenjével:
GET https://acme.app.vecton.hu/api/ws-proxy/broadcasting/config
Authorization: Bearer <token>{
"data": {
"broadcaster": "reverb",
"key": "<nyilvános app-kulcs>",
"tenant_id": "<a csatornanevekben használt azonosító>",
"tenant_name": "acme",
"host": "…",
"port": 443,
"scheme": "https",
"tls": true
}
}A
keynyilvános kliens-azonosító, nem titok. Ha a szervezetnél nincs beállítva valós idejű kapcsolat, a válasz hibakódjabroadcasting_not_configured. -
Csatorna-engedélyezés — a privát és presence csatornákra való feliratkozást a kliens a tenant-hoston kéri, Bearer tokennel:
POST https://acme.app.vecton.hu/api/ws-proxy/broadcasting/auth
import Echo from 'laravel-echo'
import Pusher from 'pusher-js'
const cfg = (await api.get('/api/ws-proxy/broadcasting/config')).data.data
const echo = new Echo({
broadcaster: 'reverb',
Pusher,
key: cfg.key,
wsHost: cfg.host,
wsPort: cfg.port,
wssPort: cfg.port,
forceTLS: cfg.tls,
enabledTransports: ['ws', 'wss'],
authEndpoint: 'https://acme.app.vecton.hu/api/ws-proxy/broadcasting/auth',
auth: { headers: { Authorization: `Bearer ${token}` } },
})
echo.private(`user.${cfg.tenant_id}.${userId}`)
.listen('.notification.new', e => console.log(e))
Az eseménynevek egyediek, ezért Echo-ban ponttal kezdve figyeld őket
(például .notification.new, .chat.message.new, a jelenlétnél
.user.online, .user.offline, .user.status_changed).
A csatornanevekbe mindig a config válaszának tenant_id-ját írd, ne a
máshonnan ismert szervezet-azonosítót — a kettő eltérhet, és a rossz névre a
feliratkozás 403.
Csatornák
| Csatorna | Típus | Ki iratkozhat fel |
|---|---|---|
user.{tenant_id}.{userId} | privát | csak maga a felhasználó |
presence.{tenant_id} | presence | a szervezet tagjai; ki van épp online |
tenant-{tenant_id} | privát | a szervezet tagjai; platform-közlemények |
warehouse.{tenant_id}.{warehouseId}.{feed} | privát | akinek a feedhez tartozó raktári joga megvan (pl. kiszedés, csomagolás, bevételezés) |
device.{deviceId} | privát | csak az eszközhöz párosított felhasználó |
Más szervezet csatornájára a feliratkozás mindig elutasított, akkor is, ha a csatornanév formailag helyes.
Jelenlét
A presence csatorna mellett REST-végpontok is vannak (/api/ws-proxy/presence):
POST /heartbeat, POST /status, GET / (a szervezet online tagjai),
GET /{userId}.