.titleBar { margin-bottom: 5px!important; }

WIESO ignoriert Asterisk ein Hangup??

Dieses Thema im Forum "Asterisk ISDN Allgemein" wurde erstellt von divB, 4 Okt. 2006.

  1. divB

    divB Mitglied

    Registriert seit:
    14 Juli 2006
    Beiträge:
    324
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Hallo!

    Alle meinen internen Anrufe kommen im Kontext "internal" an, also sowohl die SIP Telephone als auch zwei die per HFC Karte angeschlossen sind.
    Immediate ist "no", für was auch auf "yes"?

    Die zapata.conf sieht so aus:

    Code:
    [channels]
    language=de
    switchtype = euroisdn
    signalling = bri_net_ptmp
    pridialplan = dynamic
    prilocaldialplan = local
    nationalprefix = 0
    internationalprefix = 00
    echocancel=yes
    echotraining = 100
    echocancelwhenbridged=yes
    immediate=no
    overlapdial=no
    group = 1
    context = internal
    channel => 1-2
    
    Meine internen Anrufe werden so gehandled:

    Code:
    [internal]
    ; Für S0-Telephone abheben und Freizeichen geben (immediate=no)
    exten => s,1,Progress()
    
    ; Für kaputte subventionierte Post-Telephone Vorwahl wegschneiden
    exten => _1001.,1,Goto(internal,${EXTEN:4},1)
    
    ; alle externen Anrufe
    include => outbound-local
    include => outbound-mobile
    include => outbound-national
    include => outbound-international
    include => outbound-emergency
    
    include => kurzwahl
    
    ; Asterisk selbst
    exten => 10,1,Answer()
    exten => 10,2,Goto(zentrale,s,1)
    
    ; interne Nebenstellen
    exten => _2X,1,Answer()
    exten => _2X,2,Set(DEST=${DB(internal_extensions/${EXTEN})})
    exten => _2X,3,Dial(${DEST},${DELAY_DFLT},r)
    exten => _2X,4,Hangup()
    
    ; Ungültige Nummer
    exten => unknown,1,Answer()
    exten => unknown,2,Playtones(info)
    exten => unknown,3,Wait(5)
    exten => unknown,4,StopPlaytones()
    exten => unknown,5,Hangup()
    
    exten => _.,1,Goto(internal,unknown,1)
    exten => i,1,Goto(internal,unknown,1)
    
    Wenn ich eine ungültige Nebenstelle rufe, soll also Playtones(info) für 5 Sekunden abgespielt werden und dann *aufgelegt* werden.

    Rufe ich jetzt eine ungültige Nummer an, wird PlayTones zwar abgespielt ABER gleich danach NOCHEINMAL!!! Asterisk scheint beinhart das Hangup() zu ignorieren?!

    Als Beispiel rufe ich hier "13" an:

    Code:
      == Primary D-Channel on span 1 up for TEI 64
        -- Accepting voice call from '22' to '13' on channel 0/2, span 1
        -- Executing Goto("Zap/2-1", "internal|unknown|1") in new stack
        -- Goto (internal,unknown,1)
        -- Executing Answer("Zap/2-1", "") in new stack
        -- Executing PlayTones("Zap/2-1", "info") in new stack
        -- Executing Wait("Zap/2-1", "5") in new stack
        -- Executing StopPlayTones("Zap/2-1", "") in new stack
        -- Executing Hangup("Zap/2-1", "") in new stack
      == Spawn extension (internal, unknown, 5) exited non-zero on 'Zap/2-1'
        -- Executing Goto("Zap/2-1", "internal|unknown|1") in new stack
        -- Goto (internal,unknown,1)
        -- Executing Answer("Zap/2-1", "") in new stack
        -- Executing PlayTones("Zap/2-1", "info") in new stack
        -- Executing Wait("Zap/2-1", "5") in new stack
        -- Executing StopPlayTones("Zap/2-1", "") in new stack
        -- Executing Hangup("Zap/2-1", "") in new stack
      == Spawn extension (internal, unknown, 5) exited non-zero on 'Zap/2-1'
        -- Hungup 'Zap/2-1'
      == Primary D-Channel on span 1 down for TEI 64
    
    Wie man sieht wird *nach* dem Hangup noch ein Goto() zu unknown ausgeführt und demnach die ganze G'schicht zweimal gemacht!

    Kann mir jemand erklären wieso und gibts eine Lösung?


    Besten Dank im Vorraus!
    divB
     
  2. Thomas007

    Thomas007 Aktives Mitglied

    Registriert seit:
    18 Sep. 2005
    Beiträge:
    1,455
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Asterisk sucht h und springt zu _.
    Nicht ohne Grund erscheint ein fettes Warning im log file bei der Verwendung von _.

    WARNING[17043] pbx_config.c: The use of '_.' for an extension is strongly discouraged and can have unexpected behavior. Please use '_X.' instead at line

    Man kann _. verwenden sollte dann aber wissen was man tut.
     
  3. divB

    divB Mitglied

    Registriert seit:
    14 Juli 2006
    Beiträge:
    324
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Vielen Dank, aber wieso versucht er zu 'h' zu springen?
    Das geschieht doch bei einem Timeout oder?
    Falls das Wait() dran schuld ist, was sollte ich stattdessen verwenden?

    Eigentlich wollte ich ja

    Code:
    exten => i,1,Goto(...)
    
    nehmen, aber auf
    http://www.voip-info.org/wiki/index.php?page=Asterisk+i+extension
    steht man soll stattdessen '_.' verwenden!
    Nur deswegen hab ichs so gemacht!

    Also eigentlich will ich NUR dass bei einer Nummer, dies nicht gibt der "tüt tüt tüt"-Ton gespielt wird (eben mit PlayTones). Idealerweise für immer.
    Und notfalls halt eine lange Zeit und dann ein Hangup().


    Danke und mfg,
    divB
     
  4. Maik

    Maik Gesperrt

    Registriert seit:
    1 Apr. 2004
    Beiträge:
    1,778
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Die h-Extension wird nach dem Beenden der Verbindung angesprungen (h = hangup).
     
  5. divB

    divB Mitglied

    Registriert seit:
    14 Juli 2006
    Beiträge:
    324
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Ach, genau stimmt!

    Dann ist logischerweise auch klar wieso, denn '_.' schließt auch 'h' ein.

    Aber gibts denn da eine gute Lösung dafür?

    Stimmt das, was http://www.voip-info.org/wiki/index.php?page=Asterisk+i+extension über 'i' sagt, dass i in bestimmten Fällen nicht funktioniert?

    In meinem Fall stimmt es, aber ich will gern dass in jedem nur erdenklichen Fall ein PlayTones(info) kommt sofern die Nummer nicht durch andere Patterns erkannt wurde.
     
  6. xtr|BasiX

    xtr|BasiX Neuer User

    Registriert seit:
    20 Okt. 2006
    Beiträge:
    12
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Hallo,

    Soweit ich das ich das vertanden habe, wird die "i" Extension angesprungen wenn einer deiner Asterisk Clients einen nicht verfügbare Nummer wählt.

    Wieviele Clients hast du denn ?
    Wenn es nicht so viele sind würde ich versuchen es über die AstDB zu lösen.
    Für jeden Client einen Schlüssel anlegen, dann bei einem eingehenden Anruf die DB checken ob der SIP Kanal existiert.
    Am besten mit GotoIf(${DB_EXISTS(SIPKANAL/DURCHWAHL)}?Ziel1:Ziel2)
    SIPKANAL ist nur die AstDB Familie und Durchwalh machste am besten dann mit ${EXTEN:X} wobei du das X so wählst das nur die Durchwahl des Telefons übrig bleibt.

    Wenn JA ---> Spirng er Ziel 1 an
    Wenn Nein ---> wird Ziel 2 angesprungen

    zb:
    exten => _X.,1,GotoIf(${DB_EXISTS(SIPKANAL/${EXTEN:6})}?2:10)
    exten => _X.,2,Dial(SIP/${EXTEN:6},25,rtT)
    ........Anrufbehandlung
    exten => _X.,10,Playback(SOUNDFILE)
    exten => _X.,11,Hangup()

    Sinnvoller wäre allerdings eine Weiterleitung an deine Standartnummer im Falle einer fehlerhaften Durchwahlnummer oder ?!?

    aslo exten => _X.,10,Dial(SIP/STANDARTDURCHWAHL,25,rtT)
    ........Anrufbehandlung

    So würde ich es realisieren !

    Naja hoffe das es dir weiter hilft