]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
FS-3503 --resolve mod_callcenter: add DNIS in some event, and add a few API like...
authorMarc Olivier Chouinard <mochouinard@moctel.com>
Tue, 16 Aug 2011 23:39:06 +0000 (19:39 -0400)
committerMarc Olivier Chouinard <mochouinard@moctel.com>
Tue, 16 Aug 2011 23:39:06 +0000 (19:39 -0400)
src/mod/applications/mod_callcenter/mod_callcenter.c

index 2a5a2aa2d18df558ff9fa19f6ced8915b4627d9e..aa95b1e28cb95d72add93335913de6d776056883 100644 (file)
@@ -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");