2011-02-06 4 views
4

Я пытаюсь отправить сообщение SMPP, используя Net::SMPP модуль, но это дает ошибку ниже:Как отправить SMS с помощью Net :: SMPP в Perl?

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.

В первой строке вывода отображается результат запроса_sm, который возвращает состояние сообщения. Состояние 2 соответствует статусу DELIVERED (из спецификации SMPP v3.4). Это означает, что SMSC доставил сообщение на мобильное устройство.

Ошибка создается методом replace_sm. Метод replace_sm заменит только сообщение, которое все еще находится в SMSC, то есть все еще ожидает доставки. Если сообщение уже доставлено, SMSC возвращает ошибку в PDU ответа. То же самое относится к методу cancel_sm. Он работает только с сообщениями, которые все еще ждут доставки.

Смежные вопросы