Dopo Called PJSIP/NUMERO_CHIAMATO@telecom Asterisk mi dice

    -- PJSIP/telecom-00000001 is making progress passing it to PJSIP/bob-00000000
    -- PJSIP/telecom-00000001 is making progress passing it to PJSIP/bob-00000000
    -- PJSIP/telecom-00000001 answered PJSIP/bob-00000000
    -- Channel PJSIP/telecom-00000001 joined 'simple_bridge' basic-bridge <...>
    -- Channel PJSIP/bob-00000000 joined 'simple_bridge' basic-bridge <...>
    -- Channel PJSIP/bob-00000000 left 'simple_bridge' basic-bridge <...>
  == Spawn extension (internal, NUMERO_CHIAMATO, 5) exited non-zero on 'PJSIP/bob-00000000'
    -- Channel PJSIP/telecom-00000001 left 'simple_bridge' basic-bridge <...>

Non c'è Strict RTP learning after remote address... che comunque dovrebbe essere abilitato di default secondo quanto scritto nel file rtp.conf. Altra differenza è che nel mio dialplan non ho aggiunto le opzioni KTm all'applicazione Dial.

Inoltre ho disattivato il caricamento automatico dei moduli (autoload = no in modules.conf) e aggiunto di volta in volta i moduli strettamente necessari per le funzionalità. Oltre al file dei moduli, gli unici due file che ho riscritto sono quelli postati sopra.

    eutampieri Quella in giallo da problemi, quella in verde va

    Queste sono chiamate in entrata, no? Falliscono anche loro?

      Marco25 si, sono in entrata. Quella verde funziona, quella arancione arrivano troppi invite e la seconda volta che arriva i telefoni stanno già suonando e quindi parte la segreteria.

      Marco25 ho risolto aggiungendo:

              from_user=+390XX
              from_domain=telecomitalia.it

      nell'endpoint

      • Marco25 ha risposto a questo messaggio

        eutampieri ho risolto aggiungendo

        Strano, io non li avevo settati esplicitamente e difatti From: conteneva nome_endpoint@ip_privato, ma non ho riscontrato problemi con le chiamate in uscita. Hai provato anche in uscita verso TIM?

        eutampieri Quella verde funziona, quella arancione arrivano troppi invite e la seconda volta che arriva i telefoni stanno già suonando e quindi parte la segreteria.

        Devo capire se è mitigabile tramite dialplan, rifiutando le chiamate spurie.

          Marco25 Hai provato anche in uscita verso TIM?

          Si, funziona!

          Per il problema degli invite duplicati a me magicamente ora funziona, forse 100rel=yes è servito a qualcosa

          • Marco25 ha risposto a questo messaggio

            eutampieri Per il problema degli invite duplicati a me magicamente ora funziona, forse 100rel=yes è servito a qualcosa

            Effettivamente per il momento non ricevo invite duplicati ma non può essere per via di 100rel = yes, essendo questo predefinito su yes.

              Ho notato che se riavvio Asterisk più volte a breve distanza di tempo (poche ore o anche un'ora), TIM aumenta il numero di INVITE. La butto lì, forse è una balla: può essere il loro centralino abbia qualche euristica per cui se rileva più REGISTER a breve distanza pensa che il centralino dell'utente non funzioni bene e quindi invii più INVITE nel tentativo che il centralino risponda a uno di questi?

              9 mesi dopo

              Aggiornamento: può verificarsi una race condition per cui all'avvio del sistema Asterisk parta prima che l'ora sia stata sincronizzata via NTP. Ciò fa sì che il centralino non sia effettivamente registrato rendendo impossibile ricevere chiamate (ma se si effettua una chiamata in uscita successivamente, tutto torna a funzionare).

              Per risolvere è sufficiente avviare Asterisk dopo che l'ora sia sincronizzata. Per farlo, abilitare il servizio preposto allo scopo con systemctl enable systemd-time-wait-sync.service e modificare unità systemd di Asterisk in modo da richiedere la sincronizzazione dell'ora: systemctl edit asterisk.service, incollare le seguenti righe, salvare e chiudere l'editor di testo.

              [Unit]
              After=time-sync.target
              Wants=time-sync.target
              9 mesi dopo

              Ciao a tutti, so che la discussione è molto vecchia, ma avevo anche io il problema degli INVITE multipli e l'ho risolto definitivamente con questa piccola modifica all'extensions.conf:

              [internal]
              exten => 001,1,Verbose(2, Chiamata in entrata da "${CALLERID(num)}")
              same => n,Answer()
              same => n,Dial(PJSIP/bob)
              same => n,Hangup()

              In pratica ho aggiunto l'azione di Answer() prima del Dial() e non ho più avuto nessun problema. Anche la history delle chiamate su Zoiper, dove prima ne vedevo decine per ogni singola chiamata, ora è pulitissima.

              Spero possa essere utile a qualcuno.

              Un saluto.

                JediKngt il problema degli INVITE multipli

                Sono in grado di riprodurre in maniera consistente il problema effettuando diverse registrazioni e deregistrazioni a breve distanza di tempo (minuti o ore), il che accadeva agli inizi quando cercavo di capire come configurare Asterisk tra un errore e l'altro.

                Da quando ho raggiunto la configurazione definitiva non ricevo INVITE multipli fintanto che le registrazioni sono distanziate almeno di qualche giorno (in caso di interruzione della corrente oppure aggiornamento del kernel e quindi riavvio del sistema) ma forse è sufficiente un tempo appena maggiore di expiration.

                JediKngt In pratica ho aggiunto l'azione di Answer() prima del Dial() e non ho più avuto nessun problema.

                In questo modo stai rispondendo immediatamente a qualsiasi chiamata in ingresso, anche se non ti sembra visto che poi la inoltri a bob a cui squilla.

                https://wiki.asterisk.org/wiki/display/AST/Answer%2C+Playback%2C+and+Hangup+Applications

                If Asterisk is simply going to pass the call off to another device using the Dial() application, you probably don't want to answer the call first.

                  2 mesi dopo

                  Marco25

                  Si Marco, hai ragione. Alla fine funziona, me effettivamente non è la risoluzione del problema. Le ho provate quasi tutte, ma togliendo l'answer da lì sembra che la chiamata proveniente dal provider venga inoltrata più volte al Dial, in particolare quando la rifiuto sul telefono ricevente. Nei log si generano più righe per lo stesso evento e prendono tutte "BUSY". Devo studiare meglio la configurazione per capire come evitarlo.

                  Un saluto.

                  Marco25

                  Solo per aggiornamento, non ho trovato molte altre strade purtroppo.

                  Il mio problema non è la mancata funzionalità delle call in ingresso o in uscita, ma il fatto che, senza quel comando "Answer()", Zoiper traccia, per ogni call in ingresso, dalle 6 alle 12 chiamate perse perché, evidentemente, legge tutti gli INVITE. Di questi, effettivamente, solo uno va a buon fine, mentre tutti gli altri si prendono un 486 BUSY dal device "bob".

                  Da quello che vedo, sembra essere corretta l'ipotesi che hai fatto nei primi post di questo thread: l'ISP, nel mio caso TIM, invia un primo INVITE e, probabilmente, si aspetta una risposta molto veloce. Asterisk risponde 100 Trying, che dovrebbe evitare ulteriori INVITE. Ora, non so se è perché il trying arriva con un certo delay, ma TIM continua ad inviare INVITE: si ferma a cinque o sei, normalmente. Nel frattempo Asterisk proxa questi INVITE, via PJSIP, al device "bob", che risponde 486 BUSY a tutti tranne che ad uno, per il quale invia il 200 OK (PRACK).

                  Senza il comando "Answer()", tutto questo traffico di INVITE e BUSY viene letto da Zoiper, che considera ogni canale in BUSY una chiamata persa, anche se, in realtà, la chiamata è una sola e c'è anche stata regolare risposta (infatti, nel registro di Zoiper, c'è anche una chiamata a buon fine).

                  Se inserisco il comando "Answer()" invece, l'ho spostato nel context "external", è vero che rispondo sempre alla chiamata, ma ho il registro su Zoiper assolutamente in linea con quello che succede sul dispositivo "bob" e, comunque, se dopo il comando "Answer()" la chiamata non va a buon fine, in ogni caso scatta il comando "Hangup()" e quindi anche chi chiama non si accorge che c'è stata una risposta e percepisce solo che la chiamata non è andata a buon fine.

                  So che è un compromesso, ma con il provider che invia più INVITE è l'unico modo di tenere in ordine il registro delle chiamate. Gli INVITE multipli ci sono anche quando inserisco il comando "Answer()", ma ho visto che TIM, a quel punto, si accorge di aver già ricevuto una risposta 200 OK e cancella le altre chiamate: inizio a pensare che gli INVITE multipli siano un meccanismo del provider, poco ortodosso, per massimizzare la possibilità che la chiamata vada a buon fine, cancellando poi quelli in eccesso.

                  Grazie e buon proseguimento.

                  Un saluto.

                    JediKngt Hai provato, se il downtime non è un problema, a lasciare spento Asterisk per almeno 24 ore?

                      • [cancellato]

                      • Modificato

                      JediKngt

                      Non è che TIM si aspetta messaggi 100rel che non gli arrivano, es. 183 o186?

                        Marco25

                        No, non ho provato, ma posso sicuramente provare. Dici che può essere utile?

                        [cancellato]

                        In effetti è strano, dovrebbero esserci, perché 100rel è impostato a "yes", ma non vedo messaggi 183 nella cattura. Sicuramente da approfondire. Ho provato invece a mandare il 180 dal dialplan, ma ha avuto lo stesso comportamento che ha senza il 200.

                        Aggiornamento: ho provato ad inviare prima Progress() (183) e poi Ringing() (180) dal dialplan ed ho provato anche ad impostare il parametro "100rel" al valore "peer_supported", ma TIM continua ad inviare ulteriori INVITE. Hanno tutti lo stesso call id, ma differente branch. La chiamata continua a funzionare e vedo i PRACK, ma Zoiper, con questa configurazione, vede di nuovo tante chiamate perse per ogni chiamata.

                        • Marco25 ha risposto a questo messaggio

                          JediKngt No, non ho provato, ma posso sicuramente provare. Dici che può essere utile?

                          Io ho risolto così. Arrivavano 2-3-5 INVITE. Ho lasciato spento 3 giorni (ma come scritto forse è sufficiente appena più di 24 ore) e da quel momento 1 solo INVITE, a meno che non riavvio asterisk più volte a breve distanza di tempo e a quel punto si verifica di nuovo.

                            Marco25

                            Grazie Marco, proverò.

                            Informativa privacy - Informativa cookie - Termini e condizioni - Regolamento - Disclaimer - 🏳️‍🌈
                            P.I. IT16712091004 - info@fibraclick.it

                            ♻️ Il server di questo sito è alimentato al 100% con energia rinnovabile