Plugin
Alcune funzioni del centralino sono plugin a pagamento, attivati per singola azienda da Exobyte. Le API sono sempre incluse per ogni sezione: le funzioni di un plugin non attivo rispondono 403 PLUGIN_REQUIRED. Per attivare un plugin contatta Exobyte.
Plugin disponibili
| Plugin | Funzioni | Endpoint e campi |
|---|---|---|
ai — Assistente AI | Voci professionali e catalogo voci; scelta della voce nei messaggi da testo; risposta automatica (chiede il motivo della chiamata, registra e prende nota con trascrizione e riassunto); assistente vocale | voices.list, voices.preview, voices.sample, voices.setTenantDefault; voiceId in POST /v1/prompts e PATCH /v1/prompts/:id; destinazioni auto_answer e ai_assistant; messaggi della risposta automatica: assistant.listMessages, assistant.getMessage, assistant.messageAudio, assistant.messageTranscript, assistant.deleteMessage (Messaggi dell'assistente) |
recording — Registrazioni | Registrazione delle chiamate con regole per azienda, numero, coda e interno; ascolto, download, trascrizione e riassunto delle registrazioni e dei messaggi in segreteria | Tutti gli endpoint recordings.*; voicemail.messageTranscript, voicemail.transcribeMessage |
Senza plugin restano disponibili tutte le altre funzioni del centralino:
- senza
ai: i messaggi da testo usano la voce standard della piattaforma e si possono sempre caricare file audio (MP3, WAV, OGG, M4A). Una risposta automatica già configurata viene sostituita da un messaggio di non disponibilità; - senza
recording: il centralino non registra le chiamate; la segreteria funziona normalmente, senza trascrizione.
L'azienda dimostrativa demo ha sempre tutti i plugin attivi.
Plugin dell'azienda
GET /v1/plugins restituisce i plugin dell'azienda della chiave (scope extensions:read), con enabled per ciascuno; locked è true per le aziende con tutti i plugin sempre attivi. Anche l'oggetto azienda di GET /v1/tenants/current contiene plugins, l'elenco degli id attivi.
# Plugin attivi per l'azienda della chiave
curl -s https://centralino.exovoip.it/api/v1/plugins -H "X-API-Key: $EXOPBX_API_KEY"
# Funzione di un plugin non attivo
# HTTP/1.1 403 Forbidden
# {"error":{"code":"PLUGIN_REQUIRED","message":"Funzione disponibile con il plugin «Registrazioni». ...","details":{"plugin":"recording"}}}import { isExoPBXError } from '@exobyte/exopbx-sdk';
const { plugins } = await pbx.plugins.list();
const hasRecording = plugins.some((p) => p.id === 'recording' && p.enabled);
try {
await pbx.recordings.list();
} catch (err) {
if (isExoPBXError(err, 'PLUGIN_REQUIRED')) {
const { plugin } = err.details as { plugin: string };
console.log(`Funzione non attiva: plugin ${plugin}`);
} else throw err;
}use Exobyte\ExoPBX\ApiException;
$out = $pbx->plugins->list();
foreach ($out['plugins'] as $p) {
echo $p['id'], ' ', $p['enabled'] ? 'attivo' : 'non attivo', PHP_EOL;
}
try {
$pbx->recordings->list();
} catch (ApiException $e) {
if ($e->getErrorCode() !== 'PLUGIN_REQUIRED') throw $e;
echo 'Plugin richiesto: ', $e->getDetails()['plugin'], PHP_EOL;
}from exopbx import ExoPBXError
plugins = pbx.plugins.list()["plugins"]
enabled = [p["id"] for p in plugins if p["enabled"]]
try:
pbx.recordings.list()
except ExoPBXError as err:
if err.code != "PLUGIN_REQUIRED":
raise
print("Plugin richiesto:", err.details["plugin"])Errore PLUGIN_REQUIRED
Una funzione di un plugin non attivo risponde 403 PLUGIN_REQUIRED; details.plugin indica il plugin richiesto (ai o recording). Per le destinazioni auto_answer e ai_assistant details.path indica il campo interessato. Conviene leggere GET /v1/plugins all'avvio e nascondere le funzioni non disponibili.
Attivazione (amministratore della piattaforma)
GET /v1/tenants/:id/plugins e PUT /v1/tenants/:id/plugins sono riservati all'amministratore della piattaforma. Il corpo di PUT sostituisce l'elenco dei plugin attivi: { "enabled": ["ai", "recording"] } (un elenco vuoto li disattiva tutti). La modifica si applica subito al centralino ed è annotata nel registro attività.
# Solo amministratore della piattaforma (chiave globale)
curl -s https://centralino.exovoip.it/api/v1/tenants/3/plugins -H "X-API-Key: $EXOPBX_API_KEY"
curl -s -X PUT https://centralino.exovoip.it/api/v1/tenants/3/plugins -H "X-API-Key: $EXOPBX_API_KEY" \
-H "Content-Type: application/json" -d '{"enabled":["ai","recording"]}'const current = await pbx.tenants.getPlugins(3);
const updated = await pbx.tenants.setPlugins(3, { enabled: ['ai', 'recording'] });
console.log(updated.plugins.filter((p) => p.enabled).map((p) => p.id));$current = $pbx->tenants->getPlugins(3);
$updated = $pbx->tenants->setPlugins(3, ['enabled' => ['ai', 'recording']]);current = pbx.tenants.get_plugins(3)
updated = pbx.tenants.set_plugins(3, {"enabled": ["ai", "recording"]})Endpoint
| Descrizione | Richiesta | Scope | Metodo SDK |
|---|---|---|---|
| Plugin a pagamento attivi per l’azienda | GET /v1/plugins | extensions:read | plugins.list() |
