PromoSMS - сервис рассылки смс, e-mail, прием входящих смс

SOAP-протокол

Инструкции по подключению

к SMS- шлюзу PromoSMS

SOAP протокол

   Simple Object Access Protocol (SOAP) – основанный на XML протокол, предназначенный для обмена информацией в распределенных системах. SOAP устанавливает стандарт взаимодействия клиент-сервер и регламентирует, как должен осуществляться вызов, передаваться параметры и возвращаемые значения. Для представления любой информации, передаваемой от клиента к серверу и наоборот, используется XML.

SOAP нейтрален к платформе, т.е. не накладывает ограничений на платформы, которые используются клиентом и сервером. Запрос клиента, работающего под управлением Windows из 1C, может быть обработан сервером под управлением Linux.

WEB Service Description Language (WSDL) основан на XML и предназначен для описания тех сервисов, которые поддерживает сервер. Для каждого сервиса в WSDL-файле перечисляется набор операций, поддерживаемых данным сервисом, а также определяется формат сообщения, которого должен придерживаться клиент, чтобы сформировать правильный запрос.

WSDL-файл задает контракт между сервером и клиентом, который клиент обязан выполнять, чтобы быть обслуженным.

Благодаря WSDL клиент может автоматически сгенерировать клиента для доступа к SOAP серверу для своего языка программирования и платформы.

Адреса SOAP серверов компании Infomobil:

http://sms.promosms.ru:26676/smw/ws/simpleSoapApi

Для получения WSDL дополните адрес параметром “?wsdl”, например:

http://sms.promosms.ru:26676/smw/ws/simpleSoapApi?wsdl

Подробная документация по сгенерированным объектам и методам содержится в приложенном архиве.

Пример

Рассмотрим разработку клиента на примере языка Java (http://java.sun.com)

Сгенерируем клиентскую часть

Для этого воспользуемся стандартной утилитой wsimport, входящей в состав JDK:

wsimport -keep -p sms.ws http://sms.promosms.ru:26676/smw/ws/simpleSoapApi?wsdl

где sms.ws – опциональное имя пакета, в который мы ходим поместить сгенерированный код

Авторизуемся, отправим SMS и проверим статус её доставки

/**

* Пример использования сгенерированного SOAP клиента.

*/

public class Main {

public static void main (String[] args) {

final ISimpleSoapApi s = new SimpleSoapApiService().getSimpleSoapApiPort();//создаем экземпляр сгенерированного класса

try {

final String sid = s.getSessionID("ваш_логин", "ваш_пароль");//авторизуемся (сессия истекает через несколько часов или полчаса неактивности)


final WsMessage msg = new WsMessage();//смс на трех абонентов

msg.getDstAddrs().add("79154054296");

msg.getDstAddrs().add("88088");

msg.getDstAddrs().add("73472934519");

msg.setMessage("000 test from me! Привет тебе и целование!");

msg.setSrcAddr("Txt");

final List<WSendResult> sresults = s.sendMessage(sid, msg);//отправили, получили идентификатор для каждого


//достанем список идентификаторов

final List<Integer> ids = Cast.list();

for (WSendResult sr : sresults) {

System.out.printf("%s==>%d / %d:%s\n", sr.getDstAddr(), sr.getMessageId(), sr.getError(), sr.getErrorDescription());

ids.add(sr.getMessageId());

}//f


System.out.println("получим отчеты/текущий статус сообщений: " + ids);

List<WsStatus> state = s.getMessageState(sid, ids);//сразу на всю группу (можно порционно)


for (WsStatus st : state) {

System.out.printf("%d==>err=%d ms=%d, simple=%d:%s, sent=%s, last_dr=%s\n",st.getMessageId(), st.getError(),

st.getMessageState(), st.getSimpleStatus(), st.getSimpleStatusDescription(),

st.getSentDateTime(), st.getLastStatusReceivedDateTime());

}//f


Thread.sleep(15000);//подождем 15 сек


System.out.println("Повторная проверка");

state = s.getMessageState(sid, ids);//сразу на всю группу (можно порционно)


for (WsStatus st : state) {

System.out.printf("%d==>err=%d ms=%d, simple=%d:%s, sent=%s, last_dr=%s\n", st.getMessageId(), st.getError(),

st.getMessageState(), st.getSimpleStatus(), st.getSimpleStatusDescription(),

st.getSentDateTime(), st.getLastStatusReceivedDateTime());

}//f

} catch (Exception e) {

e.printStackTrace();

}//t

}//main

}//Main

Статусы SMS-сообщений

Информация о статусе SMS-сообщений поступает от SMS-центров, через которые происходит отправка сообщений абоненту. При получении информации от находящихся за рубежом SMS-центров статус SMS-сообщения иногда может быть некорретным.

Для проверки статуса отправленного сообщения вызывается команда:

gsmstat <Уникальный референс отправленного сообщения>

В ответ сервис выдает строку вида:

250 <код статуса> <дата доставки и краткая расшифровка статуса>\r\n

При запросе статуса командой gsmstat

Значение кода статуса

2

Доставлено до абонента.

7

Доставлено до абонента после его недоступности.

3

Не доставлено за установленное оператором время.

5

Не может быть доставлено, номер не существует.

8

Не может быть доставлено, номер в черных списках оператора.

-1

Не доставлено до абонента.

Любое SMS-сообщение достигает окончательного статуса не более чем, через 24 часа после отправки

Формат номера телефона

Номер телефона абонента должен соответствовать рекомендации E.164 от ITU-T, определяющей общий международный телекоммуникационный план нумерации. Номера по E.164 могут иметь максимум 15 цифр и обычно записываются с префиксом «+». При отправке SMS-сообщений префикс можно «+» можно не указывать, сразу указывая код страны.

7

916

1112233

Код страны

Код оператора

Номер телефона

Например, 79161112233 (здесь 7 – код России и Казахстана, 916 – код оператора, 1112233 – номер телефона). В том случае, если у абонента прямой городской номер, телефон абонента пишется также в международном формате, с указанием кода города. Например, для прямых Московских номеров: 70951112233. Исключение составляют абоненты Билайн Москва (и только они). Все телефоны абонентов Билайн передаются как 7903xxxxxxx (даже, если телефон прямой московский).

Пример сотового номера Армении:

374

9

1112233

Код страны

Код оператора

Номер телефона

Пример сотового номера Израиля:

972

54

1112233

Код страны

Код оператора

Номер телефона