Инструкции по подключению
к SMS- шлюзу PromoSMS
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 (
Для этого воспользуемся стандартной утилитой wsimport, входящей в состав JDK:
wsimport -keep -p sms.ws http://sms.promosms.ru:26676/smw/ws/simpleSoapApi?wsdl
где sms.ws – опциональное имя пакета, в который мы ходим поместить сгенерированный код
/**
* Пример использования сгенерированного 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-сообщения иногда может быть некорретным.
Для проверки статуса отправленного сообщения вызывается команда:
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 |
Код страны |
Код оператора |
Номер телефона |