2013-07-27 32 views
1

如何使用smpp.twisted python庫發送長消息。 我知道如何在160字節之前發送短消息。 例如:如何使用smpp.twisted python庫發送長消息

ESME_NUM = '9090' 
phone = '123456' 
short_message = 'There is not short message.'*15 

submit_pdu = SubmitSM(
    source_addr=ESME_NUM, 
    destination_addr=phone, 
    short_message=short_message, 
    source_addr_ton=SOURCE_ADDR_TON, 
    dest_addr_ton=DEST_ADDR_TON, 
    dest_addr_npi=DEST_ADDR_NPI, 
    esm_class=EsmClass(EsmClassMode.DEFAULT, EsmClassType.DEFAULT), 
    protocol_id=0, 
    registered_delivery=RegisteredDelivery(
     RegisteredDeliveryReceipt.SMSC_DELIVERY_RECEIPT_REQUESTED), 
    replace_if_present_flag=ReplaceIfPresentFlag.DO_NOT_REPLACE, 
    data_coding=DataCoding(DataCodingScheme.DEFAULT, DataCodingDefault.UCS2), 
) 
submitSMDeferred = smpp.sendDataRequest(submit_pdu) 

如果short_message>器160b我無法發送消息。

我找到了使用message_payload的解決方案,但sms在零件上分割。

length = len(short_message) 
splitat = 160 
parts = length/splitat +1 
submit_pdu = None 
submitSMDeferred = defer.Deferred() 
if length > splitat: 
    for k in range(parts): 
     msgpart = short_message[k*splitat:k*splitat+splitat] 
     self.logger.info('%s - %s - %s' % (msgpart, parts, k)) 
     submit_pdu = SubmitSM(
      source_addr=self.ESME_NUM, 
      destination_addr=source_addr, 
      source_addr_ton=self.SOURCE_ADDR_TON, 
      dest_addr_ton=self.DEST_ADDR_TON, 
      dest_addr_npi=self.DEST_ADDR_NPI, 
      esm_class=EsmClass(EsmClassMode.DEFAULT, EsmClassType.DEFAULT), 
      protocol_id=0, 
      registered_delivery=RegisteredDelivery(
       RegisteredDeliveryReceipt.SMSC_DELIVERY_RECEIPT_REQUESTED), 
      replace_if_present_flag=ReplaceIfPresentFlag.DO_NOT_REPLACE, 
      data_coding=DataCoding(DataCodingScheme.DEFAULT, DataCodingDefault.UCS2), 
      sar_msg_ref_num = 1, 
      sar_total_segments = parts, 
      sar_segment_seqnum = k+1, 
      message_payload=msgpart 
     ) 
     submitSMDeferred = smpp.sendDataRequest(submit_pdu) 

回答

0

對不起。您只需使用message_payload而不是short_message。 例如:

ESME_NUM = '9090' 
phone = '123456' 
short_message = 'There is not short message.'*15 

submit_pdu = SubmitSM(
    source_addr=ESME_NUM, 
    destination_addr=phone, 
    message_payload=short_message, 
    source_addr_ton=SOURCE_ADDR_TON, 
    dest_addr_ton=DEST_ADDR_TON, 
    dest_addr_npi=DEST_ADDR_NPI, 
    esm_class=EsmClass(EsmClassMode.DEFAULT, EsmClassType.DEFAULT), 
    protocol_id=0, 
    registered_delivery=RegisteredDelivery(
     RegisteredDeliveryReceipt.SMSC_DELIVERY_RECEIPT_REQUESTED), 
    replace_if_present_flag=ReplaceIfPresentFlag.DO_NOT_REPLACE, 
    data_coding=DataCoding(DataCodingScheme.DEFAULT, DataCodingDefault.UCS2), 
) 
smpp.sendDataRequest(submit_pdu).addBoth(message_sent) 

留在這裏。

+0

AFAIK不總是支持在* message_payload *中發送級聯MT SM。在ESME端分割長消息併發送幾個「submit_sm」PDU可能更可靠。 –