API для SMS интерактивов

Данный документ является описанием протокола взаимодействия программного обеспечения компаний-партнеров с платформой Start Mobile в рамках проекта SMS-интерактив [скачать API для SMS интерактивов].. Протокол обеспечивает программному обеспечению партнеров следующие возможности:

  • прием сообщений от операторов и отправку партнерам в едином формате
  • отправку ответных сообщений SMS мобильным абонентам
  • получение информации о статусе отосланных сообщений

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

  • гибкость и расширяемость
  • простота реализации
  • отсутствие необходимости в сложном программном обеспечении со стороны партнеров

Исходя из указанных целей, в качестве основы для протокола был выбран обмен XML-сообщениями через протокол HTTP. Использование языка XML обеспечивает необходимую гибкость и расширяемость. Наличие большого количества готовых средств генерации и обработки XML, а также простая структура протокола делают реализацию клиентской части не очень сложной.

Протокол опирается на стандартную модель "клиент-сервер", причем при доставке входящего SMS партнеру в качестве клиента выступает платформа Start Mobile, а в качестве сервера — программное обеспечение партнера. При отправке ответа роли клиента и сервера меняются на противоположные

Следующий раздел данного документа содержит описание взаимодействия клиента и сервера на нижнем уровне (уровне HTTP). Последующие два раздела подробно описывают два основных типа запросов. Наконец, в последнем разделе приведены формальные спецификации протокола.

Протокол нижнего уровня

Как уже говорилось ранее, в качестве транспортного уровня для описываемого протокола был выбран протокол HTTP. Соответственно, на нижнем уровне все запросы клиента к серверу выглядят как обычные HTTP запросы, использующие метод POST, в которых тело запроса является XML-текстом. В результате выполнения запроса, ПО сервера возвращает XML-текст, содержащий результат. Тип возвращаемого результата (Content-Type) всегда text/xml.

Доставка сообщений партнеру

Для доставки сообщения партнеру, платформа Start Mobile передает серверу партнера XML-запрос следующего вида:

Отсылка одиночного сообщения:

<message>
    <service type="тип" timestamp="message_timestamp" auth="authorization_line" request_id=”id_запроса”/>
    <from>номер абонента</from>
    <to>сервисный номер</to>
    <body content-type="тип содержимого" encoding="кодировка">
    текст сообщения
    </body>
</message>

Здесь:

  • типна данный момент значение параметра должно быть равно «sms».
  • message_timestamp — время отправки сообщения абонентом (в случае, когда его возможно определить) или время получения сообщения платформой StartMobile в формате UNIX-time.
  • authorization_line — строка авторизации, вычисляемая как стандратная хэш-функция md5 от строки login:password:message_timestamp”, где login и password – параметры, выданные партнеру при подключении к системе;
  • id_запроса — идентификатор сообщения в системе StartMobile;
  • кодировка - задает кодировку тела сообщения, если тело сообщения двоичное. Для текстовых сообщений (тип сообщения - text/plain) данный параметр можно опустить, либо установить равным plain. Допустимые значения кодировки - следующие:
    • plain - кодирование отсутствует. Данный тип допустим только для текстовых сообщений в UTF-8
    • base64 - тело сообщения закодировано как BASE64 (см. стандарт MIME)

В результате обработки запроса, сервер партнера возвращает клиенту результат следующего вида в зависимости от режима обработки сообщения:

а) Синхронный режим. Сервер партнера возвращает ответ для абонента:

<answer type="тип_ответа">
        <body paid=”флаг_платности”>
        Текст ответа
        </body>
</answer>

Здесь:

  • тип_ответадля синхронного режима тип ответа должен быть установлен в «sync».
  • флаг_платности — может принимать значения true или false, позволяет определить, является ли ответ платным для абонента. Возможность поддерживается только при типе тарификации МТ и не для всех операторов.
  • Текст ответа — текст ответа, который будет отправлен абоненту. Тег body может повторяться несколько раз — в этом случае абоненту будет отправлено несколько ответов.

б) Асинхронный режим. Сервер партнера возвращает только подтверждение приема запроса:

<answer type="тип_ответа">
        <state>
        Accepted
        </state>
</answer>

Здесь:

  • тип_ответа – для асинхронного режима тип ответа должен быть установлен в «async».

В случае работы в асинхронном режиме после обработки система партнера должна прислать платформе StartMobile ответ для абонента в следующем формате:

<answer request_id="id_запроса" auth=”authorization_line” timestamp=”answer_timestamp”>
        <body paid=”флаг_платности”>
        Текст ответа
        </body>
</answer>

Все поля формируются аналогично выше описанным.

Получение информации о статусе сообщения

Для получения информации о статусе сообщения, партнер должен послать серверу запрос следующего вида:

<request id="id_запроса">status<request>

В ответ платформа Start Mobile выдает следующее:

<status>
<state answer='1'>состояние</state>
<state answer='2'>состояние</state>

<state answer='N'>состояние</state>
<status>

где «состояние» может принимать значения:

  • «enroute» - «доставляется»
  • «delivered» - «доставлено»
  • «undeliverable» - «доставка невозможна»
  • «expired» - «истек срок доставки»
  • «unknown» - «неизвестно»