Gruppenruf mit Variablen

hadze

Neuer User
Mitglied seit
2 Apr 2012
Beiträge
5
Punkte für Reaktionen
0
Punkte
0
Servus zusammen, ich habe ein paar Probleme, bei denen ich auf der Stelle trete:

1. Ist es möglich, die callgroup einer Extension auszulesen?
Ich habe z.B. in der sip.conf die Extension 25 mit callgroup=7 erstellt und würde das gerne in den Dialplan einfliessen lassen.
Hintergrund ist, dass ich bei einem Anruf auf die 25 zuerst nur die 25 klingeln lassen möchte und danach (z.B. 10 Sekunden) die restlichen Telefone in dieser callgroup über ein hint informieren möchte.
Das geht vermutlich auch über hint(SIP/1&SIP/2.....) ist aber ziemlich umständlich in der Wartung, wenn mal ein Teilnehmer die Gruppe wechselt, da wäre eine zentralere Methode doch eleganter.

2. Kann ich irgendwie einen Dial() und ein Queue() gleichzeitig triggern?
Vielleicht ist dies auch der falsche Ansatz, aber mein Vorhaben ist, dass wenn eine Extension angerufen wird, nach 10 Sekunden eine weitere Gruppe hinzugefügt werden soll, z.B. alle Telefone der Zentrale, die angerufene Extension aber weiterhin klingeln soll.
Ich dachte hier etwa an
exten => s,n,Dial(SIP/${EXTEN},15)
exten => s,n,Queue(zentrale,t,,,15)
gleichzeitig.
Gibt es hier vielleicht eine bessere Methode?

Es handelt sich um eine Asterisk 1.8
 
R

rentier-s

Guest
Zu 1. gibt es das hier.

2. hat Betateilchen in seinem Asterisk Kurs hier im Forum erklärt. Kurz gesagt funktioniert das mit einem Local-Channel.

Edit: Hab grad die Stelle auf die Schnelle nicht gefunden, deshalb hier der grundsätzliche Aufbau:
Code:
[ankommend]
exten => _X.,1,Dial(SIP/${EXTEN}[COLOR="#FF0000"]&Local/[email protected][/COLOR],15)

[weiter]
exten => 123,1,Wait(10)
exten => 123,n,Queue(zentrale)
 

hadze

Neuer User
Mitglied seit
2 Apr 2012
Beiträge
5
Punkte für Reaktionen
0
Punkte
0
Zu 1.
Sowas in der Art hatte ich gesucht, aber ich glaube ich befinde mich da grundsätzlich auf einem Holzweg.
Vielleicht sollte ich das Problem mal grundsätzlich erläutern:
Ich habe etwa 100 Telefone in verschiedenen Räumen. Wenn eine Durchwahl an einem Telefon gewählt wird, sollen alle anderen Telefone in diesem Raum benachrichtigt werden (nicht klingeln), also z.B. per "hint".
Da die Telefone häufig den Raum wechseln (inkl. extension) ist eine statische Zuordnung im Wählplan sehr ungeschickt. Daher hatte ich die Idee, dies mit der "callgroup" aus der sip.conf zu verbinden, die ja recht einfach zu verwalten ist und dem Zimmer entspricht.
Wie kann ich sowas am sinnvollsten umsetzen?

Falls es jemanden interessiert, habe ich mit rentier's Tip das hier gestrickt:
Code:
; Herausfinden der Raumnummer
exten => _XX,1,Set(group=${SIPPEER(${EXTEN}:callgroup)})
exten => _XX,n,NoOp(Set Group = ${group})
; Andere Telefone im Raum herausfinden
exten => _XX,n,Set(i=10)
exten => _XX,n,While($[${i}<90])
exten => _XX,n,Set(extengroup=${SIPPEER(${i}:callgroup)})
exten => _XX,n,Set(hints=${hints}${IF($[${extengroup}=${group}]?SIP/${i}&)})
exten => _XX,n,Set(i=$[${i}+1])
exten => _XX,n,EndWhile()
exten => _XX,n,Set(GLOBAL(hintlist)=${hints})
In der hintlist steht dann z.B. "SIP/54&SIP/83&SIP/13&"
Allerdings kann ich damit ja kein hint füttern.

Zu 2.
Vielen Dank für den Hinweis, manchmal sieht man vor Bäumen den Wald nicht mehr :)
 
R

rentier-s

Guest
Also so ganz habe ich die Logik dahinter nicht verstanden, aber ich denke dass Du etwas wie custom hints suchst. Im Normalfall hätte ich gesagt, definiere einen pro Callgroup, aber wenn die Telefone häufig wechseln wirst Du wohl eher einen pro Nebenstelle brauchen. In den Telefonen müsstest Du jeweils eine Taste mit zB. 999eigeneNummer einstellen, die könntest Du evtl. auch gleich mit einem Pickup versehen.

So in etwa stelle ich mir das vor (ungetestet):
Code:
exten => _XX,1,Set(group=${SIPPEER(${EXTEN}:callgroup)})
exten => _XX,n,Set(i=10)
exten => _XX,n,While($[${i}<90])
exten => _XX,n,Set(extengroup=${SIPPEER(${i}:callgroup)})
exten => _XX,n,ExecIf($["${extengroup}"="${group}"]?DEVICE_STATE(Custom:999${i})=INUSE)
exten => _XX,n,Set(i=$[${i}+1])
exten => _XX,n,EndWhile()
exten => _XX,n,Dial(SIP/${EXTEN},30,U(reset))
exten => _XX,n,...
Die Subroutine reset ist dafür zuständig, die hints wieder zurückzusetzen sobald der Anruf angenommen wurde. Da müsste man das gleiche wieder machen, nur eben mit Status UNKNOWN. Und in der h-extension noch einmal, damit auch nicht beantwortete Anrufe behandelt werden.
Allerdings kann es dabei zu Überschneidungen kommen, wenn kurz versetzt zwei Anrufe für eine Callgroup ankommen.

Irgendwie kommt mir das alles recht umständlich vor, das muss doch einfacher gehen. :gruebel:
 
F

foschi

Guest
ZIch habe etwa 100 Telefone in verschiedenen Räumen. Wenn eine Durchwahl an einem Telefon gewählt wird, sollen alle anderen Telefone in diesem Raum benachrichtigt werden (nicht klingeln), also z.B. per "hint". Da die Telefone häufig den Raum wechseln (inkl. extension) ist eine statische Zuordnung im Wählplan sehr ungeschickt.
Versteh ich das richtig: Du hast Telefongruppen (=Telefone in Räumen) und möchtest gruppenbezogen (=raumbezogen) eine optische aber keine akustische Benachrichtigung? Warum wechseln die Telefone den Raum? Nehmen die Benutzer diese mit?
 

hadze

Neuer User
Mitglied seit
2 Apr 2012
Beiträge
5
Punkte für Reaktionen
0
Punkte
0
Ich war leider anderweitig beschäftigt, daher meine späte Antwort:

Nehmen die Benutzer diese mit?
Genau so ist es. Es kann sein, dass Mitarbeiter für einzelne Projekte den Raum wechseln. Da wäre es natürlich ungeschickt, wenn man bei einem Raumwechsel über Anrufe im letzten Raum benachrichtigt wird :)
Ziel ist ein Gruppenpickup innerhalb eines Raumes mit vorheriger optischer Benachrichtigung.

Ich wundere mich ein wenig, dass dieser Fall sooo aussergewöhnlich ist, dass es da keine einfache Lösung gibt.
Ich habe rentiers Vorschlag etwas angepasst, bin da jedoch noch nicht zu einem akzeptablen Ergebniss gekommen :(

aktueller Stand:
Code:
;subscription for snom phones
exten => _97XX,hint,Custom:97${EXTEN}=UNKNOWN

[rooms]
exten => _XX,1,Set(group=${SIPPEER(${EXTEN}:callgroup)})
same => n,Set(i=20)
same => n,While($[${i}<90])
same => n,Set(extengroup=${SIPPEER(${i}:callgroup)})
same => n,ExecIf($["${extengroup}"="${group}"]?Set(DEVICE_STATE(Custom:97${i})=RINGING))
same => n,Set(i=$[${i}+1])
same => n,EndWhile()
same => n,Dial(SIP/${EXTEN},15,U(reset))
Vielen Dank für euere Hilfe
 
F

foschi

Guest
Warum nutzt Du keine benutzerbezogene Anmeldung am Endgerät? Wenn ein Mitarbeiter den Raum verlässt meldet er sich an irgendeinem anderen Endgerät an, und hat "seine" Telefonie-Umgebung dort (inkl. Besetztlampenfeld).
 

hadze

Neuer User
Mitglied seit
2 Apr 2012
Beiträge
5
Punkte für Reaktionen
0
Punkte
0
Interessante Idee, aber ich glaube das funktioniert in diesem Fall auch nicht:
Nehmen wir an, in Raum A sitzen Mitarbeiter 1 und 2 und in Raum B Mitarbeiter 3 und 4.
Wechselt nun Mitarbeiter 1 seinen Raum in B und meldet sich dort am Telefon an, so müsste ich irgendwie den Telefonen von 3 und 4 beibringen, dass sie jetzt auch Mitarbeiter 2 überwachen sollen.

Meines wissens funktioniert das entweder durch Umkonfiguration des BLF am Telefon oder eben dynamisch über *, wo wir wieder beim obigen Thema wären.
 
F

foschi

Guest
Na ja, diese "Überwachung" (d.h. Änderung der BLFs an den Telefonen von 3 und 4) sind im Webinterface einer solchen Lösung 1-2 Clicks.
 

Zurzeit aktive Besucher

3CX

Statistik des Forums

Themen
235,885
Beiträge
2,067,230
Mitglieder
356,872
Neuestes Mitglied
Machsgut