ECT via chan_capi klappt nicht

bern

Neuer User
Mitglied seit
19 Jul 2007
Beiträge
10
Punkte für Reaktionen
0
Punkte
0
Hallo,

ich bin gerade dabei in die asterisk-Welt ein zu tauchen. Einiges geht mittlerweile, aber bei folgendem Problem kann ich den entscheidenden Hinweis nicht finden:

Ich will Anrufe vom Festnetz (ISDN) entgegen nehmen und - nach einem kleinen Menue - weiter verbinden. Damit der S0-Bus wieder frei wird soll capicommand(ect) verwendet werden. Dabei nutze ich den internen S0-Bus einer FritzBox 7170, die laut AVM-Support ECT unterstüzt. Dieser ist über eine FritzCard USB an meinen Rechner (Athlon 1,3 GHz) angeschlossen. Die Weitervermittlung kommt zwar zu Stande, aber nur über die beiden B-Kanäle, nicht direkt über die TK-Anlage.

asterisk 1.4.8 läuft auf einem openSuse 10.0 Server (Kernel 2.6.13) mit addons-1.4.2, zaptel-1.2.18 und libpri-1.4.1
Mit chan_capi-1.0.1 startete asterisk nicht, daher habe ich chan_capi-HEAD (Revision 528) installiert.

Weiterhin sind capi4linux-2005.8.15.2, capisuite-0.5.cvs-29.1 und i4l-base-2005.10.25-0.1 vorhanden.

extensions.conf
[capi-in]
exten => 2222,1,capicommand(holdtype|hold)
exten => 2222,2,Answer()
exten => 2222,3,capicommand(hold|MYHOLDVAR)
exten => 2222,4,Dial(CAPI/ISDN1/**2#/B,60)
exten => 2222,5,Wait(1)
exten => 2222,6,capicommand(ect|${MYHOLDVAR})
exten => 2222,7,Hangup()

Alternativ geht auch:
exten => 2222,1,capicommand(deflect|**2#)
exten => 2222,2,Hangup()​

Was zum selben Ergebnis führt (Weiterleitung über 2 B-Kanäle) - nur schneller.

debug-infos mit "-rvvvv" und "capi debug" sind umfangreicher, daher habe ich sie in den Anhang gelegt, zusammen mit der capi.conf. Auffällig erscheint mir dass der eingehende Ruf über ISDN1#02 kommt, capicommand(hold) wohl funktioniert, anschließend der ausgehende Ruf über ISDN1#01 erfolgt. Außerdem gibt es die Warnung:
"chan_capi_utils.c:305 capi_wait_conf: ISDN1#02: timed out waiting for FACILITY_CONF", mit der ich leider nichts anfangen kann. Schließlich wird eine "native bridge for CAPI/ISDN1#02/2222-13 and CAPI/ISDN1#01/**2#-14" geschaltet.

In modules.conf habe ich die beiden Zeilen
load => chan_capi.so
[global]
chan_capi.so=yes​
eingetragen wie im chan_capi-README beschrieben.

Ich habe vorher alles schon einmal mit asterisk-1.2.19, zaptel-1.2.18, addons-1.2.7, libpri-1.2.4 und chan_capi-cm-0.6.5 durchgespielt, wobei mir kein Unterschied in Erinnerung geblieben ist.

Ich überlege ob es an der älteren isdn4linux Version liegt, konnte aber keine aktuellere für Suse 10.0 finden. Hat jemand eine Idee?

Vielen Dank! Gruss, bern
 

Anhänge

Ich musste jetzt 2mal lesen, weil ich erst dachte, das du eine funktionierende Version postest - hätte mich gewundert :-).

Das kann so nicht funktionieren. Mit dem Dial wird der zweite Kanal aufgebaut und beendet, wenn wieder aufgelegt wird - das ECT wird so nie ausgeführt!

Du musst das ECT in ein Makro legen und das Makro im Dial (z.B. mit M(ect)) aufrufen

Ein Beispiel dazu findest du in der README von chan-capi.

Mario
 
Hallo Mario,

vielen Dank für die rasche Antwort. Es funktioniert!

So ganz habe ich die Beispiele im chan_capi-README noch nicht durchschaut. Irgendwie sieht es für mich so aus als gäbe es zwei Möglichkeiten: Entweder mit einem Marcro oder direkt. Aber wie auch immer eine funktionierende reicht mir:

[macro-capiect]
exten => s,1,capicommand(ect)

[capi-in]
exten => 22222,1,Answer()
exten => 22222,2,Wait(1)
exten => 22222,3,capicommand(hold)
exten => 22222,4,Dial(CAPI/ISDN1/**2#,60,M(capiect))

Herzlichen Dank nochmal für die Hilfe!

Gruss, bern
 
Mit zweite Variante (komme gerade nicht an die README ran) meinst du IMHO Call Deflection.
Das funktioniert anderes: das ist Rufabweisung, das Gespräch darf hier nicht angenommen werden, sondern der Ruf wird an eine andere Rufnummer weitergeleitet. Hier kommt gar keine Verbindung am Asterisk zustande.
Das muss aber die Gegenstelle unterstützen, das wird wohl bei kleineren (vielleicht auch an grösseren) TK-Anlage am internen S0 nicht funktionieren.
 
Hmm, ich dachte ich hätte etwas in einem anderen Forum gelesen, aber ich finde nichts passendes in der Chronik meines Browsers...:confused:

Nun, im README steht:

Explicit call transfer of the call on hold (must put call on hold first!)
Example:
exten => s,1,capicommand(ect|${MYHOLDVAR})
or
[macro-capiect]
exten => s,1,capicommand(ect)
[default]
exten => s,1,capicommand(hold)
exten => s,2,Wait(1)
exten => s,3,Dial(CAPI/contr1/1234,60,M(capiect))

Für mich sieht das so aus, als ob es auch eine Möglichkeit ohne Makro gibt.

Als Laie hätte ich mir das etwa so vorgestellt:

1. Der Ruf wird entgegen genommen (Answer).
2. Er wird "on hold" gesetzt. Durch den holdtype "hold" (ISDN hold) wird das Gespräch in der TK-Anlage gehalten und der B-Kanal ist wieder frei.
3. Ein weiterer Anschluß wird gewählt (Dial...)
4. Der TK-Anlage wird mittels capicommand(ect) angezeigt die beiden Gespräche zu verbinden.​

Damit ect "weiß" um welches Gespräch es sich handelt kann von hold noch eine MYHOLDVAR definiert und ect mit auf den Weg gegeben werden. Aber das ist nur eine reine Vermutung, ich kenne mich mit ISDN nicht sehr gut aus.
 
Zuletzt bearbeitet:
Kostenlos!

Statistik des Forums

Themen
248,331
Beiträge
2,288,424
Mitglieder
377,626
Neuestes Mitglied
Erz-Oldi