Notificaciones del sistema con Node.js

Notificaciones del sistema con Node.js

Las notificaciones pueden convertirse hoy en día en un recurso imprescindible o bien acabar siendo una pesadilla. Cada aplicación que se instala en el teléfono desea tener acceso a las notificaciones, al igual que las aplicaciones de escritorio, y ahora además tenemos un Web Notifications API junto con un Web Push API, esto por si no tuviéramos suficientes notificaciones. Los recordatorios de las citas de calendario son siempre bienvenidas (de lo contrario te olvidarías de casi cada evento) pero, ¿es realmente necesario que Wacky Mini Golf te notifique que no has jugado desde hace 4 días? Probablemente no.

De todas formas, pensando en cómo utilizar las notificaciones para recordar cosas que hacer en un momento determinado del día como ir a comer el almuerzo, ir a dar un paseo en bicicleta o ir a buscar a un hijo a la escuela en un día extraño. Y pensando en JavaScript y buscando la posibilidad de la creación de notificaciones en Mac utilizando Node.js, existe una solución: node-notifier.

Vamos a conocerlo:

Crear una notificación simple

node-notifier funciona tanto en Mac como en un Windows PC. Las notificaciones pueden variar desde muy simples a avanzadas por lo que creamos primero una notificación muy simple

const notifier = require('node-notifier');
// String
notifier.notify('¡Vaciar la lavadora!');
// Object
notifier.notify({
  'title': 'Imaginanet Blog',
  'subtitle': 'Mantenimiento diario',
  'message': 'Acceder y aprobar los comentarios de los usuarios',
  'icon': 'imaginanet-logo.png',
  'contentImage': 'blog.png',
  'sound': 'ding.mp3',
  'wait': true
});

Puedes proporcionar a notifier los elementos básicos como title, message icon y, si lo deseas, complicarlo un poco más añadiendo una imagen de contenido, un sonido, e incluso controlar los botones que se muestran en la notificación.

Notificaciones avanzadas

Puedes crear notificaciones avanzadas, con muchas características con node-notifier, incluyendo la capacidad de responder, gestionar las etiquetas de los botones de la notificación, y mucho más. El siguiente es un ejemplo más avanzado:

const NotificationCenter = require('node-notifier').NotificationCenter;
var notifier = new NotificationCenter({
  withFallback: false, // Use Growl Fallback if <= 10.8
  customPath: void 0 // Relative/Absolute path to binary if you want to use your own fork of terminal-notifier
});
notifier.notify({
  'title': void 0,
  'subtitle': void 0,
  'message': 'Pulsa “Responder” para enviar un mensaje de respuesta',
  'sound': false, // Case Sensitive string para la ubicación del archivo de sonido, o utilizar uno de los sonidos nativos de macOS (ver a continuación)
  'icon': 'Terminal Icon', // Ruta absoluta para el icono de acción
  'contentImage': void 0, // Ruta absoluta para la imagen adjunta (Content Image)
  'open': void 0, // URL que se abre al hacer clic 
  'wait': false, // Espera la acción del usuario contra la notificación o el tiempo de espera. Igual que timeout = 5 segundos
  // Nuevo en la última versión. Ver `example/macInput.js` para su uso
  timeout: 5, // Tiene prioridad sobre la espera si ambos están definidos.
  closeLabel: void 0, // String. Etiqueta para el botón Cancelar
  actions: void 0, // String | Array<String>. Etiqueta de acción o lista de etiquetas en caso de desplegable
  dropdownLabel: void 0, // String. Etiqueta que se utilizará si son varias acciones
  reply: false // Boolean. Si la notificación debe tomar un input. Valor enviado como tercer argumento en la devolución de llamada y el emisor de sucesos.
}, function(error, response, metadata) {
  console.log(error, response, metadata);
});

He aquí un ejemplo rápido sobre el tipo de acciones que puedes hacer con las notificaciones: 


Imaginanet

Eventos

node-notifier es capaz de enviar eventos  click y close, algo muy práctico para desencadenar acciones específicas en función de cómo interactúe el usuario con la notificación:

// Abrir la web de imaginanet
notifier.on('clic', (obj, options) => {
  const spawn = require('child_process').spawn;
  const cmd = spawn('abrir', ['https://imaginanet.com']);
});
notifier.on('cerrar', (obj, options) => {});

El ejemplo anterior permite hacer clic en la notificación para poner en marcha tu página web; también se podría usar esto para desencadenar otras rutinas en tu máquina, por supuesto, simplemente depende de para qué sea la notificación.

Puedes obtener resultados muy avanzados con los objetos de notificación y los eventos, así que asegúrate de revisar la node-notifier API si realmente quieres profundizar en el tema.

Comentarios

Sin comentarios
Ha habido un error en el envío
Comentario enviado. Será revisado por la moderación antes de ser publicado.

Deja tu comentario

Tu nombre:
Tu email:
Tu comentario: