#! /opt/csw/php5/bin/php
<?php
/*
* Send SMS notifications using the Clickatell HTTP API Interface
*
* Description of command line parameters: see further down...
*
* Clickatell HTTP API Documentation:
* http://www.clickatell.com/downloads/http/Clickatell_HTTP.pdf
* -> http://docs.google.com/viewer?url=http://www.clickatell.com/downloads/http/Clickatell_HTTP.pdf
*/
// "Enhance" the implode() function to work with associative arrays (eg. array("user" => "john"))
function implode_assoc($array, $inner_glue = '=', $outer_glue = '&') {
foreach( $array as $key => $item )
$output[] = $key . $inner_glue . $item;
return implode($outer_glue,
$output);
}
// Parse command line parameters
$args =
getopt('t:u:p:i:@:f:b:c:q:x:');
if (
($args == FALSE)
){
echo "Error! Command line arguments could not be parsed!
* The script requires the following command line parameters:
* # -t ['to' SMS Recipient Number - \$CONTACTPAGER\$] #
* # -u [Clickatell Username] #
* # -p [Clickatell Password] #
* # -i [Clickatell API ID] #
* -@ [Scheduled Delivery Time; When should the message be sent?; Formats: Unix timestamp (1233133393) or UTC date format (2009-01-30T14:00:00Z)]
* -f ['from' Source Address A valid international format number between 1 and 16 characters long, or an 11 character alphanumeric string.]
* -b [Clickatell Callback type; see 5.2.4 Callback URL (callback); 0 = off, 3 = intermediate & final status]
* -c [Max. number of concatted msgs to send out. By default (1), only 1 160char msg is send. If set to 2 or 3, 2x or 3x (160-7) char are allowed]
* -q [Required SMS Features; see 5.2.8 Required features (req_feat); needs to incl. 16 if using Alpha From]
* -x [Max. Credits; how many credits is ONE SMS message allowed to consum?; should be set to 3, to allow every possible SMS]
* Parameters listed with # are REQUIRED; others are optional.
* The script reads the SMS text from STDIN, ie. invoke it like so:
* printf 'Hello\\nWorld!' | " . $_SERVER['SCRIPT_NAME'] . " -u JohnDoe -p FooBar -i 9876543 ...
* Clickatell HTTP API Documentation:
* http://www.clickatell.com/downloads/http/Clickatell_HTTP.pdf
* -> http://docs.google.com/viewer?url=http://www.clickatell.com/downloads/http/Clickatell_HTTP.pdf
";
}
echo "Welcome - Going to send an SMS....\n";
// "Fetch" parameters from the $args array
define('CLICKATELL_USER',
$args['u']);
define('CLICKATELL_PASS',
$args['p']);
define('CLICKATELL_API_ID',
$args['i']);
// "Sanitize" the number of the recipient - ie. drop any non-digit char
// Set "FROM"
// SMS Concatenation
// Maximum number of SMS to send, which makes up 1 msg at the
// receiver. Allows to send SMS messages which are longer than
// 160char
// See 5.2.6 Concatenation (concat)
if (isset($args['c'])){ define('SMS_CONCATS',
$args['c']);
}
// Callback Value
// See 5.2.4 Callback URL (callback)
//
// Callback Message status types returned Message status code returned
// value
// 0 No message status returned.
// 1 Returns only intermediate statuses. 002, 003, 011
// 2 Returns only final statuses of a message. 004, 005, 006, 007, 008, 010, 012
// 3 Returns both intermediate and final statuses of a msg. All except 001
if (isset($args['b'])){ define('CALLBACK_VALUE',
$args['b']);
}
// Required Features
// See 5.2.8 Required features (req_feat)
//
// Hex Decimal Feature Description
// 0x0001 1 FEAT_TEXT Text set by default.
// 0x0002 2 FEAT_8BIT 8-bit messaging set by default.
// 0x0004 4 FEAT_UDH UDH (Binary) - set by default.
// 0x0008 8 FEAT_UCS2 UCS2 / Unicode set by default.
// 0x0010 16 FEAT_ALPHA Alpha source address (from parameter).
// 0x0020 32 FEAT_NUMER Numeric source address (from parameter).
// 0x0200 512 FEAT_FLASH Flash messaging.
// 0x2000 8192 FEAT_DELIVACK Delivery acknowledgments.
// 0x4000 16384 FEAT_CONCAT Concatenation set by default.
if (isset($args['q'])){ define('REQ_FEAT',
$args['q']);
}
// Maximum Credits
// This parameter overrides the maximum charge associated with message delivery,
// 5.2.7 Maximum credits (max_credits)
if (isset($args['x'])){ define('MAX_CREDITS',
$args['x']);
}
// Scheduled Time
// The purpose of this parameter is to allow you to specify when you want a message to be delivered.
// See 5.2.16 Scheduled Time
// Formats:
// 1) Unix timestamp:
// scheduled_time:1233133393
// 2) UTC date format:
// scheduled_time:2009-01-30T14:00:00Z
if (isset($args['@'])){ define('SCHEDULED_TIME',
$args['@']);
}
// Read the to-be sent message from stdin.
// Convert UTF-8 chars -> iso-8859-1
// Only allow $concat_count * (160-7) chars in $text
$text =
substr($text,
0, SMS_CONCATS *
(160-7));
} else {
$text =
substr($text,
0,
160);
}
// URL to prepend to all outgoing calls
define('BASEURL',
"http://api.clickatell.com");
// auth call
$cmd = "auth";
$cmd_parms =
array("user" => CLICKATELL_USER,
"password" => CLICKATELL_PASS,
"api_id" => CLICKATELL_API_ID
);
$url = BASEURL .
"/http/" .
$cmd .
"?" . implode_assoc
(array_map("urlencode",
$cmd_parms));
// do auth call
// split our response. return string is on first line of the data returned
$sess =
split(":",
$ret[0]);
// Did we get an "OK"? If so, continue with sending the message.
if ($sess[0] == "OK") {
$sess_id =
trim($sess[1]);
// remove any whitespace
$cmd = "sendmsg";
$cmd_parms =
array("session_id" =>
$sess_id,
"to" => TO,
"text" => $text
);
if (defined('MAX_CREDITS')){ $cmd_parms['max_credits'] = MAX_CREDITS;
}
if (defined('FROM')){ $cmd_parms['from'] = FROM;
}
if (defined('REQ_FEAT')){ $cmd_parms['req_feat'] = REQ_FEAT;
}
if (defined('CALLBACK_VALUE')){ $cmd_parms['callback'] = CALLBACK_VALUE;
}
if (defined('SMS_CONCATS')){ $cmd_parms['concat'] = SMS_CONCATS;
}
if (defined('SCHEDULED_TIME')){ $cmd_parms['scheduled_time'] = SCHEDULED_TIME;
}
$url = BASEURL .
"/http/" .
$cmd .
"?" . implode_assoc
(array_map("urlencode",
$cmd_parms));
// echo 'url: ' . $url . "\n";
// exit(42);
// do sendmsg call
$send =
split(":",
$ret[0]);
if ($send[0] == "ID") {
message ID: ". $send[1] . "\n";
} else {
echo "send message failed: " .
$ret[0] .
"\n";
}
} else {
echo "Authentication failure: " .
$ret[0] .
"\n";
}
// We cannot reach this spot!
echo "ERROR! Impossible program location!";
// EOF //