WIESO ignoriert Asterisk ein Hangup??

divB

Mitglied
Mitglied seit
14 Jul 2006
Beiträge
324
Punkte für Reaktionen
0
Punkte
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
 
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.
 
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
 
Die h-Extension wird nach dem Beenden der Verbindung angesprungen (h = hangup).
 
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.
 
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
 
Holen Sie sich 3CX - völlig kostenlos!
Verbinden Sie Ihr Team und Ihre Kunden Telefonie Livechat Videokonferenzen

Gehostet oder selbst-verwaltet. Für bis zu 10 Nutzer dauerhaft kostenlos. Keine Kreditkartendetails erforderlich. Ohne Risiko testen.

3CX
Für diese E-Mail-Adresse besteht bereits ein 3CX-Konto. Sie werden zum Kundenportal weitergeleitet, wo Sie sich anmelden oder Ihr Passwort zurücksetzen können, falls Sie dieses vergessen haben.