Hi Guys,

Firstly I would like to say thank you for a wonderful product, and keep
up the good work.

I work with a company that is essentially an SMSC proxy (using kannel with smppbox).

We have several thousands of messages passing through our system and
want a way to better handle the traffic.

Functionality:

  1. Removing unwanted message - e.g. Someone accidentally send out
     50000 bulk alert service message
  2. Prioritizing messages - e.g. Service requiring priority of others
     e.g. a 119 (aka 911) reply message going out.
  3. Postdated messages - Send at future date
  4. Message on hold - Hold message in queue until we are ready to send
     them out.
  5. View Message Content - Allow for you to look ahead in queue and
     view actual messages


Suggested Implemention:

It could be possible to use a SQLite memory table and have an interface
(similar to http status) that would allow for SELECT, UPDATE, and DELETE
queries to be passed to it, or just exposing suggested fields so there
would be no tampering with message content for example.

It perhaps would be better to store it to disk our having the option for
a remote server like MySql. This would perhaps mean a performance hit
but (IMHO) the benefits would out weigh it.

Table Design : [queue]

   * queueId - Auto incremented integer to uniquely identify each row.
   * smsc-id - as the name suggests (perhaps this could be a source and
     destination for sms-user | wap-user | esme-user etc)
   * dateReceived - automatically populated upon insert
   * deliveryDate - same as above
   * priority - default value of zero, however the higher the value the
     higher priority
   * status - Pending - waiting to be sent by bearerbox; Processing -
     being sent by bearerbox; HELD - waiting for admin to release back
     to pending state
   * sender - shortcode
   * recipient - MSISDN
   * binaryMessage - raw message to be broadcast (I don't know how this
     is represented; however this could be broken down to match the
     internalstructure that kannel uses. )


bearerbox would then run simple queries like

Get next message to process (or batch just by changing the LIMIT)

Essential lock record for processing:
UPDATE queue SET status= 'PROCESSING' WHERE deliveryDate <= now() AND
status = 'PENDING' LIMIT 1

Get record locked for processing:
SELECT * FROM queue WHERE status = 'PROCESSING' ORDER BY priority DESC

Administrators could then run updates like

UPDATE queue SET status = 'HELD' WHERE sender = '5555';

UPDATE queue SET status = 'PROCESSING' WHERE status = 'HELD' ;

etc;

What do you guys think of the concept?

- Khary





Reply via email to