V 2.0
Queue
Description
The Queue API provides functionality to retrieve and manage queue-related data in a call center environment. It offers detailed information about ongoing calls, agent statuses, and various queue metrics. This API is essential for call center managers and supervisors to monitor and analyze queue performance in real-time.
Authentication
All endpoints require authentication using either:
- A session ID (SSID), or
 - A combination of User ID and Token
 
Ensure that you provide the necessary authentication parameters with each request.
Authentication Methods
- 
Session ID Authentication
- Use the 
ssidparameter - Provides a quick and simple authentication method
 
 - Use the 
 - 
User ID and Token Authentication
- Requires both 
userIdandtokenparameters - Offers more granular access control
 
 - Requires both 
 
Error Codes
Queue API Specific Error Codes
| Error Code | Description | Potential Cause | Recommended Action | 
|---|---|---|---|
| 1501 | Data already in processing | A similar request is currently being processed | Wait and retry the request after a short interval | 
| 1502 | Invalid filter value | The provided filter parameters are incorrect or malformed | Review and correct the filter parameters | 
Additional Error Handling Guidelines
- Always check the response status before processing the data
 - Implement error handling mechanisms in your application
 - Log error codes for troubleshooting and monitoring
 - Consult the main SarvErrors documentation for comprehensive error code references
 
Best Practices
- Validate all input parameters before making a request
 - Handle potential authentication failures
 - Implement appropriate error handling and retry mechanisms
 - Use the most specific authentication method for your use case
 - Be mindful of request frequency to prevent server overload
 
Recommendation
For a complete understanding of all possible error codes and their implications, refer to the comprehensive SarvErrors documentation.
The documentation now provides a clear, structured overview of the Queue API's error handling, authentication methods, and best practices. The error codes table includes additional context like potential causes and recommended actions to help developers better understand and resolve issues.
list
Endpoint
- Method: POST
 - 
Path: 
deepcall/api/v2/queue/list 
Description
The /list/ endpoint is a sophisticated API interface designed for call center data retrieval, offering flexible and powerful querying capabilities. It allows users to fetch detailed call center metrics with granular control over data filtering, pagination, and module selection.
Key Features
- 
Flexible authentication methods
 - 
Advanced filtering capabilities
 - 
Modular data retrieval
 - 
Pagination support
 - 
Real-time data aggregation
 
I'll present the request and response details in a structured table format.
Request Parameters Table
| Field | Value | Type | Description | 
|---|---|---|---|
userId | 
"78987211" | String | User identification number | 
token | 
"a1b2c3d4e5f6g7h8i9j0" | String | Authentication token | 
filter | 
[{"key": "date", "op": "gte", "val": "2023-06-01"}, {"key": "date", "op": "lte", "val": "2023-06-30"}] | Array | Date range filter | 
page | 
0 | Number | First page of results | 
size | 
20 | Number | Number of entries per page | 
Modules | 
["queueDuration", "summary", "agent", "calls"] | Array | Selected data modules | 
summarytype | 
"pending" | String | Type of summary requested | 
Response Parameters Table
| Main Field | Subfield | Example Value | Type | Description | 
|---|---|---|---|---|
data | 
queueDuration | 
[{"averageWaitTime": 45, "maxWaitTime": 120, "totalCalls": 250}] | Array | Queue waiting time statistics | 
summary | 
{"totalCalls": 500, "activeCalls": 75, "pendingCalls": 25, "averageHandleTime": 360} | Object | Overall call center summary | |
agent | 
[{"agentId": "A001", "name": "John Doe", "status": "Available", "callsHandled": 32, "averageHandleTime": 420}] | Array | Agent performance details | |
calls | 
[{"callId": "C12345", "customerName": "Alice Johnson", "startTime": "2023-06-15T10:30:00Z", "duration": 240, "status": "Completed", "agentId": "A001"}] | Array | Individual call details | |
chart | 
linechart | 
{"queueLength": [{"timestamp": "2023-06-15T10:00:00Z", "value": 5}], "handleTime": [{"timestamp": "2023-06-15T10:00:00Z", "value": 360}]} | Object | Graphical data representation | 
window | 
- | 60 | Number | Time interval for data aggregation | 
status | 
- | "success" | String | API call status | 
code | 
- | 200 | Number | HTTP-like status code | 
lstSync | 
- | "sync_20230615_1130" | String | Last synchronization identifier | 
Response Breakdown
- 
Queue Duration:
- 
Average wait time: 45 seconds
 - 
Maximum wait time: 120 seconds
 - 
Total calls: 250
 
 - 
 - 
Summary:
- 
Total calls: 500
 - 
Active calls: 75
 - 
Pending calls: 25
 - 
Average handle time: 6 minutes
 
 - 
 - 
Agent Performance:
- 
Two agents detailed
 - 
Varying call handling stats
 - 
Different current statuses
 
 - 
 - 
Individual Calls:
- 
Detailed call information
 - 
Customer details
 - 
Call duration and status
 - 
Associated agent
 
 - 
 - 
Chart Data:
- 
Line charts showing:
- 
Queue length over time
 - 
Handle time trends
 
 - 
 
 - 
 
Performance Insights
- 
Data retrieved for June 1-30, 2023
 - 
20 entries per page
 - 
Multiple modules retrieved
 - 
Near real-time data snapshot
 - 
Successful API call with 200 status code
 
Would you like me to elaborate on any specific aspect of the endpoint or the response?
list     
     
        
                    
                    
                  
     
    
    
    var axios = require('axios');
var data = '{"ssid":"{{ssid}}"}';
var config = {
 method: 'post',
 url: '{{brand}}/api/v2/queue/list',
 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/queue/list');
$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/queue/list", payload, headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))var client = new RestClient("{{brand}}/api/v2/queue/list");
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/queue/list' \
--data-raw '{
    "ssid":"{{ssid}}"
}'var request = http.Request('POST', Uri.parse('{{brand}}/api/v2/queue/list'));
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/queue/list"
   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/queue/list 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/queue/list")
   .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/queue/list", 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/queue/list");
   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/queue/list"]
   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/queue/list" 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/queue/list' -Method 'POST' -Headers $headers -Body $body
$response | ConvertTo-Jsonrequire "uri"
require "net/http"
url = URI("{{brand}}/api/v2/queue/list")
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/queue/list' \
 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/queue/list")!,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":"Fri
 29 Nov 2024 04:42:08 GMT"}
{"key":"Content-Type"
"value":"application\/json; charset=utf-8"}
{"key":"Content-Length"
"value":"159"}
{"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\/\"9f-5CvV3aU8QdyXuu8UyL7A+65\/6As\""}
{"key":"Strict-Transport-Security"
"value":"max-age=31536000; includeSubDomains"}]
                  
             {
    "data": {
        "onB": 0,
        "onC": 0,
        "web": 2,
        "agTc": 13,
        "size": 0,
        "grp": [],
        "ag": [],
        "st": [],
        "str": {},
        "ctyp": {},
        "campId": [],
        "qDura": [],
        "did": []
    },
    "status": "success",
    "code": 200
}