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
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)
- El flujo que lee el mensaje y lo manda a Telegram (Necesario)
- Un lector del webhook (opcional)
[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.
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?