# Comunicaciones servidor-móvil

## Pushover

[**Pushover** ](https://pushover.net/)es una aplicación de notificaciones en tiempo real que permite recibir alertas en dispositivos móviles y de escritorio. Está diseñada para integrarse con sistemas, servidores y aplicaciones mediante una API sencilla, permitiendo enviar notificaciones push desde scripts, herramientas de monitorización (como Nagios o Zabbix) y otras plataformas automatizadas.

#### **Características principales:**

* Compatible con **iOS, Android y navegadores web**.
* **API fácil de usar** para integraciones con sistemas de monitoreo y automatización.
* **Soporte para prioridades y reintentos**, asegurando que las alertas críticas sean atendidas.
* **Grupos y dispositivos múltiples**, permitiendo recibir notificaciones en varios lugares simultáneamente.

{% hint style="warning" %}
Pushover nos da 30 dias de prueba para probar su funcionamiento por lo que más allá tendrás que pagar.&#x20;
{% endhint %}

Vamos a ver como configurar una notificación al móvil paso por paso:

1. Primero, regístrate en la web para que te de el token de usuario (`user key`):

<figure><img src="https://539580950-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FiKvwltOme7zTxep3LVyW%2Fuploads%2FcE4BPObFYHNKRchn0Z3S%2Fimage.png?alt=media&#x26;token=e03dedb7-83ad-45ee-bc0a-1ff7bf364b28" alt=""><figcaption></figcaption></figure>

2. Crea un token de aplicación:

<figure><img src="https://539580950-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FiKvwltOme7zTxep3LVyW%2Fuploads%2FONrdmcXxJ9xM7VwDeaou%2Fimage.png?alt=media&#x26;token=ff0e646e-ff36-42f0-a00f-4ba659a2d5b9" alt="" width="563"><figcaption><p>Clica esta opción para ir al formulario de creación</p></figcaption></figure>

<figure><img src="https://539580950-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FiKvwltOme7zTxep3LVyW%2Fuploads%2FvxPkd3hLMKzd7N17p3m1%2Fimage.png?alt=media&#x26;token=498ea572-1e82-4b3c-bcec-4ddcd846e72f" alt=""><figcaption><p>Una vez aquí, rellena el formulario con los datos que consideres.</p></figcaption></figure>

Al completar el proceso, arriba del todo del dashboard, tendrás el token de la app.

3. Descarga la aplicación de pushover en tu móvil y haz login configurando un nombre para el dispositivo: <https://pushover.net/clients>

4. Con ambos token crea un script:&#x20;

<pre class="language-bash"><code class="lang-bash"><strong>sudo nano pushover_app.sh
</strong></code></pre>

Añádele el siguiente script con el token de la API y el *username* que hayas creado:

```bash
#!/usr/bin/env bash
# Este script mandará notificaciones a nuestro movil siguiendo la API
# Establecemos las variables:
_token='YOUR-API-TOKEN-HERE'
_user='YOUR-USER-KEY-HERE'
# Crearemos una función de bash para mandar notificaciones: 
push_to_mobile(){
	local t="${1:-cli-app}"
	local m="$2"
	[[ "$m" != "" ]] && curl -s \
	  --form-string "token=${_token}" \
	  --form-string "user=${_user}" \
	  --form-string "title=$t" \
	  --form-string "message=$m" \
	  https://api.pushover.net/1/messages.json
}

curl -s \
	  --form-string "token=aapnufyw99mwusvntmfygojq5abnmg" \
	  --form-string "user=ux8v6ivs1zjguy9cfm76hcedzyyazi" \
	  --form-string "title=hola" \
	  --form-string "message=marumba" \
	  https://api.pushover.net/1/messages.json
```

La explicación es la siguiente:

* Se define una **función** llamada `push_to_mobile` que toma dos argumentos:
  * **`$1`**: Título de la notificación (`t`), si no se proporciona, usa `"cli-app"` por defecto.
  * **`$2`**: Mensaje de la notificación (`m`).
* Si el mensaje (`$m`) **no está vacío**, se ejecuta `curl` para enviar una solicitud **POST** a la API de Pushover:
  * `--form-string "token=${_token}"`: Envia el **API Token**.
  * `--form-string "user=${_user}"`: Envia el **User Key**.
  * `--form-string "title=$t"`: Establece el **título** de la notificación.
  * `--form-string "message=$m"`: Contenido del mensaje.
  * **URL de la API**: `https://api.pushover.net/1/messages.json`

El uso de `curl -s` (modo silencioso) evita que se impriman mensajes innecesarios en la consola. Puede ver más info en la [documentación](https://support.pushover.net/i44-example-code-and-pushover-libraries#unix).

A continuación, ejecutaremos el script:

```bash
source pushover_app.sh
```

Y lo testearemos enviando una notificación (el primer parámetro `t` es el título y el segundo parámetro `m` es el mensaje):

```bash
push_to_mobile "bash-notification" "This is a test. Job foo failed on $HOSTNAME @ $(date)"
```

4. Recibirás una notificación en tu móvil a través de la app

<figure><img src="https://539580950-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FiKvwltOme7zTxep3LVyW%2Fuploads%2Fpyy06VRIQRUvh03uNwLz%2Fimage.png?alt=media&#x26;token=b4a3ef06-7de9-4a0b-b20a-4567a863be82" alt="" width="212"><figcaption><p>Notificación en el móvil</p></figcaption></figure>

Es posible también notificar por push y por correo a la vez (ten en cuenta que es necesario disponer de un servidor smtp, postfix por ejemplo), para ello haz uso del correo de notificaciones que te da y ejecuta el siguiente script:

```bash
#!/usr/bin/bin bash
# Variables del mail
subject="rsnapshot backup job failed at $HOSTNAME"
log_file="/path/to/my.log.txt"
from="webmaster@cyberciti.biz"
to="webmaster@cyberciti.biz"
# Arrancar diariamente un backup y generar un log
/usr/bin/rsnapshot daily  2>&1 | /root/bin/rsnapreport.pl > "${log_file}"
 
# Coger errores
status=$?
alogs="$(grep -E -wi '^ERROR:|ERROR|WARNING|WARNING:' $log_file)"
 
# Si falla, notificame
if [ $status -ne 0 ] ||  [ "$alogs" != "" ];
then
   mail -A "$log_file" -s "$subject" -r "$from" "$to" <<< "Backup script failed with error. Check attached log file"
fi
```

<mark style="color:red;">Falta probarlo!</mark>

Origen del tutorial:

{% embed url="<https://www.cyberciti.biz/mobile-devices/android/how-to-push-send-message-to-ios-and-android-from-linux-cli/>" %}

***

## :construction: Ntfy

Send push notifications to your phone or desktop via PUT/POST

{% embed url="<https://github.com/binwiederhier/ntfy>" %}

## :construction: Gotify

Un servidor simple pero muy efectivo de envío y recepción de mensajes / alertas.

<figure><img src="https://539580950-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FiKvwltOme7zTxep3LVyW%2Fuploads%2F9sdLOdPgHPxNZoBLHkJx%2Fimage.png?alt=media&#x26;token=f1650d40-79a8-43f6-a0ff-a5531422d9ef" alt=""><figcaption></figcaption></figure>

{% embed url="<https://gotify.net/>" %}
