. * * @package LibreNMS * @link http://librenms.org * @copyright 2017 Neil Lathwood * @author Neil Lathwood */ namespace LibreNMS\Alert\Transport; use LibreNMS\Enum\AlertState; use LibreNMS\Alert\Transport; class Telegram extends Transport { public function deliverAlert($obj, $opts) { $telegram_opts['chat_id'] = $this->config['telegram-chat-id']; $telegram_opts['token'] = $this->config['telegram-token']; $telegram_opts['format'] = $this->config['telegram-format']; return $this->contactTelegram($obj, $telegram_opts); } public static function contactTelegram($obj, $data) { $curl = curl_init(); set_curl_proxy($curl); $text = urlencode($obj['msg']); $format=""; if ($data['format']) { $format="&parse_mode=" . $data['format']; if ($data['format'] == 'Markdown') { $text = urlencode(preg_replace("/([a-z0-9]+)_([a-z0-9]+)/", "$1\_$2", $obj['msg'])); } } curl_setopt($curl, CURLOPT_URL, ("https://api.telegram.org/bot{$data['token']}/sendMessage?chat_id={$data['chat_id']}&text=$text{$format}")); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); $ret = curl_exec($curl); $code = curl_getinfo($curl, CURLINFO_HTTP_CODE); if ($code != 200) { var_dump("API '$host' returned Error"); //FIXME: propper debuging var_dump("Params: " . $api); //FIXME: propper debuging var_dump("Return: " . $ret); //FIXME: propper debuging return 'HTTP Status code ' . $code; } return true; } public static function configTemplate() { return [ 'config' => [ [ 'title' => 'Chat ID', 'name' => 'telegram-chat-id', 'descr' => 'Telegram Chat ID', 'type' => 'text', ], [ 'title' => 'Token', 'name' => 'telegram-token', 'descr' => 'Telegram Token', 'type' => 'text', ], [ 'title' => 'Format', 'name' => 'telegram-format', 'descr' => 'Telegram format', 'type' => 'select', 'options' => [ '' => '', 'Markdown' => 'Markdown', 'HTML' => 'HTML' ] ] ], 'validation' => [ 'telegram-chat-id' => 'required|string', 'telegram-token' => 'required|string', 'telegram-format' => 'string', ] ]; } }