Zeitgesteuerte Ansage einspielen

phone-man

Neuer User
Mitglied seit
27 Feb 2005
Beiträge
89
Punkte für Reaktionen
0
Punkte
6
Hallo

Wie kann ich es erreichen, daß zu einem bestimmten Zeitpunkt eine Ansage in ein laufendes Gespräch (soweit bestimmte SIP Teilnehmer gerade telefonieren) eingespielt wird und wenige Minuten später das Gespräch beendet wird?

Ich fürchte, im Dial Plan kann man das nicht lösen, da ja während des Gesprächs keine weiteren Prioritäten abgearbeitet werden.

Könnte man das mit einem externen Script lösen, welches als Cronjob gestartet wird oder gibt es doch eine asterisk-eigene Möglichkeit?
 
Das Hauptproblem, für das ich noch keine Lösung gefunden habe, ist das Einspielen einer Ansage in ein laufendes Gespräch.

Hat da jemand einen Tip für mich?
 
Du kannst die Maximaldauer des Gespräches im Dialbefehl bestimmen und vorher eine Warnung abspielen, das ist glaube ich der Parameter L im Dialbefehl. Eine andere Möglichkeit ist mir nicht bekannt.
 
Schau Dir mal den Tipp von madiehl genauer an, mit dem Parameter "L" kannst Du alle Deine Probleme lösen - es gab auch vor kurzem einen ausführlichen Thread dazu hier, kurz suchen, dürfte so um die 2 Monate her sein...

Grüsse, Stefan
 
So wie ich die Syntax des Befehls verstanden habe, lässt damit das Gespräch nur nach einer bestimmten Dauer beenden und vorher ein Warnhinweis abspielen.

Ich möchte das Gespräch allerdings zu einem bestimmten Zeitpunkt mit vorigem Hinweis beenden.
 
Schau mal hier.

Das ist der damalige Thread (aus 2006) der um das selbe Thema ging..

Ggf. hilft das, ich fand die L Funktion interessant und ich denke sie kann mehr als nur signalisieren vor dem auflegen...

Grüsse, Stefan
 
Hallo

Diesen Thread hatte ich vir kurzem auch schon gelesen, nur jetzt nicht mehr wiedergefunden. Die L Funktion scheint recht umfangreich aber diese scheint nicht das Gespräch zu einem bestimmten Zeitpunkt beenden zu können, sondern nur nach einer bestimmten Dauer:

Limit the call to 'x' ms...
 
Okay, da stimme ich Dir zu, eine Uhrzeit zum auflegen ist so nicht möglich,

aber vielleicht zäumen wir das Pferd von vorne auf :

Was hast Du Denn vor ?
 
Ich möchte erreichen, daß von einem bestimmten Apparat ab einer gewissen Uhrzeit wegen nächtlicher Ruhestörung keine Gespräche mehr geführt werden können, mit Ausnahme von Notrufnummern natürlich.

Bei neu gestarteten Gesprächen ist das ja auch kein Problem aber eben bei bereits laufenden Gesprächen.
 
Pff...mangels besserer Ideen wäre ein Einfall das ganze mit einem "hangup" zu lösen, jedoch wirft das mehr Probleme auf als das es hilft - wie findet man den richtigen Kanal, den richtigen Apparat und wie warnt man vorher...

Ich denke daß das so nicht in Asterisk implementiert ist..

Was hast´n da für Quasselstrippen ? ;)

Grüsse, Stefan
 
Keine Lösung, aber ein Ansatz: Berechne doch vor dem Dial die Anzahl Milisekunden bis zu deiner gewünschten Uhrzeit. Damit kannst du dann L ohne weiteres einsetzen.

Gruss,
Sachmet.
 
Eine sehr gute Idee, so kannst Du das ganze wirklich lösen...!
 
Ich hatte heute ein paar Minuten Zeit um mit dem Asterisk zu spielen :)
Das ist dabei entstanden (Asterisk 1.4):
Code:
exten = s,1,NoOp(Time calculation test)
exten = s,n,Set(CURRENT_TIME=${EPOCH})
exten = s,n,Set(HANGUP_TIME=${STRPTIME(${STRFTIME(${EPOCH},,%d.%m.%Y [B][COLOR=DarkRed]21:00:00[/COLOR][/B])},,%d.%m.%Y %H:%M:%S)})
exten = s,n,Set(TIMEDIFF=${MATH(${MATH(${HANGUP_TIME} - ${CURRENT_TIME},i)}*1000,i)})
exten = s,n,NoOp(current time: ${CURRENT_TIME} ${STRFTIME(${CURRENT_TIME},,%d.%m.%Y %H:%M:%S)})
exten = s,n,NoOp(disconnect at: ${HANGUP_TIME} ${STRFTIME(${HANGUP_TIME},,%d.%m.%Y %H:%M:%S)})
exten = s,n,NoOp(Time difference: ${TIMEDIFF} milliseconds)
exten = s,n,Dial([FONT=monospace]type/identifier[/FONT],timeout,[B]L(${TIMEDIFF}[/B]:300000:60000[B]))[/B]
Damit sollte der Anrufer um 5 vor 10 die erste Warnung bekommen, dann jede Minute, bis dann um 10 Uhr die Verbindung getrennt wird. Hier muss man noch sicherstellen, dass nicht nach der entsprechenden Zeit in den Context gesprungen wird, da sonst TIMEDIFF negativ wird. Ebenfalls müsste man noch testen, wie das Script zur Winterzeit reagiert.
Getestet habe ich das nicht, bin gespannt, ob es so funktioniert.

Vielleicht kann mich jemand erleuchten, wie ich es hinbekomme, bei der Uhrzeit die wirklich gewünschte einzutragen? Ich muss 21 Uhr eingeben, damit er mit 22 Uhr rechnet. Mit den Zeitzonen habe ich herumgespielt, ohne entsprechendes Ergebis.

Viel Spass mit dem Codeschnipsel.

Sachmet.
 
Vielen Dank für die Tips.

Ob ihr es glaubt oder nicht, die Idee, die Restzeit bis zur gewünschten Endzeit zu berechnen und damit die L Funktion zu benutzen, kam mir vor einigen Tagen auch ;-)

Ich werde es jetzt die Tage mal ausprobieren und dann nochmal kurz das Ergebnis berichten.
 
Ich denke mit der Idee von Sachmet sollte das reibungslos laufen - nette Umsetzung zum "schnellen Essen" kostenlos obenauf, ich denke da ist ein dickes Danke fällig ;)

So, schöne Restostern und viel Erfolg mit der Lösung von Sachmet.

Vielleicht schreibst Du ja mal wie´s lief, oder läuft...

Stefan
 
Hallo

Ich bin jetzt erst dazu gekommen, die Angelegenheit in Ruhe zu testen. Ich setze Asterisk 1.2 ein und hier gibt es die Funktion STRPTIME nicht, von daher musste ich die Berechnung etwas umständlicher ausführen. Diese Zeilen sind dabei herausgekommen:

Code:
exten => s,1,Set(CURRENT_Hour=${STRFTIME(${EPOCH},,%H)})
exten => s,n,Set(CURRENT_Min=${STRFTIME(${EPOCH},,%M)})
exten => s,n,Set(time_sec=${MATH(${MATH(${CURRENT_Min}*60,int)}+${MATH(${CURRENT_Hour}*3600,int)},int)})
exten => s,n,Set(endtime=22:00)
exten => s,n,Set(endtime_hour=${CUT(endtime,:,1)})
exten => s,n,Set(endtime_min=${CUT(endtime,:,2)})
exten => s,n,Set(endtime_sec=${MATH(${MATH(${endtime_min}*60,int)}+${MATH(${endtime_hour}*3600,int)},int)})
exten => s,n,Set(max_duration_sec=${MATH(${endtime_sec}-${time_sec},int)})
exten => s,n,Set(max_duration_msec=${MATH(${max_duration_sec}*1000,int)})
exten => s,n,Dial(type/identifier,timeout,L(${max_duration_msec}:300000:60000))

Das ganze funktioniert fast zufriedenstellend, als einziges stört, daß die Hinweis Ansagen für den Anrufer und Angerufenen nacheinander und nicht zeitgleich abgespielt werden. Der jeweilige Gesprächspartner hat solange eine tote Leitung.

Vielleicht hat hier ja noch jemand einen Tip, allerdings gibt es schlimmeres und ich bin mit der Lösung auch so ganz zufrieden.

Vielen Dank nochmal an alle für die Hilfe, natürlich auch an Sachmet für den Beispiel Code.
 
Kostenlos!

Statistik des Forums

Themen
247,939
Beiträge
2,277,270
Mitglieder
377,021
Neuestes Mitglied
T58W-Nutzer