Audin Docs
Operator SDK

Chiamate in uscita

Comporre una chiamata in uscita con dial, presentare un numero dell'account come caller ID e seguire gli stati della chiamata.

Per far partire una chiamata da un operatore usa dial(to, { callerId }). La chiamata viene instradata dal gateway Audin verso il numero di destinazione, presentando come mittente uno dei numeri del tuo account.

dial(to, { callerId })

const numbers = await op.listPhoneNumbers();
const mine = numbers[0];

const call = await op.dial("+39021234567", { callerId: mine.phoneNumber });
  • to — il numero di destinazione, in formato E.164 (es. "+39021234567").
  • callerId (in DialOptions) — il numero da presentare come mittente. DEVE essere un numero del tuo account e attivo. Usa il campo phoneNumber (E.164) di un elemento ritornato da listPhoneNumbers().

Il callerId non è libero: la piattaforma richiede che sia un numero di proprietà del tuo account e attivo. Passare un numero non valido fa fallire la chiamata. Prendi sempre il valore da listPhoneNumbers() — non comporlo a mano.

La Promise ritornata da dial si risolve quando la piattaforma accetta la richiesta e il bridge audio si sta aprendo. A quel punto ricevi anche l'evento callStarted con lo stesso oggetto OperatorCall.

Gli stati della chiamata

Una chiamata in uscita attraversa questi stati (CallState), leggibili dal getter call.state:

StatoSignificato
connectingdial() accettato; il bridge audio si sta stabilendo.
activeAudio in transito: la conversazione è in corso.
endedChiamata terminata (ispeziona call.endReason).

Lo stato ringing riguarda invece solo le offerte in entrata — vedi Chiamate in entrata.

op.on("callStarted", (call) => {
  // call.direction === "outbound"
  console.log("connessa:", call.callSid);
});

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

I valori possibili di call.endReason per una chiamata in uscita includono hangup (l'operatore ha riagganciato), remote_hangup (la controparte/la piattaforma ha chiuso) e failed (un errore ha impedito di connettere). L'elenco completo di CallEndReason è nella API reference.

Controlli durante la chiamata

Sull'oggetto OperatorCall hai i controlli attivi:

call.mute(true);   // silenzia il microfono dell'operatore
call.mute(false);  // riattiva il microfono
console.log(call.muted); // true | false
call.hangup();     // termina la chiamata

Microfono, mute e audio sono trattati in dettaglio nella pagina Audio & microfono.

Esempio completo

// 1. Scegli un numero dell'account come caller ID.
const numbers = await op.listPhoneNumbers();
const mine = numbers[0];

// 2. (Se non già online) vai online sul numero.
await op.goOnline([mine.id]);

// 3. Componi la chiamata.
const call = await op.dial("+39021234567", { callerId: mine.phoneNumber });

// 4. Segui il ciclo di vita via eventi.
op.on("callEnded", (ended) => {
  if (ended.callSid === call.callSid) {
    console.log("fine chiamata:", ended.endReason);
  }
});

Nessun ringback (MVP). Durante la connessione di una chiamata in uscita non c'è tono di libero: l'operatore sente silenzio finché l'audio non è stabilito (stato active). Suggeriamo di riflettere lo stato connecting nella tua UI (es. un indicatore "in connessione…") per dare un feedback visivo all'operatore.

Una sola chiamata attiva per operatore (MVP). Se una chiamata è già in corso, dial() fallisce (la Promise viene rigettata). Termina la chiamata corrente prima di comporne un'altra.

Prossimi passi

On this page