Zmiany zasad

Zmieniaj ustawienia zasady Androida, twórz zasadę jako kopię innej lub przywracaj zasadę do wcześniejszej wersji. Każda zmiana jest weryfikowana przed jej zastosowaniem.

Jak to działa

Każda zmiana wymaga dwóch kroków. Najpierw ją proponujesz: API rejestruje wniosek i zwraca listę zmian z bieżącą i nową wartością każdego ustawienia, wpływem oraz terminem wygaśnięcia wniosku. W zasadzie nic się jeszcze nie zmienia. Następnie stosujesz wniosek na podstawie jego proposalId, po tym jak osoba odpowiedzialna przejrzy listę zmian.

Tylko klucz API, który utworzył wniosek, może go odczytać lub zastosować. W przypadku połączenia OAuth może to zrobić tylko to samo połączenie i ten sam użytkownik. Wniosek wygasa po 10 minutach od jego utworzenia; pole expiresAt podaje dokładny czas.

W ten sposób można zmieniać wyłącznie zasady Androida. Zasad zarządzanych przez Nomid nie można modyfikować w ten sposób. Utworzenie zasady wymaga również, aby firma była połączona z Android Enterprise.

Wymagania

  • Klucz API z uprawnieniem POLICIES_WRITE (Zmiany zasad), połączonym z POLICIES_READ. Tylko użytkownik portalu z uprawnieniem do edycji zasad może utworzyć klucz z uprawnieniem POLICIES_WRITE. Wymagany przez cztery punkty końcowe POST oraz narzędzia MCP do wprowadzania zmian w zasadach.
  • Ustawienie firmowe Zmiany zasad, w sekcji Dostęp agenta AI w portalu, musi być włączone. Domyślnie jest wyłączone. Gdy jest wyłączone, każde wywołanie propozycji i zastosowania zwraca kod 403. Odczytywanie ustawień, wersji i propozycji wymaga tylko uprawnienia POLICIES_READ.
  • Klienci MCP, którzy łączą się za pomocą opcji Zaloguj się przez Nomid zamiast klucza API, wymagają zakresu mcp:policies:write.

Punkty końcowe

Wszystkie ścieżki są względne wobec bazowego adresu URL API i wymagają nagłówka X-API-Key. Ciała żądań są w formacie JSON.

MetodaPunkt końcowyOpis
GET/policies/{policyId}/settingsEdytowalne ustawienia zasady, każde z bieżącą wartością, dozwolonymi wartościami, grupą oraz informacją, czy jego zmiana ma wysoki wpływ. Zwraca również wersję zasady, deviceCount oraz informację, czy zasada jest edytowalna.
GET/policies/{policyId}/revisionsZapisane wersje zasady, od najnowszej, wraz z informacją, kiedy i przez kogo każda z nich została zapisana. Parametr limit jest opcjonalny, od 1 do 100, domyślnie 20.
GET/policy-proposals/{proposalId}Propozycja utworzona przez ten klucz, z listą zmian i statusem: PENDING, EXECUTING, SUCCEEDED, FAILED, UNCONFIRMED lub EXPIRED.
POST/policies/{policyId}/changesZaproponuj zmiany ustawień w istniejącej zasadzie. Zwraca kod 201 wraz z propozycją.
POST/policiesZaproponuj nową zasadę jako kopię istniejącej, z opcjonalnymi zmianami ustawień. Bez zmian powoduje zduplikowanie zasady. Zwraca kod 201 wraz z propozycją.
POST/policies/{policyId}/rollbacksZaproponuj przywrócenie zasady do wcześniejszej wersji. Zwraca kod 201 wraz z propozycją.
POST/policy-proposals/{proposalId}/applyZastosuj oczekującą propozycję. Zwraca kod 200 wraz z propozycją i jej wynikiem: policyId, displayName, version oraz łączem do portalu.

Treści żądań

Zmień ustawienia

PoleWymaganeOpis
changesTakTablica obiektów z polami setting (identyfikator ustawienia) i value (jedna z dozwolonych wartości). Każde ustawienie co najwyżej raz. W wartościach wielkość liter nie ma znaczenia.

Utwórz zasadę

PoleWymaganeOpis
fromPolicyIdTakZasada do skopiowania, według jej identyfikatora zasady (pathName). Kopia przejmuje jej aplikacje, ustawienia i ograniczenia.
displayNameTakNazwa nowej zasady wyświetlana w portalu, maksymalnie 50 znaków.
changesNieZmiany ustawień do zastosowania w kopii, w tym samym formacie co powyżej. Pomiń, aby zduplikować zasadę. Żadne urządzenie nie używa nowej zasady, dopóki nie zostaną do niej przeniesione urządzenia.

Cofnij zasadę

PoleWymaganeOpis
revisionTakNumer wersji do przywrócenia, z punktu końcowego wersji. Opis, tagi i grupa zasady pozostają bez zmian. Jej nazwa powraca do nazwy z tej wersji, jeśli się różnią, co jest widoczne na liście zmian.

Zastosuj propozycję

PoleWymaganeOpis
confirmationDla WYSOKIEGO wpływuWymagane, gdy propozycja ma wartość requiresConfirmation ustawioną na true: nazwa zasady wpisana przez osobę zatwierdzającą zmianę. Dopasowanie ignoruje wielkość liter oraz otaczające spacje.

Propozycja

Każdy punkt końcowy propozycji oraz punkty końcowe pobierania i stosowania zwracają propozycję. Najbardziej przydatne pola:

PoleOpis
proposalIdIdentyfikator służący do odczytania lub zastosowania propozycji.
statusPENDING do momentu zastosowania oraz EXECUTING w trakcie stosowania zmian: żaden z nich nie jest stanem ostatecznym. Następnie SUCCEEDED lub FAILED, UNCONFIRMED, gdy nieoczekiwany błąd pozostawił wynik jako nieznany, lub EXPIRED, gdy upłynął czas expiresAt.
impactNORMAL lub HIGH. Zobacz: Wpływ i potwierdzenie.
requiresConfirmationWartość true w przypadku propozycji o wpływie HIGH: zastosowanie wymaga pola confirmation.
fieldsLista zmian. Każdy wpis zawiera label (nazwę ustawienia), value (nową wartość) oraz previousValue (bieżącą wartość).
summaryJedno zdanie opisujące zmianę, w tym liczbę urządzeń korzystających z polityki.
targetPolityka, którą modyfikuje propozycja: kind, id oraz name.
expiresAtKiedy propozycja wygasa. Po tym czasie nie można jej już zastosować.
resultDotyczy tylko odpowiedzi na żądanie zastosowania: polityka w obecnym stanie, z policyId, displayName, version, komunikatem oraz portalUrl.

Wpływ i potwierdzenie

Propozycja ma wpływ HIGH, gdy polityka obejmuje co najmniej jedno urządzenie i spełniony jest dowolny z poniższych warunków:

  • Jest to wycofanie zmian.
  • Zmienia ustawienie o dużym wpływie: aplikacje z nieznanych źródeł, Google Play Protect, przywracanie ustawień fabrycznych, opcje programisty, przesyłanie danych przez USB lub szyfrowanie pamięci masowej.
  • Polityka obejmuje co najmniej 50 urządzeń, niezależnie od zmiany.

Wszystko inne ma status NORMAL, w tym każda nowa polityka, ponieważ żadne urządzenie jeszcze z niej nie korzysta.

Propozycje są przypisane do wersji polityki

Propozycja rejestruje wersję polityki, na podstawie której utworzono jej listę zmian. Jeśli polityka zostanie ponownie zapisana przed zastosowaniem propozycji – przez kogokolwiek i skądkolwiek – zastosowanie nie powiedzie się z kodem 409 i kodem stale_proposal, a nic nie ulegnie zmianie. Odczytaj politykę ponownie, zgłoś propozycję jeszcze raz i przejrzyj nową listę zmian.

Przykład: zgłoszenie propozycji i zastosowanie

Najpierw odczytaj bieżące ustawienia polityki, aby uzyskać identyfikatory ustawień i dozwolone wartości:

curl "https://api.nomid.tech/emm/api/v1/policies/p7k2m9qa4xz/settings" \
  -H "X-API-Key: $NOMID_API_KEY"
{
  "policyId": "p7k2m9qa4xz",
  "displayName": "Warehouse scanners",
  "version": 12,
  "deviceCount": 18,
  "editable": true,
  "settings": [
    {
      "id": "CAMERA",
      "label": "Camera",
      "group": "RESTRICTIONS",
      "value": "ALLOW",
      "allowedValues": ["ALLOW", "BLOCK"],
      "highImpact": false
    }
  ]
}

Zaproponuj zablokowanie aparatu i przesyłania danych przez USB:

curl -X POST "https://api.nomid.tech/emm/api/v1/policies/p7k2m9qa4xz/changes" \
  -H "X-API-Key: $NOMID_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"changes": [{"setting": "CAMERA", "value": "BLOCK"}, {"setting": "USB_DATA_ACCESS", "value": "BLOCK"}]}'
HTTP/1.1 201 Created

{
  "capability": "update_policy_settings",
  "status": "PENDING",
  "title": "Edit policy settings",
  "summary": "Change 2 settings of policy \"Warehouse scanners\". 18 devices apply it on their next sync. High impact: type the policy's name to confirm.",
  "target": { "kind": "policy", "id": "p7k2m9qa4xz", "name": "Warehouse scanners" },
  "fields": [
    { "label": "Camera", "value": "BLOCK", "previousValue": "ALLOW" },
    { "label": "USB data transfer", "value": "BLOCK", "previousValue": "ALLOW" }
  ],
  "expiresAt": "2026-10-09T14:40:00Z",
  "impact": "HIGH",
  "proposalId": "prp_7GQv2LkR9sTn4WxY8bZcA1dE",
  "requiresConfirmation": true
}

Skrócona odpowiedź. Przesyłanie danych przez USB jest ustawieniem o dużym wpływie, a polityka ma przypisane urządzenia, więc propozycja ma wpływ HIGH i wymaga potwierdzenia. Przed zastosowaniem propozycji pokaż listę zmian osobie odpowiedzialnej.

Gdy osoba ta zatwierdzi zmianę i wpisze nazwę polityki, zastosuj propozycję wraz z wpisaną przez nią wartością:

curl -X POST "https://api.nomid.tech/emm/api/v1/policy-proposals/prp_7GQv2LkR9sTn4WxY8bZcA1dE/apply" \
  -H "X-API-Key: $NOMID_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"confirmation": "Warehouse scanners"}'
HTTP/1.1 200 OK

{
  "capability": "update_policy_settings",
  "status": "SUCCEEDED",
  "impact": "HIGH",
  "proposalId": "prp_7GQv2LkR9sTn4WxY8bZcA1dE",
  "requiresConfirmation": true,
  "result": {
    "policyId": "p7k2m9qa4xz",
    "displayName": "Warehouse scanners",
    "version": 13,
    "message": "Policy settings changed. Devices on the policy apply them on their next sync."
  }
}

Skrócona odpowiedź. Urządzenia objęte polityką zastosują nowe ustawienia podczas kolejnej synchronizacji.

Gdy polityka zmieniła się w międzyczasie

HTTP/1.1 409 Conflict
Content-Type: application/problem+json

{
  "type": "about:blank",
  "title": "Conflict",
  "status": 409,
  "detail": "Policy \"Warehouse scanners\" was changed after this proposal was made. Nothing was applied: read it again and propose again.",
  "instance": "/emm/api/v1/policy-proposals/prp_7GQv2LkR9sTn4WxY8bZcA1dE/apply",
  "code": "stale_proposal",
  "retryable": false
}

Edytowalne ustawienia

Oto identyfikatory ustawień akceptowane w zmianach wraz z ich dozwolonymi wartościami. Etykieta to nazwa zwracana przez API na liście zmian.

Podczas odczytu ustawień wartością może być także NOT_SET (pozostawiona urządzeniu lub domyślna dla Google) lub CUSTOM (wartość ustawiona w portalu, której te wartości nie mogą wyrazić). Żadnej z nich nie można wysłać, ale obie można zastąpić wartością dozwoloną.

UstawienieEtykietaGrupaDozwolone wartościWysoki wpływ
PLAY_STORE_MODE Play Store mode APPS BLACKLIST, WHITELIST Nie
DEFAULT_PERMISSION_POLICY Default runtime permission policy APPS DENY, PROMPT Nie
APP_AUTO_UPDATE_POLICY App auto-update policy APPS ALWAYS, CHOICE_TO_THE_USER, NEVER, WIFI Nie
UNTRUSTED_APPS_POLICY Apps from unknown sources SECURITY ALLOW_INSTALL_IN_PERSONAL_PROFILE_ONLY, DISALLOW_INSTALL Tak
PLAY_PROTECT Google Play Protect app verification SECURITY ENABLED, USER_CHOICE Tak
SCREEN_CAPTURE Screen capture RESTRICTIONS ALLOW, BLOCK Nie
CAMERA Camera RESTRICTIONS ALLOW, BLOCK Nie
FACTORY_RESET Factory reset from Settings RESTRICTIONS ALLOW, BLOCK Tak
UNINSTALL_APPS Uninstalling apps RESTRICTIONS ALLOW, BLOCK Nie
ACCOUNT_MODIFICATION Adding or removing accounts RESTRICTIONS ALLOW, BLOCK Nie
ADD_USER Adding users RESTRICTIONS ALLOW, BLOCK Nie
REMOVE_USER Removing users RESTRICTIONS ALLOW, BLOCK Nie
DEVELOPER_SETTINGS Developer options and USB debugging SECURITY ALLOW, BLOCK Tak
USB_DATA_ACCESS USB data transfer CONNECTIVITY ALLOW, BLOCK Tak
LOCATION_MODE Location LOCATION DISABLED, ENFORCED, USER_CHOICE Nie
LOCATION_SHARING Sharing location LOCATION ALLOW, BLOCK Nie
OUTGOING_CALLS Outgoing calls RESTRICTIONS ALLOW, BLOCK Nie
SMS SMS RESTRICTIONS ALLOW, BLOCK Nie
BLUETOOTH Bluetooth CONNECTIVITY ALLOW, BLOCK Nie
DATA_ROAMING Data roaming CONNECTIVITY ALLOW, BLOCK Nie
NETWORK_RESET Network settings reset CONNECTIVITY ALLOW, BLOCK Nie
VPN_CONFIGURATION Configuring VPNs CONNECTIVITY ALLOW, BLOCK Nie
CONFIGURE_WIFI Configuring Wi-Fi networks CONNECTIVITY ALLOW, BLOCK Nie
WIFI_DIRECT Wi-Fi Direct CONNECTIVITY ALLOW, BLOCK Nie
TETHERING Tethering and hotspot CONNECTIVITY ALLOW, BLOCK Nie
WIFI_STATE Wi-Fi on or off CONNECTIVITY DISABLED, ENABLED, USER_CHOICE Nie
AIRPLANE_MODE Airplane mode CONNECTIVITY DISABLED, USER_CHOICE Nie
MINIMUM_WIFI_SECURITY Minimum Wi-Fi security CONNECTIVITY OPEN_NETWORK, PERSONAL_NETWORK Nie
AUTO_DATE_TIME Automatic date, time and time zone RESTRICTIONS ENFORCED, USER_CHOICE Nie
ENCRYPTION_POLICY Storage encryption SECURITY ENABLED_WITHOUT_PASSWORD, ENABLED_WITH_PASSWORD, UNSPECIFIED Tak
APPLICATION_REPORT_LEVEL Installed apps reporting REPORTING DISABLED, INSTALLED_AND_REMOVED_APPS, INSTALLED_APPS Nie
REPORT_DEVICE_SETTINGS Device settings reporting REPORTING DISABLED, ENABLED Nie
REPORT_DISPLAY_INFO Display information reporting REPORTING DISABLED, ENABLED Nie
REPORT_HARDWARE_STATUS Hardware status reporting REPORTING DISABLED, ENABLED Nie
REPORT_MEMORY_INFO Memory information reporting REPORTING DISABLED, ENABLED Nie
REPORT_NETWORK_INFO Network information reporting REPORTING DISABLED, ENABLED Nie
REPORT_POWER_EVENTS Power events reporting REPORTING DISABLED, ENABLED Nie
REPORT_SOFTWARE_INFO Software information reporting REPORTING DISABLED, ENABLED Nie
REPORT_SYSTEM_PROPERTIES System properties reporting REPORTING DISABLED, ENABLED Nie

Narzędzia MCP

Serwer MCP udostępnia te same operacje jako narzędzia. Przyjmują one te same argumenty co punkty końcowe REST, z policyId i proposalId jako argumentami zamiast segmentów ścieżki.

NarzędzieUprawnienieOpis
get_policy_settingsPOLICIES_READOdczytaj edytowalne ustawienia zasad wraz z ich bieżącymi i dozwolonymi wartościami.
list_policy_revisionsPOLICIES_READWyświetl listę zapisanych wersji zasad, od najnowszej.
get_policy_proposalPOLICIES_READOdczytaj wniosek złożony przy użyciu tego samego klucza lub połączenia wraz z jego statusem.
update_policy_settingsPOLICIES_WRITE + POLICIES_READZaproponuj zmiany ustawień w istniejącej zasadzie.
create_policyPOLICIES_WRITE + POLICIES_READZaproponuj nową zasadę jako kopię istniejącej, z opcjonalnymi zmianami ustawień.
rollback_policyPOLICIES_WRITE + POLICIES_READZaproponuj przywrócenie zasady do wcześniejszej wersji.
apply_policy_proposalPOLICIES_WRITE + POLICIES_READZastosuj oczekujący wniosek na podstawie jego identyfikatora proposalId, z potwierdzeniem, gdy ma on status HIGH impact.

Asystent musi pokazać użytkownikowi listę zmian i uzyskać jego wyraźną zgodę w konwersacji, zanim wywoła apply_policy_proposal. W przypadku wniosku o statusie HIGH impact musi poprosić użytkownika o wpisanie nazwy zasady i przekazać dokładnie to, co wpisał.

Błędy

Po uwierzytelnieniu klucza API błędy używają formatu application/problem+json z dwoma dodatkowymi polami: code, czyli stałym identyfikatorem do rozgałęziania logiki, oraz retryable, który określa, czy to samo żądanie może zostać wysłane ponownie. Brakujący lub nieprawidłowy klucz powoduje zwrócenie wspólnej odpowiedzi 401, czyli małego obiektu JSON z polami error, message i status. Narzędzia MCP zwracają ten sam kod i komunikat jako błąd narzędzia.

StatusKodZnaczenie
400invalid_argumentsTreść jest nieprawidłowa: nieznane ustawienie, niedozwolona wartość, ustawienie wymienione dwukrotnie lub brakujące pole. Szczegóły (detail) wskazują, o co chodzi.
403forbiddenKlucz nie ma uprawnień POLICIES_WRITE lub POLICIES_READ albo ustawienie firmowe Policy changes jest wyłączone.
404not_foundBrak takiej zasady lub wersji widocznej dla tego klucza bądź brak wniosku o tym identyfikatorze złożonego przy użyciu tego klucza.
409unsupportedZasada nie może zostać zmieniona w ten sposób: nie jest zasadą systemu Android lub jest zarządzana przez Nomid.
409not_pendingPropozycja nie ma już statusu PENDING. Odczytaj ją, aby sprawdzić jej status: jeśli to SUCCEEDED, zmiana została wprowadzona. Jeśli to EXECUTING, odczytuj ją ponownie, aż się zakończy. Jeśli to UNCONFIRMED, odczytaj ustawienia polityki przed ponownym zaproponowaniem. Jeśli to FAILED lub EXPIRED, zaproponuj ponownie.
409stale_proposalPolityka została zapisana po utworzeniu propozycji. Nic nie zostało zastosowane. Odczytaj politykę ponownie i zaproponuj ponownie.
422refusedŻądanie nie może zostać zrealizowane: nic by się nie zmieniło, firma nie jest połączona z Android Enterprise lub nowa nazwa polityki nie może zostać użyta.
422confirmation_requiredPropozycja ma wpływ HIGH i brakuje potwierdzenia lub nie jest ono zgodne z nazwą polityki. Nic nie zostało zastosowane, a propozycja pozostaje oczekująca do czasu wygaśnięcia.
429rate_limitedZbyt wiele żądań zapisu dla tego klucza API lub połączenia. Nagłówek Retry-After oraz szczegóły podają liczbę sekund do odczekania. retryable ma wartość true.
500internal_errorNieoczekiwany błąd. Odczytaj propozycję przed ponowieniem próby: jeśli jej status to FAILED, zaproponuj ponownie. Jeśli to UNCONFIRMED, odczytaj ustawienia polityki, aby sprawdzić, czy zmiana została wprowadzona przed ponownym jej zaproponowaniem.

Limity szybkości (Rate limits)

Każde wywołanie propose i apply wlicza się do limitu zapisu wynoszącego 10 żądań na minutę dla każdego klucza API lub połączenia Sign in with Nomid, współdzielonego z punktami końcowymi poleceń urządzeń, kodami QR do aprowizacji i narzędziami zapisu MCP. Wywołania odczytu nie wliczają się do tego limitu.

Wersje i wycofywanie zmian

Każda zastosowana zmiana zapisuje nową wersję polityki. Wyświetl listę wersji, aby zobaczyć, kto i kiedy zmienił politykę, oraz zaproponuj wycofanie, aby cofnąć zmianę.

Wybierz swój czas

Ładowanie...
Otwórz kalendarz rezerwacji