Presentation API
API is used to synchronize presentation between conference participants.
| Endpoint | Method | Description |
|---|---|---|
| videochat:sync:presentationStarted | websocket | Presentation started |
| videochat:sync:presentationStopped | websocket | Presentation stopped |
| presentation:updateStateProperties | websocket | Update presentation state properties |
| presentation:getState | websocket | Get presentation state |
| videochat:sync:requestLastSyncEvent | websocket | Presentation request last sync event |
| videochat:sync:propClicked | websocket | Presentation prop clicked |
| videochat:sync:backButtonClicked | websocket | Presentation back button clicked |
| videochat:sync:propClickedDetailedView | websocket | Presentation prop clicked detailed view |
| videochat:sync:backButtonClickedDetailedView | websocket | Presentation back button clicked detailed view |
| videochat:sync:propWebViewClicked | websocket | Presentation prop web view clicked |
| videochat:sync:propActionStarted | websocket | Presentation prop action started |
| videochat:sync:propVideoStarted | websocket | Presentation prop video started |
| videochat:sync:propVideoPaused | websocket | Presentation prop video paused |
| videochat:sync:propVideoContinued | websocket | Presentation prop video continued |
| videochat:sync:propResourceClicked | websocket | Presentation prop resource clicked |
| videochat:sync:resourceOpened | websocket | Presentation resource opened |
| videochat:sync:resourceClosed | websocket | Presentation resource closed |
| videochat:sync:resourcePageChanged | websocket | Presentation resource page changed |
| videochat:sync:pdfTextSelected | websocket | Presentation pdf text selected |
| videochat:sync:storylineLoaded | websocket | Presentation storyline loaded |
| videochat:sync:storylineExited | websocket | Presentation storyline exited |
| videochat:sync:storylineStarted | websocket | Presentation storyline started |
| videochat:sync:storylinePaused | websocket | Presentation storyline paused |
| videochat:sync:storylineMovedToElement | websocket | Presentation storyline moved to element |
| videochat:sync:roomChanged | websocket | Presentation room changed |
| videochat:sync:cameraPositionSet | websocket | Presentation camera position set |
| videochat:sync:propCameraPositionSet | websocket | Presentation prop camera position set |
| videochat:sync:pointerPositionSet | websocket | Presentation pointer position set |
| videochat:sync:routeChanged | websocket | Presentation route changed |
| videochat:sync:presentationAction | websocket | Presentation action |
| videochat:sync:presentationStarted | websocketEvent | Presentation started event |
| videochat:sync:presentationStopped | websocketEvent | Presentation stopped event |
| presentation:statePropertiesUpdated | websocketEvent | Presentation state properties updated event |
| videochat:sync:propClicked | websocketEvent | Presentation prop clicked event |
| videochat:sync:backButtonClicked | websocketEvent | Presentation back button clicked event |
| videochat:sync:propClickedDetailedView | websocketEvent | Presentation prop clicked detailed view event |
| videochat:sync:backButtonClickedDetailedView | websocketEvent | Presentation back button clicked detailed view event |
| videochat:sync:propWebViewClicked | websocketEvent | Presentation prop web view clicked event |
| videochat:sync:propActionStarted | websocketEvent | Presentation prop action started event |
| videochat:sync:propVideoStarted | websocketEvent | Presentation prop video started event |
| videochat:sync:propVideoPaused | websocketEvent | Presentation prop video paused event |
| videochat:sync:propVideoContinued | websocketEvent | Presentation prop video continued event |
| videochat:sync:propResourceClicked | websocketEvent | Presentation prop resource clicked event |
| videochat:sync:resourceOpened | websocketEvent | Presentation resource opened event |
| videochat:sync:resourceClosed | websocketEvent | Presentation resource closed event |
| videochat:sync:resourcePageChanged | websocketEvent | Presentation resource page changed event |
| videochat:sync:pdfTextSelected | websocketEvent | Presentation pdf text selected event |
| videochat:sync:storylineLoaded | websocketEvent | Presentation storyline loaded event |
| videochat:sync:storylineExited | websocketEvent | Presentation storyline exited event |
| videochat:sync:storylineStarted | websocketEvent | Presentation storyline started event |
| videochat:sync:storylinePaused | websocketEvent | Presentation storyline paused event |
| videochat:sync:storylineMovedToElement | websocketEvent | Presentation storyline moved to element event |
| videochat:sync:roomChanged | websocketEvent | Presentation room changed event |
| videochat:sync:cameraPositionSet | websocketEvent | Presentation camera position set event |
| videochat:sync:propCameraPositionSet | websocketEvent | Presentation prop camera position set event |
| videochat:sync:pointerPositionSet | websocketEvent | Presentation pointer position set event |
| videochat:sync:routeChanged | websocketEvent | Presentation route changed event |
| videochat:sync:presentationAction | websocketEvent | Presentation action event |
Presentation started
Method: websocket
Endpoint: videochat:sync:presentationStarted
Request:
{
"data": {
"videochatId": string
"roomId": string
}
"event": { "id": string, "date": timestamp }
}
Response:
{
"data": {
"serverTime": timestamp // current server time in UTC timezone
}
"error": { "status": bool, "code": int, "message": string }
}
Presentation stopped
Method: websocket
Endpoint: videochat:sync:presentationStopped
Request:
{
"data": {
"videochatId": string
"roomId": string
}
"event": { "id": string, "date": timestamp }
}
Response:
{
"error": { "status": bool, "code": int, "message": string }
}
Update presentation state properties
Method: websocket
Endpoint: presentation:updateStateProperties
Request:
{
"data": {
"videochatId": string
"roomId": string
"updateStateProperties": map[string]{ custom structure }
}
"event": { "id": string, "date": timestamp }
}
Response:
{
"error": { "status": bool, "code": int, "message": string }
}
Get presentation state
Method: websocket
Endpoint: presentation:getState
Request:
{
"data": {
"videochatId": string
"roomId": string
}
"event": { "id": string, "date": timestamp }
}
Response:
{
"data": {
"presenterId": string
"state": map[string]{ custom structure }
}
"error": { "status": bool, "code": int, "message": string }
}
Presentation request last sync event
Method: websocket
Endpoint: videochat:sync:requestLastSyncEvent
Description: Request last synchronization event. If event exists, its data will be sent to socket. If event doesn't exist, nothing happens.
Request:
{
"data": {
"videochatId": string
"roomId": string
}
"event": { "id": string, "date": timestamp }
}
Response:
{
"error": { "status": bool, "code": int, "message": string }
}
Presentation prop clicked
Method: websocket
Endpoint: videochat:sync:propClicked
Request:
{
"data": {
"videochatId": string
"roomId": string
"propViewContext": {
"propId": string
"resourceId": string
"resourceIndex": int
"innerPropIndex": int
"focusPointIndex": int
}
}
"event": { "id": string, "date": timestamp }
}
Response:
{
"error": { "status": bool, "code": int, "message": string }
}
Presentation back button clicked
Method: websocket
Endpoint: videochat:sync:backButtonClicked
Request:
{
"data": {
"videochatId": string
"roomId": string
"propId": string
}
"event": { "id": string, "date": timestamp }
}
Response:
{
"error": { "status": bool, "code": int, "message": string }
}
Presentation prop clicked detailed view
Method: websocket
Endpoint: videochat:sync:propClickedDetailedView
Request:
{
"data": {
"videochatId": string
"roomId": string
"propId": string
}
"event": { "id": string, "date": timestamp }
}
Response:
{
"error": { "status": bool, "code": int, "message": string }
}
Presentation back button clicked detailed view
Method: websocket
Endpoint: videochat:sync:backButtonClickedDetailedView
Request:
{
"data": {
"videochatId": string
"roomId": string
"propId": string
}
"event": { "id": string, "date": timestamp }
}
Response:
{
"error": { "status": bool, "code": int, "message": string }
}
Presentation prop web view clicked
Method: websocket
Endpoint: videochat:sync:propWebViewClicked
Request:
{
"data": {
"videochatId": string
"roomId": string
"propId": string
}
"event": { "id": string, "date": timestamp }
}
Response:
{
"error": { "status": bool, "code": int, "message": string }
}
Presentation prop action started
Method: websocket
Endpoint: videochat:sync:propActionStarted
Request:
{
"data": {
"videochatId": string
"roomId": string
"propId": string
"triggerName": string
"triggerValue": string
}
"event": { "id": string, "date": timestamp }
}
Response:
{
"error": { "status": bool, "code": int, "message": string }
}
Presentation prop video started
Method: websocket
Endpoint: videochat:sync:propVideoStarted
Request:
{
"data": {
"videochatId": string
"roomId": string
"propId": string
"resourceId": string
}
"event": { "id": string, "date": timestamp }
}
Response:
{
"error": { "status": bool, "code": int, "message": string }
}
Presentation prop video paused
Method: websocket
Endpoint: videochat:sync:propVideoPaused
Request:
{
"data": {
"videochatId": string
"roomId": string
"propId": string
"resourceId": string
}
"event": { "id": string, "date": timestamp }
}
Response:
{
"error": { "status": bool, "code": int, "message": string }
}
Presentation prop video continued
Method: websocket
Endpoint: videochat:sync:propVideoContinued
Request:
{
"data": {
"videochatId": string
"roomId": string
"propId": string
"resourceId": string
}
"event": { "id": string, "date": timestamp }
}
Response:
{
"error": { "status": bool, "code": int, "message": string }
}
Presentation prop resource clicked
Method: websocket
Endpoint: videochat:sync:propResourceClicked
Request:
{
"data": {
"videochatId": string
"roomId": string
"propId": string
"resourceId": string
}
"event": { "id": string, "date": timestamp }
}
Response:
{
"error": { "status": bool, "code": int, "message": string }
}
Presentation resource opened
Method: websocket
Endpoint: videochat:sync:resourceOpened
Request:
{
"data": {
"videochatId": string
"roomId": string
"propId": string
"resourceId": string
}
"event": { "id": string, "date": timestamp }
}
Response:
{
"error": { "status": bool, "code": int, "message": string }
}
Presentation resource closed
Method: websocket
Endpoint: videochat:sync:resourceClosed
Request:
{
"data": {
"videochatId": string
"roomId": string
"propId": string
"resourceId": string
}
"event": { "id": string, "date": timestamp }
}
Response:
{
"error": { "status": bool, "code": int, "message": string }
}
Presentation resource page changed
Method: websocket
Endpoint: videochat:sync:resourcePageChanged
Request:
{
"data": {
"videochatId": string
"roomId": string
"propId": string
"resourceId": string
"page": int
}
"event": { "id": string, "date": timestamp }
}
Response:
{
"error": { "status": bool, "code": int, "message": string }
}
Presentation pdf text selected
Method: websocket
Endpoint: videochat:sync:pdfTextSelected
Request:
{
"data": {
"videochatId": string
"roomId": string
"propId": string
"resourceId": string
"page": int
"anchorNodeIndex": int
"focusNodeIndex": int
"startRangeOffset": int
"endRangeOffset": int
"length": int
}
"event": { "id": string, "date": timestamp }
}
Response:
{
"error": { "status": bool, "code": int, "message": string }
}
Presentation storyline loaded
Method: websocket
Endpoint: videochat:sync:storylineLoaded
Request:
{
"data": {
"videochatId": string
"roomId": string
"storylineId": string
}
"event": { "id": string, "date": timestamp }
}
Response:
{
"error": { "status": bool, "code": int, "message": string }
}
Presentation storyline exited
Method: websocket
Endpoint: videochat:sync:storylineExited
Request:
{
"data": {
"videochatId": string
"roomId": string
"storylineId": string
}
"event": { "id": string, "date": timestamp }
}
Response:
{
"error": { "status": bool, "code": int, "message": string }
}
Presentation storyline started
Method: websocket
Endpoint: videochat:sync:storylineStarted
Request:
{
"data": {
"videochatId": string
"roomId": string
"storylineId": string
"storylineElement": string
}
"event": { "id": string, "date": timestamp }
}
Response:
{
"error": { "status": bool, "code": int, "message": string }
}
Presentation storyline paused
Method: websocket
Endpoint: videochat:sync:storylinePaused
Request:
{
"data": {
"videochatId": string
"roomId": string
"storylineId": string
"storylineElement": string
}
"event": { "id": string, "date": timestamp }
}
Response:
{
"error": { "status": bool, "code": int, "message": string }
}
Presentation storyline moved to element
Method: websocket
Endpoint: videochat:sync:storylineMovedToElement
Request:
{
"data": {
"videochatId": string
"roomId": string
"storylineId": string
"storylineElement": string
}
"event": { "id": string, "date": timestamp }
}
Response:
{
"error": { "status": bool, "code": int, "message": string }
}
Presentation room changed
Method: websocket
Endpoint: videochat:sync:roomChanged
Request:
{
"data": {
"videochatId": string
"roomId": string
}
"event": { "id": string, "date": timestamp }
}
Response:
{
"error": { "status": bool, "code": int, "message": string }
}
Presentation camera position set
Method: websocket
Endpoint: videochat:sync:cameraPositionSet
Request:
{
"data": {
"videochatId": string
"roomId": string
"cameraSettings": {
"position": { xyz structure }
"rotation": { xyz structure }
}
}
"event": { "id": string, "date": timestamp }
}
Response:
{
"error": { "status": bool, "code": int, "message": string }
}
Presentation prop camera position set
Method: websocket
Endpoint: videochat:sync:propCameraPositionSet
Request:
{
"data": {
"videochatId": string
"roomId": string
"propId": string
"cameraSettings": {
"position": { xyz structure }
"rotation": { xyz structure }
}
}
"event": { "id": string, "date": timestamp }
}
Response:
{
"error": { "status": bool, "code": int, "message": string }
}
Presentation pointer position set
Method: websocket
Endpoint: videochat:sync:pointerPositionSet
Request:
{
"data": {
"videochatId": string
"roomId": string
"pointer": {
"positions": [{ xyz structure }]
"timings": [ timestamp ]
"isPointerOn": bool
}
}
"event": { "id": string, "date": timestamp }
}
Response:
{
"error": { "status": bool, "code": int, "message": string }
}
Presentation route changed
Method: websocket
Endpoint: videochat:sync:routeChanged
Request:
{
"data": {
"videochatId": string
"roomId": string
"route": string
}
"event": { "id": string, "date": timestamp }
}
Response:
{
"error": { "status": bool, "code": int, "message": string }
}
Presentation action
Method: websocket
Endpoint: videochat:sync:presentationAction
Request:
{
"data": {
"videochatId": string
"roomId": string
"route": string
"action": string
"data": map[string]{ custom structure }
}
"event": { "id": string, "date": timestamp }
}
Response:
{
"error": { "status": bool, "code": int, "message": string }
}
Presentation started event
Event: videochat:sync:presentationStarted
Data:
{
"data": {
"videochatId": string
"roomId": string
"presenterId": string
"serverTime": timestamp // current server time in UTC timezone
}
"error": { "status": bool, "code": int, "message": string }
}
Presentation stopped event
Event: videochat:sync:presentationStopped
Data:
{
"error": { "status": bool, "code": int, "message": string }
}
Presentation state properties updated event
Event: presentation:statePropertiesUpdated
Data:
{
"data": {
"videochatId": string
"roomId": string
"presenterId": string
"updatedStateProperties": map[string]{ custom structure }
}
"error": { "status": bool, "code": int, "message": string }
}
Presentation prop clicked event
Event: videochat:sync:propClicked
Data:
{
"data": {
"videochatId": string
"roomId": string
"propViewContext": {
"propId": string
"resourceId": string
"resourceIndex": int
"innerPropIndex": int
"focusPointIndex": int
}
}
"error": { "status": bool, "code": int, "message": string }
}
Presentation back button clicked event
Event: videochat:sync:backButtonClicked
Data:
{
"data": {
"videochatId": string
"roomId": string
"propId": string
}
"error": { "status": bool, "code": int, "message": string }
}
Presentation prop clicked detailed view event
Event: videochat:sync:propClickedDetailedView
Data:
{
"data": {
"videochatId": string
"roomId": string
"propId": string
}
"error": { "status": bool, "code": int, "message": string }
}
Presentation back button clicked detailed view event
Event: videochat:sync:backButtonClickedDetailedView
Data:
{
"data": {
"videochatId": string
"roomId": string
"propId": string
}
"error": { "status": bool, "code": int, "message": string }
}
Presentation prop web view clicked event
Event: videochat:sync:propWebViewClicked
Data:
{
"data": {
"videochatId": string
"roomId": string
"propId": string
}
"error": { "status": bool, "code": int, "message": string }
}
Presentation prop action started event
Event: videochat:sync:propActionStarted
Data:
{
"data": {
"videochatId": string
"roomId": string
"propId": string
"triggerName": string
"triggerValue": string
}
"error": { "status": bool, "code": int, "message": string }
}
Presentation prop video started event
Event: videochat:sync:propVideoStarted
Data:
{
"data": {
"videochatId": string
"roomId": string
"propId": string
"resourceId": string
}
"error": { "status": bool, "code": int, "message": string }
}
Presentation prop video paused event
Event: videochat:sync:propVideoPaused
Data:
{
"data": {
"videochatId": string
"roomId": string
"propId": string
"resourceId": string
}
"error": { "status": bool, "code": int, "message": string }
}
Presentation prop video continued event
Event: videochat:sync:propVideoContinued
Data:
{
"data": {
"videochatId": string
"roomId": string
"propId": string
"resourceId": string
}
"error": { "status": bool, "code": int, "message": string }
}
Presentation prop resource clicked event
Event: videochat:sync:propResourceClicked
Data:
{
"data": {
"videochatId": string
"roomId": string
"propId": string
"resourceId": string
}
"error": { "status": bool, "code": int, "message": string }
}
Presentation resource opened event
Event: videochat:sync:resourceOpened
Data:
{
"data": {
"videochatId": string
"roomId": string
"propId": string
"resourceId": string
}
"error": { "status": bool, "code": int, "message": string }
}
Presentation resource closed event
Event: videochat:sync:resourceClosed
Data:
{
"data": {
"videochatId": string
"roomId": string
"propId": string
"resourceId": string
}
"error": { "status": bool, "code": int, "message": string }
}
Presentation resource page changed event
Event: videochat:sync:resourcePageChanged
Data:
{
"data": {
"videochatId": string
"roomId": string
"propId": string
"resourceId": string
"page": int
}
"error": { "status": bool, "code": int, "message": string }
}
Presentation pdf text selected event
Event: videochat:sync:pdfTextSelected
Data:
{
"data": {
"videochatId": string
"roomId": string
"propId": string
"resourceId": string
"page": int
"anchorNodeIndex": int
"focusNodeIndex": int
"startRangeOffset": int
"endRangeOffset": int
"length": int
}
"error": { "status": bool, "code": int, "message": string }
}
Presentation storyline loaded event
Event: videochat:sync:storylineLoaded
Data:
{
"data": {
"videochatId": string
"roomId": string
"storylineId": string
}
"error": { "status": bool, "code": int, "message": string }
}
Presentation storyline exited event
Event: videochat:sync:storylineExited
Data:
{
"data": {
"videochatId": string
"roomId": string
"storylineId": string
}
"error": { "status": bool, "code": int, "message": string }
}
Presentation storyline started event
Event: videochat:sync:storylineStarted
Data:
{
"data": {
"videochatId": string
"roomId": string
"storylineId": string
"storylineElement": string
}
"error": { "status": bool, "code": int, "message": string }
}
Presentation storyline paused event
Event: videochat:sync:storylinePaused
Data:
{
"data": {
"videochatId": string
"roomId": string
"storylineId": string
"storylineElement": string
}
"error": { "status": bool, "code": int, "message": string }
}
Presentation storyline moved to element event
Event: videochat:sync:storylineMovedToElement
Data:
{
"data": {
"videochatId": string
"roomId": string
"storylineId": string
"storylineElement": string
}
"error": { "status": bool, "code": int, "message": string }
}
Presentation room changed event
Event: videochat:sync:roomChanged
Data:
{
"data": {
"videochatId": string
"roomId": string
}
"error": { "status": bool, "code": int, "message": string }
}
Presentation camera position set event
Event: videochat:sync:cameraPositionSet
Data:
{
"data": {
"videochatId": string
"roomId": string
"cameraSettings": {
"position": { xyz structure }
"rotation": { xyz structure }
}
}
"error": { "status": bool, "code": int, "message": string }
}
Presentation prop camera position set event
Event: videochat:sync:propCameraPositionSet
Data:
{
"data": {
"videochatId": string
"roomId": string
"propId": string
"cameraSettings": {
"position": { xyz structure }
"rotation": { xyz structure }
}
}
"error": { "status": bool, "code": int, "message": string }
}
Presentation pointer position set event
Event: videochat:sync:pointerPositionSet
Data:
{
"data": {
"videochatId": string
"roomId": string
"pointer": {
"positions": [{ xyz structure }]
"timings": [ timestamp ]
"isPointerOn": bool
}
}
"error": { "status": bool, "code": int, "message": string }
}
Presentation route changed event
Event: videochat:sync:routeChanged
Data:
{
"data": {
"videochatId": string
"roomId": string
"route": string
}
"error": { "status": bool, "code": int, "message": string }
}
Presentation action event
Event: videochat:sync:presentationAction
Data:
{
"data": {
"videochatId": string
"roomId": string
"route": string
"action": string
"data": map[string]{ custom structure }
}
"error": { "status": bool, "code": int, "message": string }
}
Models
XYZ
{
"x": float
"y": float
"z": float
}