===== Общее описание =====
Данный **REST API** предназначен для взаимодействия клиентов с сервером уведомлений **PLAY MOBILE**.
Все запросы к **API** осуществляются по протоколу **HTTP**. Тело запроса передается в формате **JSON**. При этом необходимо устанавливать ''Content-type: application/json''. Также в параметре **charset** необходимо передавать значение кодировки - **UTF-8**. Формат для отправки даты и времени **ISO 8601**. Время передается в часовом поясе **UTC**.
===== Аутентификация =====
Используется **Basic** аутентификация.
При базовой аутентификации клиент вместе с запросом отправляет серверу логин и пароль. Эти данные отправляются в заголовке запроса **Authorization** в виде base64 кода.
**Authorization: Basic base64_encode(login:password)**
Так, например, если логин и пароль admin, нужно добавить такой заголовок:
''Authorization: Basic YWRtaW46YWRtaW4=''
===== Общий формат ответа=====
Используются HTTP ответы с соответствующими кодами. Если какая-либо переменная ответа имеет несколько значений, они формируются в виде массива. Если в запросе было несколько значений какой-либо переменной, в ответе значения будут в том же порядке.
Если запрос содержит ошибку (код 400), то в теле ответа обязательно присутствует JSON-объект со следующими полями.
^Имя ^Тип ^Обязательность ^Описание ^
| error_code | string | да | Код ошибки |
| error_description | string | да | Описание ошибки |
===== Коды ошибок =====
Данные коды возвращаются при получении HTTP ответа с кодом 400. И являются значениями поля "error_code", описанного выше.
^ Код ^ Описание ^ Перевод ^
| 100 | Internal server error | Внутренняя ошибка сервера |
| 101 | Syntax error | Синтаксическая ошибка |
| 102 | Account lock | Аккаунт клиента заблокирован |
| 103 | Empty channel | Не задан канал для отправки сообщений |
| 104 | Invalid priority | Указано некорректное значение параметра priority |
| 105 | Too much IDs | Передано слишком много идентификаторов сообщений |
| 202 | Empty recipient | Адрес получателя не задан (кроме канала email) |
| 204 | Empty email address | Адрес электронной почты получателя не задан (для канала email) |
| 205 | Empty message-id | Идентификатор сообщения не задан |
| 206 | Invalid variables | Указано некорректное значение параметра variables |
| 301 | Invalid localtime | Указано некорректное значение параметра localtime |
| 302 | Invalid start-datetime | Указано некорректное значение параметра start-datetime |
| 303 | Invalid end-datetime | Указано некорректное значение параметра end-datetime |
| 304 | Invalid allowed-starttime | Указано некорректное значение параметра allowed-starttime |
| 305 | Invalid allowed-endtime | Указано некорректное значение параметра allowed-endtime |
| 306 | Invalid send-evenly | Указано некорректное значение параметра send-evenly |
| 401 | Empty originator | Адрес отправителя не указан |
| 402 | Empty application | Приложение не указано |
| 403 | Empty ttl | Значение ttl не указано (если задано несколько каналов отправки) |
| 404 | Empty content | Содержимое сообщения не указано |
| 405 | Content error | Неправильный формат содержимого контента |
| 406 | Invalid content | Недопустимое значение контента для указанного канала |
| 407 | Invalid ttl | Неправильно указано значение времени ожидания доставки |
| 408 | Invalid attached files | Прикрепленные файлы имеют слишком большой объем |
| 410 | Invalid retry-attempts | Неправильно указано значение количества попыток дозвона |
| 411 | Invalid retry-timeout | Неправильно указано значение времени повторного дозвона |
===== Отправить сообщения =====
Сервер Play Mobile принимает запросы от сервера клиента на **URL**:\\
[[https://send.smsxabar.uz/broker-api/send]]\\
[[http://91.204.239.39/broker-api/send]]
==== Тело запроса ====
Приведенный JSON демонстрирует все доступные в запросе параметры.
{
"template-id": "",
"priority": "",
"blacklist-id": "",
“timing”: {
"localtime": "",
"start-datetime": "",
"end-datetime": "", “allowed-starttime”: “”,
“allowed-endtime”: “”,
"send-evenly": ""
},
"sms": {
“originator”: “smsSender”,
“ttl”: “300”,
“content”: {
“text”: “Test text”
}
},
"call": {
“originator”: “998900000000”,
“ttl”: “300”,
“content”: {
“text”: “Test text”,
“menu”: “Test”,
“file”: “”
},
"retry-attempts": "",
"retry-timeout": ""
},
"messages": [
{
“recipient”: “998900000001”,
“message-id”: “abc000001”,
"template-id": "",
"priority": "",
"variables": [],
“timing”: {
"localtime": "",
"start-datetime": "",
"end- datetime": "",
“allowed-starttime”: “”,
“allowed-endtime”: “”
},
"sms": {
“originator”: “smsSender”, “ttl”: “300”,
“content”: {
“text”: “Test text”
}
},
"call": {
“originator”: “998900000002”,
“ttl”: “300”,
“content”: {
“text”: “Test text”,
“menu”: “Test”,
“file”: “”
},
"retry-attempts": "",
"retry-timeout": ""
}
]
}
==== Параметры запроса ====
**Общие параметры.**
^ Название ^ Тип ^ Обязательность ^ Описание ^
| template-id | string | Нет | Идентификатор шаблона для отправки сообщения |
| priority | string | Нет | Приоритет:\\ 2 - низкий,\\ 4 - обычный,\\ 6 - высокий,\\ 8 - наивысший.\\ Если не указан, то используется 4 |
| timing | object | Нет | Временные настройки |
| sms | object | Нет | Параметры для отправки по соответствующему каналу |
| call | object | Нет | Параметры для отправки по соответствующему каналу |
| messages | array | Да | Параметры для отправки по соответствующему каналу |
**Параметры объекта timing.**
^ Название ^ Тип ^ Обязательность ^ Описание ^
| localtime | Number | Нет | Отправлять по местному времени\\ 0 - получателя\\ 1 - системы |
| start-datetime | datetime | Нет | Дата начала отправки.\\ Формат YYYY-MM-DD hh:mm.\\ Если не указана, то сообщения отправляются сразу же. |
| end-datetime | datetime | Нет | Дата завершения отправки.\\ Формат YYYY-MM- DD hh:mm.\\ Если не указана, то система не стремится отправить все сообщения до определенного времени. |
| allowed-starttime | datetime | Нет | Время, с которого разрешена отправка.\\Формат hh:mm |
| allowed-endtime | datetime | Нет | Время, до которого разрешена отправка.\\ Формат hh:mm |
| send-evenly | Number | Нет | Равномерно распределять отправку\\ 1 - распределять\\ 0 - не распределять |
**Параметры объектов каналов (sms, call).**
^ Название ^ Тип ^ Обязательность ^ Описание ^
| originator | string | Нет | Адрес отправителя |
| ttl | Number | Нет | Время жизни сообщения в секундах. По истечении данного времени сообщению присваивается статус expired и производится отправка сообщения по альтернативному каналу, если он задан |
| content | object | Нет | Параметры для отправки по каналу |
**Параметры объекта content для sms.**
^ Название ^ Тип ^ Обязательность ^ Описание ^
| text | string | Нет | Текст сообщения. |
**Параметры объекта content для call.**
^ Название ^ Тип ^ Обязательность ^ Описание ^
| text | string | Нет | Текст сообщения для синтеза TTS, до 2000 байт (1000 символов). Используется один из трех параметров:\\ text, file, ivrmenu.\\ Запрос с более чем одним параметром считается некорректным. |
| file | string | Нет | Название аудиофайла. Используется один из трех параметров:\\ text, file, ivrmenu.\\ Запрос с более чем одним параметром считается некорректным. |
| menu | string | Нет | Название IVR-меню. Используется один из трех параметров:\\ text, file, ivrmenu.\\ Запрос с более чем одним параметром считается некорректным. |
| retry-attempts | Number | Нет | Количество попыток повторного звонка. Допустимы только неотрицательные числа. |
| retry-timeout | Number | Нет | Интервал, через который будет произведен повторный звонок, в миллисекундах |
**Параметры элемента массива messages.**
^ Название ^ Тип ^ Обязательность ^ Описание ^
| recipient | string | Нет | Адрес получателя (как правило MSISDN), указывается строго в формате __9989xxxxxxx__, без пробелов и __без знака +__ |
| message-id | string | Нет | Уникальный для системы-отправителя идентификатор сообщения должен быть уникальным для каждого отправленного или переотправленного сообщения. Пример “abc0000001” abc = название организации. Размер поля не более 40 символов. |
| template-id | string | Нет | Идентификатор шаблона для отправки сообщения |
| priority | string | Нет | Приоритет:\\ low - низкий,\\ normal - обычный,\\ high - высокий,\\ realtime - наивысший.\\ Если не указан, то используется normal Настраивается в личном кабинете. |
| timing | object | Нет | Временные настройки |
| variables | array | Нет | Объект параметров и их значений для подстановки в сообщение (каждый элемент представлен как запись ПАРАМЕТР: ЗНАЧЕНИЕ, например, ''{“PARAM1”:”VALUE1”,”PARAM2”:”VALUE2”}''). |
| sms | object | Нет | Параметры для отправки по соответствующему каналу |
| call | object | Нет | Параметры для отправки по соответствующему каналу |
Параметры объектов timing и объектов каналов аналогичны параметрам для общей части запроса.
**Параметры ответа**
Успешный запрос имеет статус 200/OK и тела ответа ''Request is received''
===== Отправка статусов сообщений =====
URL партнера: /status\\
URL партнера используется для принудительного получения статусов отправленных сообщений от СМСЦ «Play Mobile».\\
Статус отправляется на URL партнера, как только получим его от сотового оператора.\\ \\
**Отправка единичного статуса**
{
“messages”: [
{
“message-id”: “”,
“channel”: “”,
“status”: “”,
“status-date”: “”,
“description”: “”
}
]
}
\\
**Массовая рассылка статуса**
{
“messages”: [
{
“message-id”: “”,
“channel”: “”,
“status”: “”,
“status-date”: “”,
“description”: “”
},
{
“message-id”: “”,
“channel”: “”,
“status”: “”,
“status-date”: “”,
“description”: “”
}
]
}
**Запрос статусов возвращает следующие статусы сообщений:**\\
//Delivered// - доставлено;\\
//Transmitted// - передано оператору, от вас смс получили и отправили оператору, оператор еще не обработал, причиной может быть, когда абонент вне зоны сети или выключен. После 24 часов статус сменится на Доставлено.;\\
//NotDelivered// - недоставлено, обычно причиной может быть то что абонент блокируется со стороны оператора (недостаточно средств или долг);\\
//Rejected// - одна из основных причин в том, что номер находится в черном списке;\\
//Failed// - ошибка при отправки запроса (например когда адрес отправителя указан неверно);\\
//Expired// - срок жизни смс истек (когда абонент в течение суток не выходил на связь. У билайн если в течение часа).\\
===== Примеры =====
==== Отправка единичного сообщения ====
{
"messages": [
{
"recipient": "998900000000",
"message-id": "abc000000001",
"sms": {
"originator": "3700",
"content": {
"text": "Test message"
}
}
}
]
}
\\
==== Отправка массовой рассылки ====
{
"messages": [
{
"recipient": "9989хххххххх",
"message-id": "abc00000001",
"sms": {
"originator": "3700",
"content": {
"text": "Test text"
}
}
},
{
"recipient": "9989xxxxxxxx",
"message-id": "abc00000002",
"sms": {
"originator": "3700",
"content": {
"text": "Test text 1"
}
}
},
{
"recipient": "998970000000",
"message-id": "abc00000003",
"sms": {
"originator": 3700,
"content": {
"text": "Test text 2"
}
}
}
]
}
==== Отправка единичного сообщения по шаблону ====
{
"messages": [
{
"template-id": "111",
"recipient": "998900000000",
"message-id": "abc0000001",
"variables": {
"NAME": "IVAN",
"SURNAME": "IVANOV"
}
}
]
}
\\
==== Отправка массовой рассылки по расписанию ====
{priority": "",
"timing":
{"localtime": "true",
"start-datetime": "2017-11-05 10-00",
"end-datetime": "2017-11-25 19-00",
"allowed-starttime'""': "10-00 ","allowed-endtime": "19-00""send-evenly": "false"
},
"sms": {
"originator": "smsSender",
"content": {
"text": "Test text"
}
},
"messages": [
{
"recipient": "998900000000",
"message-id": "abc00000145"
},
{
"recipient": "998900000001",
"message-id": "abc00000146"
}
]
}
}
\\
==== Отправка массовой рассылки по шаблону ====
{
"template-id": "112",
"messages": [
{
"recipient": "998900000000",
"message-id": "abc000001",
"variables": {
"NAME": "IVAN",
"SURNAME": "IVANOV"
}
},
{
"recipient": "998900000001",
"message-id": "abc000002",
"variables": {
"NAME": "PETR",
"SURNAME": "KUZIN"
}
},
{
"recipient": "998900000002",
"message-id": "abc000003",
"variables": {
"NAME": "VLADIMIR",
"SURNAME": "NESTEROV"
}
}
]
}