Problem mit Anrufen über ISDN (Diva Server 4BRI-8M)

HabibtheHeretic

Neuer User
Mitglied seit
7 Sep 2007
Beiträge
3
Punkte für Reaktionen
0
Punkte
0
Hallo zusammen,
hab mich jetzt zwar schon eine Zeit lang mit Asterisk beschäftigt, bin aber immer noch ein kleiner Noob^^.

Mein System:
Debian 4.0r1
Asterisk 1.4.14
Eicon Diva Server 4Bri-8M
Treiber von Melware divas4linux-melware-3.0.10-107.884-1
Chan Capi von Melware chan_capi-1.0.2
ISDN Anlagenanschluss mit 4 einzelnen Leitungen und insgesamt 8 B-Kanälen (hoffe das ist verständlich, bin nicht so der ISDN Spezi)

Das System läuft soweit. Die Treiberinstallation hat auch ohne Probleme funktioniert.
Für Test hab ich einen ISDN Anlagenanschluss mit einer Leitung (2 B-Kanälen) zur Verfügung.

Bei abgehenden Anrufen, Richtung ISDN, verwende ich beim Dial Befehl eine Gruppe, in der alle 4 Ports der ISDN Karte sind.
Den ISDN Anschluss hab ich an den 1. Port der Karte angeschlossen.
Aber Asterisk versucht immer über den 4. Port herauszutelefonieren. Was logischerweise nicht funktioniert, da der Port keine Verbindung hat.
Ich kriegs einfach nicht hin, dass der über den 1. Port bzw. über den freien Port heraustelefoniert.
Habe schon alles mögliche gelesen und ausprobiert, aber hab immer das selbe Problem.

Hier mal ein Auszug aus der CLI:
Code:
-- Executing [s@macro-isdncall:5] Dial("SIP/2000-0823e7b8", "CAPI/g1/88#####/b|30") in new stack
-- Called g1/88#####/b  > ISDN4#02: CAPI INFO 0x3301: Protocol error layer 1 (broken line or B-channel removed by signalling protocol)
== ISDN4#02: CAPI Hangingup for PLCI=0xdead0000 in state 4
[Dec  4 10:45:34] NOTICE[4640]: cdr.c:434 ast_cdr_free: CDR on channel 'CAPI/ISDN4#02/88#####-0' not posted
-- No one is available to answer at this time (1:0/0/0)
-- Executing [s@macro-isdncall:6] capiCommand("SIP/2000-0823e7b8", "Hangup") in new stack
== Auto fallthrough, channel 'SIP/2000-0823e7b8' status is 'NOANSWER'

Hier noch meine capi.conf und mein Dialplan:
Code:
;capi.conf

[general]
nationalprefix=0
internationalprefix=049
rxgain=1.0       
txgain=1.0       
language=de      
alaw=yes   

[ISDN1] 
ntmode=no
isdnmode=did
msn=83###
incomingmsn=*
controller=1
group=1
softdtmf=off
relaxdtmf=off
faxdetect=off
accountcode=
context=isdn_in
echocancel=yes
devices=2

[ISDN2] 
ntmode=no
isdnmode=did
msn=83###
incomingmsn=*
controller=2
group=1
softdtmf=off
relaxdtmf=off
faxdetect=off
accountcode=
context=isdn_in
echocancel=yes
devices=2

[ISDN3] 
ntmode=no
isdnmode=did
msn=83###
incomingmsn=*
controller=3
group=1
softdtmf=off
relaxdtmf=off
faxdetect=off
accountcode=
context=isdn_in
echocancel=yes
devices=2

[ISDN4]
ntmode=no
isdnmode=did
msn=83###
incomingmsn=*
controller=4
group=1
softdtmf=off
relaxdtmf=off
faxdetect=off
accountcode=
context=isdn_in
echocancel=yes
devices=2

;Dialplan

[general]
autofallthrough=yes
language=de

[default]
include => sip
include => isdn_out
include => isdn_in
include => rufumleitung-an
include => autoumleitung-an
include => rufumleitung-aus
include => abfrage-umleitung

;-------------------------------------------------------
; Makros
;-------------------------------------------------------

[macro-isdncall]
exten => s,1,NoOp(---- Makro ISDNcalls  ----)
exten => s,n,capicommand(peerlink)
exten => s,n,Dial(CAPI/g1/${ARG1}/b,30)
exten => s,n,capicommand(Hangup)

[macro-sipcall]
exten => s,1,NoOp(---- Makro SIPcalls ----)
exten => s,n,Ringing
exten => s,n,Dial(SIP/${ARG1},20,tT)
exten => s,n,VoiceMail(${ARG2})
exten => s,n,Hangup

;-------------------------------------------------------
; Kontexte
;-------------------------------------------------------

[isdn_out]
exten => _7.,1,NoOp(---- abgehende ISDN Calls: ${EXTEN} ----)
exten => _7.,n,Macro(isdncall,${EXTEN:1})

[isdn_in]
exten => _83###.,1,NoOp(---- ankommende ISDN Calls ----)
exten => _83###.,n,Macro(sipcall,2002,2002)

[sip]
exten => _20XX,1,NoOp(------- SIP Anrufe -------)
exten => _20XX,n,Set(test=${EXTEN})
exten => _20XX,n,GotoIf($["${DB_EXISTS(SIP/Registry/${test}}" = "0"]?auto:normal)
exten => _20XX,n,NoOP(------- Automatische Rufumleitung -------)
exten => _20XX,n(auto),Set(auto=${DB(SIP/auto/${test})})
exten => _20XX,n,Set(DB(SIP/umleitung/${test})=${auto})
exten => _20XX,n(normal),GotoIf($["${DB_EXISTS(SIP/umleitung/${test}}" = "0"]?ohne:mit)
exten => _20XX,n(ohne),Macro(sipcall,${test},${test})
exten => _20XX,n(mit),Set(NUM=${DB(SIP/umleitung/${test})})
exten => _20XX,n,GotoIf($["${NUM:0:1}" = "0"]?extern:intern)
exten => _20XX,n,NoOP(------- Rufumleitung nach intern --------)
exten => _20XX,n(intern),Macro(sipcall,${NUM},${test})
exten => _20XX,n,NoOP(------- Rufumleitung nach extern --------)
exten => _20XX,n(extern),Macro(isdncall,${NUM})
exten => _20XX,n,Hangup

[rufumleitung-an]
exten => _*3.,1,NoOp(------- Rufumleitung ein -------)
exten => _*3.,n,Set(DB(SIP/umleitung/${CALLERID(num)})=${EXTEN:2})
exten => _*3.,n,Set(NUM=${DB(SIP/umleitung/${CALLERID(num)})})
exten => _*3.,n,Playback(rufuml_an)
exten => _*3.,n,SayDigits(${NUM})
exten => _*3.,n,Wait(1)
exten => _*3.,n,Hangup

[autoumleitung-an]
exten => *3,1,NoOp(------- Autoumleitung ein -------)
exten => *3,n,Set(autoan=${DB(SIP/auto/${CALLERID(num)})
exten => *3,n,Set(DB(SIP/umleitung/${CALLERID(num)})=${autoan})
exten => *3,n,Playback(rufuml_an)
exten => *3,n,SayDigits(${autoan})
exten => *3,n,Wait(1)
exten => *3,n,Hangup

[rufumleitung-aus]
exten => *4,1,NoOp(------- Rufumleitung aus -------)
exten => *4,n,DBdeltree(SIP/umleitung/${CALLERID(num)})
exten => *4,n,PlayBack(rufuml_aus)
exten => *4,n,Hangup

[abfrage-umleitung]
exten => *5,1,NoOp(------- Ueberpruefung Rufumleitung -------)
exten => *5,n,Set(temp=${CALLERID(num)})
exten => *5,n,GotoIf($["${DB_EXISTS(SIP/umleitung/${temp}}" = "0"]?nein:ja)
exten => *5,n(nein),NoOp(---- keine Rufumleitung ----)
exten => *5,n,Playback(rufuml_aus)
exten => *5,n,Hangup
exten => *5,n(ja),NoOp(---- Rufumleitung aktiv ----)
exten => *5,n,Set(NUM=${DB(SIP/umleitung/${CALLERID(num)})})
exten => *5,n,Playback(rufuml_an)
exten => *5,n,SayDigits(${NUM})
exten => *5,n,Wait(1)
exten => *5,n,Hangup

Gruß
Rene
 
Das ist eine feste Reihenfolge in chan-capi: es wird immer vom Ende her angefangen nach freien Kanälen zu suchen. Wenn du also ports hast, die nicht angeschlossen sind, dann solltest du sie auch nicht in die Gruppe (die du bei Dial() nutzt) eintragen.

Armin
 
Das ist eine feste Reihenfolge in chan-capi: es wird immer vom Ende her angefangen nach freien Kanälen zu suchen.
Ok das wusste ich nicht, aber ich hab die Ports alle in eine Gruppe gepackt das bei einem abgehenden Anruf Richtung ISDN immer ein freier Port gewählt wird.

Das Problem ist halt wenn eine Leitung ausfällt z.B. die Leitung am letzten Port dann funktioniert halt nichts mehr weil Asterisk erst gar nicht versucht über einen anderen Port rauszutelefonieren.

Rene
 
Es ist schon korrekt alle Ports in eine Gruppe für Dialout zu packen. Aber wenn du nur einen Port angeschlossen hast, solltest du das ändern.
Im Betrieb, falls eine Leitung ausfällt, muss dies in Asterisk behandelt werden. chan-capi ist 'nur' der Interface-Treiber, damit Asterisk auf CAPI zugreifen kann. Wann welcher port verwendet wird, ist nicht Sache von chan-capi, sondern muss über Asterisk gehandelt werden. Du kannst beim Dial den hangupcause auswerten. Wenn hier z.B. Layer 1/2 error kommt, ist klar dass hier etwas nicht stimmt. Und dann kannst du ja per contr1...4 direkt zugreifen.
Eventuell waere es noch nützlich, wenn man im Betrieb die Gruppenzuordnung verändern kann.... hmm... vieleicht hat jemand Lust einen patch zu schreiben ;-)

Armin
 
Na dann erstmal danke für die Hilfe.
Ich hab mich grade mal ein wenig umgeschaut und hab mal was mit der {DIALSTATUS} Variable rumexperimentiert. Hab mein Makro auf die Schnelle mal umgebaut jetzt brauch ich die Gruppe nicht mehr^^.
Das scheint jetzt auf den ersten Blick schon mal zu funktionieren.

Ich habs jetz so gelöst, das Asterisk es über den 1. Port versucht. Wenn der, aus welchem Grund auch immer, nicht geht dann ruft sich das Makro selbst nochmal auf und versuchts mit dem 2. Port.
Ist vielleicht nicht die professionellste Lösung, aber sie scheint zu funktionieren.

Rene
 
Kostenlos!

Zurzeit aktive Besucher

Statistik des Forums

Themen
247,205
Beiträge
2,263,758
Mitglieder
375,691
Neuestes Mitglied
Prozessionell