# Notificaciones y endpoints públicos de OpenPlatform

> Envía una notificación a un usuario desde tu aplicación y usa la API con token para la lista de usuarios, la subida de imágenes y el socket de sincronización de varias instancias.

Framework: openplatform
Product: OpenPlatform (openplatform@5)
Language: es
Content-SHA256: 90b170f9add572c18e3b14ae7fc07d1bfd0166313819676965151d48432f5a66
Snapshot: c0700e321579725c5cf4f5ace1ad7d2866d1b4f93c24a63c0b41b6b7998e976c
Sources: 
Review: not-recorded

Además del lanzamiento y la verificación, OpenPlatform tiene algunos endpoints para las aplicaciones y para otros sistemas. Están en `controllers/verify.js`, `controllers/api.js` y `controllers/socket.js`.

## Enviar una notificación

La respuesta de la verificación contiene `notify`, una dirección con la forma `<platform url>/notify/?token=<checksum of user and application>`, cuando el usuario acepta notificaciones. La aplicación le envía un `POST` con la cabecera `x-token` y un cuerpo JSON:

| Campo | Significado |
|---|---|
| `body` | el texto de la notificación |
| `path` | la ruta dentro de la aplicación que abre la notificación |
| `icon`, `color` | opcionales: sustituyen el icono y el color de la aplicación |

El valor de `x-token` es el **token de notificación** que OpenPlatform deriva para ese usuario y aplicación: el MD5 de la dirección de notificación con la sal del `reqtoken` de la aplicación, y el MD5 de ese resultado con la sal de su `restoken` (`FUNC.makenotify` en `definitions/func.js`). Ambos secretos son los mismos que la aplicación comparte para el lanzamiento ([registrar una app](/en/openplatform/register-an-app/)).

OpenPlatform responde `Invalid token` cuando la suma de comprobación o la cabecera no coinciden, y `Not allowed notifications` cuando el usuario o la aplicación no las aceptan. También comprueba las direcciones permitidas de la aplicación y que el usuario esté confirmado, habilitado y activo. Cuando todo es correcto:

1. guarda la notificación (tabla `tbl_notification`) y aumenta el contador de no leídas del usuario;
2. actualiza las sesiones de ese usuario abiertas en el portal, de modo que el contador aparece al instante;
3. publica `Notifications.create` por TMS cuando el ajuste `$tms` está activado;
4. devuelve el identificador de la notificación.

Para los usuarios que están desconectados y tienen notificaciones sin leer, un trabajo de servicio envía **un resumen por correo** ("Unread notifications") cuando la configuración del correo está hecha, como máximo una vez cada tres días por usuario (`definitions/init.js`).

## La API de usuarios (un token)

`GET /users/` devuelve los grupos y los usuarios de la plataforma como JSON. Está **deshabilitada** hasta que se definen los ajustes `allow_token` y `token`. El llamante envía el token como el parámetro de consulta `token` o como la cabecera `x-token`; los intentos erróneos repetidos se bloquean. Los usuarios vienen sin secretos: identificador, referencia, idioma, género, foto (una dirección absoluta), nombre, correo, color, preferencias, banderas (`sa`, `isdisabled`, `isinactive`, `isonline`), fechas y los ids de sus grupos.

## Subir una imagen

`POST /upload/base64/` (hasta 2 MB) acepta un cuerpo JSON con el nombre del archivo y `file` como data URI, y solo **JPEG**. Necesita un usuario con sesión o el token de consulta del ajuste `servicetoken` (consulta [ajustes y base de datos](/en/openplatform/settings-and-database/) para saber de dónde sale esa clave). La imagen se guarda en el almacén de archivos `files` y la respuesta es su dirección, `/files/<id and checksum>.jpg`; la dirección solo funciona con la suma de comprobación.

## Varias instancias: el socket de sincronización

`SOCKET /sync/` conecta instancias de OpenPlatform. Se acepta un cliente cuando el ajuste `sync` está activado y el `token` de la consulta es igual a `sync_token`; cualquier otro cliente se cierra con el código `4001` medio segundo después de abrirse. Los mensajes de un cliente confirmado se retransmiten a los demás, y mientras un cliente confirmado se está reconectando los mensajes se ponen en cola hasta diez segundos.
