MO-сообщения#
Для предоставления возможности абоненту ответить на рассылку, Партнёру необходимо подключить сервис получения MO-сообщений.
Подключение сервиса#
Для подключения сервиса Партнёр должен предоставить Сервис-провайдеру следующие данные:
ключевое слово с синонимами (либо регулярное выражение) для определения сообщений Партнёра;
сервисное имя, на которое будет предоставляться услуга;
URL сервиса Партнёра, где реализован протокол взаимодействия для приема от Сервис-провайдера входящих сообщений;
время ожидания – период времени, за который Партнёр обязуется вернуть ответ в рамках протокола обмена;
текст сообщения, высылаемый абоненту в случае недоступности сервера Партнёра.
Взаимодействие с платформой#
Номер |
Синхронный режим |
Асинхронный режим |
---|---|---|
1 |
Абонент присылает сообщение на короткий номер Сервис-провайдера. |
|
2 |
Сервис-провайдер отправляет HTTP-запрос на URL сервиса Партнёра (описание параметров см. ниже).
Если сервис Партнёра не отвечает на запросы Сервис-провайдера, производится Повторная обработка сообщений.
|
|
3 |
Партнёр обрабатывает поступивший запрос и отвечает на него. |
Партнёр принимает запрос на обработку и присылает HTTP-ответ со статусом 204, означающим, что Партнёр ответит абоненту позже. |
4 |
Сервис-провайдер обрабатывает ответ и, в случае необходимости, оправляет сообщение c ответом абоненту. |
В случае необходимости отправить абоненту ответное сообщение, Партнёр использует штатный HTTP-интерфейс для отправки сообщений. |
Если в течение заданного тайм-аута от Партнёра не поступил ответ, то абоненту направляется сообщение о временной недоступности сервиса с просьбой повторить запрос позже.
В ответ на один запрос абонента может посылаться несколько отдельных сообщений. В ответ на запрос абонента может не отсылаться ни одного сообщения в случаях, предусмотренных логикой сервиса.
Для предоставления абоненту возможности пользоваться сервисом, не ограничивая сообщения ключевыми словами, предусмотрен функционал сессионности (см. Сессии для SMS-сообщений).
Запрос от Сервис-провайдера к сервису Партнёра#
Сервис-провайдер передает сообщение от абонента к Партнёру посредством HTTP-запроса методом GET.
{
http://partner.ru/service?clientId=79161234567&message=testText&connectorId=50&serviceId=login&receivedDate=2009-10-02%2012:00:00&shortNumber=0000
}
Примечание
Обязательные параметры выделены в таблице жирным шрифтом.
Параметр |
Тип |
Описание |
---|---|---|
clientId |
String |
Номер телефона абонента |
message |
String |
Текст, присланный абонентом, в кодировке UTF-8. Предварительно из текста может быть удален префикс сервиса (шаблон), к которому относится сообщение. |
connectorId |
integer |
Код оператора, через SMS-центр которого получено сообщение от абонента. |
serviceId |
string |
Идентификатор сервиса Партнёра, для которого предназначено сообщение. |
receivedDate |
string |
Дата и время получения сообщения Сервис-провайдером. Формат: “YYYY-MM-DD HH:MM:SS”. |
shortNumber |
string |
Сервисное имя, на которое абонент послал сообщение. |
mtSent |
integer |
Значением параметра является количество сообщений, накопившихся в очереди «Отложенные» за время неработоспособности сервиса Партнёра (см. Повторная обработка сообщений.) |
messageId |
string |
Уникальный идентификатор сообщения. |
clientPhone |
string |
Номер телефона абонента. Может быть замаскирован, то есть передаются не все цифры номера, а, например, последние четыре. Примечание Маскирование номера настраивается по договоренности с Сервис-провайдером. Данный параметр в некоторых случаях дублирует параметр clientId и является дополнительным. |
sum_sms |
integer |
Количество частей во входящем сообщении. Может использоваться Партнёром для ведения собственной статистики биллинга. |
hash |
string |
Кодированная подпись (хэш). Дает Партнёру возможность проверить, что запрос действительно передан Сервис-провайдером. Значение вычисляется по строке, собираемой из параметров clientId, message и messageId, составленных подряд вместе в указанном порядке. При формировании строки берутся исходные (необработанные) параметры запроса – полный телефон, сходное сообщение и его идентификатор. Параметр хэша вычисляется по алгоритму HMACSHA256, затем полученные двоичные данные кодируются в строку Base64, которая обрабатывается как обычный параметр URL. Ключ для генерации хэша Партнёру выдает Сервис-провайдер. Во всех преобразованиях строк используется кодировка UTF-8. Примечание Данный функционал недоступен по умолчанию. Для его подключения обратитесь к своему курирующему менеджеру. |
timestamp |
long |
Количество секунд, прошедших с эпохи 1970-01-01T00: 00: 00Z. Значение используется для вычисления параметра token и возвращается с ним вместе. |
token |
string |
Токен, вычисляемый из значений timestamp, clientId и секретного параметра salt, с использованием алгоритма MD5. Может использоваться для проверки запроса на достоверность. Примечание Данный функционал недоступен по умолчанию. Для его подключения обратитесь к своему курирующему менеджеру. |
Ответ на запрос#
Партнёр должен ответить на полученный от Сервис-провайдера запрос в течение установленного таймаута (10 секунд, если отдельно не указано иное) одним из статусов, указанных в таблице.
Статус |
Описание |
---|---|
200 |
ОК. Запрос обработан. В теле ответа передается текст сообщения для отправки абоненту. |
204 |
No Content. Запрос обработан. Абоненту не надо отправлять сообщение. Тело ответа должно быть пустым. |
4хх, 5хх |
Ошибка на стороне Партнёра. Запрос не обработан. |
Примеры ответов#
Примеры ответов сервиса Партнёра на запрос Сервис-провайдера.
Пример ответа в случае правильной работы сервиса и одного ответного сообщения:
HTTP/1.1 200
Content-Length: <длина ответа>
Content-Type: text/plain; charset = utf-8
Vash zapros prinyat, spasibo za uchastie.
Пример ответа в случае правильной работы сервиса и 4-х ответных сообщений:
HTTP/1.1 200
Content-Length: <длина ответа>
Content-Type: text/plain; charset = utf-8
Otvetnoe SMS nomer 1
Otvetnoe SMS nomer 2
Otvetnoe SMS nomer 3
Otvetnoe SMS nomer 4
Пример ответа в случае некорректной работы сервиса:
HTTP/1.1 200
Content-Length: <длина ответа>
Content-Type: text/plain; charset = utf-8
Neverniy kod zaprosa, proverte i povtorite esche raz.
Пример ответа в случае, когда клиенту не отправляется ответное сообщение:
HTTP/1.1 204
Пример сигнализации о внутренней ошибке сервиса на стороне Партнёра:
HTTP/1.1 501
Internal ErrorContent-Length: 31
Content-Type: text/plain; charset= utf-8
Unhandled error in SQL function
Ответ при успешной отправке запроса#
Если запрос обработан успешно, и необходимо отправить абоненту ответное сообщение, Партнёр передает в теле ответа на запрос текст ответного сообщения.
Особенности формирования ответа на запрос:
Ответ должен содержать заголовок Content-Type с указанием кодировки. Допустимые значения:
Content-Type: text/plain; charset = utf-8
Content-Type: text/plain; charset = cp1251
Ответ должен содержать текст сообщения для отправки абоненту в кодировке, указанной в заголовке ответа.
В ответ абоненту может быть послано несколько отдельных сообщений. Каждое новое сообщение выводится в новой строке ответа и отделяется последовательностью спецсимволов <CR><LF>.
При необходимости вставить в тексте сообщения символ перевода строки используется спецсимвол <CR>.
Ошибки при отправке запроса#
Если в течение установленного таймаута ответ от Партнёра не пришел, абоненту отсылается сообщение о недоступности сервиса (может быть задано при регистрации сервиса). В случае повторяющихся тайм-аутов сервис Партнёра может быть заблокирован.
При получении статусов 4хх или 5хх, ответ от Партнёра сохраняется в логе, но не отсылается абоненту. Абоненту может быть передано сообщение об ошибке, описанное при регистрации сервиса. В случае повторяющихся ошибок сервис Партнёра может быть заблокирован.
Повторная обработка сообщений#
Если сервис Партнёра не отвечает на запросы Сервис-провайдера (см. Взаимодействие с платформой):
происходит перемещение всех предназначенных для этого сервиса сообщений в очередь отложенных сообщений;
сервис помечается как «неработающий» и для него устанавливается время, в течение которого все сообщения, поступившие Сервис-провайдеру и предназначенные для данного сервиса, помещаются в очередь отложенных сообщений. Время, на которое сервис будет помечаться как «неработающий» может устанавливаться индивидуально для каждого сервиса и по умолчанию равно 20 секундам;
всем абонентам, обратившимся к неработающему сервису, высылается сообщение о недоступности сервиса и задержке в оказании услуг (только в случае, если для сервиса настроена данная опция);
по окончании времени отключения Сервис-провайдер пытается отправить сообщения из очереди отложенных на сервис Партнёра. Если сервис вновь не доступен – он снова помечается как «неработающий»;
для каждого сообщения делается максимум 200 попыток отправки, после чего сообщение удаляется из очереди.
Сессии для SMS-сообщений#
Описание#
Функционал сессионности позволяет абоненту пользоваться сервисом, не ограничивая сообщения ключевыми словами.
Открытие сессии происходит при отправке абонентом на сервисное имя сообщения с ключевым словом для открытия сессии. Если абонент отправил правильное ключевое слово, то для него на данном сервисном имени открывается сессия. Временной интервал активной сессии прописан в конфигурации сервиса. В течение этого интервала времени все сообщения, присланные абонентом на данное сервисное имя, будут обрабатываться сессионным сервисом. Все сообщения с кодовым словом или сообщения, попавшие в сессию, передаются Партнёру. В ответ абоненту передается текст, предоставленный Партнёром.
Продление времени сессии происходит при отправке абонентом сообщения, если в момент отправки сообщения сессия на сервисном имени активна. В этот момент сообщение может содержать любой текст, кроме команды выхода из сессии. Сессия продлевается на время активности сессии, установленное в конфигурации сервиса.
Время активной сессии истекает, если абонент за данный временной период не прислал ни одного сообщения на сервисное имя. По истечении времени активности сессии абоненту приходит сообщение (опционально), оповещающее его о том, что время сессии истекло и она закрывается. Абонент может самостоятельно закрыть сессию. Для этого ему необходимо отправить ключевое слово выхода из сессии. В ответ абоненту придет сообщение, подтверждающее закрытие сессии, и сессия завершается.
Подключение#
Для подключения функционала сессий Партнёр должен дополнительно сообщить менеджеру следующие данные:
ключевое слово с синонимами (регулярное выражение) для открытия сессии;
указание, следует ли Сервис-провайдеру отвечать абоненту на ключевое слово при открытии сессии. Если «да», то необходимо предоставить текст сообщения, отправляемый абоненту при открытии сессии;
ключевое слово с синонимами (регулярное выражение) для закрытия сессии. Ключевое слово для закрытия сессии может отсутствовать или быть одинаковым для всех сервисов Партнёра;
указание, следует ли Сервис-провайдеру отвечать абоненту на ключевое слово при закрытии сессии. Если «да», то необходимо предоставить текст сообщения, отправляемый абоненту при закрытии сессии;
интервал времени, в течение которого сессия будет активна;
текст сообщения, высылаемый абоненту в случае недоступности сервера Партнёра;
URL сервиса Партнёра, где реализован протокол взаимодействия для приема от Сервис-провайдера входящих сообщений;
время ожидания – период времени, за который Партнёр обязуется вернуть ответ в рамках протокола обмена.