API CTI quickstart
L'API CTI fornisce accesso programmatico alle funzionalità CTI (Computer Telephony Integration) di NethVoice. Questa guida copre l'autenticazione, la connessione WebSocket e l'autenticazione a due fattori. I metodi legacy sono documentati per riferimento, ma è fortemente consigliato eseguire la migrazione ai nuovi metodi. Le nuove funzionalità e i miglioramenti sono disponibili solo nella nuova API.
Le specifiche complete sono disponibili qui: NethCTI Server full reference
Autenticazione
Il nuovo metodo di autenticazione utilizza JWT (JSON Web Tokens) per un accesso API sicuro.
Login
Endpoint: POST /api/login
Autenticatevi con le vostre credenziali NethVoice per ottenere un token JWT.
curl -X POST https://nethcti.example.com/api/login \
-H "Content-Type: application/json" \
-d '{"username":"user","password":"pass"}'
# Risposta (senza 2FA)
{
"code": 200,
"expire": "2025-11-17T10:30:00Z",
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
}
Campi della risposta:
code: Codice di stato HTTPexpire: Timestamp di scadenza del tokentoken: Token JWT da utilizzare nelle richieste successive
Logout
Endpoint: POST /api/logout
Invalidare il token JWT corrente.
curl -X POST https://nethcti.example.com/api/logout \
-H "Authorization: Bearer <jwt-token>"
Nota: Il logout invalida solo il token specifico. Le altre sessioni dello stesso utente rimangono attive.
Utilizzo dei token JWT
Includete il token JWT in tutte le richieste autenticate utilizzando l'header Authorization: Bearer:
curl https://nethcti.example.com/api/user/me \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
WebSocket
Collegatevi al server CTI utilizzando WebSocket per lo streaming di eventi in tempo reale e la comunicazione bidirezionale.
Connessione
Endpoint: /api/ws/
const socket = io('https://nethcti.example.com', {
path: '/api/ws/',
transports: ['websocket']
});
socket.on('connect', () => {
socket.emit('login', {
accessKeyId: 'user',
token: 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...',
uaType: 'desktop'
});
});
socket.on('event', (data) => {
console.log('Evento ricevuto:', data);
});
Test WebSocket da CLI
Utilizzate websocat per testare le connessioni WebSocket dalla riga di comando:
# Installare websocat (se non già installato)
# cargo install websocat
# oppure
# apt install websocat
# Connettersi a WebSocket
websocat "wss://nethcti.example.com/api/ws/?EIO=4&transport=websocket"
# Dopo la connessione, inviare il messaggio di login Socket.IO:
42["login",{"accessKeyId":"user","token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...","uaType":"desktop"}]
Autenticazione a due fattori (2FA)
Proteggete l'accesso all'API con l'autenticazione facoltativa a due fattori utilizzando password monouso basate su tempo (TOTP).
Generare il codice QR
Endpoint: GET /api/2fa/qr-code
Generare un codice QR per la registrazione con un'app di autenticazione.
curl -X GET https://nethcti.example.com/api/2fa/qr-code \
-H "Authorization: Bearer <jwt-token>"
# Risposta
{
"code": 200,
"message": "QR code string",
"data": {
"url": "otpauth://totp/NethVoice:user?secret=JBSWY3DPEHPK3PXP&algorithm=SHA1&digits=6&period=30",
"key": "JBSWY3DPEHPK3PXP"
}
}
L'url può essere convertita in un'immagine di codice QR o inserita direttamente in un'app di autenticazione (Google Authenticator, Microsoft Authenticator, Authy, ecc.).
Verificare il codice OTP
Endpoint: POST /api/2fa/verify-otp
Verificare una password monouso durante l'accesso o quando si abilita 2FA.
curl -X POST https://nethcti.example.com/api/2fa/verify-otp \
-H "Authorization: Bearer <jwt-token>" \
-H "Content-Type: application/json" \
-d '{"username":"user","otp":"123456"}'
# Risposta (successo)
{
"code": 200,
"message": "OTP verified",
"data": {
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"expire": "2025-11-17T10:30:00Z"
}
}
Importante: Dopo la verifica OTP, viene restituito un nuovo token con otp_verified: true. Utilizzate il nuovo token per le richieste API successive.
Generare codici di recupero
Endpoint: POST /api/2fa/recovery-codes
Generare codici di backup che possono essere utilizzati in caso di perdita dell'accesso al dispositivo di autenticazione.
curl -X POST 'https://nethcti.example.com/api/2fa/recovery-codes' \
-H 'authorization: Bearer <jwt-token>' \
-d '{"password":"NethVoice,1234"}'
# Risposta
{
"codes": ["123456", "789012", "345678", "901234", "567890"]
}
Ricevete 5 codici di 6 cifre monouso. Conservateli in un luogo sicuro.
Verificare lo stato 2FA
Endpoint: GET /api/2fa/status
Verificare se l'autenticazione a due fattori è abilitata per l'utente corrente.
curl -X GET https://nethcti.example.com/api/2fa/status \
-H "Authorization: Bearer <jwt-token>"
# Risposta
{"status": true}
Disabilitare 2FA
Endpoint: POST /api/2fa/disable
Disabilitare l'autenticazione a due fattori per l'utente corrente.
curl -X POST https://nethcti.example.com/api/2fa/disable \
-H "Authorization: Bearer <jwt-token>" \
-H "Content-Type: application/json" \
-d '{"username":"user","password":"pass"}'
Nota: Questa operazione richiede la vostra password e invalida tutti i token JWT per l'utente.
Flusso di accesso con 2FA
Processo di accesso completo quando 2FA è abilitato:
# Passaggio 1: Accesso iniziale
curl -X POST https://nethcti.example.com/api/login \
-H "Content-Type: application/json" \
-d '{"username":"user","password":"pass"}'
# Risposta: token con "2fa": true, "otp_verified": false
# Passaggio 2: Verificare il codice OTP
curl -X POST https://nethcti.example.com/api/2fa/verify-otp \
-H "Authorization: Bearer <token-from-step-1>" \
-H "Content-Type: application/json" \
-d '{"username":"user","otp":"123456"}'
# Risposta: nuovo token con "otp_verified": true
# Passaggio 3: Utilizzare il nuovo token per tutti gli accessi API
curl https://nethcti.example.com/api/user/me \
-H "Authorization: Bearer <token-from-step-2>"
Metodo legacy (Deprecato)
Il metodo di autenticazione legacy che utilizza token HMAC-SHA1 non sarà più disponibile dopo il 1° giugno 2026. Eseguite la migrazione al nuovo metodo di autenticazione basato su JWT il prima possibile.
Login legacy
Il metodo legacy richiedeva un processo challenge-response con HMAC-SHA1:
Endpoint: POST /webrest/authentication/login
# Passaggio 1: Richiesta di accesso per ottenere il nonce
curl -i -X POST https://nethcti.example.com/webrest/authentication/login \
-H "Content-Type: application/json" \
-d '{"username":"user","password":"pass"}'
# Risposta: HTTP 401 Unauthorized
# Header: Www-Authenticate: Digest <nonce_value>
# Passaggio 2: Calcolare il token lato client
# message = username:password:nonce
# token = HMAC-SHA1(message, password)
# auth_token = username:token_hex (es: "user:abc123def456...")
# Passaggio 3: Utilizzare il token calcolato per tutte le richieste successive
curl https://nethcti.example.com/webrest/user/me \
-H "Authorization: user:calculated_token_here"
Utilizzo del token legacy
Includete il token nell'header Authorization per le richieste autenticate:
curl https://nethcti.example.com/webrest/user/me \
-H "Authorization: username:abc123def456..."
WebSocket legacy
Endpoint: /socket.io/
const socket = io('https://nethcti.example.com', {
path: '/socket.io'
});
Guida alla migrazione: Dal metodo legacy al nuovo metodo
Per eseguire la migrazione dall'autenticazione legacy al nuovo metodo basato su JWT:
- Sostituire l'endpoint di accesso: Cambiare da
/webrest/authentication/logina/api/login - Aggiornare il formato del token: Sostituire
username:token_hexconBearer <jwt-token> - Aggiornare il percorso WebSocket: Cambiare da
/socket.io/a/api/ws/ - Adattare gli header: Utilizzare
Authorization: Bearer <jwt-token>invece diAuthorization: username:token - Gestire la scadenza JWT: Monitorare il campo
expiredel token e aggiornare secondo necessità