Hi,

I've improved my patch and added extra flexibility. Now it's possible
to implement full clickatell functionality (including DLR's) by
properly configure the 'generic' http smsc.

The patch is available here:

http://magicom-bcn.net/kannel/full-mo-http-params-20070905.patch

The patch allows for this new parameters on config:

* This parameters allows to rename the proper MO parameters to
whatever you like:

mo-from
mo-to
mo-text
mo-udh
mo-account
mo-binfo
mo-dlr-url
mo-dlr-mid
mo-flash
mo-mclass
mo-mwi
mo-coding
mo-validity
mo-deferred
mo-dlr-mask
mo-dlr-stat -> this special one allows you to rename the message_id
being returned by an external dlr confirmation, such as clickatell's
"status" parameter.

For example, setting mo-from = whatever, then the "from" parameter
will be renamed "whatever".

* This allows you to rename the return string the http generic smsc returns:

mo-ret-accepted
mo-ret-denied
mo-ret-unknown-dlr
mo-ret-missing-args
mo-ret-udh-mismatch
mo-ret-udh-long
mo-ret-auth-failed
mo-ret-dlr-accepted
mo-ret-dlr-denied

For example, the mo-ret-accpeted allows you to change the "Sent." text
you get for anything else.

Now comes the "new" features:

id-from-reply -> When you send an MT message to an external http smsc
and you ask for a DLR, kannel "invents" a message_id. This parameters
allows you to get that message id from the external source,
effectively enabling the use of DLR's with clickatell. You must fill
this field with the text expected _before_ the message_id. In the case
of clickatell that's "ID:". So, if you get "ID:12345678" the
message_id will be "12345678".

err-from-reply -> Same thing but for error id's.

This 3 parameters allows you to map different external statuses to
kannel dlr statuses:

dlr-success-regex -> maps to DLR_SUCCESS (0x08)
dlr-permfail-regex -> maps to DLR_BUFFERED (0x04)
dlr-tempfail-regex -> maps to DLR_FAILED (0x02)

So, to implement clickatell's connectivity for MT and DLR's, you just
need to configure like this:

group = smsc
smsc = http
system-type = generic
smsc-id = clicka
allowed-smsc-id = clicka
port = 15000
send-url = 
"https://api.clickatell.com/http/sendmsg?to=%p&from=%P&text=%b&api_id=NNNNNN&user=XXXXXX&password=PPPPPP&callback=3&deliv_ack=3&req_feat=8192";
status-success-regex = "ID"
status-permfail-regex = "ERR"
status-tempfail-regex = "TEMP"
mo-dlr-mid = apiMsgId
mo-dlr-stat = status
id-from-reply = "ID:"
err-from-reply = "ERR:"
dlr-success-regex ="(004|008)"
dlr-permfail-regex = "(001|005|006|007|009|010)"
dlr-tempfail-regex ="(002|003|011)"

I'll explain a little more:

send-url points to the clickatell http api. A few parameters are
hardcoded, like api_id, user/pass, etc.
status-*-regex (current kannel functionality) is used to detect
whether the message was accepted by clickatell's api.

mo-dlr-* is used to map the DLR parameters to kannel's own.

id/err-from-reply is used to fetch the message/error id on MT from
clickatell's http response. This is mandatory for DLR's only.

dlr-*-regex is used to map the different possible responses to
different kannel DLR status. So, if kannel responds with "004" or
"008" a DLR Success will be sent (0x08 for Kannel).

I don't have  a two-way account for clickatell, so I couldn't test the
MO part, but it should be as simple as to map the proper parameters by
configuring mo-* parameters and maybe mapping some mo-ret-* strings
also.

Last by not least, the goal of this patch wasn't to replace the
clickatell interface, but to provide a generic mean to implement other
SMSC's without writing source code and recompiling. The clickatell
example was just that, an example of the capabilities being added.

I'd happily try to model other http smsc's (even extending the patch
to accomodate extra flexibility), just drop me a line in private and
send me docs about it.

Regards,
-- 
Alejandro Guerrieri
Magicom
http://www.magicom-bcn.net/
LinkedIn: http://www.linkedin.com/in/aguerrieri

Reply via email to