Call Deflect falls alle Kanäle belegt

yuraukar

Neuer User
Mitglied seit
23 Feb 2005
Beiträge
92
Punkte für Reaktionen
0
Punkte
0
Asterisk wird per CAPI an einem ISDN Anschluss mit zwei Leitungen (Kanälen) betrieben. Normalerweise ist das Verhalten bei ankommenden Anrufen, dass das Telefon klingelt, nimmt keiner ab, so geht die Mailbox dran.
Telefoniert der angerufene, so klopft es am Telefon an. Nimmt er nicht ab, so geht die Mailbox dran.

Problematisch ist die Situation wo bereits zwei Leute telefonieren und jemand Anruft. Das Verhalten ist hier, dass es anklopt, nimmt man aber nicht an, so geht auch keine Mailbox dran -- kann Sie ja nicht: es sind alle Leitungen belegt.

Kann man in diesem Fall - Anklopfen bei belegten Leitungen und keiner geht dran - stattdessen per CallDeflect den Anruf umleiten, z.B. aufs Handy?

Wie sähe das im Dialplan aus?
 
Steht ja auch dabei, dass ich es nochmal hier versuche, weil im allgemeinen ISDN Forum keine Antwort kam. Ich nahm an, dass es eine CAPI-spezifische Lösung sein müsste, weil ja chan-capi-cm erst das CD-Kommando zur Verfügung stellt.

Gibts nun also eine Lösung?
 
Mit chan_capi-cm (aktuelles CVS) kann man folgendes machen:

- beim ankommenden Ruf die Variable BCHANNELINFO auswerten, wenn sie
den Wert '2' hat, dann ist es ein call-waiting Anruf (also ohne B-channel)
- dann einfach mit
capicommand(deflect|<number>)
das Call-Deflection einleiten.
Siehe auch in README

Armin
 
Ich möchte ja nur per CallDeflect umleiten, falls die Mailbox nicht drangehen kann weil alle Kanäle belegt sind.

Ich habe mir mal ein log angesehen. Dort finde ich:
Code:
    -- Executing VoiceMail("CAPI/contr1/9991234-2", "u9991234") in new stack
    -- CAPI Answering for MSN 9991234
    -- Playing '/var/spool/asterisk/voicemail/default/9991234/greet' (language 'en')
Nov  8 10:33:03 WARNING[19958]: file.c:993 ast_waitstream: Unexpected control subclass '8'
Nov  8 10:33:04 ERROR[19958]: chan_capi.c:2324 capi_handle_connect_indication: received a call waiting CONNECT_IND

ist das schlimm?

Derzeit sieht mein Makro für den Dialplan so aus:

Code:
[macro-call-intern]
; call an internal extension, fallback to voicemail
; args = (number, voicemail)

exten => s,1,Dial(SCCP/${ARG1},10)
exten => s,2,Goto(s-${DIALSTATUS},1)

exten => s-NOANSWER,1,Voicemail(u${ARG2})
exten => s-NOANSWER,2,Playback(vm-goobye)
exten => s-NOANSWER,3,Hangup()

exten => s-BUSY,1,Voicemail(b${ARG2})
exten => s-BUSY,2,Playback(vm-goobye)
exten => s-BUSY,3,Hangup()

exten => _s-.,1,Goto(s-NOANSWER)

Wie mir scheint, müsste doch das Voicemail Kommando fehlschlagen, dieser Fehler abgefangen werden und dann CD gemacht werden. Ist der Ansatz richtig? Wie frage ich das Fehlschlagen der Voicemail ab?
 
In der Version von chan_capi.c die du benutzt ist das noch schlimm, weil dieser Anruf nicht bearbeitet werden kann.
Auf das Fehlschlagen von Voicemail kannst du nicht warten, denn da wurde dann ja schon ein Answer() versucht. Du musst vorher BCHANNELINFO abfragen.

Armin
 
Ich habe gerade chan_capi-cm-0.6 heruntergeladen. Im README steht von BCHANNELINFO nichts. Bin ich auf der falschen Fährte?
 
Aktuelles CVS HEAD (ich dachte ich haette das oben schon geschrieben).

Armin
 
Stimmt, hast Du geschrieben
(wer lesen kann ist klar im Vorteil....)
 
Kostenlos!

Zurzeit aktive Besucher

Statistik des Forums

Themen
248,369
Beiträge
2,289,404
Mitglieder
377,694
Neuestes Mitglied
Humand613