SMPP: установка message_id для submit_sm
Пожалуйста, можно ли установить уникальный идентификатор сообщения, который позже будет возвращен в DLR для справочных целей.
Позвольте мне объяснить мой текущий процесс ниже:
Мой подход заключается в том, что мы отправляем сообщение в шлюз smsc, получаем идентификатор из smsc, сохраняем этот идентификатор, и когда приходит DLR, мы сопоставляем идентификатор из dlr с идентификатором, который мы ранее сохранили (потому что мы отправляем миллион сообщений за короткий период этот подход не является оптимальным для нас, назад и вперед к базе данных).
то, что я хотел бы получить, - это если мы сможем добавить параметр в сообщение отправки в smsc и получить этот идентификатор, когда вернется dlr.
Я использую https://github.com/podshumok/python-smpplib для Python и https://github.com/uudashr/jsmpp для Java
РЕДАКТИРОВАТЬ
Ниже мой PDU для отправки SM
{'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}
Ниже у меня есть PDU для DeliverSM:
{'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}
1 ответ
Есть необязательный user_message_reference
Параметр TLV, который может быть установлен для вашего идентификатора сообщения для справки, однако, я бы посоветовал сначала протестировать, если ваш SMSC не поддерживает его.
Для моего асинхронного SMPP-клиента naz; то, что я сделал, было:
- Когда он отправляет запрос SUBMIT_SM в SMSC, он где-то сохраняет запись sequence_number (в памяти или в базе данных и т. Д.)
- Поскольку SMSC всегда возвращает этот порядковый номер в SUBMIT_SM_RESP; получите sequnce_number и найдите его там, где мы его сохранили.
Это будет работать для SUBMIT_SM & SUBMIT_SM_RESP. Вам потребуется какой-то другой механизм для связи SUBMIT_SM & DELIVER_SM. Вот где приходит user_message_reference. К сожалению, некоторые / большинство SMSC не поддерживают user_message_reference