SMS-Versand über Sipgate

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 :-)

Letztendlich muß in der php.ini noch die Zeile

Das ist nicht notwendig. IP-Symcon lädt beim Start des Dienstes automatisch alle Extensions im Ext Ordner und patch vorher die php.ini.

Ansonsten super Skript. Hast du vielleicht auch Lust und Zeit dies noch in die Wiki zu kopieren? Hauptseite

paresy

Ist drin… Lange her dass ich mal ein Wiki editiert habe…

SMS-Versand über Sipgate

Hallo,
kann mir einer sagen wie ich das Script benutzen muss, dass es SMS versendet?
Habe es laut Wiki installiert.

Komme aber mit der Funktion nicht zurecht, wo die hin muss bzw. was ich damit machen muss:

sipgate_sendsms(„49421123456789“, „Hallo Welt.“);

Bsp: ich möchte mir eine SMS senden lassen, wenn der Rauchmelder auf ALARM geht.

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.

Danke dir,
jetzt komme ich zumindest schonmal weiter :smiley:

Habe alle probiert, nur das nicht (zwischen die beiden kopieren).

Fehler:
Failed to send sms: didn’t receive 200 OK from Server. (HTTP/1.1 403 forbidden)

Ich such mal …

EDIT: oh man … Sipgate hat seine PW Richtlinien geändert … ich musste einfach nur ein neues PW vergeben und schon hats funktioniert :wink:

Vielen Dank nochmal

Na Supi für dich, und für mich auch

1000

SUPI.

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.

Hallo Mastershort,
ja, ich nutze das Skript und es funktioniert sehr gut. Allerdings bin ich noch auf Version 2.5.
Grüße
Mitch

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.

Ist das bei euch auch so?

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 :

   $text = preg_replace("/[^a-zA-Z0-9_ .,!?()=~*#-+<>;:%$]/" , "" , $text);
	$text = substr($text, 0, 160);

Ich grab mal den Thread hier aus :slight_smile: 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 ?

Hier mal ein Link zur Api Dokumentation

Gruß

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

In Zeile 91 wird folgendes ausgeführt:

file_get_contents("https://api.sipgate.net/RPC2", false, $context);

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! :slight_smile:

Grüße
Walter

Hier der passende Hinweis:

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.

paresy

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!? :confused:

Viele Grüße
Walter