【问题标题】:SMPP: Setting message_id for submit_smSMPP:为 submit_sm 设置 message_id
【发布时间】:2017-10-14 18:11:32
【问题描述】:

是否可以设置唯一的消息标识符,稍后将在 DLR 中返回以供参考。

让我在下面解释一下我目前的流程:

我的方法是我们向 smsc 网关发送一条消息,我们从 smsc 获得一个 id,我们保存这个 id,当 DLR 到来时,我们将 dlr 中的 id 与我们之前保存的 id 相匹配(因为我们推送了数百万条消息短期内这种方法对我们来说不是最优的,来回访问数据库)。

我想要实现的是,如果有一种方法可以向 smsc 的提交消息添加一个参数,并在 dlr 返回时检索此 id。

我在 python 中使用https://github.com/podshumok/python-smpplib,在 java 中使用https://github.com/uudashr/jsmpp

编辑

下面是我提交 SM 的 PDU

{'ms_msg_wait_facilities': None, 'priority_flag': None, 'language_indicator': None, 'its_reply_type': None, '_sequence': 2, 'registered_delivery': True, 'schedule_delivery_time': None, 'sm_default_msg_id': None, 'callback_num_pres_ind': None, 'source_subaddress': None, '_length': 70, 'user_response_code': None, 'sar_msg_ref_num': None, 'short_message': 'Lets Test MT\n', 'privacy_indicator': None, 'user_message_reference': 12, 'sar_total_segments': None, 'dest_addr_ton': 1, 'callback_num': None, 'sar_segment_seqnum': None, '_client': <smpplib.client.Client object at 0x7f2058a6a910>, 'service_type': None, 'source_addr_ton': 1, 'payload_type': None, 'validity_period': None, 'destination_addr': '2349*********', 'esm_class': 0, 'status': 0, 'display_time': None, 'source_addr': '7****', 'replace_if_present_flag': None, 'dest_subaddress': None, 'sm_length': 13, 'data_coding': 0, 'its_session_info': None, 'destination_port': None, 'ussd_service_op': None, 'sms_signal': None, 'protocol_id': 100, 'ms_validity': None, 'source_addr_npi': 1, 'source_addr_subunit': None, 'dest_addr_npi': 1, 'client': <smpplib.client.Client object at 0x7f2058a6a910>, 'command': 'submit_sm', 'more_messages_to_send': None, 'dest_addr_subunit': None, 'source_port': None, 'number_of_messages': None, 'alert_on_message_delivery': None}

下面是 DeliverSM 的 PDU:

{'priority_flag': '0', 'message_state': None, 'language_indicator': None, 'callback_num': None, 'payload_type': None, 'replace_if_present_flag': '0', 'schedule_delivery_time': '', 'sm_default_msg_id': '0', 'source_subaddress': None, 'user_response_code': None, 'sar_total_segments': None, 'short_message': 'id:157de861 sub:001 dlvrd:000 submit date:1705171812 done date:1705171812 stat:UNDELIV err:255', 'privacy_indicator': None, 'user_message_reference': None, 'sar_msg_ref_num': None, 'dest_addr_ton': '1', 'sar_segment_seqnum': None, 'esm_class': '4', '_sequence': 67108866, 'service_type': '', 'source_addr_ton': '1', 'validity_period': '', 'destination_addr': '7****', '_client': <smpplib.client.Client object at 0x7f2058a6a910>, 'status': 0, 'source_addr': '234********', 'registered_delivery': '0', 'dest_subaddress': None, 'message_payload': None, 'sm_length': '94', 'data_coding': '0', 'destination_port': None, 'source_addr_npi': '1', 'protocol_id': '0', 'network_error_code': None, 'its_session_info': None, 'dest_addr_npi': '1', 'length': 145, 'client': <smpplib.client.Client object at 0x7f2058a6a910>, 'command': 'deliver_sm', 'source_port': None, 'receipted_message_id': None}

【问题讨论】:

    标签: java python smpp jsmpp


    【解决方案1】:

    有一个可选的user_message_reference TLV 参数可以设置为您的消息 ID 以供参考,但是,我建议您先进行测试,以防您的 SMSC 不支持它。

    【讨论】:

    • 谢谢,马上试试
    • 看来你的 SMSC 根本不支持这个参数。 SMPP 标准没有任何其他方式可以输入您的参考 ID,所以我会询问您的 SMSC,他们是否可以支持该参数,如果不支持,那么还有其他选项 - 也许他们对此有一些自定义解决方案,虽然不太可能。
    • 非常感谢@pilsetnieks。届时将不得不寻找解决方法。真的很感激
    • 你为什么不简单地使用提交时返回的message_id,将它写入你的数据库,这样在DR你就可以匹配记录(我建议你和DR中提供的收件人号码一起匹配作为发件人数)
    【解决方案2】:

    为了我的async SMPP client, naz;我所做的是:

    • 当它向 SMSC 发送 SUBMIT_SM 请求时,它会在某处(内存或数据库等)记录 sequence_number
    • 因为 SMSC 总是在 SUBMIT_SM_RESP 中返回那个 sequence_number;获取 sequnce_number 并从我们保存它的位置查找它。

    这适用于 SUBMIT_SMSUBMIT_SM_RESP。您将需要一些其他机制来关联 SUBMIT_SMDELIVER_SM。这就是 user_message_reference 的用武之地。 不幸的是,一些/大多数 SMSC 不支持 user_message_reference

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-25
      • 1970-01-01
      • 2014-01-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多