[Frage] Wie kann ich feststellen, ob mindestens ein Gruppenteilnehmer telefoniert?

Antimon

Neuer User
Mitglied seit
23 Aug 2005
Beiträge
33
Punkte für Reaktionen
0
Punkte
0
Hallo zusammen,

ich habe mehrere Telefone, die bei eingehenden Anrufen klingeln (per Dial(SIP/123&SIP/124&...). Diese haben auch die gleiche Callgroup eingetragen.

Nun möchte ich herausfinden, ob mindestens eines dieser Telefone im Gespräch ist. Kann ich das irgendwie von der Gruppe abfragen oder muss ich jedes Telefon einzeln prüfen? Bzw. gibt es eine elegantere Lösung?

Hintergrund ist folgender: Unser Büro ist nicht immer besetzt - deshalb soll nicht bei jedem Anruf eine Warteschleife rangehen, sondern im Normalfall der Anrufbeantworter. Wenn allerdings mindestens eine Person telefoniert, so ist jemand logischerweise da, deshalb soll nach einer gewissen Wartezeit (falls nicht ein Kollege an ein anderes Telefon gegangen ist), die Warteschleife rangehen. Damit wird niemand unnötig in die Warteschleife gelegt und somit evtl. verärgert.

Bei meinen Recherchen ist mir noch keine vernünftige Lösung gekommen, aber vielleicht habe ich diese nur übersehen?

Für Tips und Lösungsvorschläge bin ich sehr dankbar!
 
Immer gerne genommen Set(GROUP()) und GROUP_COUNT().
 
Etwas aufwendiger zu implementieren, dafür aber sehr ausbaufähig und universeller zu verwenden.
Statusspeicherung in einer mySQL Datenbank.
Gruss Thomas
 
Da führen wie so oft viele Wege zum ROM, hints mit DEVICE_STATE, chanisavail (nutzt das noch jemand?), AMI Daemon und das ganze Zeug. Die Methode mit Groups hat imho die Vorteile, dass sie schnell umgesetzt ist, und man sich keine Gedanken machen braucht, wenn mal eine Nebenstelle dazu kommt. Nachteil, da hast Du natürlich Recht, sonderlich viel mehr kann man mit GROUP_COUNT nicht anfangen.
 
Wenn man etwas falsch implementiert kann viel schiefgehen.
So pauschal kann man das nicht sagen und das füllt nur sinnlos die Zeilen.
 
Danke schon mal für die verschiedenen Vorschläge!

Dass es verschiedene Wege nach Rom gibt, macht die Auswahl leider so schwer - und da ich noch nicht soooo viel Erfahrung mit Asterisk habe, macht es mir die Entscheidung nicht leichter...

Aber der Hinweis mit GROUP() ist vermutlich schon das Richtige für mich, die Funktion habe ich zwar schon oft gesehen, aber vermutlich nicht verstanden - könnt Ihr mir dabei helfen?

Code:
...
exten => 123,n,Set(GROUP()=team1)
Dieser Aufruf setzt den aktuellen Channel auf "team1" - und ich kann jederzeit mit ${GROUP_COUNT(team1)} auf die Anzahl der derzeit geführten Gespräche zurückgreifen? Und sobald der Channel geschlossen wird, wird die Anzahl automatisch dekrementiert? Oder muss das irgendwo über einen anderen Funktionsaufruf manuell gemacht werden?

Hints haben die Telefone zwar schon gesetzt (wegen der BLF-Funktion), allerdings müsste ich ja alle Telefone auswerten, wenn eins hinzukommt müssen wieder mehrere Stellen im Dialplan geändert werden, wie rentier-s schon sagt...

MySQL fände ich sehr toll, zwecks Weiterverarbeitung, aber die eingebauten MySQL-Funktionen im Dialplan gefallen mir ganz-und-gar-nicht... erstens ist der Dialplan von einer Skriptsprache ziemlich weit entfernt, dass die "Programmierung" ziemlich umständlich ist, wenn man was anderes gewohnt ist. Zweitens habe ich ein wenig Bedenken, dass wenn man z.B. wegen einer Weiterleitung oder einem Fehler nicht mitbekommt, dass der Channel schon längst beendet ist. Dann sind evtl. irgendwann mal 10 gleichzeitige Gespräche aktiv, obwohl man nur 2 Telefone hat... ;)

AMI würde mir da schon um einiges besser gefallen - evtl. da sogar in Verbindung mit MySQL, ich denke auf die Events zu reagieren dürfte zuverlässiger sein. Aber das ist meine persönliche Einschätzung und viel Erfahrung habe ich mit dem Thema auch noch nicht... deswegen korrigiert mich bitte wenn ich falsch liege. Gibts da eventuell schon was fertiges? Z.B. das den Status der Extensions automatisch in ne DB schreibt? Mehr Sinn würde so etwas vermutlich mit Realtime oder so machen, aber so weit bin ich noch nicht. Alle Extensions über ne MySQL-DB zu konfigurieren wäre natürlich der Traum, vermutlich machen das viele Distris auch, allerdings habe ich nur einen "nackten" Asterisk...
 
und ich kann jederzeit mit ${GROUP_COUNT(team1)} auf die Anzahl der derzeit geführten Gespräche zurückgreifen? Und sobald der Channel geschlossen wird, wird die Anzahl automatisch dekrementiert?

Ja, das ist grad das schöne dran.

Im Zusammenhang mit MySQL geht imho nichts ohne AGI Skripte. Ab 1.8 (?) sind die MySQL Funktionen sowieso raus, das wird durch ODBC ersetzt.
 
Für mySQL braucht man keine AGI Scripte und ODBC und mySQL sind auch verschiedene Sachen, daher kann ODBC auch nicht mySQL ersetzen.
mySQL ist auch wie schon richtig erkannt wegen Realtime interessant.
Es ist eher eine Frage der mittelfristigen Ausrichtung wie man das umsetzt.
 
OK, das war vielleicht beides schlecht formuliert von mir.

Ich weiß jetzt nicht auswendig ab welcher Version, aber die nativen MySQL Funktionen in Asterisk werden durch eine ODBC Anbindung ersetzt.

Die konventionelle (=nicht AEL) Syntax ist nicht gerade dafür geschaffen, sehr viel mit Datenbanken zu arbeiten. Mit AGI Skripten kann man da viel mehr anstellen bzw. es hat mehr mit "programmieren" zu tun.
Ein Realtime Dialplan ist zwar Realtime, aber von Struktur und Funktionsumfang nicht viel besser, genau wie includes von PHP oder sonstigen Skripten.
 
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.