.
This commit is contained in:
@@ -0,0 +1,85 @@
|
||||
/*
|
||||
* Copyright 2025 Google. This software is provided as-is, without warranty or representation for any use or purpose.
|
||||
* Your use of it is subject to your agreement with Google.
|
||||
*/
|
||||
|
||||
package com.example.mapper.conversation;
|
||||
|
||||
import com.example.dto.dialogflow.base.DetectIntentRequestDTO;
|
||||
import com.example.dto.dialogflow.conversation.ExternalConvRequestDTO;
|
||||
import com.example.dto.dialogflow.conversation.QueryInputDTO;
|
||||
import com.example.dto.dialogflow.conversation.QueryParamsDTO;
|
||||
import com.example.dto.dialogflow.conversation.TextInputDTO;
|
||||
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.stereotype.Component;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
|
||||
/**
|
||||
* Spring component responsible for mapping a simplified, external API request
|
||||
* into a structured `DetectIntentRequestDTO` for Dialogflow. It processes
|
||||
* user messages and relevant context, such as phone numbers and channel information,
|
||||
* and populates the `QueryInputDTO` and `QueryParamsDTO` fields required for
|
||||
* a Dialogflow API call.
|
||||
*/
|
||||
@Component
|
||||
public class ExternalConvRequestMapper {
|
||||
|
||||
private static final Logger logger = LoggerFactory.getLogger(ExternalConvRequestMapper.class);
|
||||
private static final String DEFAULT_LANGUAGE_CODE = "es";
|
||||
|
||||
public DetectIntentRequestDTO mapExternalRequestToDetectIntentRequest(ExternalConvRequestDTO externalRequest) {
|
||||
Objects.requireNonNull(externalRequest, "ExternalRequestDTO cannot be null for mapping.");
|
||||
|
||||
if (externalRequest.message() == null || externalRequest.message().isBlank()) {
|
||||
throw new IllegalArgumentException("External request 'mensaje' (message) is required.");
|
||||
}
|
||||
TextInputDTO textInput = new TextInputDTO(externalRequest.message());
|
||||
QueryInputDTO queryInputDTO = new QueryInputDTO(textInput,null,DEFAULT_LANGUAGE_CODE);
|
||||
|
||||
// 2. Map ALL relevant external fields into QueryParamsDTO.parameters
|
||||
Map<String, Object> parameters = new HashMap<>();
|
||||
|
||||
String primaryPhoneNumber = null;
|
||||
if (externalRequest.user() != null && externalRequest.user().telefono() != null
|
||||
&& !externalRequest.user().telefono().isBlank()) {
|
||||
primaryPhoneNumber = externalRequest.user().telefono();
|
||||
parameters.put("telefono", primaryPhoneNumber);
|
||||
}
|
||||
|
||||
if (primaryPhoneNumber == null || primaryPhoneNumber.isBlank()) {
|
||||
throw new IllegalArgumentException(
|
||||
"Phone number is required in the 'usuario' field for conversation management.");
|
||||
}
|
||||
|
||||
String resolvedUserId = null;
|
||||
// Derive from phone number if not provided by 'userId' parameter
|
||||
resolvedUserId = "user_by_phone_" + primaryPhoneNumber.replaceAll("[^0-9]", "");
|
||||
parameters.put("usuario_id", resolvedUserId); // Ensure derived ID is also in params
|
||||
logger.warn("User ID not provided in external request. Using derived ID from phone number: {}", resolvedUserId);
|
||||
|
||||
|
||||
if (externalRequest.channel() != null && !externalRequest.channel().isBlank()) {
|
||||
parameters.put("canal", externalRequest.channel());
|
||||
logger.debug("Mapped 'canal' from external request: {}", externalRequest.channel());
|
||||
}
|
||||
|
||||
if (externalRequest.user() != null && externalRequest.user().nickname() != null
|
||||
&& !externalRequest.user().nickname().isBlank()) {
|
||||
parameters.put("nickname", externalRequest.user().nickname());
|
||||
logger.debug("Mapped 'nickname' from external request: {}", externalRequest.user().nickname());
|
||||
}
|
||||
if (externalRequest.tipo() != null) {
|
||||
parameters.put("tipo", externalRequest.tipo());
|
||||
logger.debug("Mapped 'tipo' from external request: {}", externalRequest.tipo());
|
||||
}
|
||||
|
||||
QueryParamsDTO queryParamsDTO = new QueryParamsDTO(parameters);
|
||||
|
||||
// 3. Construct the final DetectIntentRequestDTO
|
||||
return new DetectIntentRequestDTO(queryInputDTO, queryParamsDTO);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user