Ankündigung

Einklappen
Keine Ankündigung bisher.

SMS per HTTP request senden

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    [WireGate-Plugin] SMS per HTTP request senden

    Ein einfaches Script, um eine SMS per HTTP request abzusetzen, hier über sms77.de als Anbieter.

    Code:
    # Wiregate Plugin, um SMS per Anbieter SMS77.de zu versenden
    # HTTP API Version 0.76 Spezifikationen: http://sms77.de/api.pdf
    # Version 0.01 07.07.2015
    # Copyright: nipponichi, License: GPLv2
    # Steuerung über Variablen:
    #   <plugin_name>_request  0/1
    #   <plugin_name>_data     zu sendener Text
    
    #####################
    ### EINSTELLUGNEN ###
    #####################
    
    my $user  = "user1234567";               # user
    my $pwrd  = "1234";                      # password
    my $telno = "0160123456789";             # Zieltelefonnummer(n), per Komma getrennt
    my $from  = "Niemand";                   # Absender 16 Ziffern oder 11 Zeichen, nicht basicplus
    my $prio  = "basicplus";                 # basicplus/quality/direct
    
    $plugin_info{$plugname.'_cycle'} = 60;
    
    #####################
    
    my $gv_event=undef;
    if (!$plugin_initflag) {      # aus welchem Grund laeuft das Plugin gerade
      $gv_event = EVENT_RESTART;  # Restart des daemons / Reboot
    } elsif ($plugin_info{$plugname.'_lastsaved'} > $plugin_info{$plugname.'_last'}) {
      $gv_event = EVENT_MODIFIED; # Plugin modifiziert
    } elsif (%msg) {
      $gv_event = EVENT_BUS;      # Bustraffic
    } elsif ($fh) {
      $gv_event = EVENT_SOCKET;   # Netzwerktraffic
    } else {
      $gv_event = EVENT_CYCLE;    # Zyklus
    }
    
    if (($gv_event eq EVENT_RESTART) or ($gv_event eq EVENT_MODIFIED)) {
        $plugin_info{$plugname.'_request'} = 0;
        $plugin_info{$plugname.'_data'} = '';
        $plugin_info{$plugname.'_prio'} = 0;
    } elsif ($gv_event eq EVENT_BUS) {
    } elsif ($gv_event eq EVENT_SOCKET) {
    } elsif ($gv_event eq EVENT_CYCLE) {
        if ($plugin_info{$plugname.'_request'} == 1) {
            use LWP::UserAgent;
            use URI::Escape;
            use Encode;
    
            my ($userAgent, $request, $response, $requestURL);
            $userAgent = LWP::UserAgent->new;
            $userAgent->agent("WireGatePlugin/1.0");
                                                                           # für Test: "&debug=1"
            $requestURL = sprintf("https://gateway.sms77.de/?u=%s&p=%s&to=%s&text=%s&type=%s&from=%s",
                uri_escape($user),
                uri_escape($pwrd),
                uri_escape($telno),
                uri_escape(encode("utf8", $plugin_info{$plugname.'_data'})),
                uri_escape($prio),
                uri_escape(encode("utf8", $from)) );
          
            $request = HTTP::Request->new(GET => $requestURL);
            #$request->timeout(5);
            $response = $userAgent->request($request);
            
            if ($response->is_success) {
              plugin_log($plugname, "SMS senden erfolgreich: $telno, $plugin_info{$plugname.'_data'}");
            } elsif ($response->code == 401) {
              plugin_log($plugname, "SMS nicht gesendet.");
            } else {
              plugin_log($plugname, "SMS nicht gesendet " . $response->content);
            }
    
            $plugin_info{$plugname.'_request'} = 0;
            $plugin_info{$plugname.'_data'} = '';
            $plugin_info{$plugname.'_prio'} = 0;
        }
    }
    return;
    Aufruf in anderem Script durch
    Code:
        $plugin_info{'SendSms.pl_request'} = 1;
        $plugin_info{'SendSms.pl_data'} = 'Hallo';
    Zuletzt geändert von nipponichi; 08.07.2015, 20:28.

    #2
    Zitat von nipponichi Beitrag anzeigen
    Aufruf in anderem Script durch
    Code:
    $plugin_info{'SendSms.pl_request'} = 1;
    $plugin_info{'SendSms.pl_data'} = 'Hallo';
    Was mir gerade spontan hierzu einfällt... Bei einem cycle von 60 Sekunden kann der Aufruf natürlich etwas dauern. Schon mal dran gedacht auch den letzten Aufruf des Plugins zu modifizieren?
    Code:
    $plugin_info{'SendSms.pl_last'} = time() - 60;
    bzw. allgemeiner:
    Code:
    $plugin_info{'SendSms.pl_last'} = time() - $plugin_info{'SendSms.pl_cycle'};
    Ungetestet... Aber theoretisch müsste das Plugin dann sofort ausgeführt werden.

    Kommentar

    Lädt...
    X