#!/usr/bin/perl -w
use strict;
use LWP;
# simple script to check your clickatell balance.
# set $min_credits to your desired threshold.
# huw@munted.org 2005

# Clickatell config
my $user = 'your_username';
my $pass = 'your_password';
my $url_base = 'http://api.clickatell.com/http';
my $api_id = 'your_api_id';

my $debug =0;
my $min_credits = 150;
my $credits_remaining;

my $ua = new LWP::UserAgent;
$ua->agent("Mozilla/4.0");
my $sid = &get_sessid();
my $url = $url_base."/getbalance?session_id=$sid";
my $req = HTTP::Request->new(POST => $url);
my $res = $ua->request($req);
if ($res->is_success) {
	my ($status,$credit) = split /:/,$res->content;
	(print "Cant get balance" && exit 1) if ($status =~ /ERR/);
	$credit =~ s/\s//;
	$credits_remaining = $credit;
	print "There are $credit credits remaining\n" if $debug;
}
else {
	print "Cant get balance";
	exit 1;
}
if ($credits_remaining <= $min_credits) {
	print "Need to buy more sms credits, only $credits_remaining left\n";
	exit 1;
}
exit 0;

sub get_sessid {
    my $url = $url_base."/auth?api_id=$api_id&user=$user&password=$pass";
    my $req = HTTP::Request->new(GET => $url);
    $req->header('Accept' => 'text/html');
    my $res = $ua->request($req);
    if ($res->is_success) {
        my ($result,$id) = split /:/,$res->content;
        die "Cant get a sessid :- $id\n" if ($result =~ /ERR/);
        $id =~ s/\s//;
        return $id;
    }
    else {
        die "Unable to authenticate to the clickatell gateway\n";
    }
}

