ExoVoIPDeveloper guide

Numbers

Phone numbers (DIDs) are assigned to the tenant by Exobyte. The tenant decides where incoming calls are routed. Scopes numbers:read / numbers:write.

Number destination

curl -s "https://centralino.exovoip.it/api/v1/numbers?limit=100" -H "X-API-Key: $EXOPBX_API_KEY"
curl -s -X PATCH https://centralino.exovoip.it/api/v1/numbers/7 \
  -H "X-API-Key: $EXOPBX_API_KEY" -H "Content-Type: application/json" \
  -d '{"description":"Centralino","destination":{"type":"ivr","ivrId":2}}'

The destination is a Destination object, used throughout the phone system (numbers, routes, menus, queues):

typeFieldsEffect
extensionextensionIdRings an extension
ring_groupringGroupIdRings a group
queuequeueIdEnters a queue
ivrivrIdIVR menu
voicemailextensionId, greeting?An extension's voicemail
playbackpromptId, then?Plays a prompt, then continues
mobilenumber, confirm?, ringTimeS?Forwards to an external number
calendarcalendarId, open?, closed?Different destination based on business hours
hangup / busy—Ends the call / busy signal

For more elaborate chains (several steps in sequence, filters by caller or trunk) use inbound routes.

Number business hours

Each number can follow a calendar: during business hours it uses its destination, outside business hours the closed destination.

curl -s -X PUT https://centralino.exovoip.it/api/v1/numbers/7/calendar \
  -H "X-API-Key: $EXOPBX_API_KEY" -H "Content-Type: application/json" \
  -d '{"calendarId":4,"closedDestination":{"type":"voicemail","extensionId":12}}'

Number management (platform)

Adding to the pool, bulk adding, assigning to a tenant and a trunk, removal: global keys only.

curl -s -X POST https://centralino.exovoip.it/api/v1/numbers -H "X-API-Key: $EXOPBX_API_KEY" \
  -H "Content-Type: application/json" -d '{"number":"+390981123456","description":"Centralino"}'
curl -s -X PUT https://centralino.exovoip.it/api/v1/numbers/7/assignment -H "X-API-Key: $EXOPBX_API_KEY" \
  -H "Content-Type: application/json" -d '{"tenantId":3,"trunkId":1}'

Endpoints

RequestScopeSDK method
GET /v1/numbersnumbers:readnumbers.list()
POST /v1/numbersnumbers:writenumbers.create()
POST /v1/numbers/bulknumbers:writenumbers.bulkCreate() · py: numbers.bulk_create()
GET /v1/numbers/:idnumbers:readnumbers.get()
PATCH /v1/numbers/:idnumbers:writenumbers.update()
DELETE /v1/numbers/:idnumbers:writenumbers.delete()
PUT /v1/numbers/:id/assignmentnumbers:writenumbers.assign()
GET /v1/numbers/:id/calendarnumbers:readnumbers.getCalendar() · py: numbers.get_calendar()
PUT /v1/numbers/:id/calendarnumbers:writenumbers.setCalendar() · py: numbers.set_calendar()