API reference
Configurazione, metodi, eventi e tipi di @audin.ai/operator-sdk — versione 0.3.0, wire protocol v1.
Reference completa della superficie pubblica di @audin.ai/operator-sdk.
Questa pagina copre @audin.ai/operator-sdk 0.3.0, che parla con il
servizio operatori Audin tramite il wire protocol v1. Un cambio
incompatibile al protocollo comporta un bump MAJOR. Consulta il
CHANGELOG prima
di aggiornare attraverso una MAJOR.
new AudinOperator(config)
Crea un'istanza dell'SDK. L'unico parametro è l'oggetto di configurazione
AudinOperatorConfig.
| Opzione | Tipo | Default | Note |
|---|---|---|---|
coreUrl | string | — | URL base del servizio operatori Audin. Uno schema http(s) viene convertito internamente nel corrispondente ws(s); gli slash finali sono tollerati. |
getToken | () => Promise<{ token: string; expiresAt?: string }> | — | Recupera un token di sessione fresco dal tuo backend. Chiamata alla connessione e a ogni riconnessione: restituisci sempre un token nuovo, mai uno scaduto in cache. |
heartbeatIntervalMs | number | 25000 | Intervallo (ms) dei keep-alive del canale di presenza. Il server scarta le connessioni inattive da ~90s, quindi tienilo ben sotto. |
reconnectBackoffMs | number[] | [1000, 2000, 5000, 10000, 30000] | Schedulazione del backoff (ms) per la riconnessione della presenza. L'SDK percorre l'array sui fallimenti consecutivi e resta sull'ultimo valore. |
audioConstraints | MediaTrackConstraints | echo cancel + noise suppress + AGC | Vincoli passati a getUserMedia({ audio }) per la cattura del microfono. |
logger | OperatorLogger | console | Sink per la diagnostica dell'SDK. |
Metodi
| Metodo | Firma | Descrizione |
|---|---|---|
listPhoneNumbers | (): Promise<OperatorPhoneNumber[]> | Elenca i numeri dell'account ({ id, phoneNumber, displayName }), recuperati con lo stesso token di sessione dei WebSocket. Su 401 persistente lancia OperatorRequestError con code: "UNAUTHORIZED"; altri fallimenti lanciano con code: "REQUEST_FAILED". |
goOnline | (phoneNumberIds: string[]): Promise<void> | Connette il canale di presenza e annuncia la disponibilità sui numeri indicati (per id). Richiamabile per cambiare l'insieme di numeri. |
goOffline | (): Promise<void> | Annulla la disponibilità, termina l'eventuale chiamata attiva e chiude il canale di presenza (interrompe la riconnessione automatica). |
dial | (to: string, opts: DialOptions): Promise<OperatorCall> | Avvia una chiamata in uscita. Si risolve quando la piattaforma accetta e il bridge audio si apre. |
setAudioConstraints | (constraints: MediaTrackConstraints): void | Aggiorna i vincoli del microfono (es. cambio device). Hanno effetto dalla prossima apertura del canale audio. |
get state | PresenceState | Stato corrente del canale di presenza. |
get currentCall | OperatorCall | null | La chiamata attualmente in corso, se presente. |
on | (event, listener): () => void | Sottoscrive un evento; restituisce una funzione di unsubscribe. |
off | (event, listener): void | Rimuove un listener. |
once | (event, listener): void | Sottoscrive un evento una sola volta. |
Eventi
Sottoscrivibili con op.on(name, cb). Le firme sono tipate (AudinOperatorEventMap).
| Evento | Payload | Quando |
|---|---|---|
presenceStateChanged | PresenceState | Lo stato del canale di presenza cambia. |
availabilityChanged | { accepted: string[]; rejected: string[] } | Il server conferma su quali numeri sei andato online. |
incomingCall | OperatorCall | Una chiamata in entrata sta squillando (state: "ringing"). |
callStarted | OperatorCall | L'audio è stabilito (dopo accept / dial). |
callEnded | OperatorCall | Una chiamata è terminata (ispeziona endReason). |
error | OperatorError | Un errore non fatale; l'SDK continua a funzionare dove può. |
OperatorCall
Handle a una singola chiamata, ottenuto dagli eventi incomingCall /
callStarted o restituito da dial.
interface OperatorCall {
readonly callSid: string;
readonly direction: "inbound" | "outbound";
readonly from?: string; // numero controparte (E.164), quando noto
readonly to?: string; // numero locale/chiamato (E.164), quando noto
readonly state: "ringing" | "connecting" | "active" | "ended";
readonly endReason?: CallEndReason; // valorizzato quando state === "ended"
readonly muted: boolean;
accept(): void; // risponde a un'offerta in entrata (no-op se non ringing)
reject(): void; // rifiuta un'offerta in entrata (no-op se non ringing)
mute(on: boolean): void; // silenzia/riattiva il microfono dell'operatore
sendDtmf(digit: string): void; // "0"-"9", "*", "#" — vedi nota
hangup(): void; // termina la chiamata
}| Proprietà / metodo | Tipo | Note |
|---|---|---|
callSid | string | Identificatore della chiamata sulla piattaforma. |
direction | CallDirection | "inbound" o "outbound". |
from | string | undefined | Numero della controparte (E.164), quando noto. |
to | string | undefined | Numero locale/chiamato (E.164), quando noto. |
state | CallState | Stato corrente del ciclo di vita. |
endReason | CallEndReason | undefined | Valorizzato una volta che state === "ended". |
muted | boolean | Se il microfono è attualmente silenziato. |
accept() | void | Risponde a un'offerta in entrata. No-op se non in ringing. |
reject() | void | Rifiuta un'offerta in entrata. No-op se non in ringing. |
mute(on) | void | Silenzia (true) o riattiva (false) il microfono. |
sendDtmf(digit) | void | Invia un tono DTMF — vedi nota sotto. |
hangup() | void | Termina la chiamata. |
sendDtmf non è ancora supportato end-to-end. La cifra è validata ed emessa
come messaggio di controllo, ma il server non inoltra ancora i toni alla rete
telefonica: oggi è un no-op per la controparte. Il metodo e il relativo messaggio
sono mantenuti così che l'abilitazione lato server in futuro non richieda
modifiche all'SDK.
Tipi
OperatorPhoneNumber
interface OperatorPhoneNumber {
id: string; // passa a goOnline([...])
phoneNumber: string; // E.164 — usa come callerId in dial
displayName: string | null; // etichetta leggibile, quando impostata
}CallDirection
type CallDirection = "inbound" | "outbound";CallState
type CallState =
| "ringing" // offerta in entrata ricevuta, non ancora accettata
| "connecting" // accettata / composta, bridge audio in apertura
| "active" // audio in transito
| "ended"; // terminataCallEndReason
type CallEndReason =
| "hangup" // l'operatore locale ha riagganciato
| "remote_hangup" // la controparte / piattaforma ha chiuso il leg audio
| "taken_by_other" // un'offerta in entrata accettata da un altro operatore
| "rejected" // l'operatore locale ha rifiutato l'offerta in entrata
| "no_answer" // offerta in entrata non risposta in tempo
| "failed" // un errore ha impedito di connettere la chiamata
| "offline"; // la sessione è andata offline mentre la chiamata era attivaPresenceState
type PresenceState = "offline" | "connecting" | "online" | "reconnecting";DialOptions
interface DialOptions {
// Caller ID da presentare — DEVE essere un numero del tuo account, attivo.
callerId: string;
}OperatorError
Payload dell'evento error (e forma di OperatorRequestError).
interface OperatorError {
code: string; // codice macchina stabile, es. "MIC_PERMISSION_DENIED", "WS_ERROR"
message: string; // descrizione leggibile
cause?: unknown; // errore originale / payload del server, se presente
}I codici che incontrerai più spesso: MIC_PERMISSION_DENIED, WS_ERROR,
UNAUTHORIZED, REQUEST_FAILED. La pagina
Troubleshooting li approfondisce.