Envío de notificaciones con node-notifier (Mac, Windows, Linux)

En este tutorial, cubriremos cómo enviar notificaciones a usuarios en Mac, Windows y Linux usando Node.js y node-notifier.

Introducción

Las notificaciones brindan una excelente manera de involucrar a los usuarios de sus aplicaciones y se pueden usar para proporcionar o solicitar comentarios. En este tutorial, examinaremos cómo enviar notificaciones usando Node.js y node-notifier.

notificador de nodo ​​es una biblioteca para enviar notificaciones nativas multiplataforma en Node JS.

Creación de una notificación con node-notifier

Vamos a crear un directorio para nuestro proyecto e inicializar un proyecto de Nodo con la configuración predeterminada en él:

1
2
3
$ cd node-native-notifications
$ npm init -y
$ npm install --save node-notifier

A continuación, en el archivo index.js, importaremos node-notifier:

1
const notifier = require('node-notifier');

Hay dos formas de crear y enviar una notificación simple usando node-notifier. Pasando una cadena a la función notify():

1
notifier.notify('Hello!');

O, alternativamente, puede pasar un objeto y establecer atributos como el título y el mensaje:

1
2
3
4
notifier.notify({
  title: 'Greetings',
  message: 'Hello!'
});

Ejecutemos este código para ver la notificación en acción:

1
$ node index.js

Las notificaciones se superponen en la pantalla de nuestro escritorio y podemos ver los dos mensajes que hemos enviado:

sending notifications using node-notifier

Personalización de notificaciones

Además de las opciones de título y mensaje, también puede configurar un icono para que aparezca, usar sonido para agregar un sonido de notificación o usar esperar para esperar una acción del usuario.

El sonido y la espera son falsos por defecto.

Agreguemos un icono, que puede ser cualquier archivo de imagen, así como un sonido a nuestra notificación. Además, esperaremos a que el usuario también realice una acción:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
const path = require('path');

notifier.notify({
    title: 'Salutations!',
    message: 'Hey there!',
    icon: path.join(__dirname, 'icon.jpg'),
    sound: true,
    wait: true
  },
  function (err, response) {
    console.log(response);
  }
);

En el código anterior, incluimos el módulo ruta para ayudarnos a obtener la ruta a nuestro archivo. También estamos pasando una función de devolución de llamada a la función notify() y registrando la respuesta o la interacción del usuario con nuestra notificación en la consola.

Al ejecutar el código anterior, recibirá una notificación con la imagen que ha elegido como icono de la notificación. El sonido de una nueva notificación también puede ir acompañado de la pantalla de notificación según el sistema operativo OS de su computadora y la versión.

La notificación se verá así:

notification with icon using node-notifier

Si hace clic en el botón para descartar la notificación, la cadena descartada se registrará en su consola. Si no hay interacción con la notificación hasta que desaparece, muestra “tiempo de espera”. Si se hace clic en la notificación en sí, se registra “indefinido” en la consola.

Personalización de opciones para diferentes plataformas {#personalización de opciones para diferentes plataformas}

Como se ha indicado en el apartado anterior, pueden existir variaciones en el comportamiento de las notificaciones enviadas debido a diferencias en los sistemas de notificación utilizados por el sistema operativo del usuario.

node-notifer intenta utilizar el sistema con la mejor experiencia de usuario pero prefiere soluciones nativas. Proporciona respaldos para cada plataforma como se define en su flujo de decisión.

Sin embargo, puede crear un informador personalizado para cada uno de los sistemas de informes para tener control sobre el comportamiento de las notificaciones que envía en su aplicación. Hay cinco reporteros: Centro de notificaciones, Tostadora de Windows, Globos de Windows, Growl y notificar-enviar.

La opción esperar no se aplica cuando se usa Windows Toaster o notify-send reporteros ya que Windows Toasters siempre espera y notify-send no es compatible con la opción wait.

La opción sonido solo se puede usar para los reporteros del Centro de notificaciones y Tostadora de Windows. La opción icono toma la ruta absoluta al archivo de imagen y no funciona para el reportero de Windows Balloon.

Gruñido

Este es el reportero que es el respaldo cuando otros reporteros fallan o no están disponibles para el sistema operativo. Se basa en el paquete de código abierto gruñido y envía mensajes usando la utilidad Gruñido para enviar mensajes nativos notificaciones

Agrega lo siguiente a tu código para personalizar el reportero Growl para tu aplicación:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
const fs = require('fs);
const Growl = require('node-notifier').Growl;
// Or
// const Growl = require('node-notifier/notifiers/growl');
 
let growlNotifier = new Growl({
  name: 'Node'
  host: 'localhost',
  port: 23053
});
 
growlNotifier.notify({
  title: 'Greetings',
  message: 'Hello user!',
  icon: fs.readFileSync(__dirname + '/icon.jpg'),
  wait: false,
  
  // Other growl options like sticky etc.
  sticky: false,
  label: undefined,
  priority: undefined
});

En el código anterior, estamos creando una nueva instancia Growl con algunas opciones configuradas, como su nombre, el host y el puerto en el que se ejecutará.

A continuación, llamamos al método notify() con nuestras opciones habituales. Growl nos presenta algunas opciones más, las cuales están documentadas aquí.

Tostadora de Windows

Este es un reportero específicamente para el sistema operativo Windows que admite notificaciones desde Windows 8 y posteriores.

Usemos el reportero de Windows Toaster para enviar una notificación:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
const WindowsToaster = require('node-notifier').WindowsToaster;
// Or
// const WindowsToaster = require('node-notifier/notifiers/toaster');
 
let windowsToasterNotifier = new WindowsToaster({
  withFallback: true
});
 
windowsToasterNotifier.notify({
    title: "Windows Toaster Notification",
    message: "This is a notification sent from the Windows Toaster Notifier",
    icon:  path.join(__dirname, 'icon.jpg'),
    sound: "SMS",
  },
  function (error, response) {
    console.log(response);
  }
);

Aquí, estamos instanciando una instancia de WindowsToaster, configurando el argumento withFallback como true. Si este notificador no funciona, recurrirá a Growl o Globos de Windows.

Luego estamos llamando al método .notify() con las opciones habituales.

Globo de Windows

Este es un reportero específicamente para todas las versiones del sistema operativo Windows anteriores a Windows 8. Utiliza globos en la barra de tareas para mostrar notificaciones. Para personalizar las opciones para este reportero específicamente, puede escribir su código de la siguiente manera:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
const WindowsBalloon = require('node-notifier').WindowsBalloon;
// Or
// const WindowsBallon = require('node-notifier/notifiers/windowsballon');
 
var windowsBalloonNotifier = new WindowsBalloon({
  withFallback: true
});
 
windowsBalloonNotifier.notify({
    title: "Windows Balloon Notification",
    message: "This notification was sent using Windows Balloons.",
    sound: true,
    time: 1000,
    wait: false,
    type: 'warn'
  },
  function (error, response) {
    console.log(response);
  }
);

Como de costumbre, estamos construyendo una instancia del notificador y pasando nuestras opciones a la función notify().

Aquí, podemos especificar el tiempo en milisegundos, después del cual desaparecerá la notificación. No esperaremos a que el usuario realice una acción contra la notificación, por lo que esperar se establece en falso.

Además, hemos configurado el ’tipo’ de notificación en ‘aviso’ y el ‘sonido’ en ‘verdadero’. Esto notificará al usuario como una advertencia. También podríamos haber usado info o error dependiendo de lo que quieras transmitir.

Centro de notificaciones

Este reportero es para enviar notificaciones para sistemas macOS. Requiere macOS versión 10.8 anterior. Para versiones anteriores, utilizará Growl como respaldo. Si Growl no está instalado, se devuelve un error en la función de devolución de llamada.

Para configurar el reportero del Centro de notificaciones, puede escribir su código como se muestra a continuación:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
const NotificationCenter = require('node-notifier').NotificationCenter;
// Or
// const NotificationCenter = require('node-notifier/notifiers/notificationcenter');
 
let notificationCenterNotifier = new NotificationCenter({
  withFallback: true
});
 
notificationCenterNotifier.notify({
    title: "Notification Center Notifications",
    subtitle: "For macOS > 10.8",
    message: "This is a notification sent using Notification Center",
    sound: 'Frog',
    icon: path.join(__dirname, 'icon.jpg'),
    contentImage: path.join(__dirname, 'content_image.jpg'),
    open: undefined,
    wait: false,
  },
  function (error, response, metadata) {
    console.log(response, metadata);
  }
);

El parámetro sound toma un montón de valores como Basso, Blow, Bottle, etc. El valor predeterminado es Bottle si se establece en true. Alternativamente, puede configurar un sonido específico que desee.

Notificar-enviar

Este reportero se usa para personalizar las notificaciones para enviar en un sistema basado en Linux. Se puede utilizar como se muestra a continuación:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
const NotifySend = require('node-notifier').NotifySend;
// Or
// const NotifySend = require('node-notifier/notifiers/notifysend');
 
let notifySendNotifier = new NotifySend();
 
notifySendNotifier.notify({
  title: 'Notify-send Notification',
  message: 'This notification was sent using the notify-send reporter',
  icon: __dirname + '/icon.jpg',
  wait: true,
  timeout: 5
});

Conclusión

Las notificaciones proporcionan una forma para que los usuarios interactúen con sus aplicaciones y las notificaciones nativas son aquellas que se muestran en el escritorio de los usuarios en lugar de mostrarse en el navegador.

En este artículo, hemos cubierto cómo usar node-notifier para enviar notificaciones a sus usuarios. os.