Folgendes möchte ich umsetzen.
Fritzbox mit VOIP vorhanden.
Man ruft von außen an und IPS hebt ab.
Nun muss ein 5 stelliger PIN code eingegeben werden.
Je nach Code wird etwas ausgeführt (Speicherung, Licht etc ) UND
es solll dann eine andere (der obigen PIN zugehörig) Telefonnummer angerufen werden und dort wieder ein der anderen Nummer zugehöriger PIN eingegeben werden.
es gibt also eine PIN Liste
zb
Pin bei Anruf 12345 Zielnummer 0664 12334456 PIN 12345
Pin bei Anruf 23467 Zielnummer 0664 81258712 PIN 23459
Pin bei Anruf 67447 Zielnummer 0664 8968694 PIN 78129
usw
Wie ist das zu realisieren ?(geht das überhaupt mit PINs die zb 5 Stellen haben)
Hat jemand eine Idee?
Hi,
der erste Teil ist einfach. Anrufen und dann auf Pin warten habe ich nicht gemacht sollte aber ähnlich gehen.
Hier mal ein Beispiel das einen Pin mit 8 Zeichen erwartet und dann eine Wav ausgibt und auf 1 oder 2 wartet was eine andere Wav abspielt.
<?php
// ID der Voip Instanz
$id_voip = 42383;
//ID einr Integer die zählt wieviel Zeichen eingegeben wurden
$id_count = 13935;
//ID einer Integer die den Pin enthält. Da ich Integer verwende gehen nur max. 9 Stellen
$id_magic = 22491;
$magic = GetValue($id_magic);
$count = GetValue($id_count);
if($_IPS['SENDER'] == "VoIP") {
IPS_LogMessage("VoIP", "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":
IPS_LogMessage("VoIP", "incoming");
$connection = VOIP_GetConnection($id_voip, $_IPS["CONNECTION"]);
VoIP_AcceptCall($id_voip, $connection["ID"]);
return;
case "Connect":
IPS_LogMessage("VoIP", "connect");
IPS_Sleep(2000);
VOIP_PlayWave($id_voip, $_IPS["CONNECTION"], IPS_GetKernelDir() . "/media/voip/Willkommen.wav");
// VOIP_PlayWave($id_voip, $_IPS["CONNECTION"], IPS_GetKernelDir() . "/media/voip/espeak-ng-new.wav");
SetValue($id_count, 0);
SetValue($id_magic, 0);
return;
case "PlayFinish":
IPS_LogMessage("VoIP", "PlayFinish");
return;
case "Disconnect":
IPS_LogMessage("VoIP", "disconnect");
return;
case "DTMF":
IPS_LogMessage("VoIP", "DTMF");
if ($count == 8) {
if ($magic == 12345678){
switch ($_IPS["DATA"]){
case 1:
VOIP_PlayWave($id_voip, $_IPS["CONNECTION"], IPS_GetKernelDir() . "/media/voip/deinwunsch.wav");
break;
case 2:
VOIP_PlayWave($id_voip, $_IPS["CONNECTION"], IPS_GetKernelDir() . "/media/voip/deinwunsch.wav");
break;
case 3:
VOIP_PlayWave($id_voip, $_IPS["CONNECTION"], IPS_GetKernelDir() . "/media/voip/deinwunsch.wav");
break;
default:
VOIP_PlayWave($id_voip, $_IPS["CONNECTION"], IPS_GetKernelDir() . "/media/voip/Warnichts.wav");
return;
}
}
IPS_Sleep(2000);
VOIP_PlayWave($id_voip, $_IPS["CONNECTION"], IPS_GetKernelDir() . "/media/voip/danke.wav");
IPS_Sleep(2000);
VOIP_Disconnect($id_voip, $_IPS["CONNECTION"]);
return;
}
if ($count < 8){
$magic *= 10;
$magic += $_IPS["DATA"];
$count++;
}
if ($count == 8) {
IPS_Sleep(500);
if ($magic == 12345678){
VOIP_PlayWave($id_voip, $_IPS["CONNECTION"], IPS_GetKernelDir() . "/media/voip/schalten.wav");
}
else{
VOIP_PlayWave($id_voip, $_IPS["CONNECTION"], IPS_GetKernelDir() . "/media/voip/Warnichts.wav");
}
}
SetValue($id_count, $count);
SetValue($id_magic, $magic);
return;
}
}
return;
?>
Die Sache mit Anruf und dann wieder auf PIN warten müsstest Du hinzufügen. Du musst immer alle wichtigen Werte in Variablen zwischenspeichern und lesen da das Script an vielen Aktionen immer wieder verlassen wird.
hey Danke - das hilft als Basis!
Ich muss dann die eingende Verbindung auflegen und nach ein paar Sekunden die neue Verbindung starten und dort auf die Eingabe der PIN warten …
Ganz verstehe ich das nicht
if ($magic == 12345678){
switch ($_IPS["DATA"]){
case 1:
VOIP_PlayWave($id_voip, $_IPS["CONNECTION"], IPS_GetKernelDir() . "/media/voip/deinwunsch.wav");
break;
case 2:
VOIP_PlayWave($id_voip, $_IPS["CONNECTION"], IPS_GetKernelDir() . "/media/voip/deinwunsch.wav");
break;
case 3:
VOIP_PlayWave($id_voip, $_IPS["CONNECTION"], IPS_GetKernelDir() . "/media/voip/deinwunsch.wav");
break;
default:
VOIP_PlayWave($id_voip, $_IPS["CONNECTION"], IPS_GetKernelDir() . "/media/voip/Warnichts.wav");
return;
}
es muss zuerst die Magic Number 12345678 sein - dann muss eine weitere Nummer eingegeben werden? Oder was wird hier erwartet?
Bin einen Schritt weiter:
Ich habe jetzt den Call Eingang soweit und bekomme die ID in eine Variable abgelegt
Mit der ID rufe ich ein WEB Service auf welche die Daten in IPS zurückliefert aus MSSQL
es kommt
„$TelefonzumOeffnen“ (später auch der dynamische PIn - derweilen FIX
Dann soll die Nummer angerufen werden - habe das nach Beispiel in der Doku gebaut aber es wirft immer hier : VoIP_SendDTMF(34396, $c, „*1234#“); einen Fehler …
Warning: Cannot auto-convert value for parameter ConnectionID (Type does not match) in C:\ProgramData\Symcon\scripts\10470.ips.php