- Mitglied seit
- 11 Feb 2005
- Beiträge
- 21
- Punkte für Reaktionen
- 0
- Punkte
- 0
Hallo Forum,
Man kann ja mit gotoiftime zeitgesteuert Anweisungen im Dialplan anbringen.
Da ich aber von meiner vbox-Zeit da etwas flexibler war habe ich versucht sowas mal nachzustellen.
Ich bin zwar bestimmt kein begnadeter Perl-Hacker, eher ein schlechter, aber ich habe doch was hinbekommen.
Man braucht nur zwei Scripte un den passenden context im Dialplan.
Damit kann man bequem, nummernbezogen und zeitbezogen auf Anrufe reagieren.
Wer mich schonmal zu Fussballzeit angerufen hat, der weiß, wie wenig mich dass amüsiert .
ich stell alles mal hier rein, sollte fast schon selbsterklärend sein, ansonsten Fragen.
in der extensions conf bei allem was von draussen kommt:
Hier das voicebox.agi:
Da müssen natürlich die Standards entsprechend angepasst werden.
Und nun die config Datei.
Diese muß in /etc/asterisk liegen und
vboxtimer.conf lauten
Solche Sachen wie "Nur Wochentags" oder "Freitag bis Sonntag" habe ich noch nicht implementiert, kommt vielleicht aber noch.
Wer möchte kann es testen und auch verbessern.
Viel Spass damit
klingeljoe
Man kann ja mit gotoiftime zeitgesteuert Anweisungen im Dialplan anbringen.
Da ich aber von meiner vbox-Zeit da etwas flexibler war habe ich versucht sowas mal nachzustellen.
Ich bin zwar bestimmt kein begnadeter Perl-Hacker, eher ein schlechter, aber ich habe doch was hinbekommen.
Man braucht nur zwei Scripte un den passenden context im Dialplan.
Damit kann man bequem, nummernbezogen und zeitbezogen auf Anrufe reagieren.
Wer mich schonmal zu Fussballzeit angerufen hat, der weiß, wie wenig mich dass amüsiert .
ich stell alles mal hier rein, sollte fast schon selbsterklärend sein, ansonsten Fragen.
in der extensions conf bei allem was von draussen kommt:
Code:
exten => 7819xxx,1,Wait
exten => 7819xxx,2,SetLanguage(de)
exten => 7819xxx,3,AGI,voicebox.agi
exten => 7819xxx,4,Dial(SIP/10,${TIMEOUT},HtTr)
exten => 7819xxx,5,Playback(${SOUNDDIR}/${EXTDIR}/${SOUNDFILE})
exten => 7819xxx,6,Voicemail(10)
exten => 7819xxx,7,Playback(Goodbye)
exten => 7819xxx,8,Hangup
Hier das voicebox.agi:
Da müssen natürlich die Standards entsprechend angepasst werden.
Code:
#!/usr/bin/perl -w
use Asterisk::AGI;
### Timergesteuerter Anrufbeantworter by klingeljoe
#
### default Einstellungen festlegen
# Standardtimeout
$stdtimeout=30;
# Basis Soundirectory
$soundbase="/var/spool/asterisk/voicemail/default";
# Standardextensions Soundir, dieses Directory wird verwendet wenn kein Timmer gefunden wurde
$stdextdir=10;
# Standard unavailable Message
$stdunavail=unavail;
### Ende default Einstellungen
$AGI = new Asterisk::AGI;
%input = $AGI->ReadParse();
$minute=0; $hour=0; $day=0; $month=0;
$cnt=0; $i=0;
($minute, $hour, $day, $month) = (localtime)[1,2,6,4];
$calledmsn = $input{'extension'};
print STDERR "calledmsn\n";
@timerdata="";
open (TIMERDATA, "/etc/asterisk/vboxtimer.conf") || die "konnte vboxtimer.conf nicht öffnen\n";
while (<TIMERDATA>){
if ($_ =~ m/^\[([0-9]*)\|(.*)\]\n/){
$extenname = $1;
$extdir = $2;
}
if ($_ =~ m/^[0-9]{1,2}.*\n/){
chomp $_;
@timerdata= $_ ;
for ($i=0; $i<=$#timerdata; $i++){
$cnt=++$cnt;
@timerdata=split(/\s/,$_);
$timerdata{"$cnt"."7"}=$extenname;
for ($i=0; $i<=$#timerdata; $i++){
$timerdata{"$cnt$i"} = $timerdata[$i] ;
}
}
}
}
close (TIMERDATA);
#Überprüfen ob die Timer zu jetzigen Zeit passen
$atm = $hour*60+$minute;
for ($i=1; $i<=$cnt; $i++){
$stimer = ($timerdata{"$i"."0"} * 60) + $timerdata{"$i"."1"};
$etimer = ($timerdata{"$i"."2"} * 60) + $timerdata{"$i"."3"};
$tday = $timerdata{"$i"."4"};
if ($etimer < $stimer && $atm < $stimer){
$etimer = $etimer + 1440;
$atm = $atm + 1440;
}elsif($etimer < $stimer){
$etimer = $etimer + 1440;
}
if ($stimer <= $atm && $etimer >= $atm && $tday eq $day && $timerdata{"$i"."7"} == $calledmsn ||
$stimer <= $atm && $etimer >= $atm && $tday eq "*" && $timerdata{"$i"."7"} == $calledmsn){
printf ("Timer $i Startstunde und Minute ist kleiner als die jetzige\n");
goto DUMPER;
}
}
goto STANDARD;
DUMPER:
$gesuchte_extension = $timerdata{"$i"."7"};
$AGI->set_variable(TIMEOUT, $timerdata{"$i"."6"});
$AGI->set_variable(SOUNDFILE, $stdunavail);
$AGI->set_variable(SOUNDDIR, $soundbase);
$AGI->set_variable(EXTDIR, $extdir);
exit(0);
STANDARD:
$AGI->set_variable(TIMEOUT, $stdtimeout);
$AGI->set_variable(SOUNDFILE, $stdunavail);
$AGI->set_variable(SOUNDDIR, $soundbase);
$AGI->set_variable(EXTDIR, $stdextdir);
exit(0);
Und nun die config Datei.
Diese muß in /etc/asterisk liegen und
vboxtimer.conf lauten
Code:
## vboxtimer.conf by klingeljoe
##
##
# Kurze Beschreibung:
# in den eckigen klammen steht als erstes die angewählte Rufnummer gefolgt von dem | (Pipe) Symbol und
# dann folgt die Extension für die Mailbox.
# [4711|23] ist Rufnummer 4711 holt die Message Dateien aus der Voicebox 23.
# Natürlich müssen die Voiceboxen, sowie dei Messages dort existieren.
# Jeder Telefonnumerblock begint mit den ekigen Klammern.
#
# Dann folgen die Timerparameter
# [Startstunde] [Starminute] [Endstunde] [Endminute] [Tag] [Message] [Timeout]
#
# Die Parameter müssen durch ein (nur eins!) Leerzeichen getrennt werden.
# [Startstunde] 0 - 23
# [Startminute] 0 - 59
# [Endstunde] 0 - 23
# [Endminute] 0 - 59
# [Tag] 0 - 6 (0 ist der Sonntag und 6 ist der Samstag, * ist jeder Tag)
# [Message] Name der Message im Voicebox-Directory
# [Timeout] Timeout in Sekunden bis die Voicebox abhebt. Hier gelten die Paramter die Asterisk erlaubt.
# In den meisten fällen reicht wohl ein 0 - 90
# [8877937|10] ; Für Rufnummer 8877937 liegen die Voicedateien in Mailbox 10
# 15 30 17 15 6 fussball 0 ; Samstags zwischen 15:30 und 17:15 die Message fussball abspielen sofort (Timeout 0)
# 22 30 6 30 * unavail 0 ; Nachts von 22:30 bis 6:30 die Message unavail abspielen sofort (Timeout 0)
# 17 55 18 55 * dailysoap 90 ; Jeden Tag von 17:55 bis 18:55 90 Sekunden klingeln lassen bis die Message dailysoap abgespielt wird
# Wichtig ist die Timer mit der Wildcard * immer an den Schluß des Blocks setzen, denn der erste der gefunden wird gewinnt!!
[8877937|10]
10 30 20 30 2 fussball 0
11 30 21 30 3 handball 30
[7819999|10]
###
15 30 17 15 6 fussball 11
22 30 6 30 * unavail 0
Solche Sachen wie "Nur Wochentags" oder "Freitag bis Sonntag" habe ich noch nicht implementiert, kommt vielleicht aber noch.
Wer möchte kann es testen und auch verbessern.
Viel Spass damit
klingeljoe