# Manual de Usuario y Guía de Integración - Notifier v2.0

Este documento detalla el uso del panel de control web y la documentación técnica para integrar sistemas externos con la API de notificaciones.

---

## 1. Panel de Control (Frontend)

El panel de control permite gestionar centralizadamente los procesos, sus canales de notificación, grupos de destinatarios y tareas programadas.

### Acceso
Ingrese a través de su navegador web a: `https://test.prontoip.com/Notifier/`

### Funcionalidades

#### **Crear un Nuevo Proceso**
1. Haga clic en el botón **"+ Nuevo Proceso"** en la esquina superior derecha.
2. Ingrese un **ID de Proceso** único (ej: `alerta-servidor-caido`, `reporte-ventas`).
   * *Nota: Este ID es el que usarán sus sistemas externos para enviar alertas.*
3. Haga clic en **Crear**.

#### **Configurar Proveedores (Canales)**
Para cada proceso, puede definir múltiples destinos (Proveedores):
1. Ubique la tarjeta del proceso y haga clic en **"Edit / Config"**.
2. En la sección "Add Provider / Configurar Proveedor":
   * Seleccione el tipo: `WhatsApp`, `Teams`, `Power Automate` o `Email (SMTP)`.
   * **WhatsApp**: Puede ingresar la URL de la instancia y, opcionalmente, seleccionar **Grupos** de destinatarios que haya configurado previamente.
   * **Teams**: Ingrese la URL del Webhook entrante.
   * **Power Automate**: Ingrese el nombre del Log o identificador.
   * **Email (SMTP)**: Ingrese los destinatarios ("Para") y el asunto. *Nota: La conexión SMTP se gestiona internamente.*
3. Haga clic en **Add**.
4. **Importante:** Haga clic en **Save Changes** para persistir la configuración.

#### **Probar Notificaciones**
Dentro de la ventana de edición:
1. Busque el proveedor que desea probar en la lista.
2. Escriba un mensaje en el campo "Test Message Content".
3. Haga clic en el botón **Test** al lado del proveedor.
4. Verifique si el mensaje llegó al destino y observe el resultado en pantalla (éxito o error).

#### **Gestión de Grupos (WhatsApp)**
En la sección inferior "Admin Grupos WhatsApp", puede predefinir grupos para facilitar la configuración de envíos masivos:
1. Ingrese un **Nombre** amigable para identificar al grupo (ej: `Soporte-Guardia`).
2. Ingrese el **JID** del grupo de WhatsApp (normalmente termina en `@g.us`).
3. Haga clic en **Add Group**.
*Estos grupos estarán disponibles para ser seleccionados al configurar un proveedor de WhatsApp en cualquier proceso.*

#### **Programador de Alertas (Scheduler)**
En la sección "Programador de Alertas", puede agendar mensajes para ser enviados automáticamente en el futuro:
1. Seleccione el **Proceso** bajo el cual se enviará la alerta.
2. Escriba el **Mensaje** a enviar.
3. Elija la **Fecha y Hora** exacta del envío.
4. Haga clic en **Programar**.
*El sistema procesará la cola automáticamente y enviará la notificación cuando llegue la hora indicada.*

---

## 2. Guía de Integración (API para Desarrolladores)

Para enviar notificaciones desde sus scripts, servidores o aplicaciones, debe realizar una petición HTTP POST a los endpoints del sistema.

### Endpoint Principal (Envío Inmediato)
**URL:** `https://test.prontoip.com/Notifier/api/notifier`
**Método:** `POST`
**Headers:** `Content-Type: application/json`

#### Estructura del Cuerpo (JSON)

| Campo | Tipo | Obligatorio | Descripción |
| :--- | :--- | :--- | :--- |
| `idproceso` | String | **Sí** | El ID único del proceso configurado en el panel. |
| `msg` | String | **Sí** | El contenido del mensaje a enviar. |
| `mediatype` | String | No | Filtra el envío a un solo tipo (`wsp`, `teams`, `powerautomate`, `smtp`). Si se omite, envía a **todos**. |
| `number` | String | No | *(Solo WhatsApp)* Permite sobrescribir el número destinatario para este envío específico, ignorando el configurado en el panel. |

#### Ejemplos de Uso

**Ejemplo 1: Enviar a TODOS los canales configurados**
```bash
curl -X POST https://test.prontoip.com/Notifier/api/notifier \
  -H "Content-Type: application/json" \
  -d '{
    "idproceso": "alerta-servidor",
    "msg": "⚠️ El servidor principal no responde al ping."
  }'
```

**Ejemplo 2: Enviar solo a Microsoft Teams**
```bash
curl -X POST https://test.prontoip.com/Notifier/api/notifier \
  -H "Content-Type: application/json" \
  -d '{
    "idproceso": "reporte-diario",
    "msg": "Reporte generado.",
    "mediatype": "teams"
  }'
```

---

**Ejemplo 3: Enviar correo electrónico (SMTP)**
```bash
curl -X POST https://test.prontoip.com/Notifier/api/notifier \
  -H "Content-Type: application/json" \
  -d '{
    "idproceso": "alerta-financiera",
    "msg": "El balance mensual ha sido generado.",
    "mediatype": "smtp"
  }'
```

---

### Endpoint de Programación (Scheduler)
Permite agendar una notificación para el futuro.

**URL:** `https://test.prontoip.com/Notifier/api/scheduler`
**Método:** `POST`
**Headers:** `Content-Type: application/json`

#### Estructura del Cuerpo (JSON)

| Campo | Tipo | Obligatorio | Descripción |
| :--- | :--- | :--- | :--- |
| `idproceso` | String | **Sí** | El ID del proceso. |
| `msg` | String | **Sí** | Mensaje a programar. |
| `scheduledAt` | String | **Sí** | Fecha y hora en formato ISO o compatible (ej: `2023-10-25T14:30:00`). |

#### Ejemplo
```bash
curl -X POST https://test.prontoip.com/Notifier/api/scheduler \
  -H "Content-Type: application/json" \
  -d '{
    "idproceso": "recordatorio-evento",
    "msg": "La reunión comienza en 15 minutos.",
    "scheduledAt": "2023-10-25T14:45:00.000Z"
  }'
```

---

### Endpoint de Gestión de Grupos
Para automatizar la creación de grupos desde sistemas externos.

**URL:** `https://test.prontoip.com/Notifier/api/groups`

*   `GET` - Lista todos los grupos configurados.
*   `POST` - Crea un nuevo grupo. Body: `{ "name": "NombreGrupo", "jid": "123... @g.us" }`
*   `DELETE /:name` - Elimina un grupo por su nombre.

---

## 3. Códigos de Respuesta

*   **200 OK**: La solicitud fue procesada correctamente.
*   **404 Not Found**: El `idproceso` no existe o el recurso solicitado no se encuentra.
*   **500 Internal Server Error**: Error interno del servidor.
