From c0fe9c686737db22d8e53f393eff2408a8cfffd8 Mon Sep 17 00:00:00 2001 From: Vanitha S <116701245+vanitha1822@users.noreply.github.com> Date: Mon, 2 Mar 2026 16:27:27 +0530 Subject: [PATCH 1/2] 1097 Abandon call real time data (#365) * fix: integrate API for get disposition count * fix: respnse structure * fix: coderabbit comments --- ...omputerTelephonyIntegrationController.java | 18 +++++++- .../data/cti/DispositionCountRequest.java | 11 +++++ .../data/cti/DispositionCountResponse.java | 43 +++++++++++++++++++ .../iemr/common/service/cti/CTIService.java | 2 + .../common/service/cti/CTIServiceImpl.java | 27 ++++++++++++ src/main/resources/application.properties | 3 ++ 6 files changed, 103 insertions(+), 1 deletion(-) create mode 100644 src/main/java/com/iemr/common/data/cti/DispositionCountRequest.java create mode 100644 src/main/java/com/iemr/common/data/cti/DispositionCountResponse.java diff --git a/src/main/java/com/iemr/common/controller/cti/ComputerTelephonyIntegrationController.java b/src/main/java/com/iemr/common/controller/cti/ComputerTelephonyIntegrationController.java index 711019eb..0cf01777 100644 --- a/src/main/java/com/iemr/common/controller/cti/ComputerTelephonyIntegrationController.java +++ b/src/main/java/com/iemr/common/controller/cti/ComputerTelephonyIntegrationController.java @@ -21,7 +21,6 @@ */ package com.iemr.common.controller.cti; - import javax.ws.rs.core.MediaType; import org.slf4j.Logger; @@ -522,4 +521,21 @@ public String getIVRSPathDetails(@Param("{\"agent_id\":\"Integer\"}") @RequestBo logger.info("getIVRSPathDetails sending response " + response); return response.toString(); } + + @Operation(summary = "Get disposition count for campaign") + @RequestMapping(value = "/getDispositionCount", method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON, produces = MediaType.APPLICATION_JSON, headers = "Authorization") + public String getDispositionCount(@RequestBody String request, HttpServletRequest serverRequest) { + OutputResponse response = new OutputResponse(); + try { + String remoteAddress = serverRequest.getHeader("X-FORWARDED-FOR"); + if (remoteAddress == null || remoteAddress.trim().length() == 0) { + remoteAddress = serverRequest.getRemoteAddr(); + } + response = ctiService.getDispositionCount(request, remoteAddress); + } catch (Exception e) { + logger.error("getDispositionCount failed with error " + e.getMessage(), e); + response.setError(e); + } + return response.toString(); + } } diff --git a/src/main/java/com/iemr/common/data/cti/DispositionCountRequest.java b/src/main/java/com/iemr/common/data/cti/DispositionCountRequest.java new file mode 100644 index 00000000..8c72d323 --- /dev/null +++ b/src/main/java/com/iemr/common/data/cti/DispositionCountRequest.java @@ -0,0 +1,11 @@ +package com.iemr.common.data.cti; +import lombok.Data; + +@Data +public class DispositionCountRequest { + private String transaction_id = "CTI_GET_DISP_COUNT"; + private String campaign_name; + private String disposition; + private String date; + private String enc_flag; +} \ No newline at end of file diff --git a/src/main/java/com/iemr/common/data/cti/DispositionCountResponse.java b/src/main/java/com/iemr/common/data/cti/DispositionCountResponse.java new file mode 100644 index 00000000..858b7e00 --- /dev/null +++ b/src/main/java/com/iemr/common/data/cti/DispositionCountResponse.java @@ -0,0 +1,43 @@ +package com.iemr.common.data.cti; +import lombok.Data; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.google.gson.annotations.Expose; +import java.util.List; + +@Data +@JsonIgnoreProperties(ignoreUnknown = true) +public class DispositionCountResponse { + @Expose + private String status; + + @Expose + private Integer code; + + @Expose + private String failure_reason; + + @Expose + private Object data; + + // Inner class for campaign data + @Data + @JsonIgnoreProperties(ignoreUnknown = true) + public static class CampaignData { + @Expose + private String campaign_name; + + @Expose + private List dispositions; + } + + // Inner class for disposition detail + @Data + @JsonIgnoreProperties(ignoreUnknown = true) + public static class DispositionDetail { + @Expose + private String call_status_disposition; + + @Expose + private String disposition_count; + } +} diff --git a/src/main/java/com/iemr/common/service/cti/CTIService.java b/src/main/java/com/iemr/common/service/cti/CTIService.java index cef53ebf..e980cc4c 100644 --- a/src/main/java/com/iemr/common/service/cti/CTIService.java +++ b/src/main/java/com/iemr/common/service/cti/CTIService.java @@ -94,4 +94,6 @@ public interface CTIService OutputResponse getIVRSPathDetails(String request, String remoteAddress)throws Exception; OutputResponse getVoiceFileNew(String request, String remoteAddr) throws IEMRException, JSONException; + + OutputResponse getDispositionCount(String request, String ipAddress) throws IEMRException, JSONException, JsonMappingException, JsonProcessingException; } diff --git a/src/main/java/com/iemr/common/service/cti/CTIServiceImpl.java b/src/main/java/com/iemr/common/service/cti/CTIServiceImpl.java index 81d8953a..27dc68c5 100644 --- a/src/main/java/com/iemr/common/service/cti/CTIServiceImpl.java +++ b/src/main/java/com/iemr/common/service/cti/CTIServiceImpl.java @@ -52,6 +52,8 @@ import com.iemr.common.data.cti.CampaignRole; import com.iemr.common.data.cti.CampaignSkills; import com.iemr.common.data.cti.CustomerLanguage; +import com.iemr.common.data.cti.DispositionCountRequest; +import com.iemr.common.data.cti.DispositionCountResponse; import com.iemr.common.data.cti.TransferCall; import com.iemr.common.repository.callhandling.BeneficiaryCallRepository; import com.iemr.common.repository.callhandling.IEMRCalltypeRepositoryImplCustom; @@ -962,7 +964,9 @@ public OutputResponse customerPreferredLanguage(CustomerLanguage custLang, Strin @Override public String callPostUrl(String urlRequest, String Json) { + logger.info("From call post URL method.. URL: " + urlRequest + " Json: " + Json); String result = httpUtils.post(urlRequest, Json); + logger.info("From call post URL method.. result: " + result); return result; } @@ -1084,4 +1088,27 @@ public OutputResponse getIVRSPathDetails(String request, String remoteAddress) t return result; } + + @Override +public OutputResponse getDispositionCount(String request, String ipAddress) throws IEMRException, JSONException, JsonMappingException, JsonProcessingException { + + OutputResponse output = new OutputResponse(); + ObjectMapper objectMapper = new ObjectMapper(); + String ctiURI = ConfigProperties.getPropertyByName("get-disposition-count-URL"); + String serverURL = ConfigProperties.getPropertyByName("cti-server-ip"); + DispositionCountRequest dispositionRequest = objectMapper.readValue(request, DispositionCountRequest.class); + + ctiURI = ctiURI.replace("CTI_SERVER", serverURL); + + String response = this.callPostUrl(ctiURI, objectMapper.writeValueAsString(dispositionRequest)); + + DispositionCountResponse result = objectMapper.readValue(response, DispositionCountResponse.class); + + if (result.getCode() != null && result.getCode().toString().equals(CUSTOM_API_SUCCESS)) { + output.setResponse(objectMapper.writeValueAsString(result)); + } else { + output.setError(OutputResponse.GENERIC_FAILURE, result.getFailure_reason(), result.getStatus()); + } + return output; +} } diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index fef088ff..4ce65cad 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -71,6 +71,9 @@ get-agent-summary-report-URL=http://CTI_SERVER/apps/customize_apps/piramil_repor ## agent summary report API get-details-call-report-URL=http://CTI_SERVER/apps/customize_apps/piramil_reports.php?report_type=acd&format=json&end_date=END_DATE&start_date=START_DATE +##1097 abandoned call report API +get-disposition-count-URL=http://CTI_SERVER/apps/CZUtilAPI.php + #============================================================================ # Configure Main Scheduler Properties #============================================================================ From 8dd19e105d3c07299164522dc0b01946bccded1b Mon Sep 17 00:00:00 2001 From: Vanitha S <116701245+vanitha1822@users.noreply.github.com> Date: Thu, 12 Mar 2026 11:48:13 +0530 Subject: [PATCH 2/2] fix: fetch from .env (#369) --- .../common/service/cti/CTIServiceImpl.java | 67 +++++++++++++------ 1 file changed, 46 insertions(+), 21 deletions(-) diff --git a/src/main/java/com/iemr/common/service/cti/CTIServiceImpl.java b/src/main/java/com/iemr/common/service/cti/CTIServiceImpl.java index 27dc68c5..75aae0f1 100644 --- a/src/main/java/com/iemr/common/service/cti/CTIServiceImpl.java +++ b/src/main/java/com/iemr/common/service/cti/CTIServiceImpl.java @@ -26,6 +26,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service; @@ -95,6 +96,9 @@ public class CTIServiceImpl implements CTIService { @Autowired private CTIService ctiService; + @Value("${cti-server-ip}") + private String serverURL; + @Autowired private IEMRCalltypeRepositoryImplCustom iemrCalltypeRepositoryImplCustom; @@ -116,7 +120,8 @@ public OutputResponse addUpdateAgentSkills(String request, String ipAddress) thr ObjectMapper objectMapper = new ObjectMapper(); logger.debug("addUpdateAgentSkills input is " + request); String ctiURI = ConfigProperties.getPropertyByName("add-update-agent-skills-URL"); - String serverURL = ConfigProperties.getPropertyByName("cti-server-ip"); + // // String serverURL = ConfigProperties.getPropertyByName("cti-server-ip"); + AgentSkills agentSkills = objectMapper.readValue(request, AgentSkills.class); String agentID = (agentSkills.getAgentID() != null) ? agentSkills.getAgentID() : ""; @@ -148,7 +153,8 @@ public OutputResponse getCampaignSkills(String request, String ipAddress) throws OutputResponse output = new OutputResponse(); ObjectMapper objectMapper = new ObjectMapper(); String ctiURI = ConfigProperties.getPropertyByName("get-campaign-skills-URL"); - String serverURL = ConfigProperties.getPropertyByName("cti-server-ip"); + // // String serverURL = ConfigProperties.getPropertyByName("cti-server-ip"); + CampaignSkills agentState = objectMapper.readValue(request, CampaignSkills.class); ctiURI = ctiURI.replace("CTI_SERVER", serverURL); ctiURI = ctiURI.replace("CAMPAIGN_NAME", @@ -175,7 +181,8 @@ public OutputResponse getAgentState(String request, String ipAddress) throws IEM OutputResponse output = new OutputResponse(); ObjectMapper objectMapper = new ObjectMapper(); String ctiURI = ConfigProperties.getPropertyByName("get-agent-status-URL"); - String serverURL = ConfigProperties.getPropertyByName("cti-server-ip"); + // // String serverURL = ConfigProperties.getPropertyByName("cti-server-ip"); + AgentState agentState = objectMapper.readValue(request, AgentState.class); String agentID = (agentState.getAgent_id() != null) ? agentState.getAgent_id() : ""; @@ -205,7 +212,8 @@ public OutputResponse getAgentCallStats(String request, String ipAddress) throws OutputResponse output = new OutputResponse(); ObjectMapper objectMapper = new ObjectMapper(); String ctiURI = ConfigProperties.getPropertyByName("get-agent-call-stats-URL"); - String serverURL = ConfigProperties.getPropertyByName("cti-server-ip"); + // // String serverURL = ConfigProperties.getPropertyByName("cti-server-ip"); + AgentCallStats agentState = objectMapper.readValue(request, AgentCallStats.class); String agentID = (agentState.getAgentID() != null) ? agentState.getAgentID() : ""; @@ -237,7 +245,8 @@ public OutputResponse getCampaignNames(String request, String ipAddress) throws OutputResponse output = new OutputResponse(); ObjectMapper objectMapper = new ObjectMapper(); String ctiURI = ConfigProperties.getPropertyByName("get-campaign-name-URL"); - String serverURL = ConfigProperties.getPropertyByName("cti-server-ip"); + // // String serverURL = ConfigProperties.getPropertyByName("cti-server-ip"); + CampaignNames agentState = objectMapper.readValue(request, CampaignNames.class); ctiURI = ctiURI.replace("CTI_SERVER", serverURL); ctiURI = ctiURI.replace("SEARCH_KEY", (agentState.getServiceName() != null) ? agentState.getServiceName() : ""); @@ -264,7 +273,8 @@ public OutputResponse doAgentLogin(String request, String ipAddress) throws IEMR OutputResponse output = new OutputResponse(); ObjectMapper objectMapper = new ObjectMapper(); String ctiURI = ConfigProperties.getPropertyByName("do-agent-login-URL"); - String serverURL = ConfigProperties.getPropertyByName("cti-server-ip"); + // // String serverURL = ConfigProperties.getPropertyByName("cti-server-ip"); + AgentState agentState = objectMapper.readValue(request, AgentState.class); String agentID = (agentState.getAgent_id() != null) ? agentState.getAgent_id() : ""; @@ -294,7 +304,8 @@ public OutputResponse getLoginKey(String request, String ipAddress) throws IEMRE OutputResponse output = new OutputResponse(); ObjectMapper objectMapper = new ObjectMapper(); String ctiURI = ConfigProperties.getPropertyByName("get-login-key-URL"); - String serverURL = ConfigProperties.getPropertyByName("cti-server-ip"); + // // String serverURL = ConfigProperties.getPropertyByName("cti-server-ip"); + AgentLoginKey agentState = objectMapper.readValue(request, AgentLoginKey.class); String decryptPassword = null; @@ -327,7 +338,8 @@ public OutputResponse agentLogout(String request, String ipAddress) throws IEMRE OutputResponse output = new OutputResponse(); ObjectMapper objectMapper = new ObjectMapper(); String ctiURI = ConfigProperties.getPropertyByName("do-agent-logout-URL"); - String serverURL = ConfigProperties.getPropertyByName("cti-server-ip"); + // // String serverURL = ConfigProperties.getPropertyByName("cti-server-ip"); + AgentState agentState = objectMapper.readValue(request, AgentState.class); String agentID = (agentState.getAgent_id() != null) ? agentState.getAgent_id() : ""; @@ -359,7 +371,8 @@ public OutputResponse getOnlineAgents(String request, String ipAddress) throws I OutputResponse output = new OutputResponse(); ObjectMapper objectMapper = new ObjectMapper(); String ctiURI = ConfigProperties.getPropertyByName("do-online-agent-URL"); - String serverURL = ConfigProperties.getPropertyByName("cti-server-ip"); + // // String serverURL = ConfigProperties.getPropertyByName("cti-server-ip"); + AgentState agentState = objectMapper.readValue(request, AgentState.class); String agentID = (agentState.getAgent_id() != null) ? agentState.getAgent_id() : ""; @@ -390,7 +403,8 @@ public OutputResponse callBeneficiary(String request, String ipAddress) throws I OutputResponse output = new OutputResponse(); ObjectMapper objectMapper = new ObjectMapper(); String ctiURI = ConfigProperties.getPropertyByName("call-beneficiary-URL"); - String serverURL = ConfigProperties.getPropertyByName("cti-server-ip"); + // // String serverURL = ConfigProperties.getPropertyByName("cti-server-ip"); + CallBeneficiary agentState = objectMapper.readValue(request, CallBeneficiary.class); String agentID = (agentState.getAgent_id() != null) ? agentState.getAgent_id() : ""; @@ -431,7 +445,8 @@ public OutputResponse addUpdateUserData(String request, String ipAddress) throws * SESSION_TIMEOUT&designation=DESIGNATION&resFormat=3 */ - String serverURL = ConfigProperties.getPropertyByName("cti-server-ip"); + // String serverURL = ConfigProperties.getPropertyByName("cti-server-ip"); + CTIUser ctiUser = objectMapper.readValue(request, CTIUser.class); ctiURI = ctiURI.replace("CTI_SERVER", serverURL); ctiURI = ctiURI.replace("USERNAME", (ctiUser.getUsername() != null) ? ctiUser.getUsername() : ""); @@ -463,7 +478,8 @@ public OutputResponse getTransferCampaigns(String request, String ipAddress) thr OutputResponse output = new OutputResponse(); ObjectMapper objectMapper = new ObjectMapper(); String ctiURI = ConfigProperties.getPropertyByName("fetch-transferrable-campaigns-URL"); - String serverURL = ConfigProperties.getPropertyByName("cti-server-ip"); + // String serverURL = ConfigProperties.getPropertyByName("cti-server-ip"); + CTICampaigns agentState = objectMapper.readValue(request, CTICampaigns.class); String agentID = (agentState.getAgent_id() != null) ? agentState.getAgent_id() : ""; @@ -495,7 +511,8 @@ public OutputResponse getCampaignRoles(String request, String remoteAddr) throws OutputResponse output = new OutputResponse(); ObjectMapper objectMapper = new ObjectMapper(); String ctiURI = ConfigProperties.getPropertyByName("get-campaign-roles-URL"); - String serverURL = ConfigProperties.getPropertyByName("cti-server-ip"); + // String serverURL = ConfigProperties.getPropertyByName("cti-server-ip"); + CampaignRole campaign = objectMapper.readValue(request, CampaignRole.class); ctiURI = ctiURI.replace("CTI_SERVER", serverURL); ctiURI = ctiURI.replace("CAMPAIGN_NAME", (campaign.getCampaign() != null) ? campaign.getCampaign() : ""); @@ -527,7 +544,8 @@ public OutputResponse setCallDisposition(String request, String remoteAddr) thro String agentIP = !agentIPResp.equals(DEFAULT_IP) ? agentIPResp : remoteAddr; String ctiURI = ConfigProperties.getPropertyByName("update-call-disposition-URL"); - String serverURL = ConfigProperties.getPropertyByName("cti-server-ip"); + // String serverURL = ConfigProperties.getPropertyByName("cti-server-ip"); + ctiURI = ctiURI.replace("CTI_SERVER", serverURL); ctiURI = ctiURI.replace("AGENT_ID", agentID); ctiURI = ctiURI.replace("AGENT_IP", agentIP); @@ -555,7 +573,8 @@ public OutputResponse createVoiceFile(String request, String remoteAddr) throws ObjectMapper objectMapper = new ObjectMapper(); CTIVoiceFile disposition = objectMapper.readValue(request, CTIVoiceFile.class); String ctiURI = ConfigProperties.getPropertyByName("mix-voice-file-URL"); - String serverURL = ConfigProperties.getPropertyByName("cti-server-ip"); + // String serverURL = ConfigProperties.getPropertyByName("cti-server-ip"); + ctiURI = ctiURI.replace("CTI_SERVER", serverURL); ctiURI = ctiURI.replace("AGENT_ID", (disposition.getAgent_id() != null) ? disposition.getAgent_id() : ""); // ctiURI = ctiURI.replace("AGENT_IP", remoteAddr); @@ -580,7 +599,8 @@ public OutputResponse getVoiceFile(String request, String remoteAddr) throws IEM ObjectMapper objectMapper = new ObjectMapper(); CTIVoiceFile disposition = objectMapper.readValue(request, CTIVoiceFile.class); String ctiURI = ConfigProperties.getPropertyByName("get-voice-file-URL"); - String serverURL = ConfigProperties.getPropertyByName("cti-server-ip"); + // String serverURL = ConfigProperties.getPropertyByName("cti-server-ip"); + ctiURI = ctiURI.replace("CTI_SERVER", serverURL); ctiURI = ctiURI.replace("AGENT_ID", (disposition.getAgent_id() != null) ? disposition.getAgent_id() : ""); // ctiURI = ctiURI.replace("AGENT_IP", remoteAddr); @@ -606,7 +626,8 @@ public OutputResponse getVoiceFileNew(String request, String remoteAddr) throws OutputResponse output = new OutputResponse(); CTIVoiceFile disposition = InputMapper.gson().fromJson(request, CTIVoiceFile.class); String ctiURI = ConfigProperties.getPropertyByName("get-voice-file-URL-New"); - String serverURL = ConfigProperties.getPropertyByName("cti-server-ip"); + // String serverURL = ConfigProperties.getPropertyByName("cti-server-ip"); + ctiURI = ctiURI.replace("CTI_SERVER", serverURL); ctiURI = ctiURI.replace("AGENT_ID", (disposition.getAgent_id() != null) ? disposition.getAgent_id() : ""); // ctiURI = ctiURI.replace("AGENT_IP", remoteAddr); @@ -975,7 +996,8 @@ public OutputResponse addAutoDialNumbers(String request, String ipAddress) throw OutputResponse result = new OutputResponse(); logger.debug("addUpdateAgentSkills input is " + request); String ctiURI = ConfigProperties.getPropertyByName("add-auto-dail-numbers-URL"); - String serverURL = ConfigProperties.getPropertyByName("cti-server-ip"); + // String serverURL = ConfigProperties.getPropertyByName("cti-server-ip"); + ObjectMapper objectMapper = new ObjectMapper(); AutoPreviewDial[] autoPreviewDialArray = objectMapper.readValue(request, AutoPreviewDial[].class); @@ -1016,7 +1038,8 @@ public OutputResponse setAutoDialNumbers(String request, String ipAddress) throw OutputResponse result = new OutputResponse(); logger.debug("setAutoDialNumbers input is " + request); String ctiURI = ConfigProperties.getPropertyByName("set-auto-dail-numbers-URL"); - String serverURL = ConfigProperties.getPropertyByName("cti-server-ip"); + // String serverURL = ConfigProperties.getPropertyByName("cti-server-ip"); + ObjectMapper objectMapper = new ObjectMapper(); AutoPreviewDial autoPreviewDial = objectMapper.readValue(request, AutoPreviewDial.class); @@ -1059,7 +1082,8 @@ public OutputResponse getIVRSPathDetails(String request, String remoteAddress) t OutputResponse result = new OutputResponse(); logger.debug("getZoneDetails input is " + request); String ctiURI = ConfigProperties.getPropertyByName("agent-ivrs-path-URL"); - String serverURL = ConfigProperties.getPropertyByName("cti-server-ip"); + // String serverURL = ConfigProperties.getPropertyByName("cti-server-ip"); + ObjectMapper objectMapper = new ObjectMapper(); AgentState zoneData = objectMapper.readValue(request, AgentState.class); @@ -1095,7 +1119,8 @@ public OutputResponse getDispositionCount(String request, String ipAddress) thro OutputResponse output = new OutputResponse(); ObjectMapper objectMapper = new ObjectMapper(); String ctiURI = ConfigProperties.getPropertyByName("get-disposition-count-URL"); - String serverURL = ConfigProperties.getPropertyByName("cti-server-ip"); + // // String serverURL = ConfigProperties.getPropertyByName("cti-server-ip"); + DispositionCountRequest dispositionRequest = objectMapper.readValue(request, DispositionCountRequest.class); ctiURI = ctiURI.replace("CTI_SERVER", serverURL);