From 3c1c1a246a9434b60c08ef32fd5ca342d8a17e7a Mon Sep 17 00:00:00 2001 From: PAVEL PALMA Date: Wed, 4 Feb 2026 17:46:47 -0600 Subject: [PATCH] UPDATE 04-febrero --- .../DialogflowResponseMapper.java | 28 +++++++++++++------ 1 file changed, 20 insertions(+), 8 deletions(-) diff --git a/src/main/java/com/example/mapper/conversation/DialogflowResponseMapper.java b/src/main/java/com/example/mapper/conversation/DialogflowResponseMapper.java index 63359db..e8b01fb 100644 --- a/src/main/java/com/example/mapper/conversation/DialogflowResponseMapper.java +++ b/src/main/java/com/example/mapper/conversation/DialogflowResponseMapper.java @@ -63,15 +63,27 @@ public class DialogflowResponseMapper { String responseText = responseTextBuilder.toString().trim(); - Map parameters = Collections.emptyMap(); + Map parameters = new LinkedHashMap<>(); // Inicializamos vacío para evitar NPEs después + if (dfQueryResult.hasParameters()) { - parameters = dfQueryResult.getParameters().getFieldsMap().entrySet().stream() - .collect(Collectors.toMap( - Map.Entry::getKey, - entry -> ProtobufUtil.convertProtobufValueToJavaObject(entry.getValue()), - (oldValue, newValue) -> oldValue, // In case of duplicate keys, keep the old value - LinkedHashMap::new // Preserve insertion order - )); + // Usamos un forEach en lugar de Collectors.toMap para tener control total sobre nulos + dfQueryResult.getParameters().getFieldsMap().forEach((key, value) -> { + try { + Object convertedValue = ProtobufUtil.convertProtobufValueToJavaObject(value); + + // Si el valor convertido es nulo, decidimos qué hacer. + // Lo mejor es poner un String vacío o ignorarlo para que no explote tu lógica. + if (convertedValue != null) { + parameters.put(key, convertedValue); + } else { + logger.warn("El parámetro '{}' devolvió un valor nulo al convertir. Se ignorará.", key); + // Opcional: parameters.put(key, ""); + } + } catch (Exception e) { + logger.error("Error convirtiendo el parámetro '{}' de Protobuf a Java: {}", key, e.getMessage()); + } + }); + logger.debug("Extracted parameters: {} for session: {}", parameters, sessionId); } else { logger.debug("No parameters found in QueryResult for session: {}. Using empty map.", sessionId);