Ad Widget

Collapse

Скрипт отправки SMS (без gsm модема)

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • Flegel
    Member
    • Nov 2009
    • 42

    #1

    Скрипт отправки SMS (без gsm модема)

    Добрый день,

    По ходу настройки возникло несколько вопросов
    1. Какие скрипты можно использовать в Media Type - Scripts ?
    В доках полезной инфы не нашёл...зато в форумах накопал информацию по bash, C и perl скриптах. Можно ли использовать php скрипты ?

    2. Как можно передать параметры $Trigger и $Trigger status от Zabbix в скрипт отправки sms ? Был бы благодарен за простенький пример.
    Script
    Custom script. Zabbix passes three command line parameters to the script: Recipient, Subject and Message.
    Last edited by Flegel; 19-10-2010, 11:00.
  • ugh
    Senior Member
    • Jun 2009
    • 296

    #2
    email2sms может?)

    Comment

    • dima_dm
      Senior Member
      • Dec 2009
      • 2697

      #3
      Originally posted by Flegel
      Был бы благодарен за простенький пример.
      Все параметры перезаются через настройки Action.

      Comment

      • Flegel
        Member
        • Nov 2009
        • 42

        #4
        Originally posted by ugh
        email2sms может?)
        Уже используем smstraffic.ru
        Оттуда был взят пример скрипта для отправки sms написанный на php

        Comment

        • Flegel
          Member
          • Nov 2009
          • 42

          #5
          Originally posted by dima_dm
          Все параметры перезаются через настройки Action.
          http://www.zabbix.com/forum/showthread.php?t=1323
          Спасибо, прозрение пришло

          Предлагаю тему углубить)
          Есть php скрипт для отправки sms. Нужно как-то передать в php скрипт те параметры, который передаёт Zabbix из Action-а, а вот как это можно сделать...кто-нибудь подскажет ?

          Пример скрипта:
          <?php

          ///////////////////////////////////////////////////////////////////////////////////////////////////
          //
          // Sample class for sending SMS via SMS Traffic
          //
          // Please edit smstraffic_login, smstraffic_password, and max_parts below before first use
          //
          ///////////////////////////////////////////////////////////////////////////////////////////////////

          class Sms
          {

          // returns array(sms_id, error description)
          function send($phone, $message, $originator='mycompany', $rus=0, $udh='')
          {
          // constants
          // !!! Edit these contants after you receive an account from SMS Traffic !!!
          $smstraffic_login = "login";
          $smstraffic_password = "password";
          $max_parts = 1; // set to 2 or more if you want messages to be split into several SMS automatically

          $host = "host1";
          $failover_host = "host2";

          $path = "/multi.php";
          $params = "login=".urlencode($smstraffic_login) . "&password=".urlencode($smstraffic_password) . "&want_sms_ids=1&phones=$phone&message=".urlencode ($message) . "&max_parts=$max_parts&rus=$rus
          &originator=".urlencode($originator);
          if ($udh)
          $params .= "&udh=".urlencode($udh);

          $response=Sms::httpPost($host, $path, $params);
          if ($response==null){
          $response=Sms::httpPost($failover_host, $path, $params);
          if ($response==null)
          return array(0, "failed to send sms");
          }

          // interpret response
          if (strpos($response, '<result>OK</result>')){
          if (preg_match('|<sms_id>(\d+)</sms_id>|s', $response, $regs)){
          $sms_id=$regs[1];
          return array($sms_id, 'OK');
          }
          else // impossible
          return array(-1, 'failed to find sms_id');
          }
          elseif (preg_match('|<description>(.+?)</description>|s', $response, $regs)){
          $error=$regs[1];
          return array(0, $error);
          }
          else
          return array(0, 'failed to send sms '.$response);
          }



          function httpPost($host, $path, $params)
          {

          ///////////////////////////////////////////////////////////////////////////////////////////////////
          // 1. do HTTP POST via fsockopen. Uncomment this code and comment cURL code if cURL is not installed
          ///////////////////////////////////////////////////////////////////////////////////////////////////

          $params_len=strlen($params);
          $fp = @fsockopen($host, 80);
          if (!$fp)
          return null;
          fputs($fp, "POST $path HTTP/1.0\nHost: $host\nContent-Type: application/x-www-form-urlencoded\nUser-Agent: sms.php class 1.0 (fsockopen)\nContent-Length: $params_len\nConnection: Close\n\n$pa
          rams\n");
          $response = fread($fp, 8000);
          fclose($fp);
          if (preg_match('|^HTTP/1\.[01] (\d\d\d)|', $response, $regs))
          $http_result_code=$regs[1];
          return ($http_result_code==200) ? $response : null;

          // end of fsockopen code
          ///////////////////////////////////////////////////////////////////////////////////////////////////


          /*
          ///////////////////////////////////////////////////////////////////////////////////////////////////
          // 2. do HTTP POST via cURL. Uncomment this code and comment fsockopen code if cURL is installed
          ///////////////////////////////////////////////////////////////////////////////////////////////////

          $protocol='http'; // alternatively, use https
          $ch = curl_init($protocol.'://'.$host.$path);
          curl_setopt($ch, CURLOPT_POST, 1);
          curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
          curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); // do not verify that ssl cert is valid (it is not the case for failover server)
          curl_setopt($ch, CURLOPT_USERAGENT, "sms.php class 1.0 (curl $protocol)");
          curl_setopt($ch, CURLOPT_TIMEOUT, 5); // 5 seconds
          curl_setopt($ch, CURLOPT_POSTFIELDS, $params);

          ob_start();
          $bSuccess=curl_exec($ch);
          $response=ob_get_contents();
          ob_end_clean();
          $http_result_code=curl_getinfo($ch, CURLINFO_HTTP_CODE);
          curl_close($ch);

          return ($bSuccess && $http_result_code==200) ? $response : null;

          // end of cURL code
          ///////////////////////////////////////////////////////////////////////////////////////////////////
          */
          }


          }


          ?>
          Last edited by Flegel; 19-10-2010, 10:35.

          Comment

          • Flegel
            Member
            • Nov 2009
            • 42

            #6
            Сделал, выкладываю для потомков
            Для тех, у кого нет GSM модема и приходится использовать SMS порталы. В данном примере рассматривается сервис www.smstraffic.ru

            sms.sh --> Подключаете скрипт в Zabbix как Media Type
            #!/usr/local/bin/bash
            /usr/local/bin/php -a /etc/zabbix/scripts/run.php --to="$1" --body="$2" --subj="$3"
            run.php - Кладём скрипт в директорию, которая обозначена в директиве ExternalScripts конфига zabbix_server.conf
            <?php

            include('send_sms.php');

            $options= getopt('',array('to:','subj:','body:'));
            print_r($options);
            list($sms_id, $error)=Sms::send($options['to'], $options['subj'], $options['body'], 1);

            echo "\n$sms_id, $error\n";

            ?>
            send_sms.php - Собственно скрипт, который отправляет запрос SMS гейту, который в свою очередь формирует и отправляет SMS. Кладём в директорию, которая указана в ExternalScripts
            <?php

            //////////////////////////
            // Please edit smstraffic_login, smstraffic_password, and max_parts below //before first use
            /////////////////////////

            class Sms
            {

            // returns array(sms_id, error description)
            function send($phone, $message, $originator='mycompany', $rus=0, $udh='')
            {
            // constants
            // !!! Edit these contants after you receive an account from SMS Traffic !!!
            $smstraffic_login = "login";
            $smstraffic_password = "password";
            $max_parts = 1; // set to 2 or more if you want messages to be split into several SMS automatically

            $host = "www.smstraffic.ru";
            $failover_host = "server2.smstraffic.ru";

            $path = "/multi.php";
            $params = "login=".urlencode($smstraffic_login) . "&password=".urlencode($smstraffic_password) . "&want_sms_ids=1&phones=$phone&message=".urlencode ($message) . "&max_parts=$max_parts&rus=$rus
            &originator=".urlencode($originator);
            if ($udh)
            $params .= "&udh=".urlencode($udh);

            $response=Sms::httpPost($host, $path, $params);
            if ($response==null){
            $response=Sms::httpPost($failover_host, $path, $params);
            if ($response==null)
            return array(0, "failed to send sms");
            }

            // interpret response
            if (strpos($response, '<result>OK</result>')){
            if (preg_match('|<sms_id>(\d+)</sms_id>|s', $response, $regs)){
            $sms_id=$regs[1];
            return array($sms_id, 'OK');
            }
            else // impossible
            return array(-1, 'failed to find sms_id');
            }
            elseif (preg_match('|<description>(.+?)</description>|s', $response, $regs)){
            $error=$regs[1];
            return array(0, $error);
            }
            else
            return array(0, 'failed to send sms '.$response);
            }


            function httpPost($host, $path, $params)
            {

            ///////////////////////////////////////////////////////////////////////////////////////////////////
            // 1. do HTTP POST via fsockopen. Uncomment this code and comment cURL code if cURL is not installed
            ///////////////////////////////////////////////////////////////////////////////////////////////////

            $params_len=strlen($params);
            $fp = @fsockopen($host, 80);
            if (!$fp)
            return null;
            fputs($fp, "POST $path HTTP/1.0\nHost: $host\nContent-Type: application/x-www-form-urlencoded\nUser-Agent: sms.php class 1.0 (fsockopen)\nContent-Length: $params_len\nConnection: Close\n\n$pa
            rams\n");
            $response = fread($fp, 8000);
            fclose($fp);
            if (preg_match('|^HTTP/1\.[01] (\d\d\d)|', $response, $regs))
            $http_result_code=$regs[1];
            return ($http_result_code==200) ? $response : null;

            // end of fsockopen code
            ///////////////////////////////////////////////////////////////////////////////////////////////////


            /*
            ///////////////////////////////////////////////////////////////////////////////////////////////////
            // 2. do HTTP POST via cURL. Uncomment this code and comment fsockopen code if cURL is installed
            ///////////////////////////////////////////////////////////////////////////////////////////////////

            $protocol='http'; // alternatively, use https
            $ch = curl_init($protocol.'://'.$host.$path);
            curl_setopt($ch, CURLOPT_POST, 1);
            curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
            curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); // do not verify that ssl cert is valid (it is not the case for failover server)
            curl_setopt($ch, CURLOPT_USERAGENT, "sms.php class 1.0 (curl $protocol)");
            curl_setopt($ch, CURLOPT_TIMEOUT, 5); // 5 seconds
            curl_setopt($ch, CURLOPT_POSTFIELDS, $params);

            ob_start();
            $bSuccess=curl_exec($ch);
            $response=ob_get_contents();
            ob_end_clean();
            $http_result_code=curl_getinfo($ch, CURLINFO_HTTP_CODE);
            curl_close($ch);

            return ($bSuccess && $http_result_code==200) ? $response : null;

            // end of cURL code
            ///////////////////////////////////////////////////////////////////////////////////////////////////
            */
            }


            }


            ?>
            Last edited by Flegel; 20-10-2010, 12:33.

            Comment

            • sancho78rus
              Junior Member
              • Nov 2010
              • 23

              #7
              пробую сейчас настроить смс с помщью этого скрипта.
              есть тестовый доступ на 30 СМС в smstraffic.ru
              что делал:
              1) скинул 3 этих файлика в \etc\zabbix\externalscripts
              дал полные права на всё.
              2) создал Метод оповещения (Media type)
              type=script
              Script name=sms.sh
              3) прописываю пользоватлю Admin телефон: 7911ххххххх
              4) configuration-Actions
              создаю действие без условий, выбираю отправить сообщение, пользователь Админ, СМС

              провоцирую триггер - он всплывает в заббиксе. смс не приходи.
              что я сделал не так?

              в панели управления smstraffic.ru ничего настраивать не нужно?

              Comment

              • Flegel
                Member
                • Nov 2009
                • 42

                #8
                Посмотрите лог событий в Zabbix
                Administration - Audit - Logs на предмет ошибки работы скрипта

                Ничего дополнительно настраивать в панели управления smstraffic.ru не требуется

                Попробовать отправить SMS из консоли.
                root@server /etc/zabbix/scripts]# ./sms.sh номер test test
                Interactive mode enabled

                Array
                (
                [to] => номер
                [body] => test
                [subj] => test
                )

                1940436345, OK
                Last edited by Flegel; 22-11-2010, 12:49.

                Comment

                • sancho78rus
                  Junior Member
                  • Nov 2010
                  • 23

                  #9
                  запустил вручную run.sh 7911xxxxxxx test test
                  пришлось измениь запуск на php -a .....
                  ругается:
                  Interactive mode enabled

                  Array
                  (
                  )
                  PHP Notice: Undefined variable: pa in /etc/zabbix/externalscripts/run.php on line 7
                  Last edited by sancho78rus; 22-11-2010, 19:53.

                  Comment

                  • sancho78rus
                    Junior Member
                    • Nov 2010
                    • 23

                    #10
                    ну я туплю...
                    был лишний перенос строки. заработало из командной строки.
                    из заббикса молчит. в логах не нашел ошибок.

                    Comment

                    • sancho78rus
                      Junior Member
                      • Nov 2010
                      • 23

                      #11
                      а в заббиксе не нужно настраивать Администрирование-Скрипты?

                      Comment

                      • Badisoft
                        Member
                        • Nov 2010
                        • 94

                        #12
                        Originally posted by sancho78rus
                        пробую сейчас настроить смс с помщью этого скрипта.
                        есть тестовый доступ на 30 СМС в smstraffic.ru
                        У абонентов Билайн есть бесплатный email-to-sms гейт sms.beeonline.ru. Пользуюсь им для заббикса. SMS-ка может появиться на телефоне часика через три-четыре после отправки. Не сказать, что такое часто происходит, но бывает. Обычно приходит в течение минуты, если не быстрее.

                        Раньше аналогичный сервис был у Мегафона, когда он был еще NordWestGSM. Cейчас не знаю.

                        Как мне кажется, отправка мониторинговых сообщений на email2sms гейт это порочный путь. Если, конечно, отправлять не через свисток, воткнутый прямиком в машину с заббиксом. А то ведь можно довольно успешно отправить сообщение о повисшем роутере через повисший роутер .

                        Дима.

                        Comment

                        • Flegel
                          Member
                          • Nov 2009
                          • 42

                          #13
                          В настройках скриптов ничего делать не нужно.
                          Проверьте права доступа на скрипты для пользователя под которым работает Zabbix
                          В моем случае chmod 755 на все скрипты
                          chown -R zabbix:zabbix scripts

                          Comment

                          • sancho78rus
                            Junior Member
                            • Nov 2010
                            • 23

                            #14
                            Originally posted by flegel
                            В настройках скриптов ничего делать не нужно.
                            Проверьте права доступа на скрипты для пользователя под которым работает zabbix
                            В моем случае chmod 755 на все скрипты
                            chown -r zabbix:zabbix scripts
                            права и владельца выставил.
                            не помогает.

                            Comment

                            • Flegel
                              Member
                              • Nov 2009
                              • 42

                              #15
                              Originally posted by sancho78rus
                              права и владельца выставил.
                              не помогает.
                              Попробуйте заменить значение в поле Subject на что-нибкдь покороче...например test. Сотовые операторы при работе с смс сообщениями накладываю ограничение на количество символов в поле "от кого".
                              Скрипт при этом вываливается с ошибкой - Originator is too long...
                              Zabbix эту ошибку игнорирует, так как она проявляется уже в .php скриптах, к которым он не имеет никакого отношения
                              Attached Files

                              Comment

                              Working...