Ugrás a fő tartalomhoz

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ó.

Integrációhoz a webhook a jobb választás

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​

  1. 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 key nyilvános kliens-azonosító, nem titok. Ha a szervezetnél nincs beállítva valós idejű kapcsolat, a válasz hibakódja broadcasting_not_configured.

  2. 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​

CsatornaTípusKi iratkozhat fel
user.{tenant_id}.{userId}privátcsak maga a felhasználó
presence.{tenant_id}presencea szervezet tagjai; ki van épp online
tenant-{tenant_id}priváta szervezet tagjai; platform-közlemények
warehouse.{tenant_id}.{warehouseId}.{feed}privátakinek a feedhez tartozó raktári joga megvan (pl. kiszedés, csomagolás, bevételezés)
device.{deviceId}privátcsak 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}.