Early B3, weiter wählen [doch keine Lösung]

wb

Neuer User
Mitglied seit
28 Jun 2005
Beiträge
10
Punkte für Reaktionen
0
Punkte
0
Hi,
über das Kommando
Code:
Dial(CAPI/1234:b)
bekommt man die ja ein Freizeichen und kann dann weiterwählen.

Die Ausgabe von * ist dann
Code:
> sent CALLEDPARTYNUMBER INFO digit = 0 (PLCI=0x101)
> sent CALLEDPARTYNUMBER INFO digit = 5 (PLCI=0x101)
> sent CALLEDPARTYNUMBER INFO digit = 2 (PLCI=0x101)
> sent CALLEDPARTYNUMBER INFO digit = 5 (PLCI=0x101)
...

Nur dabei kann man kein LCR benutzen, da ja nun das DIAL-Kommando aufgerufen wurde und man nicht mehr dazwischenfunken kann.

Ich würde gerne etwas in der Art
Code:
Dial(CAPI/1234:b${NR})
aufrufen und dann auch weiterwählen.

So könnte man z.b.
  • erst die ersten 5 Stellen abwarten
  • dann das LCR Modul aufrufen
  • Den Dial Befehl aufrufen
  • den Rest vom Benutzer weiterwählen lassen
  • und SOFORT ein Freizeichen bekommen (anstatt ein Timeout von 5 sek. oder so abzuwarten)

Doch nach dem Aufruf von Dial mit Nummer werden keine Wähltöne mehr an die CAPI weitergeleitet. (Zumindest gibt es keine Ausgabe in * und es passiert auch nichts beim wählen)

Schon mal Danke im Vorraus ...
... wb
 
Was macht Disa genau?
 
wb schrieb:
Was macht Disa genau?

simuliert einen Wählton und du kannst die Eingabe auswerten:

..

exten => MSN_auf_die_DISA_hören_soll,1,DISA,no-password|lcr

[lcr]
exten => _001.,1,Dial(...
 
Disa wartet aber anscheinend auch auf einen Timeout. Und den will ich ja nicht haben, sondern wie bei einer normalen Telefonanlage nach der letzten gewählten Ziffer SOFORT das Signal, dass es beim Angerufenen Klingelt (oder besetzt ist).

Deshalb habe ich mich jetzt an den chan_capi direkt rangemacht denn ich habe festgestellt, dass es ein CAPI-Problem ist. (Zumindest bei meiner CAPI für die Fritz Karte)

Wenn eine Ferbindung mit early_b3 aufgebaut wird und dabei eine Nummer angegeben wird, ist die Verbindung komplett aufgebaut. Man hat keine early_b3 Verbindung bei der noch sogenannte Info-Requests (Einzelne Ziffern, die gewählt werden) gesendet werden können.

Ich habe chan_capi so gepatcht, dass bei angegebener Nummer zuerst ohne Nummer gewählt wird und nach dem early_b3 Aufbau erst die angegebene Nummer gesendet wird. Dadurch ist ein Weiterwählen möglich.

Ich werde jetzt die veränderte chan_capi Version mit einem LCR testen und wenns gut aussieht, werde ich ins Forum posten wie man Sie bekommt, wenn einer interresiert ist.
 
Der timeout bei DISA wurde mit asterisk 1.0.8 verringert - laut changelog.
 
Naja, man kann auch ohne Patchen ans Zie kommen: Hast Du Dir mal die ganzen Parameter für den Dial-Befehl angesehen:
D(digits): After the called party answers, send digits as a DTMF stream, then connect the call to the originating channel.
Dial(CAPI/1234:b,D(${Nr}))
Das müsste eigentlich auch gehen.
 
Fast Richtig, der Befehl sendet aber erst die Digits nach dem der Connect zur Gegenstelle (also der Angerufene nimt ab) gemacht wurde, und nicht beim early_b3 connect.

Der Patch hat bis jetzt gut funktioniert. Ich habe leider Festgestellt, dass die Tasten, die während der Zeit in der der LCR am rechnen ist, gedrückt werden, einfach innerhalb von Asterisk verschluckt werden.

Somit ist kein durchgängiges wählen möglich :.)

Ich verstehe das aber bei den Antworten richtig, dass sich jeder damit zufrieden gibt, das nach dem wählen erst einmal eine Pause (das Timeout) da ist, bis richtig gewählt wird?
Obwohl jede normale Telefonanlage diese Pause nicht hat?

Mich stört das so sehr, dass ich, wenn es wirklich nicht mit den aktuellen Mitteln möglich ist, Asterisk als nicht ordentlich einsatzfähig für LCR halte.
 
wb schrieb:
Fast Richtig, der Befehl sendet aber erst die Digits nach dem der Connect zur Gegenstelle (also der Angerufene nimt ab) gemacht wurde, und nicht beim early_b3 connect.

Der Patch hat bis jetzt gut funktioniert. Ich habe leider Festgestellt, dass die Tasten, die während der Zeit in der der LCR am rechnen ist, gedrückt werden, einfach innerhalb von Asterisk verschluckt werden.

Somit ist kein durchgängiges wählen möglich :.)

Ich verstehe das aber bei den Antworten richtig, dass sich jeder damit zufrieden gibt, das nach dem wählen erst einmal eine Pause (das Timeout) da ist, bis richtig gewählt wird?
Obwohl jede normale Telefonanlage diese Pause nicht hat?

Mich stört das so sehr, dass ich, wenn es wirklich nicht mit den aktuellen Mitteln möglich ist, Asterisk als nicht ordentlich einsatzfähig für LCR halte.

Das mit dem Timeout ist einfach eine Notwendigkeit. Wie lang ist denn in Deutschland eine Telefonnummer? Irgendwas zwischen drei und sieben oder acht Ziffern, vermute ich. Und woher soll asterisk Deiner Meinung nach wissen, wieviele Stellen er wählen soll. Naja, Du aknnst dafür ja mal ne app_hellsehen schreiben :). Dan könnte es sehen. Man kann das offentliche Telefonnetz nur bedingt mit Voip vergleichen. Wie Du vielleicht gemerkt hast, verzichtet Asterisk (auch mit Disa) auf den Timeout, wenn man die Länge der extensions eindeutig definiert:

exten => _XXXXX,1,Dial(....

Dann wird genu dann gewählt, wenn du 5 Stellen eingegeben hast (so du keine extension hast, die dem wiederspricht. Das einzige was man vielleicht Asterisk vorwerfen kann, ist, dass es beim Dial-Befehl kein Terminalzeichen gibt (wie z.B. #).
 
wb schrieb:
Disa wartet aber anscheinend auch auf einen Timeout.

Ach ja, wenn Du keinen Timeout willst , Du aber (vielleicht, um einmal ein LCR einzurichten, was automatisch zwischen Festnetz und Voip wählt) auf DISA ausweichen musst, habe ich vielleicht eine Lösung für Dich:
Ich habe mir mal den Quelltext von Disa angesehen, und dabei festgestellt, dass es ziemlich Simpel ist, ein Termianlzeichen zu definieren (das sofort einen Dial-Vorgang auslöst, ohne auf den Timeout zu warten). Ich kann zwar kein C Programmieren, aber das war so einfach, dass es direkt ins Auge gesprungen ist.

Wenn Du also interesse hast.. Leider giebt es keinen universellen Patch, da gerade an dieser Stelle etwas geändert wurde (in den letzten CVS-Verisonen).
Hab es mal mit zwei Versionen probiert. Der Patch ist aber trotzdem ähnlich.


Edit:
Wie schon gesagt, ich kann kein C programmieren. Deskalb konnte ich diese obige Fnktion auch nur "fest" einprogrmmieren. Ich würde das aber gerne durch einen Parameter für Disa aktivieren, bzw deaktivieren können. Leider verstehe ich die Operationen auf dem String, mit dem die Parameter übergeben werden nicht, sodass ich das (im Moment) nicht hin bekomme. Wenn also jemand irgendwann mal ne Sekunde Zeit und vor allem Lust hat...
 
Disa ist eine Notlösung. Das mit dem Terminalzeichen ist eine sinnvolle Erweiertung, da geb' ich dir recht.

Der Timeout am Ende muss nicht sein. Normale LCR's, die man kaufen kann, bzw. die, die in Telefonanlagen eingebaut sind brauchen das auch nicht, da sie nach jedem Tastendruck gucken, ob schon genug eingegeben wurde um zu erkennen über welchen Provider gewählt werden soll.
Es ist notwendig die gesamte Nummer zu analysieren, z.B. bei einem Anruf nach Hamburg oder Berlin reichen ja die ersten 3 Stellen (040 bzw. 030) um die Vorwahl zu erkennen. Sobald das erkannt wurde, wird alles bisher gewählte (ggf. plus die Providervorwahl) an das Amt gesendet und jede weitere gewählte Ziffer auch.
Das Amt gibt dann das "es klingelt beim Angerufenen"-Zeichen direkt nachdem die letzte Ziffer der Nummer gewählt wurde, da das Amt ja die Nummern kennt.

Da Asterisk während der Abarbeitung von exten-Befehlen die gewählten Ziffern verbaselt, muss anscheinend das LCR ausserhalb von Asterisk geschehen.
Ich denke grade über einen chan_lcrcapi nach. Da die early-B3 Geschichte schon ziemlich ISDN-spezifisch ist. Bei SIP z.B. geht es sichherlich nur über einen Timeout oder über einen Terminator.
 
So, ich füge hier jetzt mal ein Patch-Files für die aktuelle cvs-Version (1.28) und für Astersik 1.0.8 und 1.0.9 beigefügt.
Dls Termianlzeichen habe ich das "#" gewählt. Die Funktion ist permanent aktiviert. Dieses über einen Parameter zu tun, ist mir mangels C-Versändnis nicht gelungen.
Für DISA 1.28 habe ich es getestet, und es scheint kein Probleme zu geben. Für die Version 1.0.8 und 9 habe ich Disa gepatcht, aber nicht compiliert und getestet. Ich sehe aber keinen Grund, warum es nicht gehen sollte.
Ach ja, nur um auf ganz sicher zu gehen.
Für Fehler oder Schäden übernehme ich keine Haftung. Das Anwenden dieser Patches geschieht auf eigene Gefahr!
 

Anhänge

  • app_disa-1_17_2_1.patch.txt
    447 Bytes · Aufrufe: 1
  • app_disa-1_28.patch.txt
    447 Bytes · Aufrufe: 2
@wb

So, ich hatte jetzt mal Zeit, dein Problem von oben (also, dass man nicht Teilnummern wählen kann) zu Testen:
Also, ich kann eine Telefonnummer auch noch weiterwählen, auch wenn Asterisk (mit dem Dail-Befehl) schon einen Teil der Nummer gewählt hatte.
Ich habe dazu in den Dial befehl meine Handynummer (bis auf die Letzte Ziffer) angegeben. Nachdem ich die entsprechende Extension gewählt hatte, konnte ich die (von asterisk nicht volstendig gewählte) Nummer noch manuell vervollständigen.
 
Hmm,
dann scheinst Du eine andere Version der Capi (nicht chan_capi) zu haben. Meine Fritz-Karte erlaubt das nicht.

Wie dem auch sei, spätestens nachdem ich den LCR eingebunden habe, habe ich erkannt das es mir nicht weiterhilft, da in der Zeit, in der der LCR den günstigsten Tarif ausrechnet die Ziffern verschluckt werden.

(Zumindest bei mir)

Aber danke, das du es ausgetestet hast!
 
Bei mir sieht das jetzte so aus. Ich waehle ueber eine Fritz!PCI v2.0 mit null vorne drann nach drausen.

teil eins mit _0 ohne den '.' laest zu das jemand ein endgeraet abhebt. die null waehlt und direkt das freizeichen der ISDN leitung bekommt..

exten => _0,1,SetCallerId(${CALLERIDNUM})
exten => _0,2,Dial(CAPI/g1/b${EXTEN:1})
exten => _0,3,Hangup

teil zweit _0. mit dem '.' brauch ich damit es klappt wenn erst die ganze nummer gewaehlt wird und der client abhebt.

exten => _0.,1,SetCallerId(${CALLERIDNUM})
exten => _0.,2,Dial(CAPI/g1/b${EXTEN:1})
exten => _0.,3,Hangup

sieht irgentwie komisch aus das doppelt zu machen funktioniert aber beides parallel.

tc
 
Ich mache es aktuell folgendemaßen:

[pbx-trunc]
exten => s,1,Answer
exten => s,2,DigitTimeout,5
exten => s,3,ResponseTimeout,30
exten => s,4,Playtones(400/250,0/250,400/250,0/250,400/250,0/1000)
.
.
.
; Nach draussen wählen
exten => 0,1,goto(int_to_ext,s,1)
exten => 9,1,Dial(CAPI/${MSN}:b)

Beim Abheben kommt ein Internes Freizeichen.
Über 0 bekommt man ein "Freizeichen vom Amt", welches über Asterisk Verwaltet wird, über 9 wird ein early B3 Connect aufgebaut.
Letzteres wird benutzt um den LCR (kommt noch) zu umgehen.

Nun zum Kontext int_to_ext

[int_to_ext]
exten => s,1,playtones(400)
exten => s,2,DigitTimeout,0 ; Initially a 1 second pause during dialing will be treated as 'finished dialing'
exten => s,3,ResponseTimeout,10 ; 10 seconds without any digits at all is a problem...
exten => _X,1,SetVar(Predigits=${EXTEN}) ; Put that digit aside for use later...
exten => _X,2,Goto(s-gathermoredigits,1)
exten => s-gathermoredigits,1,playtones(0)
exten => s-gathermoredigits,2,DigitTimeout,5 ; Increase the 'finished dialing' timeout to 5 seconds
exten => s-gathermoredigits,3,WaitExten(8) ; and give the caller 8 seconds overall to do their thing
exten => _X.,1,goto(dial-extern,${Predigits}${EXTEN},1)

Über diesen Kontext kommt zuerst ein "Freizeichen vom Amt" und nachdem die erste Ziffer gewählt wurde und ein bisschen gewartet wird wird das Freizeichen ausgeschaltet um ein typisches Amt zu simulieren.

Wenn die gesammte Nummer gewählt ist, wird zum Kontgext dial-extern gesprungen

[dial-extern]
exten => 01212...soll niemand wissen ...00,1,dial(SIP/01212.....00@sipgate-out,30,T)
;exten => _X.,1,Dial(CAPI/${MSN}:b${EXTEN},30,T)
exten => _X.,1,Macro(tsblcr,${EXTEN},${LCRTab},${MSN},${CALLER},CAPI)

Hier erfolgt der eingentliche Anruf, dabei filtere ich aktuell eine Spezielle SIP-Nummer raus, die direkt über SIP angerufen wurd, alle anderen Nummern werden über das LCR-Macro gewählt.
Die auskommentierte Zeile würde direkt über die CAPI anrufen.
 
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.