# Benachrichtigungen und die öffentlichen Endpunkte von OpenPlatform

> Senden Sie aus Ihrer Anwendung eine Benachrichtigung an einen Benutzer und nutzen Sie die Token-API für die Benutzerliste, den Bild-Upload und den Sync-Socket mehrerer Instanzen.

Framework: openplatform
Product: OpenPlatform (openplatform@5)
Language: de
Content-SHA256: 4667b542e8db8f6f5c7b8357c8cdad3c8a75098d8613cbe977cc2a0704a652ba
Snapshot: c0700e321579725c5cf4f5ace1ad7d2866d1b4f93c24a63c0b41b6b7998e976c
Sources: 
Review: not-recorded

Neben dem Start und der Verifizierung hat OpenPlatform einige Endpunkte für die Anwendungen und für andere Systeme. Sie stehen in `controllers/verify.js`, `controllers/api.js` und `controllers/socket.js`.

## Eine Benachrichtigung senden

Die Antwort der Verifizierung enthält `notify`, eine Adresse der Form `<platform url>/notify/?token=<checksum of user and application>`, wenn der Benutzer Benachrichtigungen akzeptiert. Die Anwendung sendet ein `POST` dorthin mit dem Header `x-token` und einem JSON-Body:

| Feld | Bedeutung |
|---|---|
| `body` | der Text der Benachrichtigung |
| `path` | der Pfad innerhalb der Anwendung, den die Benachrichtigung öffnet |
| `icon`, `color` | optional: ersetzen Icon und Farbe der Anwendung |

Der Wert von `x-token` ist das **Benachrichtigungs-Token**, das OpenPlatform für diesen Benutzer und diese Anwendung ableitet: der MD5 der Benachrichtigungsadresse mit dem `reqtoken` der Anwendung als Salt und der MD5 dieses Ergebnisses mit ihrem `restoken` als Salt (`FUNC.makenotify` in `definitions/func.js`). Beide Geheimnisse sind dieselben, die die Anwendung für den Start teilt ([Eine App registrieren](/en/openplatform/register-an-app/)).

OpenPlatform antwortet `Invalid token`, wenn Prüfsumme oder Header nicht passen, und `Not allowed notifications`, wenn der Benutzer oder die Anwendung sie nicht akzeptiert. Es prüft außerdem die erlaubten Adressen der Anwendung und dass der Benutzer bestätigt, aktiviert und aktiv ist. Wenn alles stimmt:

1. speichert es die Benachrichtigung (Tabelle `tbl_notification`) und erhöht den Zähler ungelesener Nachrichten des Benutzers;
2. aktualisiert es die im Portal geöffneten Sitzungen dieses Benutzers, damit der Zähler sofort erscheint;
3. veröffentlicht es `Notifications.create` per TMS, wenn die Einstellung `$tms` aktiv ist;
4. gibt es die Kennung der Benachrichtigung zurück.

Für Benutzer, die offline sind und ungelesene Benachrichtigungen haben, sendet ein Dienstjob **eine E-Mail-Zusammenfassung** ("Unread notifications"), wenn die Mail-Einstellungen konfiguriert sind, höchstens einmal alle drei Tage pro Benutzer (`definitions/init.js`).

## Die Benutzer-API (ein Token)

`GET /users/` liefert die Gruppen und Benutzer der Plattform als JSON. Sie ist **deaktiviert**, bis die Einstellungen `allow_token` und `token` gesetzt sind. Der Aufrufer sendet das Token als Query-Parameter `token` oder als Header `x-token`; wiederholte falsche Versuche werden gesperrt. Die Benutzer kommen ohne Geheimnisse: Kennung, Referenz, Sprache, Geschlecht, Foto (eine absolute Adresse), Name, E-Mail, Farbe, Einstellungen, Flags (`sa`, `isdisabled`, `isinactive`, `isonline`), Daten und die Ids ihrer Gruppen.

## Ein Bild hochladen

`POST /upload/base64/` (bis 2 MB) akzeptiert einen JSON-Body mit dem Dateinamen und `file` als Data-URI, und nur **JPEG**. Es braucht einen angemeldeten Benutzer oder das Query-Token der Einstellung `servicetoken` (siehe [Einstellungen und Datenbank](/en/openplatform/settings-and-database/), woher dieser Schlüssel kommt). Das Bild wird im Dateispeicher `files` abgelegt, und die Antwort ist seine Adresse, `/files/<id and checksum>.jpg`; die Adresse funktioniert nur mit der Prüfsumme.

## Mehrere Instanzen: der Sync-Socket

`SOCKET /sync/` verbindet Instanzen von OpenPlatform. Ein Client wird akzeptiert, wenn die Einstellung `sync` aktiv ist und das Query-`token` gleich `sync_token` ist; jeder andere Client wird eine halbe Sekunde nach dem Öffnen mit dem Code `4001` geschlossen. Die Nachrichten eines bestätigten Clients werden an die anderen weitergereicht, und während sich ein bestätigter Client neu verbindet, werden die Nachrichten bis zu zehn Sekunden lang in eine Warteschlange gestellt.
