From 2f66200f5afb08fe7cfed4b1f17ea8b9fbe6a9c7 Mon Sep 17 00:00:00 2001 From: vanitha1822 Date: Mon, 9 Feb 2026 14:37:42 +0530 Subject: [PATCH 1/2] fix: integrate API for get disposition count --- ...omputerTelephonyIntegrationController.java | 20 ++++++++- .../data/cti/DispositionCountRequest.java | 11 +++++ .../data/cti/DispositionCountResponse.java | 41 +++++++++++++++++++ .../iemr/common/service/cti/CTIService.java | 2 + .../common/service/cti/CTIServiceImpl.java | 32 +++++++++++++++ src/main/resources/application.properties | 7 +++- 6 files changed, 110 insertions(+), 3 deletions(-) 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..b9e94650 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,23 @@ 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(); + logger.info("getDispositionCount received a request " + request); + try { + String remoteAddress = serverRequest.getHeader("X-FORWARDED-FOR"); + if (remoteAddress == null || remoteAddress.trim().length() == 0) { + remoteAddress = serverRequest.getRemoteAddr(); + } + logger.info("Remote Address: " + remoteAddress); + 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..cb77bbd1 --- /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_id; + 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..59439163 --- /dev/null +++ b/src/main/java/com/iemr/common/data/cti/DispositionCountResponse.java @@ -0,0 +1,41 @@ +package com.iemr.common.data.cti; +import lombok.Data; +import com.google.gson.annotations.Expose; +import java.util.List; + +@Data +public class DispositionCountResponse { + @Expose + private CTIResponse response; + + @Expose + private Integer count; + + @Expose + private String campaign_id; + + @Expose + private String disposition; + + @Expose + private String date; + + @Expose + private List dispositionData; + + @Expose + private String encryptedData; // for enc_flag = "1" + + // Inner class for detailed disposition data + @Data + public static class DispositionData { + @Expose + private String disposition; + + @Expose + private Integer count; + + @Expose + private String date; + } +} \ No newline at end of file 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..031cf503 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,32 @@ 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"); + logger.info("Request="+request + ":: CTI URL="+ ctiURI + ":: Server URL="+ serverURL); + DispositionCountRequest dispositionRequest = objectMapper.readValue(request, DispositionCountRequest.class); + + ctiURI = ctiURI.replace("CTI_SERVER", serverURL); + + logger.info("calling disposition count URL: " + ctiURI); + logger.info("disposition Request="+dispositionRequest.toString()); + String response = this.callPostUrl(ctiURI, dispositionRequest.toString()); + logger.info("disposition count API returned: " + response); + + DispositionCountResponse result = objectMapper.readValue(response, DispositionCountResponse.class); + CTIResponse ctiResponse = result.getResponse(); + + if (ctiResponse.getResponse_code().equals(CUSTOM_API_SUCCESS)) { + output.setResponse(result.toString()); + } else { + output.setError(OutputResponse.GENERIC_FAILURE, ctiResponse.getReason(), ctiResponse.getStatus()); + } + return output; +} } diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 868ab464..0437282d 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 #============================================================================ @@ -189,8 +192,8 @@ km-guest-user=guest km-guest-password=guest # CTI Config -cti-server-ip=10.208.122.99 -cti-logger_base_url=http://10.208.122.99/logger +cti-server-ip=192.168.45.55 +cti-logger_base_url=http://192.168.45.55/logger sms-gateway-url = #Encryption passphrase used by AESUtil for decrypting CTI passwords. From 3b9b606026aad787bf74e79c51f84ed859067999 Mon Sep 17 00:00:00 2001 From: vanitha1822 Date: Tue, 24 Feb 2026 17:12:38 +0530 Subject: [PATCH 2/2] fix: respnse structure --- .../data/cti/DispositionCountRequest.java | 2 +- .../data/cti/DispositionCountResponse.java | 74 ++++++++++--------- .../common/service/cti/CTIServiceImpl.java | 17 ++--- 3 files changed, 46 insertions(+), 47 deletions(-) diff --git a/src/main/java/com/iemr/common/data/cti/DispositionCountRequest.java b/src/main/java/com/iemr/common/data/cti/DispositionCountRequest.java index cb77bbd1..8c72d323 100644 --- a/src/main/java/com/iemr/common/data/cti/DispositionCountRequest.java +++ b/src/main/java/com/iemr/common/data/cti/DispositionCountRequest.java @@ -4,7 +4,7 @@ @Data public class DispositionCountRequest { private String transaction_id = "CTI_GET_DISP_COUNT"; - private String campaign_id; + private String campaign_name; private String disposition; private String date; private String enc_flag; diff --git a/src/main/java/com/iemr/common/data/cti/DispositionCountResponse.java b/src/main/java/com/iemr/common/data/cti/DispositionCountResponse.java index 59439163..858b7e00 100644 --- a/src/main/java/com/iemr/common/data/cti/DispositionCountResponse.java +++ b/src/main/java/com/iemr/common/data/cti/DispositionCountResponse.java @@ -1,41 +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 -public class DispositionCountResponse { - @Expose - private CTIResponse response; - - @Expose - private Integer count; - - @Expose - private String campaign_id; - - @Expose - private String disposition; - - @Expose - private String date; - - @Expose - private List dispositionData; - - @Expose - private String encryptedData; // for enc_flag = "1" - - // Inner class for detailed disposition data - @Data - public static class DispositionData { - @Expose - private String disposition; - - @Expose - private Integer count; - - @Expose - private String date; - } -} \ No newline at end of file +@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/CTIServiceImpl.java b/src/main/java/com/iemr/common/service/cti/CTIServiceImpl.java index 031cf503..da16c978 100644 --- a/src/main/java/com/iemr/common/service/cti/CTIServiceImpl.java +++ b/src/main/java/com/iemr/common/service/cti/CTIServiceImpl.java @@ -1101,18 +1101,15 @@ public OutputResponse getDispositionCount(String request, String ipAddress) thro ctiURI = ctiURI.replace("CTI_SERVER", serverURL); - logger.info("calling disposition count URL: " + ctiURI); - logger.info("disposition Request="+dispositionRequest.toString()); - String response = this.callPostUrl(ctiURI, dispositionRequest.toString()); + String response = this.callPostUrl(ctiURI, objectMapper.writeValueAsString(dispositionRequest)); logger.info("disposition count API returned: " + response); - DispositionCountResponse result = objectMapper.readValue(response, DispositionCountResponse.class); - CTIResponse ctiResponse = result.getResponse(); - - if (ctiResponse.getResponse_code().equals(CUSTOM_API_SUCCESS)) { - output.setResponse(result.toString()); - } else { - output.setError(OutputResponse.GENERIC_FAILURE, ctiResponse.getReason(), ctiResponse.getStatus()); + 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; }