Node-RED: PLEX > Telegram

Configurar un flow para mandar notificaciones a un grupo de Telegram

Hola a todos/as en este artículo os voy a mostrar la configuración de Node-RED para enviar un mensaje a un grupo de Telegram cuando añaden algo nuevo a su servidor PLEX

Tengan en cuenta que aquí no encontraran una guía sobre como configurar Node-RED, su uso o como crear un bot de Telegram. Hay muy buenos tutoriales en internet sobre ello. Esto para aquellos/as que ya lo tengáis en funcionamiento y queráis tener este flow configurado.

El flow

Node-RED flow
Node-RED flow preview

Funcionamiento

Estaremos escuchando las peticiones de PLEX a través de un webhook, en el momento que el evento library.new se produzca, leeremos el resultado y lo mandaremos a nuestro grupo de Telegram del cual somos administradores.

Este flujo no está simplificado, aquí detectaremos el tipo de elemento que ha sido añadido para personalizar el mensaje a enviar en función de si es una pelicula, una serie o un capítulo de una serie.

Partes del Flow

Podemos distinguir 3 partes en este flow:

  • Comprobación de errores (Recomendado)
Control de errores
  • El flujo que lee el mensaje y lo manda a Telegram (Necesario)
Leer los datos del webhook y enviarlos a Telegram
  • Un lector del webhook (opcional)
Lector del webhook

[post] /plex

Method: post URL: webhook-url (en mi caso /plex, ustedes tendrán que poner la que les corresponda)

Consejo: Cuando creen el webhook asegúrense de que usa el mismo port que Node-RED para mayor facilidad.

function

Aquí es donde se hace la “magia”, detectaremos que tipo de elemento se ha añadido, personalizaremos el mensaje y lo dejaremos listo para ser enviado.

Listos/as para ver un montón de código?

body = JSON.parse(msg.payload.payload);
event = body.event;
metadata = body.Metadata;
var id = body.Metadata.Guid[0].id;
if(event === "library.new"){
if(metadata.type === 'movie'){
id = id.replace("imdb://", "");
txt = `
Nueva pelicula añadida: `+ metadata.title +`
Año: `+ metadata.year +` - Duración: `+ (metadata.duration / 3600000).toFixed(2) +`h
Edad: `+ metadata.contentRating +`
Descripción: `+ metadata.summary;
msg.payload = {
chatId:'your chat id',
type: 'photo',
content: 'https://m.imdb.com/title/'+id+'/mediaviewer/',
caption: txt
};
} else if(metadata.type === 'episode'){
id = id.replace("tvdb://", "");
txt = `
Nuevo capitulo añadido: `+ metadata.title +`
Capitulo: `+ metadata.index +` - Temporada: `+ metadata.parentIndex +`
Serie: `+ metadata.grandparentTitle +`
Duración: `+ (metadata.duration / 3600000).toFixed(2) +`h
Descripción: `+ metadata.summary;

msg.payload = {
chatId:'your chat id',
type: 'message',
content: txt
};
} else {
id = id.replace("imdb://", "");
txt = `
Nueva serie añadida: `+ metadata.title +`
Año: `+ metadata.year +` - Temporadas: `+ metadata.childCount +`
Duración: `+ (metadata.duration / 3600000).toFixed(2) +`h
Descripción: `+ metadata.summary;
msg.payload = {
chatId:'your chat id',
type: 'photo',
content: 'https://m.imdb.com/title/'+id+'/mediaviewer/',
caption: txt
};
}
return msg;
}

La forma más efectiva de detectar el contenido es a través de metadata.type esta key contiene si es una pelicula (movie), una serie (show) o un capítulo (episode) esto es necesario porque hay ciertas partes que no funcionan de la misma forma según el tipo de contenido como, por ejemplo, obtener el poster.

Alerta: donde dice “your chat id” tienen que incluir el id del grupo de Telegram. Estos id normalmente comienzan con el símbolo “-

Telegram sender

Bot-Name: mybot_name Token: mybot_token ChatIds: my_chat_id

Todos estos datos pueden sacarlos de BotFather

Lector del webhook

Esta parte es totalmente opcional y sirve para hacer debug y ver que campos nos interesa añadir al mensaje. Les comparto el código que debe ir en la función.

body = JSON.parse(msg.payload.payload);
event = body.event;
metadata = body.Metadata;
if(event === "library.new"){
msg.payload = metadata
return msg;
}

Si tienen alguna duda pueden dejar su comentario.

Espero les sirva más que nada porque cuesta configurarlo y/o encontrar un buen tutorial, más si lo quieren en español.


Draecal Daedrian

1 Blog Mensajes

Comentarios
Leandro lac 16 w

Soy totalmente nuevo en este tema y estoy completamente perdido, ¿cómo pruebo el inject de Plex para que funcione y se vea en el payload?
Puse Lector del webhook para depurar en la función, pero estoy completamente perdido.

Instalé el paquete de nodo node-red-contrib-plex, ¿está correcto? ¿Es este el que se menciona en la descripción?