Events & Protocols
EthioConnect uses an event-driven architecture built on Apache Kafka. Services publish domain events to dedicated Kafka topics using a CloudEvents-inspired envelope. Consumers subscribe to these topics for real-time updates, analytics ingestion, and cross-service coordination.
Event Envelope
All events share a common envelope structure:
| Field | Type | Description |
|---|---|---|
id | string (uuid) | Unique event identifier. |
type | string | Event type (e.g. room.created, presence.online). |
source | string | Originating service (e.g. room-service). |
tenant_id | string (uuid) | Tenant that owns the resource. |
room_id | string (uuid) | Associated room (if applicable). |
occurred_at | string (date-time) | ISO-8601 timestamp. |
data | object | Event-specific payload. |
Kafka Topics
| Topic | Events | Producer |
|---|---|---|
auth-events | user.registered, user.login, token.refreshed | Auth Service |
room-events | room.created, room.closed, room.session.ended, recording.*, moderation actions | Room Service |
presence-events | presence.online, presence.offline, presence.idle | Presence Service |
qos-events | qos.report | Analytics Service (ingested from client SDK) |
WebSocket Signaling
In addition to Kafka events, the platform provides real-time event delivery to connected clients via the WebSocket signaling protocol at /v1/ws. The signaling layer forwards room events, roster snapshots, and supports session resume for dropped connections.
See the individual pages for full schema details: