我正在尝试使用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;
答案 0 :(得分:3)
如果您正在尝试发送消息,那么您正在成功。使用submit_sm方法发送消息。
输出的第一行显示query_sm的结果,该结果返回消息的状态。状态2对应于DELIVERED的状态(来自SMPP v3.4规范)。这意味着SMSC已将消息传递给移动设备。
replace_sm方法生成错误。 replace_sm方法将仅替换仍在SMSC上的消息,即仍在等待传递。如果消息已经传递,则SMSC在响应PDU中返回错误。同样的事情适用于cancel_sm方法。它仅适用于仍在等待传递的邮件。