IP-Symcon Anrufbeantworter

Dieses Skript stammt von „Schlimmerfinger“.
Es demonstriert, wie ein Anrufbeantworter zu programmieren ist.
Wer Lust hat kann es weiter ausbauen: z.B. kann man anhand der Rufnummer (Datenbank?) verschiedene, personenbezogene Ansagetexte abspielen…
Ich freue mich auf Eure Ideen :slight_smile:

MST

Tipp: http://de3.php.net/manual/de/function.strlen.php
int strlen ( string str ) / Gibt die Länge der Zeichenkette string zurück.
Ist $callnum z.B. 2-stellig dann handelt es sich um einen internen Anruf (bei einer TK-Anlage)
und man kann dies im Skript entsprechend berücksichtigen.

 
<?
/*
*******************************
 IP-SYNCOM Event Scripting
*******************************
*/

//File: Voicemail.ips.php
// Trigger: "ISDNStatus"
$buffer = GetValueString("ISDNStatus");

if($buffer=="") {
   exit;
}
$items = explode(chr(13).chr(10), $buffer);
foreach($items as $item) {

// siehe: http://de.php.net/manual/de/function.substr.php
// substr -- Gibt einen Teil eines Strings zurück
// string substr ( string string, int start [, int length] )

// wer hat angerufen?
 if (substr($item, 0, 13) == "CallingNumber"){           // nach "CallingNumber" suchen
   $callnum = substr($item, 14, 20);                    // der Rest ist die Telefonnummer
 }

// hier wird der Status ausgewertet und der eigentliche AB gestartet
   if ($item == "Connected"){
   
   // SK: Datum und Zeit ermitteln
	DEFINE("SK_DATE",Date("d.m.Y"));
	DEFINE("SK_TIME",Date("H-i-s"));

   ISDN_PlayWave(24606,"C:/Programme/IP-SYMCON/sounds/abansage.wav");     //
   IPS_Sleep(4000);
   ISDN_PlayWave(24606,"C:/Programme/ip-symcon/sounds/dingdong.wav");
   IPS_Sleep(3000);
   ISDN_RecordWave(24606, "C:/Programme/ip-symcon/sounds/Nachricht von ".$callnum." am ".SK_DATE."_".SK_TIME.".wav");

   }
}

// Auflegen erkennen und Aufnahme stoppen
$items = explode(chr(13).chr(10), $buffer);
foreach($items as $item)

if($item == "Disconnected") {
   ISDN_StopRecord(24606);
   }
//... und den Status-Buffer löschen
SetValueString("ISDNStatus", "");
exit;

?>

PS:
Die im o.g. Skript verwendete Instance–ID muß für Ihre Umgebung angepasst werden.
Benutzen Sie die Tastenkombination CTRL + I um InstanceID Selector zu öffnen und wählen Sie die entsprechende Instance aus.
Außerdem müssen die WAV-Dateien vorher mit dem Befehl:
TTS_GenerateFile(37579, „Dies ist eine Ansagetext….“, „C:/Programme/ip-symcon/sounds/abansage.wav“, 6);
generiert werden und die Sleep-Zeiten angepasst werden.
Bei Fragen, Unklarheiten, Anregungen usw. bitte hier posten!!!

Hallo,
eine kleines ;-))) Fragezeichen bleibt aber noch. Das Script lief soweit ganz gut, solang ich von „Intern“ anrufe. Mach ich einen Anruf über „extern“, wird erstens nichts angezeigt und auch nachfolgende Anrufe von „intern“ werden dann nicht mehr erkannt. Der Dateinname lautet dann einfach „Nachricht von Datum-Uhrzeit“.wav.
Könnt Ihr das nochmals verifizieren.

Danke

Schlimmerfinger

Hallo Schlimmerfinger,

überprüfe bitte einmal den ISDN-Status:

Rechte Maustaste in den „Variables“ dann „Evaluate/Modify“ und „Pinned“, damit das Fenster im Vordergrund bleibt (siehe Bild).
Meine interne Nummer ist 48 und die beiden ** kamen aus meiner TK-Anlage und
verursachten logischerweise einen Datei Fehler. Ich habe die ** durch ein „i“ für "Intern"ersetzt.

http://de.php.net/manual/de/function.strtr.php / $callnum = strtr($callnum, „*“, „i“);

Ich hoffe, es hilft Dir weiter.

MST

isdnstatus.jpg

Hab das Scrtipt probiert, nummer kann nummer sehen usw… aber keine Rufannahme? Muss ich noch etwas konfigurieren, so das der Ruf angenommen wird?

Gruß

Lothar

Hallo Lothar,
Du mußt in der ISDN Instanz sagen, welche Gespräche er annehmen soll. Wenn er alle gespräche annehmen soll trage unten einfach die 0 ein.

MfG

Schlimmerfinger

Hallo zusammen,
ich kann kaum glauben, daß das Script so bei euch funktioniert.
Im Teil „Auflegen erkennen und Aufnahme stoppen“ fehlen die geschweiften Klammern die den foreach-Block einschließen. Ansonsten wird die if Anweisung nur ein einziges mal überprüft.
Außerdem muß das „Status-Buffer löschen“ innerhalb des if-Blockes ausgeführt werden.

Anbei meine Korrekturen.


// Auflegen erkennen und Aufnahme stoppen
$items = explode(chr(13).chr(10), $buffer);
foreach($items as $item) {

if($item == "Disconnected") {
   ISDN_StopRecord(27194);

   //... und den Status-Buffer löschen
   SetValueString("IsdnStatus", "");
   exit;
   }
}
?>

Kann man irgendwo einstellen, daß die Rufannahme erst nach einer einstellbaren Zeit erfolgt?
Jetzt geht der Anrufbeantworter beim ersten Klingeln dran. Ich möchte aber, daß der AB erst nach 20 Sekunden abnimmt, dann kann ich vorher den Telefonhörer abnehmen.

Noch nicht. Ich werde aber eine dementsprechende Funktion einbauen.

Grüße, paresy

Hallo,

ich habe das Problem bei mir folgendemaßen gelöst:

Vorraussetzung: Telefonanlage

[ul]
[li]Reinkommender Anruf wird auf Nebenstelle 11 signalisiert.
[/li][li]Wenn keiner abnimmt (30 Sek.), dann wird das Gespräch zusätlich an Nebenstelle 31 signalisiert.
[/li][li]Nebenstelle 31 ist eine MSN auf die die ISDN-Karte am internen S0-Bus reagiert (Anrufbeantworterscript).
[/li][/ul]
Funktioniert ohne Probleme.

Gruß

DVB-Freak

Hallo,
habe auch interesse an einen anrufbeantworter. habe das script hier ml probiert, aber es gibt noch einige fragen.
was bedeutet diese zeile
ISDN_PlayWave(61930
muss ich da noch eine variable erstellen, oder welche id ist dies ?
TTS_GenerateFile(37579, „Dies ist eine Ansagetext….“, „C:/Programme/ip-symcon/sounds/abansage.wav“, 6);
habe ich schon fertig.
wenn ich anrufe bekomme ich unter isdnstatus folgendes
[17:34:01] = 'CallingNumber:1708560402
CalledNumber:27048
Disconnected

mfg uwe

Hast du die Nummer bei „Accept“ in der PropertyPage eingetragen?

61930 musst du wie überall gegen deine InstanceID deines ISDN Moduls tauschen.

Grüße, paresy

Hallo paresy,

welche nummer muss ich wo eintragen ?

Wirf doch mal bitte hier einen Blick drauf:

http://www.ipsymcon.de/wiki/index.php/ISDN_over_CAPI

Grüße, paresy

Hallo paresy,

wollte mal fragen, ob man das mit einem analogen Anschluß auch irgendwie das ISDN-Modul nutzen kann?

So einen Anrufbeantworter und so. Nur halt ohne ISDN-Anschluss!

Gruß
Kollaps

die CAPI (Common ISDN Application Programming Interface) ist nur und ausschließlich für ISDN. Für den Analogen Anschluss kann man über entsprechende Hardware die TAPI (Telephony Application Programming Interface) benutzen. Die ist wesendlich einfacher gestrickt und bietet nicht halb so viele Möglichkeiten wie die CAPI. Allerdings ist es möglich ein sog. Software-Telefon nachzubilden. Damit müsste auch ein Anrufbeantworter zu machen sein - behaupte ich mal.

Ich glaube hier im Forum irgendwo gelesen zu haben dass das aber nicht für IPS vorgesehen ist…

Toni

Wie Tonic schon richtig erklärt hat: Die CAPI, die das ISDN Modul nutzt, funktioniert nicht mit einem Analogen Anschluss. Deswegen kann man es damit leider nicht nutzen. Eine TAPI Implementation ist auch nicht geplant.

Grüße, paresy

Das heißt also alle, welche kein ISDN besitzen müssen in die Röhre schauen.:mad:

War nicht böse gemeint. Hätte mir halt eine analogunterstützung gewünscht.
Aber dann kann man nichts machen.

Wie sieht es eigentlich mit VOIP aus. Kann man hier eine Schnittstelle basteln? Daß evtl. das Haus mit Tasten gesteuert werden können. So
Wie euerem Bewertungstool!

Gruß
Kollaps

@Kollaps,

„analogunterstützung“ ist keim Problem für IP-Symcon: fast jedes Modem aus der Grabbelkiste beherrscht DTMF Töne. Mit den AT-Befehlen kann man dann „schalten & walten“.

@Forum,

wenn jemand Zeit und Lust hat etwas mit einem GSM Modem
(AT-Befehle, PDU Modus http://www.nobbi.com/atgsm.htm) zu entwickeln,
der kann sich gerne bei uns melden: info@ip-symcon.de um Einzelheiten zu besprechen.

MST

PS: kennt jemand ein einfaches „ebay-Handy“ (z.B. S25) mit Modem mit passendem Datenkabel
Beim großem C kostet ein Modem €200,- :mad:

Wenn du mal verlauten lässt was du damit vor hast…

Ebay: 6036846003

Sehr gut erfahrungen damit gemacht im PDU-Mode…

Toni

Ich habe zwar noch keine Lösung gefunden, daß der AB nach einer einstellbaren Zeit angeht, aber hier schon mal die Lösung den AB an und aus zuschalten.

<?
/*
*******************************
 IP-SYMCON Event Scripting
*******************************
File     : isdnanrufanaus.ips.php
Trigger  : 
Interval : 
*/
require "web/base/xmlparser.ips.php";

//Setting in Array lesen
$xmldata=IPS_GetInstanceSettings(111111);
echo $xmldata;
$xml     = new IPS_XMLParser();
$array = $xml->GetArray( $xmldata );

//ändern und zurückspeichern
//Achtung das Wort Value in den xml Werten muss weggelassen werden
$array['ID']['Settings']['Accept']['Item0']= null; // aus
$array['ID']['Settings']['Accept']['Item0']= 0; // alle an
$xmldata=$xml->SetArray( $array );
$result=IPS_SetInstanceSettings(111111,$xmldata);

//Test
$xmldata=IPS_GetInstanceSettings(111111);
echo $xmldata;


?>