long message dlr problem

646 views
Skip to first unread message

Mansoor Sheikh

unread,
Oct 26, 2020, 6:53:08 AM10/26/20
to Jasmin SMS Gateway
Whenever I send long message then there is no delivery report request.

Kindly suggest the solution.

BR,
Mansoor

Luca Maghini

unread,
Oct 26, 2020, 2:01:43 PM10/26/20
to Jasmin SMS Gateway
From the issues on github i found this reply from farirat:

Jasmin [...] only require dlr of the last part to say message were received, that's the actual design for http to smpp messaging.
On smpp to smpp, Jasmin does not alter the pdu, means you'll get dlr for each pdu if you asked for it.

So it should depend on the way you are using Jasmin, if you inject messages from HTTP, they will generate a multipart message where only the last part is considered for DLR request.

You can check the complete answer here: https://github.com/jookies/jasmin/issues/789



Praboda Ariyasinghe

unread,
Oct 31, 2020, 9:22:33 AM10/31/20
to Jasmin SMS Gateway
I'm also having a problem getting DLR for multipart messages. 
Does anyone have a tip to resolve this?

Sometimes it works when I try the same SMS again. To the same number. 
But most of the time when it sends multi pdus (3,4) delivery report is not receiving.

Any tips would be appreciated.

Kamui Shiro

unread,
Nov 2, 2020, 5:48:23 AM11/2/20
to Jasmin SMS Gateway
Jasmin only remembers and receives the dlr for the 1st (or last don't' remember) part of the long sms. This is the confirmation that sms delivered. The rest of the part are all these DLRMapNotFound in your logs.

If you want to receive dlr for all parts you should "ask" for them through an interceptor.

On Jasmin website there is an interceptor script called "Enforcing DLR" that:

Ask for DLR for all submit_sm pdus, no matter the downstream user choice, can be used for route qualification and scoring purposes.

"This script will enforce sending message while asking for DLR"

from smpp.pdu.pdu_types
import RegisteredDeliveryReceipt, RegisteredDelivery
routable.pdu.params['registered_delivery'] = RegisteredDelivery( RegisteredDeliveryReceipt.SMSC_DELIVERY_RECEIPT_REQUESTED)

you can make a tweak like the below one and force all parts of a long message to force ask DLR

#Method to check if PDU contains UHD parameter enabled - Concatenated SMS
def isUdhSet(esm_class):
    if hasattr(esm_class, 'gsmFeatures'):
        for gsmFeature in esm_class.gsmFeatures:
            if str(gsmFeature) == 'UDHI_INDICATOR_SET':
                return True
    return False

_pdu = routable.pdu

if isUdhSet and _pdu.params['short_message'][:3] == '\x05\x00\x03':
        while hasattr(_pdu, 'nextPdu'):
        _pdu.params['registered_delivery'] = RegisteredDelivery( RegisteredDeliveryReceipt.SMSC_DELIVERY_RECEIPT_REQUESTED)


My second idea is to check if the long messages are really getting delivered. I had a problem with a service provider using a "weird" coding 0 table. It was custom and totally messed up. I had to "convert" the content but by mistake I also converted the UDH part of the multipart. This caused only the 1st part to get delivered but not the rest of the message. If only 1 part of 2 or 3 arrives to a smartphone it will never show up and stay "hidden" until all parts arrive and this will not happen in this case.

Sorry If I am out of subject because I feel like I haven't totally understand the cause of your problem, so I am just brainstorming ideas for you to check

Reply all
Reply to author
Forward
0 new messages