Breadcrumbs

Campaign Connected Call Details Gold Query

Purpose

This query is extracts and inserts detailed records of successfully connected voice calls (calls that ended with NORMAL_CLEARING) into a gold table called campaign_connected_call_details_gold.

Data Source Tables

  • campaign_scheduler

  • campaigns

  • voice_activities

  • voice_connector_activities

For more detail on campaigns and activities tables, please refer to: Reporting Database Schema | Activities

Query

-- for mysql

    "campaign_connected_call_details_gold":"""
    INSERT INTO campaign_connected_call_details_gold (
    `Campaign_Name`, 
    DateTime,  
    `Number_Called`, 
    `Call_Duration`,
    agent_name,
    `Agent_ID`,
    Team_Name,
    `Agent_wrap_ups`
)
SELECT 
    c.title AS `Campaign_Name`, 
    va.start_time AS DateTime,  
    va.channel_customer_identifier AS `Number_Called`, 
    va.total_duration AS `Call_Duration`,
    va.sender_name AS agent_name,
    va.sender_id AS `Agent_ID`,
    t.team_name AS Team_Name,
    GROUP_CONCAT(DISTINCT wrapup_label ORDER BY wrapup_label SEPARATOR ', ') AS `Agent_wrap_ups`
FROM campaign_scheduler cs  
INNER JOIN campaigns c  
    ON JSON_UNQUOTE(JSON_EXTRACT(cs.customer, '$.campaign')) = c.id 
INNER JOIN (
    SELECT 
        va.activity_timestamp,
        va.start_time,
        call_leg_start_time AS min_start_time, 
        va.channel_session_id,
        va.conversation_id, 
        va.channel_customer_identifier, 
        vca.reason_code,
        va.sender_type,
        va.total_duration, 
        va.sender_name,
        va.sender_id  
    FROM voice_activities va  
    INNER JOIN voice_connector_activities vca  
        ON va.channel_session_id = vca.message_id 
        AND CAST(va.activity_timestamp AS DATE) = CAST(vca.activity_timestamp AS DATE)
    WHERE vca.reason_code = 'NORMAL_CLEARING'
      AND va.start_time BETWEEN '{start_time}' AND '{end_time}'
    GROUP BY 
        va.activity_timestamp,
        va.start_time,
        call_leg_start_time, 
        va.channel_session_id,
        va.conversation_id, 
        va.channel_customer_identifier, 
        vca.reason_code,
        va.sender_type,
        va.total_duration,
        va.sender_name,
        va.sender_id 
) AS va 
    ON cs.activity_data_id = va.channel_session_id 
    AND CAST(cs.activity_timestamp AS DATE) = CAST(va.activity_timestamp AS DATE)
INNER JOIN (
    SELECT 
        conversation_id, 
        MIN(call_leg_start_time) AS min_start_time 
    FROM voice_activities 
    WHERE start_time BETWEEN '{start_time}' AND '{end_time}' 
    GROUP BY conversation_id 
) AS min_times 
    ON va.conversation_id = min_times.conversation_id 
    AND va.min_start_time = min_times.min_start_time
LEFT JOIN (
    SELECT 
        t.team_name, 
        tm.user_id 
    FROM team_members tm 
    INNER JOIN teams t ON t.team_id = tm.team_id
) AS t 
    ON t.user_id = va.sender_id
LEFT JOIN wrapup_detail wd 
    ON wd.conversation_id = va.conversation_id 
    AND CAST(va.start_time AS DATE) = CAST(wd.wrapup_time AS DATE)
WHERE 
    cs.message_type = 'VOICE' 
    AND va.start_time BETWEEN '{start_time}' AND '{end_time}'
GROUP BY 
    va.conversation_id, 
    c.title, 
    va.start_time, 
    va.channel_customer_identifier, 
    va.total_duration,
    va.sender_name,
    va.sender_id,
    t.team_name;

    """,

-- for mssql
 "campaign_connected_call_details_gold_MSSQL":"""
    INSERT INTO campaign_connected_call_details_gold (
    [Campaign_Name], 
    DateTime, 
    [Number_Called], 
    [Call_Duration], 
    agent_name, 
    [Agent_ID], 
    Team_Name, 
    [Agent_wrap_ups]
)
SELECT 
    c.title AS [Campaign_Name], 
    va.start_time AS DateTime, 
    va.channel_customer_identifier AS [Number_Called], 
    va.total_duration AS [Call_Duration], 
    va.sender_name AS agent_name, 
    va.sender_id AS [Agent_ID], 
    t.team_name AS Team_Name,
    STUFF((
        SELECT DISTINCT ', ' + wd2.wrapup_label
        FROM wrapup_detail wd2
        WHERE wd2.conversation_id = va.conversation_id
        FOR XML PATH(''), TYPE
    ).value('.', 'NVARCHAR(MAX)'), 1, 2, '') AS [Agent_wrap_ups]
FROM campaign_scheduler cs  
INNER JOIN campaigns c  
    ON JSON_VALUE(cs.customer, '$.campaign') = c.id 
INNER JOIN (
    SELECT 
        va.activity_timestamp, 
        va.start_time, 
        call_leg_start_time AS min_start_time,
        va.channel_session_id, 
        va.conversation_id, 
        va.channel_customer_identifier, 
        vca.reason_code, 
        va.sender_type, 
        va.total_duration, 
        va.sender_name, 
        va.sender_id  
    FROM voice_activities va  
    INNER JOIN voice_connector_activities vca  
        ON va.channel_session_id = vca.message_id 
        AND CAST(va.activity_timestamp AS DATE) = CAST(vca.activity_timestamp AS DATE)
    WHERE vca.reason_code = 'NORMAL_CLEARING' 
      AND va.start_time BETWEEN LEFT('{start_time}', 23) AND LEFT('{end_time}', 23)
    GROUP BY 
        va.activity_timestamp,
        va.start_time,
        call_leg_start_time, 
        va.channel_session_id,
        va.conversation_id, 
        va.channel_customer_identifier,
        vca.reason_code, 
        va.sender_type, 
        va.total_duration, 
        va.sender_name, 
        va.sender_id
) AS va 
    ON cs.activity_data_id = va.channel_session_id 
    AND CAST(cs.activity_timestamp AS DATE) = CAST(va.activity_timestamp AS DATE)
INNER JOIN (
    SELECT 
        conversation_id, 
        MIN(call_leg_start_time) AS min_start_time 
    FROM voice_activities 
    WHERE start_time BETWEEN LEFT('{start_time}', 23) AND LEFT('{end_time}', 23)
    GROUP BY conversation_id 
) AS min_times 
    ON va.conversation_id = min_times.conversation_id 
    AND va.min_start_time = min_times.min_start_time
LEFT JOIN (
    SELECT 
        t.team_name, 
        tm.user_id 
    FROM team_members tm 
    INNER JOIN teams t ON t.team_id = tm.team_id
) AS t 
    ON t.user_id = va.sender_id
LEFT JOIN wrapup_detail wd 
    ON wd.conversation_id = va.conversation_id 
    AND CAST(va.start_time AS DATE) = CAST(wd.wrapup_time AS DATE)
WHERE 
    cs.message_type = 'VOICE' 
    AND va.start_time BETWEEN LEFT('{start_time}', 23) AND LEFT('{end_time}', 23)
GROUP BY 
    va.conversation_id, 
    c.title, 
    va.start_time, 
    va.channel_customer_identifier, 
    va.total_duration, 
    va.sender_name, 
    va.sender_id, 
    t.team_name;
    
    """,