📞 Telefonia & VoIP

Codici di risposta SIP: guida al troubleshooting delle chiamate

Cosa significano davvero 403, 480, 488 e 503 su un trunk SIP e come risalire alla causa reale di una chiamata che non passa.

Redazione Velix31 agosto 20267 min di lettura
📞

Quando una chiamata VoIP non va a buon fine, il centralino restituisce quasi sempre un codice numerico. Saperlo leggere accorcia di ore il tempo di diagnosi: il codice dice se il problema è nel centralino, nel trunk, nella rete o nella numerazione chiamata.

Struttura di una risposta SIP

SIP riprende la logica di HTTP: ogni risposta ha un codice a tre cifre e una frase descrittiva. La prima cifra identifica la classe:

  • 1xx – provvisorie, la richiesta è in elaborazione
  • 2xx – successo
  • 3xx – redirezione verso un'altra destinazione
  • 4xx – errore lato richiedente
  • 5xx – errore lato server
  • 6xx – fallimento globale, nessun server può accettare la chiamata

La frase testuale accanto al codice non è normalizzata: ogni operatore la personalizza. Fidatevi del numero, non della descrizione.

Le provvisorie (1xx) e cosa dicono sullo stato della chiamata

  • 100 Trying – il proxy ha ricevuto l'INVITE e lo sta instradando. Se non arriva entro pochi secondi, il problema è di raggiungibilità: firewall, routing o trunk giù.
  • 180 Ringing – la destinazione sta squillando. Da qui in poi il percorso di segnalazione funziona.
  • 183 Session Progress – l'operatore invia early media, tipicamente un annuncio o il ringback generato in rete. Se sentite un messaggio vocale ma la chiamata cade subito dopo, il motivo reale è nell'annuncio, non nel codice finale.

I 4xx: la classe che genera più ticket

  • 401 / 407 – richiesta di autenticazione. Normale nel flusso di registrazione. Se si ripete all'infinito, credenziali o realm sono errati.
  • 403 Forbidden – l'operatore rifiuta di instradare. Le cause tipiche sono IP sorgente non in whitelist, CLI non autorizzato o direzione non abilitata sul trunk. È il codice più frequente quando si attiva un trunk nuovo.
  • 404 Not Found – numerazione inesistente o formattata male. Verificate il piano di numerazione: molti operatori accettano solo E.164 completo con prefisso internazionale.
  • 407 Proxy Authentication Required – come il 401 ma richiesto dal proxy intermedio.
  • 408 Request Timeout – nessuna risposta entro il timer. Quasi sempre un problema di rete, non di configurazione applicativa.
  • 480 Temporarily Unavailable – il destinatario è registrato ma non raggiungibile. Su interni interni significa telefono spento o registrazione scaduta.
  • 486 Busy Here – occupato. Codice legittimo, non un guasto.
  • 487 Request Terminated – chiamata annullata da un CANCEL, tipicamente perché il chiamante ha riagganciato o è scattato un timer di forwarding.
  • 488 Not Acceptable Here – negoziazione media fallita. Nessun codec in comune, oppure SDP con indirizzi privati non raggiungibili. È il codice classico dietro il problema dell'audio assente in un senso.

I 5xx e i 6xx

  • 500 Server Internal Error – guasto generico sull'apparato remoto.
  • 503 Service Unavailable – trunk saturo, licenza esaurita o piattaforma in manutenzione. Se compare a ondate negli orari di punta, controllate il numero di canali contrattualizzati.
  • 504 Server Time-out – timeout su un hop a monte.
  • 603 Decline – rifiuto esplicito. Diverso dal 486: la chiamata è stata scartata per policy, non per occupato.
  • 604 Does Not Exist Anywhere – numerazione cessata a livello di rete.

Come catturare la segnalazione

Su FreePBX e Asterisk il modo più rapido è la CLI:

# Abilita il log SIP dettagliato su chan_pjsip
asterisk -rx "pjsip set logger on"

# Mostra lo stato dei trunk configurati
asterisk -rx "pjsip show endpoints"

# Cattura filtrata sul solo traffico di segnalazione
tcpdump -i any -n -s 0 port 5060 -w /tmp/sip.pcap

Il file .pcap si apre in Wireshark: il menu Telephony → VoIP Calls ricostruisce il flow diagram completo, con tutti i codici in sequenza. È il modo più veloce per capire chi ha chiuso la chiamata e con quale motivazione.

Su MikroTik, se il router fa da NAT davanti al centralino, verificate sempre che SIP ALG sia disattivato:

/ip firewall service-port set sip disabled=yes

L'ALG riscrive gli header SDP e produce esattamente i sintomi del 488 e dell'audio unidirezionale.

Leggere il codice nel contesto giusto

Un errore ricorrente è fermarsi al codice finale ignorando la sequenza. Un 403 preceduto da un 407 significa che l'autenticazione è passata ma la policy ha bloccato la chiamata: due problemi diversi che richiedono interlocutori diversi. Allo stesso modo, un 503 che arriva dopo un 100 Trying indica che il trunk è raggiungibile ma non ha risorse, mentre un 503 immediato senza provvisorie punta a un problema di raggiungibilità dell'endpoint.

Un secondo elemento spesso trascurato è l'header Reason, che alcuni operatori inseriscono nelle risposte di errore con il codice ISUP originale della rete PSTN. Quando presente, è molto più informativo del codice SIP: distingue per esempio fra numero inesistente, numero portato non aggiornato e blocco per credito esaurito.

Errori più frequenti sui trunk italiani

  • CLI presentato non appartenente alle numerazioni assegnate → 403
  • Numerazione inviata in formato nazionale su trunk che richiede E.164 → 404
  • G.729 non licenziato sul centralino con trunk che offre solo G.729 → 488
  • Canali simultanei oltre il contratto → 503
  • Registrazione con NAT e keepalive troppo lungo → 408 intermittenti

Nella maggior parte dei casi, il codice non è il problema: è l'indice che punta al punto esatto della catena da verificare.

Vuoi portare Velix a casa tua?

Verifica la copertura FTTH al tuo indirizzo in 30 secondi. Gratis, senza impegno.

Verifica copertura →