Real-time Notifications #
Clients can subscribe to documents, messages and events, in order to receive a notification whenever a change occurs matching the subscription scope.
Documents changes & messages #
The following notifications are sent by Kuzzle whenever one of the following event matches the subscription filters:
- A real-time message is sent
- A new document has been created
- A document has been updated or replaced
- Deprecated since 1.5.0A document is about to be created (creation not guaranteed)
Real-time notifications are also sent when documents, previously in the subscription scope, are leaving it because of the following events:
- document is deleted
- document is updated/replaced and its new content do not match the subscription filters anymore
- Deprecated since 1.5.0document is about to be deleted (deletion not guaranteed)
Format #
A document notification contains the following fields:
| Property | Type | Description |
|---|---|---|
action | string | API controller's action |
collection | string | Data collection |
controller | string | API controller |
index | string | Data index |
protocol | string | Network protocol used to modify the document |
result | object | Notification content |
room | string | Subscription channel identifier. Can be used to link a notification to its corresponding subscription |
scope | string | in: document enters (or stays) in the scopeout: document leaves the scope |
state | string | Deprecated since 1.5.0 done: the change has been appliedpending: the change is about to happen |
timestamp | number | Timestamp of the event, in Epoch-millis format |
type | string | document: the notification type |
volatile | object | Request volatile data |
The result object is the notification content, and it has the following structure:
| Property | Type | Description |
|---|---|---|
_id | string | Document unique IDnull if the notification is from a real-time message |
_meta | object | Deprecated since 1.3.0 Document metadata information (creation time, last update time, and so on). Can be null. |
_source | object | The message or full document content. Not present if the event is about a document deletion |
Example #
{ "index": "foo", "collection": "bar", "controller": "document", "action": "create", "protocol": "http", "timestamp": 1497513122738, "volatile": null, "scope": "in", "state": "done", "result":{ "_source":{ "some": "document content", "_kuzzle_info": { "author": "<author kuid>", "createdAt": 1497866996975, "active": true } }, "_id": "<document identifier>" }, "room":"893e183fc7acceb5-7a90af8c8bdaac1b" }User Notification #
User notifications are triggered by the following events:
- A user subscribes to the same room
- A user leaves that room
These notifications are sent only if the users argument is set to any other value than the default none one (see subscription request).
Format #
| Property | Type | Description |
|---|---|---|
action | string | API controller's action |
collection | string | Data collection |
controller | string | API controller |
index | string | Data index |
protocol | string | Network protocol used by the entering/leaving user |
result | object | Notification content |
room | string | Subscription channel identifier. Can be used to link a notification to its corresponding subscription |
timestamp | number | Timestamp of the event, in Epoch-millis format |
type | string | user: the notification type |
user | string | in: a new user has subscribed to the same filtersout: a user cancelled a shared subscription |
volatile | object | Request volatile data |
The result object is the notification content, and it has the following structure:
| Property | Type | Description |
|---|---|---|
count | number | Updated users count sharing that same subscription |
Example #
{ "index": "<index name>", "collection": "<collection name>", "controller": "realtime", "action": "subscribe", "protocol": "websocket", "timestamp": 1497517009931, "user": "in", "result": { "count": 42 }, "volatile": { "fullname": "John Snow", "favourite season": "winter", "goal in life": "knowing something" } }Server Notification #
Server notifications are triggered by global events, and they are sent to all of a client's subscriptions at the same time.
Currently, the only event generating a server notification is when an authentication token has expired, closing the subscription.
Other events may be added in the future.
Format #
| Property | Type | Value |
|---|---|---|
message | string | Server message explaining why this notification has been triggered |
type | string | TokenExpired: notification type |
Example #
{ "message": "Authentication Token Expired", "type": "TokenExpired" }