Flexible Zeitsteuerung mit Asterisk und Realtime

Harald J.

Neuer User
Mitglied seit
24 Nov 2008
Beiträge
9
Punkte für Reaktionen
0
Punkte
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).
 

laureen

Mitglied
Mitglied seit
17 Okt 2004
Beiträge
369
Punkte für Reaktionen
0
Punkte
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
 

Harald J.

Neuer User
Mitglied seit
24 Nov 2008
Beiträge
9
Punkte für Reaktionen
0
Punkte
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.
 

Erhalten Sie 3CX für 1 Jahr kostenlos!

Gehostet, in Ihrer privaten Cloud oder on-Premise! Ganz ohne Haken. Geben Sie Ihren Namen und Ihre E-Mail an und los geht´s:

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.
oder via