Mit folgender Funktion ist es möglich, eine SMS über den eigenen Sipgate-Account zu versenden. Ein extra SMS-Gateway ist hierfür nicht nötig.
<?php
include ('xmlrpc/lib/xmlrpc.inc');
function sipgate_sendsms($smsnumber, $smstext)
{
// Festlegen der Konfigurationswerte.
define ('SIPGATE_SERVER', 'samurai.sipgate.net');
define ('SIPGATE_PATH', '/RPC2');
define ('SIPGATE_PROT', 'https');
define ('SIPGATE_PORT', '443');
define ('SIPGATE_SIPURI_PREFIX', 'sip:');
define ('SIPGATE_SIPURI_HOST', '@sipgate.net');
define ('SIPGATE_USER', 'WEB-LOGIN VON SIPGATE');
define ('SIPGATE_PASS', 'WEB-PASSWORT VON SIPGATE');
// Erstellen des xmlrpc clients.
$xmlurl = SIPGATE_PROT . "://" . SIPGATE_USER . ":" . SIPGATE_PASS . "@" .
SIPGATE_SERVER . ":" . SIPGATE_PORT . SIPGATE_PATH;
$xmlclient = new xmlrpc_client($xmlurl);
$xmlclient->setSSLVerifyPeer(FALSE);
// Rufnummer und Text für die SMS vorbereiten.
$smsnumber = SIPGATE_SIPURI_PREFIX . $smsnumber . SIPGATE_SIPURI_HOST;
$smstext = substr($smstext, 0, 160);
$val_a["RemoteUri"] = new xmlrpcval($smsnumber);
$val_a["TOS"] = new xmlrpcval("text");
$val_a["Content"] = new xmlrpcval($smstext);
//$val_a["Schedule"] = new xmlrpcval(iso8601_encode(NULL), "dateTime.iso8601");
$val_s = new xmlrpcval();
$val_s->addStruct($val_a);
$v = array();
$v[] = $val_s;
// Nachrichtenobjet erstellen.
$m = new xmlrpcmsg('samurai.SessionInitiate', $v);
// SMS senden.
$r = $xmlclient->send($m);
// Anzeigen von eventuellen Fehlern.
if ( $r->faultCode() )
{
echo IPS_LogMessage("SIPGATE-SMS", "Failed to send sms: $r->errstr");
return false;
} else
{
return true;
}
}
?>
Der Versand einer SMS erfolgt dann mit folgendem Aufruf der Funktion:
sipgate_sendsms("49421123456789", "Hallo Welt.");
Wichtig hierbei ist, dass der internationale Code vorangestellt wird… Ohne die doppelte 0 und ohne ein + Zeichen.
Installation:
Das Script funktioniert bei einer standard IP-Symcon Installation nicht out-of-the-Box… Folgende Installationsschritte müssen durchgeführt werden.
[ul]
[li]Nachinstallieren des PHP-Moduls php_curl.dll. Dazu läd man das entsprechende PHP-Release herunter (in meinem Fall 5.3.1 VC6) und kopiert aus dem Verzeichnis ext/ die Datei in das ext/ Unterverzeichnis von IP-Symcon. Letztendlich muß in der php.ini noch die Zeile [/li]```
extension = php_curl.dll
eingefügt werden.
[li]Nun läd man noch die [XMLRPC-Library](http://phpxmlrpc.sourceforge.net/) herunter und entpackt diese im Unterverzeichnis [b]scripts/[/b] von IP-Symcon. Um für mein Script passend zu sein, muß der Verzeichnisname auf "[b]xmlrpc[/b]" verändert werden.
[/li][li]Neustart von IP-Symcon ist nun fällig. Danach kann das Script nach einer Anpassung des SIPGATE-Benutzernamen und Passworts genutzt werden.
[/li][/ul]
Hoffe für jemanden hat das Script einen Mehrwert. Ansonsten kann es ja als Inspiration dienen :-)
Hi,
entweder kopierst Du sipgate_sendsms(„49421123456789“, „Hallo Welt.“); zwischen der incclude und Function, dann „Ausführen“.
Oder ein Extraskript und dann Oben include (‚die ID vom Hauptskript.ips.php‘); und wieder Ausführen oder durch Alarm triggern.
Nutzt das noch jemand? Habe es genau nach der Anleitung aus dem Wiki Installiert ,ausser die php_curl.dll zu laden die ist ja mittlerweile Standard. Aber es kommt keine Fehlermeldung und keine SMS wenn ich eine Versicken will. :mad:
Ich nutze IPS Version 2.6.
Es funktioniert hatte anstatt meines Benutzernamens meine sipgate id eingetragen. Weil bei der Anmeldung auf der Website nutze ich immer nur die Id.
Allerdings dauert es bis die SMS ankommt , 2 bis 5 min. Ist natürlich für ein Feueralarm oder Einbruch zu melden , bisschen lang.
Man sollte allerdings darauf achten das alle Sonderzeichen aus dem Text entfernt wurden und der Text nicht länger als 160 Zeichen ist. Sipgate reagiert da empfindlicher als andere Provider :
Ich grab mal den Thread hier aus ich habe mich mal ein wenig mit der SIPgate API beschäftigt und meine gelesen zu haben das SMS Empfang und Calls auch möglich wären.
Hat sich schonmal jemand etwas näher mit der Sipgate API beschäftigt bzw. es hinbekommen nicht nur SMS zu senden sondern auch Anrufe durchzuführen und zb. WAV dateien abzuspielen ?
Ich habe mich nun auch mit der sipgate-API beschäftigt und außerhalb von sipgate (auf einem eigenen Webpaket) funktioniert alles wunderbar.
Nun habe ich die Funktionen in IP-Symcon übertragen und erhalte folgende Fehlermeldung:
Warning: file_get_contents(): Unable to find the wrapper "https" - did you forget to enable it when you configured PHP? in
C:\IP-Symcon\scripts\55821.ips.php on line 91
Es scheint als ob die extension php_openssl.dll fehlt. Im Verzeichnis /ext/ ist die Datei vorhanden. In der php.ini fehlt der Eintrag extension=php_openssl.dll. Wenn ich diesen Eintrag nachrüste wird er beim Neustart wieder heraus genommen.
Weiß jemand Rat?
Danke im Voraus und schon mal einen guten Rutsch heute!
Durch eine Inkompatibilität von PHP 5.4 und OpenSSL 1.0 können über die „file_get_contents“ (u.ä.) Funktion keine Anfragen per SSL gestellt werden. Die IP-Symcon interne Funktion Sys_GetURLContent bietet dort passenden Ersatz. Falls die SSL Funktionalität zwingend notwendig ist (z.B. Exchange oder SNMP Extension), und SSL innerhalb vom WebFront nicht benötigt wird, kann die alte Verhaltensweise mit folgendem Zusatzpaket wiederhergestellt werden: OpenSSL 0.9.8
Oder IP-Symcon 4.0 Beta installieren… Dort ist PHP 5.5 mit OpenSSL 1.x drauf.
Danke paresy für Deine Unterstützung!!!
Ich habe nun die .dll´s ausgetauscht und nun funktioniert es.
Lieber hätte ich das natürlich per Sys_GetURLContent gelöst, weiß aber nicht wie ich da (analog zu file_get_contents) meine Context-Ressource rein bringe!?