Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: Системное программирование > Вопрос по модулю Net::SMPP


Автор: gammaray 12.8.2006, 14:16
Всем привет! Есть здесь люди, которые знакомы с модулем Net::SMPP для Perl?

Есть пара вопросов по этому модулю... Вообщем нужно написать программу SMPP-клиент, который будет слать смс, проверять их доставку, выводить статистику в файл и т.д.

Так я подкючаюсь к SMSC(понятно, что все параметры подключения выдуманы):


($smpp,$err) = Net::SMPP->new_transmitter(

"192.168.100.100",

port=>"9999 9",

system_id =>"System_Id",

password => "System_Password",

system_type=>"System_Type"

) or die;

print"Connect-transmitter. Status=",$err->{status},"*\n"; 


Подключение проходит нормально!

Дальше отсылаю тестовую смс(параметры опять выдуманы):


$resp = $smpp_t->submit_sm(

source_addr_ton => 0x01,

source_addr_npi => 0x00,

source_addr => "9999 9",

dest_addr_ton => 0x01,

dest_addr_npi => 0x01,

destination_addr => "1234 5678 9",

data_coding => 0x04,

short_message=> "tstmsg",

esm_class => 0x00,

); 


Смс успешно доходит! Так вот.. Суть проблемы в следубщем: как проверить с помощью Net::SMPP доставку этого сообщения?

Пишу, как описано в документации к Net:SMMP на CPAN http://search.cpan.org/~sampo/Net-SMPP-1.10/SMPP.pm


$resp_pdu = $smpp->query_sm(message_id => $msg_id) or die;

die "Response indicated error: " . $resp_pdu->explain_status()

if $resp_pdu->status;


При таком кодепрограмма вылетает на самой первой строке с сообщением Can"t call method "query_sm" on an undefined value! Смотрел в Watch, что находится в message_id => $msg_id... Там массив с 2 элементами: тип scalar со значением message_id и 2 элемент null! Я уже не знаю, как делать! Все методы перепробовал! А к тому же при тесте программы всё время приходится слать смс, а это денег стоит! Кто-нибудь проверял доставку сообщения? Как это сделать? Очень нужна помощь!

Заранее спасибо!

Автор: gammaray 13.8.2006, 01:22
Всё, спасибо, предыдущая проблема отпала! Но зато теперь такая встала...

Вот отрывок теста моей программы...

#!/usr/bin/perl


use Net::SMPP;


sender();


print "Press <Enter> to continue...";

<STDIN>;


sub sender

{

($smpp_tr,$err) = Net::SMPP->new_transmitter(

"server.ru",

port=>"2222",

system_id =>'login',

password => 'password',

) or die;

print"Connect-transmitter. Status=",$err->{status},"*\n";



$resp = $smpp_tr->submit_sm(

source_addr_ton => 0x01,

source_addr_npi => 0x00,

source_addr => '99999',

dest_addr_ton => 0x01,

dest_addr_npi => 0x01,

destination_addr => '123456789',

data_coding => 0x04,

short_message=> 'tstmsg ',

esm_class => 0x00,

) or die;



$msg_id = $resp->{message_id};


$resp = $smpp_tr->query_sm(message_id => $msg_id) or die;

die "Response indicated error: " . $resp->explain_status()

if $resp->status;


$resp = $smpp_tr->unbind();

}


Всё работает верно вплоть до строки проверки досатвки $resp = $smpp_tr->query_sm(message_id => $msg_id) or die;

На ней прога виснет! Сидел думал много часов, но ничего не помогало! Потом просто догадался снифером посмотреть, а что собственно программа шлёт? И вот на что наткнулся(запросы по протоколу SMPP по порядку):

SMPP Bind_transmitter

SMPP Bind_transmitter - resp: "OK"

SMPP Submit_sm

SMPP Submit_sm - resp: "OK"

Здесь, как видно, всё ок! А вот дальше...

SMPP Query_sm

SMPP Generic_nack: "Invalid command ID"(!!!) Как такое возможно??? Ведь даже снифер показывает, что идёт запрос SMPP Query_sm! Может кто знает, в чём дело? Да кстати в запросе SMPP Query_sm в поле Operation(что и есть command ID) стоит Query_sm(0x00000003)! Кто-нибудь знает, у query_sm такой command_id или нет?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)