Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
SMSNotifier server settings parameters
#1
Hi,
I am facing a problem with the number of parameters that my sms service providers needs in the sms send url. The format required is -

[http://] [sms[.]bulksmsservice[.]in/api/mt/SendSMS?user=demo&password=demo123&senderid=WEBSMS&channel=Promo&DCS=0&flashsms=0&number=91989xxxxxxx&text=test message&route=##


Please let me know how can i add the additional parameters - channel, DCS, and flashsms   - and their values so that the url is generated.


Second, how and where can i see the error log of smsnotifier, or else, how can i view the generated url, so i can debug the problem.


thanks,
Anil
Anil Purushothaman
Reply
#2
Have you seen the "Versatile" Provider? That one seems to have exactly the same parameters you are asking for. In any case, my first proposal would be to create a configuration screen similar to the versatile one so you can set the values.

does that help?
Joe
TSolucio
Reply
#3
If I remember correctly the SMS error messages will be logged to the main debug file, but it all depends on the messages that the programer put there. If they did not add any error messages then you won't see any.
Joe
TSolucio
Reply
#4
Thanks Joe,
As suggested, i have modified the provider as follows, and able to see the configuration screen in smsnotifier server configuration also. Values for each parameter is also saving in the database like this - {"senderid":"ABCDEF","channel":"Trans","DCS":"0","flashsms":"0","route":"12"}
However, messages still not delivered.
We need to see what the serviceURL is being generated by this code, to be able to debug.

include_once dirname(__FILE__) . '/../ISMSProvider.php';
include_once 'vtlib/Vtiger/Net/Client.php';

class AutoProvider implements ISMSProvider {

private $_username;
private $_password;
private $_parameters = array();

const SERVICE_URI = 'http://sms.bulksmsservice.in/api/mt';

private static $REQUIRED_PARAMETERS = array('senderid','channel','DCS','flashsms','route');

function __construct() {
}

public function setAuthParameters($username, $password) {
$this->_username = $username;
$this->_password = $password;
}

public function setParameter($key, $value) {
$this->_parameters[$key] = $value;
}

public function getParameter($key, $defvalue = false) {
if(isset($this->_parameters[$key])) {
return $this->_parameters[$key];
}
return $defvalue;
}

public function getRequiredParams() {
return self::$REQUIRED_PARAMETERS;
}

public function getServiceURL($type = false) {
if($type) {
switch(strtoupper($type)) {

//case self::SERVICE_AUTH: return self::SERVICE_URI . '/http/auth';
//case self::SERVICE_SEND: return self::SERVICE_URI . '/http/sendmsg';
//case self::SERVICE_QUERY: return self::SERVICE_URI . '/http/querymsg';
//AP : modified code
case self::SERVICE_SEND: return self::SERVICE_URI . '/SendSMS';
}
}
return false;
}

protected function prepareParameters() {
$params = array('user' => $this->_username, 'password' => $this->_password);
foreach (self::$REQUIRED_PARAMETERS as $key) {
$params[$key] = $this->getParameter($key);
}

return $params;
}

public function send($message, $tonumbers) {

if(!is_array($tonumbers)) {
$tonumbers = array($tonumbers);
}

$params = $this->prepareParameters();

$params['text'] = $message;
$params['number'] = implode(',', $tonumbers);

$serviceURL = $this->getServiceURL(self::SERVICE_SEND);
$httpClient = new Vtiger_Net_Client($serviceURL);
$response = $httpClient->doPost($params);
$result['status'] = $response;
$responseLines = split("\n", $response);

$results = array();
foreach($responseLines as $responseLine) {

$responseLine = trim($responseLine);
if(empty($responseLine)) continue;

$result = array( 'error' => false, 'statusmessage' => '' );
if(preg_match("/ERRSad.*)/", trim($responseLine), $matches)) {
$result['error'] = true;
$result['to'] = $tonumbers[$i++];
$result['statusmessage'] = $matches[0]; // Complete error message
} else if(preg_match("/ID: ([^ ]+)TOSad.*)/", $responseLine, $matches)) {
$result['id'] = trim($matches[1]);
$result['to'] = trim($matches[2]);
$result['status'] = self::MSG_STATUS_PROCESSING;

} else if(preg_match("/ID: (.*)/", $responseLine, $matches)) {
$result['id'] = trim($matches[1]);
$result['to'] = $tonumbers[0];
$result['status'] = self::MSG_STATUS_PROCESSING;
}
$results[] = $result;
}
return $results;
}

public function query($messageid) {

$params = $this->prepareParameters();
$params['apimsgid'] = $messageid;

$serviceURL = $this->getServiceURL(self::SERVICE_QUERY);
$httpClient = new Vtiger_Net_Client($serviceURL);
$response = $httpClient->doPost($params);

$response = trim($response);

$result = array( 'error' => false, 'needlookup' => 1 );

if(preg_match("/ERR: (.*)/", $response, $matches)) {
$result['error'] = true;
$result['needlookup'] = 0;
$result['statusmessage'] = $matches[0];

} else if(preg_match("/ID: ([^ ]+) Status: ([^ ]+)/", $response, $matches)) {
$result['id'] = trim($matches[1]);
$status = trim($matches[2]);

// Capture the status code as message by default.
//$result['statusmessage'] = "CODE: $status";

if($status === '1') {
$result['status'] = self::MSG_STATUS_PROCESSING;
} else if($status === '2') {
$result['status'] = self::MSG_STATUS_DISPATCHED;
$result['needlookup'] = 0;
}
}

return $result;
}
}
?>
Anil Purushothaman
Reply
#5
the function that constructs the URL is getServiceURL, exactly here:

return self::SERVICE_URI . '/SendSMS';

then the parameters are constructed in the $params = $this->prepareParameters(); call before doing the doPost which sends those parameters via POST, not get.

HTH
Joe
TSolucio
Reply
#6
BTW, you have an error on this line:

$result['to'] = $tonumbers[$i++];

as $i does not exist

and next time you paste code use the full editor, there is a "code" block button there
Joe
TSolucio
Reply
#7
Hi Joe,
added the variable initialization for i, though this code was running earlier when I was using a different sms service provider (that required less parameters).
can you help me with echoing result status or echo the url generated, so i can find where its going wrong? I am not able to echo anything out of this program. Here is how i am trying -
1. modify code
2. go to leads, select a lead and send sms (button).
3. hope for sms on phone / look for echo or print.

None of the 2 in step 3 shows up yet.

Hoping to hear soon.

thanks for being there all through  Shy
Code:
public function send($message, $tonumbers) {
$i = 0;
if(!is_array($tonumbers)) {
$tonumbers = array($tonumbers);
}

$params = $this->prepareParameters();

$params['text'] = $message;
$params['number'] = implode(',', $tonumbers);

$serviceURL = $this->getServiceURL(self::SERVICE_SEND);    
$httpClient = new Vtiger_Net_Client($serviceURL);
$response = $httpClient->doPost($params);    
$result['status'] = $response;
$responseLines = split("\n", $response);    

$results = array();
foreach($responseLines as $responseLine) {

$responseLine = trim($responseLine);    
if(empty($responseLine)) continue;

$result = array( 'error' => false, 'statusmessage' => '' );
if(preg_match("/ERRSad.*)/", trim($responseLine), $matches)) {
$result['error'] = true;
$result['to'] = $tonumbers[$i++];
$result['statusmessage'] = $matches[0]; // Complete error message
} else if(preg_match("/ID: ([^ ]+)TOSad.*)/", $responseLine, $matches)) {
$result['id'] = trim($matches[1]);
$result['to'] = trim($matches[2]);
$result['status'] = self::MSG_STATUS_PROCESSING;

} else if(preg_match("/ID: (.*)/", $responseLine, $matches)) {
$result['id'] = trim($matches[1]);
$result['to'] = $tonumbers[0];
$result['status'] = self::MSG_STATUS_PROCESSING;
}
$results[] = $result;
}    
return $results;
}
Anil Purushothaman
Reply
#8
you are looking for the variable $serviceURL and $params.

After this assignment:

PHP Code:
$serviceURL $this->getServiceURL(self::SERVICE_SEND); 


add this code



PHP Code:
global $log;
$log->fatal($serviceURL);
$log->fatal($params); 


make sure you have the $DEBUG variable set to true in config.inc.php and you should see the values in the logs/vtigercrm.log file

Note that you are asking about sending the parameters via GET, but the code is sending them via POST, maybe just changing the $serviceURL variable you will have enough

another interesting variable  to see is $response as that will contain the answer from your SMS provider
Joe
TSolucio
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)