.titleBar { margin-bottom: 5px!important; }

Flexible Zeitsteuerung mit Asterisk und Realtime

Dieses Thema im Forum "Asterisk Skripte" wurde erstellt von Harald J., 26 Jan. 2009.

  1. Harald J.

    Harald J. Neuer User

    Registriert seit:
    24 Nov. 2008
    Beiträge:
    9
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Hallo,
    nachdem ich dieses Forum nun mehrfach durchforstet habe bin ich immer noch nicht auf eine Loesung fuer mein Problem gestossen.

    Was ich will:
    All meine "Kunden" sind zu unterschiedlichen Zeiten erreichbar, d.h. diese sollen wenn erreichbar in den Context [available] geleitet werden und wenn nicht dann in den Context [not_available].

    Ich hatte dies bisher mit einer simplen 'include =>...' Loesung getan, allerdings hat das den Nachteil, dass eben alle Kunden zur selben Zeit erreichbar sind oder nicht. Dies soll aber nun individuell gestaltet werden.

    Ich bin mit den Include-Anweisungen auf Syntaxprobleme gestossen, als ich statt der Uhrzeit eben Variablennamen eingetragen hatte (die Variablen wurden mit Strings, welche Informationen zu den Uhrzeiten enthielten,aus der Datenbank gefuettert..).
    Beispiel:
    include => available|${Montag_Vormittag}|mon|*|*
    (geht bloederweise nicht)

    Hat jemand schon einmal eine aehnliche Sache programmiert oder vielleicht einen guten Vorschlag wie ich an die Sache herangehen koennte? Ich wuerde gern eine Datenbankabfrage mit einem externen Script schreiben (sollte kein Problem sein) und dieses Ergebnis dann als String in der Form "include => available|<eineUhrzeit>|<einTag>|*|*" in den Dialplan einfuegen (das ist ein Problem).
     
  2. laureen

    laureen Mitglied

    Registriert seit:
    17 Okt. 2004
    Beiträge:
    369
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Hi Harald,

    du musst unterscheiden zwischen
    .) Channel-Variablen (sind nur während des Anrufes verfügbar)
    .) Dialplan-Variablen (oder globale Variablen, werden im Dialplan unter [globals] gesetzt und sind auch beim Laden des Dialplans verfüg- bzw. verwendbar)

    Ich würde Deine Anforderung mit einem kleinen PHP oder Perl-Script lösen, das dann über den Dialplan-Befehl "AGI" aufgerufen wird. Da kannst Du die Datenbank problemlos abfragen und den zurückgegebenen Werten entsprechende Aktionen ausführen, also "Goto" in die richtigen Kontexte.

    Grüße,
    Laureen
     
  3. Harald J.

    Harald J. Neuer User

    Registriert seit:
    24 Nov. 2008
    Beiträge:
    9
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    meine Loesung

    Ich hatte anfangs ein wenig Verstaendnisprobleme wie man Variablen von Asterisk an das Script uebergibt bzw. an Asterisk zurueck schickt deshalb will ich das nochmal anfuehren falls irgendwer das gleiche Problem hat.

    mein Script beginnt folgendermassen:
    PHP:
    #!/usr/bin/php -q
    <?php
    require_once("Connection_Settings.php");
    require_once(
    "Database.php");

    //Script runs limited time [seconds]
    set_time_limit(2);

    //Input from Asterisk
    $phonenumber $argv[1];
    $currentday  $argv[2];
    $currenttime $argv[3];
    ...
    Im Script werden einfache Datenbankabfragen gemacht ob sich der Anrufer innerhalb der vorgegebenen Zeit befindet.

    Das Script endet schliesslich mit der Uebergabe eines Wertes:
    PHP:
    ...
    //Output to Asterisk
    echo "exec Set ISOPEN=$available";
    echo 
    "\n";

    //Close the DB connection
    $db->close();

    exit;
    ?>
    In Asterisk uebernehme ich dann den Wert vom Script und springe zum entsprechenden Context:
    Code:
    exten => check,n,Set(OPEN=${ISOPEN})
    exten => check,n,GotoIf($[${OPEN}]?available,available,1:notAvailable,notavailable,1)
    
    vielen Dank nochmal an Laureen.