"Potentialfreier Kontakt" klingeln bis Rufannahme

derhelge

Premier Customer
Mitglied seit
5. Dezember 2020
Beiträge
23
Hallo zusammen,

wir haben etwas legacy Gerät (Faxe, Türfreisprecheinrichtungen, etc) auf diverse Grandstream-Geräte (HT-801, HT-818) migriert und soweit funktioniert das auch wunderbar. Wir haben allerdings das Problem, dass wir einige Geräte haben, die nur per "Potentialfreier Kontakt" einen Ruf auslösen sollen. Das funktioniert zwar auch jetzt schon, indem man einen analogen Port mit Offhook autodial im Grandstream konfiguriert, aber leider hält der Ruf nur so lange wie auch der Kontakt gehalten wird. Daher klingelt es nur eine Sekunde und der Ruf ist weg.

Lässt sich die 3CX irgendwie so konfigurieren, dass ein eingehender Ruf von einer bestimmten Nummer so lange klingelt, bis der Ruf angenommen wird, unabhängig davon ob der kommende Ruf vorher schon selbst beendet worden ist? Hört sich nach einem sehr schrägen Anwendungsfall an aber vielleicht hat ja jemand eine Idee?

Viele Grüße
Helge
 
Lasse die verschiedenen Endgeräte des ATA (hoffentlich je eine NSt.) eine CFA anrufen und - abhängig von der anrufenden NSt. - ruft die CFA wiederum eine andere NSt. an und spielt dort selektiv Audio ab sofern gewünscht.

Fragen:
  1. Sind die legacy Endgeräte an den ATA Leitungen je einer separaten NSt. in der 3CX zugeordnet?
  2. Sollen diese Geräte jeweils dieselbe Nummer anrufen und dort etwas abspielen oder immer mal andere?
 
Lasse die verschiedenen Endgeräte des ATA (hoffentlich je eine NSt.) eine CFA anrufen und - abhängig von der anrufenden NSt. - ruft die CFA wiederum eine andere NSt. an und spielt dort selektiv Audio ab sofern gewünscht.
Ah! Da bin ich nicht draufgekommen. Also statt den Ruf selbst zu halten, einfach einen neuen Ruf zu starten.
Fragen:
  1. Sind die legacy Endgeräte an den ATA Leitungen je einer separaten NSt. in der 3CX zugeordnet?
Ja genau. Alle mit eigener NSt in 3CX.
  1. Sollen diese Geräte jeweils dieselbe Nummer anrufen und dort etwas abspielen oder immer mal andere?
Meistens die gleiche Rufnummer. Aber es gibt schon 3 verschiedene Nummern.

Meine Idee war jetzt:
  • NSt 81 ist "Taster Lager" soll bei Nummer 33 klingeln
  • Nst 82 ist "Taster Keller" soll bei Nummer 44 klingeln
  • Im CFD
    • Die eingehende NSt als Variable "Taster" speichern
    • Variable "Ziel" speichern abhängig von "Taster"
    • Make Call von "Taster" zu "Ziel"

Wenns ganz anders geht, gerne Info :-)
 
Ah! Da bin ich nicht draufgekommen. Also statt den Ruf selbst zu halten, einfach einen neuen Ruf zu starten.
ja
Ja genau. Alle mit eigener NSt in 3CX.
Das vereinfacht die Sache.
Meistens die gleiche Rufnummer. Aber es gibt schon 3 verschiedene Nummern.
Das verlängert das Szenario etwas.

Wenns ganz anders geht, gerne Info
Es geht etwas anders wg. MakeCall.

Noch eine letzte Frage: soll die CFA recht statisch aufgebaut oder soll das auch per Variablen in der 3CX änderbar sein?

Im ersteren Fall muss man bei jeder kleinen Änderung immer an das Programm ran. Im letzteren Fall ändern man bei Bedarf nur Variablen der 3CX.
 
Noch eine letzte Frage: soll die CFA recht statisch aufgebaut oder soll das auch per Variablen in der 3CX änderbar sein?

Eine dynamische Variante wäre natürlich eleganter. Statisch wär aber auch okay im ersten Ansatz.
 
Ich hab das mal eben zusammengeklickt - bevor das mit dem Anliegen der unterschiedlich anzurufenden Nummern kam ;)

Anbei das Beispiel ReDial. Die CFA hat in diesem Beispiel die Nummer 855 und wird z.B. von den NSt. 211 (ATA Taster 1) und 213 (ATA Taster 2) ganz kurz angerufen. Angerufen wird immer die NSt. 215. Die CFA benutzt die Globale Variable REDIALER in der 3CX. Wenn die nicht da ist (beim ersten Anruf z.B.), dann wird die angelegt.

Ablauf, ein Beispiel wenn die NSt. 211 (ATA Taster 1) kurz die CFA (Nummer 855) anruft:

MAIN FLOW
  1. die CFA ruft den Inhalt der globalen 3CX Variable REDIALER ab und setzt die Variable direkt danach zurück (leert die)
  2. die CFA testet, ob die globale Variable REDIALER bereits einen Inhalt hatte
    1. wenn ja, dann ist das der Anruf den der Disconnect Handler der CFA auf die CFA wieder selber macht und es wird entsprechend der urspr. anrufenden Nummer (in diesem Fall die 211) eine Audio Datei abgespielt
    2. wenn nein, dann ist das der erste Aufruf, der vom Taster aus, die anrufende Nummer wird in der globalen Variablen REDIALER gespeichert und die CFA beendet sich (um den Disconnect Handler Flow zu nutzen)

DISCONNECT HANDLER FLOW, der wird bei jeder Beendigung der CFA aufgerufen, immer direkt nach Ende des Gespräches
  1. die CFA ruft den Inhalt der globalen 3CX Variable REDIALER ab
  2. die CFA testet, ob die globale Variable REDIALER bereits einen Inhalt hatte
    1. wenn ja, dann ist da die Nummer drin, welche die CFA angerufen hat, die CFA ruft sich von sich aus das feste Ziel - die NSt. 215 - an und wird mit ihrem erneuten (eigenen) Aufruf der 215 irgend etwas vorspielen
    2. wenn nein, dann ist das der zweite Aufruf der CFA, der wird ignoriert (sonst wäre das eine Endlosschleife) und die CFA beendet sich ordentlich an dieser Stelle, da geht's wirklich raus

1678477722965.png1678477731109.png
Stichwort CFD Call Flow Designer App ATA hold HT802 HT812 HT814 HT818 Offhook Auto-dial Callflow Schnipsel
 

Anhänge

Zuletzt bearbeitet:
  • Like
Reaktionen: derhelge
Eine dynamische Variante wäre natürlich eleganter. Statisch wär aber auch okay im ersten Ansatz.
Das darst du dir gern selber bauen :)

Ebenso, dass die CFA - je nach anrufender Nummer - immer eine andere Nummer anrufen soll, um der etwas vorzuspielen. Das passiert im Disconnect Handler Flow. Dort müsste man dann noch unterscheiden, welche Nummer in der Variablen REDIALER steht, um daraufhin das MakeCall an diese Nummer von der 855 (Origin) aus zu starten.
 
  • Like
Reaktionen: derhelge
Hammer. Danke dir schon jetzt. Ich schau mir das morgen einmal im Detail an.
 
Das wurde immer mal im Forum angefragt. Hier das Gerüst, wie man so etwas grundlegend macht.

Den kurzen Anruf (oder irgend einen halt) annehmen und gleich wieder beenden. Einen neuen Anruf per Make Call von sich selbst ausgehend irgendwohin starten und dem so Angerufenen irgend etwas vorspielen.

Die CFA kann ja nicht in ein laufendes Gespräch eingreifen und z.B. Audio einspielen. Das passiert dann mit dem zweiten Anruf.

Eine kleine Schwachstelle hat das Konzept: wenn zu viele Telefonate gleichzeitig bei der CFA ankommen (von aussen und von sich selbst), dann kommt die mit dem Inhalt der einen globalen Variablen durcheinander. Die Variable ist immer nur 'ganz kurz' mit Inhalt befüllt - immer zwischen dem zwangsweisen Ende des einen und dem Selbstaufruf. Das ist i.d.R. nur eine kurze Zeitspanne. Wenn die dennoch zu lang ist, dann geht u.U. ein 'Anruf' verloren. Das lässt sich nur atomar (mittels einer Datenbank und GET / SET) oder einem FIFO Stack in Form einer (wieder atomaren setz- und abfragbaren) Variable lösen.

Die Zeitspanne ist die, zwischen dem SetREDIALER , dem Aufruf des Disconnect Handler Flow, dem Anruf an sich selbst, der Abfrage ob REDIALER leer ist und dem leeren der Variable REDIALER. Man kann das noch minimal beschleunigen, indem zusätzlich eine globale Variable im Projekt benutzt wird, welche nach EmptyREDIALER ebenfalls geleert, vor SetREDIALER gesetzt und welche im Disconnect Handler Flow zur Abfrage benutzt wird. Damit entfällt ein klein wenig Abfrageaufwand (und damit Zeit) im Disconnect Handler Flow (für die Abfrage der globalen volatilen Variable). Die globale 3CX Variable (oder ein anderes Konstrukt zur Datenspeicherung außerhalb der CFA) wird grundsätzlich benötigt, da die CFA sich selber aufruft und wissen muss, ob das ein eigener Anruf oder der eines ATA Tasters ist. Die globale CFA Variable verfällt ja mit dem Ende des ersten Aufrufes.
 
Zuletzt bearbeitet:
  • Like
Reaktionen: derhelge
Hi @fxbastler

tausend Dank für die Erstellung und Erklärung. Ich habe das auch so nachvollziehen können.

Kleines Manko ist, dass die CFA mit der eigenen Anrufer-ID im Disconnect Flow anruft: Also Destination "215" und Origin "855". Schöner wäre es, wenn hier als Origin die Nebenstelle der Taster stehen würde.
Ich habe versucht das ähnlich wie im main-Flow umzusetzen: Wenn im REDIALER 211 steht, dann soll im "Make Call" die Origin "211" stehen. Das funktioniert aber eben nicht, weil der Ruf dann die CFA verlässt. Richtig?

Was mir ggf. einfällt ist die CallerID dynamisch im main flow innerhalb der If-Blöcke zu setzen, wie du es hier gezeigt hast. Oder ist das eine blöde Idee?
 
Kleines Manko ist, dass die CFA mit der eigenen Anrufer-ID im Disconnect Flow anruft: Also Destination "215" und Origin "855". Schöner wäre es, wenn hier als Origin die Nebenstelle der Taster stehen würde.
Ich habe versucht das ähnlich wie im main-Flow umzusetzen: Wenn im REDIALER 211 steht, dann soll im "Make Call" die Origin "211" stehen. Das funktioniert aber eben nicht, weil der Ruf dann die CFA verlässt. Richtig?
Das geht nicht, das würde nicht funktionieren. Der ATA mit dem Taster dran hebt ja nicht mehr ab, wenn der Origin sein sollte. Da müsste man schon etwas tricksen, mit Dummy Nebenstellenweiterleitung der ATA NSt. parallel auf eine andere CFA die einfach nur abnimmt o.ä. (ja, das geht). Zu guter letzt: man kann nicht alles haben. Daher die Ansage.
Was mir ggf. einfällt ist die CallerID dynamisch im main flow innerhalb der If-Blöcke zu setzen, wie du es hier gezeigt hast. Oder ist das eine blöde Idee?
Den Namen einer CFA kann man nicht ändern. Schon gar nicht im Display. Da steht immer Routing Point.
 
  • Like
Reaktionen: derhelge

Statistik des Forums

Themen
44.414
Beiträge
232.720
Mitglieder
78.330
Neuestes Mitglied
uvitas