summaryrefslogtreecommitdiff
path: root/localsendsms
blob: 6449e3c0b5edc810542aa8d167c5a851a611d512 (plain)
  1. #!/usr/bin/perl
  2. #
  3. # /usr/local/sbin/localsendsms
  4. # Copyright 2009-2010, Jonas Smedegaard <dr@jones.dk>
  5. #
  6. # Send a message through Kannel
  7. use strict;
  8. use warnings;
  9. use Env qw[$debug $info $warn $dummy $urldecode];
  10. use Log::Log4perl qw(:easy);
  11. use Text::Unidecode;
  12. use Encode 2.12 qw(encode decode_utf8 _utf8_off); # need v2.12 to support coderef
  13. use LWP::UserAgent;
  14. use URI::Escape;
  15. my $sms_url = $ENV{SMS_URL} || "http://localhost:13013/cgi-bin/sendsms";
  16. my $sms_usertag = $ENV{SMS_USERTAG} || "username";
  17. my $sms_user = $ENV{SMS_USER} || "tester";
  18. my $sms_pw = $ENV{SMS_PW} || "foobar";
  19. my $sms_api = $ENV{SMS_API};
  20. my $sms_phone = $ENV{SMS_PHONE};
  21. my $sms_smsc = $ENV{SMS_SMSC};
  22. my $sms_msgtag = $ENV{SMS_MSGTAG} || "text";
  23. my $sms_cp = $ENV{SMS_CP} || "utf8";
  24. my $sms_concat = $ENV{SMS_CONCAT};
  25. my $sms_dlr_mask = $ENV{SMS_DLR_MASK};
  26. my $sms_dlr_url = $ENV{SMS_DLR_URL};
  27. my $sms_validity = $ENV{SMS_VALIDITY};
  28. # decode data if passed from kannel
  29. if ($urldecode) {
  30. @ARGV = uri_unescape(@ARGV);
  31. }
  32. my ($phone) = shift @ARGV;
  33. # strip international prefix
  34. # (prefix is optional some places and illegal at other places - forgot where)
  35. #$phone =~ s/\+/ /g;
  36. if ($debug) {
  37. Log::Log4perl->easy_init($DEBUG);
  38. } elsif ($INFO) {
  39. Log::Log4perl->easy_init($INFO);
  40. } elsif ($WARN) {
  41. Log::Log4perl->easy_init($WARN);
  42. } elsif ($ERROR) {
  43. Log::Log4perl->easy_init($ERROR);
  44. }
  45. # based on Text::Unidecode bug#8017: http://rt.cpan.org/Ticket/Display.html?id=8017#txn-322351
  46. sub transliterate {
  47. my ($tocharset, $string) = @_;
  48. my $res = encode($tocharset, decode_utf8($string), sub {
  49. my $ascii = unidecode(chr $_[0]);
  50. _utf8_off($ascii);
  51. $ascii;
  52. });
  53. return $res;
  54. }
  55. sub sendmsg {
  56. my ($phone, $desc, $msg) = @_;
  57. unless ($dummy) {
  58. my $ua = LWP::UserAgent->new(agent => "localsendsms");
  59. $ua->timeout(10);
  60. my $url = $sms_url
  61. . '?' . $sms_usertag . '=' . uri_escape($sms_user)
  62. . '&password=' . uri_escape($sms_pw)
  63. . '&to=' . uri_escape($phone);
  64. $url .= '&api_id=' . uri_escape($sms_api) if ($sms_api);
  65. $url .= '&from=' . uri_escape($sms_phone) if ($sms_phone);
  66. $url .= '&smsc=' . uri_escape($sms_smsc) if ($sms_smsc);
  67. $url .= '&concat=' . uri_escape($sms_concat) if ($sms_concat);
  68. $url .= '&dlr-mask=' . uri_escape($sms_dlr_mask) if ($sms_dlr_mask);
  69. $url .= '&dlr-url=' . uri_escape($sms_dlr_url) if ($sms_dlr_url);
  70. $url .= '&validity=' . uri_escape($sms_validity) if ($sms_validity);
  71. $url .= '&' . $sms_msgtag . '=' . uri_escape(transliterate($sms_cp, $msg));
  72. DEBUG "Sending request: $url";
  73. my $response = $ua->request(HTTP::Request->new('GET', $url));
  74. unless ($response->is_success) {
  75. ERROR $response->status_line;
  76. }
  77. DEBUG "Done $desc";
  78. } else {
  79. print STDERR "\n --> $phone: $desc\n";
  80. print STDERR $msg . "\n";
  81. }
  82. }
  83. &sendmsg($phone, "message", "@ARGV");
  84. 1;