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
 

Thomas007

Aktives Mitglied
Mitglied seit
18 Sep 2005
Beiträge
1,455
Punkte für Reaktionen
0
Punkte
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.
 

divB

Mitglied
Mitglied seit
14 Jul 2006
Beiträge
324
Punkte für Reaktionen
0
Punkte
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
 

Maik

Gesperrt
Mitglied seit
1 Apr 2004
Beiträge
1,778
Punkte für Reaktionen
0
Punkte
0
Die h-Extension wird nach dem Beenden der Verbindung angesprungen (h = hangup).
 

divB

Mitglied
Mitglied seit
14 Jul 2006
Beiträge
324
Punkte für Reaktionen
0
Punkte
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.
 

xtr|BasiX

Neuer User
Mitglied seit
20 Okt 2006
Beiträge
12
Punkte für Reaktionen
0
Punkte
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
 

3CX PBX - GRATIS
Linux / Win / Cloud

Statistik des Forums

Themen
233,121
Beiträge
2,030,356
Mitglieder
351,472
Neuestes Mitglied
xyz.53