diff --git a/doc/Extensions/Alerting.md b/doc/Extensions/Alerting.md
index fe4e51dab..d87d30a11 100644
--- a/doc/Extensions/Alerting.md
+++ b/doc/Extensions/Alerting.md
@@ -18,6 +18,9 @@ Table of Content:
- [Pushover](#transports-pushover)
- [Boxcar](#transports-boxcar)
- [Pushbullet](#transports-pushbullet)
+ - [Clickatell](#transports-clickatell)
+ - [PlaySMS](#transports-playsms)
+ - [VictorOps](#transports-victorops)
- [Entities](#entities)
- [Devices](#entity-devices)
- [BGP Peers](#entity-bgppeers)
@@ -372,6 +375,54 @@ $config['alert']['transports']['pushbullet'] = 'MYFANCYACCESSTOKEN';
```
~~
+## Clickatell
+
+Clickatell provides a REST-API requiring an Authorization-Token and at least one Cellphone number.
+Please consult Clickatell's documentation regarding number formating.
+Here an example using 3 numbers, any amount of numbers is supported:
+
+~~
+```php
+$config['alert']['transports']['clickatell']['token'] = 'MYFANCYACCESSTOKEN';
+$config['alert']['transports']['clickatell']['to'][] = '+1234567890';
+$config['alert']['transports']['clickatell']['to'][] = '+1234567891';
+$config['alert']['transports']['clickatell']['to'][] = '+1234567892';
+```
+~~
+
+## PlaySMS
+
+PlaySMS is an OpenSource SMS-Gateway that can be used via their HTTP-API using a Username and WebService-Token.
+Please consult PlaySMS's documentation regarding number formating.
+Here an example using 3 numbers, any amount of numbers is supported:
+
+~~
+```php
+$config['alert']['transports']['playsms']['url'] = 'https://localhost/index.php?app=ws';
+$config['alert']['transports']['playsms']['user'] = 'user1';
+$config['alert']['transports']['playsms']['token'] = 'MYFANCYACCESSTOKEN';
+$config['alert']['transports']['playsms']['from'] = '+1234567892'; //Optional
+$config['alert']['transports']['playsms']['to'][] = '+1234567890';
+$config['alert']['transports']['playsms']['to'][] = '+1234567891';
+```
+~~
+
+## VictorOps
+
+VictorOps provide a webHook url to make integration extremely simple. To get the URL required login to your VictorOps account and go to:
+
+Settings -> Integrations -> REST Endpoint -> Enable Integration.
+
+The URL provided will have $routing_key at the end, you need to change this to something that is unique to the system sending the alerts such as librenms. I.e:
+
+`https://alert.victorops.com/integrations/generic/20132414/alert/2f974ce1-08fc-4dg8-a4f4-9aee6cf35c98/librenms`
+
+~~
+```php
+$config['alert']['transports']['victorops']['url'] = 'https://alert.victorops.com/integrations/generic/20132414/alert/2f974ce1-08fc-4dg8-a4f4-9aee6cf35c98/librenms';
+```
+~~
+
# Entities
Entities as described earlier are based on the table and column names within the database, if you are unsure of what the entity is you want then have a browse around inside MySQL using `show tables` and `desc `.
diff --git a/includes/alerts/transport.clickatell.php b/includes/alerts/transport.clickatell.php
new file mode 100644
index 000000000..02d1f5a91
--- /dev/null
+++ b/includes/alerts/transport.clickatell.php
@@ -0,0 +1,42 @@
+/* Copyright (C) 2015 Daniel Preussker
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see . */
+
+/**
+ * Clickatell REST-API Transport
+ * @author f0o
+ * @copyright 2015 f0o, LibreNMS
+ * @license GPL
+ * @package LibreNMS
+ * @subpackage Alerts
+ */
+
+$data = array("api_id" => $opts['api_id'], "user" => $opts['user'], "password" => $opts['password'], "to" => implode(',',$opts['to']), "text" => $obj['title']);
+if (!empty($opts['from'])) {
+ $data['from'] = $opts['from'];
+}
+$url = 'https://api.clickatell.com/http/sendmsg?'.http_build_query($data);
+$curl = curl_init($url);
+
+curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "POST");
+curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
+
+$ret = curl_exec($curl);
+$code = curl_getinfo($curl, CURLINFO_HTTP_CODE);
+if( $code > 200 ) {
+ if( $debug ) {
+ var_dump($ret);
+ }
+ return false;
+}
+return true;
diff --git a/includes/alerts/transport.playsms.php b/includes/alerts/transport.playsms.php
new file mode 100644
index 000000000..812ae4ffe
--- /dev/null
+++ b/includes/alerts/transport.playsms.php
@@ -0,0 +1,42 @@
+/* Copyright (C) 2015 Daniel Preussker
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see . */
+
+/**
+ * PlaySMS API Transport
+ * @author f0o
+ * @copyright 2015 f0o, LibreNMS
+ * @license GPL
+ * @package LibreNMS
+ * @subpackage Alerts
+ */
+
+$data = array("u" => $opts['user'], "h" => $opts['token'], "to" => implode(',',$opts['to']), "msg" => $obj['title']);
+if (!empty($opts['from'])) {
+ $data["from"] = $opts['from'];
+}
+$url = $opts['url'].'&op=pv&'.http_build_query($data);
+$curl = curl_init($url);
+
+curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "GET");
+curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
+
+$ret = curl_exec($curl);
+$code = curl_getinfo($curl, CURLINFO_HTTP_CODE);
+if( $code > 202 ) {
+ if( $debug ) {
+ var_dump($ret);
+ }
+ return false;
+}
+return true;
diff --git a/includes/alerts/transport.victorops.php b/includes/alerts/transport.victorops.php
new file mode 100644
index 000000000..7e1fd622a
--- /dev/null
+++ b/includes/alerts/transport.victorops.php
@@ -0,0 +1,57 @@
+/* Copyright (C) 2015 Daniel Preussker
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see . */
+
+/**
+ * VictorOps Generic-API Transport - Based on PagerDuty transport
+ * @author f0o
+ * @author laf
+ * @copyright 2015 f0o, laf, LibreNMS
+ * @license GPL
+ * @package LibreNMS
+ * @subpackage Alerts
+ */
+
+$url = $opts['url'];
+
+$protocol = array(
+ 'entity_id' => ($obj['id'] ? $obj['id'] : $obj['uid']),
+ 'state_start_time' => strtotime($obj['timestamp']),
+ 'monitoring_tool' => 'librenms',
+);
+if( $obj['state'] == 0 ) {
+ $protocol['message_type'] = 'recovery';
+}
+elseif( $obj['state'] == 2 ) {
+ $protocol['message_type'] = 'acknowledgement';
+}
+elseif ($obj['state'] == 1) {
+ $protocol['message_type'] = 'critical';
+}
+
+foreach( $obj['faults'] as $fault=>$data ) {
+ $protocol['state_message'] .= $data['string'];
+}
+
+$curl = curl_init();
+curl_setopt($curl, CURLOPT_URL, $url );
+curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
+curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-type'=> 'application/json'));
+curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($protocol));
+$ret = curl_exec($curl);
+$code = curl_getinfo($curl, CURLINFO_HTTP_CODE);
+if( $code != 200 ) {
+ var_dump("VictorOps returned Error, retry later"); //FIXME: propper debuging
+ return false;
+}
+return true;