"Error: Bad Request. Check node configuration"

Buenas!
Me aparece éste mensaje de error en NodeRed.
Es un error según dice en el nodo de mi servidor, o sea en el que uso para conectarme a Thinger… me llama la atención porque hasta hace unos días andaba perfectamente…
He revisado el Token y es correcto… alguna idea?

Hola @inelint,

Normalmente este error suele producirse cuando la petición que realiza Node-RED al servidor puede contener errores, como un json mal formado.

Si estás tratando de escribir una información a un bucket, un dispositivo, un endpoint… y el mensaje contiene caracteres especiales o tildes, hay un bug que se ha solucionado recientemente en una nueva versión del plugin, la 1.3.2.

Te aconsejo que comiences por actualizar a la nueva versión y comprobar si se soluciona. De lo contrario, ¿podrías darnos más detalles del flujo que ocasiona el error? de modo que lo podamos reproducir en nuestros servidores.

Un saludo :slight_smile:

Justamente! ésto me empezó a pasar cuando actualicé a la versión 1.3.2
Con la 1.3.1 no me había pasado.
Me está sucediendo cuando quiero escribir sobre un bucket , y es cualquier tipo de mensaje, ya he probado con todos.
Si no le encuentro solución convendrá reinstalar los nodos de thinger en NR?.. no sé mucho que hacer…

Buenas @inelint ,

Para descartar si se trata de un problema de la versión puedes probar a hacer un downgrade del plugin de la 1.3.2 a la 1.3.1, a través del menú de plugins de Thinger.io.

No obstante, tras analizar el problema, hay una causística en la que la base de datos temporal a la que pertenece el bucket no puede tratar ciertos contenidos del mensaje. Estos casos son json que contengan un array u objecto vacío. Por ejemplo: {"msg":[]}, {"msg":{}} o {"msg1":"field1", "msg2": {}} no pueden tratarse, por lo que habría que limpiar el json antes de tratar de introducirlo al bucket. ¿Puede ser este el problema?

Si es posible, ¿podrías adjuntar un mensaje de ejemplo de los que fallan en ese hilo?

Un saludo.

Yo lo que estoy usando es un bot, y a través del celular, con mi cuenta de Telegram, envío mensajes al bot y los quiero guardar en un bucket… En éste caso mandé el mensaje “Hh”… y el debug me muestra lo siguiente:

23/3/2022, 16:17:16node: inelintmsg : error

“Error: Bad Request. Check node configuration”


23/3/2022, 16:17:16node: 67e696a7f1129179msg : Object

object

payload: “”

originalMessage: object

message_id: 1336

from: object

id: xxxxxxxx {editado por mi}

is_bot: false

first_name: “Valentin”

username: “xxxxxxxxx” {editado por mi}

language_code: “es”

chat: object

id: xxxxxxxx {editado por mi}

first_name: “Valentin”

username: “xxxxxxxxx” {editado por mi}

type: “private”

date: 1648063035

forward_from: object

id: (xxxxxxxx) {editado por mi}

is_bot: false

first_name: “Valentin”

username: “xxxxxxxx” {editado por mi}

language_code: “es”

forward_date: 1648062836

text: “Hh”

_msgid: “2ec6db5a8f7e81cb”

Buenas!

Hemos analizalo los logs y aparentemente Node-RED está actuando correctamente, y es la base de datos, que da soporte al bucket, donde se está produciendo el fallo, debido a que se está tratando de insertar un campo de texto donde previamente había un campo booleano.

Como recomendación, se puede tratar de insertar el mensaje en un bucket vacío, y si resulta satisfactorio borrar el contenido del bucket anterior para comenzar a insertar de nuevo en el mismo.

En caso de que se sigan mezclando campos de tipo texto y tipo booleano, sería necesario convertir a texto los valores booleanos.

Te contesté por privado con más detalles para que puedas analizarlo.

Un saludo :slight_smile:

Me ha sucedido lo mismo con números y textos, si se inserta un número como float en donde se había insertado como texto, arroja el mismo error, al vaciar el bucket no lo arroja de nuevo, sin cambiar nada más.

Saludos

Hola Jaime
El tema es así, si en el nodo que escribe en el bucket (bucket write) inserto un booleano (0 o 1) en la ventana de “Value”, el bucket se llena correctamente.
Si en cambio ésta ventana la dejo vacía y quiero llenar el bucket con información procedente de un nodo anterior, me devuelve éste error.
Quiero decirles que hace algunas semanas me funcionaba perfectamente, pero a partir de hace unos días de repente dejó de funcionar.
Tampoco sé como decirle al “bucket write” que espere un valor distinto a booleano, no tiene mucho lugar para configuración éste nodo… no se como solucionarlo sinceramente…

Buenas @inelint,

En este caso los booleanos son true y false, sin estar contenidos en comillas ("). Los valores 0 y 1 se intepretarán como números enteros.

Para tu caso concreto, el problema viene en un campo con nombre content. Puedes realizar las siguientes comprobaciones, con el node de bucket write introduce lo siguiente en el campo Value:

Prueba 1

{"type":"message","content":"texto"}

Prueba 2

{"type":"message","content":0}

Prueba 3

{"type":"message","content":false}

Si realizas las escrituras al bucket donde da fallo de escritura, solo la última prueba debería ser correcta.

Para convertir el mensaje al completo a texto puedes usar algo asi con un nodo function:

msg.payload = JSON.stringify(msg.payload)
            .replace(/:(\d+)([,\}])/g, ':"$1"$2')
            .replace(/:(true|false|null)/g, ':"$1"');
            
return msg;

Si solo quieres convertir el campo content, deberás sustituir msg.payload por msg.payload.content.

Aún así, esto solo te funcionará en un bucket vacío.

Un saludo.

Hola Jaime gracias por tu tiempo!
¿Pero tanto enrosque por mandar un simple mensaje de telegram y poder ponerlo en un bucket?
¿Que es lo que está andando mal en Thinger, en la plataforma?
Tiene que ser una real tontería hacer ésto y tengo que hacer un edición de JS, meterme en textos, programación, … no tiene que ser más simple todo ésto?

La verdad la explicación que me das, es verdad, sólo la última de las tres funciones es la correcta. Respecto a la solución que me das para meter en un nodo “Function”… no te termino de captar la idea, meto ese texto entero en el noto y de ahi a otro nodo de “bucket_write”… en que parte de ese pedazo de código meto el “texto” que quiero enviar?
(No soy programador, es puro autodidactismooo ! gracias!)

Buenas!

Lamentablemente y para este caso sí. Existen otras posibilidades, pero dependen de como manejas los mensajes que envías a través del bot de telegram y que necesitarías cambiar los textos y asegurar que los campos que entran siempre son del mismo tipo. Y antes de ello borrar el contenido actual del bucket.

No hay ningún error en la plataforma. El problema que está surgiendo es el tipado de los campos en la base de datos que da soporte a los buckets (InfluxDB). Esto significa, que cuando insertas por primera vez un campo, le estás asignando de que tipo será para los siguientes valores que entren. Si el primer valor es un número entero, los siguientes valores para ese campo deben ser números enteros.

Te dejo más detalles sobre los tipos de datos que existen en la base de datos InfluxDB.

Aún así, esta limitación tampoco se puede considerar un error, y el motivo de la decisión por parte del equipo de InfluxDB puede ser incluso necesaria, según el lenguaje que se use para desarrollarlo o incluso a nivel de funcionalidad, para, por ejemplo, poder realizar un sumatorio de todos los valores de un campo en un determinado periodo de tiempo, donde solo se podría hacer si los tipos son números enteros o flotantes. Si en ese sumatorio se mezclasen números con texto, esa operación o no se podría realizar o el resultado sería inesperado.

Si decides ir por esta solución. El nodo function es un nodo que está integrado como parte de la base de Node-RED. Te dejo más información al respecto:
https://nodered.org/docs/user-guide/nodes#function
https://nodered.org/docs/user-guide/writing-functions
Tendrías que meter el nodo justo antes del nodo de bucket_write.

Espero haberte aclarado las dudas.

Un saludo! :slight_smile:

3 Likes

Gracias nuevamente!
Me has aclarado muchas dudas, un abrazo