Verschachtelung im ISDN Modul V2?

Hallo ich habe zwei Fragen zum ISDN Modul in IPS V2.

Frage 1: Wie kann ich eine Verschachtelung im ISDN Modul V2 umsetzen? Für die V1 gibt es hierzu eine Beschreibung im Forum, allderings konnte ich diese Information bis jetzt noch nicht auf die V2 umsetzen.

In diesem Thread (Link) ist das ISDN V2 Modul beschrieben, jedoch ohne Beispiel zur Menüverschachtelung. Könnte Ihr mir hierzu Tipps geben (am besten mit einem Beispiel). Danke!

Frage 2: Zudem möchte ich die incoming calls mit einem 4-stelligem PIN abfragen. Wenn dieser Falsch ist, soll die Verbindung disconnected werden. Wie kann ich mehrstellige DTMF Codes abfragen?

Vielen Dank für Eure Tipps!!!

Mir fällt im Moment nur was zu 2 ein:
Du musst Dir schon die einzelnen Ziffern zusammensetzen.
Mach Dir eine Variable (String) in der du die Ziffern sammelst. Wenn du 4 beisammen hast kannst du Sie bewerten und entsprechend reagieren.

cu…

Wie McFly schon sagte, musst du dir ein Skript schreiben, welches die aktuelle Menüposition/DTMF Töne puffert und auswertet.

paresy

Hallo Leute!

Als Anfänger hat man es nicht leicht.
Aber so nach und nach sammelt man Erfahrungen mit IPS.

Könnt Ihr mal ein Scripbeispiel liefern womit man aus DTMF eingaben einen String sammelt und auswertet?

Oder wo finde ich das?

 case "DTMF":
			$code = GetValueString(28482);
			SetValueString(28482,$code.$ISDN_DATA);

			  if ($ISDN_DATA == "*")
      		{
						if ($code == "1234")
						{
								// ausführbare Code
				   			break;
				      }

	   				if ($code == "5678")
        				{
        						// ausführbare Code
                			break;
						}

Viel Spaß
Christian

Ich habe jetzt mal Codes zusammenkopiert.
Das ist zwar nicht die feine Art, aber besser kann ich es noch nicht.
Man lernt ja beim experimentieren was die einzelnen Tools bewirken.

Aber an diesem Code stimmt was nicht.
Egal was ich als DTMF sende, es legt immer auf.

   <?
 $allowed_numbers = Array(" "); //leer = alle

 //Aktive Verbindungen ausgeben
 //print_r(ISDN_GetActiveConnections(28189 /*[Objekt #28189 existiert nicht]*/));

 if($IPS_SENDER == "ISDN")
 {
    //Informationen ins Meldungsfenster ausgeben
    echo "Event: ".$ISDN_EVENT."
";

    if($ISDN_EVENT != "Disconnect")
    {
      $callinfo = ISDN_GetConnectionInfo(57522 /*[Module\ISDN Module]*/, $ISDN_CONNECTION);

      //Mehr Informationen ausgeben
      print_r($callinfo);
    }

    //Je nach Ereigniss eine Aktion ausführen
    switch($ISDN_EVENT)
    {
     case "Incoming":
      //Anruf annehmen? (Entweder leeres Array oder Nummer ist enthalten)
      if((sizeof($allowed_numbers) == 0)
       or in_array($callinfo['CallingNumber'], $allowed_numbers))
      {
         ISDN_AcceptCall(57522 /*[Module\ISDN Module]*/, $ISDN_CONNECTION); //Anruf annehmen
      }
      break;
     case "Connect":
      //Aktion nach dem Verbinden ausführen
      $file = IPS_GetKernelDir()."temp.wav";
      $text = "Bitte den Code eingeben.";
      TTS_GenerateFile(43167 /*[Module\Text To Speech]*/, $text, $file, 6);
      ISDN_PlayWave(57522 /*[Module\ISDN Module]*/, $ISDN_CONNECTION, $file);
      break;
     case "Disconnect":
      //Aktion, wenn Anruf beendet wurde
      //"ISDN_GetConnectionInfo" ist hier nicht mehr verfügbar!
      break;
     case "PlayFinish":
      //Aktion, wenn Wav abgespielt wurde
      break;
     case "DTMF":
      switch($ISDN_DATA)
      {
       //Aktion wenn 0 gedrückt wird
        case "DTMF":
            $code = GetValueString(29303 /*[Module\ISDN Module\TeleString]*/);
            SetValueString(29303 /*[Module\ISDN Module\TeleString]*/,$code.$ISDN_DATA);

              if ($ISDN_DATA == "*")
              {
                        if ($code == "1234")
                        {
                               print "hallo";// ausführbare Code
                               break;
                      }

                       if ($code == "5678")
                        {
                                // ausführbare Code
                            break;
								}
								}
       //Aktion wenn falsche Taste gedrückt wird
       default:
        ISDN_Disconnect(57522 /*[Module\ISDN Module]*/, $ISDN_CONNECTION);
        break;
      }
      break;
    }
 }

?>

Bin jetzt müde… evtl. kann ich das Problem ausgeschlafen mit eurer Hilfe lösen… Nächtle!

Vielleicht hilfe dir der Telebutler weiter. Ich kann nur sagen das sie SW Super ist man kann sogar Datenbankabfragen damit machen.

Produkte

Ein paar PHP Grundlagen solltest du haben und Sinnvoll mit IPS arbeiten zu können

Vielen Dank für deinen Vorschlag.
Aber ich möchte das mit IPS realisieren. :loveips:
Mir fehlt es noch verständnis.
Aber das wird von Versuch zu Versuch besser.
Hier sehe ich den Fehler nicht.
Aber evtl. kann mir den jemanden zeigen.

Letzten endes möchte ich mit einem Telefonanruf meine Haustür öffnen lassen.

Hallo ?:rolleyes:,

mach mal das 1.

     case "DTMF":
      switch($ISDN_DATA)
      { 
}

raus.

evtl. testweise das

ISDN_Disconnect

und schau ob sich deine Variable ändert wenn Du 1234 eintipst.

Gruß
Christian

Guten morgen…

$code = GetValueString(29303 /*[Module\ISDN Module\TeleString]*/);
            SetValueString(29303 /*[Module\ISDN Module\TeleString]*/,$code.$ISDN_DATA);

hiermit Fütterst Du ja die Variable 29303 mit den vomTelefon eingegebenem Code… Wann wird diese Variable Initialisiert? (Irgendwann muss diese Var geleert werden entweder beim „abheben“ oder beim „auflegen“

  //Aktion wenn falsche Taste gedrückt wird
       default:
        ISDN_Disconnect(57522 /*[Module\ISDN Module]*/, $ISDN_CONNECTION);
        break;

Ich glaube mal dies ist Dein Hauptproblem…
Was ist denn eine Falsche Taste? Wenn Du einen Wahlfreisen Code eingibst… ist wohl jede Taste / Zahl zunächst mal richtig… also muss das m.E. komplett raus.

Du möchtest Deine Pin mit einem * abschließen. Hierbei übernimmt der * quasi die Enter-Taste. Das kann man so machen. Bedenke dann aber dass Du in Deinem zu überprüfenden Pin das *-Zeichen mit dranhängst… denn zu dem Zeitpunkt in dem Du die Variable überprüftst (die 29303) ist das *-Zeichen ja schon an die Variable angehängt.

             {
                        if ($code == "1234*")
                        {
                               print "hallo";// ausführbare Code
                               break; 

Wäre dann m.E. richtiger.
Nett ist es vielleicht noch wenn Du die länge der Variable 29303 abfragst und bei z.b. >5 Zeichen die Trennung einbaust. Ggf. noch die Caller-ID Protokollieren :wink:

//Sven

Wieso nicht einfach per Rufnummernerkennung?

Hallo,
hmmmmm die Idee find´ ich auch nicht schlecht. Man nehme eine nicht benutzte geheime MSN des Anschlusses. Wenn man dann diese von seinem Handy aus anruft, geht der Türöffner auf/zu ohne dass IPS abnehmen muss…

<?
$debug = true;

$authorized_numbers = Array('1713333333','171234567'); //anrufende MSN z.b. Dine Handynr.
$allowed_msn = Array("7654321"); //einehende (geheime) MSN

if($IPS_SENDER == "ISDN Module") // (57522 /*[Module\ISDN Module]*/)
	{
	switch($ISDN_EVENT)
		{
		case "Incoming":
			if(in_array($callinfo['CallingNumber'], $authorized_numbers))
			{
				if(in_array($callinfo['CalledNumber'], $allowed_msn))
				{
					// Hier den Türöffnercode reinpacken.
				}
			}
		break;
		} // switch($ISDN_EVENT)
	} // if($IPS_SENDER == "ISDN")
?>

Ist nicht getestet… und auf das Notwendigste für diesen Zweck begrenzt. Der Vorteil, wenn die Nummer nicht abnimmt ist der, dass man die geheime MSN nicht mit ´nem Nummernscanner findet und 2. keine Kosten entstehen.

//Sven

Hallo,
ich habe mittlerweile begriffen, dass die Variablen $ISDN_EVENT etc. bei eingehenden (!) Anrufen im getriggerten Skript automatisch zur Verfügung stehen. Frage:

Wie registriere ich DTMF Töne bei ausgehenden Telefonaten in IPS?

LG; Marcus