# Известия и публичните крайни точки на OpenPlatform

> Изпратете известие до потребител от вашето приложение и използвайте API с токен за списъка с потребители, качването на изображения и синхронизиращия сокет на няколко инстанции.

Framework: openplatform
Product: OpenPlatform (openplatform@5)
Language: bg
Content-SHA256: 9bdc3936acb45b7d06907c4eebd390132e444028cc408aba4933a53886f80e02
Snapshot: c0700e321579725c5cf4f5ace1ad7d2866d1b4f93c24a63c0b41b6b7998e976c
Sources: 
Review: not-recorded

Освен стартирането и проверката, OpenPlatform има няколко крайни точки за приложенията и за други системи. Те са в `controllers/verify.js`, `controllers/api.js` и `controllers/socket.js`.

## Изпращане на известие

Отговорът на проверката съдържа `notify`, адрес във вида `<platform url>/notify/?token=<checksum of user and application>`, когато потребителят приема известия. Приложението изпраща към него `POST` със заглавка `x-token` и JSON тяло:

| Поле | Значение |
|---|---|
| `body` | текстът на известието |
| `path` | пътят в приложението, който известието отваря |
| `icon`, `color` | по избор: заменят иконата и цвета на приложението |

Стойността на `x-token` е **токенът за известия**, който OpenPlatform извежда за този потребител и приложение: MD5 на адреса за известия със сол `reqtoken` на приложението и MD5 на този резултат със сол неговия `restoken` (`FUNC.makenotify` в `definitions/func.js`). И двете тайни са същите, които приложението споделя за стартирането ([регистриране на приложение](/en/openplatform/register-an-app/)).

OpenPlatform отговаря `Invalid token`, когато контролната сума или заглавката не съвпадат, и `Not allowed notifications`, когато потребителят или приложението не ги приема. Проверява също разрешените адреси на приложението и че потребителят е потвърден, разрешен и активен. Когато всичко е наред:

1. съхранява известието (таблица `tbl_notification`) и увеличава брояча на непрочетените на потребителя;
2. обновява сесиите на този потребител, отворени в портала, така че броячът се появява веднага;
3. публикува `Notifications.create` чрез TMS, когато настройката `$tms` е включена;
4. връща идентификатора на известието.

За потребители, които са офлайн и имат непрочетени известия, служебна задача изпраща **обобщение по имейл** ("Unread notifications"), когато настройките за поща са конфигурирани, най-много веднъж на три дни за потребител (`definitions/init.js`).

## API за потребители (токен)

`GET /users/` връща групите и потребителите на платформата като JSON. То е **изключено**, докато не бъдат зададени настройките `allow_token` и `token`. Извикващият изпраща токена като параметър на заявката `token` или като заглавка `x-token`; повторените грешни опити се блокират. Потребителите идват без тайни: идентификатор, препратка, език, пол, снимка (абсолютен адрес), име, имейл, цвят, предпочитания, флагове (`sa`, `isdisabled`, `isinactive`, `isonline`), дати и идентификаторите на техните групи.

## Качване на изображение

`POST /upload/base64/` (до 2 MB) приема JSON тяло с името на файла и `file` като data URI, и само **JPEG**. Изисква влязъл потребител или токена на заявката от настройката `servicetoken` (вижте [настройки и база данни](/en/openplatform/settings-and-database/) откъде идва този ключ). Изображението се съхранява във файловото хранилище `files`, а отговорът е неговият адрес, `/files/<id and checksum>.jpg`; адресът работи само с контролната сума.

## Няколко инстанции: синхронизиращият сокет

`SOCKET /sync/` свързва инстанции на OpenPlatform. Клиент се приема, когато настройката `sync` е включена и `token` в заявката е равен на `sync_token`; всеки друг клиент се затваря с код `4001` половин секунда след отварянето. Съобщенията на потвърден клиент се препращат на останалите, а докато потвърден клиент се свързва отново, съобщенията се нареждат на опашка до десет секунди.
