Permalink
Fetching contributors…
Cannot retrieve contributors at this time
157 lines (104 sloc) 4.58 KB

Developer FAQ

How to 'log' messages in a third party database ?

Jasmin runs without a database, everything is in-memory and messages are exchanged through AMQP broker (RabbitMQ), if you need to get these messages you have to consume from the right queues as described in :doc:`/messaging/index`.

Here's an example:

Thanks to Pedro's contribution:

Here is the PySQLPool mod to @farirat ´s gist
https://gist.github.com/pguillem/5750e8db352f001138f2

Here is the code to launch the consumer as a system Daemon in Debian/Ubuntu
https://gist.github.com/pguillem/19693defb3feb0c02fe7

1) create jasmind_consumer file in /etc/init.d/
2) chmod a+x
3) Modify the path and script name of your consumer in jasmind_consumer
4) Remember to exec "update-rc.d jasmind_consumer defaults" in order to start at boot

Cheers
Pedro

More on this:

.. literalinclude:: consume_MT_messages.py
   :language: python

How to directly access the Perspective Broker API ?

Management tasks can be done directly when accessing PerspectiveBroker API, it will be possible to:

  • Manage SMPP Client connectors,
  • Check status of all connectors,
  • Send SMS,
  • Manage Users & Groups,
  • Manage Routes (MO / MT),
  • Access statistics,
  • ...

Here's an example:

.. literalinclude:: using_pb.py
   :language: python

Can you provide an example of how to use EvalPyFilter ?

Let's say you need your filter to pass only messages from username foo:

if routable.user.username == 'foo':
    result = False
else:
    result = True

Note

Although UserFilter is already there to provide this feature, this is just a simple example of using EvalPyFilter.

So your python script will have a routable global variable, it is an instance of RoutableDeliverSm if you're playing with a MO Route and it will be an instance of RoutableSubmitSm if you're considering it with a MT Route.

In order to implement your specific filter, you have to know all the attributes these objects are providing,

Now let's make an advanced example, the below filter will:

  • Connect to a database
  • Check if the message destination_address is in blacklisted_numbers table
  • Pass only if the destination_address is not blacklisted
.. literalinclude:: advanced_evalpyfilter.py
   :language: python

How to log events inside an EvalPyFilter ?

It is a usual method to get the filter logging directly to the Router's log file (default is router.log), here's a very simple example of doing it:

.. literalinclude:: logging_evalpyfilter.py
   :language: python

Note

More on python logging: here.

How to set an EvalPyFilter for a MT Route ?

I have written my EvalPyFilter, how can i use it to filter MT messages ?

Using jCli:

First, create your filter:

jcli : filter -a
Adding a new Filter: (ok: save, ko: exit)
> type evalpyfilter
> pyCode /some/path/advanced_evalpyfilter.py
> fid blacklist_check
> ok
Successfully added Filter [EvalPyFilter] with fid:blacklist_check

Second, create a MT Route:

jcli : mtrouter -a
Adding a new MT Route: (ok: save, ko: exit)
> type StaticMTRoute
jasmin.routing.Routes.StaticMTRoute arguments:
filters, connector, rate
> filters blacklist_check
> connector smppc(SOME-SMSC)
> rate 0.0
> order 10
> ok
Successfully added MTRoute [StaticMTRoute] with order:10

And you're done ! test your filter by sending a SMS through Jasmin's APIs.

PDU params keep resetting to connector defaults even after interception ?

When sending MT messages through httpapi, some pdu parameters will be reset to connector defaults even if they were manually updated inside an interceptor script, how can Jasmin avoid updatingmy pdu params ?

After updating a pdu parameter, it must be locked so Jasmin will not re-update it again, here's an example:

.. literalinclude:: locking_pdu_param.py
   :language: python

Note

Locking pdu parameters is only needed when message is pushed from httpapi.