Esta documentación está en fase de desarrollo y puede contener errores.

Notificaciones ntfy

Publica notificaciones push a un topic ntfy desde .NET con NtfyClientC, y engánchalo al pipeline de logs para avisar de errores.

El módulo dinaup.ntfy del paquete Dinaup publica notificaciones push a un topic de ntfy desde cualquier app. Se usa suelto, para mandar avisos concretos, o enganchado a Dinaup.Logs para que cada Warning/Error/Fatal dispare una notificación.

using Dinaup.Ntfy;

Cliente ntfy

Crear el cliente

// Servidor público o autoalojado
var ntfy = new NtfyClientC("https://ntfy.tu-dominio.com");

// Con token de acceso para topics protegidos
var ntfyAuth = new NtfyClientC("https://ntfy.tu-dominio.com", "tk_tu-token");

También acepta un NtfyClientOptions con más ajustes:

var ntfy = new NtfyClientC(new NtfyClientOptions
{
    ServerUrl       = "https://ntfy.tu-dominio.com",
    AccessToken     = "tk_tu-token",
    DefaultTopic    = "mi-app",
    DefaultPriority = NtfyPriority.Default,
    Timeout         = TimeSpan.FromSeconds(30)
});

Enviar

// Mensaje simple
await ntfy.SendAsync("mi-app", "Backup completado");

// Con título y prioridad
await ntfy.SendAsync("mi-app", "Stock por debajo del mínimo", "Aviso de inventario", NtfyPriority.High);

Las prioridades son Minimum, Low, Default, High y Urgent. Cada SendAsync devuelve un NtfyResult con IsSuccess, ErrorMessage y MessageId.

Hay variantes para casos más ricos:

  • SendMarkdownAsync — cuerpo en Markdown.
  • SendWithClickUrlAsync — la notificación abre una URL al tocarla.
  • SendWithActionsAsync — botones de acción (NtfyAction).
  • SendWithAttachmentUrlAsync / SendWithAttachmentAsync — adjunta un archivo por URL o por bytes.
  • SendAppStartupAsync, SendAppShutdownAsync, SendAppErrorAsync — avisos de ciclo de vida de la app.

Enganche al pipeline de logs

Pasa el cliente ntfy y un topic a Logs.Initialize para que el logging publique avisos solo:

using Dinaup;
using Dinaup.Ntfy;

var loki = new Logs.LokiConfig { Endpoint = "https://loki.tu-dominio.com/loki/api/v1/push" };
var ntfy = new NtfyClientC("https://ntfy.tu-dominio.com", "tk_tu-token");

Logs.Initialize(loki, ntfy, "mi-app-alertas");

A partir de ahí, cada Logs.Warning, Logs.Error y Logs.Fatal publica una notificación en segundo plano. El nivel decide el topic de destino y la prioridad:

Nivel de logTopicPrioridad ntfy
Warningmi-app-alertas-warningDefault
Errormi-app-alertas-errorHigh
Fatalmi-app-alertas-fatalUrgent

El envío desde logs está limitado a 60 notificaciones cada 20 segundos: un pico de errores no inunda tu teléfono. Los avisos que superan el límite se descartan, pero el log se registra igual.

Notificaciones manuales desde Logs

Con el logging ya inicializado con ntfy, puedes mandar avisos sin pasar por un nivel de log:

await Logs.SendNotificationAsync("Cierre de caja pendiente", "Recordatorio", NtfyPriority.Default);

Logs.IsNtfyConfigured indica si el enganche está activo. Logs.SendErrorNotificationAsync(exception, context) y Logs.SendShutdownNotificationAsync(reason) cubren los avisos de error y apagado.

On this page