Home > HowTo > URL Aufruf im Asterisk zur Mitarbeiterzeiterfassung

URL Aufruf im Asterisk zur Mitarbeiterzeiterfassung

Für die Arbeitszeiterfassung wollen wir bei uns in Kürze die Telefonanlage missbrauchen. Damit sind wir Standortunabhängig und der Mitarbeiter kann morgens direkt als erstes seine Arbeitszeit erfassen, ohne erst den Computer hochzufahren.

Hierfür wird ein einfaches PHP Script auf einer intern verfügbaren Webseite benötigt und folgende Extension in der extensions.conf

exten => _*70.,1,Set(foo=${CURL(https://intranetwebpage/zeiterfassung.php?mitarbeiter=${EXTEN:3:4}&action=${EXTEN:7:1}&src=”${CALLERID(num)})})
exten => _*70.,n,Playback(de/vm-saved)
exten => _*70.,n,SayDigits(${EXTEN:3:4})
exten => _*70.,n,Hangup()

Damit wird automatisch das PHP Script zeiterfassung.php mit den Parametern mitarbeiter, action und src aufgerufen. Diese füllt Asterisk dann entsprechend mit Angaben aus der gewählten Rufnummer.

Beispiel

Gewählte Rufnummer *7012341

mitarbeiter (Ziffern 4-7): 1234
action (Ziffer 8): 1
src (ID-Rufnummer der Nebenstelle): 105

Als IP bekommt der Webserver die IP-Adress der TK-Anlage angezeigt. Das PHP Script dahinter ist dann simpel. Berechtigung prüfen, Status der Zeiterfassung prüfen und in Datenbank speichern.

  1. Claudio Fuchs
    2. September 2010, 09:51 | #1

    Sie haben nicht zufällig noch ein Beispiel für eine php-Seite, ich finde die Idee nämlich super und würde sie gerne bei mir einsetzen. Bei php muss ich allerdings mein Unvermögen eingestehen ;)

    Claudio Fuchs

  2. 2. September 2010, 18:00 | #2

    Wie genau das aussieht hängt stark von der Datenbank ab in die man die Daten einspielen möchte, hier aber ein paar Auszüge:

    < ?PHP
    // getting employer_id
    $employer_id = intval($_REQUEST['mitarbeiter']);
    $booking_type_id = intval($_REQUEST['action']);
    $source_tel = intval($_REQUEST['src']);
    $ip_address = $_SERVER['REMOTE_ADDR'];

    // check if call comes from valid-IPAddresses
    // the ip_address ist the IP of the asterisk server
    $valid_ip = array('192.168.0.2', '192.168.0.99);
    if(!in_array($ip_address, $valid_ip))
    {
    echo 'invalid call:'.$mc_homeoffice.'/'.$ip_address;
    die();
    }

    $sql = 'INSERT INTO `timeaccounting`
    SET
    `employer_id` = \''.$employer_id.'\',
    `booking_type_id` = \''.$booking_type_id.'\',
    `source_tel` = \''.$source_tel.'\' ;'
    MYSQL_QUERY($sql);

    ?>

    Im Endeffekt also kein Hexenwerk, einfach nur die GET Parameter auswerten und in die Datenbank schreiben. Die Berechnung wieviel Stunden er gearbeitet hat und wie sein aktuelles Arbeitszeitkonto ist kommt natürlich noch dazu. Aber das ist nicht gerade trivial und gerade eben im Beispielscript gezeigt.

  3. Claudio Fuchs
    3. September 2010, 08:53 | #3

    Die Berechnungen, etc. mache ich über mysql Abfragen und generiere mir mit irgendetwas einen report, das bekomme ich hin. Bei den PHP-Geschichten mangelt es nur einfach an Wissen. Aber das Beispiel ist super, vielen Dank!

    Claudio Fuchs

  4. 3. September 2010, 08:53 | #4

    Kein Ding, viel Spaß und Erfolg beim Entwickeln.

  1. Bisher keine Trackbacks