Probleme mit PTP und österreichischem ISDN

ph0r

Neuer User
Mitglied seit
1 Dez 2005
Beiträge
4
Punkte für Reaktionen
0
Punkte
0
Hallo,

Ich habe folgendes Problem mit einem Aterisk 1.2+chan_capi 0.6.1 an einer AVM-C2 Karte im P2P Modus: Wenn ich die Kopfnummer ohne '0' wähle komme ich nicht zum Asterisk durch (Scheinbar gibt es diese Problem in Deutschland nicht). Nach der Analyse von set verbose 5 und capi debug, stellt sich mir das Problem so dar:
* Asterisk bekommt eine Connect indication
* Asterisk wartet auf die Durchwahl
* Nach einigen sekunden wird der Anruf vom ISDN Betreiber beendet, da er nicht angenommen wurde
Wenn ich innerhalb der ~5 sekunden noch eine Klappe oder eine 0 Nachwähle passt alles (nachdem das ja im Dialplan konfiguriert ist und chan_capi nach jeder Ziffer auf einen eventuellen Match überprüft.

Die Frage ist nun, wie man dieses Problem lösen kann. Ich denke man müßte eine Art (konfigurierbares) Timeout setzen, das nach jedem Drücken einer Ziffer zurückgesetzt wird und falls es triggert den Anruf annimmt und eine ebenfalls konfigurierbare Extension anwählt.

hier das log von einem fehlgeschlagenen anruf
Code:
tuerlsteher*CLI>
CONNECT_IND ID=001 #0x5b51 LEN=0036
  Controller/PLCI/NCCI            = 0x101
  CIPValue                        = 0x4
  CalledPartyNumber               = default
  CallingPartyNumber              = <21 83>123456
  CalledPartySubaddress           = default
  CallingPartySubaddress          = default
  BC                              = <90 90 a3>
  LLC                             = default
  HLC                             = default
  AdditionalInfo                  = default

    -- CONNECT_IND (PLCI=0x101,DID=,CID=123456,CIP=0x4,CONTROLLER=0x1)
  == ISDN1: Incoming call '0123456' -> ''
INFO_IND ID=001 #0x5b52 LEN=0017
  Controller/PLCI/NCCI            = 0x101
  InfoNumber                      = 0x1e
  InfoElement                     = <84 83>

INFO_RESP ID=001 #0x5b52 LEN=0012
  Controller/PLCI/NCCI            = 0x101

    -- ISDN1: info element PI 84 83
       > ISDN1: Origination is non ISDN
INFO_IND ID=001 #0x5b53 LEN=0016
  Controller/PLCI/NCCI            = 0x101
  InfoNumber                      = 0x18
  InfoElement                     = <89>

INFO_RESP ID=001 #0x5b53 LEN=0012
  Controller/PLCI/NCCI            = 0x101

.
.
nach ca. 5 sek.
.
.

    -- ISDN1: info element CHANNEL IDENTIFICATION 89
DISCONNECT_IND ID=001 #0x5b54 LEN=0014
  Controller/PLCI/NCCI            = 0x101
  Reason                          = 0x0

DISCONNECT_RESP ID=001 #0x5b54 LEN=0012
  Controller/PLCI/NCCI            = 0x101

  == ISDN1: CAPI Hangingup
  == ISDN1: Interface cleanup PLCI=0x101
tuerlsteher*CLI>

capi.conf
Code:
[general]
nationalprefix=0
internationalprefix=00
rxgain=0.8
txgain=0.8
[ISDN1]
isdnmode=DID
incomingmsn=*
controller=1,2
group=1
softdtmf=on
relaxdtmf=on
accountcode=
context=from-isdn
immediate=yes
callgroup=1
devices=4
 
Ein Timeout innerhalb von chan_capi ist hier nicht moeglich, denn dass nach z.B. 5 Sekunden abgebrochen wird, haengt an der Vermittlungstelle.
Aber durch immediate=yes sollte ein solcher Anruf eigentlich direkt an Asterisk signalisiert werden, aber hier fehlt die uebliche weitere CalledID Information.
Versuch mal zum Test folgenden Patch:

Code:
diff -u -r1.157 chan_capi.c
--- chan_capi.c 27 Nov 2005 18:14:42 -0000      1.157
+++ chan_capi.c 1 Dec 2005 19:37:17 -0000
@@ -3247,7 +3247,7 @@
                        pbx_builtin_setvar_helper(i->owner, "ANI2", buffer);
                        pbx_builtin_setvar_helper(i->owner, "SECONDCALLERID", buffer);
                        */
-                       if ((i->isdnmode == CAPI_ISDNMODE_MSN) && (i->immediate)) {
+                       if (i->immediate) {
                                /* if we don't want to wait for SETUP/SENDING-COMPLETE in MSN mode */
                                start_pbx_on_match(i, PLCI, HEADER_MSGNUM(CMSG));
                        }

Armin
 
Das hat funktioniert. Nur funktioniert jetzt mein Dialplan nicht mehr der hat bis jetzt so ausgesehen:

Code:
[from-isdn]
exten => s,1,Goto(app-mainmenu,s,1)
exten => 0,1,Goto(app-mainmenu,s,1)
exten => _Z.,2,Macro(callsip,${EXTEN})

nachdem jetzt immer s matched komme ich gar nicht mehr in die unteren extensions. die meisten telefonanlagen lösen das so indem sie einige sekunden auf die extension warten und dann falls keine eingegeben wurde auf die 0 durchwahl gehen.

habe jetzt ein
Code:
exten => s,1,Answer()
exten => s,n,WaitExten(5)
probiert, aber dann habe ich in jedem fall 5 sekunden wartezeit. kann man nicht die search_did funktion im dialplan nachbauen?

ich denke immer noch, das die idee mit dem timer eine möglichkeit wäre. sozusagen kein immediate-modus sondern ein soon-modus.
 
Ach ja, jetzt passt es ja immer auf 's'. Also der patch ist keine Loesung, jetzt weiss ich auch wieder warum ich das so gemacht hatte. Also muesste man wirklich ein timeout einbauen. Wuerde dann so aussehen, dass bei einem Anruf ohne Durchwahl erstmal ein paar Sekunden (wie lange?) gewartet wird und wenn keine weitere Ziffer kommt, geht's an 's'. Ist das denn so ueblich in AT? Das wuerde bedeuten, dass jemand der keine Durchwahl waehlen will ertmal ein paar Sekunden warten muss, bis er den Ruf hoert...

Armin
 
also ich habs gerade bei einigen größeren firmen getestet. es ist immer so, das man ca. 4-5 sekunden warten muss, wenn man keine 0 wählt. wie ist denn das bei euch in de? was passiert da wenn man keine null wählt?

ansonsten klingt dein vorschlag genau nach dem was wir brauchen.
 
In DE kommt der Anruf nicht an, wenn man noch keine Durchwahl-Ziffer gewaehlt hat.
Man bleibt wohl, bis zum Timeout, in der Vermittlungsstelle haengen. Erst wenn eine Ziffer ueber der Hauptnummer gewaehlt wird, wird diese dann an dem Anschluss signalisiert (als initialer Anruf).
Zur Zeit habe ich in chan_capi noch keine Funktion fuer timeouts, es wird also etwas dauern.

Armin
 
Kostenlos!

Statistik des Forums

Themen
247,224
Beiträge
2,264,062
Mitglieder
375,727
Neuestes Mitglied
DaniRausTD