ISDN und nur zwei Kanäle?

divB

Mitglied
Mitglied seit
14 Jul 2006
Beiträge
324
Punkte für Reaktionen
0
Punkte
0
Wie handelt das Asterisk?

Ein Kanal ist permanent belegt (Internet-Einwahl).

*Parallel* zu Asterisk (am Amts-S0-Bus) ist (z.Z.) noch ein Telephon angeschlossen.
Mir ist aufgefallen, dass die sonderbarsten Berichte von Anrufern kommen, wenn auf dem parallel zu Asterisk angeschlossenen Telephon telephoniert wird (d.h. beide Leitungen belegt sind) und jemand anruft.

Asterisk registriert diesen Anruf und lässt alle internen Telephone klingeln (SIP, zaphfc/NT).

Nun bin ich der Sache einmal nachgegangen und habe mit meinem Handy angerufen, während beide Kanäle belegt waren.

Hebe ich nicht an den SIP Telephonen ab, klingeln diese für ca 25 Sekunden (sollen sie auch, danach AB!) dann kommt jedoch traurigerweise der Piepton für "Diese Nummer existiert nicht" (also kein besetzt oder so). Das ist sehr verwirrend für Leute die anrufen.
In der Asterisk Konsole sehe ich (verbose=10):

Code:
  == ISDN1#00: Incoming call '069934568345' -> ''
    -- Executing Set("CAPI/ISDN1-pseudo-D/-2", "RECIPIENT=SIP/sip1&SIP/sip2&SIP/sip3&Zap/g1/1001") in new stack
    -- Executing AGI("CAPI/ISDN1-pseudo-D/-2", "cidlookup.agi") in new stack
    -- Launched AGI Script /usr/share/asterisk/agi-bin/cidlookup.agi
Sep  9 18:53:24 WARNING[11580]: channel.c:1602 ast_waitfor_nandfds: Thread -1222730832 Blocking 'CAPI/ISDN1-pseudo-D/-2', already blocked by thread 0 in procedure (null)
    -- AGI Script Executing Application: (Set) Options: (RECIPIENT=SIP/sip1&SIP/sip2)
    -- AGI Script cidlookup.agi completed, returning 0
    -- Executing Set("CAPI/ISDN1-pseudo-D/-2", "CALLFILENAME=20060909-185324-s") in new stack
    -- Executing Monitor("CAPI/ISDN1-pseudo-D/-2", "wav|20060909-185324-s|mb") in new stack
    -- Executing Dial("CAPI/ISDN1-pseudo-D/-2", "SIP/sip1&SIP/sip2|25|r") in new stack
    -- Called sip1
Sep  9 18:53:24 NOTICE[11580]: app_dial.c:1068 dial_exec_full: Unable to create channel of type 'SIP' (cause 3 - No route to destination)
    -- SIP/sip1-0819ccd8 is ringing
    -- Nobody picked up in 25000 ms
    -- Executing VoiceMail("CAPI/ISDN1-pseudo-D/-2", "1001@default") in new stack
  == ISDN1#00: Answering for
    -- Playing 'vm-intro' (language 'de')
       > ISDN1#00: CAPI INFO 0x34a2: No circuit / channel available
Sep  9 18:53:49 WARNING[11580]: file.c:1039 ast_waitstream: Unexpected control subclass '8'
    -- Playing 'beep' (language 'de')
    -- Recording the message
    -- x=0, open writing:  /var/spool/asterisk/voicemail/default/1001/tmp/gkHhhc format: wav49, 0x81223b8
    -- x=1, open writing:  /var/spool/asterisk/voicemail/default/1001/tmp/gkHhhc format: gsm, 0x8122708
    -- x=2, open writing:  /var/spool/asterisk/voicemail/default/391964/tmp/gkHhhc format: wav, 0x819a9a0
Sep  9 18:54:00 WARNING[11580]: app.c:644 ast_play_and_record_full: No audio available on CAPI/ISDN1-pseudo-D/-2??
    -- User hung up
  == ISDN1#00: CAPI Hangingup for PLCI=0x101 in state 4

In der letzten Zeile scheint sich Asterisk dann offenbar erst zu beschweren dass kein Kanal vorhanden ist!

Hebe ich jedoch ab, höre ich (logischerweise) am SIP Telephon gar nichts. Am Handy wird die Verbindung beendet und ich höre vom Netzbetreiber "Dieser Teilnehmer ist vorrübergehend nicht erreichbar".

In Asterisk:

Code:
  == ISDN1#00: Incoming call '069934568345' -> ''
    -- Executing Set("CAPI/ISDN1-pseudo-D/-3", "RECIPIENT=SIP/sip1&SIP/sip2&SIP/sip3&Zap/g1/1001") in new stack
    -- Executing AGI("CAPI/ISDN1-pseudo-D/-3", "cidlookup.agi") in new stack
    -- Launched AGI Script /usr/share/asterisk/agi-bin/cidlookup.agi
Sep  9 18:55:23 WARNING[11606]: channel.c:1602 ast_waitfor_nandfds: Thread -1222730832 Blocking 'CAPI/ISDN1-pseudo-D/-3', already blocked by thread 0 in procedure (null)
    -- AGI Script Executing Application: (Set) Options: (RECIPIENT=SIP/sip1&SIP/sip2)
    -- AGI Script cidlookup.agi completed, returning 0
    -- Executing Set("CAPI/ISDN1-pseudo-D/-3", "CALLFILENAME=20060909-185523-s") in new stack
    -- Executing Monitor("CAPI/ISDN1-pseudo-D/-3", "wav|20060909-185523-s|mb") in new stack
    -- Executing Dial("CAPI/ISDN1-pseudo-D/-3", "SIP/sip1&SIP/sip2|25|r") in new stack
    -- Called sip1
Sep  9 18:55:23 NOTICE[11606]: app_dial.c:1068 dial_exec_full: Unable to create channel of type 'SIP' (cause 3 - No route to destination)
    -- SIP/sip1-0819ccd8 is ringing
    -- SIP/sip1-0819ccd8 answered CAPI/ISDN1-pseudo-D/-3
  == ISDN1#00: Answering for
       > ISDN1#00: CAPI INFO 0x34a2: No circuit / channel available
  == ISDN1#00: CAPI Hangingup for PLCI=0x101 in state 4
Sep  9 18:55:26 NOTICE[11606]: res_monitor.c:292 ast_monitor_stop: monitor executing ( nice -n 19 soxmix "/var/spool/asterisk/monitor/20060909-185523-s-in.wav" "/var/spool/asterisk/monitor/20060909-185523-s-out.wav" "/var/spool/asterisk/monitor/20060909-185523-s.wav"  && rm -f "/var/spool/asterisk/monitor/20060909-185523-s-"* ) &

Ich verwende Asterisk 1.2.10 und die letzte chan_capi-cm.

Wie handelt man diese Situation normal in Asterisk?

Fürs erste wäre es einmal gut, wenn Asterisk ganz normal ein "Besetzt"-Zeichen senden würde.

Nachdem ja ohnehin keine Leitungen frei sind, finde ich es irgendwie nicht nötig, alle anderen Telephone klingeln zu lassen...


Vielen Dank für jegliche Hinweise zur Verbesserung der Situation!
 
Hallo

divB schrieb:
Code:
  == ISDN1#00: Incoming call '069934568345' -> ''
    -- Executing Set("CAPI/ISDN1-pseudo-D/-2", ......


Ich verwende Asterisk 1.2.10 und die letzte chan_capi-cm.

Die Channel Bezeichnung enthält ein "pseudo". Chan_capi setzt auch eine Variable BCHANNELINFO, die angibt ob ein B-Kanal verfügbar ist. Näheres im README von chan_capi 0.7.

Set(PRI_CAUSE=17) und anschliessendes Hangup im Fall, dass kein B-Kanal verfügbar ist. (PRI_CAUSE bitte erst überprüfen, so auswendig am Morgen kann man sich schon mal leicht vertun)

Stefan
 
Juhuuu, ist das toll!!

Vielen Dank für schnelle und kompetente Hilfe!

Ich hatte gehofft dass es sowas gibt, wusste aber nicht nach was ich suchen soll und befürchtete schon, es wird nix geben weil es eine ungewöhnliche Konstellation ist, parallel zu * "ausserhalb" noch ein Telephon zu haben.
 
Konntest du das nun realisieren ?
Wenn ja dann wäre es nett du würdest deine Capi.conf und deine Extensions.conf (relevanter Abschnitt) hier posten. Das würde vermutlich nicht nur mir weiterhelfen !

Besten Dank

Martin
 
Ja sicher.

Für was brauchst du die capi.conf??

Du brauchst eh nur das tun was in der DOC steht:

Code:
[macro-hangup-when-bchan-busy]
exten => s,1,GotoIf($[${BCHANNELINFO} != 0] ? 2 : 4)
exten => s,2,Set(PRI_CAUSE=17)
exten => s,3,Hangup()
exten => s,4,NoOp()

Dieses Makro rufst einfach als erstes bei deinem "incoming" CAPI Kontext auf.

HTH,
divB=0
 
Besten Dank für das Macro !

Nach der Capi.Conf hab ich gefragt weil ich oft gar nicht so weit komme

Ich erhalte Folgenden Fehler:
chan_capi.c:408 _capi_put_cmsg: CAPI error sending DATA_B3_REQ

Dies meist wenn zwei Kanäle besetzt sind.
Ab un zu funktioniert es auch - das heisst ich komme bis zur extensions.conf - Das Macro wird ausgeführt und der Anrufer erhält das Besetzt zeichen- meist kommt jedoch der Fehler und es heisst der Teilnehmer sei vorrübergehend nicht erreichbar.

Ich hab aber einen eigenen Post zu diesem Problem aber wenn du etwas darüber weisst um so besser !!

Nochmals Danke

Martin
 
Naja haben kannst sie natürlich trotzdem gerne, sie wird dir nur nicht weiterhelfen:

Code:
[general]
nationalprefix=0
internationalprefix=00
rxgain=0.8
txgain=0.8
language=de      ;set default language

[ISDN1]          ;this example interface gets name 'ISDN1' and may be any
                 ;name not starting with 'g' or 'contr'.
;ntmode=no       ;if isdn card operates in nt mode, set this to yes
isdnmode=msn     ;'MSN' (point-to-multipoint) or 'DID' (direct inward dial)
                 ;when using NT-mode, 'DID' should be set in any case
incomingmsn=*    ;allow incoming calls to this list of MSNs/DIDs, * = any
;defaultcid=123  ;set a default caller id to that interface for dial-out,
                 ;this caller id will be used when dial option 'd' is set.
;controller=0    ;ISDN4BSD default
;controller=7    ;ISDN4BSD USB default
controller=1     ;capi controller number to use
group=1          ;dialout group
;prefix=0        ;set a prefix to calling number on incoming calls
softdtmf=on      ;enable/disable software dtmf detection, recommended for AVM cards
relaxdtmf=on     ;in addition to softdtmf, you can use relaxed dtmf detection
accountcode=     ;Asterisk accountcode to use in CDRs
context=capi-in  ;context for incoming calls
holdtype=local   ;when Asterisk puts the call on hold, ISDN HOLD will be used. If
                 ;set to 'local' (default value), no hold is done and Asterisk may
                 ;play MOH.
immediate=yes   ;DID: immediate start of pbx with extension 's' if no digits were
                 ;     received on incoming call (no destination number yet)
                 ;MSN: start pbx on CONNECT_IND and don't wait for SETUP/SENDING-COMPLETE.
                 ;     info like REDIRECTINGNUMBER may be lost, but this is necessary for
                 ;     drivers/pbx/telco which does not send SETUP or SENDING-COMPLETE.
;echosquelch=1   ;_VERY_PRIMITIVE_ echo suppression
;echocancel=yes  ;EICON DIVA SERVER (CAPI) echo cancelation
                 ;(possible values: 'no', 'yes', 'force', 'g164', 'g165')
echocancelold=yes;use facility selector 6 instead of correct 8 (necessary for older eicon drivers)
;echotail=64     ;echo cancel tail setting
;bridge=yes      ;native bridging (CAPI line interconnect) if available
;callgroup=1     ;Asterisk call group
;language=de     ;set language for this device (overwrites default language)
devices=2        ;number of concurrent calls on this controller
                 ;(2 makes sense for single BRI, 30 for PRI)

Hast du schon einmal die Überlegung aufgestellt, auf der chan-capi Mailinglist zu posten?
Armin ist sehr hilfsbereit!

mfg,
divB
 
Ja hab ich gemacht und ich passe gerade den Titel an damit es noch aussagekröftiger ist.
In der Tat ich kann keinen Unterschied zu meiner Capi.conf entdecken - höchstens dass ich nicht alle Nummern reinnehme sondern nur zwei spezifische vom S-Bus.
Ich hab noch einen FAX und den hab ich direkt am NTAB.
Hab aber kontrolliert - Fax Anschluss und mein Problem haben nichts miteinander zu tun.

Danke für deine Hilfe
 
mko schrieb:
Ich erhalte Folgenden Fehler:
chan_capi.c:408 _capi_put_cmsg: CAPI error sending DATA_B3_REQ
Zu Fehlermeldungen dieser Art, hatte ich vor Jahren mal ein Gespraech mit Calle Paeth von AVM.
Ich zitiere mal meinen eigenen Kram:
<Zitat>
5) Änderungen der Packetgröße in dem Quellcode von chan_capi:
Bei passiven isdn/capi Karten wird die Anzahl der Buffer worin die Daten abgelegt werden mittels Software gelöst!
Bei aktiven Karten ist das durch den verbauten Hardwarespeicher begrenzt! Bei der AVMb1 existieren z.B. 8 Buffer.
Basierend darauf ist es bei aktiven Karten wichtig nicht zu kleine Packete zu senden das sonst die Buffer ueberlaufen und es zum Fehler kommt.
Die Fehlermeldung lautet: "error DATA_B3_REQ (error=1103, datalen=160) auf der Asterisk-Konsole.
Wobei: 0x1103 == capi send queue full und die 160 die übertragene Packetgröße ist.
Passive Karten scheinen da flexibler zu sein was die Anzahl der Buffer betrifft.
Nachdem die Buffergroesse im chan_capi_pvt.h größer 200 gesetzt wird, nahm zwar die Latenzzeit zu aber die Audioqualitaet auch.
Unter Zuhilfenahme der Echoparameter in der capi.conf kann man nun, was das telefonieren betrifft, super Ergebnisse erzielen.
Diverse Telefonate zum Testen ergaben: die Gesprächspartner haben nicht gemerkt, das dort ein PC mit einer ISDN Karte dazwischen hing.
</Zitat>
Die Tests basierten auf dem chan-capi von Junghanns!
Evtl. hilft es dir, dein Problem einzugrenzen.
 
[gelöst]

Besten Dank !!!

ich hab nun bei der Source (usr/srv/chan-capi-Head) in der Datei Chan_capi.h
den wert
#define CAPI_MAX_B3_BLOCK_SIZE auf 254 gestellt und neu compiliert.

Seitdem tritt der Fehler nicht mehr auf !
 
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.