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}}'const { items: numbers } = await pbx.numbers.list({ limit: 100 });
await pbx.numbers.update(7, { description: 'Centralino', destination: { type: 'ivr', ivrId: 2 } });$numbers = $pbx->numbers->list(limit: 100)['items'];
$pbx->numbers->update(7, ['description' => 'Centralino', 'destination' => ['type' => 'ivr', 'ivrId' => 2]]);numbers = pbx.numbers.list(limit=100)["items"]
pbx.numbers.update(7, {"description": "Centralino", "destination": {"type": "ivr", "ivrId": 2}})The destination is a Destination object, used throughout the phone system (numbers, routes, menus, queues):
type | Fields | Effect |
|---|---|---|
extension | extensionId | Rings an extension |
ring_group | ringGroupId | Rings a group |
queue | queueId | Enters a queue |
ivr | ivrId | IVR menu |
voicemail | extensionId, greeting? | An extension's voicemail |
playback | promptId, then? | Plays a prompt, then continues |
mobile | number, confirm?, ringTimeS? | Forwards to an external number |
calendar | calendarId, 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}}'await pbx.numbers.setCalendar(7, {
calendarId: 4,
closedDestination: { type: 'voicemail', extensionId: 12 },
});$pbx->numbers->setCalendar(7, ['calendarId' => 4, 'closedDestination' => ['type' => 'voicemail', 'extensionId' => 12]]);pbx.numbers.set_calendar(7, {"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}'const { number } = await pbx.numbers.create({ number: '+390981123456', description: 'Centralino' });
await pbx.numbers.assign(number.id, { tenantId: 3, trunkId: 1 });$n = $pbx->numbers->create(['number' => '+390981123456', 'description' => 'Centralino'])['number'];
$pbx->numbers->assign($n['id'], ['tenantId' => 3, 'trunkId' => 1]);n = pbx.numbers.create({"number": "+390981123456", "description": "Centralino"})["number"]
pbx.numbers.assign(n["id"], {"tenantId": 3, "trunkId": 1})Endpoints
| Request | Scope | SDK method |
|---|---|---|
GET /v1/numbers | numbers:read | numbers.list() |
POST /v1/numbers | numbers:write | numbers.create() |
POST /v1/numbers/bulk | numbers:write | numbers.bulkCreate() · py: numbers.bulk_create() |
GET /v1/numbers/:id | numbers:read | numbers.get() |
PATCH /v1/numbers/:id | numbers:write | numbers.update() |
DELETE /v1/numbers/:id | numbers:write | numbers.delete() |
PUT /v1/numbers/:id/assignment | numbers:write | numbers.assign() |
GET /v1/numbers/:id/calendar | numbers:read | numbers.getCalendar() · py: numbers.get_calendar() |
PUT /v1/numbers/:id/calendar | numbers:write | numbers.setCalendar() · py: numbers.set_calendar() |
