# Powiadomienia i publiczne endpointy OpenPlatform

> Wyślij powiadomienie do użytkownika z własnej aplikacji i użyj API z tokenem do listy użytkowników, wysyłania obrazów i gniazda synchronizacji wielu instancji.

Framework: openplatform
Product: OpenPlatform (openplatform@5)
Language: pl
Content-SHA256: edfa6c31c38b96d0fb69bf8359a80e4a1ec0d034c23835703bed901879e1cfc2
Snapshot: c0700e321579725c5cf4f5ace1ad7d2866d1b4f93c24a63c0b41b6b7998e976c
Sources: 
Review: not-recorded

Poza uruchomieniem i weryfikacją OpenPlatform ma kilka endpointów dla aplikacji i innych systemów. Znajdują się w `controllers/verify.js`, `controllers/api.js` i `controllers/socket.js`.

## Wysyłanie powiadomienia

Odpowiedź weryfikacji zawiera `notify`, adres w postaci `<platform url>/notify/?token=<checksum of user and application>`, gdy użytkownik akceptuje powiadomienia. Aplikacja wysyła na niego `POST` z nagłówkiem `x-token` i treścią JSON:

| Pole | Znaczenie |
|---|---|
| `body` | tekst powiadomienia |
| `path` | ścieżka wewnątrz aplikacji, którą otwiera powiadomienie |
| `icon`, `color` | opcjonalne: zastępują ikonę i kolor aplikacji |

Wartością `x-token` jest **token powiadomienia**, który OpenPlatform wyprowadza dla danego użytkownika i aplikacji: MD5 adresu powiadomienia z solą `reqtoken` aplikacji oraz MD5 tego wyniku z solą jej `restoken` (`FUNC.makenotify` w `definitions/func.js`). Oba sekrety są tymi samymi, które aplikacja dzieli na potrzeby uruchomienia ([rejestracja aplikacji](/en/openplatform/register-an-app/)).

OpenPlatform odpowiada `Invalid token`, gdy suma kontrolna lub nagłówek się nie zgadzają, oraz `Not allowed notifications`, gdy użytkownik lub aplikacja ich nie akceptuje. Sprawdza też dozwolone adresy aplikacji oraz to, że użytkownik jest potwierdzony, włączony i aktywny. Gdy wszystko jest w porządku:

1. zapisuje powiadomienie (tabela `tbl_notification`) i zwiększa licznik nieprzeczytanych użytkownika;
2. aktualizuje sesje tego użytkownika otwarte w portalu, aby licznik pojawił się od razu;
3. publikuje `Notifications.create` przez TMS, gdy ustawienie `$tms` jest włączone;
4. zwraca identyfikator powiadomienia.

Dla użytkowników, którzy są offline i mają nieprzeczytane powiadomienia, zadanie serwisowe wysyła **podsumowanie e-mailem** ("Unread notifications"), gdy skonfigurowana jest poczta, najwyżej raz na trzy dni na użytkownika (`definitions/init.js`).

## API użytkowników (token)

`GET /users/` zwraca grupy i użytkowników platformy jako JSON. Jest **wyłączone**, dopóki nie ustawisz `allow_token` i `token`. Wywołujący wysyła token jako parametr zapytania `token` lub nagłówek `x-token`; powtarzane błędne próby są blokowane. Użytkownicy przychodzą bez sekretów: identyfikator, odniesienie, język, płeć, zdjęcie (adres bezwzględny), imię i nazwisko, e-mail, kolor, preferencje, flagi (`sa`, `isdisabled`, `isinactive`, `isonline`), daty i identyfikatory ich grup.

## Wysyłanie obrazu

`POST /upload/base64/` (do 2 MB) przyjmuje treść JSON z nazwą pliku i `file` jako data URI oraz tylko **JPEG**. Wymaga zalogowanego użytkownika lub tokenu zapytania z ustawienia `servicetoken` (skąd pochodzi ten klucz, zobacz [ustawienia i baza danych](/en/openplatform/settings-and-database/)). Obraz jest zapisywany w magazynie plików `files`, a odpowiedzią jest jego adres, `/files/<id and checksum>.jpg`; adres działa tylko z sumą kontrolną.

## Wiele instancji: gniazdo synchronizacji

`SOCKET /sync/` łączy instancje OpenPlatform. Klient jest akceptowany, gdy ustawienie `sync` jest włączone, a `token` w zapytaniu jest równy `sync_token`; każdy inny klient jest zamykany z kodem `4001` pół sekundy po otwarciu. Wiadomości potwierdzonego klienta są przekazywane pozostałym, a gdy potwierdzony klient łączy się ponownie, wiadomości są kolejkowane do dziesięciu sekund.
