Rückruf bei besetzt

delmo

Neuer User
Mitglied seit
12 Mrz 2005
Beiträge
95
Punkte für Reaktionen
0
Punkte
0
Hallo,

inspiriert vom Weckruf Script habe ich ein Rückruf bei besetzt Sript (ohne AGI) gebastelt. Wie auch beim Weckruf wird dazu ein Callfile erzeugt. Bevor jemand meckert, ich weiss daß das Script von 23.58-00.00 Uhr nicht funktioniert, aber auf die Ausnahme hatte ich gerade keine Lust...:

PHP:
exten => _X.,1,SetVar(nummer=${EXTEN});Nummer des Anzurufenden speichern
exten => _X.,2,Dial,SIP/${EXTEN}@raus|45;Anrufen
exten => _X.,3,Goto,b_o-${DIALSTATUS}|1;Überprüfen was passiert und bei besetzt in den Contex b_o-BUSY springen

exten => b_o-BUSY,1,Read(key,besetzt);Spiele die Meldung ab, dass besetzt ist
exten => b_o-BUSY,2,GotoIf($[${key}=1]?b_o-CB|1);Wenn der Anrufer nun die 1 drückt, springe nach b_o-CB
exten => b_o-BUSY,3,Goto(_X.,4);sonst springe nach _X.,4

exten => b_o-CB,1,NoOP(CallFile erzeugen)
exten => b_o-CB,2,TrySystem(echo "" > /tmp/CBC${nummer}.call);Jetzt wird ein Callfile erzeugt, dass später den Callback einleitet
exten => b_o-CB,3,TrySystem(echo "Channel: SIP/35" >> /tmp/CBC${nummer}.call);hier müsste natürlich das entsprechende Endgeräte stehen, welches klingeln soll
exten => b_o-CB,4,TrySystem(echo "Callerid: ${nummer}" >> /tmp/CBC${nummer}.call);so wird auf o.g. Endgerät die Nummer des Anzurufenden angezeigt
exten => b_o-CB,5,TrySystem(echo "Context: broadnet_out" >> /tmp/CBC${nummer}.call);über welchen Context wird rausgewählt?
exten => b_o-CB,6,TrySystem(echo "Extension: ${nummer}" >> /tmp/CBC${nummer}.call);Wer soll angerufen werden?
exten => b_o-CB,7,TrySystem(echo "MaxRetries: 0" >> /tmp/CBC${nummer}.call)
exten => b_o-CB,8,TrySystem(echo "RetryTime: 30" >> /tmp/CBC${nummer}.call)
exten => b_o-CB,9,TrySystem(echo "WaitTime: 30" >> /tmp/CBC${nummer}.call)
exten => b_o-CB,10,NoOP()
exten => b_o-CB,11,TrySystem(echo "Priority: 1" >> /tmp/CBC${nummer}.call)
exten => b_o-CB,12,SetVar(Minuten=$[${TIMESTAMP:-4:2}+2]);Der Anruf soll 1-2 Minuten später ausgeführt werden (je nach Sekundenstand)
exten => b_o-CB,13,SetVar(Stunden=${TIMESTAMP:-6:2});dazu wird die Uhrzeit, die in 1-2 Minuten herrschen wird in den Variablen
exten => b_o-CB,14,SetVar(Tag=${TIMESTAMP:-9:2});Minuten,Stunden,Tag und Monat gespeichert
exten => b_o-CB,15,SetVar(Monat=${TIMESTAMP:-11:2})
exten => b_o-CB,16,GotoIf($[${Minuten}> 59]?b_o-CB-kor|1);Wird beim 2 Minuten Addieren eine neue Stunde angefangen?
exten => b_o-CB,17,GotoIf($[${Minuten} < 10]?b_o-CB-kor|2);Ist die Minutenzahl einstellig?



exten => b_o-CB-kor,1,SetVar(Minuten=$[${Minuten}-60]);beim Stundensprung ists natürlich z.B. nicht 62, sondern 2
exten => b_o-CB-kor,2,TrySystem(touch -t ${Monat}${Tag}${Stunden}0${Minuten} /tmp/CBC${nummer}.call); 2 geht nicht, 02 wird für touch benötigt
exten => b_o-CB-kor,3,Goto(b_o-CB,19)

exten => b_o-CB,18,TrySystem(touch -t ${Monat}${Tag}${Stunden}${Minuten} /tmp/CBC${nummer}.call);Zeitstempel des Callfiles ändern. Wenn die Zeit einstellig ist wird dieser Befehl wg. ungültiger Syntax nicht ausgeführt, b_o-CB-kor,2 hat das aber schon gemacht
exten => b_o-CB,19,TrySystem(mv /tmp/CBC${nummer}.call /var/spool/asterisk/outgoing/CBC${nummer}.call);jetzt ab in den Spooler
exten => b_o-CB,20,Goto(_X.,4);das wars

exten => _X.,4,Hangup;auflegen

Gruß delmo
 
Zuletzt bearbeitet:
Hallo delmo,

kannst du dazu noch mal eine kleine Erklärung abgeben?

mfg Guard-X
 
Hallo Guard-X,

ich hab mal Kommentare hinzugefügt. Das Prinzip ist:

Wenn besetzt, dann sage das dem Anrufer und guck ob er eine "1" drückt
Tut er das, wird ein Callfile erzeugt, welches diesen Anruf einfach wiederholt
Ein Callfile wird, wenn es in das Asterisk Spooler Verzeichnis geschoben wird, zu seinem Zeitstempel ausgeführt. Dazu setzt dieses Script den Zeitstempel der Datei auf die Systemzeit + ungefähr 2 Minuten (Sekunden werden nicht berückichtigt). Man muss dabei halt den Stundensprung abfangen. Desweiteren darf die Minutenangabe nicht einstellig sein, also z.B. 02 statt nur 2. Das wars eigentlich. Wer noch Fragen hat, kann sie ja stellen.

Gruß
delmo
 
Ja, aber es klingelt jedesmal und es muss der Hörer abgenommen werden. Erst dann wird der ursprünglich nicht zu erreichende Teilnehmer angerufen.
 
Richtig, um den Hörer nicht abnehmen zu müssen, müsste man jeweils was telefonspezifisches machen, wenn das Telefon es denn unterstützt...
 
automatische Rufannahme am Telefon einschalten.
Das ist aber ein Sicherheitsrisiko.
 
geht nicht bei jedem und macht auch nicht immer Sinn...
 
Hi !
Hab mir über dieses Thema auch schon Gedanken gemacht ... mit dem Asterisk ist das schöne alte ISDN-Feature der damals noch an einem Mehrgeräteanschluss laufenden ELMEG Anlage flöten gegangen, bei besetzt einen Rückruf in der T-COM Zentrale zu buchen. Auch ich habe mein Weckruf ohne AGI Script dazu benutzt ... ist halt eine Krücke ! Es klingelt bei mir, ich hebe ab und bekomme erneut ein Besetztzeichen ! Hmm ! Eigentlich müsste eine virtuelle statt eine reale Extension schauen, ob der Teilnehmer nun frei ist oder busy und dann weiteres veranlassen. Kennt sich da einer aus ?

Grüsse

o_dapenguin
 
Man müsste halt mit einer anderen Extension anrufen und wenn nicht busy ist klingelt das Telefon. Da gibts aber das Problem, dass evtl. der Auslöser dieses Anrufs nicht mehr am Platz ist und so der Angerufene sich verarscht vorkommt. :noidea:
 
... letzteres Problem gabs ja schon immer, deshalb müsste man sich aus der Schaltung auch wieder ausbuchen können !
 
o_dapenguin schrieb:
mit dem Asterisk ist das schöne alte ISDN-Feature der damals noch an einem Mehrgeräteanschluss laufenden ELMEG Anlage flöten gegangen, bei besetzt einen Rückruf in der T-COM Zentrale zu buchen.

Für externe Anschlüsse ging das eigentlich eh nie wenn man es gebraucht hat.

Für Asterisk kann man es für interne Telefone sehr komfortabel programmieren.
Ein Anrufer A bucht einen Rückruf zu Telefon B

In der h Extension wird immer geprüft ob für ein Telefon ein Rückrufwunsch vorliegt und falls ja wird bei A signalisiert. A nimmt ab und die Verbindung wird zu B hergestellt.

Für externe Telefone bei Besetzt programmiert man eine Anrufwiederholung oder nimmt gleich RetryDial.
 
Thomas007 schrieb:
.

Für externe Telefone bei Besetzt programmiert man eine Anrufwiederholung oder nimmt gleich RetryDial.

Genau das ist doch in meinem Script realisiert....:noidea:
 
hallo,
wie und wo füge ich das script ein?in der extension.conf? einfach einfügen?


gruß
Beebob
 
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.