Показаны сообщения с ярлыком sms. Показать все сообщения
Показаны сообщения с ярлыком sms. Показать все сообщения

четверг, 9 декабря 2010 г.

SMPP - краткое описание на русском

Описание

SMPP протокол, который используется мобильными операторами для организации службы коротких сообщений (SMS).
Согласно своему имени протокол SMPP определяет клиента (ESME) и сервер (часто называемого SMSC).
Клиент инициализирует TCP соединение и выполняет команду bind для организации соединения со специфичными параметрами.
Схемы соединения клиента:
1. receiver — клиент может только получать сообщения от SMSC.
2. transmitter — клиент может только отправлять сообещения на SMSC
3. transceiver — клиент осуществляет двухстороннюю передачу сообщений.

Таким образом для организации двухстороней передачи сообщений можно либо установить соединение тип transceiver, либо устанавливать 2 соединения типов transmitter и receiver.



Для завершения SMPP сессии используется команда unbind.

После установки SMPP соединения происходит обмен сообщениями, называемыми PDU (protocol data unit). Общение между клиентом и сервером происходит по принципу запрос-ответ (request-response). Запросы содержат в себе определенное уникальное в данной сессии число, и в свою очередь ответные PDU, содержат в себе то же самое число — благодаря этому механизму возможна асинхронная передача сообщений.

Протоколом определены несколько команд для отправки разных типов сообщений, замены и отмены ранее отправленных сообщений и т. д. Наиболее часто используемой из них командой является submit_sm — отправка простого текстового сообщения. Ответом на эту команду является PDU submit_sm_resp. Отчет о доставке сообщения посылается в виде PDU deliver_sm.

Также стоит сказать про ограничение длины SMPP сообщений. В протоколе SMPP, длина поля short_message ограничена 254 байтами, однако нижележащие протоколы накладывают другие требования. Например GSM ограничивает длину коротких сообщений в 140 байт.

Пример организации соединения и отправки текстового сообщения на языке Perl с использованием модуля Net::SMPP

#!/usr/bin/perl -w

use strict;
use Net::SMPP;

#Номер от которого отправляется СМС
my $SMPP_SOURCE_ADDR='FROM';
#Номер кому отправляется СМС
my $SMPP_DEST_ADDR='79000000000';

#Инициируем соединение типа transceiver
#В параметрах указываем system_id и password - аналог имени пользователя и пароля для аутентификации на SMSC
#адрес и порт, с которым соединяемся и версию протокола SMPP
my $smpp = Net::SMPP->new_transceiver('192.168.1.1',
system_id => 'username',
password => 'password',
port => '2775',
smpp_version=> 0x34
)
or die "Can't connect to SMSC: $!";

&send_message($SMPP_SOURCE_ADDR, $SMPP_DEST_ADDR, 'Hello SMS!!!');


#Процедура отправки сообщения submit_sm
#В параметрах send_message передаем адрес отправителя, адрес получателя, то есть его номер телефона и текст
#сообщения
#Параметры source_addr_ton, source_addr_npi, dest_addr_ton, dest_addr_npi определяют дополнительные параметры
#адресов отправителя и получателя. Подробнее о них в спецификации протокола SMPP.
sub send_message {
my ($sm_source_addr, $sm_dest_addr, $sm_message) = @_;
my $result = eval {
my $pru = $smpp->submit_sm(
source_addr_ton => 0x05,
source_addr_npi => 0x01,
source_addr => $sm_source_addr,
dest_addr_ton => 0x01,
dest_addr_npi => 0x01,
destination_addr => $sm_dest_addr,
data_coding => 0x01,
short_message =>$sm_message
) or return 1;
return 0;

};
if ($result == 1){
"Can't send message: $!";
}

}

#Разрываем соединение с SMSC
$smpp->unbind();


Где-то уже не помню где  нашел неофициальный перевод спецификации протокола SMPP на русский, вот он.
Если найдется его автор, скажу большое спасибо ))).