2013-04-26 69 views
3

我試圖查詢通過perl Net發送的SMS狀態:使用query_sm的SMPP模塊。Perl Net :: SMPP query_sm PDU錯誤「消息ID無效」0x0C ESME_RINVMSGID

我填充我SUBMIT_SM PDU如下:

$resp_pdu1 = $smpp->submit_sm(
destination_addr => '12345678910', 
short_message => 'test message', 
source_addr_ton => 0x05, 
source_addr_npi => 0x00, 
source_addr => 'testing', 
dest_addr_ton => 0x02, 
dest_addr_npi => 0x01, 
data_coding => 0x00, 
esm_class => 0x00, 
) or die; 

我傳遞消息ID在submit_sm_rsp PDU返回如下我query_sm PDU:

$msg_id = $resp_pdu1->{message_id}; 
print $msg_id;print "\n"; 
$resp_pdu2 = $smpp->query_sm(
message_id => $msg_id, 
source_addr_ton => 0x05, 
source_addr_npi => 0x00, 
source_addr => 'testing', 
) or die; 

我的Perl腳本運行沒有任何錯誤和該消息由MS接收,在綁定和解除綁定到SMSC時沒有錯誤。檢查SMPP數據包的wireshark轉儲在query_sm_rsp中顯示「消息ID無效」,錯誤代碼爲0x0C。我已經檢查過了,並且我傳遞給query_sm PDU的submit_sm_rsp返回的message_id是相同的。任何提示,爲什麼我得到這個錯誤?

+0

此問題可能由ubmit_sm_resp和query_sm PDU中不同格式的消息標識符引起。例如,某些SMSC可能會使用十進制數進行響應,但quirey_sm需要十六進制數。我建議你通過設置「$ Net :: SMPP :: trace = 1」來添加日誌來查看更多細節。 – 2013-04-27 09:31:11

+0

感謝您的建議。我確實認爲這可能是格式化message_id的問題。例如,submit_sm_rsp中返回的message_id類型爲6b743a5d。 我連接到的SMSC我認爲不回覆十進制數。它用一個十六進制字符串或十六進制值來回答。 我正在將原樣檢索的message_id傳遞給query_sm PDU。 你的意思是我應該嘗試將它轉換爲一個十六進制字符串,並將其傳遞給query_sm。我打開了SMPP跟蹤,請求響應頭和主體的流程正常無錯。 – 2013-04-28 10:05:03

+0

您應該首先檢查您的SMSC提供商在** submit_sm_resp **和** query_sm **命令中預期的message_id格式。然後,您需要以適當的形式將query_sm命令轉換爲message_id。 也有可能,在編碼message_id時,它是作爲字符串而不是數字發送的。這種情況下,您需要使用pack()來正確編碼message_id。 – 2013-05-08 13:41:27

回答

1

SMSC在哪個SMPP模式下工作? 我的猜測是 - 如果SMSC沒有在&轉發模式下運行,那麼它在發送消息後可能無法保持消息的狀態。 在這種情況下,即使將消息發送給MS,也可能在查詢SMSC時發生錯誤。

+0

我懷疑是這樣。 SMSC在查詢發送的SMS時確實返回錯誤。 SMPP版本是3.3 – 2013-09-11 08:33:08