Fritzbox, VOIP und Login PIN

Hello!

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?

LG
Alexander

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.

Ralf

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?

LG Alexander

Ja genau. Nach 12345678 hörst du bei mir einen Text und danach kannst dann noch 1,2,3 oder 4 drücken. Probier’s einfach aus.

Ralf Biedermann

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

 $id = VoIP_Connect(34396, $TelefonzumOeffnen);
 //Maximal 10 Sekunden warten, dass einer abnimmt

 for($i = 0; $i < 10; $i++) {
     IPS_Sleep(1000);
     $c = VoIP_GetConnection(34396, $id);
   
     if($c['Connected']) {
            echo "Connected".chr(10);
            VoIP_SendDTMF(34396, $c, "*1234#");
            echo "DTFM gesendet".chr(10);
            IPS_Sleep(1000);
            VoIP_Disconnect(34396, $id);
            echo "Disconnect durchgeführt".chr(10);
         return;
     }
 }
 //Auflegen, falls keiner abnimmt
 VoIP_Disconnect(34396, $id);

Da gehört ja auch nicht das Array $c rein, sondern die ID der Verbindung, also $id.
Michael

Danke - wohl zulange am Computer!