#!/usr/bin/perl package SMS::Send::CZ::Konzulta; # ABSTRACT: SMS::Send driver for Konzulta - Czech Republic use warnings; use strict; use Carp; our $VERSION = "1.001"; $VERSION = eval $VERSION; use base 'SMS::Send::Driver'; use Log::LogLite; use XML::Simple; use LWP::UserAgent; use DateTime qw( ); use Text::Unidecode; sub new { my $class = shift; my %params = @_; my $LOG_FILE = "/var/log/konzulta.log"; my $ERROR_LOG_LEVEL = 6; open HANDLE, ">>$LOG_FILE"; close HANDLE; my $dt = DateTime->now(time_zone => 'Europe/Prague'); my $self = bless { login => $params{_login}, password => $params{_password}, stamp => $dt->strftime('%Y%m%dT%H%M%S'), log => (-w $LOG_FILE) ? new Log::LogLite($LOG_FILE, $ERROR_LOG_LEVEL) : 0 }, $class; $self->log("Driver Konzulta created", 4); $self; } sub log { my ($self, $msg, $level) = @_; if ($self->{'log'}) { $self->{'log'}->write($msg, $level); } } sub send_sms { my ($self, %args) = @_; my $url = 'https://www.sms-operator.cz/webservices/webservice.aspx'; $args{'text'} = unidecode($args{'text'}); $self->log("TEXT: " . $args{'text'} . ", TO: " . $args{'to'}, 4); my $ua = LWP::UserAgent->new(ssl_opts => { verify_hostname => 0 }); my $message = " SMS $self->{'login'} $self->{'password'} $args{'text'} $args{'to'} $self->{'stamp'} "; my $res = $ua->post($url, Content_Type => 'text/xml', Content => $message); if( $res->is_success ) { $self->log("HTTP SUCCESS", 4); if ( $res->decoded_content ) { my $parser = new XML::Simple; my $data = $parser->XMLin($res->decoded_content); if ($data->{'DataArray'}->{'DataItem'}->{'Status'} == 0) { $self->log("SMS #" . $data->{'DataArray'}->{'DataItem'}->{'SmsId'} . " sent", 4); return 1; } else { $self->log("SMS processing error: " . $data->{'DataArray'}->{'DataItem'}->{'Status'}, 4); return 0; } } else { $self->log("SMS processing error: invalid credentials?", 4); return 0; } } else { $self->log("HTTP error #" . $res->code() . ": " . $res->message(), 4); return 0; } } __END__ =pod =encoding UTF-8 =head1 NAME SMS::Send::CZ::Konzulta - SMS::Send driver for Konzulta - Czech Republic =head1 VERSION version 1.001 =head1 SYNOPSIS use SMS::Send; my $sender = SMS::Send->new('CZ::Konzulta', _login => 'who', _password => 'secret', ); my $sent = $sender->send_sms( text => 'Test SMS', to => '604111111', ); # Did it send? if ( $sent ) { print "Sent test message\n"; } else { print "Test message failed\n"; } =head1 METHODS =head2 log Logs message to /var/log/konzulta.log if this file is accessible and writable =head2 send_sms Sends the message using provider's API at https://www.sms-operator.cz/webservices/webservice.aspx and takes additional arguments: 'text' containgin the message itself and 'to' with recipient's number. Processing information is automatically logged to /var/log/konzulta.log to allow tracking of possible problems. Returns true if the msssage was successfully sent Returns false if an error occured =head1 AUTHOR Radek Šiman =head1 COPYRIGHT AND LICENSE This software is copyright (c) 2017 by R-Bit Technology, s.r.o. This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself. =cut