UPDATE 04-febrero
This commit is contained in:
@@ -63,15 +63,27 @@ public class DialogflowResponseMapper {
|
||||
|
||||
String responseText = responseTextBuilder.toString().trim();
|
||||
|
||||
Map<String, Object> parameters = Collections.emptyMap();
|
||||
Map<String, Object> 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);
|
||||
|
||||
Reference in New Issue
Block a user