Audin Docs
Operator SDK

Chiamate in entrata

Ricevere le offerte di chiamata in ingresso, accettarle o rifiutarle, e gestire il modello di offerta a più operatori.

Quando arriva una chiamata su un numero su cui un operatore è online, l'SDK emette un evento incomingCall. Da lì decidi — tramite la tua UI — se accettare o rifiutare l'offerta.

L'evento incomingCall

L'evento porta con sé un oggetto OperatorCall nello stato ringing:

op.on("incomingCall", (call) => {
  console.log("chiamata in arrivo da", call.from, "su", call.to);
  // call.direction === "inbound"
  // call.state === "ringing"

  // Mostra la tua UI "accetta / rifiuta", poi:
  call.accept(); // oppure call.reject();
});

In questa fase la chiamata è solo offerta: l'audio non è ancora stabilito. Le proprietà utili sono:

ProprietàTipoNote
callSidstringIdentificatore della chiamata sulla piattaforma.
direction"inbound"Per le chiamate in entrata è sempre inbound.
fromstring | undefinedNumero del chiamante (E.164), quando noto.
tostring | undefinedNumero dell'account chiamato (E.164), quando noto.
state"ringing"Stato iniziale di un'offerta in entrata.

Accettare o rifiutare

L'oggetto OperatorCall espone due metodi per rispondere all'offerta:

  • accept() — risponde all'offerta. L'SDK apre il canale audio e, quando l'audio è stabilito, emette callStarted. È un no-op se la chiamata non è più in ringing (es. già accettata da un altro operatore).
  • reject() — declina l'offerta. Anche questo è un no-op se la chiamata non è più in ringing.
op.on("incomingCall", (call) => {
  acceptButton.onclick = () => call.accept();
  rejectButton.onclick = () => call.reject();
});

accept() apre il microfono e l'audio: assicurati di averne il permesso nel browser e che la pagina sia servita su HTTPS (o localhost). Vedi la pagina Audio & microfono.

Il modello di offerta a più operatori

Una chiamata in entrata su un numero dell'account viene offerta a tutti gli operatori online su quel numero. Il primo che accetta vince la chiamata; gli altri ricevono la fine dell'offerta.

In pratica, dal punto di vista del tuo codice:

  • Più operatori possono ricevere lo stesso incomingCall "contemporaneamente".
  • Appena uno accetta, per gli altri la chiamata termina con endReason: "taken_by_other".
  • Se nessuno risponde entro il tempo previsto, la chiamata termina con endReason: "no_answer" e prosegue lungo il percorso configurato per quel numero (ad esempio un altro ramo del flusso lato Audin).

L'instradamento dell'offerta e i timeout sono gestiti dal gateway Audin: il tuo codice deve solo reagire agli eventi (incomingCall, callStarted, callEnded) e aggiornare la UI di conseguenza.

callStarted e callEnded

Una volta accettata l'offerta, segui il ciclo di vita della chiamata con due eventi:

  • callStarted — l'audio è stato stabilito (la chiamata passa allo stato active). Da qui valgono i controlli mute/hangup.
  • callEnded — la chiamata è terminata (stato ended). Ispeziona call.endReason per sapere perché.
op.on("callStarted", (call) => {
  console.log("connessa:", call.callSid);
});

op.on("callEnded", (call) => {
  console.log("terminata:", call.callSid, "motivo:", call.endReason);
});

Valori di endReason rilevanti per l'inbound

endReasonSignificato
taken_by_otherL'offerta è stata accettata da un altro operatore.
rejectedL'operatore locale ha rifiutato l'offerta.
no_answerL'offerta non è stata risposta in tempo.
hangupL'operatore locale ha riagganciato.
remote_hangupLa controparte (o la piattaforma) ha chiuso la chiamata.
failedUn errore ha impedito di stabilire la chiamata.
offlineLa sessione è andata offline mentre la chiamata era attiva.

L'elenco completo di CallEndReason è nella API reference.

Una sola chiamata attiva per operatore (MVP). Mentre una chiamata è in corso, eventuali offerte in entrata vengono rifiutate automaticamente dal gateway: il tuo codice non riceve un incomingCall per esse.

Prossimi passi

On this page