PHP-Code:
<?
$id_voip = 58519;
$id_tts = 34810;
$id_text = 34742;
$id_blacklist = 36888;
$id_archive = 35323;
$id_calls = 26475;
$id_count = 22795;
$id_result = 54098;
$id_results = 56462;
if($_IPS['SENDER'] == "VoIP") {
//We only want to handle incoming messages
if(VOIP_GetConnection($id_voip, $_IPS["CONNECTION"])["Direction"] == 1 /* Outgoing */)
return;
switch($_IPS["EVENT"]) {
case "Incoming":
VOIP_SetData($id_voip, $_IPS["CONNECTION"], json_encode([
"Number" => $_IPS["DATA"],
"Vote" => 0
]));
//WFC_SendNotification(31245, "Neuer Teilmehmer!", maskPhoneNumber($_IPS["DATA"]), "Telephone", 5);
break;
case "Connect":
$data = json_decode(VOIP_GetData($id_voip, $_IPS["CONNECTION"]), true);
$blacklist = json_decode(GetValue($id_blacklist), true);
$found = false;
foreach($blacklist as $number) {
if($number == $data["Number"]) {
VOIP_PlayWave($id_voip, $_IPS["CONNECTION"], IPS_GetKernelDir() . "/media/abgelehnt.wav");
$data["Vote"] = -1;
VOIP_SetData($id_voip, $_IPS["CONNECTION"], json_encode($data));
$found = true;
break;
}
}
if(!$found) {
VOIP_PlayWave($id_voip, $_IPS["CONNECTION"], IPS_GetKernelDir() . "/media/willkommen.wav");
}
break;
case "Disconnect":
$data = json_decode(VOIP_GetData($id_voip, $_IPS["CONNECTION"]), true);
SetValue($id_calls, $data["Number"] . " = " . $data["Vote"]);
break;
case "DTMF":
$data = json_decode(VOIP_GetData($id_voip, $_IPS["CONNECTION"]), true);
if($data["Vote"] != 0) {
VOIP_PlayWave($id_voip, $_IPS["CONNECTION"], IPS_GetKernelDir() . "/media/fertig.wav");
} else {
switch($_IPS["DATA"]) {
case 1:
case 2:
case 3:
case 4:
case 5:
case 6:
VOIP_PlayWave($id_voip, $_IPS["CONNECTION"], IPS_GetKernelDir() . "/media/danke_".$_IPS["DATA"].".wav");
$data["Vote"] = $_IPS["DATA"];
VOIP_SetData($id_voip, $_IPS["CONNECTION"], json_encode($data));
//Add to blacklist
if($data["Vote"] == 6) {
$blacklist = json_decode(GetValue($id_blacklist), true);
$blacklist[] = $data["Number"];
SetValue($id_blacklist, json_encode($blacklist));
}
break;
case '#':
VOIP_PlayWave($id_voip, $_IPS["CONNECTION"], TTSAWSPOLLY_GenerateFile($id_tts, GetValue($id_text)));
break;
default:
VOIP_PlayWave($id_voip, $_IPS["CONNECTION"], IPS_GetKernelDir() . "/media/ungueltig.wav");
break;
}
}
}
}
//Source: https://medium.com/@yemiwebby/replace-some-characters-with-asterisks-in-php-using-str-repeat-2c78b3899bad
function maskPhoneNumber($number){
return str_repeat("*", strlen($number)-4) . substr($number, -4);
}
//Get all calls. This is not efficient, but does the job for our low volume hotline.
$calls = AC_GetLoggedValues($id_archive, $id_calls, 0, 0, 0);
$result = 0;
$count = 0;
foreach($calls as $call) {
if(preg_match("/.*\ =\ (\d)/", $call["Value"], $matches)) {
$result += intval($matches[1]);
$count++;
}
}
SetValue($id_count, $count);
SetValue($id_result, number_format($result / $count, 2));
//Render table only with latest calls...
$calls = array_splice($calls, 0, 10);
$html = "<table style='width: 100%; border-collapse: collapse;'>";
$html .= "<tr>";
$html .= "<td style='padding: 5px; font-weight: bold;'>Datum/Uhrzeit</td>";
$html .= "<td style='padding: 5px; font-weight: bold;'>Telefonnummer</td>";
$html .= "<td style='padding: 5px; font-weight: bold;'>Note</td>";
$html .= "</tr>";
foreach($calls as $call) {
preg_match("/(.*) = (.*)/", $call["Value"], $result);
if($result[2] == -1) {
$result[2] = "Blockiert";
} else if($result[2] == 0) {
$result[2] = "Abgebrochen";
}
$html .= "<tr style='border-top: 1px solid rgba(255,255,255,0.10);'>";
$html .= "<td style='padding: 5px;'>".date("d.m.Y H:i", $call["TimeStamp"])."</td>";
$html .= "<td style='padding: 5px;'>".maskPhoneNumber($result[1])."</td>";
$html .= "<td style='padding: 5px;'>".$result[2]."</td>";
$html .= "</tr>";
}
$html .= "</table>";
SetValue($id_results, $html);
?>
Beipspiel zum Anrufen und Nachricht hinterlassen. (Etwas simpel. Es geht auch schöner über Events
PHP-Code:
$id = VOIP_Connect(56175, "0451305005xx");
for($i = 0; $i <= 10; $i++) {
IPS_Sleep(1000);
$c = VOIP_GetConnection(56175, $id);
if($c['Connected']) {
VOIP_PlayWave(56175, $id, IPS_GetKernelDir() . "/media/willkommen.wav");
//VOIP_PlayWave(56175, $id, TTSAWSPOLLY_GenerateFile(34810, "Alarm! Es brennt im Keller!"));
return;
}
}
VOIP_Disconnect(56175, $id);