ISDN Modul verwenden

Das neue ISDN Modul kann nun mit mehreren Anrufen gleichzeitig umgehen und hat mehr Möglichkeiten direkt einzugreifen. (Anrufe annehmen, beenden…)

Hier ein Beispielskript, welches fast alle Möglichkeiten kurz andeutet:


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

 //Aktive Verbindungen ausgeben
 //print_r(ISDN_GetActiveConnections(28189));

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

    if($ISDN_EVENT != "Disconnect")
    {
      $callinfo = ISDN_GetConnectionInfo(28189, $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(28189, $ISDN_CONNECTION); //Anruf annehmen
      }
      break;
     case "Connect":
      //Aktion nach dem Verbinden ausführen
      $file = IPS_GetKernelDir()."temp.wav";
      $text = "Press Zero for current Time";
      TTS_GenerateFile(19668, $text, $file, 6);
      ISDN_PlayWave(28189, $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 "0":
        $file = IPS_GetKernelDir()."temp.wav";
        $text = "The Time is ".date("H:i");
        TTS_GenerateFile(19668, $text, $file, 6);
        ISDN_PlayWave(28189, $ISDN_CONNECTION, $file);
        break;
       //Aktion wenn falsche Taste gedrückt wird
       default:
        ISDN_Disconnect(28189, $ISDN_CONNECTION);
        break;
      }
      break;
    }
 }
 
?>

Für automatische Klingelstreiche:


 //Anrufen und nach 10 Sekunden auflegen
 $id = ISDN_Connect(28189, "Rufnummer");
 sleep(10);
 ISDN_Disconnect(28189, $id);

Grüße, paresy

NEU:

$file = IPS_GetKernelDir()."sounds\\ende.wav";
$len = ISDN_PlayWave(37323, $ISDN_CONNECTION, $file);
IPS_Sleep($len + $delay);

Der Rückgabewert von „ISDN_PlayWave“ liefert die Länge in msec.
Um eine Live-Demonstration zu erhalten,könnt Ihr folgende Nummer wählen:
04504 / 715165
Mit einer Eingabe einer -3- gelangt der Anrufer in das „Mega-Vote-Event-Menü“, hier kann er abstimmen,
wie ihm IP-Symcon gefällt. Es kann eine Schulnote von 1 bis 6 vergeben werden.

MST

… so jetzt geht es - falsche MSN eingestellt - warum sagt es mir keiner :confused:

04504 / 715165

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

MST

Hallo Michael,
habs gerade mal probiert, nach Eingabe der 3 sagte eine Frauenstimme „Bitte legen sie jetzt auf“. Hörte sich ziemlich unfreundlich an :D.
Gruss Jürgen

Hallo paresy,

habe die Befehle des V2.0 ISDN Moduls zur übericht einmahl zusammen geschrieben.
Bitte ergenze diese Liste wenn nötig oder korigiere sie.

Variablen

$ISDN_EVENT

Möglicher Werte „Disconnect“
„Incoming“
„Connect“
„PlayFinish“
„DTMF“

$ISDN_DATA

Funktionen

ISDN_SetMSNIncoming(InstanceID:Integer,MSN:String):Boolean
ISDN_GetMSNIncoming(InstanceID:Integer):String
ISDN_SetMSNOutgoing(InstanceID:Integer,MSN:String):Boolean
ISDN_GetMSNOutgoing(InstanceID:Integer):String
ISDN_SetScriptID(InstanceID:Integer,ScriptID:Integer):Boolean
ISDN_GetScriptID(InstanceID:Integer): Integer

Einstellungen aus ISDN Modul auslesen oder anpassen

ISDN_Connect(InstanceID: Integer, Number: String) : Integer
Ruf Aufbauen

ISDN_Disconnect(InstanceID:Integer,ConnectionID:Integer):Boolean
Ruf beänden

ISDN_AcceptCall(InstanceID:Integer,ConnectionID:Integer):Boolean
Eingehender Anruf annemen

ISDN_PlayWave(InstanceID:Integer,ConnectionID:Integer,Filename:String):Integer
ISDN_StopPlay(InstanceID:Integer,ConnectionID:Integer):Boolean
Wave File über ISDN abspielen b.z.w. beänden

ISDN_RecordWave(InstanceID:Integer,ConnectionID:Integer,Filename:String):Boolean
ISDN_StopRecord(InstanceID:Integer,ConnectionID:Integer):Boolean
Wave File von ISDN Anruf aufnehmen b.z.w. beänden

ISDN_GetActiveConnections(InstanceID:Integer):Array
Connection IDs der Aktiven verbindungen auslesen

Beispiele:

ISDN_GetConnectionInfo(28189, $ISDN_CONNECTION)
ISDN_AcceptCall(28189, $ISDN_CONNECTION);
ISDN_PlayWave(28189, $ISDN_CONNECTION, $file);
ISDN_Disconnect(28189, $ISDN_CONNECTION);
ISDN_Connect(28189, „Rufnummer“);

Was evtl. Noch wichtig wäre: Wenn man die Set/Get Funktionen nutzt muss man am Ende die Einstellungen mit IPS_ApplySettings($id); übernehmen.

paresy

Hallo paresy,

Versuche gerade mit dem ISDN Modul ein Anrufbeantworter und Monitor zu programmieren. Dabei sind mir einige Sachen aufgefallen die ich hier bekant machen möchten.

Beim Abspielen eines WAV Files muß es das Format „PCM 8,000 kHz; 16 Bit; Mono“ haben.

Nach dem Ereignis „Incoming“ und wenn dann vom Anrufer aufgelegt wirt kommt kein Ereignis „Disconnect“.

Wenn mann mit „ISDN_Connect“ eine Verbindung versucht aufzubauen und die Verbindung nocht nicht aufgebaut ist kann man nicht den Status Abfragen. Es kommt auch kein Ereignis das der Verbindungsaufbau fehlgeschlagen ist wenn man z.B. ein ungüliges Ziel angiebt. Ich hätte ein „Disconnect“ erwartet.

Wenn man bei „SetValueString“ die Variablen ID falsch angibt kommt es zum Absturz des Severs (IPS.exe). Auch andere Fehler führen heufig bei der ISDN Ereignisbehandlung zum Absturts des Servers.

Hallo paresy,

versuch gerade bei dem ISDN Modul das Aufnehmen zu benutzen. Leider Funktioniert es nicht. :mad:
Die gestartetet Aufnahme läst sich nicht mehr beänden. Das ISDN Moduk reagiert nicht auf „ISDN_StopRecord“ und auch nicht auf „ISDN_Disconnect“. Es giebt auch kein Ereignis bei dem Auflegen des Telefons.
Im Debug Fenster des ISDN Moduls giebt es kein Eintrag bei „ISDN_StopRecord“. Bei „ISDN_Disconnect“ kommen 3 Meldungen.

>> DISCONNECT_B3_REQ (33920)
??OK
Disconnected 1

Die Verbindung im IPS bleibt aber bestehen. Die ISDN Leitung ist nicht mehr belegt.
Ein wav File wird auch nicht geschrieben.
Ich hoffe du kannst mir weiter helfen.

Vielleicht kanst du auch noch etwas zu meinem vorherigen Posting sagen.

MfG

Thomas

Hallo,

zu meinem letzten Posting vom 20.07.2008 habe ich leider noch keine Antwort. Es wäre schön wenn mir jemand hälfen könnte.
Die letzten Updates habe auch keine offensichtliche Veränderung ergeben.
Das größte Problem ist das der IPS Server häufig nach einem Aufruf des ISDN Skriptes in eine Endlosschleife oder ähnliches gerät und die volle Rechenleistung für sich beansprucht. Ich komme nur durch abschießen des Servers aus dieser Situation wieder heraus.

Ich habe dasselbe Problem - max 2 Anrufe und IPS ist so platt das ich den Task nur noch abschießen kann.

Grüße
Martin

Ich hatte leider noch keine Zeit mir das Problem genauer anzusehen. Ich werde es mir aber für nächste Woche auf den Zettel tun.

paresy

Hallo,

wollte den Thread mal aus der Versenkung holen. Ich habe bei mir nämlich auch das Problem, dass Events nur sproadisch durch kommen.
Speziell wenn man mit ISDN_AcceptCall annimmt, kommt das Connect fast nie durch.

cu…

Kannst du vielleicht ein Beispiel konsturieren und den Bug in der Projektverwaltung posten?

Dort geht es dann auch nicht unter.

Danke!

paresy

Ich habs in die Verwaltung geschrieben. Ich hoffe Ihr könnt damit was anfangen.

Danke für die Hilfe.

cu…

Ich kriege das ISDN Modul nicht zum laufen und habe folgende „Verständnis“ Fragen:

  1. Das ISDN Modul hat in V2 keine Statusvariablen mehr. Müssen evtl. Variablen manuell angelegt werden?

  2. Wodurch werden die internen Variablen $IPS_SENDER, $ISDN_EVENT, $ISDN_CONNECTION, $ISDN_DATA usw. angetriggert? Muß mit GetValue ein Wert von einer extnerne Variable geholt werden.

  3. Wodurch muß das Script für das ISDN Modul (z.B. für Rufannahme) getriggert werden?

Danke für Eure Hilfe.
Christian

Du kannst in den Eigentschaften des ISDN Moduls ein „Callback“ Skript angeben. Dieses wird bei einem Event gestartet und die o.g. Variablen steht dir dort drin dann zur verfügung.

Im ersten Post ist das erste Beispielskript passend und zeigt fast alle Möglichen auswertemöglichkeiten.

paresy

Ok, verstanden. Werde ich gleich heute Abend an meiner IPS Maschine ausprobieren. Danke!

Stellt sich für mich nur noch die Frage, wie mir diese Variablen zur Verfügung gestellt werden für den Fall, daß ich z.B. DTMF-Auswertung bei outoing-calls (z.B. Alarmmeldung) verwenden möchte. In diesem Fall wird das Script nicht durch das ISDN Modul angetriggert und somit stehen vermutlich diese Variablen nicht zur Verfügung?

Gibt es eine Möglichkeit diese Variablen in eine „Externe Variable“ zu bekommen, sodaß diese ISDN Variablen auch allen anderen Scripten zur Verfügung stehen, so wie es in V1 realisiert war (z.B. Status Variable, DTMF Variable)?

Danke!

Hallo paresy,

ich würde gerne meinen ISDN Anrufbeantworter mit deinem ISDN Modul weiter Endwickeln. Im Juli habe ich schon beschrieben was nicht so richtig funktioniert. http://www.ipsymcon.de/forum/f18/isdn-modul-verwenden-5071/#post43070

Seit dem gab es auch schon von diversen anderen Usern Postings zu diesen Thema. Es wäre schön wenn du es in näherer Zukunft lösen könntest. Kann ich irgene wie bei der Lösung des Problems Hälfen ?

Hi,

ich versuche gerade in der V2 eine incoming MSN (also quasi die calling party) in eine Variable zu schreiben. Da ich in php nicht bewandert bin und im Grunde immer nur versuche fertige skripts abzuändern, bleibe ich öfters mal stecken - wenige kleine Dinge gelingen mir (stolz)

Habe gedacht über ISDN_GetMSNIncoming() würde ich die calling party bekommen, aber leider erhalte ich nur meine eigene MSN.

Was ich möchte ist lediglich eine Auswertung eines incoming calls, ob und welche CallerID mitgeliefert wird, danach soll IPS die Finger vom ISD lassen.

Kann mir jemand etwas auf die Sprünge helfen, wäre echt super.

Gruss,

wupperi

Servus,

ich habe das gleiche Problem (PHP-Profi;)). Ich probiere schon einige Tage mit meinen ISDN-Modul und komme auf keine befriedigende Ergebnisse.
Kann uns da niemand helfen?
Vielleich hat jemand ein einfacheres Beispiel-Skript als paresy.

Vielen Dank und Frohe Weihnachten.
Christian