4

Net::SMPPモジュールを使用して SMPP メッセージを送信しようとしていますが、以下のエラーが表示されます:

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;
4

1 に答える 1

3

メッセージを送信しようとしている場合は、成功しています。メッセージは submit_sm メソッドを使用して送信されます。

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

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

于 2011-02-08T14:18:33.493 に答える