ISDN Modul verwenden

Hallo Christian,

Mit diesem Ereignisskript für das ISDN Modul wird einfach eine Meldung ausgegeben wenn ein Anruf hereinkommt:

 if($IPS_SENDER == "ISDN")
 {
    if($ISDN_EVENT != "Disconnect")
    {
      $callinfo = ISDN_GetConnectionInfo("Hier Modul-ID eingeben" /*[ISDN Module]*/, $ISDN_CONNECTION);

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

Hi,

ich bekomme es einfach nicht hin. Ich muss doch im ISDN Modul ein Ereignnis Sript angeben, welche irgend ein Aktion auslöst, oder.

Ich möchte eigentlich nur die Rufnummer des Anrufers in eine Variable schreiben.
Im ISDN Modul habe ich ein Sript mit dem von Christian genannten Beispiel angegeben. Aber wenn ich anrufe passiert garnicht, kein Fenster keine Fehlermeldung garnichts :confused:

Kann mir noch mal jemand auf die Sprünge helfen ??

So, Test läuft :wink:

Das Array Callinfo liefert ja folgendes:

[0] = calledNumber
[1] = CallingNumber
[2] = CIPValue
[3] = State

Die ersten beiden sind klar, CIPValue dürfte Dienstkennung sein (1 ist z.B. Sprache), aber was ist State?

Jens

Hallo,

ich möchte über ISDN eine Datei abspielen, das geht ja wohl mit diesem Befehl:

ISDN_PlayWave(InstanceID:Integer,ConnectionID:Inte ger,Filename:String):Integer

Die InstanceID ist ja wohl die ID des ISDN Moduls, Filename sollte die Datei sein welche ich abspielen möchte.

Aber ich habe keine Ahnung was oder woher ich die ConnectionID kommt :o

Kann mir jemand sagen wie ich die herausbekomme?

Wäre es so richtig ?

TTS_GenerateFile(54981, "Der Rauchmelder in der Werkstatt hat Alarm ausgelst", "D:/daten/ip-symcon/sounds/RM_Werkstatt.wav", 6);
TTS_Speak(54981 /*[Allgemein\Sprachausgabe Flur]*/, "Der Rauchmelder in der Werkstatt  hat Alarm ausgelst",true);


  $id = ISDN_Connect(12688 /*[HMS\ISDN fr Rauchmelder]*/, 015*****");
  ISDN_PlayWave(12688 /*[HMS\ISDN fr Rauchmelder]*/,"d:/daten/ip-symcon /sounds/RM_Werkstatt.wav");
  sleep(10);
  ISDN_StopPlay(12688 /*[HMS\ISDN fr Rauchmelder]*/, $id);
  ISDN_Disconnect(12688 /*[HMS\ISDN fr Rauchmelder]*/,$id);

Hallo Jens,

suche ebenfals das Geheimis von „State“.

Die CallingNumber wird ja nur ohne führende Null(en) geliefert, deshalb ergänze ich diese im Script (wg. Abfrage über Das Ö).

      // Anrufer ermitteln
		$CallingNumber = "0".$callinfo['CallingNumber'];
		if ($callinfo['State'] <> 1){
		   $CallingNumber = "0".$CallingNumber;
		}

Bei State hatte ich gehofft, dass es sich um eine Länderkennzeichnung handelt. Jetzt habe ich endlich mal einen Anruf aus dem Ausland bekommen. Es wird aber trotzdem „1“ geliefert.

Ist das jetzt ein Bug oder gibt es sonst eine Möglichkeit die Länderkennung herauszufinden???:confused:

Gruß
Thorsten

Hallo Thorsten,

leider bin ich da auch noch nicht weiter. Allerdings benutze ich jetzt wieder die Client Socket Variante, da das ISDN Modul scheinbar noch nicht 100%ig arbeitet(zumindest bei mir).

Was die Frage zu State an geht, sollten wir evtl. mal hier nachfragen: IP-Phone-Forum

Gruß
Jens

Hallo Steiner,

wäre es möglich, dass du das ganze Skript mal postest, das du unten angegeben hast? Das wäre erstens ein super Beispiel für alle ISDN Neueinsteiger und Programmier-Nobs, wie mich und zweitens dürfte es 99% aller dies bezüglichen Fragen beispielhaft beantworten. Ich hab die Nummer mal angerufen und da ist ja noch Leben drin … wäre dir sehr dankbar dafür, denn es würde mir Stunden an Arbeit un Schweiß ersparen.

Ok, da scheinbar Steiner nicht mitlist, oder das Skript nicht veröffentlichen möchte, eine Frage dazu:

Für einen Anrufbeantworter muss ja für eine bestimmte Zeit aufgenommen werden und für jeden aufgezeichneten Anruf ein WAV File erzeugt werden (Dateiname könnte ja gut der Timestamp sein, eine Datum/Zeit-Angabe).

Hat jemand dafür ein Beispielskript oder Code-Schnipsel für mich?

Für einen PHP-Nob wie mich, erschließt sich das Thema leider nicht automatisch. :frowning:

Also ein Script leider nicht, aber die Befehle dazu sind:

ISDN_RecordWave(InstanceID:Integer,ConnectionID:In teger,Filename:String):Boolean
ISDN_StopRecord(InstanceID:Integer,ConnectionID:In teger):Boolean
Wave File von ISDN Anruf aufnehmen b.z.w. beenden

Die Befehle kannte ich natürlich schon (standen ja schon im Thread), aber es geht mir um die PHP Zeilen, die das Aufnehmen starten und zeitgesteuert stoppen, sowie das Erzeugen der Datei bzw. Dateinamens.

Also mal Szenario:

Des ruft jemand an, der AB springt an, sagt seinen Ansage-Spruch auf … „PIEP“ … der Anrufer hinterlässt ein Nachricht zwischen 30-60 Sekunden … wenn die Nachricht länger als 60 Sekunden wird, … „PIEP“ … Ansage " maximale Aufzeichnungsdauer erreicht" „PIEP“ … Datei wird so abgespeichert, das man nachher auswerten kann, an welchem Tag und um welche Uhrzeit die Nachricht rein gekommen ist.

Schon mal die Suche benutzt? :rolleyes:

Ich denke so ähnlich dürfte das klappen… ansonsten Steiner mal ne PN schicken, damit er sein Script mal zur Verfügung stellt.

Gruß
Jens

Steiner hat sein Anrufbeantworter-Skript nicht für die V2 angepasst. Entsprechend wird er es auch nicht posten können :wink:

paresy

… aktueller Stand in der V2 - ohne Support - für ein Test:

RUF AN ! JETZT !! 04504 / 715165

Mit einer Eingabe einer:
-2- Bonus-Track (Anlage)
-3- gelangt der Anrufer in das „Mega-Vote-Event-Menü“, hier kann er bstimmen,
wie ihm IP-Symcon gefällt. Es kann eine Schulnote von 1 bis 6 vergeben werden.
-4- Anrufbeantworter
-5- Zeitansage: deutsch
-6- Zeitansage: englisch

MST

$delay = 100;
$allowed_numbers = Array(); //leer = alle
//Aktive Verbindungen ausgeben
//print_r(ISDN_GetActiveConnections(37323 /*[6_Szenarien\ISDN_SMS\ISDN Module 49]*/));
if($IPS_SENDER == "ISDN") {
    //Informationen ins Meldungsfenster ausgeben
    //echo "Event: ".$ISDN_EVENT."
";
   if($ISDN_EVENT != "Disconnect"){
      $callinfo = ISDN_GetConnectionInfo(37323 /*[6_Szenarien\ISDN_SMS\ISDN Module 49]*/, $ISDN_CONNECTION);
      //Mehr Informationen ausgeben
      //print_r($callinfo);
   }
   //Je nach Ereigniss eine Aktion ausführen
   switch($ISDN_EVENT) {
      case "Incoming":
      SetValue(36280 /*[6_Szenarien\ISDN_SMS\Nummer des Anrufers]*/, $callinfo['CallingNumber']);
      //Anruf annehmen? (Entweder leeres Array oder Nummer ist enthalten)
      if((sizeof($allowed_numbers) == 0)
         or in_array($callinfo['CallingNumber'], $allowed_numbers))
      {
         SetValue(23014 /*[6_Szenarien\ISDN_SMS\ISDN Menü Flag]*/, 1); // Incoming
         IPS_Sleep(5000);
         ISDN_AcceptCall(37323 /*[6_Szenarien\ISDN_SMS\ISDN Module 49]*/, $ISDN_CONNECTION); //Anruf annehmen
         SetValue(23014 /*[6_Szenarien\ISDN_SMS\ISDN Menü Flag]*/, 2); // ISDN_CONNECTION
         SetValue(14553 /*[ZBV_Test_QC\Dashboard\IPS Anrufer]*/, GetValue(14553 /*[ZBV_Test_QC\Dashboard\IPS Anrufer]*/) +1);
      }
      break;
      case "Connect":
         if (GetValue(25457 /*[6_Szenarien\ISDN_SMS\ISDN Module 49\IPS ruft jemanden an]*/) == 3){
         
         IPS_Sleep(500);
         //$file = IPS_GetKernelDir()."sounds\\silvia_test.mp3";
         $file = IPS_GetKernelDir()."sounds\\weckdienst.wav";
         $len = ISDN_PlayWave(37323 /*[6_Szenarien\ISDN_SMS\ISDN Module 49]*/, $ISDN_CONNECTION, $file);
         IPS_Sleep($len + $delay);
         $file = IPS_GetKernelDir()."sounds\\h1.wav";
         $len = ISDN_PlayWave(37323 /*[6_Szenarien\ISDN_SMS\ISDN Module 49]*/, $ISDN_CONNECTION, $file);
         IPS_Sleep($len + $delay);
         
         } else {
         
         $file = IPS_GetKernelDir()."sounds\\willkommen.wav";
         $len = ISDN_PlayWave(37323 /*[6_Szenarien\ISDN_SMS\ISDN Module 49]*/, $ISDN_CONNECTION, $file);
         IPS_Sleep($len);
         //IPS_RunScript("Zeitansage_ISDN");
         //IPS_Sleep(5000);
         $file = IPS_GetKernelDir()."sounds\\hauptmenue.wav";
         $len = ISDN_PlayWave(37323 /*[6_Szenarien\ISDN_SMS\ISDN Module 49]*/, $ISDN_CONNECTION, $file);
         IPS_Sleep($len + $delay);
         $file = IPS_GetKernelDir()."sounds\\wahl.wav";
         ISDN_PlayWave(37323 /*[6_Szenarien\ISDN_SMS\ISDN Module 49]*/, $ISDN_CONNECTION, $file);
         }

         SetValue(23014 /*[6_Szenarien\ISDN_SMS\ISDN Menü Flag]*/, 3); // Hauptmenue
         
      break;
      case "Disconnect":
      //Aktion, wenn Anruf beendet wurde
      //"ISDN_GetConnectionInfo" ist hier nicht mehr verfügbar!
      SetValue(23014 /*[6_Szenarien\ISDN_SMS\ISDN Menü Flag]*/, 0); // Disconnect
      SetValue(25457 /*[6_Szenarien\ISDN_SMS\ISDN Module 49\IPS ruft jemanden an]*/, 0);
      break;
      case "PlayFinish":
      //Aktion, wenn Wav abgespielt wurde
      break;
      case "DTMF":
         switch(GetValue(23014 /*[6_Szenarien\ISDN_SMS\ISDN Menü Flag]*/)) {
            case 3:  // Menü - Auswahl
               switch($ISDN_DATA)  {
                  //Aktion wenn 0 gedrückt wird
                  case "0":

                  break;
                  case "3":
                     //  SetValueString("WebS_ISDN_Text", "IP-Symcon Mega Vote Event");
                     $file = IPS_GetKernelDir()."sounds\\voteevent.wav";
                     $len = ISDN_PlayWave(37323 /*[6_Szenarien\ISDN_SMS\ISDN Module 49]*/, $ISDN_CONNECTION, $file);
                     IPS_Sleep($len + $delay);
                     $file = IPS_GetKernelDir()."sounds\\zahl1bis6.wav";
                     ISDN_PlayWave(37323 /*[6_Szenarien\ISDN_SMS\ISDN Module 49]*/, $ISDN_CONNECTION, $file);
                     SetValue(23014 /*[6_Szenarien\ISDN_SMS\ISDN Menü Flag]*/, 31); // Mega Vote
                     return;
                  case "4":  // AB
                     $file = IPS_GetKernelDir()."sounds\\ab_und_auflegen.wav";
                     $len = ISDN_PlayWave(37323 /*[6_Szenarien\ISDN_SMS\ISDN Module 49]*/, $ISDN_CONNECTION, $file);
                     IPS_Sleep($len + $delay);
                     $file = IPS_GetKernelDir()."sounds\\beep.wav";
                     $len = ISDN_PlayWave(37323 /*[6_Szenarien\ISDN_SMS\ISDN Module 49]*/, $ISDN_CONNECTION, $file);
                     IPS_Sleep($len + $delay);
                     $stamp = date("H_i_s");
                     ISDN_RecordWave(37323 /*[6_Szenarien\ISDN_SMS\ISDN Module 49]*/, $ISDN_CONNECTION, "D:/Daten/AB_Ansagen/ab".$stamp.".wav");
                     SetValue(16427 /*[ZBV_Test_QC\Dashboard\Neue AB Meldung]*/, True);
                     return;

                     case "5":  // // Zeit deutsch
                        $date = getdate();
                        $hrs = $date['hours'];
                        $min = $date['minutes'];
                        $file = IPS_GetKernelDir()."sounds\\zeit/" . $hrs . "uhr.wav";
                        $len = ISDN_PlayWave(37323 /*[6_Szenarien\ISDN_SMS\ISDN Module 49]*/, $ISDN_CONNECTION, $file);
                        IPS_Sleep($len + $delay);
                        $file = IPS_GetKernelDir()."sounds\\zeit/" . $min . "minute.wav";
                        $len = ISDN_PlayWave(37323 /*[6_Szenarien\ISDN_SMS\ISDN Module 49]*/, $ISDN_CONNECTION, $file);
                        return;

                        case "6": // Zeit englisch
                        $file = IPS_GetKernelDir()."temp.wav";
                        $text = "The Time is ".date("H:i");
                        TTS_GenerateFile(38200 /*[6_Szenarien\Media IR\Text To Speech]*/, $text, $file, 6);
                        ISDN_PlayWave(37323 /*[6_Szenarien\ISDN_SMS\ISDN Module 49]*/, $ISDN_CONNECTION, $file);
                        return;
                      //Aktion wenn falsche Taste gedrückt wird
                     default:
                      // SetValue(23014 /*[6_Szenarien\ISDN_SMS\ISDN Menü Flag]*/, 3); // No Funktion > bleibt bei 3 !!!
                      $file = IPS_GetKernelDir()."sounds\
ofunction.wav";
                     ISDN_PlayWave(37323 /*[6_Szenarien\ISDN_SMS\ISDN Module 49]*/, $ISDN_CONNECTION, $file);
                     return;
            }   // switch($ISDN_DATA)

// Mega Vote
             case 31:                                  // IPS-Forum
                     if((int)$ISDN_DATA < 7) {
                        $file = IPS_GetKernelDir()."sounds\\eingegeben.wav";
                        $len = ISDN_PlayWave(37323 /*[6_Szenarien\ISDN_SMS\ISDN Module 49]*/, $ISDN_CONNECTION, $file);
                        IPS_Sleep($len + $delay);
                        $file = IPS_GetKernelDir()."sounds\\".$ISDN_DATA.".wav";
                        $len = ISDN_PlayWave(37323 /*[6_Szenarien\ISDN_SMS\ISDN Module 49]*/, $ISDN_CONNECTION, $file);
                        IPS_Sleep($len + $delay);
                        SetValue(58697 /*[ZBV_Test_QC\Dashboard\Last Vote]*/, $ISDN_DATA);
                        $file = IPS_GetKernelDir()."sounds\\registriert.wav";
                        $len = ISDN_PlayWave(37323 /*[6_Szenarien\ISDN_SMS\ISDN Module 49]*/, $ISDN_CONNECTION, $file);
                        SetValue(21212 /*[ZBV_Test_QC\Dashboard\Mega Vote Anrufer]*/, GetValue(21212 /*[ZBV_Test_QC\Dashboard\Mega Vote Anrufer]*/) +1);
                        IPS_Sleep($len + $delay);
                        $file = IPS_GetKernelDir()."temp.wav";
                        $text = "Your Call was Number: " .GetValue(21212 /*[ZBV_Test_QC\Dashboard\Mega Vote Anrufer]*/);
                        TTS_GenerateFile(38200 /*[6_Szenarien\Media IR\Text To Speech]*/, $text, $file, 6);
                        $len = ISDN_PlayWave(37323 /*[6_Szenarien\ISDN_SMS\ISDN Module 49]*/, $ISDN_CONNECTION, $file);
                        IPS_Sleep($len + $delay);
                        $file = IPS_GetKernelDir()."sounds\	extnachricht.wav";
                        $len = ISDN_PlayWave(37323 /*[6_Szenarien\ISDN_SMS\ISDN Module 49]*/, $ISDN_CONNECTION, $file);
                        IPS_Sleep($len + $delay);
                        $file = IPS_GetKernelDir()."sounds\\ende.wav";
                        $len = ISDN_PlayWave(37323 /*[6_Szenarien\ISDN_SMS\ISDN Module 49]*/, $ISDN_CONNECTION, $file);
                         SetValue(23014 /*[6_Szenarien\ISDN_SMS\ISDN Menü Flag]*/, 3); // Menü

                     } else {
                        $file = IPS_GetKernelDir()."sounds\\falsch.wav";
                        ISDN_PlayWave(37323 /*[6_Szenarien\ISDN_SMS\ISDN Module 49]*/, $ISDN_CONNECTION, $file);
                     }
                     return;
                     
          } // switch($flagisdn)
      }
}

?>

sounds.zip (52.3 KB)

Stimme ist etwas sehr schnell aber geht!

Super vielen Dank Steiner … könntest du noch die dazugehörigen WAV Dateien anhängen? In dem Zip sind nur 2 mit „IP SYMCON“ drin, aber das Skript nutzt ja noch viele, viele mehr.

Hallo an alle,

ich habe ein komisches Problemchen. Aus dem ISDN Demo Ereignisscript habe ich mir etwas zusammen geschnitten, was meinen Bedürfnissen entspricht.
Bei einem Anruf soll die A-Rufnummer (also die des Anrufers) in eine Variable geschrieben werden. Wenn keine Nummer kommt, soll eine ‚0‘ geschrieben werden.
Das Problem ist, dass das Script in diesem Fall gar nicht bis dahin läuft.

Mache ich was falsch? (Und wenn ja, was?)

Mein Eventscript sieht zur Zeit so aus:


<?
 $allowed_numbers = Array(); //leer = alle
 //Aktive Verbindungen ausgeben
 //print_r(ISDN_GetActiveConnections(19768 /*[.CAPI\ISDN Module]*/ ));
 if($IPS_SENDER == "ISDN")
 {
    //Informationen ins Meldungsfenster ausgeben
    echo "Event: ".$ISDN_EVENT."
";
    if($ISDN_EVENT != "Disconnect")
    {
      $callinfo = ISDN_GetConnectionInfo(19768 /*[.CAPI\ISDN Module]*/ , $ISDN_CONNECTION);
      //Mehr Informationen ausgeben
      print_r($callinfo);
    }
    //Je nach Ereigniss eine Aktion ausführen
    switch($ISDN_EVENT)
    {
     case "Incoming":
     if ($callinfo['CallingNumber']) {
      SetValueString(54976 /*[.CAPI\IncomingCLIP]*/ ,$callinfo['CallingNumber']);
      } else {
        SetValueString(54976 /*[.CAPI\IncomingCLIP]*/ ,'0');
      }
   }
}
?>

Schonmal vielen Dank für Eure Antworten!

LG

Daniel

Hi Daniel,

ich glaube das ist immer noch einer der Fehler vom ISDN Modul … das Problem hatten schon mehrere Leute …
Client Socket wäre dann evtl. etwas für dich.

Gruß
Jens

Hier läuft das Modul ohne Probleme. Kommt denn der Inhalt von $callinfo?

Hi,

ich schaue ja nach dem „Incoming“-Event. Und da geht er gar nicht rein. In den Meldungen passiert auch rein gar nichts.

Ist für mich nicht wirklich schlimm, wollte nur wissen ob es „normal“ ist.

LG

Daniel