forked from 2600hz/kazoo
-
Notifications
You must be signed in to change notification settings - Fork 2
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request 2600hz#11 from kageds/4.3.acdc
4.3.acdc
- Loading branch information
Showing
67 changed files
with
7,927 additions
and
2,877 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
## SUP-able functions | ||
|
||
| Function | Arguments | Description | | ||
| -------- | --------- | ----------- | | ||
| `acct_restart/1` | `(AccountId)` | | | ||
| `acct_status/1` | `(AccountId)` | | | ||
| `agent_restart/2` | `(AccountId,AgentId)` | | | ||
| `agent_status/2` | `(AccountId,AgentId)` | | | ||
| `status/0` | | | |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,96 @@ | ||
### Features | ||
|
||
#### Annoucements | ||
|
||
audio file played to caller to annouce position in the queue and estimated wait time. | ||
|
||
add this object to the queue document | ||
``` | ||
"announcements": { | ||
"wait_time_announcements_enabled": true, | ||
"position_announcements_enabled": true, | ||
"interval": 30 | ||
}, | ||
``` | ||
|
||
#### Queue Strategies | ||
|
||
`round_robin` | ||
`ring_all` | ||
`most_idle` | ||
`sbrr` | ||
|
||
#### Agent Priorities | ||
|
||
1 to 128 : Higher priority agents will be called 1st | ||
|
||
#### Call Priorities | ||
|
||
Higher priority calls can jump the queue | ||
1) callflow can set "priority" in data to an integer value, higher the number the higher the priority | ||
2) and/or the incoming call can have a custom variable <<"Call-Priority">> again an integer | ||
|
||
|
||
#### Member Callback | ||
|
||
Member can have the option of being called back when they reach the head of the queue rather than waiting in line | ||
|
||
|
||
#### Agent Pause | ||
|
||
An agent can be on a break and pause for set time either via the API or via a feature code | ||
|
||
|
||
#### Early wrapup | ||
|
||
An Agent can make himself available before the wrapup period via the API | ||
|
||
|
||
#### Agent Availability check callflow | ||
|
||
Example callflow: | ||
|
||
``` | ||
"flow": { | ||
"module": "acdc_agent_availability", | ||
"data": {"id": "9a218da18b8104c888f0d47d946ffac0"}, | ||
"children": { | ||
"available": { | ||
"data": { | ||
"id": "9a218da18b8104c888f0d47d946ffac0" | ||
}, | ||
"module": "acdc_member", | ||
"children": {} | ||
}, | ||
"unavailable": { | ||
"data": { | ||
"id": "/system_media/en-us%2Fqueue-no_agents_available" | ||
}, | ||
"module": "play", | ||
"children": {} | ||
} | ||
} | ||
} | ||
``` | ||
|
||
#### Average wait time check callflow | ||
|
||
Example callflow: | ||
|
||
``` | ||
"module": "acdc_wait_time", | ||
"data": {"id": "9a218da18b8104c888f0d47d946ffac0"}, | ||
"children": { | ||
"_": { | ||
"data": {"id": "9a218da18b8104c888f0d47d946ffac0"}, | ||
"module": "acdc_member", | ||
"children": {} | ||
}, | ||
"60": { | ||
"data": {"id": "/system_media/en-us%2Fqueue-no_agents_available"}, | ||
"module": "play", | ||
"children": {} | ||
} | ||
} | ||
``` | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,23 @@ | ||
### Known Issues | ||
|
||
#### Round Robin strategy | ||
|
||
In a multi node/zone cluster round robin doesn't work as an enduser would expect. | ||
|
||
The problem is that each node in the cluster has an independent Queue Manager process which picks the next suitable agent. Queue Managers only manage the node and so calls handled by other nodes in the cluster are not taken into account when selecting the next agent. | ||
|
||
Consider this scenario: | ||
|
||
Lets say we have a round robin queue Q1 with 4 agents (A1, A2, A3, A4) all with the same priority and there are 2 nodes in a cluster N1 and N2. | ||
|
||
when we start up Q1 will have a Queue Manager process on N1 and a Queue Manager process on N2. Each manager creates its own agent queue AQ1 and AQ2. Lets assume the Agents are initally added to the AQs in the same order [A1,A2,A3,A4] | ||
|
||
Now a call comes into Q1 and is handled by N1. The Queue Manager on N1 looks at the head of AQ1 and selects agent A1 for taking the call, A1 is then put at the back so AQ1 on N1 becomes [A2,A3,A4,A1] and agent A1's device starts ringing. | ||
|
||
A1 finishes the call. | ||
|
||
A 2nd call comes in and this time is handled by N2. AQ2 on N2 is still [A1,A2,A3,A4] and so A1 is selected again, hardly round robin. | ||
|
||
If, however, the 2nd call was again handled by N1 then everything would be as expected as A2 is at the head of AQ1. | ||
|
||
So the problem is how to tell N2 to move A1 to the back so that it matches N1. A possible solution would be to broadcast a federated agent_win message on the AMQP bus that all Queue Managers listen to and they update thier AQ. Another possible solution would be to make the AQ a shared resource by implementing it as a AMQP worker queue, but this would be a much bigger task. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,39 @@ | ||
## SUP-able functions | ||
|
||
| Function | Arguments | Description | | ||
| -------- | --------- | ----------- | | ||
| `agent_detail/2` | `(AccountId,AgentId)` | | | ||
| `agent_login/2` | `(AccountId,AgentId)` | | | ||
| `agent_logout/2` | `(AccountId,AgentId)` | | | ||
| `agent_pause/2` | `(AccountId,AgentId)` | | | ||
| `agent_pause/3` | `(AccountId,AgentId,Timeout)` | | | ||
| `agent_presence_id/2` | `(AccountId,AgentId)` | | | ||
| `agent_queue_login/3` | `(AccountId,AgentId,QueueId)` | | | ||
| `agent_queue_logout/3` | `(AccountId,AgentId,QueueId)` | | | ||
| `agent_resume/2` | `(AccountId,AgentId)` | | | ||
| `agent_summary/2` | `(AccountId,AgentId)` | | | ||
| `agents_detail/0` | | | | ||
| `agents_detail/1` | `(AccountId)` | | | ||
| `agents_summary/0` | | | | ||
| `agents_summary/1` | `(AccountId)` | | | ||
| `current_agents/1` | `(AccountId)` | | | ||
| `current_calls/1` | `(AccountId)` | | | ||
| `current_calls/2` | `(AccountId,Props) | (AccountId,QueueId)` | | | ||
| `current_queues/1` | `(AccountId)` | | | ||
| `current_statuses/1` | `(AccountId)` | | | ||
| `flush_call_stat/1` | `(CallId)` | | | ||
| `logout_agent/2` | `(AccountId,AgentId)` | | | ||
| `logout_agents/1` | `(AccountId)` | | | ||
| `migrate/0` | | | | ||
| `migrate_to_acdc_db/0` | | | | ||
| `queue_detail/2` | `(AccountId,QueueId)` | | | ||
| `queue_restart/2` | `(AccountId,QueueId)` | | | ||
| `queue_summary/2` | `(AccountId,QueueId)` | | | ||
| `queues_detail/0` | | | | ||
| `queues_detail/1` | `(AccountId)` | | | ||
| `queues_restart/1` | `(AccountId)` | | | ||
| `queues_summary/0` | | | | ||
| `queues_summary/1` | `(AccountId)` | | | ||
| `refresh/0` | | | | ||
| `refresh_account/1` | `(Account)` | | | ||
| `register_views/0` | | | |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
## SUP-able functions | ||
|
||
| Function | Arguments | Description | | ||
| -------- | --------- | ----------- | | ||
| `acct_restart/1` | `(AccountId)` | | | ||
| `acct_status/1` | `(AccountId)` | | | ||
| `agent_restart/2` | `(AccountId,AgentId)` | | | ||
| `agent_status/2` | `(AccountId,AgentId)` | | | ||
| `status/0` | | | |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,40 @@ | ||
## SUP-able functions | ||
|
||
| Function | Arguments | Description | | ||
| -------- | --------- | ----------- | | ||
| `agent_detail/2` | `(AccountId,AgentId)` | | | ||
| `agent_login/2` | `(AccountId,AgentId)` | | | ||
| `agent_logout/2` | `(AccountId,AgentId)` | | | ||
| `agent_pause/2` | `(AccountId,AgentId)` | | | ||
| `agent_pause/3` | `(AccountId,AgentId,Timeout)` | | | ||
| `agent_presence_id/2` | `(AccountId,AgentId)` | | | ||
| `agent_queue_login/3` | `(AccountId,AgentId,QueueId)` | | | ||
| `agent_queue_logout/3` | `(AccountId,AgentId,QueueId)` | | | ||
| `agent_resume/2` | `(AccountId,AgentId)` | | | ||
| `agent_summary/2` | `(AccountId,AgentId)` | | | ||
| `agents_detail/0` | | | | ||
| `agents_detail/1` | `(AccountId)` | | | ||
| `agents_summary/0` | | | | ||
| `agents_summary/1` | `(AccountId)` | | | ||
| `current_agents/1` | `(AccountId)` | | | ||
| `current_calls/1` | `(AccountId)` | | | ||
| `current_calls/2` | `(AccountId,Props) | (AccountId,QueueId)` | | | ||
| `current_queues/1` | `(AccountId)` | | | ||
| `current_statuses/1` | `(AccountId)` | | | ||
| `flush_call_stat/1` | `(CallId)` | | | ||
| `logout_agent/2` | `(AccountId,AgentId)` | | | ||
| `logout_agents/1` | `(AccountId)` | | | ||
| `migrate/0` | | | | ||
| `migrate_to_acdc_db/0` | | | | ||
| `migrate_to_acdc_db/1` | `(AccountId)` | | | ||
| `queue_detail/2` | `(AccountId,QueueId)` | | | ||
| `queue_restart/2` | `(AccountId,QueueId)` | | | ||
| `queue_summary/2` | `(AccountId,QueueId)` | | | ||
| `queues_detail/0` | | | | ||
| `queues_detail/1` | `(AccountId)` | | | ||
| `queues_restart/1` | `(AccountId)` | | | ||
| `queues_summary/0` | | | | ||
| `queues_summary/1` | `(AccountId)` | | | ||
| `refresh/0` | | | | ||
| `refresh_account/1` | `(Acct)` | | | ||
| `register_views/0` | | | |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.