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
-
Authentication: Ensure that the
userId
andtoken
are valid and match an active session to avoid authentication errors. -
Filtering Data: Use the
filter
parameter to specify conditions like date ranges, call types, or other fields to refine the response data. -
Data Categorization: Metrics like
LCT
,RCMPID
, andDID
provide a granular view of call statistics, useful for analytics and operational monitoring. - Error Handling: Always check the error codes in the response for debugging issues or invalid requests.
- Real-Time Updates: The API provides real-time data updates, making it suitable for live dashboards and monitoring systems.
- Scalability: Designed to handle high call volumes with detailed counters, ensuring insights across multiple campaigns or user groups.
Ecounters
Endpoint
-
Method: POST
-
Path:
deepcall/api/v2/overallCount/Ecounters
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"
}