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(inDialOptions) — il numero da presentare come mittente. DEVE essere un numero del tuo account e attivo. Usa il campophoneNumber(E.164) di un elemento ritornato dalistPhoneNumbers().
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:
| Stato | Significato |
|---|---|
connecting | dial() accettato; il bridge audio si sta stabilendo. |
active | Audio in transito: la conversazione è in corso. |
ended | Chiamata 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 chiamataMicrofono, 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.