Server voce
Le chiamate dei clienti passano dal server principale o da uno o più server voce aggiuntivi, gestiti dalla piattaforma. Questa sezione è riservata alla piattaforma (superadmin o chiavi globali con scope system:* e tenants:*).
Aggiungere un server voce
POST /v1/voice-nodesconname(e, se disponibile,sipHost: il nome a dominio del server). La risposta contieneenrollment.code(codice di attivazione monouso, valido 24 ore) eenrollment.installCommand: sono mostrati una sola volta.- Sul nuovo server (Ubuntu 22.04 o 24.04) si esegue il comando di installazione. Al termine il server si registra da solo e passa allo stato
online.
curl -fsSL https://centralino.exovoip.it/api/v1/nodes/install.sh | sudo bash -s -- --token EXO-XXXX-XXXX-XXXX-XXXX --domain tel2.exovoip.itCon --domain il server ottiene un certificato e abilita cifratura (SIP TLS) e telefono nel browser (WebRTC). Senza dominio funziona in UDP/TCP e health.warnings riporta che WebRTC e TLS non sono disponibili.
Stato
GET /v1/voice-nodes restituisce per ogni server state (pending, online, degraded, offline, disabled), indirizzo (sipHost, publicIp), connessioni sicure (tlsEnabled, webrtcEnabled), versioni, numero di aziende ospitate e l'ultimo stato inviato (health: centralino, chiamate attive, servizi, certificato, risorse, avvisi). Un server che non comunica da oltre 3 minuti è offline.
Lo stesso riepilogo è in GET /v1/live/health (campo platform.voiceNodes).
Assegnare le aziende
PUT /v1/tenants/:id/voice-node con voiceNodeId (null = server principale) e, facoltativo, sipHost (indirizzo personalizzato per i telefoni dell'azienda). La risposta indica effectiveSipHost, l'indirizzo che i telefoni useranno, e webrtcAvailable.
Le credenziali dei telefoni (GET /v1/extensions/:id/sip-credentials) seguono automaticamente l'assegnazione: indirizzo personalizzato → dominio del server voce → IP del server voce → indirizzo del server principale. Quando il telefono nel browser non è disponibile wssUrl è vuoto.
Reinstallare, disattivare, eliminare
POST /v1/voice-nodes/:id/enrollment-code: nuovo codice per reinstallare o sostituire il server; il server attuale resta collegato finché il codice non viene usato.POST /v1/voice-nodes/:id/revoke: disattiva subito il server e ne revoca le credenziali.DELETE /v1/voice-nodes/:id: solo se non ospita aziende (altrimenti409 CONFLICT).
Endpoint
| Descrizione | Richiesta | Scope | Metodo SDK |
|---|---|---|---|
| Server voce collegati e stato | GET /v1/voice-nodes | system:read | voiceNodes.list() · py: voice_nodes.list() |
| Aggiunge un server voce (codice di attivazione mostrato una volta) | POST /v1/voice-nodes | system:write | voiceNodes.create() · py: voice_nodes.create() |
| Dettaglio server voce | GET /v1/voice-nodes/:id | system:read | voiceNodes.get() · py: voice_nodes.get() |
| Modifica nome, host SIP, note | PATCH /v1/voice-nodes/:id | system:write | voiceNodes.update() · py: voice_nodes.update() |
| Elimina server voce (solo senza aziende assegnate) | DELETE /v1/voice-nodes/:id | system:write | voiceNodes.delete() · py: voice_nodes.delete() |
| Nuovo codice di attivazione (installazione o reinstallazione) | POST /v1/voice-nodes/:id/enrollment-code | system:write | voiceNodes.enrollmentCode() · py: voice_nodes.enrollment_code() |
| Disattiva il server voce e ne revoca le credenziali | POST /v1/voice-nodes/:id/revoke | system:write | voiceNodes.revoke() · py: voice_nodes.revoke() |
