VoIP Anrufer Nummer auswerten

Sagt’ mal,
kann ich mit dem VoIP Modul eigentlich auch irgenwie die Anrufernummer ausfindig machen, auch ohne das Gespräch selber mit IPS anzunehmen?

Ich kann ja mit
array VoIP_GetConnection (integer $InstanzID, integer $VerbindungsID)
die Verbindungsdaten auslesen, allerdings fehlt mir hier ja dann immer die VerbindungsID?

Wenn ich diese weiss, kann ich die Nummer ja abfragen, aber wie bekomme ich während des klingelns diese ID um VoIP_GetConnection auszulösen?

Array
(
    [ID] => 4
    [TimeStamp] => 1617617318
    [Number] => sip:0172*******@fritz.box
    [Direction] => 0
    [Connected] => 
    [Disconnected] =>
)

Danke u. viele Grüße,
Doc

Du bekommst im Skript (wenn ein Anruf kommt) ja die VerbindungsID mitgeteilt über $_IPS['CONNECTION'].

paresy

Oh man,
an Systemvariablen habe ich gar nicht gedacht.

Damit funktioniert es natürlich.

Danke dir.
VG,
Doc

Da ich hier auch auf der Suche war, habe ich das gleich mal versucht. Ich bekomme da jedoch nicht die Anrufnummer. Als Ausgabe kommt da ein Counter, bei jeder Verbindung wird die Ausgabe von $_IPS[‚CONNECTION‘] um 1 hochgezählt. Mache ich da etwas falsch?

Tom

Jupp. Du willst das hier haben:

var_dump(VOIP_GetConnection($id, $_IPS['CONNECTION']));

paresy

Und schon geht es. DANKE!

@paresy Ich habe hier doch noch eine Frage. Ich möchte anhand des Anrufes und der identifizierten Rufnummer, verschiedene Aktionen ausführen. Da es auch um eine angebundene Türstation geht, soll die Stadion weiter klingeln. Das bekomme ich einfach nicht hin. Wenn ich die Unterscheidung auf Basis „Annehmen (Aus Liste)“ mache, werden nicht hinterlegte Rufnummern abgelehnt (Teilnehmer erhält Besetzton). Bei „Annehmen (Alle)“ nimmt das Script immer entgegen und der Teilnehmer hört sofort keinen Rufton mehr. Bei Standardaktion „Kein(e)“ klingelt es zwar wie gewünscht weiter, das Abarbeitungsskript wird aber auch nicht ausgeführt.

Kann ich mein Vorhaben irgendwie anders umsetzen?

Tom

Genau dann sollte trotzdem das Skript ausgeführt werden. Wie sieht denn dein Skript aus?

paresy

Es ist eine Adaptionen euers Skripts:

if (GetValue($ips_log)) IPS_LogMessage("VOIP", $_IPS['SENDER']);
if($_IPS['SENDER'] == "VoIP") {
    if (GetValue($ips_log)) IPS_LogMessage("VOIP", "Sender VOIP");
    // Wir wollen nur eingehende Anrufe verarbeiten
    if(VoIP_GetConnection($id_voip, $_IPS["CONNECTION"])["Direction"] == 1 /* Ausgehend */) {
        return;
    }
 
    switch($_IPS["EVENT"]) {
        case "Incoming":
            if (GetValue($ips_log)) IPS_LogMessage("VOIP", "Ein eingehender Anruf");
            VOIP_SetData($id_voip, $_IPS["CONNECTION"], json_encode([
                "Number" => $_IPS["DATA"],
                "Vote" => 0
            ]));
            break;
 
        case "Connect":
            if (GetValue($ips_log)) IPS_LogMessage("VOIP", "Es wurde eine Verbindung aufgebaut");
            $data = json_decode(VOIP_GetData($id_voip, $_IPS["CONNECTION"]), true);
            VOIP_PlayWave($id_voip, $_IPS["CONNECTION"], IPS_GetKernelDir() . "/media/voip/01-wilkommen.wav");
            IPS_LogMessage("VoIP", "Verbindung wurde aufgebaut");
            SetValue($id_count, 0);
            SetValue($id_funktion01, 0);
            IPS_Sleep(500);
            break;
 
        case "Disconnect":
            if (GetValue($ips_log)) IPS_LogMessage("VOIP", "Es wurde eine Verbindung beendet"); 
            break;        
 
        case "DTMF":
...

Was müsste ich hier ändern, das wenn dieser Teil ausgeführt wird, eine Rufannahme erfolgt?

Eventuell noch zur Erläuterung. Ich frage die kommende Nummer ab und möchte dann:

  • kommenden Nummer „10“ nehme Ruf nicht an (es klingelt weiter) und initiiere eine Durchsage „es steht jemand an der Tür“
  • kommende Nummer „11“ nehme an und arbeite das o.g. Script ab und reagiere auf die DTMF Eingabe

Tom

@paresy Hättest Du hier eventuell noch einen Tipp für mich?

Tom

Du wills den Code bei „Incoming“ platzieren. Das wird aufgerufen, wenn es quasi nur „klingelt“.

paresy

Ja, da habe ich aber auch nur die Möglichkeit die Rufnummerauswertung zu machen, wenn die Instanz auf „Keine(e)“ steht. Mit dieser Einstellung kann ich aber die zweite Aufgabe nicht erfüllen…

  • kommenden Nummer „10“ nehme Ruf nicht an (es klingelt weiter) und initiiere eine Durchsage „es steht jemand an der Tür“
  • kommende Nummer „11“ nehme an und arbeite das o.g. Script ab und reagiere auf die DTMF Eingabe

Tom

Warum kannst du das nicht machen? Werte es aus und nimm nur den Call entgegen den du willst: VoIP_AcceptCall —IP-Symcon :: Automatisierungssoftware

paresy

Und das mag nicht.

    switch($_IPS["EVENT"]) {
        case "Incoming":
            if (GetValue($ips_log)) IPS_LogMessage("VOIP", "Ein eingehender Anruf");
            VOIP_SetData($id_voip, $_IPS["CONNECTION"], json_encode([
                "Number" => $_IPS["DATA"],
                "Vote" => 0
            ]));
            if($nummer_erkannt == $nummer_klingeln) {
              echo "Wir lassen es weiter klingeln und es passiert nichts";
            }

            if($nummer_erkannt == $nummer_annehmen) {
              echo "Jetzt nehmen wir den Ruf an";
              VoIP_AcceptCall($id_voip, $nummer_erkannt); 
           }
           break;

VoIP_AcceptCall($id_voip, $nummer_erkannt) hier nehme ich bei $nummer_ermittelte Rufnummer. Oder mein VerbindungsID (das zweite Parameter) etwas anderes?

Wo wird denn überhaupt diese Variable definiert? Und VOIP_AcceptCall braucht als 2. Parameter die ConnectionID und nicht die Rufnummer.

paresy

1 „Gefällt mir“

Das wars. Danke für die Hilfe! Die Var nummer_erkannt war nicht die gesamte ConnectionID sondern schon die extrahierte reine Rufnummer. Ein

$var_verbindungsid = json_decode($_IPS["CONNECTION"]);

bringt das gewünschte Ergebnis.

Tom