V 2.0

Overall Count

Description

This API is designed to monitor and manage live call data across various categories and parameters. It provides a detailed view of all active and running calls for a user or organization. The system tracks call counts in real-time, offering insights into specific call types, campaigns, IVR interactions, and more.

Error Codes

Error Code Message Description
1000 Invalid parameter One or more request parameters are invalid.
1001 Invalid data type The data type of a parameter is incorrect.
1002 UserId not provided The userId parameter is missing in the request.
1010 Error in DB connect Database connection error occurred.
1015 Permission denied User does not have permission to access this API.
1032 Internal server error An unexpected server-side error occurred.
1043 Agent is not logged in The agent is not currently logged in.

Notes

  1. Authentication: Ensure that the userId and token are valid and match an active session to avoid authentication errors.
  2. Filtering Data: Use the filter parameter to specify conditions like date ranges, call types, or other fields to refine the response data.
  3. Data Categorization: Metrics like LCT, RCMPID, and DID provide a granular view of call statistics, useful for analytics and operational monitoring.
  4. Error Handling: Always check the error codes in the response for debugging issues or invalid requests.
  5. Real-Time Updates: The API provides real-time data updates, making it suitable for live dashboards and monitoring systems.
  6. Scalability: Designed to handle high call volumes with detailed counters, ensuring insights across multiple campaigns or user groups.

Ecounters

{{brand}}/api/v2/overallCount/Ecounters

Endpoint

Description: Provides a comprehensive overview of all call counters, including live calls, running calls, and categorized counters such as DID numbers, DTMF calls, transferred calls, ghost calls, missed calls, and more.


Request Parameters

Parameter Type Required Description
ssid String No Session ID for the user's current session.
userId String Yes Unique identifier for the user.
token String Yes Authorization token for the user session.
filter Array No Array of filter conditions (e.g., date ranges, call types).
Field Array No Array of additional fields to include in the response.


Field Descriptions

Field Description
UC Unique Call
TC Approached Call
MC Missed Counts
AC Answered Count
CM Completely Missed
PM Partially Missed
CA Completely Answered
FR_CAN_FR_PM_N Retried and Answered Count Des
GH_UC Ghost Calls Unique
FR_UC FailOver Retry Unique Call
FR_CM FailOver Retry Completely Missed
FR_PM FailOver Retry Partially Missed
FR_CA FailOver Retry Completely Answered
FR_GH_UC FailOver Retry Ghost Unique Call
FR_GH_N FailOver Retry Ghost on Node
FR_UC_N Retry Counts2
FR_CM_N Retried and Missed Count
FR_PM_N Retried and Partially Missed Count
FR_CA_N Retried and Completely Answered Count
avgRingTime Average Ring Time
avgHoldTime Average Hold Time
ringTime Actual Ring Time
holdTime Actual Hold Time
actualTT Actual Talk Time
avgTalkTime Average Talk Time

Response

The response includes the following counters and their descriptions:

Field Description
LCT Total live call counts categorized as: IBD (Inbound), OBD (Outbound), BRD (Broadcast), QC (Quick).
RC Total number of active calls across all campaigns.
RCMPID Running calls grouped by campaign IDs.
LIVR Live IVR calls grouped by IVR IDs.
CMPID Total call counts grouped by campaign IDs.
DID Call counters based on DID numbers (Direct Inward Dialing).
DTMF Call counters categorized by DTMF (Dual-tone Multi-frequency signaling) input.
GHC Ghost call counter, tracking calls that were initiated but failed to connect properly.
TRSC Transferred call counter, tracking the number of calls transferred.
MC Missed call counter, tracking the number of calls not answered.
TC Total calls counter, representing the aggregate of all calls.
repeatCall Repeat call counter, tracking calls from the same number within a specific period.
freshCall Fresh call counter, tracking first-time calls from unique numbers.
CNC Connect call counter, tracking successfully connected calls.
ucBl User balance, tracking the remaining account balance for the user.

Ecounters

var axios = require('axios');
var data = '{"ssid":"{{ssid}}"}';

var config = {
 method: 'post',
 url: '{{brand}}/api/v2/overallCount/Ecounters',
 headers: { 
'Content-Length': ''
 },
 data : data
};

axios(config)
.then(function (response) {
 console.log(JSON.stringify(response.data));
})
.catch(function (error) {
 console.log(error);
});
setUrl('{{brand}}/api/v2/overallCount/Ecounters');
$request->setMethod(HTTP_Request2::METHOD_POST);
$request->setConfig(array(
 'follow_redirects' => TRUE
));
$request->setHeader(array(
 'Content-Length' => ''
));
$request->setBody('{"ssid":"{{ssid}}"}');
try {
 $response = $request->send();
 if ($response->getStatus() == 200) {
echo $response->getBody();
 }
 else {
echo 'Unexpected HTTP status: ' . $response->getStatus() . ' ' .
$response->getReasonPhrase();
 }
}
catch(HTTP_Request2_Exception $e) {
 echo 'Error: ' . $e->getMessage();
}
import http.client

conn = http.client.HTTPSConnection("{{brand}}")
payload = "{\"ssid\":\"{{ssid}}\"}"
headers = {
 'Content-Length': ''
}
conn.request("POST", "/api/v2/overallCount/Ecounters", payload, headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
var client = new RestClient("{{brand}}/api/v2/overallCount/Ecounters");
client.Timeout = -1;
var request = new RestRequest(Method.POST);
var body = @"{" + "\n" +
@"    ""ssid"":""{{ssid}}""" + "\n" +
@"}";
request.AddParameter("text/plain", body,  ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
curl --location -g --request POST '{{brand}}/api/v2/overallCount/Ecounters' \
--data-raw '{
    "ssid":"{{ssid}}"
}'
var request = http.Request('POST', Uri.parse('{{brand}}/api/v2/overallCount/Ecounters'));
request.body = '''{\n    "ssid":"{{ssid}}"\n}''';

http.StreamedResponse response = await request.send();

if (response.statusCode == 200) {
   print(await response.stream.bytesToString());
}
else {
   print(response.reasonPhrase);
}
package main

import (
   "fmt"
   "strings"
   "net/http"
   "io/ioutil"
)

func main() {

   url := "%7B%7Bbrand%7D%7D/api/v2/overallCount/Ecounters"
   method := "POST"

   payload := strings.NewReader(`{
    "ssid":"{{ssid}}"
}`)

   client := &http.Client {
   }
   req, err := http.NewRequest(method, url, payload)

   if err != nil {
      fmt.Println(err)
      return
   }
   res, err := client.Do(req)
   if err != nil {
      fmt.Println(err)
      return
   }
   defer res.Body.Close()

   body, err := ioutil.ReadAll(res.Body)
   if err != nil {
      fmt.Println(err)
      return
   }
   fmt.Println(string(body))
}
POST /api/v2/overallCount/Ecounters HTTP/1.1
Host: {{brand}}
Content-Length: 25

{
    "ssid":"{{ssid}}"
}
OkHttpClient client = new OkHttpClient().newBuilder()
   .build();
MediaType mediaType = MediaType.parse("text/plain");
RequestBody body = RequestBody.create(mediaType, "{\n    \"ssid\":\"{{ssid}}\"\n}");
Request request = new Request.Builder()
   .url("{{brand}}/api/v2/overallCount/Ecounters")
   .method("POST", body)
   .addHeader("Content-Length", "")
   .build();
Response response = client.newCall(request).execute();
var myHeaders = new Headers();
myHeaders.append("Content-Length", "");

var raw = "{\n    \"ssid\":\"{{ssid}}\"\n}";

var requestOptions = {
   method: 'POST',
   headers: myHeaders,
   body: raw,
   redirect: 'follow'
};

fetch("{{brand}}/api/v2/overallCount/Ecounters", requestOptions)
   .then(response => response.text())
   .then(result => console.log(result))
   .catch(error => console.log('error', error));
CURL *curl;
CURLcode res;
curl = curl_easy_init();
if(curl) {
   curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
   curl_easy_setopt(curl, CURLOPT_URL, "%7B%7Bbrand%7D%7D/api/v2/overallCount/Ecounters");
   curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L);
   curl_easy_setopt(curl, CURLOPT_DEFAULT_PROTOCOL, "https");
   struct curl_slist *headers = NULL;
   headers = curl_slist_append(headers, "Content-Length: ");
   curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
   const char *data = "{\n    \"ssid\":\"{{ssid}}\"\n}";
   curl_easy_setopt(curl, CURLOPT_POSTFIELDS, data);
   res = curl_easy_perform(curl);
}
curl_easy_cleanup(curl);
#import 

dispatch_semaphore_t sema = dispatch_semaphore_create(0);

NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"%7B%7Bbrand%7D%7D/api/v2/overallCount/Ecounters"]
   cachePolicy:NSURLRequestUseProtocolCachePolicy
   timeoutInterval:10.0];
NSDictionary *headers = @{
   @"Content-Length": @""
};

[request setAllHTTPHeaderFields:headers];
NSData *postData = [[NSData alloc] initWithData:[@"{\n    \"ssid\":\"{{ssid}}\"\n}" dataUsingEncoding:NSUTF8StringEncoding]];
[request setHTTPBody:postData];

[request setHTTPMethod:@"POST"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *dataTask = [session dataTaskWithRequest:request
completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
   if (error) {
      NSLog(@"%@", error);
      dispatch_semaphore_signal(sema);
   } else {
      NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *) response;
      NSError *parseError = nil;
      NSDictionary *responseDictionary = [NSJSONSerialization JSONObjectWithData:data options:0 error:&parseError];
      NSLog(@"%@",responseDictionary);
      dispatch_semaphore_signal(sema);
   }
}];
[dataTask resume];
dispatch_semaphore_wait(sema, DISPATCH_TIME_FOREVER);
open Lwt
open Cohttp
open Cohttp_lwt_unix

let postData = ref "{\n    \"ssid\":\"{{ssid}}\"\n}";;

let reqBody = 
   let uri = Uri.of_string "%7B%7Bbrand%7D%7D/api/v2/overallCount/Ecounters" in
   let headers = Header.init ()
      |> fun h -> Header.add h "Content-Length" ""
   in
   let body = Cohttp_lwt.Body.of_string !postData in

   Client.call ~headers ~body `POST uri >>= fun (_resp, body) ->
   body |> Cohttp_lwt.Body.to_string >|= fun body -> body

let () =
   let respBody = Lwt_main.run reqBody in
   print_endline (respBody)
$headers = New-Object "System.Collections.Generic.Dictionary[[String],[String]]"
$headers.Add("Content-Length", "")

$body = "{`n    `"ssid`":`"{{ssid}}`"`n}"

$response = Invoke-RestMethod '{{brand}}/api/v2/overallCount/Ecounters' -Method 'POST' -Headers $headers -Body $body
$response | ConvertTo-Json
require "uri"
require "net/http"

url = URI("{{brand}}/api/v2/overallCount/Ecounters")

http = Net::HTTP.new(url.host, url.port);
request = Net::HTTP::Post.new(url)
request["Content-Length"] = ""
request.body = "{\n    \"ssid\":\"{{ssid}}\"\n}"

response = http.request(request)
puts response.read_body
printf '{
    "ssid":"{{ssid}}"
}'| http  --follow --timeout 3600 POST '{{brand}}/api/v2/overallCount/Ecounters' \
 Content-Length:
import Foundation
#if canImport(FoundationNetworking)
import FoundationNetworking
#endif

var semaphore = DispatchSemaphore (value: 0)

let parameters = "{\n    \"ssid\":\"{{ssid}}\"\n}"
let postData = parameters.data(using: .utf8)

var request = URLRequest(url: URL(string: "{{brand}}/api/v2/overallCount/Ecounters")!,timeoutInterval: Double.infinity)
request.addValue("", forHTTPHeaderField: "Content-Length")

request.httpMethod = "POST"
request.httpBody = postData

let task = URLSession.shared.dataTask(with: request) { data, response, error in 
   guard let data = data else {
      print(String(describing: error))
      semaphore.signal()
      return
   }
   print(String(data: data, encoding: .utf8)!)
   semaphore.signal()
}

task.resume()
semaphore.wait()

Example Response

 [{"key":"Date"
"value":"Wed
 27 Nov 2024 06:53:38 GMT"}
{"key":"Content-Type"
"value":"application\/json; charset=utf-8"}
{"key":"Content-Length"
"value":"282"}
{"key":"Connection"
"value":"keep-alive"}
{"key":"Access-Control-Allow-Origin"
"value":"*"}
{"key":"Access-Control-Allow-Methods"
"value":"POST
 GET
 OPTIONS
 PATCH
 DELETE"}
{"key":"Access-Control-Allow-Headers"
"value":"X-Requested-With
content-type"}
{"key":"Access-Control-Allow-Credentials"
"value":"true"}
{"key":"Vary"
"value":"Origin"}
{"key":"ETag"
"value":"W\/\"11a-HFF66YNcSs5WoIJy6+TSUnmUgDk\""}
{"key":"Strict-Transport-Security"
"value":"max-age=31536000; includeSubDomains"}]
 {
    "message": {
        "LCT": {},
        "RCMPID": {},
        "RC": 0,
        "LIVR": {},
        "LDID": {},
        "cBl": 0,
        "CT": {
            "CTC": 2
        },
        "CST": {
            "3": 1,
            "6": 1
        },
        "CMPID": {},
        "DID": {},
        "DTMF": {},
        "DTMFV": {},
        "DTMFI": {},
        "DTMFINV": {},
        "GHC": 0,
        "FWC": 0,
        "TRSC": 2,
        "MC": 0,
        "ucBl": 0,
        "TC": 2,
        "repeatCall": 0,
        "freshCall": 2,
        "CHSR": 0,
        "CNC": 2
    },
    "status": "success"
}