diff --git a/src/mod/applications/mod_callcenter/mod_callcenter.c b/src/mod/applications/mod_callcenter/mod_callcenter.c index 2a5a2aa2d1..aa95b1e28c 100644 --- a/src/mod/applications/mod_callcenter/mod_callcenter.c +++ b/src/mod/applications/mod_callcenter/mod_callcenter.c @@ -850,7 +850,7 @@ cc_status_t cc_agent_get(const char *key, const char *agent, char *ret_result, s switch_event_t *event; char res[256]; - /* Check to see if agent already exist */ + /* Check to see if agent already exists */ sql = switch_mprintf("SELECT count(*) FROM agents WHERE name = '%q'", agent); cc_execute_sql2str(NULL, NULL, sql, res, sizeof(res)); switch_safe_free(sql); @@ -860,8 +860,8 @@ cc_status_t cc_agent_get(const char *key, const char *agent, char *ret_result, s goto done; } - if (!strcasecmp(key, "status") ) { - /* Check to see if agent already exist */ + if (!strcasecmp(key, "status") || !strcasecmp(key, "state") || !strcasecmp(key, "uuid") ) { + /* Check to see if agent already exists */ sql = switch_mprintf("SELECT %q FROM agents WHERE name = '%q'", key, agent); cc_execute_sql2str(NULL, NULL, sql, res, sizeof(res)); switch_safe_free(sql); @@ -869,9 +869,15 @@ cc_status_t cc_agent_get(const char *key, const char *agent, char *ret_result, s result = CC_STATUS_SUCCESS; if (switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, CALLCENTER_EVENT) == SWITCH_STATUS_SUCCESS) { + char tmpname[256]; + if (!strcasecmp(key, "uuid")) { + switch_snprintf(tmpname, sizeof(tmpname), "CC-Agent-UUID"); + } else { + switch_snprintf(tmpname, sizeof(tmpname), "CC-Agent-%c%s", (char) switch_toupper(key[0]), key+1); + } switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "CC-Agent", agent); - switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "CC-Action", "agent-status-get"); - switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "CC-Agent-Status", res); + switch_event_add_header(event, SWITCH_STACK_BOTTOM, "CC-Action", "agent-%s-get", key); + switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, tmpname, res); switch_event_fire(&event); } @@ -1400,6 +1406,10 @@ static void *SWITCH_THREAD_FUNC outbound_agent_thread_run(switch_thread_t *threa /* Proceed contact the agent to offer the member */ if (switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, CALLCENTER_EVENT) == SWITCH_STATUS_SUCCESS) { + switch_channel_t *member_channel = switch_core_session_get_channel(member_session); + switch_caller_profile_t *member_profile = switch_channel_get_caller_profile(member_channel); + const char *member_dnis = member_profile->rdnis; + 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", "agent-offering"); switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "CC-Agent", h->agent_name); @@ -1409,6 +1419,7 @@ static void *SWITCH_THREAD_FUNC outbound_agent_thread_run(switch_thread_t *threa 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_add_header_string(event, SWITCH_STACK_BOTTOM, "CC-Member-DNIS", member_dnis); switch_event_fire(&event); } @@ -1548,6 +1559,9 @@ static void *SWITCH_THREAD_FUNC outbound_agent_thread_run(switch_thread_t *threa t_agent_answered = local_epoch_time_now(NULL); if (switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, CALLCENTER_EVENT) == SWITCH_STATUS_SUCCESS) { + switch_caller_profile_t *member_profile = switch_channel_get_caller_profile(member_channel); + const char *member_dnis = member_profile->rdnis; + switch_channel_event_set_data(agent_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", "bridge-agent-start"); @@ -1561,6 +1575,7 @@ static void *SWITCH_THREAD_FUNC outbound_agent_thread_run(switch_thread_t *threa 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_add_header_string(event, SWITCH_STACK_BOTTOM, "CC-Member-DNIS", member_dnis); switch_event_fire(&event); } /* for xml_cdr needs */ @@ -2676,7 +2691,9 @@ static int list_result_callback(void *pArg, int argc, char **argv, char **column "\tcallcenter_config agent set busy_delay_time [agent_name] [wait second] | \n"\ "\tcallcenter_config agent set no_answer_delay_time [agent_name] [wait second] | \n"\ "\tcallcenter_config agent get status [agent_name] | \n" \ -"\tcallcenter_config agent list | \n" \ +"\tcallcenter_config agent get state [agent_name] | \n" \ +"\tcallcenter_config agent get uuid [agent_name] | \n" \ +"\tcallcenter_config agent list [[agent_name]] | \n" \ "\tcallcenter_config tier add [queue_name] [agent_name] [level] [position] | \n" \ "\tcallcenter_config tier set state [queue_name] [agent_name] [state] | \n" \ "\tcallcenter_config tier set level [queue_name] [agent_name] [level] | \n" \ @@ -2832,7 +2849,14 @@ SWITCH_STANDARD_API(cc_config_api_function) struct list_result cbt; cbt.row_process = 0; cbt.stream = stream; - sql = switch_mprintf("SELECT * FROM agents"); + if ( argc-initial_argc > 1 ) { + stream->write_function(stream, "%s", "-ERR Invalid!\n"); + goto done; + } else if ( argc-initial_argc == 1 ) { + sql = switch_mprintf("SELECT * FROM agents WHERE name='%q'", argv[0 + initial_argc]); + } else { + sql = switch_mprintf("SELECT * FROM agents"); + } cc_execute_sql_callback(NULL /* queue */, NULL /* mutex */, sql, list_result_callback, &cbt /* Call back variables */); switch_safe_free(sql); stream->write_function(stream, "%s", "+OK\n");