V 2.0
Group
Description
The Group API allows you to manage agent groups within the system. You can create, update, delete, and list groups. Groups are used to organize agents and manage their permissions and settings collectively.
Base URL
The base URL for all API endpoints is: deepcall/api/v2/Group
Authentication
All endpoints require authentication. Use one of the following methods:
-
SSID
-
User ID and Token
Error Responses
All endpoints may return the following error response:
Field | Type | Description |
---|---|---|
status | string | "error" |
message | string | Description of the error |
code | number | Error code |
Error Codes
Code | Description |
---|---|
1501 | The 'Name' field was not provided in the request |
1502 | GroupId is required |
1503 | Group not found or not authorized |
Notes
-
The
forward
parameter in the List Groups endpoint is used for permission checking. Iffalse
, it checks for the "AGENT_TO_AGENT_CALL" permission. -
The
quick
parameter in the List Groups endpoint, when set totrue
, returns a quicker response with potentially less detailed information. -
When filtering groups by name, the search is case-insensitive.
-
Group names are unique per user. If a duplicate name is provided, a number will be appended to make it unique.
-
When a group is deleted, all associated agent-group relations are also removed, and the group is removed from the agent profiles in Elasticsearch.
Add
Endpoint
- Method: POST
-
Path:
deepcall/api/v2/Group/add/
Description
This endpoint allows you to create a new group in the system. Groups serve as organizational units that can help manage agents, calls, and permissions efficiently. Each group can be assigned specific agents, manage call routing rules, and have different access levels. The group creation process requires a unique name and proper authentication. Once created, the group can be used to organize agents, manage team structures, and control access to various system features.
Use Cases
- Creating teams or departments in a call center
- Organizing agents by skill sets or specialization
- Setting up new project groups
- Establishing hierarchical structures in the organization
- Creating temporary groups for specific campaigns
Request Details
Parameter | Type | Required | Description |
---|---|---|---|
ssid | string | Yes* | Session ID for authentication (*if userId and token not provided) |
userId | string | Yes* | User ID for authentication (*if ssid not provided) |
token | string | Yes* | Token for authentication (*if ssid not provided) |
name | string | Yes | Name of the group to be created |
Response Details
Success Response Structure
Field | Type | Description |
---|---|---|
status | string | Response status ("success") |
groupId | number | The ID of the newly created group |
code | number | HTTP status code (200 for success) |
Notes
- Authentication can be done via either:
- Session ID (
ssid
), or - Combination of
userId
andtoken
- Session ID (
- The
name
field is mandatory for creating a group - The response includes the new group's ID for future reference
- A successful request returns status code 200
- The created group can be referenced using the returned
groupId
in other API calls - Group names should be unique within the system
- Group names are case-sensitive
- After creation, groups can be:
- Assigned agents
- Given specific permissions
- Used in call routing rules
- Integrated with reporting systems
- Modified using other Group API endpoints
- It's recommended to have a clear naming convention for groups
- Newly created groups are empty by default and need separate API calls to add members
- There might be limits on the number of groups that can be created based on your subscription
Add
var axios = require('axios');
var data = '{ "ssid":"{{ssid}}", "name":"Manoj kumar"}';
var config = {
method: 'post',
url: '{{brand}}/api/v2/Group/add',
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/Group/add');
$request->setMethod(HTTP_Request2::METHOD_POST);
$request->setConfig(array(
'follow_redirects' => TRUE
));
$request->setHeader(array(
'Content-Length' => ''
));
$request->setBody('{ "ssid":"{{ssid}}", "name":"Manoj kumar"}');
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}}\", \"name\":\"Manoj kumar\"}"
headers = {
'Content-Length': ''
}
conn.request("POST", "/api/v2/Group/add", payload, headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
var client = new RestClient("{{brand}}/api/v2/Group/add");
client.Timeout = -1;
var request = new RestRequest(Method.POST);
var body = @"{" + "\n" +
@" ""ssid"":""{{ssid}}""," + "\n" +
@" ""name"":""Manoj kumar""" + "\n" +
@" " + "\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/Group/add' \
--data-raw '{
"ssid":"{{ssid}}",
"name":"Manoj kumar"
}'
var request = http.Request('POST', Uri.parse('{{brand}}/api/v2/Group/add'));
request.body = '''{\n "ssid":"{{ssid}}",\n "name":"Manoj kumar"\n \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/Group/add"
method := "POST"
payload := strings.NewReader(`{
"ssid":"{{ssid}}",
"name":"Manoj kumar"
}`)
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/Group/add HTTP/1.1
Host: {{brand}}
Content-Length: 52
{
"ssid":"{{ssid}}",
"name":"Manoj kumar"
}
OkHttpClient client = new OkHttpClient().newBuilder()
.build();
MediaType mediaType = MediaType.parse("text/plain");
RequestBody body = RequestBody.create(mediaType, "{\n \"ssid\":\"{{ssid}}\",\n \"name\":\"Manoj kumar\"\n \n}");
Request request = new Request.Builder()
.url("{{brand}}/api/v2/Group/add")
.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 \"name\":\"Manoj kumar\"\n \n}";
var requestOptions = {
method: 'POST',
headers: myHeaders,
body: raw,
redirect: 'follow'
};
fetch("{{brand}}/api/v2/Group/add", 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/Group/add");
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 \"name\":\"Manoj kumar\"\n \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/Group/add"]
cachePolicy:NSURLRequestUseProtocolCachePolicy
timeoutInterval:10.0];
NSDictionary *headers = @{
@"Content-Length": @""
};
[request setAllHTTPHeaderFields:headers];
NSData *postData = [[NSData alloc] initWithData:[@"{\n \"ssid\":\"{{ssid}}\",\n \"name\":\"Manoj kumar\"\n \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 \"name\":\"Manoj kumar\"\n \n}";;
let reqBody =
let uri = Uri.of_string "%7B%7Bbrand%7D%7D/api/v2/Group/add" 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 `"name`":`"Manoj kumar`"`n `n}"
$response = Invoke-RestMethod '{{brand}}/api/v2/Group/add' -Method 'POST' -Headers $headers -Body $body
$response | ConvertTo-Json
require "uri"
require "net/http"
url = URI("{{brand}}/api/v2/Group/add")
http = Net::HTTP.new(url.host, url.port);
request = Net::HTTP::Post.new(url)
request["Content-Length"] = ""
request.body = "{\n \"ssid\":\"{{ssid}}\",\n \"name\":\"Manoj kumar\"\n \n}"
response = http.request(request)
puts response.read_body
printf '{
"ssid":"{{ssid}}",
"name":"Manoj kumar"
}'| http --follow --timeout 3600 POST '{{brand}}/api/v2/Group/add' \
Content-Length:
import Foundation
#if canImport(FoundationNetworking)
import FoundationNetworking
#endif
var semaphore = DispatchSemaphore (value: 0)
let parameters = "{\n \"ssid\":\"{{ssid}}\",\n \"name\":\"Manoj kumar\"\n \n}"
let postData = parameters.data(using: .utf8)
var request = URLRequest(url: URL(string: "{{brand}}/api/v2/Group/add")!,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":"Thu
10 Oct 2024 12:42:13 GMT"}
{"key":"Content-Type"
"value":"application\/json; charset=utf-8"}
{"key":"Content-Length"
"value":"44"}
{"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\/\"2c-uTRVqbkGzHZi57b2V9wJzKzf89o\""}
{"key":"Strict-Transport-Security"
"value":"max-age=15724800; includeSubDomains"}]
{
"status": "success",
"groupId": 12,
"code": 200
}