Blame
|
1 | --- |
||||||
| 2 | audience: R2 |
|||||||
| 3 | --- |
|||||||
| 4 | ||||||||
| 5 | # API конфигурации |
|||||||
| 6 | ||||||||
|
7 | Приложение SKIF.TAG забирает настройки и отчитывается об их применении двумя запросами. Оба принимают `POST` с телом в JSON или в виде формы, оба требуют IMEI и пароль терминала — отдельных ключей доступа нет. Пароль задаётся в конфигураторе, см. [Настройка терминалов](/%D0%BA%D0%BE%D0%BD%D1%84%D0%B8%D0%B3%D1%83%D1%80%D0%B0%D1%82%D0%BE%D1%80%20skif-tag/%D1%82%D0%B5%D1%80%D0%BC%D0%B8%D0%BD%D0%B0%D0%BB%D1%8B/%D0%BD%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0%20%D1%82%D0%B5%D1%80%D0%BC%D0%B8%D0%BD%D0%B0%D0%BB%D0%BE%D0%B2). |
||||||
|
8 | |||||||
| 9 | ## Свойства запросов |
|||||||
| 10 | ||||||||
| 11 | ### Получение конфигурации |
|||||||
| 12 | ||||||||
| 13 | `POST /api/v1/config/lookup` |
|||||||
| 14 | ||||||||
| 15 | | Параметр | Тип | Описание | |
|||||||
| 16 | |---|---|---| |
|||||||
| 17 | | imei | string | IMEI терминала. Пробелы по краям отбрасываются. Обязательный. | |
|||||||
| 18 | | password | string | Пароль терминала. Обязательный. | |
|||||||
| 19 | | config_hash | string | Контрольная сумма конфигурации, которая уже стоит на устройстве. Необязательный. | |
|||||||
| 20 | | config_version | integer | Отметка времени конфигурации на устройстве. Необязательный, используется, если не передан `config_hash`. | |
|||||||
| 21 | ||||||||
| 22 | Если переданный `config_hash` или `config_version` совпадает с серверным, ответ короткий: |
|||||||
| 23 | ||||||||
| 24 | ```json |
|||||||
| 25 | { "status": "up_to_date", "config_version": 1775548065, "config_hash": "3f9a…" } |
|||||||
| 26 | ``` |
|||||||
| 27 | ||||||||
| 28 | Иначе возвращается полная конфигурация, а терминал переводится в состояние «Конфигурация доставлена на устройство»: |
|||||||
| 29 | ||||||||
| 30 | | Поле ответа | Тип | Описание | |
|||||||
| 31 | |---|---|---| |
|||||||
| 32 | | imei | integer | IMEI терминала. | |
|||||||
| 33 | | password | string | Пароль терминала. | |
|||||||
| 34 | | server | string | Адрес приёмника в виде `хост:порт`. | |
|||||||
| 35 | | config_version | integer | Отметка времени последнего изменения конфигурации. | |
|||||||
| 36 | | min_distance | integer | Минимальное расстояние между точками, метры. | |
|||||||
| 37 | | min_time | integer | Минимальное время между точками, секунды. | |
|||||||
| 38 | | operation_mode | string | Режим работы: `light`, `standard` или `custom`. | |
|||||||
| 39 | | settings_change_available | boolean | Разрешён ли пользователю выбор режима работы. | |
|||||||
| 40 | | tracker_always_enable | boolean | Запрещено ли пользователю отключать отслеживание. | |
|||||||
| 41 | | admin_lock_enabled | boolean | Задан ли PIN блокировки настроек. | |
|||||||
| 42 | | settings_pin | integer, null | Сам PIN, если задан. | |
|||||||
| 43 | | sos_cancel_available | boolean | Можно ли отменить отправку сигнала SOS. | |
|||||||
| 44 | | sos_cancellation_duration | integer | Сколько секунд даётся на отмену. | |
|||||||
| 45 | | sos_send_address | boolean | Отправлять ли адрес вместе с сигналом. | |
|||||||
| 46 | | extra | object | Дополнительные параметры. Пустой объект, если их нет. | |
|||||||
| 47 | | config_hash | string | Контрольная сумма конфигурации без `imei`, `password` и `config_version`. | |
|||||||
| 48 | ||||||||
| 49 | > Поля `sos_*` в панели конфигуратора не задаются — они приходят со значениями по умолчанию. В интерфейсе администратора их нет. |
|||||||
| 50 | ||||||||
| 51 | ### Отчёт о применённой конфигурации |
|||||||
| 52 | ||||||||
| 53 | `POST /api/v1/config/report` |
|||||||
| 54 | ||||||||
| 55 | Приложение присылает конфигурацию, которая фактически стоит на устройстве. Обязательные параметры те же — `imei` и `password`. Остальные поля совпадают по именам с полями ответа `lookup`; всё, что не входит в этот перечень, отбрасывается. |
|||||||
| 56 | ||||||||
| 57 | Ответ: |
|||||||
| 58 | ||||||||
| 59 | ```json |
|||||||
| 60 | { "status": "accepted" } |
|||||||
| 61 | ``` |
|||||||
| 62 | ||||||||
| 63 | Когда присланный `config_hash` (или `config_version`) впервые совпадает с серверным, терминал переходит в состояние «Конфигурация применена на устройстве», и дата фиксируется. Повторные отчёты дату не сдвигают. Если значения расходятся, в карточке терминала это видно в таблице **Параметр / Серверная / На устройстве**. |
|||||||
| 64 | ||||||||
| 65 | ## Ошибки |
|||||||
| 66 | ||||||||
| 67 | | Код | Ответ | Когда | |
|||||||
| 68 | |---|---|---| |
|||||||
| 69 | | 422 | `{"error": "missing_params"}` | Не передан `imei` или `password`. | |
|||||||
| 70 | | 401 | `{"error": "invalid_credentials"}` | Терминал с таким IMEI не найден либо пароль не подошёл. Попытка попадает в журнал аудита. | |
|||||||
| 71 | ||||||||
| 72 | ## Ограничения |
|||||||
| 73 | ||||||||
| 74 | Частота запросов ограничена и считается по двум счётчикам сразу: не более 60 запросов в минуту с одного адреса и не более 10 запросов в минуту на один IMEI. Лимиты общие для `lookup` и `report`. |
|||||||
| 75 | ||||||||
| 76 | Лимит на адрес поднят под ситуацию, когда весь парк телефонов выходит в сеть через один адрес оператора. Защиту от подбора пароля даёт счётчик на IMEI. |
|||||||
| 77 | ||||||||
| 78 | ## Смотрите также |
|||||||
| 79 | ||||||||
|
80 | - [Свойства терминала](/%D0%BA%D0%BE%D0%BD%D1%84%D0%B8%D0%B3%D1%83%D1%80%D0%B0%D1%82%D0%BE%D1%80%20skif-tag/%D1%82%D0%B5%D1%80%D0%BC%D0%B8%D0%BD%D0%B0%D0%BB%D1%8B/%D1%81%D0%B2%D0%BE%D0%B9%D1%81%D1%82%D0%B2%D0%B0%20%D1%82%D0%B5%D1%80%D0%BC%D0%B8%D0%BD%D0%B0%D0%BB%D0%B0) — те же настройки в интерфейсе. |
||||||
| 81 | - [Журнал аудита](/%D0%BA%D0%BE%D0%BD%D1%84%D0%B8%D0%B3%D1%83%D1%80%D0%B0%D1%82%D0%BE%D1%80%20skif-tag/%D0%B6%D1%83%D1%80%D0%BD%D0%B0%D0%BB%20%D0%B0%D1%83%D0%B4%D0%B8%D1%82%D0%B0) — записи о выдаче конфигурации, отчётах и неудачных попытках. |
|||||||