Che cos'è un call detail record (CDR)?

Un call detail record è la riga che un sistema di telefonia scrive per ogni chiamata: chi ha chiamato chi, cosa è successo, quanto è durata e quanto è costata.

I sistemi di fatturazione e gli strumenti di debug vogliono gli stessi dati con tempistiche diverse. La maggior parte delle piattaforme fornisce copie separate. Su Bird un unico record serve entrambi ed è leggibile non appena la chiamata termina. Questo cambia due cose nella riconciliazione: cosa conta come tratto e quando arriva il costo.

Cosa contiene un record?

Un record contiene tre gruppi di campi, che rispondono a tre domande diverse.

Cosa è successo. Il status è l'esito: answered, no answer, rejected, failed o unknown. Accanto, la risposta SIP è il codice SIP finale. Dove Bird ha rifiutato la chiamata anziché un operatore, un motivo di rifiuto indica il controllo non superato. Questi tre campi letti insieme formano la diagnosi, e cosa significano i codici di risposta SIP spiega come si combinano.

Quando è successo. Started indica quando Bird ha ricevuto la chiamata. Answered indica quando è stata presa in carico, oppure il fatto che non lo è stata. Ended indica quando è stata terminata. Su una chiamata in ingresso, Inbound route registra cosa era configurato per il numero chiamato, e Trunk indica il trunk su cui la chiamata è arrivata o è stata instradata.

Quanto è costata. Tempo fatturabile, durata totale e costo della chiamata.

Accanto a questi ci sono due identificatori, e non sono intercambiabili. Il call ID (vcl_…) è l'identificatore del record stesso. Citalo al supporto e usalo per la correlazione nei tuoi log. Il session ID (vcs_…) è condiviso da ogni tratto di una stessa chiamata.

Perché una chiamata compare come due record?

Perché un record descrive un tratto e non una chiamata, e alcune chiamate ne hanno più di uno.

Una chiamata inoltrata ne è un esempio: il tratto in ingresso e quello in uscita sono record separati che condividono un unico session ID. Se conti i record come chiamate, sovraconterai esattamente le chiamate inoltrate, e se sommi le durate tra i record conterai due volte il tempo in cui si sono sovrapposti.

Il session ID è la soluzione. Raggruppa per session ID quando vuoi le chiamate, e leggi i record singolarmente quando vuoi i tratti. La scelta dipende dalla domanda: un problema di consegna è una questione di tratto, mentre una domanda sull'esperienza del cliente o sui volumi è di solito una questione di sessione.

Perché il costo non corrisponde alla durata?

Il tempo fatturabile esclude lo squillo. Il costo viene scritto dopo la fine della chiamata, non contestualmente.

Il tempo fatturabile non è la durata totale. Il tempo fatturabile va dalla risposta al riaggancio. La durata totale include il tempo di squillo prima che qualcuno rispondesse. Il record li riporta entrambi. Una riconciliazione che usa silenziosamente il valore sbagliato accumula uno scarto pari alla durata dello squillo su ogni chiamata con risposta, e pari all'intera durata su ogni chiamata senza risposta.

Il costo arriva dopo la chiamata. Il record riporta il costo una volta che è stato tariffato, e ciò non avviene nell'istante in cui la chiamata termina. Un record recuperato subito può essere completo sotto ogni altro aspetto ma privo di prezzo. Se calcoli la spesa in tempo quasi reale, leggi il costo quando è presente e non interpretare mai la sua assenza come zero. Non è un dettaglio: un costo assente e un costo pari a zero sono fatti diversi, e trattarli allo stesso modo sottostima la spesa.

Attendere non è sempre la risposta, però. Una chiamata senza risposta non ha costo e non lo avrà mai. Una chiamata con risposta che resta senza costo non è in attesa di tariffazione. Il record non dice quale dei due casi stai osservando. Contatta il supporto con il call ID anziché continuare a interrogarlo.

Quali chiamate non compaiono mai?

Una chiamata che Bird rifiuta prima di ammetterla non lascia alcun record, quindi il log non è un resoconto completo di ciò che ha raggiunto il tuo account.

Una chiamata che Bird non può ammettere in alcun modo viene respinta prima che esista un record, quindi non raggiunge mai il log. La lista di IP consentiti del trunk è un esempio di questo tipo di rifiuto. Una chiamata da un indirizzo non presente nella lista viene rifiutata a livello SIP e di solito non produce alcun record. Un attaccante che sonda il trunk può quindi generare una grande quantità di traffico senza lasciare traccia nel punto in cui lo cercheresti. Un PBX, il centralino aziendale che instrada le chiamate, fa lo stesso da un nuovo indirizzo non configurato.

La conseguenza pratica è che "there is nothing in the call log" risponde a una domanda più ristretta di quanto sembri. Significa che nessuna chiamata è stata ammessa, non che nessuna è stata tentata. Quando un sistema telefonico segnala che le chiamate falliscono e il log è vuoto, controlla la lista di IP consentiti per prima cosa, non per ultima. La risoluzione dei problemi voce copre il resto di quel percorso.

Come posso estrarre i record?

Per una singola chiamata, aprila nel log delle chiamate e leggi i campi descritti sopra. Il log filtra e cerca nell'elenco, e mostra le chiamate in corso separatamente da quelle concluse.

Per molte chiamate, l'API voce API restituisce le chiamate come record paginabili. Gli endpoint di statistiche voce li aggregano per giorno, ora, paese e codice di risposta. Una domanda su un pattern trova risposta nelle statistiche, non sfogliando i record.

Il log delle chiamate documenta ogni campo contenuto in un record e come viene filtrato l'elenco.

In breve

  1. Una chiamata può generare più record.

    Ogni tratto ha il proprio record e un session ID condiviso li raggruppa. Una chiamata inoltrata produce due record, non uno.

  2. Il tempo fatturabile va dalla risposta al riaggancio.

    Non è la durata totale, che include lo squillo. Entrambi vengono registrati: verifica di riconciliare sul valore corretto.

  3. Il costo non c'è subito, e a volte non arriva mai.

    Il record riporta il costo una volta che è stato tariffato. Una chiamata con risposta che ne è ancora priva non è in attesa di tariffazione: porta il call ID al supporto.

  4. Alcune chiamate non producono alcun record.

    Una chiamata rifiutata prima che Bird la ammetta non lascia nulla nel log, quindi il log non è un resoconto completo di ciò che ha raggiunto il tuo account.

Costruisci sulla stessa rete.

Una chiave API di test è subito tua. L'accesso alla produzione si sblocca quando aggiungi un metodo di pagamento e verifichi un mittente.

La tua prossima idea. Pronta a partire.