Kody QR do aprowizacji
Utwórz kod QR, który rejestruje nowe lub zresetowane do ustawień fabrycznych urządzenie z systemem Android w Twojej firmie z określoną zasadą.
Jak to działa
Każde żądanie tworzy nowy token rejestracji dla zasady i zwraca kod QR, który go zawiera. Kod przestaje działać po 24 godz. od jego utworzenia; odpowiedź podaje dokładny czas w expiresAt. Utwórz kod, gdy ktoś ma właśnie konfigurować urządzenia, i twórz nowy zamiast używać starszego ponownie.
Aby użyć kodu, dotknij sześć razy ekranu powitalnego kreatora konfiguracji urządzenia, połącz się z Wi-Fi, jeśli pojawi się monit, i zeskanuj go. Urządzenie można zarejestrować w ten sposób tylko wtedy, gdy jest nowe lub zostało zresetowane do ustawień fabrycznych.
Zasady przeznaczone wyłącznie dla VR nie mogą być aprowizowane za pomocą kodu QR: ich urządzenia są aprowizowane za pomocą Nomid Ops przez USB.
Wymagania
- Klucz API z uprawnieniem PROVISIONING, połączonym z POLICIES_READ. Tylko użytkownik portalu, który ma uprawnienia do aprowizacji urządzeń i dostęp do wszystkich zasad, może utworzyć klucz z PROVISIONING.
- Firma musi ukończyć rejestrację w programie Android Enterprise.
- Klienci MCP, którzy łączą się za pomocą Sign in with Nomid zamiast klucza API, wymagają zakresu mcp:provisioning, a ustawienie aprowizacji firmy w sekcji AI agent access w portalu musi być włączone.
Punkt końcowy
Ścieżka jest względna względem bazowego adresu URL API i wymaga nagłówka X-API-Key. Pomyślne żądanie zwraca 201 Created.
| Metoda | Punkt końcowy | Opis |
|---|---|---|
| POST | /policies/{policyId}/provisioning-qr-codes | Utwórz kod QR do aprowizacji dla zasady z nowym tokenem rejestracji |
Treść żądania
Każde pole jest opcjonalne: prześlij pusty obiekt JSON dla kodu bez Wi-Fi i z domyślnym użytkiem osobistym. Nieznane pole zwraca 400.
| Pole | Wartości | Opis |
|---|---|---|
| personalUsage | UNSPECIFIED, ALLOWED, DISALLOWED, USERLESS | Sposób korzystania z urządzenia: ALLOWED w przypadku profilu służbowego na urządzeniu prywatnym, DISALLOWED w przypadku w pełni zarządzanego urządzenia firmowego, USERLESS w przypadku urządzenia dedykowanego bez konta użytkownika. Wartość domyślna w razie pominięcia to UNSPECIFIED. |
| wifiSsid | Sieć Wi-Fi, z którą urządzenie łączy się podczas konfiguracji. Do 32 bajtów w UTF-8. Spacje na początku i końcu są zachowywane jako część nazwy. | |
| wifiPassword | Hasło dla wifiSsid, do 63 bajtów w UTF-8. Hasło WPA musi mieć co najmniej 8 bajtów. Klucz WEP składa się z 5 lub 13 znaków ASCII albo z 10 lub 26 cyfr szesnastkowych. Nigdy nie jest zwracane. | |
| wifiSecurity | NONE, WPA, WEP | Typ zabezpieczeń wifiSsid. Domyślnie WPA, gdy podano hasło, w przeciwnym razie NONE. NONE nie wymaga hasła, natomiast WPA i WEP go wymagają. |
| wifiHidden | Określa, czy wifiSsid jest siecią ukrytą. Domyślnie false. |
Pola wifiPassword, wifiSecurity i wifiHidden wymagają wifiSsid.
Odpowiedź
| Pole | Opis |
|---|---|
| policyId | Nazwa ścieżki zasad, identyfikator policyId, z którym rejestrują się urządzenia. |
| policyName | Nazwa wyświetlana zasad. |
| personalUsage | Tryb użytku osobistego tokenu rejestracji. |
| expiresAt | Kiedy kod QR przestaje rejestrować urządzenia. |
| wifiSsid | Sieć Wi-Fi, z którą urządzenie łączy się podczas konfiguracji. Pomijane, gdy nie podano żadnej. |
| image | Obraz kodu QR: mimeType (image/png) oraz data, czyli bajty obrazu w formacie base64. |
| portalUrl | Link do zasad w portalu Nomid. |
Przykład
Utwórz kod dla w pełni zarządzanego urządzenia, które łączy się z siecią WPA podczas konfiguracji. Narzędzie jq tworzy treść żądania ze zmiennej środowiskowej, dzięki czemu hasło jest prawidłowo poprzedzane znakami ucieczki i nie trafia do historii powłoki.
curl -X POST "https://api.nomid.tech/emm/api/v1/policies/p7k2m9qa4xz/provisioning-qr-codes" \
-H "X-API-Key: $NOMID_API_KEY" \
-H "Content-Type: application/json" \
-d "$(jq -n --arg password "$WIFI_PASSWORD" \
'{personalUsage: "DISALLOWED", wifiSsid: "Warehouse", wifiPassword: $password}')" HTTP/1.1 201 Created
{
"policyId": "p7k2m9qa4xz",
"policyName": "Warehouse scanners",
"personalUsage": "DISALLOWED",
"expiresAt": "2026-10-11T14:30:00Z",
"wifiSsid": "Warehouse",
"image": {
"mimeType": "image/png",
"data": "iVBORw0KGgoAAAANSUhEUgAA..."
},
"portalUrl": "https://portal.nomid.tech/#/acme/acme/policy/p7k2m9qa4xz"
} Zdekoduj data z base64, aby uzyskać plik PNG. Dane obrazu zostały tutaj skrócone.
Błąd: zasady tylko dla VR
HTTP/1.1 409 Conflict
Content-Type: application/problem+json
{
"type": "about:blank",
"title": "Conflict",
"status": 409,
"detail": "Policy q4vr8headset is a VR-only policy: its devices are provisioned with Nomid Ops over USB, not with a QR code.",
"instance": "/emm/api/v1/policies/q4vr8headset/provisioning-qr-codes",
"code": "unsupported",
"retryable": false
} Błędy
Po uwierzytelnieniu klucza API błędy używają typu application/problem+json z dwoma dodatkowymi polami: code, stabilnym identyfikatorem do obsługi warunkowej, oraz retryable, które informuje, czy to samo żądanie może zostać wysłane ponownie. Treść, której nie można odczytać, jest wyjątkiem opisanym w wierszu 400. Brakujący lub nieprawidłowy klucz otrzymuje wspólną odpowiedź 401 — mały obiekt JSON z polami error, message i status. Narzędzie MCP zwraca ten sam kod i komunikat jako błąd narzędzia.
| Status | Kod | Znaczenie |
|---|---|---|
| 400 | invalid_arguments | Opcja jest nieprawidłowa: nieznana wartość personalUsage lub wifiSecurity, pole Wi-Fi bez wifiSsid albo nazwa sieci Wi-Fi, hasło bądź zabezpieczenia, które nie są zgodne z powyższymi regułami. Pole detail wskazuje, które z nich. Treść, która nie jest poprawnym formatem JSON lub zawiera nieznane pole, również zwraca kod 400 w postaci problem details bez pól code i retryable. |
| 401 | - | Klucz API jest brakujący, nieprawidłowy, wygasł lub został unieważniony. |
| 403 | forbidden | Klucz nie posiada uprawnienia PROVISIONING ani POLICIES_READ. |
| 404 | not_found | Brak polityki o tym policyId w firmie powiązanej z kluczem. |
| 409 | unsupported | Polityka nie może aprowizować urządzeń za pomocą kodu QR: jest to polityka wyłącznie dla VR lub firma nie ukończyła rejestracji w Android Enterprise. |
| 422 | refused | Polityka została usunięta. |
| 429 | rate_limited | Zbyt wiele żądań zapisu dla tego klucza. Nagłówek Retry-After oraz szczegóły podają liczbę sekund do odczekania. retryable ma wartość true. |
| 502 | provider_error | Google nie utworzyło tokenu rejestracji. Kod QR nie został utworzony. retryable ma wartość true: spróbuj ponownie za chwilę. |
Limity żądań
Każde żądanie wlicza się do limitu zapisu wynoszącego 10 żądań na minutę na klucz, dzielonego z punktami końcowymi poleceń urządzeń i zmian polityk oraz narzędziami zapisu MCP. Połączenie Sign in with Nomid wywołujące create_provisioning_qr_code zużywa ten sam limit, liczony na połączenie. Żądania, które nie przejdą weryfikacji uprawnień lub walidacji argumentów, nie są wliczane.
Narzędzie MCP
Narzędzie MCP create_provisioning_qr_code przyjmuje te same opcje, z policyId jako argumentem. Zwraca kod QR jako blok obrazu MCP, dzięki czemu asystent może wyświetlić go użytkownikowi bez konieczności jego odczytywania.