|
|
|
новичок
      
участник
Last Login: 14.10.2006 22:15
Сообщ.: 2,
Visits: 8
|
|
Всем привет! Есть здесь люди, которые знакомы с модулем 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},"*";
Подключение проходит нормально!
Дальше отсылаю тестовую смс(параметры опять выдуманы):
$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! Я уже не знаю, как делать! Все методы перепробовал! А к тому же при тесте программы всё время приходится слать смс, а это денег стоит! Кто-нибудь проверял доставку сообщения? Как это сделать? Очень нужна помощь!
Заранее спасибо!
|
|
|
|
|
новичок
      
участник
Last Login: 14.10.2006 22:15
Сообщ.: 2,
Visits: 8
|
|
Всё, спасибо, предыдущая проблема отпала! Но зато теперь такая встала...
Вот отрывок теста моей программы...
#!/usr/bin/perl
use Net::SMPP;
sender();
print "Press to continue...";
;
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},"*";
$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 или нет?
|
|
|
|