VoiceFile wenn besetzt

foexle

Neuer User
Mitglied seit
25 Jun 2008
Beiträge
71
Punkte für Reaktionen
0
Punkte
0
Hallo Leute,
ich hätte da eine Frage.
Also es ist ja kein Problem, wenn ein Telefon besetzt ist eine Voicefile ab zu spielen. Das habe ich auch schon nachgelsen. Aber da ich keine Telefone hinter meiner Asteriskanlage habe, würde ich gerne wissen, wie ich eine Voicefile abspielen kann, wenn die B-Kanäle besetzt sind ....
oder ist das definitv nicht möglich ?
Dann hätte ich noch eine parallele frage, wenn ich nun 2 B-Kanäle habe, meinen Dialplan so eingerichtet habe, das er bei einer bestimmten nummer immer ran geht, benutzt er dann beim ersten anruf, den 1. b-kanal und wenn der noch aktiv ist und ein 2. anruf ankommt den 2. b-kanal ? ... also sucht der automatisch nach den freien kanälen oder muss ich das explizit irgendwo angeben ?



Vielen dank für eure Hilfe
 
Aber da ich keine Telefone hinter meiner Asteriskanlage habe, würde ich gerne wissen, wie ich eine Voicefile abspielen kann, wenn die B-Kanäle besetzt sind ....
oder ist das definitv nicht möglich ?
gleiches Vorgehen wie mit einem Telefon, dialstatus abfragen.


Dann hätte ich noch eine parallele frage, wenn ich nun 2 B-Kanäle habe, meinen Dialplan so eingerichtet habe, das er bei einer bestimmten nummer immer ran geht, benutzt er dann beim ersten anruf, den 1. b-kanal und wenn der noch aktiv ist und ein 2. anruf ankommt den 2. b-kanal ? ... also sucht der automatisch nach den freien kanälen
ja
 
hi und dankr für die antwort,

es tut mir leid ich habe noch ziemlich große probleme mit dem verständnis was genau dial macht.
Also ich bin davon ausgegangen das mit

exten => _X.,1,dial(misdn/${EXTEN},30) den anruf an das Telefon mit der gewählten nummer weiter leite.
Aber wenn ich nun keine telefone habe, sondern will das beispielweise in einen anderen context weiter leite, worin ich dann die Playback funktion aufrufe, ist das für mich unverständlich.

also ich weis das ich da mit goto(s-${DIALSTATUS},1) arbeiten kann. Aber ich verstehe den zusammenhang nicht mit dem DIAL.... denn ich will doch prüfen ob die B-Kanäle alle belegt sind und nicht ob ein bestimmtest telefon bestzt ist.

gruss
 
hä, was willst du machen??????
Versuch dein vorhaben mal etwas deutlicher zu beschreiben
 
ok
also ich habe einen telefonieserver, der nur dazu da ist, anrufe an zu nehmen die Informationen die anfallen, wie telefonnummer des anrufers oder gewählte nummer an einen anderen server weiter zu leiten, dieser wiederrum antwortet und sagt dem telefoniesever was er mit dem anruf machen soll.

Nun die frage die mich beschäüftigt, wenn alle B-Kanäle belegt sind, wie kann ich dem anrufer der dann anruft mitteilen das kein Kanal frei ist.
Er soll nicht in einer warteschleife, sondern es soll eine voice abgespielt werden und dann soll der server auflegen.

Das ist mein vorhaben :> das mich gerade beschäftigt ;)
 
b-kanal von extern oder zum anderen server?
wenn beide externen kanäle belegt sind, dann kannst du nichts machen.

wenn du die interne version meinst, so wie oben beschrieben
 
ja nein intern geht das über ein IP netz also sprich lan oder internet wird da eine xml übertragen.
Also da kann nix besetzt sein.
ich meine die kanäle die von der Divo reinkommen ... gibts da eine lösung ?
das bspweise ich dem asterisk sagen kann, belegt nur n-1 kanäle und hebe einen kanal immer auf um den anrufer mit zu teilen, das alle kanäle belgt sind ? sowas in der art.

Wie gesagt ich bin sehr unerfahren und würde mich um jegliche tips freuen ;)
 
Such mal nach Anleitung für
max_incoming=-1
max_outgoing=-1

in /etc/asterisk/misdn.conf. Oder probiers aus.

Mit Hangup(cause) kann man dem anrufer mitteilen, dass alles besetzt ist. Dies spielt aber kein voice-file vor. Dafür benötigt man einen freien B-Kanal (s.o.)
Oder den Ruf dann auf eine Andere Rufnummer Umleiten wo Grudsätzlich die Ansage kommt; d.h. beim Provider des ISDN anschlusses einstellen Rufweiterleitung bei Besetzt zur deiner Sipgate-Nr welche den Ruf per Sip zustellt...
 
ah, wie soll das gehen. Wenn beide kanäle besetzt sind, dann kommt gar kein anruf mehr zu dir durch, sondern wird vom TelcoProvider schon als besetzt signalisiert.
 
also müsste ich asterisk sagen das er eine b-leitung immer offen lassen soll für so einen fall das alle anderen b-kanäle belegt sind ...
das könnte ich über die 2 optionen realisieren ? ...
wenn ja, dann werde ich mich darüber mal informieren.


Danke schonmal für eure tips. Ist schwer wenn man nicht weis nach was man suchen muss :> bei der komplexität eines solchen systems
 
ah, wie soll das gehen. Wenn beide kanäle besetzt sind, dann kommt gar kein anruf mehr zu dir durch, sondern wird vom TelcoProvider schon als besetzt signalisiert.

Irrtum: siehe Anklopfen, Markeln.
Erst beim Versuch den 3. B-Kanal anzufordern gibs Probleme (siehe Fritz!Box, DECT-Telefon).

und "Rufweiterleitung bei Besetzt" kann man auch bei vielen Providern einstellen...
 
@Burmann

läuft aber über den D-Kanal und wird dann von telcoProvider realisiert.
Und was machst du mit dem B-Kanal dem du wärend des markeln halten musst?
 
richtig bemerkt: "wird dann von telcoProvider realisiert". Auch das halten.
 
Code:
;
; defines the maximum amount of incoming calls per port for
; this group. Calls which exceed the maximum will be marked with
; the channel variable MAX_OVERFLOW. It will contain the amount of
; overflowed calls
;

das heist also, das ich theoretisch in meinem DialPlan mit gotoIf
die varieble ${MAX_OVERFLOW} abfragen kann ob sie 1 kleiner ist, als die max ports. Wenn dies der fall ist abspielen einer voice...

hab ich das so richtig verstanden ?

nochmals danke für eure hilfe .... leider finde ich sehr wenig duku über solche sachen.

Greetz
 
Teste es doch mal genau aus, und schreib mal 'ne Anleitung. Vieleich könnte das dann auch in 'Das-Asterisk-Buch' kommen...
 
in 2 monaten überlasse ich euch meine Diplom-arbeit zu asterisk wenn ihr wollt ...
ich werde es gleich mal austesten. ich wollte nur wissen ob der ansatz stimmt, nicht das ich nun da ne menge arbeit rein stecke und der ansatz ist komplett falsch, denn so viel kenne ich mich noch nicht in der materien aus ;)
 
Ergebnis:
So geht es nicht ... hätte mir auch vorher einfallen können MAX_OVERFLOW gibt immer 0 zurück, da es keinen overflow geben darf ... diese variable gibt mir nicht die anzahl der belegten ports zurück :>
 
hast du
max_incoming=1
max_outgoing=1
gesezt oder auf -1 gelassen?
 
Ich weis nicht, was du Ausprobiert hast, ich hab folgende Koninfiguration
Asterisk 1 <-ISDN-> Asterisk 2

extension.conf Asterisk 1
Code:
[default]
exten => _XX,1,Dial(Local/111${EXTEN:0:1}&Local/222${EXTEN:1})
exten => _XX,n,Hangup(17)
exten => _XXXX,1,Wait(${EXTEN:2:-1})
exten => _XXXX,n,Dial(mISDN/g:te/${EXTEN})
exten => _XXXX,n,Hangup(17)

Also wenn eine 2-Stellige Rufnumer geählt wird, soll nach 1 Sekunde Warten 111+erste Ziffer und nach 2 Sekunden Warten 222+zweite Ziffer über ISDN gewählt werden.

extension.conf Asterisk 2
Code:
[default]
exten => _XXXX,1,NoOp(Anruf von ${CALLERID(number)} an ${EXTEN} MAX_OVERFLOW= ${MAX_OVERFLOW})
exten => _XXXX,n,Wait(${EXTEN:3})
exten => _XXXX,n,NoOp(MAX_OVERFLOW= ${MAX_OVERFLOW})
exten => _XXXX,n,Wait(${EXTEN:3})
exten => _XXXX,n,Set(PRI_CAUSE=17)
exten => _XXXX,n,Hangup(17)
exten => h,1,NoOp(MAX_OVERFLOW= ${MAX_OVERFLOW})

Also erst Anzeigen wer wen Anruft, dann soviele Sekunden warten wie lezte ziffer der Rufnummer (zwei mal) immer mit Ausgabe von MAX_OVERFLOW.

/etc/asterisk/misdn.conf Asterisk 2
Code:
...
[nt] ;intern
ports=1
context=default
max_incoming=1
max_outgoing=1

Wenn ich dann von meinem Sip-telefon (553) an Asterisk 1 die '45' anrufe, habe ich folgende Ausgabe:

Asterisk 1
Code:
    -- Executing [45@default:1] Dial("SIP/553-081c6ad0", "Local/1114&Local/2225") in new stack
    -- Called 1114
    -- Called 2225
    -- Executing [1114@default:1] Wait("Local/1114@default-de86,2", "1") in new stack
    -- Executing [2225@default:1] Wait("Local/2225@default-1b2d,2", "2") in new stack
    -- Executing [1114@default:2] Dial("Local/1114@default-de86,2", "mISDN/g:te/1114") in new stack
P[ 2] channel with stid:0 for one second still in use!
    -- Called g:te/1114
    -- Executing [2225@default:2] Dial("Local/2225@default-1b2d,2", "mISDN/g:te/2225") in new stack
P[ 2] channel with stid:0 for one second still in use!
    -- Called g:te/2225
    -- mISDN/3-u86 is busy
  == Everyone is busy/congested at this time (1:1/0/0)
    -- Executing [1114@default:3] Hangup("Local/1114@default-de86,2", "17") in new stack
  == Spawn extension (default, 1114, 3) exited non-zero on 'Local/1114@default-de86,2'
    -- mISDN/4-u89 is busy
  == Everyone is busy/congested at this time (1:1/0/0)
    -- Executing [2225@default:3] Hangup("Local/2225@default-1b2d,2", "17") in new stack
  == Spawn extension (default, 2225, 3) exited non-zero on 'Local/2225@default-1b2d,2'
  == Everyone is busy/congested at this time (2:0/0/2)
    -- Executing [45@default:2] Hangup("SIP/553-081c6ad0", "17") in new stack
  == Spawn extension (default, 45, 2) exited non-zero on 'SIP/553-081c6ad0'

Asterisk 2
Code:
P[ 1] channel with stid:0 for one second still in use!
P[ 1] channel with stid:0 for one second still in use!
[Aug  8 12:52:00] NOTICE[2995]: chan_misdn.c:3861 add_in_calls: Marking Incoming Call on port[1]
    -- Executing [1114@default:1] NoOp("mISDN/1-u14", "Anruf von 553 an 1114 [B]MAX_OVERFLOW= [/B]") in new stack
    -- Executing [1114@default:2] Wait("mISDN/1-u14", "4") in new stack
    -- Executing [2225@default:1] NoOp("mISDN/2-u15", "Anruf von 553 an 2225 [B]MAX_OVERFLOW= 1[/B]") in new stack
    -- Executing [2225@default:2] Wait("mISDN/2-u15", "5") in new stack
    -- Executing [1114@default:3] NoOp("mISDN/1-u14", "[B]MAX_OVERFLOW= [/B]") in new stack
    -- Executing [1114@default:4] Wait("mISDN/1-u14", "4") in new stack
    -- Executing [2225@default:3] NoOp("mISDN/2-u15", "[B]MAX_OVERFLOW= 1[/B]") in new stack
    -- Executing [2225@default:4] Wait("mISDN/2-u15", "5") in new stack
    -- Executing [1114@default:5] Set("mISDN/1-u14", "PRI_CAUSE=17") in new stack
    -- Executing [1114@default:6] Hangup("mISDN/1-u14", "17") in new stack
  == Spawn extension (default, 1114, 6) exited non-zero on 'mISDN/1-u14'
    -- Executing [h@default:1] NoOp("mISDN/1-u14", "[B]MAX_OVERFLOW= [/B]") in new stack
    -- Executing [2225@default:5] Set("mISDN/2-u15", "PRI_CAUSE=17") in new stack
    -- Executing [2225@default:6] Hangup("mISDN/2-u15", "17") in new stack
  == Spawn extension (default, 2225, 6) exited non-zero on 'mISDN/2-u15'
    -- Executing [h@default:1] NoOp("mISDN/2-u15", "[B]MAX_OVERFLOW= 1[/B]") in new stack

Daran erkennt man, das die Variable MAX_OVERFLOW eine channel-Variable ist, welche nur beim Verbindungsaufbau gesezt wird; d.h. nachdem der Call "1114" beendet ist, bleibt beim Channel "2225" der Wert auf 1.
 
Kostenlos!

Statistik des Forums

Themen
248,856
Beiträge
2,302,965
Mitglieder
378,504
Neuestes Mitglied
Hallo61Hallo