Interactive SMS  
SMPP

SMS-рассылки от 3 коп. за SMS!!!

    О проекте     Вопросы и ответы     Статьи     Архив     Утилиты     Программы     Обратная связь    

Подключение к СМСЦ (SMSC) оператора
Подключиться к СМСЦ оператора сотовой связи не только просто, а очень просто. Для этого необходимо, во-первых заключенный договор с оператором на подключение, а во вторых тот комплекс программных средств, который это подключение производит.
Мы не будет рассматривать варианты "халявного" подключения и "халявной" отправки СМС, т.к. "халява" рано или поздно заканчивается, и операторы стремятся ограничить такую возможность.

Чтобы отправлять СМС через СМСЦ оператора существуют несколько способов (протоколов), наиболее распространенными из которых являются:

Отправка через гейт Web-SMS
В данном случае отправителю оператор выделяет аккаунт (логин - пароль) и дает ссылку на IP-адрес или адрес сайта, при обращении к которому с определенными параметрами, можно отправлять СМС.
Например: https://192.168.100.100:99999/sendsms?ston=&snpi=&sadr=&dton=&dnpi=&dadr=&dcs=&esm=
где :
  https:// - протокол
  192.168.100.100 - адрес
  99999 - порт
  sendsms - имя скрипта
  ston - параметр TON отправителя
  snpi - параметр NPI отправителя
  sadr - номер отправителя
  dton - параметр TON получателя
  dnpi - параметр NPI получателя
  dadr - номер получателя
  dcs - таблица символов
  esm - параметр ESM-class
также могут быть заданы и другие параметры, такие как время первой попытки отправки сообщения и срок годности сообщения. На практике операторы делают доступным только номер получателя.
При таком способе отсылки Ваш скрипт должен уметь делать простое обращение к указанному скрипту с передачей необходимых параметров.

Прямое подключение к СМСЦ оператора по протоколу SMPP
При таком подключении отправителю доступны все параметры, которые используются при передаче СМС.
Если Вам не требуется получать обратно сообщения (а от абонентов других сетей Вы их и не получите), и если Вас не интересуют уведомления о доставке посланных Вами СМС, то Вы смело можете подключаться только на передачу (transmitter), в противном случае - либо как приемопередатчик (transceiver), либо как два SMPP-клиента, один на передачу, другой на прием. На мой взгляд, подключение двумя клиентами лучше, т.к. они работают параллельно, но приходится следить за состоянием обоих.
После заключения договора, оператор выделяет IP адрес и порт, по которому надо производить соединение, а также передает следующие идентифицирующие Вашего SMPP-клиента параметры: System-ID, System-Password, System-Type.
Все, на этом подготовка к подключению закончена, можно подключаться. Прописываем указанные параметры и посылаем команду Bind. Если ответ попытки подключения - отрицательный, то анализируем сложившуюся ситуацию, исправляем ошибки и делаем повторную попытку. Если анализ не подключения показывает на ошибку у оператора - то решаем вопросы с ним.

Пример подключения к СМСЦ SMPP-клиента и отправки СМС, используя модуль Net::SMPP.pm
Чтобы подключиться к СМСЦ для отправки коротких сообщений необходимо послать на СМСЦ команду bind_transmitter (0x00000002):
  ($smpp,$err) =
    Net::SMPP->new_transmitter(
    "192.168.100.100",
    port=>"99999",
    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 => 0x01,
    source_addr => '99999',
    dest_addr_ton => 0x01,
    dest_addr_npi => 0x01,
    destination_addr => '99999',
    data_coding => 0x04,
    short_message=> 'Тестовая СМС!!!'
    esm_class => 0x00,
  );

В полученном скаляре $resp есть вся информация об отправке, в т.ч. статус выполнения отправки, номер СМС.
Если абонент с номером 99999 получил СМС со своего же номера, и она Ваша - значит эксперимент удался. Осталось совсем немного: доработать программу, чтобы она запускалась резидентно (т.к. за частые переконнекты Вы можете лишиться соединения с оператором), могла получать данные на отправку, следила за состоянием подключения к СМСЦ, и могла переконнекчиваться при необходимости.

Пример подключения к СМСЦ SMPP-клиента и приема СМС, используя модуль Net::SMPP.pm
Чтобы подключиться к СМСЦ для приема коротких сообщений необходимо послать на СМСЦ команду bind_receiver (0x00000001):
  ($smpp_r,$err) =
      Net::SMPP->new_receiver(
    "192.168.100.100",
    port=>"99999",
    system_id =>'System_Id',
    password => 'System_Password',
    system_type=>'System_Type'
    address_range => "999999",
    addr_ton => 0x01,
    addr_npi => 0x01
  ) or die;
  print"Connect-receiver. Status=",$err->{status},"*\n";

Если статус подключения равен "0", значит подключение прошло успешно.
В зависимости от производителей СМСЦ параметр, задающий диапазон прослушиваемых номеров может быть задан либо регулярным выражением, например 99999\d, либо диапазоном, например 999990\x00999999. В обоих случаях СМПП клиент будет принимать СМС, отправленные на номера с 999990 по 999999.
"Слушаем" диапазон и при поступлении СМС читаем PDU:
  $pdu = $smpp_r->read_pdu();
При необходимости можно расшифровать полученное сообщение:
  $sms= &decode($pdu->{data});

  sub decode
  {
    my $date=$_[0];
    my %dd;
    $date=~ /(^.*?)\x00(.)(.)(.*?)\x00(.)(.)(.*?)\x00(.)(.)(.)(.*?)\x00(.*?)\x00(.)(.)(.)(.)(.)(.*$)/;
    $dd->{service_type}=$1;
    $dd->{source_addr_ton}=$2;
    $dd->{source_addr_npi}=$3;
    $dd->{source_addr}=$4;
    $dd->{dest_addr_ton}=$5;
    $dd->{dest_addr_npi}=$6;
    $dd->{destination_addr}=$7;
    $dd->{esm_class}=$8;
    $dd->{protocol_id}=$9;
    $dd->{priority_flag}=$10;
    $dd->{schedule_delivery_time}=$11;
    $dd->{validity_period}=$12;
    $dd->{registered_delivery}=$13;
    $dd->{replace_if_present_flag}=$14;
    $dd->{data_coding}=$15;
    $dd->{sm_default_msg_id}=$16;
    $dd->{length_short_message}=$17;
    $dd->{short_message}=$18;
    return $dd;
  }

Обязательно посылаем СМСЦ ответ об успешном получении СМС deliver_sm_resp (0x80000005):
  $smpp_r->deliver_sm_resp(seq=>$pdu->{seq},message_id=>"\x00");

И отключаемся по окончании работы:
  $resp = $smpp_r->unbind();

Если отправленные на "прослушиваемый" номер сообщения получены, значит все работает прекрасно и можно создавать необходимые рабочие приложения.
  wlxml2xml & xml2wlxml  
Нужен ли сервис на сайте?
Да (774)50%
Нет (515)33%
Все равно (222)14%
gsm 7 (22)1%
Другой  

Предыдущие голосования
 
  Реклама  
sms2web - легкий путь стать контент-провайдером

 
  Новости-OnLine  

Архив Новостей

 
  Статьи  
 
  Статистика  
  • Посещений:15369926
  • Форумов:13
  • Тем:1367
  • Сообщений:6289
  • Пользователей:6043