Hi all,

I'm still trying to use the generic code for our Claro HTTP connection...

The attached table describes how it works currently with all protocols. It 
highlights some issues.


a) Clickatell variables
This protocol uses some variables which are not available in the generic part: 
"charge", "timestamp" and "charset".
I don't know if there is a good reason to manage "charge" for a DLR. If yes, it 
is easy to use "binfo" in the generic DLR code to do the same thing.
I think "timestamp" is not so useful, it is replaced in all the other cases by 
the current time.
Finally, "charset" is simply stored in sms.charset but not actually used in 
clickatell_receive_sms().


b) Claro DLR
Claro sends a DLR with a HTTP POST and puts the relevant data in XML format in 
the body (see attached file).
Currently, in the generic code, all the variables are read from CGI variables 
coming from the GET query. It is compatible with all previous specific 
protocols but not with Claro.
I would like to manage a bunch of new configuration variables 
(generic-source-xxx, one per generic-param-xxx) to specify if the value should 
be read from the CGI variable or from the body.
For example, if generic-source-to = "body", then generic-param-to will be 
processed as a regex and a gw_regexec() will be done against the body (exactly 
like I did for the generic-foreign-id-regex variable in the last patch) to get 
the recipient's number.
If these new variables are not defined in the configuration file, the current 
behaviour will be kept.


c) DLR status
The status is translated for Clickatell and Xidris protocols:

Clickatell:
   4 or 8 => DLR_SUCCESS
   1, 5, 6, 7, 9 or 10 => DLR_BUFFERED
   2, 3 or 11 => DLR_FAIL
   else => DLR_SMSC_FAIL

Xidris:
   "DELIVERD" => DLR_SUCCESS
   "ACCEPTD" => DLR_BUFFERED
   else => DLR_FAIL

The status should also be translated for Claro (from SMPP status).
To solve the problem, 3 new configuration variables could me managed...

For Clickatell they should be defined like this:
generic-dlr-mask-external = "1;2;3;4;5;6;7;8;9;10;11"
generic-dlr-mask-internal = 
"BUFFERED;FAIL;FAIL;SUCCESS;BUFFERED;BUFFERED;BUFFERED;SUCCESS;BUFFERED;BUFFERED;FAIL"
generic-dlr-mask-defaut = "SMSC_FAIL"

For Xidris they should be defined like this:
generic-dlr-mask-external = "DELIVERD;ACCEPTD"
generic-dlr-mask-internal = "SUCCESS;BUFFERED"
generic-dlr-mask-defaut = "FAIL"

A one-to-one translation could be done from an external value to get the 
matching internal value.
If no match is found in the external list, the default value is used.
If these lists are not defined, no translation is done (current behaviour for 
"dlr-mask").



That's all...
Any comments or better ideas are welcome!  ;)

Franck

Attachment: http_xxx_receive_sms.pdf
Description: Adobe PDF document

<?xml version="1.0" encoding="UTF-8"?>
<mse-response>
   <status-code>0</status-code>
   <profile>xxxxx</profile>
   <transaction-id>1040906220631575163</transaction-id>
   <parameters>
      <param-item>
         <param-name>INITIALDATE</param-name>
         <param-value>0906220631</param-value>
      </param-item>
      <param-item>
         <param-name>SMPP_MESSAGE_STATUS</param-name>
         <param-value>DELIVRD</param-value>
      </param-item>
      <param-item>
         <param-name>ANUM</param-name>
         <param-value>123456789</param-value>
      </param-item>
      <param-item>
         <param-name>MSGID</param-name>
         <param-value></param-value>
      </param-item>
      <param-item>
         <param-name>BNUM</param-name>
         <param-value>987654321</param-value>
      </param-item>
      <param-item>
         <param-name>FINALDATE</param-name>
         <param-value>0906220631</param-value>
      </param-item>
      <param-item>
         <param-name>MSGSTATUS</param-name>
         <param-value>2</param-value>
      </param-item>
   </parameters>
</mse-response>

Reply via email to