Providerwechsel bei belegt

Im Rahmen der Idee DUNDi hausintern habe ich eine Lösung gebraucht, um im Falle eines belegten Accounts einen anderen benutzen zu können.

Diese Lösung funktioniert wie folgt:

Jeder Anwahlkontext sieht wie der untenstehende für voipstunt aus. In Zeile 1 wird eine Gruppe voipstunt definiert, wenn sie noch nicht vorhanden ist. Ist sie verhanden wird von Asterisk automatisch der Gruppenzähler um 1 hochgezählt. Da ich nur eine Leitung habe, kann dieser Wert max. 1 sein (durch Zeile 1 gesetzt). Sollte der Wert aber größer sein, also die Linie besetzt sein und durch die Zeile 1 weiter hochgezählt worden sein, ist die Leitung belegt. Die Entscheidung erfolgt in Zeile 2. Ist der Account frei wird in Zeile 3 gewählt, ansonsten in den Kontext [belegt] gesprungen und wenn ein andere Accounts hinterlegt sind, die anderen Accounts probiert. Sind alle Accounts belegt, wird busy signalisiert und aufgelegt. Ist keine Ersatzlinie definiert, erfolgt ebenfalls busy.

Gehen über die Accounts auch Gespräche ein, muß der Inhalt der Zeile 1 auch in den entsprechenden incomming-context, sonst wird belegt durch eingehenden Anruf nicht erkannt.

[voipstunt]
exten => _X.,1,Set(GROUP()=voipstunt)
exten => _X.,2,GotoIf($["${GROUP_COUNT(voipstunt)}">"1"]?5:3)
exten => _X.,3,Dial(SIP/${EXTEN}@voipstunt)
exten => _X.,4,Hangup
exten => _X.,5,Goto(belegt,${EXTEN},1)

[belegt]
exten => _0049.,1,GotoIf($["${GROUP_COUNT(sipdiscount)}">"1"]?3:2)
exten => _0049.,2,Goto(sipdiscount,${EXTEN},1)
exten => _0049.,3,GotoIf($["${GROUP_COUNT(voipstunt)}">"1"]?5:4)
exten => _0049.,4,Goto(voipstunt,${EXTEN},1)
exten => _0049.,5,GotoIf($["${GROUP_COUNT(voipcheap)}">"1"]?7:6)
exten => _0049.,6,Goto(voipcheap,${EXTEN},1)
exten => _0049.,7,Playtones(busy)
exten => _0049.,n,Hangup
exten => _0041.,1,GotoIf($["${GROUP_COUNT(sipdiscount)}">"1"]?3:2)
exten => _0041.,2,Goto(sipdiscount,${EXTEN},1)
exten => _0041.,3,GotoIf($["${GROUP_COUNT(voipbuster)}">"1"]?5:4)
exten => _0041.,4,Goto(voipbuster,${EXTEN},1)
exten => _0041.,5,GotoIf($["${GROUP_COUNT(voipcheap)}">"1"]?7:6)
exten => _0041.,6,Goto(voipcheap,${EXTEN},1)
exten => _0041.,7,Playtones(busy)
exten => _0041.,n,Hangup
exten => _0033.,1,GotoIf($["${GROUP_COUNT(voipbuster)}">"1"]?3:2)
exten => _0033.,2,Goto(voipbuster,${EXTEN},1)
exten => _0033.,3,GotoIf($["${GROUP_COUNT(voipstunt)}">"1"]?5:4)
exten => _0033.,4,Goto(voipstunt,${EXTEN},1)
exten => _0033.,5,GotoIf($["${GROUP_COUNT(voipcheap)}">"1"]?7:6)
exten => _0033.,6,Goto(voipcheap,${EXTEN},1)
exten => _0033.,7,Playtones(busy)
exten => _0033.,n,Hangup
exten => _0034.,1,GotoIf($["${GROUP_COUNT(sipdiscount)}">"1"]?3:2)
exten => _0034.,2,Goto(sipdiscount,${EXTEN},1)
exten => _0034.,3,GotoIf($["${GROUP_COUNT(voipstunt)}">"1"]?5:4)
exten => _0034.,4,Goto(voipstunt,${EXTEN},1)
exten => _0034.,5,GotoIf($["${GROUP_COUNT(voipcheap)}">"1"]?7:6)
exten => _0034.,6,Goto(voipcheap,${EXTEN},1)
exten => _0034.,7,GotoIf($["${GROUP_COUNT(voipbuster)}">"1"]?9:8)
exten => _0034.,8,Goto(voipbuster,${EXTEN},1)
exten => _0034.,9,Playtones(busy)
exten => _0034.,n,Hangup
exten => _00XX.,1,Playtones(busy)
exten => _00XX.,n,Hangup

Stand: 16.10.06