Introduction
Enreach Websocket API (RTE, Real-Time Engine) is a Microsoft SignalR-based WebSocket API providing real-time data updates to browsers or native clients.
It enables the clients to receive updated information about user availabilities, queue statuses, new callback items, etc. with a real-time notification instead of having to constantly poll the REST API. This produces a better user experience and greatly decreases the load inflicted on the infrastructure.
More information about SignalR and how to implement client can be found from Mirosoft SignalR client documentation. Microsoft provides SignalR client libraries for JavaScript, .NET, and Java.
Note that Benemen was renamed to Enreach in 2022, and corresponding naming changes were applied to technical products and documentation as well. Some documentation and technical details (XML namespaces, domain names) may still contain Benemen references.
Client authentication
RTE authenticates clients with a JWT generated by REST API GET /token/{userid}/rte/ endpoint.
The client gets the RTE token from REST API and passes it as a parameter to establish a connection with the RTE hub. If the user got authenticated successfully a WebSocket connection will be established. Otherwise, the client will get 401 Unauthorized as a response.
JWT is validated only when a new connection is established. The connection can remain open indefinitely.
High level authentication and communication flow is presented in diagram below:
- Client gets JWT token from REST API
- Client establishes a connection with RTE hub and passes JWT token as a parameter
- RTE hub validates JWT token and establishes a WebSocket connection
- Client subscribes to events
- RTE hub sends event data to the client
Interface
RTE provides public interface to establish connection and manage the subscriptions.
Establishing a connection
//signalr.js from Microsoft must be referenced on the page
// retrieve RTE url and token from REST API
var url = "https://api-silox.enreachvoice.com/token/me/rte/";
const response = await fetch(url, {
method: 'GET',
headers: headers,
});
// response contains RTE Url and the JWT token
// {
// "WssEndpoint": "wss://rte-silox.enreachvoice.com/rte",
// "Token": "base64-encoded-jwt-token"
// }
//
// create connection
var connection = new signalR.HubConnectionBuilder()
.withUrl(response.WSSEndpoint, { accessTokenFactory: () => response.Token })
.withAutomaticReconnect()
.build();
using Microsoft.AspNetCore.SignalR.Client;
var RTEHubConnection = new HubConnectionBuilder()
.WithUrl(rteUrl, options =>
{
options.Transports = Microsoft.AspNetCore.Http.Connections.HttpTransportType.WebSockets;
options.AccessTokenProvider = () => Task.FromResult(RTEToken);
}).Build();
A new connection is created using HubConnectionBuilder. RTE url and authentication token are obtained via REST API. See Authentication section.
Hub Methods
Clients call public methods on hubs via the invoke method of the HubConnection. The invoke method accepts:
- The name of the hub method.
- Arguments defined in the hub method.
RTE Hub provides following methods
Method | Arguments | Description |
---|---|---|
Subscribe | Array of EntitySubscription | Subscribes to the specific events, return array of SubscriptionResult |
Unsubscribe | Array of EntitySubscription | Unsubscribes from the specific events, return array of SubscriptionResult |
UnsubscribeAll | None | Unsubscribes from all events |
AvailableSubscriptions | None | Returns an array of strings where each item is an event name |
ActiveSubscriptions | None | Returns an array of Subscriptions for all active subscriptions for the session |
Receiving events
Example of receiving messages from the hub, and print them to the console
connection.on("MessageReceived", function (message) {
console.log(JSON.stringify(message.data));
});
To receive messages from the hub, define a method to process MessageReceived
events. This is the only event emitted from the hub. MessageReceived payload contains subscription details and event data.
EntitySubscription
Example subscription payload used in Subscribe and Unsubscribe methods
[
{
EntityId: "c9eeb030-ff4b-ea11-ac9c-00155d4fdcf3",
EventName: "QueueStatus"
},
{
EntityId: "a1eeb030-ff4b-ea11-ac9c-00155d4fdcf3",
EventName: "UserStatus"
}
]
EntitySubscription used to subscribe and unsubscribe specific Events for a specific EntityId.
Property | Type | Description |
---|---|---|
EntityId | string | Entity id. QueueId for Queues, UserId for Users and CallListId for CallLists |
EventName | string | Event name |
SubscriptionResult
Example subscription result:
{
"subscribed": true,
"message": null,
"entityId": "c9eeb030-ff4b-ea11-ac9c-00155d4fdcf3",
"eventName": "queuestatus"
}
SubscriptionResult is returned by Subscribe and Unsubscribe methods.
Property | Type | Description |
---|---|---|
subscribed | boolean | Indicates if subscription was successful |
message | string | Error message if subscription failed |
entityId | string | Entity id |
eventName | string | Event name |
MessageReceived
Example MessageReceived payload of UserStatus event
{
"subscription": {
"id": "81352549-c0be-4d58-bc76-79a29ac92e1d",
"allRootEntities": false,
"rootEntityId": "29f6e823-b484-e611-80c9-00505689257e",
"rootEntityType": "Organization",
"organizationId": "29f6e823-b484-e611-80c9-00505689257e",
"eventType": "UserStatus",
"entityType": "User",
"entityId": "aa9730c4-ce86-e611-80c9-00505689257e",
"allEntities": false
},
"data": {
"rootEntityType": "Organization",
"rootEntityId": "29f6e823-b484-e611-80c9-00505689257e",
"eventType": "UserStatus",
"entityType": "User",
"entityId": "aa9730c4-ce86-e611-80c9-00505689257e",
"messageTTLSeconds": 60,
"userId": "aa9730c4-ce86-e611-80c9-00505689257e",
"organizationId": "29f6e823-b484-e611-80c9-00505689257e",
"canBeAllocatedTo": true,
"talking": false,
"activeQueueId": null,
"available": true,
"schedule": true,
"serving": true,
"serviceTerminals": 1,
"activeQueues": 2,
"parkedCalls": 0,
"wrapUpEnd": null,
"servingCallback": false,
"fetchMode": true,
"id": "aa90c608-7fd4-4c59-af60-d8141470e85b",
"timestamp": "2023-10-19T14:21:19.7009158Z"
}
}
MessageReceived payload contains subscription details and event data.
Property | Type | Description |
---|---|---|
subscription | object | Subscription |
data | object | Event data payload depends on the event type. Please refer to the User, Queue and CallList sections for more details. |
Subscription
Subscription contains details about the subscription.
Property | Type | Description |
---|---|---|
id | string | Subscription id |
allRootEntities | boolean | Indicates if subscription is for all root entities |
rootEntityId | string | Root entity id |
rootEntityType | string | Root entity type |
organizationId | string | Organization id |
eventType | string | Event type |
entityType | string | Entity type |
entityId | string | Entity id |
allEntities | boolean | Indicates if subscription is for all entities |
Managing Subscriptions
Subscribing to events
Example Subscription
// list of events & entities to subscribe to
var subscriptions = new Array();
subscriptions.push({
EntityId: "a1eeb030-ff4b-ea11-ac9c-00155d4fdcf3", // UserId of the user, we want to subscribe UserStatus events to
EventName: "UserStatus" // Event name
});
subscriptions.push({
EntityId: "c9eeb030-ff4b-ea11-ac9c-00155d4fdcf3", // QueueId of the queue, we want to subscribe QueueStatus events to
EventName: "QueueStatus" // Event name
});
// Call 'Subscribe' method.
connection.invoke("Subscribe", subscriptions).then(function (payload) {
console.log("Subscription result: " + JSON.stringify(payload));
}).catch(function (err) {
return console.error(err.toString());
});
// Handler to process received events, just pretty print it to the console
connection.on("MessageReceived", function (message) {
console.log("Message details: " + JSON.stringify(message, null, 2));
});
public class ClientSubscriptionModel
{
public string EntityId { get; set; }
public string EventName { get; set; }
}
public class RTEMessage
{
public ClientSubscriptionModel Subscription { get; set; }
public dynamic Data { get; set; }
}
RTEHubConnection.On<RTEMessage>("MessageReceived", (message) =>
{
RTE_Message_Received(message.subscription, message.data);
});
ClientSubscriptionModel[] subscriptions = new ClientSubscriptionModel[2];
subscriptions[0] = new ClientSubscriptionModel
{
EntityId = "a1eeb030-ff4b-ea11-ac9c-00155d4fdcf3",
EventName = "UserAvailability"
};
subscriptions[1] = new ClientSubscriptionModel
{
EntityId = "c9eeb030-ff4b-ea11-ac9c-00155d4fdcf3",
EventName = "UserCallIncoming"
};
RTEHubConnection.InvokeAsync("Subscribe", subscriptions);
public void RTE_Message_Received(ClientSubscriptionModel subscription, dynamic payload)
{
}
When the connection is established it is possible to subscribe for the specific events and define handlers to process subscription results and arrived event’s data.
To subscribe to events, you must define the entity (User, Queue or CallList) and event name. It is important to note, that not all events are available for all entities. For example, UserCallIncoming event is available only for User entity. And QueueCallIncoming event is available only for Queue entity.
Event name list can be retrieved by calling AvailableSubscriptions method.
Managing subscriptions on disconnect and reconnect is a client responsibility. RTE does not store subscriptions and does not restore them on reconnect.
Subscription validation and authorization
Every subscription item is validated with the following logic:
- Is EntityId a valid Guid type. If not - validation failed, "Invalid EntityId" will be returned as validation result.
- Does EventName have a valid name. If not - validation failed, "Invalid event name" will be returned as validation result.
- Does the current user have permission to subscribe to this event. If not - validation failed, "Unauthorized" will be returned as validation result.
If validation is successful, the subscription will be created and the result will be returned as "subscribed": true.
Example subscription payload
[
{
EntityId: "c9eeb030-ff4b-ea11-ac9c-00155d4fdcf3",
EventName: "QueueStatus"
},
{
EntityId: "a1eeb030-ff4b-ea11-ac9c-00155d4fdcf3",
EventName: "UserStatus"
}
]
Example subscription result:
[
{
"subscribed": true,
"message": null,
"entityId": "c9eeb030-ff4b-ea11-ac9c-00155d4fdcf3",
"eventName": "queuestatus"
},
{
"subscribed": false,
"message": "Unauthorized",
"entityId": "a1eeb030-ff4b-ea11-ac9c-00155d4fdcf3",
"eventName": "userstatus"
}
]
Unsubscribing
it is possible to unsubscribe from a specific events or all events at once. 'Unsubscribe' method accepts an array of json objects containing EntityId and EventName.
Example Unsubscribe
// list of events & entities to unsubscribe from
var subscriptions = new Array();
subscriptions.push({
EntityId: "a1eeb030-ff4b-ea11-ac9c-00155d4fdcf3",
EventName: "UserAvailability"
});
// This will delete subscriptions for the specific events and return true on success.
connection.invoke("Unsubscribe", subscriptions).then(function (payload) {
console.log("Unsubscription result: " + JSON.stringify(payload));
}).catch(function (err) {
return console.error(err.toString());
});
//This will delete all subscriptions and return true on success.
connection.invoke("UnsubscribeAll").then(function (payload) {
console.log("UnsubscribeAll result: " + JSON.stringify(payload));
}).catch(function (err) {
return console.error(err.toString());
});
Get available subscription events
All available subscription events can be retrieved by calling "AvailableSubscriptions" method. The result will be presented as an array of strings where each item is an event name.
Note that not all events are available for all entities. For example, UserCallIncoming event is available only for User entity. And QueueCallIncoming event is available only for Queue entity.
connection.invoke("AvailableSubscriptions", subscriptions).then(function (payload) {
console.log("Available subscriptions " + JSON.stringify(payload));
}).catch(function (err) {
return console.error(err.toString());
});
Get Active subscription events
ActiveSubscription for the session can be retrieved by calling "ActiveSubscriptions" method. The result will be presented as an array of Subscription.
connection.invoke("ActiveSubscriptions").then(function (payload) {
console.log("Available subscriptions " + JSON.stringify(payload));
}).catch(function (err) {
return console.error(err.toString());
});
User
Event: UserAlert
Example payload of Event: UserAlert
{
"RootEntityType": "Organization",
"RootEntityId": "00000000-0000-0000-0000-000000000000",
"EventType": "UserAlert",
"EntityType": "User",
"EntityId": "00000000-0000-0000-0000-000000000000",
"AlertId": "00000000-0000-0000-0000-000000000000",
"UserId": "00000000-0000-0000-0000-000000000000",
"OrganizationId": "00000000-0000-0000-0000-000000000000",
"ConditionName": "Example ConditionName",
"ConditionValue": "Example ConditionValue",
"ConditionExpression": "Example ConditionExpression",
"Value": "Example Value",
"Id": "00000000-0000-0000-0000-000000000000",
"Timestamp": "2020-01-01T12:00:00Z",
"MessageTTLSeconds": -1
}
This is emitted when a service pool alert defined by the user is triggered.
Property name | Value type | Description |
---|---|---|
AlertId | Guid | Id of alert. |
ConditionExpression | string | Expression of the triggered condition. |
ConditionName | string | Name of the triggered condition. |
ConditionValue | string | Value of the triggered condition. |
OrganizationId | Guid | Id of related organization. |
UserId | Guid | Id of target user. |
Value | string | Actual value for the triggered condition. |
Event: UserAvailability
Example payload of Event: UserAvailability
{
"RootEntityType": "Organization",
"RootEntityId": "00000000-0000-0000-0000-000000000000",
"EventType": "UserAvailability",
"EntityType": "User",
"EntityId": "00000000-0000-0000-0000-000000000000",
"UserId": "00000000-0000-0000-0000-000000000000",
"OrganizationId": "00000000-0000-0000-0000-000000000000",
"UserName": "user.name@example.com",
"ProfileId": "00000000-0000-0000-0000-000000000000",
"Availability": "Example Availability",
"StartTime": "0001-01-01T00:00:00",
"EndTime": "0001-01-01T00:00:00",
"Note": "Example Note",
"EventSource": "Example EventSource",
"TransferNumber": "+123457890123",
"Id": "00000000-0000-0000-0000-000000000000",
"Timestamp": "2020-01-01T12:00:00Z",
"MessageTTLSeconds": -1
}
User's current availability state
Property name | Value type | Description |
---|---|---|
Availability | string | Availability state, possible values: Available, Busy, DoNotDisturb, OffWork, BRB, Away |
EndTime | DateTime | End time of the state, DateTime.MaxValue if the state is continuous |
EventSource | String | Availability event source from db |
Note | String | User-defined message or description |
OrganizationId | Guid | Id of related organization. |
ProfileId | Guid | Id of the availability profile in database. |
StartTime | DateTime | Start time of the state |
TransferNumber | string | The phone number calls are transferred to if appropriate. |
UserId | Guid | Id of target user. |
UserName | string | Username of target user. |
Event: UserCallAvailableForMonitoring
Example payload of Event: UserCallAvailableForMonitoring
{
"RootEntityType": "Organization",
"RootEntityId": "00000000-0000-0000-0000-000000000000",
"EventType": "UserCallAvailableForMonitoring",
"EntityType": "User",
"EntityId": "00000000-0000-0000-0000-000000000000",
"TargetUserId": "00000000-0000-0000-0000-000000000000",
"TargetUserName": "Example TargetUserName",
"OrganizationId": "00000000-0000-0000-0000-000000000000",
"SupervisorUserId": "00000000-0000-0000-0000-000000000000",
"SupervisorUserName": "Example SupervisorUserName",
"QueueName": "Example QueueName",
"QueueId": null,
"CallId": "00000000-0000-0000-0000-000000000000",
"LegId": "Example LegId",
"AgentLegId": "Example AgentLegId",
"SupervisorTerminalNumber": "+123457890123",
"SupervisionCallInNumber": "+123457890123",
"CallType": "Example CallType",
"CallerNumber": "+123457890123",
"ConnectedToAgentTime": "0001-01-01T00:00:00",
"Id": "00000000-0000-0000-0000-000000000000",
"Timestamp": "2020-01-01T12:00:00Z",
"MessageTTLSeconds": -1
}
There is a new call for a user that can be supervised by the supervisor.
Property name | Value type | Description |
---|---|---|
AgentLegId | string | LegId of of the forked call to agent |
CallerNumber | string | Caller number |
CallId | Guid | Id of of the supervised call. |
CallType | string | Call type: servicecall (directcall) (callout) |
ConnectedToAgentTime | DateTime | Time when the call was connected to the agent |
LegId | string | LegId of of the supervised call. |
OrganizationId | Guid | Id of related organization. |
QueueId | Guid? | Id of the service queue |
QueueName | string | Name of the service queue |
SupervisionCallInNumber | string | Information for Supervisor UI where to call for the supervision call |
SupervisorTerminalNumber | string | Which number Core should expect the supervisor call to come from |
SupervisorUserId | Guid | Id of the supervisor. |
SupervisorUserName | string | Name of the supervisor. |
TargetUserId | Guid | Id of target user. |
TargetUserName | string | User being supervised. |
Event: UserCallInArrived
Example payload of Event: UserCallInArrived
{
"RootEntityType": "Organization",
"RootEntityId": "00000000-0000-0000-0000-000000000000",
"EventType": "UserCallInArrived",
"EntityType": "User",
"EntityId": "00000000-0000-0000-0000-000000000000",
"CallId": "00000000-0000-0000-0000-000000000000",
"LegId": "Example LegId",
"UserId": "00000000-0000-0000-0000-000000000000",
"OrganizationId": "00000000-0000-0000-0000-000000000000",
"UserName": "user.name@example.com",
"CallerNumber": "+123457890123",
"TargetNumber": "+123457890123",
"Publicity": 0,
"Id": "00000000-0000-0000-0000-000000000000",
"Timestamp": "2020-01-01T12:00:00Z",
"MessageTTLSeconds": -1
}
Incoming call. Current target is user. Call entered for allocation.
Property name | Value type | Description |
---|---|---|
CallerNumber | string | Original caller number. |
CallId | Guid | Id of core call event relates to. |
LegId | string | Id of core call leg event relates to. |
OrganizationId | Guid | Id of related organization. |
Publicity | CallEventPublicityCategory | The publicity of user's direct calls |
TargetNumber | string | Original called number. |
UserId | Guid | Id of current target user. |
UserName | string | Username of current target user. |
Event: UserCallInCallbackCreated
Example payload of Event: UserCallInCallbackCreated
{
"RootEntityType": "Organization",
"RootEntityId": "00000000-0000-0000-0000-000000000000",
"EventType": "UserCallInCallbackCreated",
"EntityType": "User",
"EntityId": "00000000-0000-0000-0000-000000000000",
"UserId": "00000000-0000-0000-0000-000000000000",
"CallBackId": "00000000-0000-0000-0000-000000000000",
"CallListId": "00000000-0000-0000-0000-000000000000",
"OrganizationId": "00000000-0000-0000-0000-000000000000",
"CallId": null,
"LegId": "Example LegId",
"RecordingId": null,
"ContactNumber": "+123457890123",
"TargetNumber": "+123457890123",
"ContactMessage": "Example ContactMessage",
"CreationTime": "0001-01-01T00:00:00",
"Id": "00000000-0000-0000-0000-000000000000",
"Timestamp": "2020-01-01T12:00:00Z",
"MessageTTLSeconds": -1
}
Produced when a callback request targeted for the user is created (by Controller).
Property name | Value type | Description |
---|---|---|
CallBackId | Guid | CallBack Id this event relates to. |
CallId | Guid? | The id of the original call that prompted the creation of this request |
CallListId | Guid | Id of the CallList for this CallBack |
ContactMessage | string | ContactMessage, e.g configured in service queue |
ContactNumber | string | Contact number that is supposed to be called to |
CreationTime | DateTime | When the request was initially created |
LegId | string | Id of core call leg event relates to. |
OrganizationId | Guid | Id of related organization. |
RecordingId | Guid? | Optional RecordingId if one exists |
TargetNumber | string | Original target number that was called |
UserId | Guid | Id of the user the personal callback is targeted to |
Event: UserCallInComing
Example payload of Event: UserCallInComing
{
"RootEntityType": "Organization",
"RootEntityId": "00000000-0000-0000-0000-000000000000",
"EventType": "UserCallInComing",
"EntityType": "User",
"EntityId": "00000000-0000-0000-0000-000000000000",
"CallId": "00000000-0000-0000-0000-000000000000",
"LegId": "Example LegId",
"UserId": "00000000-0000-0000-0000-000000000000",
"OrganizationId": "00000000-0000-0000-0000-000000000000",
"Username": "user.name@example.com",
"CallerNumber": "+123457890123",
"TargetNumber": "+123457890123",
"Publicity": 0,
"Id": "00000000-0000-0000-0000-000000000000",
"Timestamp": "2020-01-01T12:00:00Z",
"MessageTTLSeconds": -1
}
Incoming direct call to user entered Controller.
Property name | Value type | Description |
---|---|---|
CallerNumber | string | Original caller number. |
CallId | Guid | Id of core call event relates to. |
LegId | string | Id of core call leg event relates to. |
OrganizationId | Guid | Id of related organization. |
Publicity | CallEventPublicityCategory | The publicity of user's direct calls |
TargetNumber | string | Original called number. |
UserId | Guid | Id of target user. |
Username | string | Username of target user |
Event: UserCallInDisconnected
Example payload of Event: UserCallInDisconnected
{
"RootEntityType": "Organization",
"RootEntityId": "00000000-0000-0000-0000-000000000000",
"EventType": "UserCallInDisconnected",
"EntityType": "User",
"EntityId": "00000000-0000-0000-0000-000000000000",
"CallId": "00000000-0000-0000-0000-000000000000",
"LegId": "Example LegId",
"UserId": "00000000-0000-0000-0000-000000000000",
"OrganizationId": "00000000-0000-0000-0000-000000000000",
"Username": "user.name@example.com",
"Reason": "Example Reason",
"TechQueueId": null,
"TechReason": "Example TechReason",
"CallerNumber": "+123457890123",
"TargetNumber": "+123457890123",
"Publicity": 0,
"Id": "00000000-0000-0000-0000-000000000000",
"Timestamp": "2020-01-01T12:00:00Z",
"MessageTTLSeconds": -1
}
Call in, currently for user, was disconnected.
Property name | Value type | Description |
---|---|---|
CallerNumber | string | Original caller number. |
CallId | Guid | Id of core call event relates to. |
LegId | string | Id of core call leg event relates to. |
OrganizationId | Guid | Id of related organization. |
Publicity | CallEventPublicityCategory | The publicity of user's direct calls |
Reason | string | Reason for the disconnect. 'remote' or 'local' |
TargetNumber | string | Original called number. |
TechQueueId | Guid? | Id of then current technical queue, may be different to the service queue. |
TechReason | string | Technical reason (e.g SIP cause code) for the disconnect. |
UserId | Guid | Id of current target user. |
Username | string | Username of target user |
Event: UserCallInHoldEnd
Example payload of Event: UserCallInHoldEnd
{
"RootEntityType": "Organization",
"RootEntityId": "00000000-0000-0000-0000-000000000000",
"EventType": "UserCallInHoldEnd",
"EntityType": "User",
"EntityId": "00000000-0000-0000-0000-000000000000",
"CallId": "00000000-0000-0000-0000-000000000000",
"LegId": "Example LegId",
"UserId": "00000000-0000-0000-0000-000000000000",
"OrganizationId": "00000000-0000-0000-0000-000000000000",
"Id": "00000000-0000-0000-0000-000000000000",
"Timestamp": "2020-01-01T12:00:00Z",
"MessageTTLSeconds": -1
}
Notification indicating that the user's incoming call is off hold.
Property name | Value type | Description |
---|---|---|
CallId | Guid | Id of core call event relates to. |
LegId | string | Id of core call leg event relates to. |
OrganizationId | Guid | Id of related organization. |
UserId | Guid | Id of calling user. |
Event: UserCallInHoldStart
Example payload of Event: UserCallInHoldStart
{
"RootEntityType": "Organization",
"RootEntityId": "00000000-0000-0000-0000-000000000000",
"EventType": "UserCallInHoldStart",
"EntityType": "User",
"EntityId": "00000000-0000-0000-0000-000000000000",
"CallId": "00000000-0000-0000-0000-000000000000",
"LegId": "Example LegId",
"UserId": "00000000-0000-0000-0000-000000000000",
"OrganizationId": "00000000-0000-0000-0000-000000000000",
"Id": "00000000-0000-0000-0000-000000000000",
"Timestamp": "2020-01-01T12:00:00Z",
"MessageTTLSeconds": -1
}
Notification indicating that the user's incoming call is on hold.
Property name | Value type | Description |
---|---|---|
CallId | Guid | Id of core call event relates to. |
LegId | string | Id of core call leg event relates to. |
OrganizationId | Guid | Id of related organization. |
UserId | Guid | Id of calling user. |
Event: UserCallInOverflow
Example payload of Event: UserCallInOverflow
{
"RootEntityType": "Organization",
"RootEntityId": "00000000-0000-0000-0000-000000000000",
"EventType": "UserCallInOverflow",
"EntityType": "User",
"EntityId": "00000000-0000-0000-0000-000000000000",
"CallId": "00000000-0000-0000-0000-000000000000",
"LegId": "Example LegId",
"UserId": "00000000-0000-0000-0000-000000000000",
"OrganizationId": "00000000-0000-0000-0000-000000000000",
"Username": "user.name@example.com",
"ConnectedTarget": "Example ConnectedTarget",
"TechSource": "Example TechSource",
"TechQueueId": "00000000-0000-0000-0000-000000000000",
"TechQueueName": "Example TechQueueName",
"OverflowApplet": "Example OverflowApplet",
"TechNumber": "+123457890123",
"TechEvent": "Example TechEvent",
"CallerNumber": "+123457890123",
"TargetNumber": "+123457890123",
"OverflowReason": "Example OverflowReason",
"OverflowType": "Example OverflowType",
"Publicity": 0,
"Id": "00000000-0000-0000-0000-000000000000",
"Timestamp": "2020-01-01T12:00:00Z",
"MessageTTLSeconds": -1
}
Incoming call, currently for user, overflows to next routing target.
Property name | Value type | Description |
---|---|---|
CallerNumber | string | Original caller number. |
CallId | Guid | Id of core call event relates to. |
ConnectedTarget | string | Currently connected target. |
LegId | string | Id of core call leg event relates to. |
OrganizationId | Guid | Id of related organization. |
OverflowApplet | string | Overflow Applet name. |
OverflowReason | string | Overflow reason description, values like: NoAvailableProviders, QueueFull, UserActivelyDeclined ... |
OverflowType | string | Overflow type, large set values like: AdHoc_1, ServiceOpen, QueueHandler, QueueOverflowDefault, UserTransferAll, ActPreEnter, TerminationHandling |
Publicity | CallEventPublicityCategory | The publicity of user's direct calls |
TargetNumber | string | Original called number. |
TechEvent | string | Technical event. |
TechNumber | string | Technical source type. |
TechQueueId | Guid | Id of current technical queue. |
TechQueueName | string | Name of current technical queue. |
TechSource | string | Overflow source type. |
UserId | Guid | Id of current user. |
Username | string | Username of target user |
Event: UserCallInRecordingConverted
Example payload of Event: UserCallInRecordingConverted
{
"RootEntityType": "Organization",
"RootEntityId": "00000000-0000-0000-0000-000000000000",
"EventType": "UserCallInRecordingConverted",
"EntityType": "User",
"EntityId": "00000000-0000-0000-0000-000000000000",
"CallId": "00000000-0000-0000-0000-000000000000",
"OrganizationId": "00000000-0000-0000-0000-000000000000",
"UserId": "00000000-0000-0000-0000-000000000000",
"RecordingId": "00000000-0000-0000-0000-000000000000",
"ConversionId": "00000000-0000-0000-0000-000000000000",
"UserChannel": null,
"Id": "00000000-0000-0000-0000-000000000000",
"Timestamp": "2020-01-01T12:00:00Z",
"MessageTTLSeconds": -1
}
Incoming direct call to user, recording converted
Property name | Value type | Description |
---|---|---|
CallId | Guid | Id of core call event relates to. |
ConversionId | Guid | ConversionId |
OrganizationId | Guid | Id of related organization. |
RecordingId | Guid | RecordingId |
UserChannel | byte? | User audio channel id |
UserId | Guid | UserId |
Event: UserCallInTransferCancelled
Example payload of Event: UserCallInTransferCancelled
{
"RootEntityType": "Organization",
"RootEntityId": "00000000-0000-0000-0000-000000000000",
"EventType": "UserCallInTransferCancelled",
"EntityType": "User",
"EntityId": "00000000-0000-0000-0000-000000000000",
"CallId": "00000000-0000-0000-0000-000000000000",
"LegId": "Example LegId",
"UserId": "00000000-0000-0000-0000-000000000000",
"OrganizationId": "00000000-0000-0000-0000-000000000000",
"Username": "user.name@example.com",
"TechQueueId": "00000000-0000-0000-0000-000000000000",
"TechQueueName": "Example TechQueueName",
"TransferApplet": "Example TransferApplet",
"TechSource": "Example TechSource",
"Reason": "Example Reason",
"DetailedReason": "Example DetailedReason",
"CallerNumber": "+123457890123",
"TargetNumber": "+123457890123",
"Publicity": 0,
"Id": "00000000-0000-0000-0000-000000000000",
"Timestamp": "2020-01-01T12:00:00Z",
"MessageTTLSeconds": -1
}
Incoming call, currently targeted to user. Transfer cancelled.
Property name | Value type | Description |
---|---|---|
CallerNumber | string | Original caller number. |
CallId | Guid | Id of core call event relates to. |
DetailedReason | string | Detailed cancellation reason. |
LegId | string | Id of core call leg event relates to. |
OrganizationId | Guid | Id of related organization. |
Publicity | CallEventPublicityCategory | The publicity of user's direct calls |
Reason | string | Cancellation reason. |
TargetNumber | string | Original called number. |
TechQueueId | Guid | Id of current technical queue. |
TechQueueName | string | Name of current technical queue. |
TechSource | string | Technical source type. |
TransferApplet | string | Transferring Applet name. |
UserId | Guid | Id of current user. |
Username | string | Transferring user's username |
Event: UserCallInTransferConnected
Example payload of Event: UserCallInTransferConnected
{
"RootEntityType": "Organization",
"RootEntityId": "00000000-0000-0000-0000-000000000000",
"EventType": "UserCallInTransferConnected",
"EntityType": "User",
"EntityId": "00000000-0000-0000-0000-000000000000",
"CallId": "00000000-0000-0000-0000-000000000000",
"LegId": "Example LegId",
"UserId": "00000000-0000-0000-0000-000000000000",
"OrganizationId": "00000000-0000-0000-0000-000000000000",
"Username": "user.name@example.com",
"ConnectedTarget": "Example ConnectedTarget",
"TransferSource": "Example TransferSource",
"TechQueueId": "00000000-0000-0000-0000-000000000000",
"TechQueueName": "Example TechQueueName",
"TransferApplet": "Example TransferApplet",
"TechSource": "Example TechSource",
"CallerNumber": "+123457890123",
"TargetNumber": "+123457890123",
"Publicity": 0,
"Id": "00000000-0000-0000-0000-000000000000",
"Timestamp": "2020-01-01T12:00:00Z",
"MessageTTLSeconds": -1
}
Incoming call, currently targeted to user. Transfer to overflow target connected.
Property name | Value type | Description |
---|---|---|
CallerNumber | string | Original caller number. |
CallId | Guid | Id of core call event relates to. |
ConnectedTarget | string | Connected target. |
LegId | string | Id of core call leg event relates to. |
OrganizationId | Guid | Id of related organization. |
Publicity | CallEventPublicityCategory | The publicity of user's direct calls |
TargetNumber | string | Original called number. |
TechQueueId | Guid | Id of current technical queue. |
TechQueueName | string | Name of current technical queue. |
TechSource | string | Technical source type. |
TransferApplet | string | Transferring Applet name. |
TransferSource | string | Transfer source. |
UserId | Guid | Id of transferring current user. |
Username | string | Transferring user's username |
Event: UserCallInTransferStarted
Example payload of Event: UserCallInTransferStarted
{
"RootEntityType": "Organization",
"RootEntityId": "00000000-0000-0000-0000-000000000000",
"EventType": "UserCallInTransferStarted",
"EntityType": "User",
"EntityId": "00000000-0000-0000-0000-000000000000",
"CallId": "00000000-0000-0000-0000-000000000000",
"LegId": "Example LegId",
"UserId": "00000000-0000-0000-0000-000000000000",
"OrganizationId": "00000000-0000-0000-0000-000000000000",
"Username": "user.name@example.com",
"TransferTarget": "Example TransferTarget",
"TransferSource": "Example TransferSource",
"TechQueueId": "00000000-0000-0000-0000-000000000000",
"TechQueueName": "Example TechQueueName",
"TransferApplet": "Example TransferApplet",
"TechSource": "Example TechSource",
"CallerNumber": "+123457890123",
"TargetNumber": "+123457890123",
"Publicity": 0,
"Id": "00000000-0000-0000-0000-000000000000",
"Timestamp": "2020-01-01T12:00:00Z",
"MessageTTLSeconds": -1
}
Incoming call, currently targeted to user. Transfer to overflow target started.
Property name | Value type | Description |
---|---|---|
CallerNumber | string | Original caller number. |
CallId | Guid | Id of core call event relates to. |
LegId | string | Id of core call leg event relates to. |
OrganizationId | Guid | Id of related organization. |
Publicity | CallEventPublicityCategory | The publicity of user's direct calls |
TargetNumber | string | Original called number. |
TechQueueId | Guid | Id of current technical queue. |
TechQueueName | string | Name of current technical queue. |
TechSource | string | Technical source type. |
TransferApplet | string | Transferring Applet name. |
TransferSource | string | Transfer source. |
TransferTarget | string | Transfer target, guid or phone number. |
UserId | Guid | Id of current transferring user. |
Username | string | Transferring user's username |
Event: UserCallInUserAllocated
Example payload of Event: UserCallInUserAllocated
{
"RootEntityType": "Organization",
"RootEntityId": "00000000-0000-0000-0000-000000000000",
"EventType": "UserCallInUserAllocated",
"EntityType": "User",
"EntityId": "00000000-0000-0000-0000-000000000000",
"CallId": "00000000-0000-0000-0000-000000000000",
"LegId": "Example LegId",
"UserId": "00000000-0000-0000-0000-000000000000",
"OrganizationId": "00000000-0000-0000-0000-000000000000",
"UserName": "user.name@example.com",
"UserNumber": "+123457890123",
"DetailedReason": "Example DetailedReason",
"CallerNumber": "+123457890123",
"TargetNumber": "+123457890123",
"Publicity": 0,
"Id": "00000000-0000-0000-0000-000000000000",
"Timestamp": "2020-01-01T12:00:00Z",
"MessageTTLSeconds": -1
}
Incoming call, currently targeted to user. Call allocated to user.
Property name | Value type | Description |
---|---|---|
CallerNumber | string | Original caller number. |
CallId | Guid | Id of core call event relates to. |
DetailedReason | string | Optional detailed reason for allocation. |
LegId | string | Id of core call leg event relates to. |
OrganizationId | Guid | Id of related organization. |
Publicity | CallEventPublicityCategory | The publicity of user's direct calls |
TargetNumber | string | Original called number. |
UserId | Guid | Id of allocating User. |
UserName | string | Allocation target username |
UserNumber | string | Number of allocating User. |
Event: UserCallInUserCancelled
Example payload of Event: UserCallInUserCancelled
{
"RootEntityType": "Organization",
"RootEntityId": "00000000-0000-0000-0000-000000000000",
"EventType": "UserCallInUserCancelled",
"EntityType": "User",
"EntityId": "00000000-0000-0000-0000-000000000000",
"CallId": "00000000-0000-0000-0000-000000000000",
"LegId": "Example LegId",
"UserId": "00000000-0000-0000-0000-000000000000",
"OrganizationId": "00000000-0000-0000-0000-000000000000",
"UserName": "user.name@example.com",
"Reason": "Example Reason",
"DetailedReason": "Example DetailedReason",
"CallerNumber": "+123457890123",
"TargetNumber": "+123457890123",
"Publicity": 0,
"Id": "00000000-0000-0000-0000-000000000000",
"Timestamp": "2020-01-01T12:00:00Z",
"MessageTTLSeconds": -1
}
Incoming call, currently targeted to user. Call allocation to user cancelled.
Property name | Value type | Description |
---|---|---|
CallerNumber | string | Original caller number. |
CallId | Guid | Id of core call event relates to. |
DetailedReason | string | Detailed cancellation reason. |
LegId | string | Id of core call leg event relates to. |
OrganizationId | Guid | Id of related organization. |
Publicity | CallEventPublicityCategory | The publicity of user's direct calls |
Reason | string | Cancellation reason. |
TargetNumber | string | Original called number. |
UserId | Guid | Id of allocated user. |
UserName | string | Username of cancelling user. |
Event: UserCallInUserConnected
Example payload of Event: UserCallInUserConnected
{
"RootEntityType": "Organization",
"RootEntityId": "00000000-0000-0000-0000-000000000000",
"EventType": "UserCallInUserConnected",
"EntityType": "User",
"EntityId": "00000000-0000-0000-0000-000000000000",
"CallId": "00000000-0000-0000-0000-000000000000",
"LegId": "Example LegId",
"AgentLegId": "Example AgentLegId",
"UserId": "00000000-0000-0000-0000-000000000000",
"OrganizationId": "00000000-0000-0000-0000-000000000000",
"UserName": "user.name@example.com",
"UserNumber": "+123457890123",
"CallerNumber": "+123457890123",
"TargetNumber": "+123457890123",
"Publicity": 0,
"Id": "00000000-0000-0000-0000-000000000000",
"Timestamp": "2020-01-01T12:00:00Z",
"MessageTTLSeconds": -1
}
Incoming call, currently targeted to user. Call allocation to user connected.
Property name | Value type | Description |
---|---|---|
AgentLegId | string | LegId of of the forked call to agent |
CallerNumber | string | Original caller number. |
CallId | Guid | Id of core call event relates to. |
LegId | string | Id of core call leg event relates to. |
OrganizationId | Guid | Id of related organization. |
Publicity | CallEventPublicityCategory | The publicity of user's direct calls |
TargetNumber | string | Original called number. |
UserId | Guid | Id of connected User. |
UserName | string | Username of connected User. |
UserNumber | string | Number of connected User. |
Event: UserCallInUserOverflow
Example payload of Event: UserCallInUserOverflow
{
"RootEntityType": "Organization",
"RootEntityId": "00000000-0000-0000-0000-000000000000",
"EventType": "UserCallInUserOverflow",
"EntityType": "User",
"EntityId": "00000000-0000-0000-0000-000000000000",
"CallId": "00000000-0000-0000-0000-000000000000",
"LegId": "Example LegId",
"UserId": "00000000-0000-0000-0000-000000000000",
"OrganizationId": "00000000-0000-0000-0000-000000000000",
"Username": "user.name@example.com",
"Reason": "Example Reason",
"Target": "Example Target",
"CallerNumber": "+123457890123",
"TargetNumber": "+123457890123",
"Publicity": 0,
"Id": "00000000-0000-0000-0000-000000000000",
"Timestamp": "2020-01-01T12:00:00Z",
"MessageTTLSeconds": -1
}
Worknumber call is overflowing to other destination
Property name | Value type | Description |
---|---|---|
CallerNumber | string | Original caller number |
CallId | Guid | Id of core call event relates to |
LegId | string | Id of core call leg event relates to. |
OrganizationId | Guid | Id of related organization |
Publicity | CallEventPublicityCategory | The publicity of user's direct calls |
Reason | string | Reason for the overflow: AVAActiveProfile, BusyForTechnicalError, DND, OffWork, NoAnswer, InterruptOverflow BusyOnBusy, TransferAll, BlindTransfer |
Target | string | Transfer target. Guid or phone number, or list of targets. |
TargetNumber | string | Original called number |
UserId | Guid | Id of transferring "responsible" user |
Username | string | Username |
Event: UserCallOutConnected
Example payload of Event: UserCallOutConnected
{
"RootEntityType": "Organization",
"RootEntityId": "00000000-0000-0000-0000-000000000000",
"EventType": "UserCallOutConnected",
"EntityType": "User",
"EntityId": "00000000-0000-0000-0000-000000000000",
"CallId": "00000000-0000-0000-0000-000000000000",
"LegId": "Example LegId",
"UserId": "00000000-0000-0000-0000-000000000000",
"OrganizationId": "00000000-0000-0000-0000-000000000000",
"UserName": "user.name@example.com",
"CallerNumber": "+123457890123",
"TargetNumber": "+123457890123",
"Publicity": 0,
"Id": "00000000-0000-0000-0000-000000000000",
"Timestamp": "2020-01-01T12:00:00Z",
"MessageTTLSeconds": -1
}
Outgoing call
Property name | Value type | Description |
---|---|---|
CallerNumber | string | Original caller number. |
CallId | Guid | Id of core call event relates to. |
LegId | string | Id of core call leg event relates to. |
OrganizationId | Guid | Id of related organization. |
Publicity | CallEventPublicityCategory | The publicity of user's direct calls |
TargetNumber | string | Original called number. |
UserId | Guid | Id of calling User. |
UserName | string | Username of calling User. |
Event: UserCallOutDisconnected
Example payload of Event: UserCallOutDisconnected
{
"RootEntityType": "Organization",
"RootEntityId": "00000000-0000-0000-0000-000000000000",
"EventType": "UserCallOutDisconnected",
"EntityType": "User",
"EntityId": "00000000-0000-0000-0000-000000000000",
"CallId": "00000000-0000-0000-0000-000000000000",
"LegId": "Example LegId",
"UserId": "00000000-0000-0000-0000-000000000000",
"OrganizationId": "00000000-0000-0000-0000-000000000000",
"UserName": "user.name@example.com",
"Reason": "Example Reason",
"TechReason": "Example TechReason",
"CallerNumber": "+123457890123",
"TargetNumber": "+123457890123",
"Publicity": 0,
"Id": "00000000-0000-0000-0000-000000000000",
"Timestamp": "2020-01-01T12:00:00Z",
"MessageTTLSeconds": -1
}
User call was disconnected.
Property name | Value type | Description |
---|---|---|
CallerNumber | string | Original caller number. |
CallId | Guid | Id of core call event relates to. |
LegId | string | Id of core call leg event relates to. |
OrganizationId | Guid | Id of related organization. |
Publicity | CallEventPublicityCategory | The publicity of user's direct calls |
Reason | string | Reason for the disconnect. 'remote' or 'local' |
TargetNumber | string | Original called number. |
TechReason | string | Technical reason (e.g SIP cause code) for the disconnect. |
UserId | Guid | Id of current calling user. |
UserName | string | Username of current calling user. |
Event: UserCallOutGoing
Example payload of Event: UserCallOutGoing
{
"RootEntityType": "Organization",
"RootEntityId": "00000000-0000-0000-0000-000000000000",
"EventType": "UserCallOutGoing",
"EntityType": "User",
"EntityId": "00000000-0000-0000-0000-000000000000",
"CallId": "00000000-0000-0000-0000-000000000000",
"LegId": "Example LegId",
"UserId": "00000000-0000-0000-0000-000000000000",
"OrganizationId": "00000000-0000-0000-0000-000000000000",
"UserName": "user.name@example.com",
"CallerNumber": "+123457890123",
"TargetNumber": "+123457890123",
"CallAsNumber": "+123457890123",
"Publicity": 0,
"Id": "00000000-0000-0000-0000-000000000000",
"Timestamp": "2020-01-01T12:00:00Z",
"MessageTTLSeconds": -1
}
Outgoing direct call initiated by a user
Property name | Value type | Description |
---|---|---|
CallAsNumber | string | Optional call as number |
CallerNumber | string | Original caller number. |
CallId | Guid | Id of core call event relates to. |
LegId | string | Id of core call leg event relates to. |
OrganizationId | Guid | Id of related organization. |
Publicity | CallEventPublicityCategory | The publicity of user's direct calls |
TargetNumber | string | Original called number. |
UserId | Guid | Id of calling user. |
UserName | string | Username of calling user. |
Event: UserCallOutHoldEnd
Example payload of Event: UserCallOutHoldEnd
{
"RootEntityType": "Organization",
"RootEntityId": "00000000-0000-0000-0000-000000000000",
"EventType": "UserCallOutHoldEnd",
"EntityType": "User",
"EntityId": "00000000-0000-0000-0000-000000000000",
"CallId": "00000000-0000-0000-0000-000000000000",
"LegId": "Example LegId",
"UserId": "00000000-0000-0000-0000-000000000000",
"OrganizationId": "00000000-0000-0000-0000-000000000000",
"Id": "00000000-0000-0000-0000-000000000000",
"Timestamp": "2020-01-01T12:00:00Z",
"MessageTTLSeconds": -1
}
Notification indicating that the user's outgoing call is off hold.
Property name | Value type | Description |
---|---|---|
CallId | Guid | Id of core call event relates to. |
LegId | string | Id of core call leg event relates to. |
OrganizationId | Guid | Id of related organization. |
UserId | Guid | Id of calling user. |
Event: UserCallOutHoldStart
Example payload of Event: UserCallOutHoldStart
{
"RootEntityType": "Organization",
"RootEntityId": "00000000-0000-0000-0000-000000000000",
"EventType": "UserCallOutHoldStart",
"EntityType": "User",
"EntityId": "00000000-0000-0000-0000-000000000000",
"CallId": "00000000-0000-0000-0000-000000000000",
"LegId": "Example LegId",
"UserId": "00000000-0000-0000-0000-000000000000",
"OrganizationId": "00000000-0000-0000-0000-000000000000",
"Id": "00000000-0000-0000-0000-000000000000",
"Timestamp": "2020-01-01T12:00:00Z",
"MessageTTLSeconds": -1
}
Notification indicating that the user's outgoing call is on hold.
Property name | Value type | Description |
---|---|---|
CallId | Guid | Id of core call event relates to. |
LegId | string | Id of core call leg event relates to. |
OrganizationId | Guid | Id of related organization. |
UserId | Guid | Id of calling user. |
Event: UserCallOutRecordingConverted
Example payload of Event: UserCallOutRecordingConverted
{
"RootEntityType": "Organization",
"RootEntityId": "00000000-0000-0000-0000-000000000000",
"EventType": "UserCallOutRecordingConverted",
"EntityType": "User",
"EntityId": "00000000-0000-0000-0000-000000000000",
"CallId": "00000000-0000-0000-0000-000000000000",
"OrganizationId": "00000000-0000-0000-0000-000000000000",
"UserId": "00000000-0000-0000-0000-000000000000",
"RecordingId": "00000000-0000-0000-0000-000000000000",
"ConversionId": "00000000-0000-0000-0000-000000000000",
"UserChannel": null,
"Id": "00000000-0000-0000-0000-000000000000",
"Timestamp": "2020-01-01T12:00:00Z",
"MessageTTLSeconds": -1
}
Outgoing call from user, recording converted
Property name | Value type | Description |
---|---|---|
CallId | Guid | Id of core call event relates to. |
ConversionId | Guid | ConversionId |
OrganizationId | Guid | Id of related organization. |
RecordingId | Guid | RecordingId |
UserChannel | byte? | User audio channel id |
UserId | Guid | UserId for the user who made the callout |
Event: UserRealTimeTranscriptPhrase
Example payload of Event: UserRealTimeTranscriptPhrase
{
"RootEntityType": "Organization",
"RootEntityId": "00000000-0000-0000-0000-000000000000",
"EventType": "UserRealTimeTranscriptPhrase",
"EntityType": "User",
"EntityId": "00000000-0000-0000-0000-000000000000",
"CallId": "00000000-0000-0000-0000-000000000000",
"LegId": "Example LegId",
"UserId": "00000000-0000-0000-0000-000000000000",
"OrganizationId": "00000000-0000-0000-0000-000000000000",
"QueueId": null,
"CallListId": null,
"SpeakerRole": 0,
"Phrase": "Example Phrase",
"Confidence": 0.0,
"Duration": 0,
"OffsetMilliseconds": 0,
"IsIntermediate": false,
"RealtimeType": "Unknown",
"Id": "00000000-0000-0000-0000-000000000000",
"Timestamp": "2020-01-01T12:00:00Z",
"MessageTTLSeconds": -1
}
A real-time transcript phrase event for a user.
Property name | Value type | Description |
---|---|---|
CallId | Guid | Id of core call event relates to. |
CallListId | Guid? | Optional id of the calllist transcript is done for, if any |
Confidence | float | Confidence: The confidence level of the phrase NOTE: the selected one is not necessarily the one with the highest confidence |
Duration | uint | Duration: The duration of the phrase in milliseconds |
IsIntermediate | bool | IsIntermediate: Indicates if the phrase is an intermediate result |
LegId | string | Id of core call leg event relates to. |
OffsetMilliseconds | uint | Offset in milliseconds from the start of the call |
OrganizationId | Guid | Id of related organization. |
Phrase | string | Phrase: The phrase that was spoken |
QueueId | Guid? | Optional id of the queue transcript is done for, if any |
RealtimeType | TranscribeRealtimeType | Realtime type |
SpeakerRole | SpeakerRole | Role of the speaker for this phrase. |
UserId | Guid | Id of the Agent for this request. |
Event: UserSetting
Example payload of Event: UserSetting
{
"RootEntityType": "Organization",
"RootEntityId": "00000000-0000-0000-0000-000000000000",
"EventType": "UserSetting",
"EntityType": "User",
"EntityId": "00000000-0000-0000-0000-000000000000",
"UserId": "00000000-0000-0000-0000-000000000000",
"OrganizationId": "00000000-0000-0000-0000-000000000000",
"Keyword": "Example Keyword",
"Value": "Example Value",
"Values": null,
"AllowedValues": null,
"Deleted": false,
"Level": "Undefined",
"Id": "00000000-0000-0000-0000-000000000000",
"Timestamp": "2020-01-01T12:00:00Z",
"MessageTTLSeconds": -1
}
User setting changed.
Property name | Value type | Description |
---|---|---|
AllowedValues | Dictionary<string, string> | Setting allowed values. |
Deleted | bool | Is setting deleted. |
Keyword | string | Setting keyword |
Level | UserSettingLevelEnum | Setting level for authorization |
OrganizationId | Guid | Id of related organization |
UserId | Guid | Id of related user |
Value | string | Setting value |
Values | Dictionary<string, string> | Key/Value setting values |
Event: UserStatus
Example payload of Event: UserStatus
{
"RootEntityType": "Organization",
"RootEntityId": "00000000-0000-0000-0000-000000000000",
"EventType": "UserStatus",
"EntityType": "User",
"EntityId": "00000000-0000-0000-0000-000000000000",
"MessageTTLSeconds": 60,
"UserId": "00000000-0000-0000-0000-000000000000",
"OrganizationId": "00000000-0000-0000-0000-000000000000",
"CanBeAllocatedTo": false,
"Talking": false,
"TalkingStatusChanged": null,
"ActiveQueueId": null,
"ActiveCallListId": null,
"Available": false,
"Schedule": false,
"Serving": false,
"ServiceTerminals": 0,
"ActiveQueues": 0,
"ParkedCalls": 0,
"WrapUpStart": null,
"WrapUpEnd": null,
"ServingCallback": false,
"FetchMode": false,
"Note": "Example Note",
"AvailabilityStatus": "Available",
"Id": "00000000-0000-0000-0000-000000000000",
"Timestamp": "2020-01-01T12:00:00Z"
}
UserStatus changed. UserStatus represents users status from queue components view. Contains information about users serving status, such as talking, available and the ultimate “can receive calls” result.
Property name | Value type | Description |
---|---|---|
ActiveCallListId | Guid? | Guid of the call back list the user can be presumed be talking right now |
ActiveQueueId | Guid? | Guid of the service queue the user can be presumed be talking right now |
ActiveQueues | int | Number of active queues |
AvailabilityStatus | AvailabilityStatusesAVA | Availability status code. |
Available | bool | If AVA status is "available", typically when not "DND". |
CanBeAllocatedTo | bool | If it is possible to allocate a call to the user. This is a composite value from several status items, "best guess". |
FetchMode | bool | User is in FetchMode, no automatic allocation from ServiceQueues |
Note | string | Note about the user status, such as "On break", "In meeting", etc. |
OrganizationId | Guid | Id of the related organization. |
ParkedCalls | int | Number of parked calls |
Schedule | bool | If AVA availability code is not OffWork |
ServiceTerminals | int | Number of active terminals |
Serving | bool | User is serving in queues |
ServingCallback | bool | User is serving in callback list "queues" |
Talking | bool | If the user is having a call right now. Incoming and outgoing calls are considered as active calls even before call is connected to user |
TalkingStatusChanged | DateTime? | Last time the "Talking" status changed |
UserId | Guid | Id of the user. |
WrapUpEnd | DateTime? | If wrap up time is active then the end time, otherwise null |
WrapUpStart | DateTime? | If wrap up time is active then the start time, otherwise null |
Event: UserSupervisionStatus
Example payload of Event: UserSupervisionStatus
{
"RootEntityType": "Organization",
"RootEntityId": "00000000-0000-0000-0000-000000000000",
"EventType": "UserSupervisionStatus",
"EntityType": "User",
"EntityId": "00000000-0000-0000-0000-000000000000",
"TargetUserId": "00000000-0000-0000-0000-000000000000",
"TargetUserName": "Example TargetUserName",
"OrganizationId": "00000000-0000-0000-0000-000000000000",
"SupervisorUserId": "00000000-0000-0000-0000-000000000000",
"SupervisorUserName": "Example SupervisorUserName",
"QueueName": "Example QueueName",
"QueueId": null,
"CallId": "00000000-0000-0000-0000-000000000000",
"LegId": "Example LegId",
"SupervisorLegId": "Example SupervisorLegId",
"State": 0,
"Id": "00000000-0000-0000-0000-000000000000",
"Timestamp": "2020-01-01T12:00:00Z",
"MessageTTLSeconds": -1
}
This is emitted when supervisor status relating to a call changed.
Property name | Value type | Description |
---|---|---|
CallId | Guid | Id of of the supervised call. |
LegId | string | LegId of of the supervised call. |
OrganizationId | Guid | Id of related organization. |
QueueId | Guid? | Id of the service queue |
QueueName | string | Name of the service queue |
State | SupervisionState | Supervision state relating to the call. |
SupervisorLegId | string | Optional LegId of of the supervisor incoming call. |
SupervisorUserId | Guid | Id of the supervisor. |
SupervisorUserName | string | User supervising. |
TargetUserId | Guid | Id of target user. |
TargetUserName | string | User being supervised. |
Event: UserTerminalStatusEvent
Example payload of Event: UserTerminalStatusEvent
{
"RootEntityType": "Organization",
"RootEntityId": "00000000-0000-0000-0000-000000000000",
"EventType": "UserTerminalStatus",
"EntityType": "User",
"EntityId": "00000000-0000-0000-0000-000000000000",
"UserId": "00000000-0000-0000-0000-000000000000",
"OrganizationId": "00000000-0000-0000-0000-000000000000",
"Silo": "Example Silo",
"Session": "Example Session",
"Id": "00000000-0000-0000-0000-000000000000",
"Timestamp": "2020-01-01T12:00:00Z",
"Expires": "0001-01-01T00:00:00",
"TerminalType": "User",
"TerminalStatus": "Offline",
"MessageTTLSeconds": -1
}
User's current terminal status
Property name | Value type | Description |
---|---|---|
EntityId | Guid | |
EntityType | EntityType | |
EventType | EventType | |
Expires | DateTime | Event timestamp |
Id | Guid | Unique event id |
MessageTTLSeconds | int | Maximum time in seconds the event is allowed to live |
OrganizationId | Guid | Id of related organization. |
RootEntityId | Guid | |
RootEntityType | RootEntityType | |
Session | string | Session |
Silo | string | Silo |
TerminalStatus | TerminalStatus | Event terminal staus |
TerminalType | TerminalTypeId | Event terminal type |
Timestamp | DateTime | Event timestamp |
UserId | Guid | Id of target user. |
Event: UserWrapUpEnabled
Example payload of Event: UserWrapUpEnabled
{
"RootEntityType": "Organization",
"RootEntityId": "00000000-0000-0000-0000-000000000000",
"EventType": "UserWrapUpEnabled",
"EntityType": "User",
"EntityId": "00000000-0000-0000-0000-000000000000",
"OrganizationId": "00000000-0000-0000-0000-000000000000",
"CallId": null,
"LegId": "Example LegId",
"UserId": "00000000-0000-0000-0000-000000000000",
"QueueId": null,
"CallListId": null,
"CallBackId": null,
"MaxWrapUpDurationSec": 0,
"WrapUpType": "Unavailable",
"WrapUpId": "00000000-0000-0000-0000-000000000000",
"Id": "00000000-0000-0000-0000-000000000000",
"Timestamp": "2020-01-01T12:00:00Z",
"MessageTTLSeconds": -1
}
Event emitted after a service call connects to indicate that wrap-up time is enabled for the call. This is used by clients supporting wrap-up functionality to indicate to the end user that wrap-up time is in progress after the call completes.
This event is followed by UserWrapUpStarted and UserWrapUpTerminated events.
Property name | Value type | Description |
---|---|---|
CallBackId | Guid? | Call Back Id Might be null if the event is not related to a call back. |
CallId | Guid? | Id of core call event relates to. Might be null if the event is not related to a call. |
CallListId | Guid? | Call List Id Might be null if the event is not related to a call list. |
LegId | string | Id of core call leg event relates to. |
MaxWrapUpDurationSec | int | Max wrap-up duration, seconds |
OrganizationId | Guid | Id of related organization. |
QueueId | Guid? | Queue Id Might be null if the event is not related to a queue. |
UserId | Guid | Id of target user. |
WrapUpId | Guid | Wrap-up id |
WrapUpType | WrapUpType | Wrap-up type |
Event: UserWrapUpRequestInitiate
This event is emitted to indicate wrapup should be initialized Initialization (immediate or once current call is terminated) of wrap-up for user
Property name | Value type | Description |
---|---|---|
AllowWithoutCall | int | Can be initiated without a call. 0 - No, 1 - Yes, 2 - Yes but only if the user is not in a call. |
CallBackId | Guid? | Id of related callback if applicable. |
CallBackListId | Guid? | Id of related callback list if applicable. |
CallId | Guid? | Id of related call if applicable. |
LegId | string | Id of related call leg if applicable. |
MaxWrapUpTimeSec | int | Id of related wrapup time in seconds. |
OrganizationId | Guid | Id of related organization. |
QueueId | Guid? | Id of related queue if applicable. |
UserId | Guid | Id of target user. |
WrapUpId | Guid | Wrap-up id |
Event: UserWrapUpRequestTerminate
Example payload of Event: UserWrapUpRequestTerminate
{
"RootEntityType": "Organization",
"RootEntityId": "00000000-0000-0000-0000-000000000000",
"EventType": "UserWrapUpRequestTerminate",
"EntityType": "User",
"EntityId": "00000000-0000-0000-0000-000000000000",
"UserId": "00000000-0000-0000-0000-000000000000",
"OrganizationId": "00000000-0000-0000-0000-000000000000",
"Reason": "Example Reason",
"WrapUpId": null,
"Id": "00000000-0000-0000-0000-000000000000",
"Timestamp": "2020-01-01T12:00:00Z",
"MessageTTLSeconds": -1
}
This event is emitted via the API to indicate the user wishes to terminate their ongoing wrap-up ahead of the maximum allowed time, supposedly because they've finished doing whatever after-call book-keeping they are to do.
Property name | Value type | Description |
---|---|---|
OrganizationId | Guid | Id of related organization. |
Reason | string | Reason for termination: "manual" |
UserId | Guid | Id of target user. |
WrapUpId | Guid? | Wrap-up id if any If not provided any active wrap-up will be terminated. |
Event: UserWrapUpStarted
Example payload of Event: UserWrapUpStarted
{
"RootEntityType": "Organization",
"RootEntityId": "00000000-0000-0000-0000-000000000000",
"EventType": "UserWrapUpStarted",
"EntityType": "User",
"EntityId": "00000000-0000-0000-0000-000000000000",
"OrganizationId": "00000000-0000-0000-0000-000000000000",
"CallId": null,
"LegId": "Example LegId",
"UserId": "00000000-0000-0000-0000-000000000000",
"QueueId": null,
"CallListId": null,
"CallBackId": null,
"MaxWrapUpDurationSec": 0,
"WrapUpType": "Unavailable",
"WrapUpId": "00000000-0000-0000-0000-000000000000",
"Id": "00000000-0000-0000-0000-000000000000",
"Timestamp": "2020-01-01T12:00:00Z",
"MessageTTLSeconds": -1
}
Event emitted after a call with wrap-up functionality enabled disconnects and thus wrap-up time starts. It is relayed to supporting clients to indicate that wrap-up is ongoing and no calls are allocated during that time.
Property name | Value type | Description |
---|---|---|
CallBackId | Guid? | Call Back Id Might be null if the event is not related to a call back. |
CallId | Guid? | Id of core call event relates to. Might be null if the event is not related to a call. |
CallListId | Guid? | Call List Id Might be null if the event is not related to a call list. |
LegId | string | Id of core call leg event relates to. |
MaxWrapUpDurationSec | int | Max wrap-up duration, seconds |
OrganizationId | Guid | Id of related organization. |
QueueId | Guid? | Queue Id Might be null if the event is not related to a queue. |
UserId | Guid | Id of target user. |
WrapUpId | Guid | Wrap-up id |
WrapUpType | WrapUpType | Wrap-up type |
Event: UserWrapUpTerminated
Example payload of Event: UserWrapUpTerminated
{
"RootEntityType": "Organization",
"RootEntityId": "00000000-0000-0000-0000-000000000000",
"EventType": "UserWrapUpTerminated",
"EntityType": "User",
"EntityId": "00000000-0000-0000-0000-000000000000",
"OrganizationId": "00000000-0000-0000-0000-000000000000",
"CallId": null,
"LegId": "Example LegId",
"UserId": "00000000-0000-0000-0000-000000000000",
"QueueId": null,
"CallListId": null,
"CallBackId": null,
"Reason": "Example Reason",
"ElapsedTimeSec": 0,
"WrapUpType": "Unavailable",
"WrapUpId": "00000000-0000-0000-0000-000000000000",
"Id": "00000000-0000-0000-0000-000000000000",
"Timestamp": "2020-01-01T12:00:00Z",
"MessageTTLSeconds": -1
}
Emitted after wrap-up time for given call ends. It is emitted both when the maximum allowed time is up, and when an explicit termination request has been handled by the backend.
Property name | Value type | Description |
---|---|---|
CallBackId | Guid? | Call Back Id Might be null if the event is not related to a call back. |
CallId | Guid? | Id of core call event relates to. Might be null if the event is not related to a call. |
CallListId | Guid? | Call List Id Might be null if the event is not related to a call list. |
ElapsedTimeSec | int | How long the wrap-up time was on |
LegId | string | Id of core call leg event relates to. |
OrganizationId | Guid | Id of related organization. |
QueueId | Guid? | Queue Id Might be null if the event is not related to a queue. |
Reason | string | Reason for termination: e.g "manual" or "timer" |
UserId | Guid | Id of target user. |
WrapUpId | Guid | Wrap-up id |
WrapUpType | WrapUpType | Wrap-up type |
Queue
Event: QueueStatus
Example payload of Event: QueueStatus
{
"RootEntityType": "Organization",
"RootEntityId": "00000000-0000-0000-0000-000000000000",
"EventType": "QueueStatus",
"EntityType": "Queue",
"EntityId": "00000000-0000-0000-0000-000000000000",
"MessageTTLSeconds": 60,
"QueueId": "00000000-0000-0000-0000-000000000000",
"OrganizationId": "00000000-0000-0000-0000-000000000000",
"QueueName": "Example QueueName",
"NbrOfProviders": 0,
"NbrOfRequesters": 0,
"NbrOfServingAgentsEstimate": 0,
"NbrOfAllocated": 0,
"NbrOfConnected": 0,
"NbrOfQueuingRequesters": 0,
"NbrOfNotServedRequesters": 0,
"NbrOfAgentsLongTermAway": 0,
"NbrOfAgentsShortTermAway": 0,
"NbrOfAgentsImmediatelyFree": 0,
"NbrOfAgentsCheckedInQueue": 0,
"NbrOfAgentsOnWrapUp": 0,
"NbrOfAgentsOnFetchMode": 0,
"MaxWaitTime": 0,
"OpenStatus": 0,
"Id": "00000000-0000-0000-0000-000000000000",
"Timestamp": "2020-01-01T12:00:00Z"
}
Service queue status message, contains various counter values. Sent by Controller periodically if the status of the queue has changed since the last event.
Property name | Value type | Description |
---|---|---|
MaxWaitTime | long | Maximum current wait time in queue |
NbrOfAgentsCheckedInQueue | int | Total number agents that are serving in the queue (away or not). |
NbrOfAgentsImmediatelyFree | int | Number agents that are immediately free for service. |
NbrOfAgentsLongTermAway | int | Number agents that are not currently available for service in long term (e.g DND state). |
NbrOfAgentsOnFetchMode | int | Total number agents that are currently in FetchMode (no automatic allocation). |
NbrOfAgentsOnWrapUp | int | Total number agents that are serving in the queue (away or not). |
NbrOfAgentsShortTermAway | int | Number agents that are not currently available for service in short term (e.g. already talking). |
NbrOfAllocated | int | Number of current allocated calls in the queue. |
NbrOfConnected | int | Number of current connected (served by agent) calls in the queue. |
NbrOfNotServedRequesters | int | Number of calls currently not being served by an agent right now |
NbrOfProviders | int | Total number of current providers (agents) in the queue. |
NbrOfQueuingRequesters | int | Number of current queuing calls in the queue |
NbrOfRequesters | int | Total number of current requesters (calls) in the queue. |
NbrOfServingAgentsEstimate | int | Estimated number of current serving agents in the queue. |
OpenStatus | int | Queue open status estimation NA = 0 NoActiveHandler = 1 : There are no active handling endpoints/numbers for the queue. So basically "Closed" NoActiveHandlerUncertain = 2 : There are no active handling endpoints/numbers for the queue. But uncertain due script on some handlers. Closed = 3 : The only active handler is "ServiceClosed". ClosedUncertain = 4 : The only active handler is "ServiceClosed". But uncertain due script on some handlers. Open = 5 : Queue is open. OpenUncertain = 6 : Queue is open. But uncertain due script on some handlers. |
OrganizationId | Guid | Id of related organization. |
QueueId | Guid | Id of service queue. |
QueueName | string | Name of service queue. |
Misc: QueueAttachedUser
Example payload of Misc: QueueAttachedUser
{
"UserId": "00000000-0000-0000-0000-000000000000",
"Active": false,
"Priority": 0
}
Property name | Value type | Description |
---|---|---|
Active | bool | If the user is active in queue |
Priority | int | User's priority in queue |
UserId | Guid | Attached UserId |
Misc: QueueGroup
Example payload of Misc: QueueGroup
{
"Id": "00000000-0000-0000-0000-000000000000",
"Name": "Example Name",
"Description": "Example Description"
}
DTO for QueueGroup
Property name | Value type | Description |
---|---|---|
Description | string | Description of the group |
Id | Guid? | Id of the group |
Name | string | Name of the group |
CallList
Event: CallbackChanged
Example payload of Event: CallbackChanged
{
"RootEntityType": "Organization",
"RootEntityId": "00000000-0000-0000-0000-000000000000",
"EventType": "CallbackChanged",
"EntityType": "CallList",
"EntityId": "00000000-0000-0000-0000-000000000000",
"MessageTTLSeconds": 120,
"CallBackId": "00000000-0000-0000-0000-000000000000",
"CallListId": "00000000-0000-0000-0000-000000000000",
"OrganizationId": "00000000-0000-0000-0000-000000000000",
"Modified": "0001-01-01T00:00:00",
"AssignedUserId": null,
"LastAttemptUserId": null,
"LastModifiedUserId": null,
"LastAttemptTypeId": null,
"ContactName": "Example ContactName",
"ContactNumber": "+123457890123",
"ContactMessage": "Example ContactMessage",
"Note": "Example Note",
"QueueId": null,
"ChannelIn": "Example ChannelIn",
"CreationTime": "0001-01-01T00:00:00",
"Created": false,
"IsClosed": false,
"RecordingId": null,
"TypeId": 0,
"DueDate": null,
"CallId": null,
"TranscriptId": null,
"ClassificationId": null,
"ExpiryDate": null,
"LastAttemptTimestamp": null,
"LastAttemptNote": "Example LastAttemptNote",
"CalculatedPriority": "Example CalculatedPriority",
"NotBefore": null,
"CallbackAttempts": null,
"CallbackExtras": null,
"CallbackRelatedItems": null,
"Id": "00000000-0000-0000-0000-000000000000",
"Timestamp": "2020-01-01T12:00:00Z"
}
Produced when a callback request changes (is created, updated, closed etc).
Property name | Value type | Description |
---|---|---|
AssignedUserId | Guid? | Id of user the callback is currently assigned |
CalculatedPriority | string | Calculated priority |
CallbackAttempts | List<CallbackAttempt> | History of all handling attempts |
CallbackExtras | List<CallbackExtra> | Extra name-value fields |
CallBackId | Guid | CallBack Id this event relates to. |
CallbackRelatedItems | List<CallbackRelatedItem> | List of cases related to this case |
CallId | Guid? | The id of the original call that prompted the creation of this request |
CallListId | Guid | Id of the CallList for this CallBack |
ChannelIn | string | Name of the channel (usually service pool) the request came in through |
ClassificationId | Guid? | If the case has been classified, id of the classification entry |
ContactMessage | string | Any message left by the contact (usually empty) |
ContactName | string | Contact name (usually empty) |
ContactNumber | string | Contact number that is supposed to be called |
Created | bool | Whether the request was created, or updated if not created |
CreationTime | DateTime | WHen the request was initially created |
DueDate | DateTime? | When the case is due to be handled |
ExpiryDate | DateTime? | The date when the case automatically expires if not closed before it |
IsClosed | bool | Whether the request is closed |
LastAttemptNote | string | Note on the latest handling attempt |
LastAttemptTimestamp | DateTime? | Timestamp of the latest handling attempt |
LastAttemptTypeId | int? | Id of the last attempt's type |
LastAttemptUserId | Guid? | Id of user that made the last attempt |
LastModifiedUserId | Guid? | Id of user that made the last change, null if new or admin |
Modified | DateTime | Modified date |
NotBefore | DateTime? | Date before which the case should not be handled |
Note | string | Internal notes on the case |
OrganizationId | Guid | Id of related organization. |
QueueId | Guid? | Guid of the responsible service queue or IVR queue, if any came in through |
RecordingId | Guid? | Id of the corresponding audio recording (if any) |
TranscriptId | Guid? | Id of the transcript created from the recording |
TypeId | short | Type identifier. 1 - Explicit callback request 2 - Overflown call 3 - Call list item created manually |
Misc: CallbackAttempt
Example payload of Misc: CallbackAttempt
{
"Id": "00000000-0000-0000-0000-000000000000",
"UserId": null,
"Timestamp": "2020-01-01T12:00:00Z",
"CallbackAttemptTypeId": null,
"Note": "Example Note",
"RecordingId": null,
"CallId": null
}
Helper for CallbackAttempt transportation
Property name | Value type | Description |
---|---|---|
CallbackAttemptTypeId | int? | Attempt result type |
CallId | Guid? | Call id in a case there is a call associated with the attempt |
Id | Guid | Attempt id |
Note | string | User-provided note |
RecordingId | Guid? | Recording id in the case the attempt was recorded |
Timestamp | DateTime? | Attempt timestamp |
UserId | Guid? | UserId attempt relates to |
Misc: CallbackExtra
Example payload of Misc: CallbackExtra
{
"Id": 0,
"Name": "Example Name",
"Value": "Example Value"
}
Helper for CallBackExtraData transportation
Property name | Value type | Description |
---|---|---|
Id | int | Property name |
Name | string | Property name |
Value | string | Property value |
Misc: CallbackRelatedItem
Example payload of Misc: CallbackRelatedItem
{
"Id": "00000000-0000-0000-0000-000000000000",
"ListId": null,
"IsClosed": false,
"StatusId": null
}
Helper for CallbackRelatedItem transportation
Property name | Value type | Description |
---|---|---|
Id | Guid | Related request id |
IsClosed | bool | IsClosed : if the related request is already closed |
ListId | Guid? | Related request list id |
StatusId | int? | StatusId : Raw status id for the last Attempt |