Audin Docs
Operator SDK

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.

OpzioneTipoDefaultNote
coreUrlstringURL 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.
heartbeatIntervalMsnumber25000Intervallo (ms) dei keep-alive del canale di presenza. Il server scarta le connessioni inattive da ~90s, quindi tienilo ben sotto.
reconnectBackoffMsnumber[][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.
audioConstraintsMediaTrackConstraintsecho cancel + noise suppress + AGCVincoli passati a getUserMedia({ audio }) per la cattura del microfono.
loggerOperatorLoggerconsoleSink per la diagnostica dell'SDK.

Metodi

MetodoFirmaDescrizione
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): voidAggiorna i vincoli del microfono (es. cambio device). Hanno effetto dalla prossima apertura del canale audio.
get statePresenceStateStato corrente del canale di presenza.
get currentCallOperatorCall | nullLa chiamata attualmente in corso, se presente.
on(event, listener): () => voidSottoscrive un evento; restituisce una funzione di unsubscribe.
off(event, listener): voidRimuove un listener.
once(event, listener): voidSottoscrive un evento una sola volta.

Eventi

Sottoscrivibili con op.on(name, cb). Le firme sono tipate (AudinOperatorEventMap).

EventoPayloadQuando
presenceStateChangedPresenceStateLo stato del canale di presenza cambia.
availabilityChanged{ accepted: string[]; rejected: string[] }Il server conferma su quali numeri sei andato online.
incomingCallOperatorCallUna chiamata in entrata sta squillando (state: "ringing").
callStartedOperatorCallL'audio è stabilito (dopo accept / dial).
callEndedOperatorCallUna chiamata è terminata (ispeziona endReason).
errorOperatorErrorUn 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à / metodoTipoNote
callSidstringIdentificatore della chiamata sulla piattaforma.
directionCallDirection"inbound" o "outbound".
fromstring | undefinedNumero della controparte (E.164), quando noto.
tostring | undefinedNumero locale/chiamato (E.164), quando noto.
stateCallStateStato corrente del ciclo di vita.
endReasonCallEndReason | undefinedValorizzato una volta che state === "ended".
mutedbooleanSe il microfono è attualmente silenziato.
accept()voidRisponde a un'offerta in entrata. No-op se non in ringing.
reject()voidRifiuta un'offerta in entrata. No-op se non in ringing.
mute(on)voidSilenzia (true) o riattiva (false) il microfono.
sendDtmf(digit)voidInvia un tono DTMF — vedi nota sotto.
hangup()voidTermina 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";     // terminata

CallEndReason

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 attiva

PresenceState

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.

Vedi anche

On this page