Aziende
Gestione delle aziende ospitate sulla piattaforma. Gli endpoint di questa pagina sono riservati all'amministratore della piattaforma (chiavi globali con scope tenants:*), tranne GET /v1/tenants/current, disponibile a ogni azienda.
Azienda corrente
Con una chiave aziendale restituisce i dati della propria azienda (nome, stato, limiti, impostazioni). È la chiamata più semplice per verificare che una chiave funzioni.
curl -s https://centralino.exovoip.it/api/v1/tenants/current \
-H "X-API-Key: $EXOPBX_API_KEY"const { tenant } = await pbx.tenants.current();
console.log(tenant.name, tenant.status);$out = $pbx->tenants->current();
echo $out['tenant']['name'], PHP_EOL;tenant = pbx.tenants.current()["tenant"]
print(tenant["name"], tenant["status"])Creare un'azienda
La creazione registra l'azienda e il suo primo amministratore; la password iniziale dell'amministratore è restituita una sola volta.
curl -s -X POST https://centralino.exovoip.it/api/v1/tenants \
-H "X-API-Key: $EXOPBX_API_KEY" -H "Content-Type: application/json" \
-d '{"code":"acme","name":"Acme S.r.l.","maxExt":20,"maxCalls":6,
"admin":{"email":"admin@acme.example","name":"Mario Rossi"}}'const created = await pbx.tenants.create({
code: 'acme',
name: 'Acme S.r.l.',
maxExt: 20,
maxCalls: 6,
admin: { email: 'admin@acme.example', name: 'Mario Rossi' },
});
console.log(created.tenant.id, created.admin?.initialPassword); // password iniziale mostrata una volta$out = $pbx->tenants->create([
'code' => 'acme',
'name' => 'Acme S.r.l.',
'maxExt' => 20,
'maxCalls' => 6,
'admin' => ['email' => 'admin@acme.example', 'name' => 'Mario Rossi'],
]);out = pbx.tenants.create({
"code": "acme",
"name": "Acme S.r.l.",
"maxExt": 20,
"maxCalls": 6,
"admin": {"email": "admin@acme.example", "name": "Mario Rossi"},
})code è l'identificativo breve dell'azienda (lettere minuscole e cifre), usato anche nei nomi tecnici del centralino: scegline uno stabile.
Limiti, sospensione e riattivazione
PUT /v1/tenants/:id/limits: numero massimo di interni e di chiamate simultanee.POST /v1/tenants/:id/suspend: l'azienda resta visibile ma le chiavi e gli utenti aziendali passano in sola lettura.POST /v1/tenants/:id/resume: riattiva l'azienda.DELETE /v1/tenants/:id: disattiva l'azienda senza cancellare i dati.
curl -s "https://centralino.exovoip.it/api/v1/tenants?status=active&limit=50" -H "X-API-Key: $EXOPBX_API_KEY"
curl -s -X PUT https://centralino.exovoip.it/api/v1/tenants/3/limits -H "X-API-Key: $EXOPBX_API_KEY" \
-H "Content-Type: application/json" -d '{"maxExt":30,"maxCalls":10}'
curl -s -X POST https://centralino.exovoip.it/api/v1/tenants/3/suspend -H "X-API-Key: $EXOPBX_API_KEY" \
-H "Content-Type: application/json" -d '{"reason":"manual"}'
curl -s -X POST https://centralino.exovoip.it/api/v1/tenants/3/resume -H "X-API-Key: $EXOPBX_API_KEY"const { items } = await pbx.tenants.list({ status: 'active', limit: 50 });
await pbx.tenants.limits(3, { maxExt: 30, maxCalls: 10 });
await pbx.tenants.suspend(3, { reason: 'manual' });
await pbx.tenants.resume(3);$page = $pbx->tenants->list(status: 'active', limit: 50);
$pbx->tenants->limits(3, ['maxExt' => 30, 'maxCalls' => 10]);
$pbx->tenants->suspend(3, ['reason' => 'manual']);
$pbx->tenants->resume(3);page = pbx.tenants.list(status="active", limit=50)
pbx.tenants.limits(3, {"maxExt": 30, "maxCalls": 10})
pbx.tenants.suspend(3, {"reason": "manual"})
pbx.tenants.resume(3)Operare per conto di un'azienda
Una chiave globale opera su un'azienda specifica con l'header X-Tenant-Id (vedi Autenticazione). Ogni accesso di questo tipo viene registrato nel registro attività.
# Chiave globale (piattaforma): azienda indicata con X-Tenant-Id
curl -s https://centralino.exovoip.it/api/v1/extensions \
-H "X-API-Key: $EXOPBX_API_KEY" \
-H "X-Tenant-Id: 3"// Per tutto il client...
const acme = new ExoPBX({ apiKey: process.env.EXOPBX_API_KEY, tenantId: 3 });
// ...oppure per una singola richiesta
await pbx.extensions.list({ limit: 50 }, { tenantId: 3 });$acme = new Client(['apiKey' => getenv('EXOPBX_API_KEY'), 'tenantId' => 3]);
$pbx->extensions->list(limit: 50, options: ['tenantId' => 3]);acme = ExoPBX(tenant_id=3)
pbx.extensions.list(limit=50, tenant_id=3)Endpoint
| Descrizione | Richiesta | Scope | Metodo SDK |
|---|---|---|---|
| Elenco aziende | GET /v1/tenants | tenants:read | tenants.list() |
| Crea azienda (+ primo amministratore) | POST /v1/tenants | tenants:write | tenants.create() |
| Azienda corrente | GET /v1/tenants/current | extensions:read | tenants.current() |
| Dettaglio azienda | GET /v1/tenants/:id | tenants:read | tenants.get() |
| Modifica azienda | PATCH /v1/tenants/:id | tenants:write | tenants.update() |
| Disattiva azienda (status=disabled, nessuna cancellazione dati) | DELETE /v1/tenants/:id | tenants:write | tenants.delete() |
| Limiti interni e chiamate simultanee | PUT /v1/tenants/:id/limits | tenants:write | tenants.limits() |
| Sospendi azienda | POST /v1/tenants/:id/suspend | tenants:write | tenants.suspend() |
| Riattiva azienda | POST /v1/tenants/:id/resume | tenants:write | tenants.resume() |
| Avvia impersonificazione (audit) e restituisce X-Tenant-Id | POST /v1/tenants/:id/impersonate | tenants:impersonate | tenants.impersonate() |
| Server voce e host SIP dell’azienda | GET /v1/tenants/:id/voice-node | tenants:read | tenants.getVoiceNode() · py: tenants.get_voice_node() |
| Assegna server voce e host SIP dei telefoni | PUT /v1/tenants/:id/voice-node | tenants:write | tenants.setVoiceNode() · py: tenants.set_voice_node() |
