Hallo,
„DTMF“ ist keine Variable sonder der Inhalt von „$ISDN_EVENT“. Bei jeder Veränderung wird ein neues Ereignis Ausgelöst. Das Skript zum verarbeiten dieses Ereignisses musst du im ISDN Modul angeben. Ein Ereignis ist nicht nur das Erhalten eines Anrufes sondern z.B. Auch das beenden eines Ansagetextes oder die Eingabe eines Codes auf der Tastatur des Telefons.
Nachfolgend mein Skript für die Verarbeitung der ISDN Ereignisse. Bitte aber nicht verwirren lassen. Das Skript ist sehr umfangreich wegen der Anbindung an eine Datenbank.
Die ISDN Verarbeitung hat auch noch eine zweites Skript das durch einen Timer gesteuert die Verbindung überwacht da das „Disconnect“ Ereignis nicht sonderlich Zuverlässigkeit ist.
define ('IID_ISDN' , 43936 /*[.ISDN\ISDN Module]*/); // ISDN Instans
define ('pISDN_Status' , 28883 /*[.ISDN\ISDN_Auswertung\sISDN_Status]*/); // Variable
define ('pISDN_Timer', 51278 /*[.ISDN\ISDN_Timer]*/); // Skript "ISDN_Timer"
define ('pSMS',12293 /*[.ISDN\SMS_Senden]*/);
if($IPS_SENDER == "ISDN"){
// ISDN Status Laden
$Text = GetValueString(pISDN_Status);
IF($Text!= ''){
$ISDN_Status_Liste = unserialize($Text);
}
$ISDN_Status_alt = $ISDN_Status_Liste;
//Informationen ins Meldungsfenster ausgeben
echo "Event: ".$ISDN_EVENT."
" ;
$ID = $ISDN_CONNECTION;
if($ISDN_EVENT != "Disconnect"){
$callinfo = ISDN_GetConnectionInfo(IID_ISDN, $ID);
//Mehr Informationen ausgeben
echo "ISDN_GetConnectionInfo: ".$ISDN_CONNECTION.",".print_r($callinfo,True);
}
//Je nach Ereigniss eine Aktion ausführen
switch($ISDN_EVENT)
{
case "Incoming":
// Neuer Anruf ?
IF(!array_key_exists($ID,$ISDN_Status_Liste)){
// Feldeintrag für Kommenden Ruf anlegen
$ISDN_Status['Time']= Time();
$ISDN_Status['Typ']= "IN";
// Anruf in Datenbank Schreiben
$CallingNumber = "0".$callinfo['CallingNumber'];
$CalledNumber = $callinfo['CalledNumber'];
// Verbindung zur Datenbank
$connectionInfo = array( "Database"=>"Adressen_SQL");
$db=sqlsrv_connect ("ZENTRALE\SQLEXPRESS",$connectionInfo);
$sTime = strftime("%Y-%m-%d %X", Time());
$query = "INSERT INTO [Anrufe] (Von, An, Zeitpunkt)VALUES(?,?,CONVERT(DATETIME, ?,102))";
echo "Eintrag in DB: ".$query."
";
$params = array( $CallingNumber, $CalledNumber,$sTime);
$result = sqlsrv_query($db,$query,$params);
if(!$result){
echo "Error in statement execution.
";
die( print_r( sqlsrv_errors(), true));
}
// Index des neuen Eintrags
$query = "SELECT ident_current('[Anrufe]') as ID";
$result = sqlsrv_query($db,$query);
if($result){
$row = sqlsrv_fetch_array($result,SQLSRV_FETCH_ASSOC);
$ISDN_Status['ID'] = $row['ID'];
}else{
$ISDN_Status['ID'] = 0;
}
sqlsrv_close($db);
IPS_SetScriptTimer(pISDN_Timer, 1); // Timer Einschalten
$Text = "Update";
RegVar_SendText(59656 /*[.ISDN\Register Variable]*/ ,$Text.$Text.chr(10) );
// if($CallingNumber == '1701686912'){
// ISDN_Disconnect(IID_ISDN,$ID);
// }
// Feldeinträge Speichern
$ISDN_Status_Liste[$ISDN_CONNECTION] = $ISDN_Status;
echo "Incoming: ".print_r($ISDN_Status_Liste,True);
}
break;
case "Connect":
// Anruf von Klingel ausgelöst ?
if($ISDN_Status_Liste[$ID]['Typ']== 'Klingel'){
$ISDN_Status_Liste[$ID]['Typ']= 'Klingel_WAV';
ISDN_PlayWave(IID_ISDN,$ISDN_CONNECTION,"C:\Anwendungsdaten\IP-Symcon\wav\haustür.wav");
}else{
//Aktion nach dem Verbinden ausführen
$CalledNumber = $callinfo['CalledNumber'];
if ($CalledNumber == 33){
$file = "C:\Anwendungsdaten\IP-Symcon\wav\Tupper_ISDN.wav";
}else{
$file = "C:\Anwendungsdaten\IP-Symcon\wav\Feldmann_ISDN.wav";
}
echo "Ansage: ".$file." Angerufende Nr.:".$CalledNumber. "
";
ISDN_PlayWave(IID_ISDN, $ISDN_CONNECTION, $file);
$ISDN_Status_Liste[$ID]['Typ']= 'IN_Ansag';
}
break;
case "Disconnect":
//Aktion, wenn Anruf beendet wurde
//"ISDN_GetConnectionInfo" ist hier nicht mehr verfügbar!
if($ISDN_Status_Liste[$ID]['Typ']== 'Klingel_WAV'){
unset($ISDN_Status_Liste[$ID]);
}
// Status ISDN
elseIF(@array_key_exists($ID,$ISDN_Status_Liste)){
$Dauer = time() - $ISDN_Status_Liste[$ID]['Time'];
echo "Dauer : $Dauer s
";
$ISDN_Status = $ISDN_Status_Liste[$ID];
echo "ISDN_Status".print_r($ISDN_Status,true);
// Sprächsdauer in DB Schreiben
if(substr($ISDN_Status['Typ'],0,2)=='IN'){
$connectionInfo = array( "Database"=>"Adressen_SQL");
$db=sqlsrv_connect ("ZENTRALE\SQLEXPRESS",$connectionInfo);
$Dauer = Time() - $ISDN_Status['Time'];
$iID = $ISDN_Status['ID'];
$query = "UPDATE Anrufe SET [Anrufe].[Dauer] = $Dauer WHERE [Anrufe].[Index] = $iID";
echo "Eintrag in DB: ".$query."
";
$result = sqlsrv_query($db,$query);
sqlsrv_close($db);
IPS_RunScript(pSMS );
}
unset($ISDN_Status[$ID]);
$Text = "Update";
RegVar_SendText(59656 /*[.ISDN\Register Variable]*/ ,$Text.$Text.chr(10) );
}
break;
case "PlayFinish":
//Aktion, wenn Wav abgespielt wurde
if($ISDN_Status_Liste[$ID]['Typ']== 'Klingel_WAV'){
ISDN_Disconnect(IID_ISDN,$ID);
}elseif($ISDN_Status_Liste[$ID]['Typ']== 'IN_Ansag'){
$file = "C:\Anwendungsdaten\IP-Symcon\wav\Beeps\Echoton.wav";
ISDN_PlayWave(IID_ISDN, $ISDN_CONNECTION, $file);
$ISDN_Status_Liste[$ID]['Typ']= 'IN_Beep';
}elseif($ISDN_Status_Liste[$ID]['Typ']== 'IN_Beep'){
$file = strftime("%Y-%m-%d %H-%M-%S", Time()).".wav";
echo "Aufnahmedate: ".'C:\Anwendungsdaten\IP-Symcon\wav\Nachrichten\\'.$file."
";
ISDN_RecordWave(IID_ISDN, $ISDN_CONNECTION, 'C:\\Anwendungsdaten\\IP-Symcon\\wav\\Nachrichten\\'.$file);
$ISDN_Status_Liste[$ID]['Typ']= 'IN_Rec';
// Dateiname in Datenbank schreiben
$connectionInfo = array( "Database"=>"Adressen_SQL");
$db=sqlsrv_connect ("ZENTRALE\SQLEXPRESS",$connectionInfo);
$iID = $ISDN_Status_Liste[$ID]['ID'];
$query = "UPDATE Anrufe SET [Anrufe].[Nachricht_neu] = 1, [Anrufe].[Nachricht] = '$file' WHERE [Anrufe].[Index] = $iID";
echo "Eintrag in DB: ".$query."
";
$result = sqlsrv_query($db,$query);
sqlsrv_close($db);
}
break;
case "DTMF":
echo $ISDN_DATA;
/* switch($ISDN_DATA)
{
//Aktion wenn 0 gedrückt wird
case "0":
$file = IPS_GetKernelDir()."temp.wav";
$text = "The Time is ".date("H:i");
TTS_GenerateFile(IID_TTS, $text, $file, 6);
ISDN_PlayWave(IID_ISDN, $ID, $file);
break;
//Aktion wenn falsche Taste gedrückt wird
default:
ISDN_Disconnect(IID_ISDN, $ID);
break;
} */
break;
}
// Staus wenn verändert Sichern
IF($ISDN_Status_Liste != $ISDN_Status_alt){
SetValueString(pISDN_Status,serialize($ISDN_Status_Liste));
}
}
?>