Přeskočit na hlavní obsah

REST API

UCS poskytuje backend REST API prostřednictvím služby ucs-api, routing zajišťuje NGINX. Pro přístup je vyžadováno OAuth přihlášení prostřednictvím existujícího uživatele (uživatel musí být členem role, která má oprávnění superuser a uživatel nesmí být public). Pro testování je možné OAuth vypnout v souboru /etc/ucs.api.conf, v sekci [oauth], parametrem enabled = 0.

Komunikační protokol

Volání iniciovaná směrem do UCS REST API jsou realizována s následujícími parametry:

  • Přenosový protokol: HTTPS
  • Zabezpečení: OAuth 2.0 (client_credentials, access token)
  • Architektura rozhraní: REST
  • Formát dat: JSON
  • Kódování: UTF-8
  • URL: https://ucs.example.com/api/v1.0

Úspěšná volání i očekávané chyby jsou potvrzovány odpovědí s HTTP status 2XX. Výjimky:

  • OAuth vrací HTTP status 400 v případě špatného požadavku nebo 401 v případě špatných credentials
  • Neočekávané výjimky (exception na straně UCS) vrací HTTP status 500

OAuth přihlášení

POST /login/oauth2/token

Pro volání API metod je požadován B2B OAuth token. Metoda pro získání tokenu vyžaduje jako payload client_id, client_secret a grant_type. V odpovědi se vrátí access token, který je platný 1 hodinu (resp. jak je nastaveno v /etc/ucs.api.conf, v sekci [oauth], parametrem expires = 3600).

Příklad získání OAuth tokenu

Request

POST https://ucs.example.com/login/oauth2/token

Content-Type: application/json

{
"client_id": "jmeno_servisniho_uctu_v_ucs",
"client_secret": "heslo_servisniho_uctu_v_ucs",
"grant_type": "client_credentials"
}

Response

200 OK

Content-Type: application/json

{
"access_token": "AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz",
"token_type": "Bearer",
"expires_in": "3610"
}

Další endpointy REST API vyžadují Authorization hlavičku s platným access tokenem.

Příklad volání metody se získaným access tokenem

Request

GET https://ucs.example.com/api/v1.0/status

Authorization: Bearer AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz

Pokud selže pokus o získání OAuth tokenu, pak je vrácen HTTP status 400 nebo 401.

Příklad neúspěšného pokusu o získání access tokenu

Odpověď na špatný požadavek

400 Bad Request

Content-Type: application/json

{
"error": "invalid_request",
"error_description": "We support only \"client_credentials\" grant type",
"error_uri": "https://www.oauth.com/oauth2-servers/access-tokens"
}

Odpověď na špatné credentials

401 Unauthorized

Content-Type: application/json

{
"error": "invalid_client",
"error_description": "Invalid username or password",
"error_uri": "https://www.oauth.com/oauth2-servers/access-tokens"
}

Stav a číselníky

Následující metody poskytují aktuální stav UCS a číselníky pro získání interních ID objektů v UCS, které jsou požadovány jako atributy dalších metod.

Status

GET /api/v1.0/status

Stav systému UCS, SIP trunků a telefonů.

Příklad získání stavu systému UCS

Request

GET https://ucs.example.com/api/v1.0/status

Authorization: Bearer AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz

Response

200 OK

Content-Type: application/json

{
"success": true,
"trunks": {
"1": {
"name": "SIPY",
"status": 1,
"rtt": 1
},
"2": {
"name": "external",
"status": 0,
"rtt": 0
}
},
"phones": {
"1": {
"name": "System",
"configured": 279,
"configured_ipphones": 16,
"configured_softphones": 263,
"available": 0,
"available_ipphones": 0,
"available_softphones": 0,
"dead": 11,
"dead_ipphones": 2,
"dead_softphones": 9,
"paired": 11,
"paired_ipphones": 2,
"paired_softphones": 9
},
"3": {
"name": "Testik",
"configured": 2,
"configured_ipphones": 1,
"configured_softphones": 1,
"available": 0,
"available_ipphones": 0,
"available_softphones": 0,
"dead": 0,
"dead_ipphones": 0,
"dead_softphones": 0,
"paired": 0,
"paired_ipphones": 0,
"paired_softphones": 0
}
},
"ucs": 0,
"api": 0,
"postgres": 14,
"asterisk": 1,
"light-log": 0,
"tftp": 1,
"stunserver": 1,
"webserver": 3,
"nats-server": 1
}

Fronty

GET /api/v1.0/queues

Výpis nastavených front (příchozích i odchozích kampaní) a jejich aktuální stav. Metoda neakceptuje žádné parametry. Odpověď je pole asociativních polí.

Příklad získání přehledu front

Request

GET https://ucs.example.com/api/v1.0/queues

Authorization: Bearer AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz

Response

200 OK

Content-Type: application/json

{
"success": true,
"data": [
{
"id": 74,
"active": true,
"group_id": 11,
"type": 1,
"number": "10099",
"name": "NONLIFE CZ",
"callers_waiting": 0,
"callers_ringing": 0,
"callers_talking": 0,
"agents_idle": 0,
"agents_ringing": 0,
"agents_talking": 0,
"agents_acw": 0,
"agents_aux": 0,
"answered": 1567,
"overflowed": 1,
"abandoned": 336,
"talktime": 314549,
"waittime": 270986,
"answered_wait_time": 227409.22137379646,
"answered_in_service": 740,
"answered_in_work_hours": 0,
"answered_in_work_and_sl": 0,
"abandoned_in_threshold": 140,
"abandoned_in_work_hours": 0,
"abandoned_in_work_and_sl": 0,
"abandoned_full": 0,
"sl": {
"day": [
740,
1763
],
"week": [
4184,
9405
],
"month": [
17929,
28297
],
"quarter": [
44922,
69392
]
},
"sl_work": {
"day": [
0,
0
],
"week": [
0,
0
],
"month": [
0,
0
],
"quarter": [
0,
0
]
},
"last_call_enter": 1724428798.475978,
"last_call_answer": 1724428717.4761183,
"callers": []
},
...
]
}

Skupiny

GET /api/v1.0/groups

Skupiny v UCS slouží pro organizaci nastavení (odráží organizační strukturu společnosti) a řízení přístupu (na základě rolí). Většina objektů (uživatelé, telefony, fronty, atd.) má atribut group_id, který určuje do jaké skupiny daný objek patří. Pokud objekt nemá tento atribut, pak je pro jeho editaci vyžadováno superuser oprávnění. UCS garantuje, že vždy existuje skupina ID 1. Metoda neakceptuje žádné parametry. Odpověď je pole asociativních polí.

Příklad získání číselníku organizačních skupin UCS

Request

GET https://ucs.example.com/api/v1.0/groups

Authorization: Bearer AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz

Response

200 OK

Content-Type: application/json

{
"success": true,
"data": [
{
"id": 1,
"name": "System",
"external_id": null
},
{
"id": 3,
"name": " Testik",
"external_id": "1234"
},
{
"id": 7,
"name": " Test2",
"external_id": "2222"
},
{
"id": 9,
"name": " NN - Brokerska",
"external_id": "broker1"
},
{
"id": 10,
"name": " Markuv Servicedesk",
"external_id": "service1"
}
]
}

Role

GET /api/v1.0/roles

Role je sada oprávnění, která dovoluje uživatelům využívat služby UCS (a případně editovat nastavení). Typickým příkladem role je např. Administrátor, Běžný uživatel, Supervizor, Agent, atp. Metoda neakceptuje žádné parametry. Odpověď je pole asociativních polí.

Příklad získání číselníku uživatelských rolí UCS

Request

GET https://ucs.example.com/api/v1.0/roles

Authorization: Bearer AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz

Response

200 OK

Content-Type: application/json

{
"success": true,
"data": [
{
"id": 1,
"group_id": 1,
"name": "Administrator"
},
{
"id": 6,
"group_id": 1,
"name": "Alice"
},
{
"id": 7,
"group_id": 1,
"name": "Bob"
},
{
"id": 9,
"group_id": 10,
"name": "Bot"
},
{
"id": 8,
"group_id": 1,
"name": "Charlie"
}
]
}

Týmy

GET /api/v1.0/teams

Tým je sada nastavení vlastností call centra, nastavují se zde barvy jednotlivých stavů, důvody neodstupnosti agentů, výchozí hodnoty pro členství ve frontách, atd. Metoda neakceptuje žádné parametry. Odpověď je pole asociativních polí.

Příklad získání číselníku týmů call centra UCS

Request

GET https://ucs.example.com/api/v1.0/teams

Authorization: Bearer AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz

Response

200 OK

Content-Type: application/json

{
"success": true,
"data": [
{
"id": 8,
"group_id": 1,
"name": "Markuv Team",
"note": "Team TEAM TEAM!!!!",
"aux_reasons": [
{
"reason": "Nemám rád šmouly",
"break": false,
"color": "ff0000",
"limit": null,
"hidden": false
}
],
"contacts": [],
"tasks": {
"person": 0,
"person_url": null,
"call": 0,
"call_url": null,
"email": 0,
"email_url": null
},
"maximum_assigned_emails": null,
"default_inbound_priority": 100,
"default_inbound_acw": false,
"default_inbound_acw_timeout": null,
"default_inbound_busy": null,
"default_inbound_busy_timeout": null,
"default_outbound_acw": false,
"default_outbound_acw_timeout": null,
"default_email_priority": 100,
"default_email_languages": {
"cs_CZ": 100,
"en_US": 100,
"de_DE": 100,
"ru_RU": 100
},
"default_email_assigned": null,
"default_task_priority": 100,
"color_agent_offline": null,
"color_agent_ready": "188b35",
"color_agent_acw": "ffda1f",
"color_agent_aux": "ff9500",
"color_agent_ringing": "a1ff2e",
"color_agent_talking": "a1ff29",
"color_phone_offline": null,
"color_phone_idle": "00bfff",
"color_phone_ringing": "ff00ea",
"color_phone_talking": "ff00ea",
"breaks_limit": null,
"transfer_to_agent": false,
"transfer_to_queue": false,
"channels": {
"inbound": false,
"task": false,
"email": false,
"chat": false,
"dialer": false
}
},
...
]
}

Hovory

UCS poskytuje CDR (Call Detail Records) o proběhlých hovorech. Každý hovor má stringové unikátní ID, které se skládá z UNIX timestampu zahájení hovoru a tečkou odděleným číslem hovoru od restartu komponenty Asterisk.

Informace o hovoru

GET /api/v1.0/call/{uniqueid}

Metoda umožňuje získání všech uložených dat o proběhlém hovoru. Směr hovoru je dán kombinací atributů src_internal a dst_internal. Detailní informace o tom, jak hovor procházel ústřednou je zaznamenána v atributu path. Pokud byl hovor přepojen, pak dst_ atributy odpovídají cílovému číslu. Pozor, pokud přepojí volající, pak je založen další CDR záznam pro daný hovor.

Příklad získání informací o proběhlém hovoru (Call Detail Record)

Request

GET https://ucs.example.com/api/v1.0/call/1723018607.115

Authorization: Bearer AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz

Response

200 OK

Content-Type: application/json

{
"success": true,
"data": {
"price": 0,
"duration": 524,
"src_number": "+420776000001",
"src_name": "",
"dst_number": "1800",
"dst_name": " Bob",
"src_internal": false,
"dst_internal": true,
"calldate": "2024-08-07 10:17:04",
"connected": "2024-08-07 10:17:07",
"disconnected": "2024-08-07 10:25:51",
"src_extension_id": null,
"dst_extension_id": 75,
"src_user_id": null,
"dst_user_id": 11,
"src_type": "trunk",
"dst_type": "phone",
"xfer_users": null,
"trunk_id": null,
"uniqueid": "1723018607.115",
"metadata": {
"ucrm_interaction_id": 30391,
"outbound_id": 0
},
"src_group_id": 1,
"dst_group_id": 1,
"pilot_number": "0776000001",
"ring_time": 4,
"talk_time": 524,
"hold_time": 0,
"cause": 3,
"recording": true,
"recording_duration": 523,
"path": [
{
"date": "2024-08-07 10:16:47",
"type": 1,
"number": "0776000001",
"name": "SIPY"
},
{
"date": "2024-08-07 10:17:04",
"type": 10000,
"number": "1800",
"name": "Bob SP"
},
{
"date": "2024-08-07 10:17:04",
"type": 10711,
"number": "1800",
"name": " Bob"
},
{
"date": "2024-08-07 10:17:04",
"type": 10001,
"number": "1800",
"name": "Bob SP"
},
{
"date": "2024-08-07 10:17:07",
"type": 10002,
"number": "1800",
"name": "Bob SP"
},
{
"date": "2024-08-07 10:25:51",
"type": 10720,
"number": "0776000001",
"name": ""
},
{
"date": "2024-08-07 10:25:51",
"type": 10,
"number": "0776000001",
"name": ""
}
]
}
}

Získání metadat hovoru

Metadata připojená k hovoru je asociativní pole libovolných klíčů a hodnot. Metadata lze získat k aktivnímu hovoru i zpětně po jeho ukončení.

GET /api/v1.0/metadata/{uniqueid}

Příklad získání metadat k aktivnímu nebo proběhlému hovoru

Request

GET https://ucs.example.com/api/v1.0/metadata/1723018607.115

Authorization: Bearer AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz

Response

200 OK

Content-Type: application/json

{
"success": true,
"data": {
"ucrm_interaction_id": 30391,
"outbound_id": 0
}
}

Nastavení metadat hovoru

Metoda umožňuje rozdílovou aktualizaci metadat hovoru. Předané klíče se v metadatech hovoru vytvoří nebo přepíší. Pokud stávající klíč metadat neexistuje v payloadu, pak je tento klíč ponechán beze změny. Pro smazání klíče se jeho hodnota nastaví na null. Metoda vrací výsledná metadata hovoru.

POST /api/v1.0/metadata/{uniqueid}

Příklad aktualizace metadat aktivního nebo proběhlého hovoru

Request

POST https://ucs.example.com/api/v1.0/metadata/1723018607.115

Authorization: Bearer AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz
Content-Type: application/json

{
"outbound_id": null,
"pokus": "hokus"
}

Response

200 OK

Content-Type: application/json

{
"success": true,
"data": {
"ucrm_interaction_id": 30391,
"pokus": "hokus"
}
}

Sdílená data

Data předávaná z jiných systémů, která se zobrazují na wallboardech, nebo pomocí kterých se řídí směrování hovorů, přehrávání hlášek, atp.

Zobrazení hodnot

GET /api/v1.0/shared/{identificator}

Získání aktuální hodnoty sdílených dat daného identifikátoru.

Příklad získání aktuální hodnoty sdílených dat

Request

GET https://ucs.example.com/api/v1.0/shared/osl_chats

Authorization: Bearer AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz

Response

200 OK

Content-Type: application/json

{
"success": true,
"data": {
"type": "osl",
"data": {
"SWS": {
"OneSolution": {
"Waiting": 5,
"Processed": 0
}
},
"KPK": {
"OneSolution": {
"Waiting": 2,
"Doing": 4
}
}
}
}
}

Aktualizace hodnot

POST /api/v1.0/shared/{identificator}

Přepsání hodnoty sdílených dat daného identifikátoru.

Příklad aktualizace sdílených dat

Request

POST https://ucs.example.com/api/v1.0/shared/osl_chats

Authorization: Bearer AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz
Content-Type: application/json

{
"type": "osl",
"data": {
"SWS": {
"OneSolution": {
"Waiting": 4,
"Processed": 1
}
},
"KPK": {
"OneSolution": {
"Waiting": 2,
"Doing": 4
}
}
}
}

Response

200 OK

Content-Type: application/json

{
"success": true,
"data": null
}

Uživatelé

Synchronizace uživatelských účtů.

Výpis uživatelů

GET /api/v1.0/users

Vrátí seznam uživatelů v UCS jako pole objektů. Metoda nemá žádné parametry.

Příklad získání všech existujících uživatelů v UCS

Request

GET https://ucs.example.com/api/v1.0/users

Authorization: Bearer AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz

Response

200 OK

Content-Type: application/json

{
"success": true,
"data": [
{"id": 1, "name": "admin", "external_id": "asdf"},
{"id": 10, "name": "Alice", "external_id": null},
{"id": 11, "name": "Bob", "external_id": "2468"}
]
}

Detail uživatele

GET /api/v1.0/user/{user_id}

nebo

GET /api/v1.0/user/external/{external_id}

Metoda vrátí kompletní strukturu atributů objektu uživatele User.

Příklad získání všech atributů uživatelského účtu

Request

GET https://ucs.example.com/api/v1.0/user/external/asdf

Authorization: Bearer AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz

Response

200 OK

Content-Type: application/json

{
"success": true,
"data": {
"id": 1,
"active": true,
"external_id": "asdf",
"group_id": 1,
"role_id": 1,
"team_id": null,
"locale": "en_US",
"username": "admin",
"firstname": "null",
"lastname": null,
"displayname": "admin",
...
}
}

User

Struktura objektu uživatele:

KlíčTypVýznam
idintunikátní ID uživatele (primární klíč)
usernamestrpřihlašovací jméno (case-insensitive)
passwordstrheslo v plaintextu (do DB je hashována algoritmem PBKDF2)
localeenum[str]jazyk uživatelského rozhraní
cs_CZ: český
en_US: anglický
sk_SK: slovenský
emailstre-mailová adresa uživatele (může být použita pro přihlášení)
primary_extensionintID primární linky uživatele
pinstrkód pro přístup k hlasové schránce
firstnamestrkřestní jméno uživatele
lastnamestrpříjmení uživatele
publicboolservisní účty mají tento atribut nastaven na false
group_idintID organizační skupiny UCS do které uživatel patří
identificatorstridentifikátor uživatele pro funkci User Mobility
external_idstridentifikátor uživatele v externím IS (pozor, je case-sensitive)
filter_idintID filtru odchozích volání pro volání na externí číslo
numberstrexterní číslo na které je uživateli voláno v případě odpárování linky
datajsonlibovolná metadata vázaná k uživateli ve formátu asociativního pole
team_idintID týmu call centra do kterého uživatel patří
activeboolpříznak zda je uživatelský účet aktivní
wssip_device_idintID softwarového telefonu
certificateboolpříznak zda se má uživateli vytvořit klientský SSL certifikát
role_idintID role oprávnění do které uživatel patří
channelsjsonaktivní kanály pro funkci Omnichannel
clid_numberstrtelefonní číslo volajícího pro externí odchozí hovory

Vytvoření uživatele

POST /api/v1.0/user

Založí uživatele v UCS. Povinné atributy jsou username a group_id (v UCS vždy existuje group ID 1). Jako palyload je v požadavku předán uživatelský objekt User. Návratová hodnota je ID nově založeného uživatele.

Příklad založení nového uživatelského účtu

Request

POST https://ucs.example.com/api/v1.0/user

Authorization: Bearer AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz
Content-Type: application/json

{
"username": "test",
"group_id": 1
}

Response

200 OK

Content-Type: application/json

{
"success": true,
"data": 123
}

Interní ID UCS nově založeného účtu je 123.

Aktualizace uživatele

PATCH /api/v1.0/user/{user_id}

nebo

PATCH /api/v1.0/user/external/{external_id}

Aktualizuje atributy uživatelského objektu User. Pokud není atribut v payloadu specifikován, pak je zachována jeho stávající hodnota.

Příklad aktualizace atributů existujícího uživatelského účtu

Request

PATCH https://ucs.example.com/api/v1.0/user/123`

Authorization: Bearer AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz
Content-Type: application/json

{
"external_id": "T1000",
"password": "1pokus+Hokus2",
"team_id": 1,
}

Response

200 OK

Content-Type: application/json

{
"success": true,
"data": null
}

V případě chybné hodnoty některého z atributů, je vráceno asociativní pole s danými atributy.

PATCH https://ucs.example.com/api/v1.0/user/external/T1000`

Authorization: Bearer AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz
Content-Type: application/json

{
"external_id": "t123456",
"number": "cislo",
"filter_id": "PSTN",
}

Chybná hodnota v atributu number a filter_id. Chybně zadané atributy zablokují aktualizaci, tzn. ikdyž je hodnota external_id validní, nedojde k jejímu přepsání.

200 OK

Content-Type: application/json

{
"success": false,
"data": {
"number": "contain invalid character (invalid character \"c\")",
"filter_id": "value must be integer number"
}
}

Smazání uživatele

DELETE /api/v1.0/user/{user_id}

nebo

DELETE /api/v1.0/user/external/{external_id}

Vymaže uživatele. V historii hovorů dojde ke zrušení reference, ale záznamy vč. nahrávek zůstanou nedotčeny. Pro deaktivaci uživatele lze alternativně nastavit atribut active na hodnotu false, pak zůstává uživatel v DB, ale nemůže se přihlásit.

Příklad smazání uživatelského účtu

Request

DELETE https://ucs.example.com/api/v1.0/user/external/T1000

Authorization: Bearer AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz
Content-Type: application/json

Response

200 OK

Content-Type: application/json

{
"success": true,
"data": null
}

Stav členství ve frontách

GET /api/v1.0/queues/agents

Přehled přiřazení všech agentů do obsluhy front kontaktního centra. Odpověď je pole objektů AgentQueues jednotlivých uživatelů . Každý uživatel obsahuje atribut queues, což je pole objektů QueueMembership členství v jednotlivých frontách .

Typy front UCS

HodnotaVýznam
0Outbound - kampaň odchozích hovorů
1Inbound - fronta příchozích hovorů
2Task - fronta tásků µCRM
3E-mail - fronta zpracování příchozích e-mailů
Příklad získání přehledu přiřazení agentů

Request

GET https://ucs.example.com/api/v1.0/queues/agents

Authorization: Bearer AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz

Response

200 OK

Content-Type: application/json

{
"success": true,
"data": [
{
"id": 1,
"name": "Admin Ucska",
"external_id": "asdf",
"queues": [
{
"id": 146,
"type": 3,
"priority": 100,
"suspended": false
},
{
"id": 123,
"type": 2,
"priority": 80,
"suspended": false
},
{
"id": 82,
"type": 1,
"priority": 1,
"suspended": true
},
{
"id": 103,
"type": 0,
"priority": 100,
"suspended": false
}
]
},
{
"id": 11,
"name": "Bob",
"external_id": "2468",
"queues": [
{
"id": 234,
"type": 0,
"priority": 50,
"suspended": false
}
]
},
{
"id": 43,
"name": "Pokus Bezfrontovej",
"external_id": "nonono",
"queues": [ ]
}
]
}

Nastavení členství ve frontách

POST /api/v1.0/queues/agents

Hromadná aktualizace přiřazení specifikovaných agentů pro obsluhu front kontaktního centra. Payload požadavku obsahuje pole objektů AgentQueues agentů, pro které má být aktualizováno členství ve frontách. Pokud uživatel není v seznamu, pak jeho členství není upraveno (není smazán ze všech front). Uživatel může být identifikován interním ID UCS (atribut id) nebo externím ID z jiného informačního systému (atribut external_id). Pokud jsou uvedeny oba atributy, pak se použije atribut id a atribut external_id je ignorován.

Členství se nastavuje atributem queues, což je pole objektů QueueMembership všech front, které daný agent obsluhuje. Pokud nemají být modifikovány žádné parametry členství agenta ve frontě, pak stačí do pole v atributu queues předat asociativní pole obsahující pouze id dané fronty. Pro aktualizaci stačí vyplnit pouze atributy, které mají být změněny nebo lze ponechat stávající hodnoty a aktualizace je přeskočena (nezatěžuje se UCS). Pro vymazání členství z fronty se daná fronta vypustí z pole v atributu queues daného uživatele.

Pokud je payload validní, pak je atribut success návratové hodnoty nastaven na true a v atributu data jsou výsledky aktualizace jednotlivých uživatelů (vč. atributu success) a v každém objektu uživatele v atributu queues výsledky aktualizace jeho členství v jednotlivých frontách (opět vč. atributu success).

AgentQueues

Struktura objektu agenta:

KlíčTypVýznam
idintunikátní ID uživatele (primární klíč)
external_idstridentifikátor uživatele v externím IS
queuesarraypole členství agenta ve frontách (objekt QueueMembership)

QueueMembership

Struktura objektu členství agenta ve frontě:

KlíčTypVýznam
idintID fronty UCS
priorityintpriorita obsluhy interakcí ve frontě (1 nejnižší, 100 nejvyšší)
suspendedboolpři nastavení false je pozastaveno zpracování interakcí ve frontě
Příklad aktualizace členství agentů ve frontách

Request

  • Pro uživatele admin (ID 1) bude:
    • ponechána fronta mailů (ID 146) beze změny
    • stejně tak ponechána fronta tásků (ID 123) beze změny
    • obnovena obsluha fronty příchozích hovorů (ID 82)
    • odstraněn z obsluhy kampaně odchozích hovorů (103)
  • Uživatel Bob nebude aktualizován (zůstane členem odchozí kampaně ID 234)
  • Uživatel Pokus Bezfrontovej (externí identifikátor 2468) bude:
    • přidán do obsluhy fronty příchozích hovorů (ID 82)
    • omylem přidán do neexistující fronty
  • Pokus o aktualizaci neexistujícího uživatele (ID 0)
  • Pokus o aktualizaci neexistujícího uživatele (externí identifikátor neexistuje)
POST https://ucs.example.com/api/v1.0/queues/agents

Authorization: Bearer AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz
Content-Type: application/json

[
{
"id": 1,
"queues": [
{"id": 146},
{"id": 123, "priority": 80, "suspended": false},
{"id": 82, "suspended": false}
]
},
{
"external_id": "2468",
"queues": [
{"id": 82},
{"id": 0}
]
},
{
"id": 0,
"queues": [ ]
},
{
"external_id": "neexistuje",
"queues": [ ]
}
]

Response

200 OK

Content-Type: application/json

{
"success": true,
"data": [
{
"id": 1,
"success": true,
"queues": [
{"id": 146, "success": true, "Nothing to change"},
{"id": 123, "success": true, "Nothing to change"},
{"id": 82, "success": true, "Agent membership updated"},
{"id": 103, "success": true, "Agent removed from queue"}
]
},
{
"external_id": "2468",
"success": true,
"queues": [
{"id": 82, "success": true, "Agent added into queue"},
{"id": 0, "success": false, "Unknown queue id"}
]
},
{
"id": 0,
"success": false,
"error": "Unknown agent id",
"queues": [ ]
},
{
"external_id": "neexistuje",
"success": false,
"error": "Unknown agent external_id",
"queues": [ ]
}
]
}

µCRM

Synchronizace zákazníků do UCS mikro CRM.

Seznam kontaktních osob

GET /api/v1.0/crm/persons

Metoda akceptuje nepovinné parametry limit a offset v URL.

Návratová hodnota je pole Person objektů.

Příklad získání 50 kontaktních osob s offsetem 100

Request

GET https://ucs.example.com/api/v1.0/crm/persons?limit=50&offset=100

Authorization: Bearer AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz

Response

200 OK

Content-Type: application/json

{
"success": true,
"data": [
{
"id": 26920,
"group_id": 1,
"displayname": "Abrhám Václav",
"firstname": "Václav",
"lastname": "Abrhám",
"external_id": "16943"
},
{
"id": 13270,
"group_id": 1,
"displayname": "Adamec Lukáš",
"firstname": "Lukáš",
"lastname": "Adamec",
"external_id": "20451"
},
{
"id": 25677,
"group_id": 1,
"displayname": "Albert Antonín",
"firstname": "Antonín",
"lastname": "Albert",
"external_id": "23393"
},
...
],
"total": 26907
}

V µCRM je celkem 26907 osob.

Detail kontaktní osoby

GET /api/v1.0/crm/person/{person_id}

nebo

GET /api/v1.0/crm/person/external/{external_id}

Příklad získání detailu kontaktní osoby z µCRM

Request

GET https://ucs.example.com/api/v1.0/crm/person/59233

Authorization: Bearer AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz

nebo

GET https://ucs.example.com/api/v1.0/crm/person/external/abc123

Authorization: Bearer AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz

Response

200 OK

Content-Type: application/json

{
"success": true,
"data": {
"id": 59233,
"group_id": 1,
"displayname": "Ing. Petr Novák VIP",
"firstname": "Petr",
"lastname": "Novák",
"note": "Pozor, je to převelice důležitý zákoš…",
"external_id": "abc123",
"data": {
"expires": "2025-01-01 00:00:00"
},
"contacts": [
{
"id": 71615,
"type": 2,
"contact": "a@b.cd",
"label": "e-mail"
},
{
"id": 71616,
"type": 1,
"contact": "+420654321987",
"label": "mobil"
},
],
"interactions": [ ],
"companies": [ ],
"tasks": [ ]
}
}

Person

Struktura objektu uživatele:

KlíčTypVýznam
idintunikátní ID osoby (primární klíč)
group_idintID skupiny jejíž je osoba členem
displaynamestrzobrazované jméno osoby
firstnamestrjméno
lastnamestrpříjmení
notestrlibovolná poznámka ke kontaktní osobě
external_idstridentifikátor uživatele v externím IS
dataobjectasociativní pole klíč/hodnota pro libovolná data
contactsarraypole kontaktních údajů (objekt Contact)
interactionsarrayhistorie komunikace s klientem (read-only)
companiesarrayspolečnosti ve kterých je osoba zařazena (read-only)
tasksarraytickety spojené s danou osobou (read-only)

Contact

Struktura objektu kontaktu:

KlíčTypVýznam
idintunikátní ID asociace (primární klíč)
typeenum[int]typ kontaktu
0: obecný kontakt
1: telefonní číslo
2: e-mailová adresa
3: webová URL
contactstrkontakt (adresa, telefonní číslo, e-mail, URL)
labelstrpopis k danému kontaktnímu údaji

Vložení nové osoby

POST /api/v1.0/crm/person

Jako tělo požadavku se předá struktura objektu Person. Je povinný pouze atribut group_id.

Návratová hodnota je ID nově vytvořeného záznamu.

Příklad vložení nové osoby do µCRM

Request

POST https://ucs.example.com/api/v1.0/crm/person

Authorization: Bearer AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz
Content-Type: application/json

{
"group_id": 1,
"displayname": "Martin Dvořák",
"external_id": "321654987",
"contacts": [
{
"type": 1,
"contact": "+420222333444",
"label": "kancelář"
}
]
}

Response

200 OK

Content-Type: application/json

{
"success": true,
"data": 123456
}

Interní ID UCS nově založené osoby µCRM je 123456.

Aktualizace existující osoby

PATCH /api/v1.0/crm/person/{person_id}

Jako tělo požadavku se předá struktura objektu Person s atributy, které mají být aktualizovány. Atribut contacts je nepovinný, pokud nemají být aktualizovány kontakty osoby. Pokud je atribut contacts předán, pak jsou kontakty přepsány podle předaného obsahu.

Návratová hodnota metody je prázdná.

Příklad aktualizace dat existující osoby v µCRM

Request

PATCH https://ucs.example.com/api/v1.0/crm/person/123456

Authorization: Bearer AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz
Content-Type: application/json

{
"firstname": "Martin",
"lastname": "Dvořák"
}

Response

200 OK

Content-Type: application/json

{
"success": true,
"data": null
}

Smazání osoby

DELETE /api/v1.0/crm/person/{person_id}

Vymaže osobu z UCS.

Návratová hodnota metody je prázdná.

Příklad smazání existující osoby z µCRM

Request

DELETE https://ucs.example.com/api/v1.0/crm/person/123456

Authorization: Bearer AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz

Response

200 OK

Content-Type: application/json

{
"success": true,
"data": null
}

Seznam společností

GET /api/v1.0/crm/companies

Kontaktní osoby v µCRM mohou být zastřešeny společností. Metoda akceptuje nepovinné parametry limit a offset v URL. Návratová hodnota je pole Company objektů.

Příklad získání 50 zastřešujících organizací na offsetu 100

Request

GET https://ucs.example.com/api/v1.0/crm/companies?limit=50&offset=100

Authorization: Bearer AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz

Response

{
"success": true,
"data": [
{
"id": 5313,
"group_id": 1,
"name": "Acme inc.",
"external_id": "74"
},
{
"id": 2919,
"group_id": 1,
"name": "All happy, ltd.",
"external_id": "13873"
},
{
"id": 1677,
"group_id": 1,
"name": "AZ s.r.o.",
"external_id": "6694"
},
...
],
"total": 10611
}

Celkem je v µCRM 10611 společností.

Detail společnosti

GET /api/v1.0/crm/company/{company_id}

GET /api/v1.0/crm/company/external/{external_id}

Příklad získání detailu společnosti v µCRM

Request

GET https://ucs.example.com/api/v1.0/crm/company/10764

Authorization: Bearer AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz

nebo

GET https://ucs.example.com/api/v1.0/crm/company/external/ins

Authorization: Bearer AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz

Response

200 OK

Content-Type: application/json

{
success: true,
data: {
"id: 10764,
"group_id: 1,
"name: "INSOFT s.r.o.",
"external_id": "ins",
"data": {
"ico": "04110889"
},
"persons": [
{
"person_id": 123456,
"role": "majitel"
}
],
"tasks": [ ]
}
}

Company

Struktura objektu společnosti:

KlíčTypVýznam
idintunikátní ID společnosti (primární klíč)
group_idintID skupiny jejíž je společnost členem
namestrnázev společnosti
external_idstridentifikátor uživatele v externím IS
dataobjectasociativní pole klíč/hodnota pro libovolná data
personsarraypole osob patřících do společnosti (objekt CompanyPerson)
tasksarraytickety spojené s danou společností (read-only)

CompanyPerson

Struktura objektu asociace osoby do společnosti:

KlíčTypVýznam
person_idintunikátní ID osoby (objektu Person)
rolestrpopis role osoby ve společnosti

Vložení nové společnosti

POST /api/v1.0/crm/company

Jako tělo požadavku se předá struktura objektu Company. Je povinný pouze atribut group_id.

Návratová hodnota je ID nově vytvořeného záznamu.

Příklad vytvoření nové společnosti v µCRM

Request

POST https://ucs.example.com/api/v1.0/crm/company

Authorization: Bearer AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz
Content-Type: application/json

{
"group_id": 1,
"name": "Společnost a.s."
}

Response

200 OK

Content-Type: application/json

{
"success": true,
"data": 10765
}

Aktualizace společnosti

PATCH /api/v1.0/crm/company/{company_id}

Jako tělo požadavku se předá struktura objektu Company s atributy, které mají být aktualizovány. Atribut persons je nepovinný, pokud nemají být aktualizovány asociované osoby. Pokud je atribut persons předán, pak jsou osoby přepsány podle předaného obsahu.

Návratová hodnota metody je prázdná.

Příklad úpravy atributů společnosti v µCRM

Request

PATCH https://ucs.example.com/api/v1.0/crm/company/123456

Authorization: Bearer AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz
Content-Type: application/json

{
"persons": [
{
"person_id": 123456,
"role": "dodavatel"
},
{
"person_id": 123457,
"role": "jednatel"
}
]
}

Response

200 OK

Content-Type: application/json

{
"success": true,
"data": null
}

Smazání společnosti

DELETE /api/v1.0/crm/company/{company_id}

Vymaže společnost z UCS.

Návratová hodnota metody je prázdná.

Příklad smazání společnosti z µCRM

Request

DELETE https://ucs.example.com/api/v1.0/crm/company/10764

Authorization: Bearer AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz

Response

200 OK

Content-Type: application/json

{
"success": true,
"data": null
}