mirror of
https://github.com/signalwire/freeswitch.git
synced 2025-05-29 10:01:41 +00:00
[mod_callcenter] FS-9689 Fixed issue when agent rejects the call while hearing cc_outbound_announce making member (caller) waiting on queue forever
This commit is contained in:
parent
5ac10aaf32
commit
e614f8da24
@ -1888,6 +1888,12 @@ static void *SWITCH_THREAD_FUNC outbound_agent_thread_run(switch_thread_t *threa
|
|||||||
if (!strcasecmp(h->agent_type, CC_AGENT_TYPE_CALLBACK)) {
|
if (!strcasecmp(h->agent_type, CC_AGENT_TYPE_CALLBACK)) {
|
||||||
switch_channel_hangup(agent_channel, SWITCH_CAUSE_ORIGINATOR_CANCEL);
|
switch_channel_hangup(agent_channel, SWITCH_CAUSE_ORIGINATOR_CANCEL);
|
||||||
}
|
}
|
||||||
|
} else if (!bridged && !switch_channel_up(agent_channel)) {
|
||||||
|
switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(member_session), SWITCH_LOG_DEBUG, "Failed to bridge, agent %s has no session\n", h->agent_name);
|
||||||
|
/* Put back member on Waiting state, previous Trying */
|
||||||
|
sql = switch_mprintf("UPDATE members SET state = 'Waiting' WHERE system = 'single_box' AND uuid = '%q'", h->member_uuid);
|
||||||
|
cc_execute_sql(NULL, sql, NULL);
|
||||||
|
switch_safe_free(sql);
|
||||||
} else {
|
} else {
|
||||||
bridged = 1;
|
bridged = 1;
|
||||||
switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(member_session), SWITCH_LOG_DEBUG, "Member \"%s\" %s is bridged to agent %s\n",
|
switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(member_session), SWITCH_LOG_DEBUG, "Member \"%s\" %s is bridged to agent %s\n",
|
||||||
@ -1953,35 +1959,41 @@ static void *SWITCH_THREAD_FUNC outbound_agent_thread_run(switch_thread_t *threa
|
|||||||
, (strcasecmp(h->agent_type, CC_AGENT_TYPE_UUID_STANDBY)?"uuid = '',":""), local_epoch_time_now(NULL), local_epoch_time_now(NULL), h->agent_name, h->agent_system);
|
, (strcasecmp(h->agent_type, CC_AGENT_TYPE_UUID_STANDBY)?"uuid = '',":""), local_epoch_time_now(NULL), local_epoch_time_now(NULL), h->agent_name, h->agent_system);
|
||||||
cc_execute_sql(NULL, sql, NULL);
|
cc_execute_sql(NULL, sql, NULL);
|
||||||
switch_safe_free(sql);
|
switch_safe_free(sql);
|
||||||
|
|
||||||
|
/* Remove the member entry from the db (Could become optional to support latter processing) */
|
||||||
|
sql = switch_mprintf("DELETE FROM members WHERE system = 'single_box' AND uuid = '%q'", h->member_uuid);
|
||||||
|
cc_execute_sql(NULL, sql, NULL);
|
||||||
|
switch_safe_free(sql);
|
||||||
|
|
||||||
|
/* Caller off event */
|
||||||
|
if (switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, CALLCENTER_EVENT) == SWITCH_STATUS_SUCCESS) {
|
||||||
|
switch_channel_event_set_data(member_channel, event);
|
||||||
|
switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "CC-Queue", h->queue_name);
|
||||||
|
switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "CC-Action", "member-queue-end");
|
||||||
|
switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "CC-Hangup-Cause",
|
||||||
|
switch_channel_cause2str(cause));
|
||||||
|
switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "CC-Cause", "Terminated");
|
||||||
|
switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "CC-Agent", h->agent_name);
|
||||||
|
switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "CC-Agent-System", h->agent_system);
|
||||||
|
switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "CC-Agent-UUID", agent_uuid);
|
||||||
|
switch_event_add_header(event, SWITCH_STACK_BOTTOM, "CC-Agent-Called-Time", "%" SWITCH_TIME_T_FMT,
|
||||||
|
t_agent_called);
|
||||||
|
switch_event_add_header(event, SWITCH_STACK_BOTTOM, "CC-Agent-Answered-Time", "%" SWITCH_TIME_T_FMT,
|
||||||
|
t_agent_answered);
|
||||||
|
switch_event_add_header(event, SWITCH_STACK_BOTTOM, "CC-Member-Leaving-Time", "%" SWITCH_TIME_T_FMT,
|
||||||
|
local_epoch_time_now(NULL));
|
||||||
|
switch_event_add_header(event, SWITCH_STACK_BOTTOM, "CC-Member-Joined-Time", "%" SWITCH_TIME_T_FMT,
|
||||||
|
t_member_called);
|
||||||
|
switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "CC-Member-UUID", h->member_uuid);
|
||||||
|
switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "CC-Member-Session-UUID",
|
||||||
|
h->member_session_uuid);
|
||||||
|
switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "CC-Member-CID-Name", h->member_cid_name);
|
||||||
|
switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "CC-Member-CID-Number",
|
||||||
|
h->member_cid_number);
|
||||||
|
switch_event_fire(&event);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Remove the member entry from the db (Could become optional to support latter processing) */
|
|
||||||
sql = switch_mprintf("DELETE FROM members WHERE system = 'single_box' AND uuid = '%q'", h->member_uuid);
|
|
||||||
cc_execute_sql(NULL, sql, NULL);
|
|
||||||
switch_safe_free(sql);
|
|
||||||
|
|
||||||
/* Caller off event */
|
|
||||||
if (switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, CALLCENTER_EVENT) == SWITCH_STATUS_SUCCESS) {
|
|
||||||
switch_channel_event_set_data(member_channel, event);
|
|
||||||
switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "CC-Queue", h->queue_name);
|
|
||||||
switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "CC-Action", "member-queue-end");
|
|
||||||
switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "CC-Hangup-Cause", switch_channel_cause2str(cause));
|
|
||||||
switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "CC-Cause", "Terminated");
|
|
||||||
switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "CC-Agent", h->agent_name);
|
|
||||||
switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "CC-Agent-System", h->agent_system);
|
|
||||||
switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "CC-Agent-UUID", agent_uuid);
|
|
||||||
switch_event_add_header(event, SWITCH_STACK_BOTTOM, "CC-Agent-Called-Time", "%" SWITCH_TIME_T_FMT, t_agent_called);
|
|
||||||
switch_event_add_header(event, SWITCH_STACK_BOTTOM, "CC-Agent-Answered-Time", "%" SWITCH_TIME_T_FMT, t_agent_answered);
|
|
||||||
switch_event_add_header(event, SWITCH_STACK_BOTTOM, "CC-Member-Leaving-Time", "%" SWITCH_TIME_T_FMT, local_epoch_time_now(NULL));
|
|
||||||
switch_event_add_header(event, SWITCH_STACK_BOTTOM, "CC-Member-Joined-Time", "%" SWITCH_TIME_T_FMT, t_member_called);
|
|
||||||
switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "CC-Member-UUID", h->member_uuid);
|
|
||||||
switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "CC-Member-Session-UUID", h->member_session_uuid);
|
|
||||||
switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "CC-Member-CID-Name", h->member_cid_name);
|
|
||||||
switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "CC-Member-CID-Number", h->member_cid_number);
|
|
||||||
switch_event_fire(&event);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
/* Agent didn't answer or originate failed */
|
/* Agent didn't answer or originate failed */
|
||||||
int delay_next_agent_call = 0;
|
int delay_next_agent_call = 0;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user