getfbcalls.pl, Perl-Skript zur automat. Anrufabfrage

prodigy7

Mitglied
Mitglied seit
28 Mai 2005
Beiträge
739
Punkte für Reaktionen
2
Punkte
18
[Update: 18.02.2010] getfbcalls.pl, Perl-Skript zur automat. Anrufabfrage

Hallo,

ich bin seit recht kurzer Zeit Besitzer einer Fritz!Box WLAN 7050 und bin recht zufrieden mit dem Teil. Das einzige, was mich im gegensatz zu meiner vorherigen Konfiguration gestört hat war, das ich keine Möglichkeit mehr hatte, mir automatisiert eine Mail zusenden zu lassen wenn ein Anruf eingegangen ist. Aus diesem Grund habe ich mir ein kleines Skript namens getfbcalls.pl geschrieben welches sich zu genau diesem Zweck einsetzen lässt und sich bestens zur Automatisierung in der Crontab einsetzen lässt.

Nach dem herunterladen am besten die Versionsnummer im Namen entfernen und dann mit chmod 755 <dateiname> ausführbar machen.

Kann gut sein, dass das Skript auch unter Windows funktioniert sofern die entsprechenden Module dafür verfügbar sind, ich hab es nicht getestet.

Hier ein paar Beispiele, wie das Skript eingesetzt werden kann:

Alle Anrufe anzeigen, die ausgehend waren:
./getfbcalls.pl --phonedirection=2

Alle Anrufe anzeigen, die ankommend und innerhalb eines Tages waren:
./getfbcalls.pl --phonedirection=1 --period=1d

Alle Anrufe anzeigen, die länger als eine Minute und kürzer als 3 Minuten waren:
./getfbcalls.pl --minduration=60 --maxduration=180

Alle Anrufe anzeigen, die über das Interface SIP0 gegangen sind:
./getfbcalls.pl --interface=SIP0

Wenn die Ausgabe so formatiert werden soll, dass die in eine Datei umgeleitet werden kann um später (z.B. mit Excel) bearbeitet zu werden, kann man den Switch --showcsv angeben. Dann wird die Ausgabe im CSV-Format ausgegeben. Möchte man dann noch zusätzlich einen Header mit dabei haben, einfach --showheader mit angeben.

Möchte man sich z.B. "Live" über die aktuellen Anrufe, die raus und rein gegangen sind informieren, kann man folgendes machen:
./getfbcalls.pl --period=5m [email protected] --mailserver=mailserver.provider.de
Damit bekommt man dann für einen Zeitraum von 5 Minuten alle Anrufe als einzelne Mails an die angegebene Adresse über den angegebenen Mailserver zugesendet. Möchte man die Anrufe in einer Sammelmail haben, gibt man den Switch --collect mit an.

Ansonsten einfach mal das Skript mit --help aufrufen und gucken, was es euch noch so an Optionen anbietet. Das Skript läuft natürlich mit der unmodifizierten Firmware der 7050 und die Version mit der ich getestet habe war 14.03.62.

Ich hoffe, der eine oder andere kann damit was anfangen. Wenn jemand Fehler findet oder Verbesserungsvorschläge hat, einfach hier posten!

Gruss, prodigy7

Edit 18.02.2010:
0.1.6 funktioniert auch mit aktuellen Firmware-Versionen (getestet auf 7270 54.04.80)
 

Anhänge

  • getfbcalls.pl-0.1.0.txt
    26.4 KB · Aufrufe: 7
  • getfbcalls.pl-0.1.1.txt
    27.6 KB · Aufrufe: 51
  • getfbcalls.pl-0.1.2.txt
    35.4 KB · Aufrufe: 11
  • getfbcalls.pl-0.1.3.txt
    37.6 KB · Aufrufe: 182
  • getfbcalls.pl-0.1.4.gz
    7.5 KB · Aufrufe: 43
  • getfbcalls.pl-0.1.5.gz
    7.9 KB · Aufrufe: 59
  • getfbcalls.pl-0.1.6.gz
    8.4 KB · Aufrufe: 95
Zuletzt bearbeitet:
"URL bzw. Datei wurde nicht gefunden"
 
Sieht soweit gut aus :)

Ein paar kleine Tipps:

Du machst Dir das auseinanderschnippeln der Parameter unnoetig schwer.

Code:
    if($ARGV[$argnum] =~ "--phonedirection=([\w|\d|\W|\D]*)")
    {
($Unneeded, $phonedirection) = split(/\=/, $ARGV[$argnum]);
if($phonedirection !~ "(0|1|2|3)")
{
    print "$0: Wrong option '".$ARGV[$argnum]."'\n";
    print "Try '$0 --help' for more information\n";
    exit(1);
}
    }

Nach diesem Matching steht in $1 schon der Teil hinter dem = drin, das splitten danach kannst Du Dir sparen. Da Du ja mit [...] eine Zeichenmenge angibst, brauchst Du die einzelnen Zeichenklassen (\w, \W, etc.) nicht mit ner Pipe zu trennen; damit laesst Du die Pipe als erlaubtes Zeichen zu.

Beim parsen der Zeitdauer gehts auch etwas einfacher:

Code:
if($period =~ /[0-9]s/g)
{
    $period =~ s/s//g;
    $period = $period;
} elsif($period =~ /[0-9]m/g)
{
    $period =~ s/m//g;
    $period = $period * 60;
} elsif($period =~ /[0-9]h/g)
{
    $period =~ s/h//g;
    $period = $period * 60 * 60;
} elsif($period =~ /[0-9]d/g)
{
    $period =~ s/d//g;
    $period = $period * 60 * 60 * 24;
}

wird zu

Code:
if($period =~ /([0-9])([smhd])/)
{
    $period = $1;
    $period *= 60 if $2 eq 'm';
    $period *= 3600 if $2 eq 'h';
    $period *= 86400 if $2 eq 'd';
}

Schau Dir vl. mal Getopt::Long an, ist auch ganz praktisch ;)
 
clueless schrieb:
Sieht soweit gut aus :)

Ein paar kleine Tipps:

Danke ! Für Tipps bin ich immer sehr dankbar ;-) Ich hab halt PERL in dem Sinne nie "professionell" erlernt sondern mir durch Learning-by-doing beigebracht so dass vielleicht das eine oder andere Sprachfeature an mir vorbeigegangen ist.

Ich werde deine Tipps in der nächsten Version umsetzen wenn irgendwelche Bugs gefixt oder neue Features hinzukommen. Ich spiele mit dem Gedanken, Support für mySQL-Datenbanken einzubauen. Wenn entsprechend die Nachfrage da wäre, würde ich das realisieren.

Gruss, prodigy7
 
Bin ja auch kein Perl-Profi... ausserdem gibts immer viele Wege, die zum Ziel fuehren :)

Eine generelle Anregung haette ich noch: Mach die "phone direction" doch etwas benutzerfreundlicher. Statt 0-3 akzeptierst Du sowas in der Form von incoming, outgoing, unanswered, etc.
 
clueless schrieb:
Eine generelle Anregung haette ich noch: Mach die "phone direction" doch etwas benutzerfreundlicher. Statt 0-3 akzeptierst Du sowas in der Form von incoming, outgoing, unanswered, etc.
Gute Idee ! Werd ich heute Abend machen, wenn es kälter ist :)
 
clueless schrieb:
Eine generelle Anregung haette ich noch: Mach die "phone direction" doch etwas benutzerfreundlicher. Statt 0-3 akzeptierst Du sowas in der Form von incoming, outgoing, unanswered, etc.

Ok, hab deine Anregung umgesetzt - Download-Link ist in meiner ersten Message aktualisiert.

Gruss, prodigy7
 
ist es möglich die liste irgendwo auf nem ftp server zu speichern in ner sql datenbank?

meine cgi kenntnisse reichen dafür nicht aus ... :(
 
Ja was denn jetzt? Auf nem FTP-Server oder in eine Datenbank? Das .csv-File solltest Du relativ einfach in eine Datenbank importieren koennen.
 
sphings schrieb:
ist es möglich die liste irgendwo auf nem ftp server zu speichern in ner sql datenbank?

meine cgi kenntnisse reichen dafür nicht aus ... :(

Hi,

also sofern du dich drauf einigen kannst, was du möchtest, kann ich dir auch eine 100%ige Antwort geben :)

Also wenn du irgendwas via FTP hochladen möchtest, kannst du das selber über irgendwelche Skripte bauen. Ausgabe via CSV, hochladen usw.

Wenn du darauf hinaus möchtest, dass man das Skript laufen lässt und das Skript dann selbstständig die Einträge in eine Datenbank schreibt (da ich mich nur mit mySQL auskenne, würde ich entsprechend auch nur einen mySQL-Support realisieren), ja, das kann ich einbauen und sollte auch recht problemlos funktionieren.

By the way: Mein Server ist wieder On und das Skript kann wieder runter geladen werden.

Gruss, prodigy7
 
prodigy7 schrieb:
sphings schrieb:
ist es möglich die liste irgendwo auf nem ftp server zu speichern in ner sql datenbank?

meine cgi kenntnisse reichen dafür nicht aus ... :(

Hi,

also sofern du dich drauf einigen kannst, was du möchtest, kann ich dir auch eine 100%ige Antwort geben :)

Also wenn du irgendwas via FTP hochladen möchtest, kannst du das selber über irgendwelche Skripte bauen. Ausgabe via CSV, hochladen usw.

Wenn du darauf hinaus möchtest, dass man das Skript laufen lässt und das Skript dann selbstständig die Einträge in eine Datenbank schreibt (da ich mich nur mit mySQL auskenne, würde ich entsprechend auch nur einen mySQL-Support realisieren), ja, das kann ich einbauen und sollte auch recht problemlos funktionieren.

By the way: Mein Server ist wieder On und das Skript kann wieder runter geladen werden.

Gruss, prodigy7

sorry ich meinte ohne ftp ich meinte nur SERVER!

und ja es geht mir um eine mysql datenbank, damit man das mit php wieder ordentlich auslesen kann ...

wäre super wenn du sowas einbauen könntest!
wäre erstrecht super wenn das script nachdem es die einträge in der sql datenbank gespeichert hat auch aus der anrufliste der box löschen könnte (ich sdag nur performance der box)

Thx

sphings
 
sphings schrieb:
wäre erstrecht super wenn das script nachdem es die einträge in der sql datenbank gespeichert hat auch aus der anrufliste der box löschen könnte (ich sdag nur performance der box)

*huestel* bitte was? Wird die Box bei Dir grottenlahm, sobald mehr als 2 Anrufe eingegangen sind? Sorry, aber den Stecker ziehen musste dann selbst.
 
sphings schrieb:
sorry ich meinte ohne ftp ich meinte nur SERVER!

und ja es geht mir um eine mysql datenbank, damit man das mit php wieder ordentlich auslesen kann ...

wäre super wenn du sowas einbauen könntest!
wäre erstrecht super wenn das script nachdem es die einträge in der sql datenbank gespeichert hat auch aus der anrufliste der box löschen könnte (ich sdag nur performance der box)
Einbauen kann ich den mySQL-Support, kein Problem! Aber wie schon mein Vorredner sagte, musst wenn du den Stecker ziehen. Abgesehen davon wäre das ein Armutszeugnis für AVM wenn nach ein paar Anrufen die Performance der Box in die Knie gehen würde - da ich von AVM besseres gewohnt bin, gehe ich nicht davon aus, dass die Performance sinkt mit der Anzahl der Anrufe.

Das einzige was ich gemerkt habe ist, dass die Performance während der Entwicklung meines Skripts in die Knie ging was evtl. daran lag, dass ich die zu sehr mit abrufen penetriert habe. Muss ich mal beantworten bzw wenn jemand sowas bemerkt, sollte er das mal melden. Im normalfall sollte sich aber an der performance der Box nichts ändern!

Gruss, prodigy7
 
ne bei 2 oder 3 anrufen passiert da noch nix aber wenn die anrufliste recht voll wird, dann geht das doch auf die performance der weboberfläche ... ist zumindest bei uns auf der arbeit so...

der mysql teil wäre aber für mich persönlich immo der wichtigste...
 
sphings schrieb:
ne bei 2 oder 3 anrufen passiert da noch nix aber wenn die anrufliste recht voll wird, dann geht das doch auf die performance der weboberfläche ... ist zumindest bei uns auf der arbeit so...

der mysql teil wäre aber für mich persönlich immo der wichtigste...
Ich guck mal wegen dem mySQL-Support. Von welchen Größenordnungen reden wir, wenn du sagst, dass die anrufliste recht voll ist? 10 / 100 / 1000 Einträge?

Gruss, prodigy7
 
gezählt hab ichs noch net aber so im schnitt denk ich 250 calls vielleicht ...
 
sphings schrieb:
gezählt hab ichs noch net aber so im schnitt denk ich 250 calls vielleicht ...
SQL-Support ist eingebaut... testet mal ob alles so funktioniert wie gewünscht. Download-Link findet ihr auf der ersten Seite.
 
Hallo,
wie wird das script auf der FBF genau eingerichtet mit dem Cron?
Könntest Du da mal eine Anleitung senden.

Hat das Script auch ein Telefonbuch, wo man einer Telefonnummer einen Namen zuördnen kann?
 
Hallo,
wie wird das script auf der FBF genau eingerichtet?
Könntest Du da mal eine Anleitung senden.

Hat das Script auch ein Telefonbuch, wo man einer Telefonnummer einen Namen zuördnen kann?


genau das würde mich auch interessieren. Habe die Box neu.
Tele läuft. Habe ich zumindest installiert.
Gruß

Nok
 
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.