2013-12-10 30 views
0

我正在使用JSMPP(SMPP的Java實現)從我的web應用程序向SMS中心發送SMS。我有以下代碼來接收任何發送的短信的發送報告。在JSMPP中獲取發送消息的狀態

public class MessageListenerImplementation implements MessageReceiverListener { 
    public void onAcceptDeliverSm(DeliverSm deliverSm) throws ProcessRequestException { 
     if (MessageType.SMSC_DEL_RECEIPT.containedIn(deliverSm.getEsmClass())) { 
      try { 
       DeliveryReceipt deliveryReceipt = deliverSm.getShortMessageAsDeliveryReceipt(); 
       long id = Long.parseLong(deliveryReceipt.getId()) & 0xffffffff; 
        String messageId = Long.toString(id, 16).toUpperCase(); 
        System.out.println("Delivery receipt for message '" + messageId + " ' from " + deliverSm.getSourceAddr() + " to " + deliverSm.getDestAddress() + " : " + deliveryReceipt); 
      }catch (InvalidDeliveryReceiptException e) { 
       System.err.println("Failed getting delivery receipt"); 
       e.printStackTrace(); 
      } 
     } 
    } 
} 

當我註冊一個短信」送達回執上面的監聽器和發送,它獲得送達回執如下

和送達回執如下

id:5 sub:001 dlvrd:001 submit date:1312091213 done date:1312091213 stat:DELIVRD err:000 text:Hello SMSC from ESME 

現在我我想知道如何檢索一些整數範圍內的發送狀態,無論它是發送,失敗還是仍然掛起,以便我可以使用它來相應地更新我的數據庫?

回答

3

Jsmpp中的DeliveryReceiptState激發了所有交付狀態代碼。 嘗試deliveryReceipt.getFinalStatus().value()你會給你整數值在數據庫中更新。

您將得到以下狀態碼的整數值。

/** 
    * DELIVERED 
    */ 

    DELIVRD(1), 
    /** 
    * EXPIRED 
    */ 
    EXPIRED(2), 
    /** 
    * DELETED 
    */ 
    DELETED(3), 
    /** 
    * UNDELIVERABLE 
    */ 
    UNDELIV(4), 
    /** 
    * ACCEPTED 
    */ 
    ACCEPTD(5), 
    /** 
    * UNKNOWN 
    */ 
    UNKNOWN(6), 
    /** 
    * REJECTED 
    */ 
    REJECTD(7); 
+0

什麼,如果我想根據其ID的SMS狀態後檢查,有沒有辦法做到這一點? – sikander

+0

您將在submitsm中獲取該id,將其存儲在db中,並在更新時檢查此ID。 – GP32

+0

可以使用存儲的ID稍後檢查SMS狀態嗎? – sikander