Frohe Weihnachten!
Ich habe ein Asterisk-1.4.10.1 unter Linux mit 2 Eicon Diva Server Karten mit chan_capi-1.0.1 an 2x ISDN Anschlüssen im PTP Modus konfiguriert. Intern habe ich mehrere Linksys SIP Telefone, Hylafax an IAXmodem und noch eine zusätzliche Eicon Diva Server ISDN Karte im NT Modus für einen internen S0 Bus.
Es funktioniert fast alles, leider habe ich aber nach wie vor keine Lösung für das hierorts bereits mehrfach angesprochene, österreichspezifische Problem mit Direkt-Durchwahl von Geräten, die keine Blockwahl beherrschen, gefunden.
An den beiden ISDN Karten, die an jeweils einem ISDN BA im PTP Modus hängen, habe ich chan_capi mit folgenden Einstellungen konfiguriert:
ntmode=no
isdnmode=did
incomingmsn=*
immediate=yes
controller=2
group=1
context=extern
echocancel=yes
devices=2
Der Dialplan in extensions.conf sieht im Wesentlichen so aus (reduziert um Funktionen für den internen S0 Bus und die Faxanbindung):
[general]
static=yes
writeprotect=no
[default]
include => intern
include => extern
include => capi-out
; Macro zur Anwahl eines SIP Telefons
[macro-siphone]
exten => s,1,Dial(SIP/${ARG1},45)
exten => s,n,Goto(s-${DIALSTATUS},1)
exten => s-NOANSWER,1,VoiceMail(${ARG1},u)
exten => s-BUSY,1,VoiceMail(${ARG1},b)
exten => s-ANSWER,1,Hangup()
exten => _s-.,1,Goto(s-NOANSWER,1)
[sipphones]
exten => 10,1,Macro(siphone,${EXTEN})
exten => 11,1,Macro(siphone,${EXTEN})
exten => 12,1,Macro(siphone,${EXTEN})
exten => 30,1,Macro(siphone,${EXTEN})
exten => 31,1,Macro(siphone,${EXTEN})
exten => 40,1,Macro(siphone,${EXTEN})
exten => 41,1,Macro(siphone,${EXTEN})
exten => 42,1,Macro(siphone,${EXTEN})
exten => 60,1,Macro(siphone,${EXTEN})
exten => 61,1,Macro(siphone,${EXTEN})
exten => 62,1,Macro(siphone,${EXTEN})
[intern]
include => sipphones
[extern]
exten => s,1,Set(TIMEOUT(digit)=5)
exten => s,n,WaitExten(5)
exten => s,n,Macro(siphone,12)
exten => 0,1,Macro(siphone,12)
include => sipphones
[capi-out]
exten => _0X.,1,Set(RUFNUMMER=${EXTEN:1})
exten => _0X.,n,Dial(CAPI/g1/${RUFNUMMER}|45|r)
Die beiden ISDN-Karten am öffentlichen ISDN Netz arbeiten wie in capi.conf ersichtlich im Kontext "extern".
Mein Ziel ist: Anrufe von außen an die Hauptnummer inklusive Durchwahl sollen direkt an die passende Nebenstelle durchgestellt werden, Anrufe ohne Durchwahl oder mit der Kurzdurchwahl "-0" sollen an die Nebenstelle mit der Nummer 12 gehen.
Das klappt, wenn ich von einem Mobiltelefon aus anrufe (das beherrscht Blockwahl), aber nicht von einem Gerät, das Blockwahl
nicht beherrscht.
Im Fehlerfall sieht die Debug-Info von Asterisk so aus (Beispiel mit Ruf auf die Kopfnummer + Durchwahl "60"):
Wie man sieht, geht Asterisk auf die "s" Extension (das ist zu erwarten, ich habe "immediate=yes" in der capi.conf und die DID Information ist leer). Dann wird die "WaitExten" Funktion ausgeführt und die beiden Nummern für die Durchwahl werden anscheinend auch tatsächlich empfangen (zuerst "6" und dann "0")
Aber WaitExten läuft dann in den Timeout und es wird trotzdem wieder die Durchwahl "12" angerufen und nicht die 60!
Eventuell habe ich noch nicht begriffen, wie das "WaitExten" eigentlich funktioniert: woher weiß diese Funktion, wann die Durchwahl-Nummer vollständig ist und was macht es dann mit dieser Nummer? Wie formuliere ich den Dialplan, damit ich dann genau die mit "WaitExten" empfangenen Ziffern auslesen und z.B. in einem Makro wählen kann?
Im Forum gibt es einige Beispiele dazu, aber die scheinen mir alle irgendwie unvollständig zu sein.
Z.B. im Beitrag http://www.ip-phone-forum.de/showthread.php?t=133837
Dort wird als "Lösung" für das Problem folgende Konfiguration empfohlen:
Das Makro "dial-zentrale" ist leider nicht spezifiziert. Was soll das Makro machen? Wann wird das aufgerufen? Wird es nur aufgerufen, wenn WaitExten keine Durchwahl empfängt oder wird es umgekehrt mit der neuen Durchwahl, die von WaitExten empfangen wurde, aufgerufen. Woher weiß das Makro dann aber, welche Durchwahl-Nummer empfangen wurde? Steht die in einer (mir unbekannten) Asterisk Variablen?
Ich bastle an dem Problem schon seit mehreren Tagen, bisher aber ohne Erfolg. Ich denke, ich habe alle Foren-Beiträge, Mailing-Listen, HOWTO's, Webseiten, Wiki, usw. zu diesem Thema bereits durchgelesen, die richtige Lösung war leider noch nicht dabei (oder ich habe sie nicht erkannt)
Wenn ich in capi.conf "immediate=no" setze, klappt die direkte Durchwahl auf Nebenstellen auch von Geräten ohne Blockwahl, allerdings funktioniert dann die Anwahl der Kopfnummer nicht mehr korrekt: Der Anrufer hört eine Zeit lang nichts, dann wird die Verbindung terminiert. Das ist also auch keine Lösung.
Hat irgendjemand eine Idee, wo der Fehler liegen könnte?
Ich habe ein Asterisk-1.4.10.1 unter Linux mit 2 Eicon Diva Server Karten mit chan_capi-1.0.1 an 2x ISDN Anschlüssen im PTP Modus konfiguriert. Intern habe ich mehrere Linksys SIP Telefone, Hylafax an IAXmodem und noch eine zusätzliche Eicon Diva Server ISDN Karte im NT Modus für einen internen S0 Bus.
Es funktioniert fast alles, leider habe ich aber nach wie vor keine Lösung für das hierorts bereits mehrfach angesprochene, österreichspezifische Problem mit Direkt-Durchwahl von Geräten, die keine Blockwahl beherrschen, gefunden.
An den beiden ISDN Karten, die an jeweils einem ISDN BA im PTP Modus hängen, habe ich chan_capi mit folgenden Einstellungen konfiguriert:
ntmode=no
isdnmode=did
incomingmsn=*
immediate=yes
controller=2
group=1
context=extern
echocancel=yes
devices=2
Der Dialplan in extensions.conf sieht im Wesentlichen so aus (reduziert um Funktionen für den internen S0 Bus und die Faxanbindung):
[general]
static=yes
writeprotect=no
[default]
include => intern
include => extern
include => capi-out
; Macro zur Anwahl eines SIP Telefons
[macro-siphone]
exten => s,1,Dial(SIP/${ARG1},45)
exten => s,n,Goto(s-${DIALSTATUS},1)
exten => s-NOANSWER,1,VoiceMail(${ARG1},u)
exten => s-BUSY,1,VoiceMail(${ARG1},b)
exten => s-ANSWER,1,Hangup()
exten => _s-.,1,Goto(s-NOANSWER,1)
[sipphones]
exten => 10,1,Macro(siphone,${EXTEN})
exten => 11,1,Macro(siphone,${EXTEN})
exten => 12,1,Macro(siphone,${EXTEN})
exten => 30,1,Macro(siphone,${EXTEN})
exten => 31,1,Macro(siphone,${EXTEN})
exten => 40,1,Macro(siphone,${EXTEN})
exten => 41,1,Macro(siphone,${EXTEN})
exten => 42,1,Macro(siphone,${EXTEN})
exten => 60,1,Macro(siphone,${EXTEN})
exten => 61,1,Macro(siphone,${EXTEN})
exten => 62,1,Macro(siphone,${EXTEN})
[intern]
include => sipphones
[extern]
exten => s,1,Set(TIMEOUT(digit)=5)
exten => s,n,WaitExten(5)
exten => s,n,Macro(siphone,12)
exten => 0,1,Macro(siphone,12)
include => sipphones
[capi-out]
exten => _0X.,1,Set(RUFNUMMER=${EXTEN:1})
exten => _0X.,n,Dial(CAPI/g1/${RUFNUMMER}|45|r)
Die beiden ISDN-Karten am öffentlichen ISDN Netz arbeiten wie in capi.conf ersichtlich im Kontext "extern".
Mein Ziel ist: Anrufe von außen an die Hauptnummer inklusive Durchwahl sollen direkt an die passende Nebenstelle durchgestellt werden, Anrufe ohne Durchwahl oder mit der Kurzdurchwahl "-0" sollen an die Nebenstelle mit der Nummer 12 gehen.
Das klappt, wenn ich von einem Mobiltelefon aus anrufe (das beherrscht Blockwahl), aber nicht von einem Gerät, das Blockwahl
nicht beherrscht.
Im Fehlerfall sieht die Debug-Info von Asterisk so aus (Beispiel mit Ruf auf die Kopfnummer + Durchwahl "60"):
Code:
-- CONNECT_IND (PLCI=0x102,DID=,CID=nnnn7449,CIP=0x10,CONTROLLER=0x2)
== ISDN2#02: setting format alaw - 0x8 (alaw)
== ISDN2#02: Incoming call '0nnnn7449' -> ''
-- ISDN2#02: info element CHANNEL IDENTIFICATION 89
-- ISDN2#02: info element SETUP
-- ISDN2#02: CAPI/ISDN2#02/-7: s matches in context extern for immediate
-- ISDN2#02: CAPI/ISDN2#02/-7: s matches in context extern
> CAPI devicestate requested for ISDN2#02/
-- Executing [s@extern:1] Set("CAPI/ISDN2#02/-7", "TIMEOUT(digit)=5") in new stack
-- Digit timeout set to 5
-- Executing [s@extern:2] WaitExten("CAPI/ISDN2#02/-7", "5") in new stack
== Started pbx on channel CAPI/ISDN2#02/-7
-- ISDN2#02: info element CALLED PARTY NUMBER
-- ISDN2#02: Updated channel name: CAPI/ISDN2#02/60-8
-- CAPI queue frame: [ TYPE: DTMF End (1) SUBCLASS: 6 (54) ] [ISDN2#02]
-- CAPI queue frame: [ TYPE: DTMF End (1) SUBCLASS: 0 (48) ] [ISDN2#02]
-- ISDN2#02: info element INFORMATION
-- Timeout on CAPI/ISDN2#02/60-8, continuing...
-- Executing [s@extern:3] Macro("CAPI/ISDN2#02/60-8", "siphone|12") in new stack
-- Executing [s@macro-siphone:1] Dial("CAPI/ISDN2#02/60-8", "SIP/12|45") in new stack
-- Called 12
Wie man sieht, geht Asterisk auf die "s" Extension (das ist zu erwarten, ich habe "immediate=yes" in der capi.conf und die DID Information ist leer). Dann wird die "WaitExten" Funktion ausgeführt und die beiden Nummern für die Durchwahl werden anscheinend auch tatsächlich empfangen (zuerst "6" und dann "0")
Aber WaitExten läuft dann in den Timeout und es wird trotzdem wieder die Durchwahl "12" angerufen und nicht die 60!
Eventuell habe ich noch nicht begriffen, wie das "WaitExten" eigentlich funktioniert: woher weiß diese Funktion, wann die Durchwahl-Nummer vollständig ist und was macht es dann mit dieser Nummer? Wie formuliere ich den Dialplan, damit ich dann genau die mit "WaitExten" empfangenen Ziffern auslesen und z.B. in einem Makro wählen kann?
Im Forum gibt es einige Beispiele dazu, aber die scheinen mir alle irgendwie unvollständig zu sein.
Z.B. im Beitrag http://www.ip-phone-forum.de/showthread.php?t=133837
Dort wird als "Lösung" für das Problem folgende Konfiguration empfohlen:
Code:
exten = s,1,Set(TIMEOUT(digit)=5)
exten = s,2,WaitExten(10)
exten = s,3,Macro(dial-zentrale)
Das Makro "dial-zentrale" ist leider nicht spezifiziert. Was soll das Makro machen? Wann wird das aufgerufen? Wird es nur aufgerufen, wenn WaitExten keine Durchwahl empfängt oder wird es umgekehrt mit der neuen Durchwahl, die von WaitExten empfangen wurde, aufgerufen. Woher weiß das Makro dann aber, welche Durchwahl-Nummer empfangen wurde? Steht die in einer (mir unbekannten) Asterisk Variablen?
Ich bastle an dem Problem schon seit mehreren Tagen, bisher aber ohne Erfolg. Ich denke, ich habe alle Foren-Beiträge, Mailing-Listen, HOWTO's, Webseiten, Wiki, usw. zu diesem Thema bereits durchgelesen, die richtige Lösung war leider noch nicht dabei (oder ich habe sie nicht erkannt)
Wenn ich in capi.conf "immediate=no" setze, klappt die direkte Durchwahl auf Nebenstellen auch von Geräten ohne Blockwahl, allerdings funktioniert dann die Anwahl der Kopfnummer nicht mehr korrekt: Der Anrufer hört eine Zeit lang nichts, dann wird die Verbindung terminiert. Das ist also auch keine Lösung.
Hat irgendjemand eine Idee, wo der Fehler liegen könnte?
Zuletzt bearbeitet: