Le classi derivano da HTTP, e i numeri familiari significano più o meno quello che vi aspettate. Un codice di uso comune significa qualcosa di molto diverso da ciò che dice lo standard.
Cosa significano le classi?
SIP usa sei classi di risposta, numerate come quelle di HTTP e lette allo stesso modo. RFC 3261, che definisce SIP, le elenca nella sezione 7.2:
1xx: Provisional -- request received, continuing to process the request;
2xx: Success -- the action was successfully received, understood, and accepted;
3xx: Redirection -- further action needs to be taken in order to complete the request;
4xx: Client Error -- the request contains bad syntax or cannot be fulfilled at this server;
5xx: Server Error -- the server failed to fulfill an apparently valid request;
6xx: Global Failure -- the request cannot be fulfilled at any server.
L'unica classe senza equivalente HTTP è 6xx. La differenza tra un 4xx e un 6xx è l'ambito. Un errore client dice che questo server non ha potuto soddisfare la richiesta, mentre un errore globale dice che nessun server può farlo. Non ha senso provare un percorso alternativo dopo un 6xx. In pratica ne vedrete raramente uno.
Cosa significano i codici più comuni?
403 significa che l'altro estremo ha rifiutato la chiamata. 404 significa che il numero non è assegnato. 486 significa che il sistema di destinazione è stato raggiunto ed è occupato. 503 significa che il server non accetta la richiesta in questo momento. RFC 3261 li definisce nella sezione 21:
403 Forbidden: "The server understood the request, but is refusing to fulfill it."404 Not Found: "The server has definitive information that the user does not exist at the domain specified in the Request-URI."486 Busy Here: "The callee's end system was contacted successfully, but the callee is currently not willing or able to take additional calls at this end system."503 Service Unavailable: "The server is temporarily unable to process the request due to a temporary overloading or maintenance of the server."
La formulazione di 486 porta la diagnosi: il sistema di destinazione è stato contattato con successo e poi ha rifiutato. Un 404 significa che il numero non è assegnato. Entrambi indicano il numero che avete chiamato, non la vostra configurazione. È l'opposto dell'istinto che un 4xx di solito suscita. Un trunk che funziona correttamente non ha bisogno di verifiche.
Perché la mia chiamata ha ricevuto un 503?
Due cose molto diverse rispondono con 503, e il log delle chiamate è ciò che le distingue.
Un 503 con un record di chiamata corrispondente è un rifiuto. Bird controlla il caller ID, la destinazione, i limiti dell'account e il saldo del wallet prima di effettuare la chiamata, e una chiamata che non supera uno di questi controlli viene rifiutata con 503. Il record contiene il motivo del rifiuto che indica il controllo fallito. Riprovare una chiamata identica produce la stessa risposta, quindi la soluzione è l'impostazione indicata dal motivo, non un altro tentativo.
Il motivo è volutamente assente dalla rete. Il vostro sistema telefonico riceve solo il 503 senza dettagli; il motivo specifico si trova nel record di chiamata autenticato. È una scelta di sicurezza, non un'omissione. Un SIP INVITE è il metodo che richiede una chiamata, e chiunque può inviarvene uno. Inserire la causa nella risposta rivelerebbe se una destinazione è abilitata, se un caller ID è verificato o se un account è senza saldo.
Un 503 senza alcun record di chiamata non è un rifiuto. Nessun controllo ha rifiutato la chiamata, quindi non c'è motivo da leggere e nulla compare nel log. Questo è il caso in cui la definizione dell'RFC stesso è la guida migliore, e riprovare è la cosa giusta da fare.
Il flusso di lavoro è quindi: vedete il 503 dal vostro lato, poi cercate la chiamata nel log. Se c'è, il motivo del rifiuto vi dice cosa cambiare, e ogni motivo con la relativa soluzione è elencato sotto chiamate rifiutate. Se non c'è, trattatelo come transitorio e riprovate invece di cercare un'impostazione da correggere.
Rejected, Failed o qualcos'altro?
Il codice SIP è solo metà della risposta. Lo stato della chiamata è l'altra metà, e leggerli insieme è ciò che rende utile ciascuno dei due.
| Stato | Cosa è successo |
|---|---|
answered | La destinazione ha risposto |
no_answer | Ha squillato e non ha ricevuto risposta prima del timeout |
rejected | È stata rifiutata anziché portata a termine |
failed | È stata tentata senza successo, e la risposta SIP è quella restituita |
unknown | Nessuna risposta finale è mai arrivata, quindi l'esito non ha potuto essere determinato |
Rejected copre due rifiuti diversi, e il motivo del rifiuto è ciò che li distingue. Se c'è un motivo, Bird ha rifiutato la chiamata e il motivo indica il controllo fallito, con 503 come codice. Se non c'è motivo, l'altro estremo l'ha rifiutata direttamente e la risposta SIP contiene il codice dell'altro estremo. Anche una chiamata in entrata respinta dal numero chiamato risulta rejected senza motivo, perché non ha fallito alcun controllo di Bird. L'azione configurata per il numero è registrata come rotta in entrata.
Failed non è affatto un rifiuto. La chiamata è stata tentata senza successo. È qui che finisce un 486 o un 404.
Due ulteriori stati esistono in API e non raggiungono mai un record. busy e canceled sono riservati alle chiamate in entrata consegnate ai vostri numeri. busy copre un chiamato che ha rifiutato la chiamata come occupato. canceled copre un chiamante che ha riagganciato prima che rispondessero. Nessuno dei due viene emesso, e in entrambi i casi l'esito è riportato come failed. Leggere failed insieme alla risposta SIP è ciò che li distingue. Un branch su uno dei due stati non viene mai eseguito, e una ricerca nei record non restituisce risultati.
La tabella sopra elenca gli esiti che una chiamata terminata può avere. Una chiamata ancora in corso riporta ringing o in_progress, quindi filtrando l'elenco delle chiamate incontrerete anche questi due. L'elenco è aperto anche nell'altra direzione: gestite quelli che conoscete e trattate un valore non riconosciuto come uno stato che non gestite, non come un errore.
Come posso vedere tutto questo su più chiamate?
Analizzare una chiamata alla volta è lo strumento sbagliato per individuare un pattern. L'endpoint delle statistiche vocali aggrega i codici di risposta su tutto il vostro traffico, ed è così che distinguete un problema sistemico da un numero errato.
Un aumento di 503 riguarda il vostro account o la vostra configurazione, dato che quelli sono rifiuti propri di Bird. Un aumento di 486 o 404 riguarda i numeri chiamati. Il primo si risolve con un'impostazione, il secondo di solito significa che una lista va ripulita.
Risoluzione dei problemi vocali analizza i singoli casi. Il log delle chiamate descrive il contenuto di ogni record, incluso l'ID chiamata da citare quando solo Bird può risolvere un motivo.
In breve
Se un 503 è un rifiuto dipende dal log delle chiamate.
Un 503 con un record è un rifiuto, e il record indica il motivo. Un 503 senza record non lo è, e in quel caso vale la pena riprovare.
Rejected e Failed sono esiti diversi.
Rejected significa che la chiamata è stata rifiutata. Failed significa che è stata tentata senza successo, e il codice SIP è quello restituito.
Un 486 o un 404 riguarda il numero chiamato.
Busy e unallocated sono risposte dall'altro estremo, quindi indicano la destinazione e non la vostra configurazione.
Due stati di chiamata esistono ma non vengono mai emessi.
busyecanceledsono riservati alle chiamate in entrata. Nessuno dei due viene emesso, e in entrambi i casi l'esito è riportato comefailed.