Формулировка проблемы: необходимо реализовать метод API, который будет отправлять произвольное уведомление пользователю, группе либо на указанные e-mail'ы.
Решение.
Необходимо реализовать следующий метод:
URL метода: rest/api/notifications/send.
Тип запроса: POST.
Метод принимает следующие параметры (json):
header - заголовок/тема уведомления (не
обяз.);
message - тело уведомления (обяз.);
users - массив uuid пользователей, которым
необходимо отправить уведомление;
groups - массив uuid групп пользователей,
которым необходимо отправить уведомление;
logins - массив логинов пользователей,
которым необходимо отправить уведомление;
emails - массив произвольных e-mail, которым
необходимо отправить уведомление;
locale (не обяз.) - код локали (при
отсутствии параметра используется
язык
системы по умолчанию).
Один из параметров users /
groups / logins /
emails должен быть передан обязательно.
Пользователь, от имени которого производится действие, должен быть суперадминистратором (не локальным) системы.
Метод возвращает json-объект с полями:
errorCode - код выполнения:
0 - успешно
иначе - ошибка
errorMessage - сообщение о результате
выполнения (успешном либо неуспешном).
Пример передаваемого запроса:
{
"header": "Срочное собрание!",
"message": "Прошу Вас собраться в 10:00 в актовом зале.",
"users": ["7b953be8-bddb-4ce4-bbfd-ae9548f69c7f", "e65f62fa-7045-4b5b-b61d-46ca00ea7af1"],
"groups": [1, 5, 7],
"logins": ["Абдрешен", "Слепаков", "user_100500", "1"],
"emails": ["bobrov@arta.kz"]
}
Пример возвращаемого json-объекта при успешном выполнении метода:
{
"errorCode": 0,
"errorMessage": "Уведомление отправлено"
}
Альтернативные потоки событий
Альтернативный поток №1. Не передан
обязательный параметр message. Сервер возвращает
ошибку HTTP 400 с сообщением:
{
"errorCode": 3,
"errorMessage": "Не передан параметр message"
}
действие не выполняется.
Альтернативный поток №2. Не передан хотя бы
один из параметров users /
groups / logins /
emails. Сервер возвращает ошибку HTTP 400 с
сообщением:
{
"errorCode": 3,
"errorMessage": "Не передан параметр 'users', 'groups', 'logins' либо 'emails'"
}
действие не выполняется.
Альтернативный поток №3. Переданы некорректные
параметры users / groups /
emails (не по формату). Сервер возвращает ошибку
HTTP 400 с сообщением:
{
"errorCode": 3,
"errorMessage": "Переданы некорректные параметры"
}
действие не выполняется.
Альтернативный поток №4. Переданы некорректные
(несуществующие) идентификаторы пользователей в параметре
users. Сервер возвращает ошибку HTTP 400 с
сообщением:
{
"errorCode": 3,
"errorMessage": "Пользователи с uuid %uuid1%, %uuid2%, ... не найдены"
}
действие не выполняется.
Альтернативный поток №5. Переданы некорректные
(несуществующие) идентификаторы групп в параметре
groups. Сервер возвращает ошибку HTTP 400 с
сообщением:
{
"errorCode": 3,
"errorMessage": "Группы с uuid %uuid1%, %uuid2%, ... не найдены"
}
действие не выполняется.
Альтернативный поток №6. Переданы некорректные
(несуществующие) логины пользователей в параметре
logins. Сервер возвращает ошибку HTTP 400 с
сообщением:
{
"errorCode": 3,
"errorMessage": "Пользователи с логинами %логин1%, %логин2%, ... не найдены"
}
действие не выполняется.
Альтернативный поток №7. Метод выполняется не от имени суперадминистратора системы. Сервер возвращает ошибку HTTP 403 с сообщением:
{
"errorCode": 2,
"errorMessage": "Действие необходимо выполнять от имени администратора системы"
}
действие не выполняется.
Во всех остальных случаях метод выполняется успешно, сервер добавляет уведомления в очередь и отправляет их асинхронно:
пользователям (по uuid либо логину) и группам - на настроенные e-mail'ы, в jabber и как push-уведомления на связанное мобильное устройство;
почтовым аккаунтам - на указанные e-mail'ы.
Для отправки уведомлений на e-mail и в jabber должны быть настроены параметры рассылки в Подсистеме администрирования -> Настройки системы -> Настройки уведомлений.
Если передан некорректный (несуществующий) e-mail получателя, то уведомление для них не отправится (метод при этом также выполнится успешно).
Примечание.
Если один и тот же пользователь выбран несколько раз (один раз - как пользователь, еще один либо несколько раз - выбрав группы, куда он входит, в третий раз - по логину), то действие для него должно выполниться единожды.