# Servicio de notificación por correo electrónico

## Introducción

El Servicio de Notificación por Correo Electrónico de GBDS proporciona una función para auditoría. A través de este servicio, es posible configurar una lista de correos electrónicos que será avisada siempre que se solicite una búsqueda facial 1:N.

Es posible utilizar esta función con cualquier servidor SMTP, configurando el servicio según se describe en la sección [Configurando el Notificador de Correo](#configurando-o-notificador-de-email). Cuando no haya disponible ningún servidor SMTP, el usuario deberá crearlo e instalar las dependencias del servicio.

## Configurando el Notificador de Correo

### Propiedades

El archivo de configuración del Servicio de Notificación por Correo está ubicado en `etc/griaule/conf/email-notifier/config.properties` y contiene los siguientes parámetros:

```properties
# GBS Email Notifier

jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://<mysql/mariadb ip>:<port>/enotifier?useSSL=false
jdbc.username=<username>
jdbc.password=<encrypted password>
jdbc.dialect=org.hibernate.dialect.MySQLDialect
jdbc.showSql=false

locale=en_US

gbds.url=http://<gbds api host>:<port>
gbds.user=<gbds user>
gbds.key=<gbds password>
gbds.logLevel=INFO
gbds.timeout=300 # seconds
```

{% hint style="warning" %}
Los valores de los parámetros entre `<>` deben ser editados de acuerdo con el entorno.
{% endhint %}

### Base de Datos

La tabla `enotifier.settings` de la base de datos contiene la plantilla y el asunto del correo y toda la información para la conexión SMTP:

<table><thead><tr><th width="300">Clave</th><th>Description</th></tr></thead><tbody><tr><td>mail.smtp.auth</td><td>autorización del SMTP: NONE, TLS, SSL</td></tr><tr><td>mail.smtp.from.email</td><td>correo del remitente del SMTP</td></tr><tr><td>mail.smtp.from.name</td><td>nombre del remitente del SMTP</td></tr><tr><td>mail.smtp.host</td><td>host del SMTP</td></tr><tr><td>mail.smtp.password</td><td>contraseña del SMTP para TLS y SSL</td></tr><tr><td>mail.smtp.port</td><td>puerto del SMTP: NONE=25; TLS=587; SSL=465</td></tr><tr><td>mail.identify.request.single.subject</td><td>Asunto del correo; el notificador concatenará el id hash para separación de hilos.</td></tr><tr><td>mail.identify.request.single.template</td><td>Plantilla del cuerpo del correo: Campos:<br><br>&#x3C;username>: nombre del usuario<br>&#x3C;timestamp:date/time pattern>: si no se proporciona ningún patrón, se usará MM/dd/YYYY HH:mm:ss<br>&#x3C;biographics>: itera sobre los biográficos; dentro de la iteración: &#x3C;biographic:key> y &#x3C;biographic:value> proporcionan clave/valor<br><br>las imágenes se enviarán como adjunto.</td></tr><tr><td>mail.identify.result.subject</td><td>Asunto de la notificación por correo del resultado de la búsqueda</td></tr><tr><td>mail.identify.result.template</td><td>Plantilla de la notificación por correo del resultado de la búsqueda</td></tr><tr><td>mail.identify.request.multiple</td><td>Activa/desactiva el envío de varios correos con notificaciones de solicitud de búsqueda de identificación facial</td></tr><tr><td>mail.identify.request.multiple.period</td><td>Período para consolidar notificaciones por correo</td></tr><tr><td>mail.identify.request.multiple.subject</td><td>Asunto para notificaciones múltiples por correo</td></tr><tr><td>mail.identify.request.multiple.template</td><td>Plantilla del cuerpo del correo de múltiples notificaciones. Los correos empaquetan un archivo zip con todas las imágenes listadas.</td></tr></tbody></table>

{% hint style="warning" %}
El archivo zip de la lista de imágenes adjuntas puede contener como máximo 24 MB. Por encima de eso, la lista se divide en más de un correo.
{% endhint %}

Para crear la tabla, ejecute el archivo de volcado (dump) de la base de datos necesario.

{% hint style="info" %}
Si no se ha proporcionado ningún archivo de volcado, contacte con el Equipo de Soporte de Griaule.
{% endhint %}

{% hint style="warning" %}
Cualquier cambio aplicado a esta tabla se reflejará en el próximo correo enviado.
{% endhint %}

## Operación

Los binarios serán colocados en `/var/lib/griaule/email-notifier/gbs-email-notifier-xxx.jar` y `/var/lib/griaule/email-notifier/lib`.

### Iniciando y deteniendo el Notificador de Correo

Para iniciar el Servicio de Notificación por Correo, ejecute:

```sh
/var/lib/griaule/email-notifier/scripts/start-email-notifier.sh
```

Y para detenerlo:

```sh
/var/lib/griaule/email-notifier/scripts/kill-email-notifier.sh
```

### Registros

El notificador de correos usa el archivo de configuración de log4j en `/etc/griaule/conf/email-notifier/email-notifier-log4j.xml`. Todos los registros quedarán en `/var/logs/griaule/email-notifier/`.

El registro de apagado se generará en `/var/log/griaule/email-notifier/email-notifier.log`

### Acciones

El servicio de correo puede contener una lista de intereses a través del GBDS para algunas personas. Algunas acciones pueden realizarse cuando se requiere una búsqueda y estas personas aparecen en los resultados de la búsqueda. Las acciones son:

* Ocultar persona del resultado de la búsqueda;
* Ocultar información de la persona en el resultado de la búsqueda si el usuario autorizado no tiene acceso para verla;
* Notificar por correo el resultado de la búsqueda con la persona.

Para configurar la acción, es necesario acceder a las tablas `gbds.people_transparency` y `gbds.people_transparency_group` para informar si alguna persona debe ser eliminada, ocultada o notificada en cada búsqueda de identificación realizada.

La tabla contiene PGUID, acción y flag para habilitar la transparencia de esa persona. La tabla de grupos retiene grupos de correo para notificación.

Con el PGUI insertado, las acciones deben ser: REMOVE, CLASSIFIED, o NOTIFY:

* Al eliminar (REMOVE), el endpoint get result no devolverá a la persona;
* Al definir como información oculta (CLASSIFIED), el resultado de la búsqueda devolverá a la persona, pero los campos pguid/tguid estarán con el texto *classified*, todos sus emparejamientos (matches) con la puntuación, consulta e índice de referencia como -1. Si el usuario autenticado tiene el permiso `transparency_show_classified_people` todos los datos personales se mostrarán nuevamente.
* En la notificación (NOTIFY), la tabla `gbds.people_transparency_group` contiene grupos de correo indicando cuáles correos deben ser notificados con el resultado de la búsqueda de persona.

{% hint style="info" %}
En la tabla `gbds.people_transparency`, un pguid puede aparecer más de una vez, por lo tanto se pueden realizar más de una acción para este pguid, por ejemplo: eliminar y notificar o clasificar y notificar.
{% endhint %}

## Información Adicional

### Configuraciones de la API y de la Base de Datos

Este servicio está habilitado por algunas configuraciones en `gbdsapi.properties` o en la tabla `gbds.settings` en la base de datos. Estos son:

* gbds.transparency.search.identify.send-email.enabled

  > Habilitar o deshabilitar este servicio
* gbds.transparency.email-notifier.log-level

  > Define el nivel de registro
* gbds.transparency.email-notifier.timeout

  > Define el timeout.
* gbds.transparency.email-notifier.url

  > Define la URL de notificación

Más información sobre estas configuraciones puede verse en el Manual de Configuración de la API GBDS.

### Endpoints del GBDS para el Servicio de Notificación por Correo

GBDS proporciona una API simple para almacenar y recuperar usuarios/correos para enviar. La documentación completa puede verse en la [API GBDS](https://docs.griaule.com/apis/)

* Insertar o actualizar grupos y correos: [POST Email Notify Group](https://gitbook.griaule.com/apis/gbds-4/email#post-notify-group)

  > Esta llamada inserta/actualiza grupos y correos relativos a esos grupos.
* Recuperar Grupo: [Get Email Group](https://gitbook.griaule.com/apis/gbds-4/email#get-notify-group-group)

  > Esta llamada devuelve el grupo y los correos en el grupo.
* Insertar o actualizar el usuario y sus grupos: [POST Email Notify User](https://gitbook.griaule.com/apis/gbds-4/email#post-notify-user)

  > Esta llamada inserta/actualiza un usuario individual y lo asocia a grupos.
* Recuperar usuario: [Get Email User](https://gitbook.griaule.com/apis/gbds-4/email#get-notify-user-user)

  > Esta llamada devuelve el usuario y sus grupos asociados.

### Endpoints de Get List del Notificador

El notificador de correo tiene un endpoint para listar las solicitudes de correo notificadas:

* GET `http://host:port/gbs-email-notifier/notify/list` (el puerto usualmente es 8086)

  > Filtros de consulta:
  >
  > * status: uno o más de: PENDING, PROCESSING, ERROR, DONE
  > * ini-date: fecha inicial en el formato: YYYY-MM-dd-HH-mm-ss
  > * end-date: fecha final en el formato: YYYY-MM-dd-HH-mm-ss
  > * username (usuario)
  > * email
  > * pageIndex, por defecto 0, mínimo 0
  > * pageSize, por defecto 20, mínimo 1, máximo 100

La respuesta de ejemplo es:

```json
{
    "notifications": [
        {
            "tguid": "86A2BA4A-822C-4F1F-9017-46E0144F274C",
            "timestamp": "2021-08-24-10-52-07",
            "status": "DONE",
            "username": "rgiolo",
            "emails": [
                "email_01@griaule.com",
                "email_02@griaule.com"
            ],
            "biographics": {
                "information": "some value",
                "ip-address": "192.168.0.62",
                "face-score-threshold": "30",
                "big-text": "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum ..."
            },
            "message": "Email sent"
        },
        ...
	]
}
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.griaule.com/gbs/es/instalacion-de-gbds/gbdsemailnotifier.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
