I've spent a significant amount of time around this issue. I've read the complete Kannel guide, SO, Nabble and any other resource I could find yet I couldn't find any solution or hint on why the DLR aren't being created.
I believe what I'm trying to do is very straightforward: I'm connected using SMPP to OpenSMPPBox, using PostgreSQL and routing to a SMPP SMSC like this: opensmppbox --> sqlbox -> bearerbox -> smsc I can send SMS with no problem to the other end and I can see the pdu responses back in the logs. However, the DLRs aren't being created as they are when I use HTTP with smsbox and dlr-mask/dlr-url params. It doesn't matter if I remove the sqlbox and use internal storage, the DLRs are never being created (or at least never appear as created in the logs) when connecting via smpp to opensmppbox. 2021-04-29 05:28:14 [35121] [6] DEBUG: SMPP[smsc1]: throughput (0.00,0.00) 2021-04-29 05:28:14 [35121] [6] DEBUG: SMPP[smsc1]: Got PDU: 2021-04-29 05:28:14 [35121] [6] DEBUG: SMPP PDU 0x7eff380010e0 dump: 2021-04-29 05:28:14 [35121] [6] DEBUG: type_name: deliver_sm 2021-04-29 05:28:14 [35121] [6] DEBUG: command_id: 5 = 0x00000005 2021-04-29 05:28:14 [35121] [6] DEBUG: command_status: 0 = 0x00000000 2021-04-29 05:28:14 [35121] [6] DEBUG: sequence_number: 31 = 0x0000001f 2021-04-29 05:28:14 [35121] [6] DEBUG: service_type: NULL 2021-04-29 05:28:14 [35121] [6] DEBUG: source_addr_ton: 0 = 0x00000000 2021-04-29 05:28:14 [35121] [6] DEBUG: source_addr_npi: 0 = 0x00000000 2021-04-29 05:28:14 [35121] [6] DEBUG: source_addr: "xxxxxxxxxx" 2021-04-29 05:28:14 [35121] [6] DEBUG: dest_addr_ton: 5 = 0x00000005 2021-04-29 05:28:14 [35121] [6] DEBUG: dest_addr_npi: 0 = 0x00000000 2021-04-29 05:28:14 [35121] [6] DEBUG: destination_addr: "MySender" 2021-04-29 05:28:14 [35121] [6] DEBUG: esm_class: 4 = 0x00000004 2021-04-29 05:28:14 [35121] [6] DEBUG: protocol_id: 8 = 0x00000008 2021-04-29 05:28:14 [35121] [6] DEBUG: priority_flag: 0 = 0x00000000 2021-04-29 05:28:14 [35121] [6] DEBUG: schedule_delivery_time: NULL 2021-04-29 05:28:14 [35121] [6] DEBUG: validity_period: NULL 2021-04-29 05:28:14 [35121] [6] DEBUG: registered_delivery: 0 = 0x00000000 2021-04-29 05:28:14 [35121] [6] DEBUG: replace_if_present_flag: 0 = 0x00000000 2021-04-29 05:28:14 [35121] [6] DEBUG: data_coding: 0 = 0x00000000 2021-04-29 05:28:14 [35121] [6] DEBUG: sm_default_msg_id: 0 = 0x00000000 2021-04-29 05:28:14 [35121] [6] DEBUG: sm_length: 105 = 0x00000069 2021-04-29 05:28:14 [35121] [6] DEBUG: short_message: 2021-04-29 05:28:14 [35121] [6] DEBUG: Octet string at 0x7eff38001340: 2021-04-29 05:28:14 [35121] [6] DEBUG: len: 105 2021-04-29 05:28:14 [35121] [6] DEBUG: size: 106 2021-04-29 05:28:14 [35121] [6] DEBUG: immutable: 0 2021-04-29 05:28:14 [35121] [6] DEBUG: data: 69 64 3a 37 32 36 34 37 33 33 37 20 73 75 62 3a id:72647337 sub: 2021-04-29 05:28:14 [35121] [6] DEBUG: data: 30 20 64 6c 76 72 64 3a 32 38 20 73 75 62 6d 69 0 dlvrd:28 submi 2021-04-29 05:28:14 [35121] [6] DEBUG: data: 74 20 64 61 74 65 3a 32 31 30 34 32 39 30 32 32 t date:210429022 2021-04-29 05:28:14 [35121] [6] DEBUG: data: 38 20 64 6f 6e 65 20 64 61 74 65 3a 32 31 30 34 8 done date:2104 2021-04-29 05:28:14 [35121] [6] DEBUG: data: 32 39 30 32 32 38 20 73 74 61 74 3a 45 4e 52 4f 290228 stat:ENRO 2021-04-29 05:28:14 [35121] [6] DEBUG: data: 55 54 45 20 65 72 72 3a 30 20 54 65 78 74 3a 48 UTE err:0 Text:H 2021-04-29 05:28:14 [35121] [6] DEBUG: data: 65 6c 6c 6f 20 54 65 78 74 ello Text 2021-04-29 05:28:14 [35121] [6] DEBUG: Octet string dump ends. 2021-04-29 05:28:14 [35121] [6] DEBUG: SMPP PDU dump ends. 2021-04-29 05:28:14 [35121] [6] DEBUG: SMPP[smsc1] handle_pdu, got DLR 2021-04-29 05:28:14 [35121] [6] DEBUG: DLR[pgsql]: Looking for DLR smsc=smsc1, ts=72647337, dst=xxxxxxxxxx, type=4 2021-04-29 05:28:14 [35121] [6] DEBUG: sql: SELECT "mask", "service", "url", "source", "destination", "boxc" FROM "dlr" WHERE "smsc"='smsc1' AND "ts"='72647337' LIMIT 1; 2021-04-29 05:28:14 [35121] [6] DEBUG: no rows found 2021-04-29 05:28:14 [35121] [6] WARNING: DLR[pgsql]: DLR from SMSC<smsc1> for DST<xxxxxxxxxx> not found. 2021-04-29 05:28:14 [35121] [6] ERROR: SMPP[smsc1]: got DLR but could not find message or was not interested in it id<72647337> dst<xxxxxxxxxx>, type<4> 2021-04-29 05:28:14 [35121] [6] DEBUG: SMPP[smsc1]: Sending PDU: 2021-04-29 05:28:14 [35121] [6] DEBUG: SMPP PDU 0x7eff38001ec0 dump: 2021-04-29 05:28:14 [35121] [6] DEBUG: type_name: deliver_sm_resp 2021-04-29 05:28:14 [35121] [6] DEBUG: command_id: 2147483653 = 0x80000005 2021-04-29 05:28:14 [35121] [6] DEBUG: command_status: 0 = 0x00000000 2021-04-29 05:28:14 [35121] [6] DEBUG: sequence_number: 31 = 0x0000001f 2021-04-29 05:28:14 [35121] [6] DEBUG: message_id: NULL 2021-04-29 05:28:14 [35121] [6] DEBUG: SMPP PDU dump ends. Looking at the logs when using smsbox/HTTP I can see the DLR being created right after the submit_sm_resp, which isn't the case using opensmppbox which causes the later select query fails as it doesn't find the record. I understand I can set the dlr-mask when using smsbox/HTTP but I haven't found any way to do so in opensmppbox (unsure if it is even possible). I'm unsure if dlr-mask has to be set to get the DLRs somehow or I may be missing something terrible wrong or maybe even obvious. My main use case if to allow customers to connect directly via SMPP while we can still keep track of what was delivery/failed by forwarding those DLRs to our external system for billing/reporting/processing/etc. Any help around this is greatly appreciated. Here are the configurations: I first tried compiling Kannel 1.4.5 (and installing opensmppbox and sqlbox from its addons folder) and later also tried Kannel and the opensmppbox/sqlbox directly from their current svn trunks. In both cases the same behavior happens. bearerbox /etc/kannel/kannel.conf group = core admin-port = 13000 smsbox-port = 13001 admin-password = bar box-deny-ip = "*.*.*.*" box-allow-ip = "127.0.0.1" access-log = "/var/log/kannel/kannel.access.log" dlr-storage = pgsql group = smsc smsc = smpp smsc-id = smsc1 host = xxx.xxx.xxx.xxx port = 7777 smsc-username = smpp smsc-password = smpp system-type = group = smsbox bearerbox-host = localhost global-sender = Default bearerbox-port = 13002 group = sendsms-user username = tester password = foobar user-deny-ip = "" user-allow-ip = "" group = sms-service keyword = default text = "You asked nothing and I did it!" group = pgsql-connection id = mydlr host = localhost username = postgres password = postgres database = dlr max-connections = 10 group = dlr-db id = mydlr table = dlr field-smsc = smsc field-timestamp = ts field-destination = destination field-source = source field-service = service field-url = url field-mask = mask field-status = status field-boxc-id = boxc sqlbox /etc/kannel/sqlbox.conf group = sqlbox id = sqlbox-db smsbox-id = sqlbox bearerbox-host = localhost bearerbox-port = 13001 smsbox-port = 13002 sql-log-table = sent_sms sql-insert-table = send_sms group = pgsql-connection id = sqlbox-db host = localhost username = postgres password = postgres database = dlr max-connections = 10 opensmppbox /etc/kannel/opensmppbox.conf group = core dlr-storage = pgsql # Proxy configuration group = opensmppbox opensmppbox-id = smsc1 opensmppbox-port = 13003 bearerbox-host = 127.0.0.1 bearerbox-port = 13002 log-file = /var/log/kannel/opensmppbox.log log-level = 0 our-system-id = smsc use-systemid-as-smsboxid = true # Will send only to this route-to-smsc = smsc1 # New accounts smpp-logins = /etc/opensmppbox/clients/smpplogins.txt group = pgsql-connection id = mydlr host = localhost username = postgres password = postgres database = dlr max-connections = 10 group = dlr-db id = mydlr table = dlr field-smsc = smsc field-timestamp = ts field-destination = destination field-source = source field-service = service field-url = url field-mask = mask field-status = status field-boxc-id = boxc /etc/kannel/smpplogins.txt goodclient secret smsc1 *.*.*.*