2011-02-06 136 views
4

私はNet::SMPPモジュールを使用してSMPPメッセージを送信しようとしていますが、それは下のエラーを与えている:あなたは、あなたが成功しているメッセージを送信しようとしている場合はPerlでNet :: SMPPを使用してSMSを送信するにはどうすればよいですか?

Message state is 2 
Response indicated error: Message ID is invalid (ESME_RINVMSGID=0x0000000C) at send.pl line 28. 

#!/usr/bin/perl 
#use strict; 
#use warnings; 
use Net::SMPP; 

my $host = 'iphost'; 
my $port = 2345; 
my $smpp = Net::SMPP->new_transmitter(
    $host, 
    port  => $port, 
    system_id => 'username', 
    password => 'pass', 
) or die; 

$resp_pdu = $smpp->submit_sm(
    destination_addr => '+44206064379', 
    short_message => 'test message' 
) or die; 
die "Response indicated error: " . $resp_pdu->explain_status() 
if $resp_pdu->status; 
$msg_id = $resp_pdu->{message_id}; 

$resp_pdu = $smpp->query_sm(message_id => $msg_id) or die; 
die "Response indicated error: " . $resp_pdu->explain_status() 
if $resp_pdu->status; 
print "Message state is $resp_pdu->{message_state}\n"; 

$resp_pdu = $smpp->replace_sm(
    message_id => $msg_id, 
    short_message => 'another test' 
) or die; 
die "Response indicated error: " . $resp_pdu->explain_status() 
if $resp_pdu->status; 

$resp_pdu = $smpp->cancel_sm(message_id => $msg_id) or die; 
die "Response indicated error: " . $resp_pdu->explain_status() 
if $resp_pdu->status; 

答えて

3

。メッセージはsubmit_smメソッドを使用して送信されます。

出力の最初の行には、メッセージの状態を返すquery_smの結果が表示されます。状態2は、(SMPP v3.4仕様からの)DELIVEREDの状態に対応する。これは、SMSCがメッセージをモバイルデバイスに配信したことを意味します。

エラーはreplace_smメソッドによって生成されています。 replace_smメソッドは、SMSC上に依然として存在する、すなわち依然として配信を待っているメッセージを置き換えるだけである。メッセージがすでに配信されている場合、SMSCは応答PDUにエラーを返します。同じことがcancel_smメソッドにも当てはまります。まだ配信を待っているメッセージに対してのみ機能します。

関連する問題