ym88659208ym87991671
Синхронизация пользователей из службы каталогов | Документация для разработчиков

Синхронизация пользователей из службы каталогов

Обновлено 20 февраля 2026

Jazz Sync Tool — приложение для синхронизации пользователей из вашей службы каталогов, совместимой с протоколом LDAP (например, Microsoft Active Directory) в SaluteJazz.

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

Совместимость и требования

Основное требование — совместимость с Go версии 1.22.

  • Операционная система:
    • Windows 10 и выше/Server 2016 и выше;
    • из семейства Linux, с версией ядра 2.6.32 и выше;
    • из семейства macOS 10.15 Catalina и новее.
  • LDAP-совместимая реализация службы каталогов. Актуальные совместимые версии:
    • OpenLDAP: версия 2.4 и выше;
    • Active Directory: совместимая с Windows 10 и выше или Server 2016 и выше.
  • Сетевой доступ (ldap: TCP/UDP) между сервером, на котором запускается приложение, и сервером, на котором установлена служба каталогов.
  • Сетевой доступ (http) между сервером, на котором запускается приложение, и salutejazz.ru.
  • Личный кабинет Jazz Cloud c активным проектом. Убедитесь, что для вашей учетной записи доступна вкладка SSO и на ней доступна генерация Secret.
  • Актуальная версия приложения доступна по ссылке в личном кабинете Jazz Cloud.

Использование и описание приложения

Схема работы:

Схема работы
  1. Администратор запрашивает Secret в личном кабинете Studio .
  2. Studio отдает Secret.
  3. Администратор запускает приложение и передает ему параметры.
  4. Утилита отправляет запрос на получение токена авторизации (для этого используется Secret, который заказчик получает в личном кабинете Studio).
  5. Studio передает токен в ответе на запрос.
  6. Утилита авторизуется в LDAP-хранилище и запрашивает список пользователей.
  7. Утилита получает список пользователей из LDAP-хранилища.
  8. Утилита запрашивает список групп из LDAP-хранилища.
  9. Утилита получает список групп из LDAP-хранилища.
  10. Утилита сохраняет структуру групп локально.
  11. Утилита отправляет запрос, чтобы инициировать старт синка.
  12. Платформа проверяет активность проекта.
  13. Утилита получает в ответ на запрос идентификатор запущенного синка.
  14. Утилита отправляет список пользователей на платформу.
  15. Утилита получает ответ от платформы.
  16. Утилита инициирует завершение синка.
  17. Утилита получает ответ от платформы.
  18. Утилита запрашивает статус синка.
  19. Утилита получает статус синка от платформы.

Флаги и параметры запуска

Формат запуска (cmd/bash)

NAME:
sync.exe - ldap to cloud user sync app

USAGE:
sync.exe [global options] command [command options]

DESCRIPTION:
ldap user sync

COMMANDS:
help, h Shows a list of commands or help for one command

GLOBAL OPTIONS:
--ldap value ldap connection strings
--sync-mode value sync mode
--batch-size value (default: 50)
--dry-run (default: false)
--ldap-debug (default: false)
--secret value
--client-id value
--ldap-id value
--log-level value (default: "info")
--log-format value (default: "text")
--cert-path value
--key-path value
--ca-path value
--help, -h show help
--version, -v print only the version (default: false)

Описание параметров запуска

ПараметрОписаниеВалидации
--helpСправка по командам
--ldapСтрока, в которой переданы все атрибуты для подключения к отдельной AD. Описание атрибутов и структуры параметров ldap — ниже. Утилита подключается только к одному источнику--ldap(s) — это url, в котором нужно экранирование спецсимволов
--sync-modeРежим синхронизацииВозможные значения: full, diff
--batch-sizeМаксимальный размер батча
--ldap-debugВключение логирования запросов к AD
--client-idИдентификатор проекта (Studio)Соответствует project_id
--ldap-idИдентификатор ресурса. Задается заказчиком при запуске утилиты. Передается для каждого пользователя в параметре reg_source. Должен быть задан атрибутом в интеграционной записи, если используется IDP
--secretСекрет клиента. Требуется заранее подать заявку в Studio на доступ к странице с secret
--ca-pathПуть к сертификату. При использовании шифрованного протокола необходимо указать протокол ldaps в параметре connectionURLИспользуется отдельно от --cert-path и --key-path
--cert-pathПуть к сертификату при использовании приватного ключа --key-path. При использовании шифрованного протокола необходимо указать протокол ldaps в параметре connectionURLИспользуются только в паре
--key-pathПриватный ключ к сертификату из --cert-path. При использовании шифрованного протокола необходимо указать протокол ldaps в параметре connectionURL
--log-levelНастройка уровня логирования, debug — подробные логи, info — только предупреждения/ошибки. По умолчанию info--log-level=error
--log-level=warning
--log-level=info
--log-level=debug
--log-formatФормат вывода логов - текст или JSON-объект. По умолчанию textlog-format=jsonbr />log-format=text
--versionВыводит версию приложения

Пример запуска приложения

Пример запуска по протоколу LDAP

sync-v1.0.0-6-win-x64.exe --ldap="connectionURL=ldap://10.129.17.10:389&bindDN=adread@jazz.local&usersDN=OU=Employees,DC=jazz,DC=local&groupsDN=OU=EmployeesGroups,DC=jazz,DC=local&protocol=LDAP&bindPassword=sPXavwjq6&uniqueAttribute=objectGUID&importAttributes=middleName:middleName,memberOf:group&groupAttribute=group&filter=((objectClass=user))&groupFilter=((objectClass=group))&searchScope=20&paging=1000&vendor=MSAD&emailAttribute=mail&givenNameAttribute=givenName&surnameAttribute=sn" --sync-mode="full" --secret="1e1ef82c-2be1-4b53-bad6-6ef3f9a8b522" --client-id="019b467a-d093-7c78-892e-2f66c421bfa6" --ldap-id="fd09e5c5-95e8-4162-b7c3-5420e4eb8d7d" --log-level="debug" --log-format="json"

Пример запуска по протоколу LDAPS

sync-v1.0.0-6-win-x64.exe --ldap="connectionURL=ldaps://10.129.17.10:636&bindDN=adread@jazz.local&usersDN=OU=Employees,DC=jazz,DC=local&groupsDN=OU=EmployeesGroups,DC=jazz,DC=local&protocol=LDAP&bindPassword=sPXavwjq6&uniqueAttribute=objectGUID&importAttributes=middleName:middleName,memberOf:group&groupAttribute=group&filter=((objectClass=user))&groupFilter=((objectClass=group))&searchScope=20&paging=1000&vendor=MSAD&emailAttribute=mail&givenNameAttribute=givenName&surnameAttribute=sn" --sync-mode="full" --secret="1e1ef82c-2be1-4b53-bad6-6ef3f9a8b522" --client-id="019b467a-d093-7c78-892e-2f66c421bfa6" --ldap-id="fd09e5c5-95e8-4162-b7c3-5420e4eb8d7d" --log-level="debug" --log-format="json" --cert-path=/path/to/cert.cert --key-path=/path/to/cert.key

Получение данных из службы каталогов

Для подключения к службе каталогов нужны параметры сервера, параметры каталогов и параметры пользователя с доступом на чтение к службе каталогов. Полный перечень в таблице параметров подключения к LDAP ниже.

Обратите внимание, что значения параметров должны быть экранированы с помощью urlencode, прежде чем объединены через &.

ПараметрОписаниеПримерОбязательный
Атрибуты подключения к LDAP
protocolПротокол взаимодействия. Поддерживаются протоколы: LDAPprotocol=LDAPНет
connectionURLАдрес подключения к LDAP-серверу. Есть возможность указать порт. По умолчанию LDAP использует порт 389, а LDAPS — порт 636. В зависимости от выбранного протокола содержит ldap:// или ldaps://connectionURL=ldap://10.212.32.3:389
connectionURL=ldaps://10.212.32.3:636
Да
bindDNУчетная запись администратора.
DN — «уникальное имя» — адрес в каталоге, определяющий учетную запись. Например: cn=ldap-sync,cn=test-user,dc=customer-01,dc=lab,dc=s2b,dc=tech означает, что используется учетная запись юзера ldap-sync из каталога test-user на сервере customer-01.lab.s2b.tech
bindDN=Administrator@customer-01.lab.s2b.techДа
bindPasswordПароль администратораbindPassword={password}Да
vendorТип реализации каталога LDAP,
к которому подключается утилита.
По умолчанию MSAD
vendor=OTHERНет. Возможные значения: MSAD, OTHER
Атрибуты синхронизации пользователей
usersDNПолное DN дерева LDAP, в котором находятся пользователи (дерево, которое является родительским для пользователей LDAP). Например, 'ou=users,dc=example, dc=com', для пользователя 'uid='john',ou=users,dc=example,dc=com&.
Можно передать несколько userDN
usersDN=CN=test-user,DC=customer-01,DC=lab,DC=s2b,DC=techДа
groupDNПолное DN дерева LDAP, в котором находятся группы (дерево, которое является родительским для групп LDAP). Например, 'ou=users,dc=example, dc=com', для пользователя 'uid='john',ou=users,dc=example,dc=com. Можно передать несколько groupDNgroupDN=OU=EmployeesGroups,DC=jazz,DC=localНет
emailAttributteВсегда принимает значение из атрибута, в котором содержится email. Например, из атрибута mailemailAttributeДа
givenNameAttributteАтрибут, который содержит имяgivenNameAttribute=givenNameДа
surnameAttributeАтрибут, который содержит фамилиюsurnameAttribute=cnНет
importAttributesИмпортируемые из службы каталогов в Keycloak параметры, парами через запятую.
Первое значение из пары — параметр AD, второе — соответствующий атрибут Keycloak.
Все пары значений атрибутов LDAP objectClass для пользователей в LDAP, разделенные запятыми
importAttributes=inetOrgPerson:inn, organizationalPerson:ageНет
platformAttributesСлужебные атрибуты, обрабатываются платформой не задаются заказчиком. Сейчас не используютсяКлюч-значение, через запятуюНет
uniqueAttributeУникальный идентификатор длиной 16 байт в формате GUID.
Атрибут, который обеспечивает уникальность пользователя в Active Directory.
Имя атрибута LDAP, который используется в качестве уникального идентификатора объекта (UUID) для объектов в LDAP.
Для Active Directory это должно быть значение "objectGUID". Для поставщиков серверов LDAP это значение "entryUUID"
uniqueAttribute=objectGUIDДа
filterДополнительный фильтр LDAP для фильтрации пользователей. Должно начинаться со скобки "(" и заканчивается скобкой ")"filter=((objectClass=*))Да
searchScopeКоличество уровней каталога, которые нужно обойти для поиска пользователей. 1 — только текущий уровень, 2 — текущий уровень и все его поддеревьяsearchScope=2Да
pagingМаксимальный размер порции данных при запросе из AD. Положительное целое числоpaging=1000Да
groupFilterДополнительный фильтр LDAP для фильтрации групп. Должно начинаться со скобки "(" и заканчивается скобкой ")"groupFilter=((objectClass=group))Да

Отправка данных на сервер платформы

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

Подключение к платформе

  1. Получение авторизационных данных в личном кабинете Studio.
  2. Взаимодействие с платформой, с использованием полученного из Studio токена.

Отправка данных

  1. Данные отправляются порционно. Подробнее — в разделе REST API:
  • Первый запрос инициирует передачу данных.
  • Второй и следующие запросы передают данные.
  • Последним выполняется запрос, завершающий отправку.
  1. Запрос статуса обработки у платформы.
  • Отдает статус обработки и ошибки, если при обработке произошли ошибки.
  • Отдает статус обработки (в процессе/завершена).
  1. При неуспешной отправке, после нескольких повторных попыток. Утилита прекращает синк и сообщает об ошибке.
  2. Завершение работы.

Типы синхронизации

  1. Полная синхронизация: сопоставляются все записи в платформе и AD, лишние удаляются из user service. Из Keycloak учетные записи не удаляются, только деактивируются.
  2. Частичная синхронизация: система получает данные об изменениях пользователя, групп пользователей.
  • Обновляются только пользователи, которые менялись с момента последней частичной синхронизации (в том числе те, у которых менялось членство в группе).
  • Создаются новые пользователи, если они появились с момента последней частичной синхронизации.

То, какой синк произойдет — полный или частичный, задается при запуске приложения. При первом запуске приложения должна быть задана полная синхронизация.

Алгоритм полной синхронизации (утилита)

  1. Утилита запрашивает данные из LDAP-хранилища:
  • Из всех указанных userDN, с учетом фильтров в параметре filter.
  • Из всех указанных groupDN, с учетом фильтров в параметре groupFilter.
  1. Утилита составляет иерархию групп и пользователей-членов этих групп и сохраняет ее локально.
  2. Для каждого пользователя в customAttributes передаются как группы, в которых непосредственно состоит пользовтель, так и их родительские группы.
  3. Время окончания успешной синхронизации добавляется в конфигурационный файл приложения.

Алгоритм частичной синхронизации (утилита)

  1. Утилита проверяет, была ли произведена полная синхронизация. Если полной синхронизации не было, утилита сообщает о необходимости ее запуска.
  2. Утилита запрашивает данные из LDAP-хранилища:
  • Изменения пользователей из всех указанных userDN, с учетом фильтров в параметре filter.
  • Изменения групп из всех указанных groupDN, с учетом фильтров в параметре groupFilter.
  1. Утилита составляет иерархию групп и пользователей-членов этих групп и сохраняет ее локально.
  2. Пользователи, которые менялись с момента последнего синка, частями передаются в платформу. Подробнее — в разделе Отправка данных:
  • Для каждого пользователя в customAttributes передаются как группы, в которых непосредственно состоит пользователь, так и их родительские группы.
  • Если хотя бы один из запросов не выполнен или на него получен неуспешный ответ, обработка завершается.
  • Время окончания успешной синхронизации добавляется в конфигурационный файл приложения.

Фильтр LDAP для частичной синхронизации: пользователи

(&(whenChanged>=20250811144901.0Z)({cmd.input.ldap.filter}))

Утилита собирает данные об изменениях в cлужбе каталогов, используя фильтры LDAP. Название поля, по которому фильтруются данные, зависит от вендора:

  • Для LDAP MS Active Directory используется атрибут whenChanged.
  • Для остальных реализаций LDAP используется атрибут modifyTimeStamp.

Состав фильтра:

  • whenChanged/modifyTimeStamp.
  • Дата изменения, с которой нужно сверять синк (максимальная дата изменения из предыдущего синка).
  • {cmd.input.ldap.filter} - фильтр, передаваемый в утилите при запуске (поле filter строки ldap). Например, (&(objectClass=*)).

При запуске из командной строки фильтр имеет вид (%26(objectClass=group)). Это экранирование, которое требуется в командной строке.

Фильтр LDAP для частичной и полной синхронизации: группы

{cmd.input.ldap.groupFilter}

Утилита собирает данные о всех группах в службе каталогов, используя фильтры LDAP.

Состав фильтра: REST AP {cmd.input.ldap.groupFilter} — фильтр, передаваемый в утилите при запуске (поле groupFilter строки ldap). Например, (objectClass=group).

Завершение работы утилиты

При завершении итерации утилита возвращает код.

Код завершенияОписание кодаОписание кейса
0Успешное завершение работыУспех. Итерация завершена без ошибок и предупреждений
1Завершение работы с ошибкойОшибка проведения синка
2Частично успешное завершение работы (не все записи созданы/обновлены/удалены)Обработана часть записей, детальная информация в логах
4Ошибка подключения к службе каталоговПроверьте сетевую доступность службы каталогов и настройки подключения к ней
5Ошибка при работе с пользователямиЗаписи не обработаны, детальная информация в логах
10Завершение работы: не найдена/истекла лицензияНеобходимо проверить лицензию проекта

Журналирование работы утилиты

Запись логов ведется в файлt logs, который расположен в том же каталоге, что и утилита. Для каждого синка создается отдельный log-файл.

Утилита не очищает логи автоматически.

Настройка логирования. Содержимое файла настраивается параметрами, которые приведены в разделе Описание параметров запуска.

  • Параметр --log-format позволяет выбрать между текстовым и JSON-представлением логов.
  • Параметр --ldap-debug включает логирование запросов между Jazz Sync Tool и cлужбой rаталогов.
  • Параметр --log-level позволяет настроить вывод как подробной, так и сжатой информации о том, как прошла итерация.

Пример логов с заданным уровнем info


2025-07-17T17:01:32+03:00 info application version: v1.0.0-8-mac-x64 run_id:ca82330b-b3af-41c1-8577-d8751a117a06
2025-07-17T17:01:32+03:00 info begin fetch auth token
2025-07-17T17:01:32+03:00 info end fetch auth token successfully
2025-07-17T17:01:32+03:00 info begin full sync
2025-07-17T17:01:32+03:00 info begin fetch LDAP users: connectionURL=**********************************
2025-07-17T17:01:32+03:00 info end fetch LDAP users successfully. 1 users fetched
2025-07-17T17:01:32+03:00 info begin init sync
2025-07-17T17:01:32+03:00 info end init sync successfully
2025-07-17T17:01:32+03:00 info begin upload user chunk #1 size 1
2025-07-17T17:01:32+03:00 info end upload user chunk #1 successfully
2025-07-17T17:01:32+03:00 info begin finish sync
2025-07-17T17:01:32+03:00 info end finish sync successfully
2025-07-17T17:01:32+03:00 info begin waiting sync competition
2025-07-17T17:01:37+03:00 info end waiting sync competition successfully
2025-07-17T17:01:37+03:00 info sync done. users created: 0, updated: 1, deleted: 0. failed entry: <none>, action: <none>

Пример логов с заданным уровнем debug

2025-07-17T17:02:50+03:00	info	begin fetch auth token
2025-07-17T17:02:50+03:00 debug sending http request {"protocol": "http", "from": "cmd", "request_id": "a4c899b5-94f2-47ff-ba0f-3f47f3744983" , "method": "POST", "trace_id": "00000000000000000000000000000000", "endpoint": "https://example.com", "path": "/authsd/api/v2/oauth", "headers": {"Authorization":["Basic YWY1MGQ4YjctNmY****************************************************************wLWY3MjQ1OGI0N2NkMA=="],"Content-Type":["application/x-www-form-urlencoded"],"Rquid":["a4c899b5-94f2-47ff-ba0f-3f47f3744983"],"X-Request-Id":["a4c899b5-94f2-47ff-ba0f-3f47f3744983"],"X-Request-Origin":["cmd"]}}
2025-07-17T17:02:50+03:00 debug successfully sent http request {"protocol": "http", "from": "cmd", "request_id": "a4c899b5-94f2-47ff-ba0f-3f47f3744983" , "method": "POST", "trace_id": "00000000000000000000000000000000", "endpoint": "https://example.com", "path": "/authsd/api/v2/oauth", "response": "{\"access_token\":\"eyJjdHkiOiJqd3QiLCJlbmMiOiJBMjU2Q0JDLUhTNTEyIiwiYWxnIjoiUlNBLU9BRVAtMjU2In0.fqQeylU24_RLQvNpgCbvtXX1FdUP6k22rAIe5_XSHtxGfPjBmL9f3WN34fAxToAqIqElswFby8C_ceaPj2ewp05bzOBo3-xMLXcB7nzu6fvU0K2XHvR-igGw5GnlUhvnDyMxSl9FHzI3mcdqTGgRMRrQl4rewKIQUgIoQJcp_SLhvAAR4a3**********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************NnxuYTCRO5rc3pRRQ6Bi0yq_vc_wWPG3jLBiX-YE7VdUIQn-HJehSb8i5Dh21UP2Lzk7ivTO3ExbT7BGoi3PjAMGwb07jlLivDYoxKa_Yr3Nk_DQVaXirLJKvFokbWj_MErsbgyE6EUMle_bIS3LeDiIJ4C19tXwkf0Ep11sR7fyzB_uQ5EEQtdDGPHaIbTM1xzIt2sd7TzfowlSbIw.O-JuGPTghO8GMhX1vmsiOsTeWywqiwQTspnb20fbwnM\",\"expires_at\":1752764570853}", "response_code": 200, "response_status": "OK", "headers": null}
2025-07-17T17:02:50+03:00 info end fetch auth token successfully
2025-07-17T17:02:50+03:00 info begin full sync
2025-07-17T17:02:50+03:00 info begin fetch LDAP users: connectionURL=****************************************
2025-07-17T17:02:50+03:00 info end fetch LDAP users successfully. 1 users fetched
2025-07-17T17:02:50+03:00 info begin init sync
2025-07-17T17:02:50+03:00 debug sending http request {"protocol": "http", "from": "cmd", "request_id": "d2945b9f-dd2c-40ff-a3f3-68ada1fbda58" , "method": "POST", "trace_id": "00000000000000000000000000000000", "endpoint": "https://example.com", "path": "/sync/init", "headers": {"Authorization":["eyJjdHkiOiJqd3QiLCJlbmMiOiJBMjU2Q0JDLUhTNTEyIiwiYWxnIjoiUlNBLU9BRVAtMjU2In0.fqQeylU24_RLQvNpgCbvtXX1FdUP6k22rAIe5_XSHtxGfPjBmL9f3WN34fAxToAqIqElswFby8C_ceaPj2ewp05bzOBo3-xMLXcB7nzu6fvU0K2XHvR-igGw5GnlUhvnDyMxSl9FHzI3mcdqTGgRMRrQl4rewKIQUgIoQJcp_SLhvAAR4a3**********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************NnxuYTCRO5rc3pRRQ6Bi0yq_vc_wWPG3jLBiX-YE7VdUIQn-HJehSb8i5Dh21UP2Lzk7ivTO3ExbT7BGoi3PjAMGwb07jlLivDYoxKa_Yr3Nk_DQVaXirLJKvFokbWj_MErsbgyE6EUMle_bIS3LeDiIJ4C19tXwkf0Ep11sR7fyzB_uQ5EEQtdDGPHaIbTM1xzIt2sd7TzfowlSbIw.O-JuGPTghO8GMhX1vmsiOsTeWywqiwQTspnb20fbwnM"],"Content-Type":["application/json"],"X-Request-Id":["d2945b9f-dd2c-40ff-a3f3-68ada1fbda58"],"X-Request-Origin":["cmd"]}, "request": "{\"full\":true}"}
2025-07-17T17:02:50+03:00 debug successfully sent http request {"protocol": "http", "from": "cmd", "request_id": "d2945b9f-dd2c-40ff-a3f3-68ada1fbda58" , "method": "POST", "trace_id": "00000000000000000000000000000000", "endpoint": "https://example.com", "path": "/sync/init", "response": "{\"id\":\"20250717140250_a71af0ba-ea77-4cbf-ac2f-f1d7752d532b_full_sync\"}", "response_code": 200, "response_status": "OK", "headers": null}
2025-07-17T17:02:50+03:00 info end init sync successfully
2025-07-17T17:02:50+03:00 info begin upload user chunk #1 size 1
2025-07-17T17:02:50+03:00 debug sending http request {"protocol": "http", "from": "cmd", "request_id": "b2ed673d-dcdc-4053-b971-f092d067fed3" , "method": "POST", "trace_id": "00000000000000000000000000000000", "endpoint": "https://example.com", "path": "/sync/upload", "headers": {"Authorization":["eyJjdHkiOiJqd3QiLCJlbmMiOiJBMjU2Q0JDLUhTNTEyIiwiYWxnIjoiUlNBLU9BRVAtMjU2In0.fqQeylU24_RLQvNpgCbvtXX1FdUP6k22rAIe5_XSHtxGfPjBmL9f3WN34fAxToAqIqElswFby8C_ceaPj2ewp05bzOBo3-xMLXcB7nzu6fvU0K2XHvR-igGw5GnlUhvnDyMxSl9FHzI3mcdqTGgRMRrQl4rewKIQUgIoQJcp_SLhvAAR4a3**********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************NnxuYTCRO5rc3pRRQ6Bi0yq_vc_wWPG3jLBiX-YE7VdUIQn-HJehSb8i5Dh21UP2Lzk7ivTO3ExbT7BGoi3PjAMGwb07jlLivDYoxKa_Yr3Nk_DQVaXirLJKvFokbWj_MErsbgyE6EUMle_bIS3LeDiIJ4C19tXwkf0Ep11sR7fyzB_uQ5EEQtdDGPHaIbTM1xzIt2sd7TzfowlSbIw.O-JuGPTghO8GMhX1vmsiOsTeWywqiwQTspnb20fbwnM"],"Content-Type":["application/json"],"X-Request-Id":["b2ed673d-dcdc-4053-b971-f092d067fed3"],"X-Request-Origin":["cmd"]}, "request": "{\"id\":\"20250717140250_a71af0ba-ea77-4cbf-ac2f-f1d7752d532b_full_sync\",\"users\":[{\"email\":\"e2@e.com\",\"firstName\":\"f\",\"lastName\":\"l\",\"uuid\":\"1335307c-c474-4c8a-8603-a4000f8ef3a5\",\"customAttributes\":{},\"platformAttributes\":{},\"regSource\":\"777\"}]}"}
2025-07-17T17:02:51+03:00 debug successfully sent http request {"protocol": "http", "from": "cmd", "request_id": "b2ed673d-dcdc-4053-b971-f092d067fed3" , "method": "POST", "trace_id": "00000000000000000000000000000000", "endpoint": "https://example.com", "path": "/sync/upload", "response_code": 200, "response_status": "OK", "headers": null}
2025-07-17T17:02:51+03:00 info end upload user chunk #1 successfully
2025-07-17T17:02:51+03:00 info begin finish sync
2025-07-17T17:02:51+03:00 debug sending http request {"protocol": "http", "from": "cmd", "request_id": "9bc15ab2-b869-4a31-8aef-d48f901e8a44" , "method": "POST", "trace_id": "00000000000000000000000000000000", "endpoint": "https://example.com", "path": "/sync/finish", "headers": {"Authorization":["eyJjdHkiOiJqd3QiLCJlbmMiOiJBMjU2Q0JDLUhTNTEyIiwiYWxnIjoiUlNBLU9BRVAtMjU2In0.fqQeylU24_RLQvNpgCbvtXX1FdUP6k22rAIe5_XSHtxGfPjBmL9f3WN34fAxToAqIqElswFby8C_ceaPj2ewp05bzOBo3-xMLXcB7nzu6fvU0K2XHvR-igGw5GnlUhvnDyMxSl9FHzI3mcdqTGgRMRrQl4rewKIQUgIoQJcp_SLhvAAR4a3**********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************NnxuYTCRO5rc3pRRQ6Bi0yq_vc_wWPG3jLBiX-YE7VdUIQn-HJehSb8i5Dh21UP2Lzk7ivTO3ExbT7BGoi3PjAMGwb07jlLivDYoxKa_Yr3Nk_DQVaXirLJKvFokbWj_MErsbgyE6EUMle_bIS3LeDiIJ4C19tXwkf0Ep11sR7fyzB_uQ5EEQtdDGPHaIbTM1xzIt2sd7TzfowlSbIw.O-JuGPTghO8GMhX1vmsiOsTeWywqiwQTspnb20fbwnM"],"Content-Type":["application/json"],"X-Request-Id":["9bc15ab2-b869-4a31-8aef-d48f901e8a44"],"X-Request-Origin":["cmd"]}, "request": "{\"id\":\"20250717140250_a71af0ba-ea77-4cbf-ac2f-f1d7752d532b_full_sync\"}"}
2025-07-17T17:02:51+03:00 debug successfully sent http request {"protocol": "http", "from": "cmd", "request_id": "9bc15ab2-b869-4a31-8aef-d48f901e8a44" , "method": "POST", "trace_id": "00000000000000000000000000000000", "endpoint": "https://example.com", "path": "/sync/finish", "response_code": 200, "response_status": "OK", "headers": null}
2025-07-17T17:02:51+03:00 info end finish sync successfully
2025-07-17T17:02:51+03:00 info begin waiting sync competition
2025-07-17T17:02:51+03:00 debug sending http request {"protocol": "http", "from": "cmd", "request_id": "9a10f7e3-8242-47a9-9feb-c9f313eb8fe4" , "method": "GET", "trace_id": "00000000000000000000000000000000", "endpoint": "https://example.com", "path": "/sync/20250717140250_a71af0ba-ea77-4cbf-ac2f-f1d7752d532b_full_sync/status", "headers": {"Authorization":["eyJjdHkiOiJqd3QiLCJlbmMiOiJBMjU2Q0JDLUhTNTEyIiwiYWxnIjoiUlNBLU9BRVAtMjU2In0.fqQeylU24_RLQvNpgCbvtXX1FdUP6k22rAIe5_XSHtxGfPjBmL9f3WN34fAxToAqIqElswFby8C_ceaPj2ewp05bzOBo3-xMLXcB7nzu6fvU0K2XHvR-igGw5GnlUhvnDyMxSl9FHzI3mcdqTGgRMRrQl4rewKIQUgIoQJcp_SLhvAAR4a3**********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************NnxuYTCRO5rc3pRRQ6Bi0yq_vc_wWPG3jLBiX-YE7VdUIQn-HJehSb8i5Dh21UP2Lzk7ivTO3ExbT7BGoi3PjAMGwb07jlLivDYoxKa_Yr3Nk_DQVaXirLJKvFokbWj_MErsbgyE6EUMle_bIS3LeDiIJ4C19tXwkf0Ep11sR7fyzB_uQ5EEQtdDGPHaIbTM1xzIt2sd7TzfowlSbIw.O-JuGPTghO8GMhX1vmsiOsTeWywqiwQTspnb20fbwnM"],"Content-Type":["application/json"],"X-Request-Id":["9a10f7e3-8242-47a9-9feb-c9f313eb8fe4"],"X-Request-Origin":["cmd"]}}
2025-07-17T17:02:51+03:00 debug successfully sent http request {"protocol": "http", "from": "cmd", "request_id": "9a10f7e3-8242-47a9-9feb-c9f313eb8fe4" , "method": "GET", "trace_id": "00000000000000000000000000000000", "endpoint": "https://example.com", "path": "/sync/20250717140250_a71af0ba-ea77-4cbf-ac2f-f1d7752d532b_full_sync/status", "response": "{\"errors\":\"\",\"done\":false}", "response_code": 200, "response_status": "OK", "headers": null}
2025-07-17T17:02:56+03:00 debug sending http request {"protocol": "http", "from": "cmd", "request_id": "1109c473-183d-4f00-b242-c8b532563bd3" , "method": "GET", "trace_id": "00000000000000000000000000000000", "endpoint": "https://example.com", "path": "/sync/20250717140250_a71af0ba-ea77-4cbf-ac2f-f1d7752d532b_full_sync/status", "headers": {"Authorization":["eyJjdHkiOiJqd3QiLCJlbmMiOiJBMjU2Q0JDLUhTNTEyIiwiYWxnIjoiUlNBLU9BRVAtMjU2In0.fqQeylU24_RLQvNpgCbvtXX1FdUP6k22rAIe5_XSHtxGfPjBmL9f3WN34fAxToAqIqElswFby8C_ceaPj2ewp05bzOBo3-xMLXcB7nzu6fvU0K2XHvR-igGw5GnlUhvnDyMxSl9FHzI3mcdqTGgRMRrQl4rewKIQUgIoQJcp_SLhvAAR4a3**********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************NnxuYTCRO5rc3pRRQ6Bi0yq_vc_wWPG3jLBiX-YE7VdUIQn-HJehSb8i5Dh21UP2Lzk7ivTO3ExbT7BGoi3PjAMGwb07jlLivDYoxKa_Yr3Nk_DQVaXirLJKvFokbWj_MErsbgyE6EUMle_bIS3LeDiIJ4C19tXwkf0Ep11sR7fyzB_uQ5EEQtdDGPHaIbTM1xzIt2sd7TzfowlSbIw.O-JuGPTghO8GMhX1vmsiOsTeWywqiwQTspnb20fbwnM"],"Content-Type":["application/json"],"X-Request-Id":["1109c473-183d-4f00-b242-c8b532563bd3"],"X-Request-Origin":["cmd"]}}
2025-07-17T17:02:56+03:00 debug successfully sent http request {"protocol": "http", "from": "cmd", "request_id": "1109c473-183d-4f00-b242-c8b532563bd3" , "method": "GET", "trace_id": "00000000000000000000000000000000", "endpoint": "https://example.com", "path": "/sync/20250717140250_a71af0ba-ea77-4cbf-ac2f-f1d7752d532b_full_sync/status", "response": "{\"errors\":\"\",\"done\":true,\"stat\":{\"updateCount\":1,\"createCount\":0,\"deleteCount\":0,\"failedEmail\":\"\",\"failedAction\":\"\"}}", "response_code": 200, "response_status": "OK", "headers": null}
2025-07-17T17:02:56+03:00 info end waiting sync competition successfully
2025-07-17T17:02:56+03:00 info sync done. users created: 0, updated: 1, deleted: 0. failed entry: <none>, action: <none>

Сводные данные об итерации в логах

После завершения итерации синхронизации Jazz Sync Tool выводит сводные данные о количестве созданных, измененных и удаленных пользователей.


{"log_level":"info","date":"2026-01-19T17:11:22+03:00","message":"sync completed without warnings. Duration: 50.221617ms","run_id":"9dfe4dab-608f-4a57-9060-e3cd21048b26"}
{"log_level":"info","date":"2026-01-19T17:11:22+03:00","message":"users created: 0","run_id":"9dfe4dab-608f-4a57-9060-e3cd21048b26"}
{"log_level":"info","date":"2026-01-19T17:11:22+03:00","message":"users updated: 0","run_id":"9dfe4dab-608f-4a57-9060-e3cd21048b26"}
{"log_level":"info","date":"2026-01-19T17:11:22+03:00","message":"users deleted: 0","run_id":"9dfe4dab-608f-4a57-9060-e3cd21048b26"}

Данные об ошибке в логах

В случае ошибки, в параметре errors будет указана операция, при выполнении которой произошла ошибка (создание, изменение, удаление), и email пользователей, при обработке которых произошла ошибка.

REST API

REST API использует Jazz Sync Tool для подключения к платформе по умолчанию и приведена для ознакомительных целей.

  1. Авторизация выполняется по токену.
  2. Токен передается в хедере Authorization.
  3. Токен получает администратор приложения Jazz Sync Tool в личном кабинете Studio.

Подробнее — в разделе SaluteJazz Sync Tool REST API.

Заметили ошибку?

Выделите текст и нажмите Ctrl + Enter, чтобы сообщить нам о ней

ПАО Сбербанк использует cookie для персонализации сервисов и удобства пользователей. Вы можете запретить сохранение cookie в настройках своего браузера.