Hallo alle zusammen,
ich bin soweit. Der Workaround ist fertig. Nach guter alter Toni Manier heißt das gute Stück:
IgS
IPS
goes
Skype
Was kann die Software?
IgS ist die Schnittstelle zwischen IPS und Skype. Im ersten Wurf sind folgende Funktionen realisiert:
PlaceCall -> Einen Skype User oder Telefonnummer anrufen.
AnswereCall -> Einen Anruf entgegennehmen
FinishCall -> Das aktuelle Gespräch beenden
SendMessage -> eine Kurzmitteilung oder SMS verschicken
ReceiveMessage -> eine Anzeige der letzten 10 Kurzmitteilungen
WhoIsOnline -> Eine Anzeige der User die aktuell Online sind
WhoIsCalling -> Eine Anzeige welcher User anruft.
UserOnline -> Den eigenen Zustand umschalten von Online nach Offline bzw umgekehrt.
CS_Ringing -> Anzeige das man angerufen wird
CS_Progress -> Anzeige für ein aktives Gespräch bzw. Das Gespräch wurde von der Gegenseite angenommen.
PlayFile, SetPlayFile -> Abspielen einer *.wav Datei (nur bei aktivem Gespräch möglich)
RecordFile, SetRecFile -> Aufzeichnen eines Gesprächs in eine *.wav Datei (nur bei aktivem Gespräch möglich)
Achtung!!
Anrufe auf Telefon oder Handy sowie das verschicken einer SMS ist natürlich kostenpflichtig.
Dazu muss ein Skype-Guthaben erworben werden!!
Wie Installiere ich die Software?
Ich habe versucht das ganze so einfach wie möglich zu halten.
Als erstes die Setup.zip entpacken.
Danach Doppelklick auf die *.msi Datei.
Den Installationsschritten folgen (wie immer)
In IPS ein neues Script anlegen und dieses Script reinkopieren.
<?
/*=============================================================
Skype_Setup - Martin Heinzel - 02.08.2011
Version: 1.3
Beschreibung:
Mit diesem Installationsscript wird das Interface für Skype eingerichtet.
Es entsteht eine neue Kategorie mit dem Namen ".Skype". In dieser Kategorie
sind alle Variablen für Skype enthalten. Am Ende wird IgS gestartet und
alle benötigten Parameter werden per Argument übergeben. Somit muss der
Benutzer IgS nicht einrichten. Dieses Installationsscript löscht sich
automatisch.
!! Bitte den Installationspfad von IgS angeben !!
Änderungen
----------
14.05.2011 von Version 1.0 -> 1.1
Beschreibung:
Die Option WhoIsColling ist dazu gekommen.
17.07.2011 von Version 1.1 -> 1.2
Berschreibung:
Die Option:
Play File
Record File
sind neu. Des weiteren kontrolliert das Script ob schon eine Skypeinstallation
existiert.
02.08.2011 von Version 1.2 -> 1.3
Berschreibung:
Bei der Funktion "IPS_ExecuteEx" muss die SessionID in Abhängigkeit
des benutzten Betriebssystems eingetragen werden.
Unter XP ab 0, 2003/Vista ab 1
Ich habe dem Script die Funktion Get_SessionID zugefügt. Diese Funktion
ermittelt das benutzte Betriebssystem und trägt die passende SessionID ein.
================================================================*/
// Variablen Deklaration ----------------------------------------
//Bitte anpassen
//---------------------------------------------------------------
//an dieser Stelle bitte den Installationspfad von IgS einstellen
$IgS_Located = "C:/Program Files/Schablone/IgS/IgS.exe";
//---------------------------------------------------------------
//---------------------------- Main -----------------------------
//ab hier nichts mehr verändern!!
// Kontrolle der IgS Installation
if(file_exists($IgS_Located))
{
$CatID = @IPS_GetObjectIDByName(".Skype", 0);
if($CatID === false)
{
//erstellen der Skype Kategory
$CatID = IPS_CreateCategory(); // Kategorie anlegen
IPS_SetHidden($CatID, true);
IPS_SetName($CatID, ".Skype"); // Kategorie benennen
//erstellen der Boolschen Variablen
//=======================================
//erstellen von PlaceCall
$id_PlaceCall = IPS_CreateVariable(0);
IPS_SetName($id_PlaceCall, "PlaceCall");
IPS_SetParent($id_PlaceCall, $CatID);
//erstellen von AnswerCall
$id_AnswerCall = IPS_CreateVariable(0);
IPS_SetName($id_AnswerCall, "AnswerCall");
IPS_SetParent($id_AnswerCall, $CatID);
//erstellen von FinishCall
$id_FinishCall = IPS_CreateVariable(0);
IPS_SetName($id_FinishCall, "FinishCall");
IPS_SetParent($id_FinishCall, $CatID);
//erstellen von SendMessage
$id_SendMessage = IPS_CreateVariable(0);
IPS_SetName($id_SendMessage, "SendMessage");
IPS_SetParent($id_SendMessage, $CatID);
//erstellen von UserOnline
$id_UserOnline = IPS_CreateVariable(0);
IPS_SetName($id_UserOnline, "UserOnline");
IPS_SetParent($id_UserOnline, $CatID);
SetValueBoolean($id_UserOnline, true);
//erstellen von CS_Ringing
$id_CS_Ringing = IPS_CreateVariable(0);
IPS_SetName($id_CS_Ringing, "CS_Ringing");
IPS_SetParent($id_CS_Ringing, $CatID);
//erstellen von CS_Progress
$id_CS_Progress = IPS_CreateVariable(0);
IPS_SetName($id_CS_Progress, "CS_Progress");
IPS_SetParent($id_CS_Progress, $CatID);
//erstellen von SetPlayFile
$id_SetPlayFile = IPS_CreateVariable(0);
IPS_SetName($id_SetPlayFile, "SetPlayFile");
IPS_SetParent($id_SetPlayFile, $CatID);
//erstellen von SetRecFile
$id_SetRecFile = IPS_CreateVariable(0);
IPS_SetName($id_SetRecFile, "SetRecFile");
IPS_SetParent($id_SetRecFile, $CatID);
//erstellen der String Variablen
//===============================
//erstellen von ReceiveMessageText
$id_ReceiveMessageText = IPS_CreateVariable(3);
IPS_SetName($id_ReceiveMessageText, "ReceiveMessageText");
IPS_SetParent($id_ReceiveMessageText, $CatID);
//erstellen von SendMessageText
$id_SendMessageText = IPS_CreateVariable(3);
IPS_SetName($id_SendMessageText, "SendMessageText");
IPS_SetParent($id_SendMessageText, $CatID);
SetValueString($id_SendMessageText, "Das ist eine Message von IPS");
//erstellen von Username
$id_Username = IPS_CreateVariable(3);
IPS_SetName($id_Username, "Username");
IPS_SetParent($id_Username, $CatID);
SetValueString($id_Username, "echo123");
//erstellen von WhoIsOnline
$id_WhoIsOnline = IPS_CreateVariable(3);
IPS_SetName($id_WhoIsOnline, "WhoIsOnline");
IPS_SetParent($id_WhoIsOnline, $CatID);
//erstellen von WhoIsCalling
$id_WhoIsCalling = IPS_CreateVariable(3);
IPS_SetName($id_WhoIsCalling, "WhoIsCalling");
IPS_SetParent($id_WhoIsCalling, $CatID);
//erstellen von PlayFile
$id_PlayFile = IPS_CreateVariable(3);
IPS_SetName($id_PlayFile, "PlayFile");
IPS_SetParent($id_PlayFile, $CatID);
//erstellen von RecordFile
$id_RecordFile = IPS_CreateVariable(3);
IPS_SetName($id_RecordFile, "RecordFile");
IPS_SetParent($id_RecordFile, $CatID);
}
else
{
//einlesen der Variablen-ID's
//===========================
// Bit's
$id_PlaceCall = IPS_GetObjectIDByName("PlaceCall", $CatID);
$id_AnswerCall = IPS_GetObjectIDByName("AnswerCall", $CatID);
$id_FinishCall = IPS_GetObjectIDByName("FinishCall", $CatID);
$id_SendMessage = IPS_GetObjectIDByName("SendMessage", $CatID);
$id_UserOnline = IPS_GetObjectIDByName("UserOnline", $CatID);
$id_CS_Ringing = IPS_GetObjectIDByName("CS_Ringing", $CatID);
$id_CS_Progress = IPS_GetObjectIDByName("CS_Progress", $CatID);
// Kontrolle der neuen Variablen-ID "SetPlayFile"
$id_SetPlayFile = @IPS_GetVariableIDByName("SetPlayFile", $CatID);
// Wenn es diese Variable noch nicht gibt dann
if($id_SetPlayFile === false)
{
//erstellen von SetPlayFile
$id_SetPlayFile = IPS_CreateVariable(0);
IPS_SetName($id_SetPlayFile, "SetPlayFile");
IPS_SetParent($id_SetPlayFile, $CatID);
}
// Kontrolle der neuen Variablen-ID "SetRecFile"
$id_SetRecFile = @IPS_GetVariableIDByName("SetRecFile", $CatID);
// Wenn es diese Variable noch nicht gibt dann
if($id_SetRecFile === false)
{
//erstellen von SetRecFile
$id_SetRecFile = IPS_CreateVariable(0);
IPS_SetName($id_SetRecFile, "SetRecFile");
IPS_SetParent($id_SetRecFile, $CatID);
}
// Strings
$id_ReceiveMessageText = IPS_GetObjectIDByName("ReceiveMessageText", $CatID);
$id_SendMessageText = IPS_GetObjectIDByName("SendMessageText", $CatID);
$id_Username = IPS_GetObjectIDByName("Username", $CatID);
$id_WhoIsOnline = IPS_GetObjectIDByName("WhoIsOnline", $CatID);
// Kontrolle der neuen Variablen-ID "WhoIsCalling"
$id_WhoIsCalling = @IPS_GetVariableIDByName("WhoIsCalling", $CatID);
// Wenn es diese Variable noch nicht gibt dann
if($id_WhoIsCalling === false)
{
//erstellen von WhoIsCalling
$id_WhoIsCalling = IPS_CreateVariable(3);
IPS_SetName($id_WhoIsCalling, "WhoIsCalling");
IPS_SetParent($id_WhoIsCalling, $CatID);
}
// Kontrolle der neuen Variablen-ID "PlayFile"
$id_PlayFile = @IPS_GetVariableIDByName("PlayFile", $CatID);
// Wenn es diese Variable noch nicht gibt dann
if($id_PlayFile === false)
{
//erstellen von PlayFile
$id_PlayFile = IPS_CreateVariable(3);
IPS_SetName($id_PlayFile, "PlayFile");
IPS_SetParent($id_PlayFile, $CatID);
}
// Kontrolle der neuen Variablen-ID "RecordFile"
$id_RecordFile = @IPS_GetVariableIDByName("RecordFile", $CatID);
// Wenn es diese Variable noch nicht gibt dann
if($id_RecordFile === false)
{
//erstellen von RecordFile
$id_RecordFile = IPS_CreateVariable(3);
IPS_SetName($id_RecordFile, "RecordFile");
IPS_SetParent($id_RecordFile, $CatID);
}
}
//ermitteln der IP-Adresse
$ip = gethostbyname ("");
//erstellen des Arguments
$arg = $ip.",".$id_Username.",".$id_UserOnline.",".$id_PlaceCall.",".$id_FinishCall.
",".$id_AnswerCall.",".$id_SendMessageText.",".$id_SendMessage.",".$id_ReceiveMessageText.
",".$id_WhoIsOnline.",".$id_CS_Ringing.",".$id_CS_Progress.",".$id_WhoIsCalling.
",".$id_PlayFile.",".$id_SetPlayFile.",".$id_RecordFile.",".$id_SetRecFile;
//ermitteln der SessionID
$SessionID = Get_SessionID();
//IgS starten und Parameter übergeben
IPS_ExecuteEx($IgS_Located, $arg, true, false, $SessionID);
//Das Installationsscript löschen
IPS_DeleteScript($IPS_SELF, true); // Skript inklusive Datei löschen
}
else
{
echo "Der Installationspfad von IgS ist nicht korrekt!";
}
function Get_SessionID()
{
// Ausgabepufferung aktivieren
ob_start();
// phpinfo abfragen
eval("phpinfo();");
// den Inhalt in eine Variable schreiben
$info = ob_get_contents();
// Löschen und deaktiviert des Ausgabe-Puffers
ob_end_clean();
// Zeilenweise zerlegen
$arr_info = explode("
", $info);
// Zeilenweise den Inhalt nach der System-Zeile durchsuchen
foreach($arr_info as $line)
{
// ausgeben der SessionID
if((strpos($line, "System =>")) === 0)
{
// Windows XP
if(strpos($line, "5.1")) return 0;
// Windows Server 2003
if(strpos($line, "5.2")) return 1;
// Windows Vista / Server 2008
if(strpos($line, "6.0")) return 1;
// Windows 7 / Server 2008 R2
if(strpos($line, "6.1")) return 1;
// Windows 8
if(strpos($line, "6.2")) return 1;
}
}
}
?>
Es muss am Anfang des Scripts der Installationspfad von IgS eingestellt werden.
(kleiner Schönheitsfehler. Sollte mal ein autarkes Script werden)
Das Script speichern und ausführen.
IgS meldet sich mit der Info: „IPS Connection installed successfully“
In Skype erscheint nun folgende Meldung:
siehe Anhang!
Diese muss natürlich mit „Zugriff erlauben“ bestätigt werden.
Das war‘s!!
Ja aber, was passiert den da in dem Script?
Das Script legt eine neue Kategorie mit dem Namen „.Skype“ an.
In dem Script werden alle Variablen für das Inteface zu Skype angelegt.
Am Ende wird IgS gestartet und die IP-Adresse so wie alle benötigten Variablen-ID werden als Argument übergeben.
Somit braucht Ihr in IgS nichts mehr einstellen.
Zu guter letzt wird das Installationscript gelöscht.
Und wie geht das jetzt?
Kleiner Test am Anfang:
Bei dem anlegen der Variablen habe ich bereits den Skype Testservice als Username angelegt.
Ihr braucht nur noch die Variable PlaceCall auf „True“ zu setzen.
Das gleiche gilt für SendMessage.
In Username muss immer der Skypename eingetragen werden. Der ist eindeutig!
Abspielen von Wav-Dateien:
Der Ort und Name der Wave-Datei kommt in die Variable PlayFile in dem Format „C:\Skype\Hallo.wav“.
Danach muss die Variable SetPlayFile auf „True“ gesetzt werden. SetPlayFile funktioniert nur bei einem aktivem Gespräch!!
Es können nur Dateien mit dem Format "16kHz, 16Bit, Mono " abgespielt werden.
Aufzeichnen von einem Gespräch:
In der Variablen RecordFile kommt der Ort und der Dateiname in dem aufgezeichnet werden soll
in dem Format „C:\Skype\Aufzeichnung.wav“.
Danach muss die Variable SetRecFile auf „True“ gesetzt werden.
SetRecFile funktioniert nur bei einem aktivem Gespräch!!
Kostenpflichtige Dienste:
Telefonanrufe auf Festnetz oder Handy:
Als Username muss die entsprechende Telefonnummer im Format +492871… eingegeben werden. Danach „PlaceCall“ auf True setzen.
Versenden von SMS:
Als Username muss die entsprechende Telefonnummer im Format +49173… eingegeben werden. Der SMS-Text kommt in die Stringvariable „SendMessageText“. Danach „SendMessage“ auf True setzen.
zur Info:
Anhand des Username entscheidet IgS ob eine Message oder eine SMS verschickt werden soll. Beginnt der Username mit „+“ geht eine SMS raus.
Kann ich denn die Kommunikation zu IgS überwachen?
Ja. IgS setzt automatisch die Bits‘:
PlaceCall, FinishCall, AnswereCall und SendMessage zurück. (nach Abarbeitung)
Passiert das nicht, ist was faul!
Update
V1.0.0.1
- WhoIsOnline wird nun angezeigt mit -> Name [ Skypename ]
V1.0.0.2
- WhoIsCalling wird nun angezeigt mit -> Name [ Skypename ]
V1.3
- Den kostenpflichtige Dienst „Send SMS“ eingebunden.
- Das Versionsnummern Chaos beseitigt.
V2.0
- TRIXI entfernt -> Der Zugriff auf IPS erfolgt direkt über die SOAP-Schnittstelle
Bei dieser Version bitte ich um Feedback bezüglich der Kommunikation zu IPS
V2.0.1
- Fix: Bei Anrufen auf Festnetz oder Handy wurde CS_Ringing nicht gesetzt
- Fix: Anrufe konnten nicht abgebrochen werden (wenn noch nicht aktiv)
Bei dieser Version bitte ich um Feedback bezüglich der Kommunikation zu IPS
V2.1
- Neu: Wav-Dateien können bei einem aktivem Gespräch abgespielt werden.
- Neu: Aktive Gespräche können in eine Wav-Datei aufgezeichnet werden
V2.2
- Fix: Workaround für die sterbende Session zu IPS.
- Fix: IgS Multiinstanzen sind nicht mehr möglich.
So das war‘s. Wenn noch Fragen sind, meldet euch bitte.
IgS_setup_V_2_2.zip (2.23 MB)