blob: 6b69e93e306a7c43c74a32d3984460a21537e9d7 (
plain)
- #!/usr/bin/perl
- #
- # /usr/local/sbin/localsendsms
- # Copyright 2009-2010, Jonas Smedegaard <dr@jones.dk>
- #
- # Send a message through Kannel
- use strict;
- use warnings;
- use Env qw[$debug $info $warn $dummy $urldecode];
- use Log::Log4perl qw(:easy);
- use Text::Unidecode;
- use Encode 2.12 qw(encode decode_utf8 _utf8_off); # need v2.12 to support coderef
- use LWP::UserAgent;
- use URI::Escape;
- my $sms_url = $ENV{SMS_URL} || "http://localhost:13013/cgi-bin/sendsms";
- my $sms_usertag = $ENV{SMS_USERTAG} || "username";
- my $sms_user = $ENV{SMS_USER} || "tester";
- my $sms_pw = $ENV{SMS_PW} || "foobar";
- my $sms_api = $ENV{SMS_API};
- my $sms_callback = $ENV{SMS_CALLBACK};
- my $sms_phone = $ENV{SMS_PHONE};
- my $sms_smsc = $ENV{SMS_SMSC};
- my $sms_msgtag = $ENV{SMS_MSGTAG} || "text";
- my $sms_cp = $ENV{SMS_CP} || "utf8";
- my $sms_concatenation = $ENV{SMS_CONCATENATION};
- my $sms_concat = $ENV{SMS_CONCAT};
- my $sms_dlr_mask = $ENV{SMS_DLR_MASK};
- my $sms_dlr_url = $ENV{SMS_DLR_URL};
- my $sms_escalate = $ENV{SMS_ESCALATE};
- my $sms_validity = $ENV{SMS_VALIDITY};
- my $sms_req_feat = $ENV{SMS_REQ_FEAT};
- my $sms_binfo = $ENV{SMS_BINFO};
- my $stripprefix = $ENV{stripprefix};
- # decode data if passed from kannel
- if ($urldecode) {
- @ARGV = uri_unescape(@ARGV);
- }
- my ($phone) = shift @ARGV;
- # strip international prefix
- # (prefix is optional some places and illegal at other places - forgot where)
- $phone =~ s/^\+//g if ($stripprefix);
- $sms_phone =~ s/^\+//g if ($stripprefix);
- if ($debug) {
- Log::Log4perl->easy_init($DEBUG);
- } elsif ($INFO) {
- Log::Log4perl->easy_init($INFO);
- } elsif ($WARN) {
- Log::Log4perl->easy_init($WARN);
- } elsif ($ERROR) {
- Log::Log4perl->easy_init($ERROR);
- }
- # based on Text::Unidecode bug#8017: http://rt.cpan.org/Ticket/Display.html?id=8017#txn-322351
- sub transliterate {
- my ($tocharset, $string) = @_;
- my $res = encode($tocharset, decode_utf8($string), sub {
- my $ascii = unidecode(chr $_[0]);
- _utf8_off($ascii);
- $ascii;
- });
- return $res;
- }
- sub sendmsg {
- my ($from, $to, $desc, $msg) = @_;
- unless ($dummy) {
- my $ua = LWP::UserAgent->new(agent => "localsendsms");
- $ua->timeout(10);
- my $url = $sms_url
- . '?' . $sms_usertag . '=' . uri_escape($sms_user)
- . '&password=' . uri_escape($sms_pw)
- . '&to=' . uri_escape($to);
- $url .= '&api_id=' . uri_escape($sms_api) if ($sms_api);
- $url .= '&callback=' . uri_escape($sms_callback) if ($sms_callback);
- $url .= '&from=' . uri_escape($from) if ($from);
- $url .= '&smsc=' . uri_escape($sms_smsc) if ($sms_smsc);
- $url .= '&concatenation=true' if ($sms_concatenation);
- $url .= '&concat=' . uri_escape($sms_concat) if ($sms_concat);
- $url .= '&dlr-mask=' . uri_escape($sms_dlr_mask) if ($sms_dlr_mask);
- $url .= '&dlr-url=' . uri_escape($sms_dlr_url) if ($sms_dlr_url);
- $url .= '&escalate=' . uri_escape($sms_escalate) if ($sms_escalate);
- $url .= '&validity=' . uri_escape($sms_validity) if ($sms_validity);
- $url .= '&req_feat=' . uri_escape($sms_req_feat) if ($sms_req_feat);
- $url .= '&binfo=' . uri_escape($sms_binfo) if ($sms_binfo);
- $url .= '&' . $sms_msgtag . '=' . uri_escape(transliterate($sms_cp, $msg));
- DEBUG "Sending request: $url";
- my $response = $ua->request(HTTP::Request->new('GET', $url));
- unless ($response->is_success) {
- ERROR $response->status_line;
- }
- DEBUG "Done $desc";
- } else {
- print STDERR "\n [$from --> $to: $desc]\n\n";
- print STDERR $msg . "\n";
- }
- }
- &sendmsg($sms_phone, $phone, "message", "@ARGV");
- 1;
|