#!/usr/bin/perl use strict; use C4::SMS; use C4::Auth; use C4::Context; use C4::Members; use C4::Circulation; my ($res,$ua); my %commands; my $message; my $phone; my $result; my $errorcode; my $smsid; my $wait=600;## 10 mn. wait between sms checking my $dbh=C4::Context->dbh; STARTAGAIN: ($res,$ua)=get_sms_auth(); AGAIN: $errorcode=0; if ($res->{pRetCode}==200){ $result=read_sms($ua,$res->{pSessionId}); $errorcode=$result->{pErrCode}; print "connected\n"; }else{ kill_sms($ua,$res->{pSessionId}); warn (error_codes($res->{pErrCode}),$res->{pErrcode}) ; # sleep $wait; goto FINISH; } if ($errorcode && $errorcode !=-9005){ kill_sms($ua,$res->{pSessionId}); warn error_codes($errorcode) ; # sleep $wait; goto FINISH; }elsif ($errorcode ==-9005){ print "no more messages to read\n"; goto WAITING; } #Parse the message to a useful hash my @action=parse_message( $result->{pContent}); ## Log the request in our database; $smsid=write_sms($action[1], $result->{pContent},$result->{pMsisdn}); print "message logged\n"; ##Now do the service required if (uc($action[0]) eq "RN"){ print "dealing request\n"; my ($ok,$cardnumber)=C4::Auth::checkpw($dbh,$action[1],$action[2]); if($ok){ my $item=getiteminformation(undef,0,$action[3]); if ($item){ my $borrower=getmember($cardnumber); my $status=renewstatus(undef,$borrower->{borrowernumber},$item->{itemnumber}); if ($status==1){ my $date=renewbook(undef,$borrower->{borrowernumber},$item->{itemnumber}); $message="Uzatildi :Renewed ".$item->{barcode}." : ".$date; my $send=send_message($result,$message,$smsid); }elsif($status==2){ $message="Cok erken- yenilenmedi! :Too early-not renewed:".$item->{barcode}; my $send=send_message($result,$message,$smsid); }elsif($status==3){ $message="Uzatamazsiniz GERI getiriniz! :No more renewals RETURN the item:".$item->{barcode}; my $send=send_message($result,$message,$smsid); }elsif($status==4){ $message="Ayirtildi GERI getiriniz! :Reserved RETURN the item:".$item->{barcode}; my $send=send_message($result,$message,$smsid); }elsif($status==0){ $message="Uzatilamaz! :Can not renew:".$item->{barcode}; my $send=send_message($result,$message,$smsid); } }else{ $message="Yanlis barkot! :Wrong barcode!"; my $send=send_message($result,$message,$smsid); }#wrong barcode }else{ $message="Yanlis kullanici/sifre! :Wrong username/password!"; my $send=send_message($result,$message,$smsid); }##wrong user/pass }else{ ## reply about error $message="Yanlis mesaj formati! :Wrong message! : RN usercardno password barcode"; my $send=send_message($result,$message,$smsid); }### wrong service goto AGAIN; WAITING: ##Now send the messages waiting in queue my $smssth=$dbh->prepare("SELECT smsid,user_phone,message from sms_messages where date_replied like '0000-00-00%' "); $smssth->execute(); my @phones; while (my $data=$smssth->fetchrow_hashref){ push @phones,$data; } $smssth->finish; foreach my $user(@phones){ print "replying $user->{user_phone}"; my $send=send_sms($ua,$user->{user_phone},$user->{message},$res->{pSessionId}); my $reply="--failed\n"; if ($send->{pRetCode}==200){ $reply= "--replied\n"; mod_sms($user->{smsid},"Sent"); } print $reply; } $dbh->disconnect; sub send_message{ my ($mes,$message,$smsid)=@_; my $send=send_sms($ua,$mes->{pMsisdn},$message,$res->{pSessionId}); if ($send->{pRetCode}==200){ mod_sms($smsid,$message); }else{ my $error=error_codes($send->{pErrCode}); mod_sms($smsid,"Not replied error:".$error); } return $send; } FINISH: 1; __END__