Navigation Menu

Skip to content

Instantly share code, notes, and snippets.

@fikrifirat
Last active January 16, 2017 14:25
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save fikrifirat/323d6a499f6eec1a94730684bbbffdfa to your computer and use it in GitHub Desktop.
Save fikrifirat/323d6a499f6eec1a94730684bbbffdfa to your computer and use it in GitHub Desktop.
Voxbone Conferencing API

Voxbone Conferencing API

A service to allow the listing, creation, update and destruction of conferencing bridges and their related meta data. This is an HTTP API.

API Routes

The following RESTful JSON routes are available for Conferencing API:

Endpoint GET POST PUT DELETE
/bridges Y Y X X
/bridges/:id Y X Y Y
/bridges/:bridgeId/participants Y Y X X
/bridges/:bridgeId/participants/:id Y X Y Y
/sounds Y Y X X
/sounds/:id Y X Y Y
/participants Y Y X X
/participants/:id Y X Y Y
/admins Y Y X X
/admins/:id Y X Y Y

Doing requests to the API

You can do a POST request to all root level endpoints which will create a record based on the default settings. You will need to make reference of the "profile" id results so that you can link these to your bridge.

You can re-use the profiles across bridges.

You can do this by creating a bridge with all the required values using a POST or you can create a bridge using the defaults and change the soundProfile, participantProfile and adminProfile uuids using a PUT to /bridges/<id-of-bridge>

Any Voxbone DID can be pointed towards a conference bridge. Currently, point your DID to <bridge-identifier>@37.139.25.109

We recommend using Postman Chrome App to communicate with the API

HTTP Example payloads

Create a bridge

You can send an empty POST request to /bridges and it will create a bridge with all our defaults or you can specify the details if you know them

{
  "record": boolean,
  "moh": boolean,
  "waitingBridge": boolean,
  "maxParticipants": number,
  "pinAuth": boolean,
  "pinRetries": number,
  "recordNameOnEntry": boolean,
  "remoteSipUri": "string" || null,
  "bridgePasscode": number,
  "active": boolean,
  "participantProfileId": "id uuid string of an already setup participant profile" || null,
  "adminProfileId": "id uuid string of an already setup admin profile" || null,
  "soundProfileId": "id uuid string of an already setup sound profile" || null
}

Example

{
  "record": true,
  "moh": false,
  "waitingBridge": false,
  "maxParticipants": 5,
  "pinAuth": true,
  "pinRetries": 3,
  "recordNameOnEntry": true,
  "remoteSipUri": null,
  "bridgePasscode": 3476,
  "active": false,
  "participantProfileId": "aa6d96a4-73de-463d-8150-e0ef65bb540b",
  "adminProfileId": "eea2346d-8e5f-4a0e-bd09-c9143b99e880",
  "soundProfileId": "16bcf6a1-7bf2-4824-ab96-b816353acb86"
}

This will give back the whole bridge object including its id and createdAt and updatedAt records - it will also include the sound, admin and participant profiles in the response.

{
  "id": "e3873851-6824-4984-8147-42728a968604",
  "remoteSipUri": "PJSIP/1102",
  "record": false,
  "moh": false,
  "waitingBridge": false,
  "maxParticipants": 10,
  "pinAuth": true,
  "bridgePasscode": 3476,
  "pinRetries": 3,
  "recordNameOnEntry": false,
  "active": false,
  "createdAt": "2016-07-19T08:51:20.000Z",
  "updatedAt": "2016-07-19T08:58:23.000Z",
  "soundProfileId": "6068a790-9b98-4170-92aa-3b271eb98743",
  "adminProfileId": "25666ff2-d6ba-4841-86d3-717add9bc2f5",
  "participantProfileId": "290777eb-884b-4017-8f43-f71016e15fa4",
  "soundProfile": {
    "id": "6068a790-9b98-4170-92aa-3b271eb98743",
    "join": "confbridge-join",
    "leave": "confbridge-leave",
    "enterPin": "confbridge-pin",
    "invalidPin": "conf-invalidpin",
    "badPin": "confbridge-pin-bad",
    "locked": "confbridge-lock-no-join",
    "nowLocked": "confbridge-locked",
    "nowUnlocked": "confbridge-unlocked",
    "nowMuted": "confbridge-muted",
    "nowUnmuted": "confbridge-unmuted",
    "kicked": "confbridge-removed",
    "recording": "confbridge-now-recording",
    "waitForLeader": "confbridge-waitforleader",
    "recordNameOnEntry": "priv-recordintro",
    "createdAt": "2016-07-19T08:55:12.000Z",
    "updatedAt": "2016-07-19T08:55:12.000Z"
  },
  "adminProfile": {
    "id": "25666ff2-d6ba-4841-86d3-717add9bc2f5",
    "adminMenuKey": "*1",
    "adminPasscode": 1000,
    "pinRetries": 3,
    "rollcall": "*2",
    "toggleMuteAll": "*3",
    "toggleLockBridge": "*4",
    "getParticipantCount": "*5",
    "destroyBridge": "*6",
    "createdAt": "2016-07-19T08:55:22.000Z",
    "updatedAt": "2016-07-19T08:55:22.000Z"
  },
  "participantProfile": {
    "id": "290777eb-884b-4017-8f43-f71016e15fa4",
    "toggleMute": "1",
    "toggleDeafMute": "2",
    "createdAt": "2016-07-19T08:55:16.000Z",
    "updatedAt": "2016-07-19T08:55:16.000Z"
  }
}

Updating a bridge

You can update a bridge by sending a PUT to /bridges/<id-of-bridge>. This PUt does not need to contain all of the information about the bridge; only the information you want to update

This means if you just want to change the record setting on a bridge you can just send the following body to /bridges/<id-of-bridge>

{
  "record": false
}

But you can send any of the parameters in the bridge model that you get returned in a GET on /bridges/<id-of-bridge> or in the returned body from a POST on /bridges

Creating and updating other model types

You just need to know the model structure to be able to do the same on other models. All of them behave in the same fashion.

/sounds

  {
    "id": "16bcf6a1-7bf2-4824-ab96-b816353acb86",
    "join": "confbridge-join",
    "leave": "confbridge-leave",
    "enterPin": "confbridge-pin",
    "invalidPin": "conf-invalidpin",
    "badPin": "confbridge-pin-bad",
    "locked": "confbridge-lock-no-join",
    "nowLocked": "confbridge-locked",
    "nowUnlocked": "confbridge-unlocked",
    "nowMuted": "confbridge-muted",
    "nowUnmuted": "confbridge-unmuted",
    "kicked": "confbridge-removed",
    "recording": "confbridge-now-recording",
    "waitForLeader": "confbridge-waitforleader",
    "recordNameOnEntry": "priv-recordintro"
  }

/admins

{
    "id": "35f71b44-e872-4522-83e1-7523a212ed04",
    "adminMenuKey": "*1",
    "adminPasscode": 9876,
    "pinRetries": 1,
    "rollcall": "*2",
    "toggleMuteAll": "*3",
    "toggleLockBridge": "*4",
    "getParticipantCount": "*5",
    "destroyBridge": "*6"
  },

/participants

{
    "id": "12cb2a34-93bd-45b5-8608-6b41d487c318",
    "toggleMute": "4",
    "toggleDeafMute": "5"
  }

/bridges/{id-of-bridge}/participants

{
  "id": "14fd1320-9128-4ff2-bdf2-0e7eab271ff9",
  "admin": false,
  "updatedAt": "2016-08-03T15:21:17.000Z",
  "createdAt": "2016-08-03T15:21:17.000Z",
  "callerIdName": null,
  "callerId": null,
  "didCalled": null
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment