# Suscríbete a través de ntfy CLI Además de suscribirse a través del [interfaz de usuario web](web.md)el [aplicación de teléfono](phone.md), o el [API](api.md), puedes suscribirte a los temas a través de la CLI de ntfy. La CLI está incluida en la misma `ntfy` binario que se puede utilizar para [autohospedar un servidor](../install.md). !!! información El **La CLI de Ntfy no es necesaria para enviar o recibir mensajes**. En su lugar, puede [enviar mensajes con curl](../publish.md), e incluso usarlo para [suscribirse a temas](api.md). Puede ser un poco más conveniente usar la CLI ntfy que escribir tu propio guión. Todo depende del caso de uso. 😀 ## Instalar + configurar Para instalar la CLI de ntfy, simplemente **Siga los pasos descritos en el cuadro de diálogo [página de instalación](../install.md)**. El servidor ntfy y los clientes son el mismo binario, por lo que todo es muy conveniente. Después de la instalación, puede (opcionalmente) configurar el cliente creando `~/.config/ntfy/client.yml` (para el usuario no root), o `/etc/ntfy/client.yml` (para el usuario root). Tú puede encontrar un [configuración de esqueleto](https://github.com/binwiederhier/ntfy/blob/main/client/client.yml) en GitHub. Si solo quieres usar [ntfy.sh](https://ntfy.sh), no tienes que cambiar nada. Si usted **autohospede su propio servidor**, Es posible que desee modificar el cuadro de diálogo `default-host` opción: ```yaml # Base URL used to expand short topic names in the "ntfy publish" and "ntfy subscribe" commands. # If you self-host a ntfy server, you'll likely want to change this. # default-host: https://ntfy.myhost.com ``` ## Publicar mensajes Puede enviar mensajes con la CLI de ntfy mediante el `ntfy publish` (o cualquiera de sus alias) `pub`, `send` o `trigger`). Hay muchos ejemplos en la página sobre [publicar mensajes](../publish.md), pero aquí hay algunos rápidos: \=== "Envío simple" ` ntfy publish mytopic This is a message ntfy publish mytopic "This is a message" ntfy pub mytopic "This is a message" ` \=== "Enviar con título, prioridad y etiquetas" ` ntfy publish \ --title="Thing sold on eBay" \ --priority=high \ --tags=partying_face \ mytopic \ "Somebody just bought the thing that you sell" ` \=== "Enviar a las 8:30am" ` ntfy pub --at=8:30am delayed_topic Laterzz ` \=== "Triggering a webhook" ` ntfy trigger mywebhook ntfy pub mywebhook ` ### Adjuntar un archivo local Puede cargar y adjuntar fácilmente un archivo local a una notificación: $ ntfy pub --file README.md mytopic | jq . { "id": "meIlClVLABJQ", "time": 1655825460, "event": "message", "topic": "mytopic", "message": "You received a file: README.md", "attachment": { "name": "README.md", "type": "text/plain; charset=utf-8", "size": 2892, "expires": 1655836260, "url": "https://ntfy.sh/file/meIlClVLABJQ.txt" } } ### Espere a PID/comando Si tiene un comando de ejecución prolongada y desea **Publicar una notificación cuando se complete el comando**, puede envolverlo con `ntfy publish --wait-cmd` (alias: `--cmd`, `--done`). O, si olvidó envolverlo, y el El comando ya se está ejecutando, puede esperar a que se complete el proceso con `ntfy publish --wait-pid` (alias: `--pid`). Ejecute un comando y espere a que se complete (aquí: `rsync ...`): $ ntfy pub --wait-cmd mytopic rsync -av ./ root@example.com:/backups/ | jq . { "id": "Re0rWXZQM8WB", "time": 1655825624, "event": "message", "topic": "mytopic", "message": "Command succeeded after 56.553s: rsync -av ./ root@example.com:/backups/" } O bien, si ya inició el proceso de ejecución prolongada y desea esperarlo con su ID de proceso (PID), puede hacer lo siguiente: \=== "Usando un PID directamente" ` $ ntfy pub --wait-pid 8458 mytopic | jq . { "id": "orM6hJKNYkWb", "time": 1655825827, "event": "message", "topic": "mytopic", "message": "Process with PID 8458 exited after 2.003s" } ` \=== "Usando un `pidof`" ` $ ntfy pub --wait-pid $(pidof rsync) mytopic | jq . { "id": "orM6hJKNYkWb", "time": 1655825827, "event": "message", "topic": "mytopic", "message": "Process with PID 8458 exited after 2.003s" } ` ## Suscríbete a los temas Puede suscribirse a temas usando `ntfy subscribe`. Dependiendo de cómo se llame, este comando imprimirá o ejecutará un comando para cada mensaje que llegue. Hay algunas maneras diferentes en el que se puede ejecutar el comando: ### Transmitir mensajes como JSON ntfy subscribe TOPIC Si ejecuta el comando de esta manera, imprime la representación JSON de cada mensaje entrante. Esto es útil cuando tiene un comando que desea transmitir y leer mensajes JSON entrantes. A menos que `--poll` se pasa, este comando permanece abierto para siempre. $ ntfy sub mytopic {"id":"nZ8PjH5oox","time":1639971913,"event":"message","topic":"mytopic","message":"hi there"} {"id":"sekSLWTujn","time":1639972063,"event":"message","topic":"mytopic",priority:5,"message":"Oh no!"} ...
Subscribe in JSON mode
### Ejecutar comando para cada mensaje ntfy subscribe TOPIC COMMAND Si lo ejecuta de esta manera, se ejecuta un COMANDO para cada mensaje entrante. Desplácese hacia abajo para ver una lista de disponibles variables de entorno. Aquí hay algunos ejemplos: ntfy sub mytopic 'notify-send "$m"' ntfy sub topic1 /my/script.sh ntfy sub topic1 'echo "Message $m was received. Its title was $t and it had priority $p'
Execute command on incoming messages
Los campos de mensaje se pasan al comando como variables de entorno y se pueden utilizar en scripts. Tenga en cuenta que desde Estas son variables de entorno, normalmente no tiene que preocuparse por citar demasiado, siempre y cuando las incluya entre comillas dobles, debería estar bien: | | variable Alias | Descripción | |------------------|----------------------------|----------------------------------------| | `$NTFY_ID` | `$id` | Identificador de mensaje único | | `$NTFY_TIME` | `$time` | Marca de tiempo Unix del | de entrega de mensajes | `$NTFY_TOPIC` | `$topic` | Nombre del tema | | `$NTFY_MESSAGE` | `$message`, `$m` | | del cuerpo del mensaje | `$NTFY_TITLE` | `$title`, `$t` | Título del mensaje | | `$NTFY_PRIORITY` | `$priority`, `$prio`, `$p` | Prioridad del mensaje (1=min, 5=max) | | `$NTFY_TAGS` | `$tags`, `$tag`, `$ta` | Etiquetas de mensaje (lista separada por comas) | | `$NTFY_RAW` | `$raw` | | de mensajes JSON sin procesar ### Suscríbete a varios temas ntfy subscribe --from-config Para suscribirse a varios temas a la vez y ejecutar diferentes comandos para cada uno, puede usar `ntfy subscribe --from-config`, que leerá el `subscribe` config desde el archivo de configuración. Por favor, echa un vistazo también a la [Servicio systemd ntfy-client](#using-the-systemd-service). Aquí hay un archivo de configuración de ejemplo que se suscribe a tres temas diferentes, ejecutando un comando diferente para cada uno de ellos: \=== "~/.config/ntfy/client.yml (Linux)" ` yaml subscribe: - topic: echo-this command: 'echo "Message received: $message"' - topic: alerts command: notify-send -i /usr/share/ntfy/logo.png "Important" "$m" if: priority: high,urgent - topic: calc command: 'gnome-calculator 2>/dev/null &' - topic: print-temp command: | echo "You can easily run inline scripts, too." temp="$(sensors | awk '/Pack/ { print substr($4,2,2) }')" if [ $temp -gt 80 ]; then echo "Warning: CPU temperature is $temp. Too high." else echo "CPU temperature is $temp. That's alright." fi ` \=== "~/Library/Application Support/ntfy/client.yml (macOS)" ` yaml subscribe: - topic: echo-this command: 'echo "Message received: $message"' - topic: alerts command: osascript -e "display notification \"$message\"" if: priority: high,urgent - topic: calc command: open -a Calculator ` \=== "%AppData%\ntfy\client.yml (Windows)" ` yaml subscribe: - topic: echo-this command: 'echo Message received: %message%' - topic: alerts command: | notifu /m "%NTFY_MESSAGE%" exit 0 if: priority: high,urgent - topic: calc command: calc ` En este ejemplo, cuando `ntfy subscribe --from-config` se ejecuta: * Mensajes a `echo-this` simplemente hace eco a la salida estándar * Mensajes a `alerts` Mostrar como notificación de escritorio para mensajes de alta prioridad mediante [notificar-enviar](https://manpages.ubuntu.com/manpages/focal/man1/notify-send.1.html) (Linux), [notifu](https://www.paralint.com/projects/notifu/) (Ventanas) o `osascript` (macOS) * Mensajes a `calc` abra la calculadora 😀 (*porque, ¿por qué no?*) * Mensajes a `print-temp` Ejecute un script en línea e imprima la temperatura de la CPU (solo versión de Linux) Espero que esto muestre cuán poderoso es este comando. Aquí hay un breve video que demuestra el ejemplo anterior:
Execute all the things
### Uso del servicio systemd Puede utilizar el `ntfy-client` servicio systemd (consulte [ntfy-client.service](https://github.com/binwiederhier/ntfy/blob/main/client/ntfy-client.service)) para suscribirse a varios temas como en el ejemplo anterior. El servicio se instala automáticamente (pero no se inicia) si instala el paquete deb/rpm. Para configurarlo, simplemente edite `/etc/ntfy/client.yml` y ejecutar `sudo systemctl restart ntfy-client`. !!! información El `ntfy-client.service` se ejecuta como usuario `ntfy`, lo que significa que se aplican restricciones de permisos típicas de Linux. Vea a continuación para saber cómo solucionarlo. Si el servicio se ejecuta en el equipo de escritorio personal, es posible que desee invalidar el usuario/grupo de servicio (`User=` y `Group=`), y ajustar el `DISPLAY` y `DBUS_SESSION_BUS_ADDRESS` variables de entorno. Esto le permitirá ejecutar comandos en su sesión X como usuario principal de la máquina. Puede invalidar manualmente estas entradas de servicio systemd con `sudo systemctl edit ntfy-client`, y agregue esto (suponiendo que su usuario es `phil`). No te olvides de correr `sudo systemctl daemon-reload` y `sudo systemctl restart ntfy-client` después de editar el archivo de servicio: \=== "/etc/systemd/system/ntfy-client.service.d/override.conf" ` [Service] User=phil Group=phil Environment="DISPLAY=:0" "DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus" ` O bien, puede ejecutar el siguiente script que crea esta configuración de anulación por usted: sudo sh -c 'cat > /etc/systemd/system/ntfy-client.service.d/override.conf' <