BigQuery → Cisco Webex Contact Center Mapping
Field-level mapping from the flattened ccaas_raw_lab BigQuery tables (output of the
CCAI → BigQuery pipeline) to the Cisco Webex Contact Center schema. This page is a
scaffold — structure and styling are in place; the mapping rows are placeholders to be filled in.
Draft. Every TBD cell below needs a real
source column, target field, and transform. Do not treat any row as authoritative yet.
1. Overview
Purpose: define how each column in the query-ready BigQuery tables lands in Cisco Webex Contact Center
(and/or Webex CC Analyzer / the Reporting & Analytics data model), so the CCAI/UJET POC data can be
reconciled against or loaded into Webex CC.
- Source of truth:
p-640-lab-itmsc.ccaas_raw_lab.metadata,
….session_data_feeds, ….ujet_session_summaries.
- Target: Cisco Webex Contact Center — TBD: exact object(s) / API / dataset.
- Direction: TBD (one-way BQ→Webex, or reconciliation only).
- Grain: TBD (per contact / per session / per activity leg).
2. Flow
flowchart LR
BQ["ccaas_raw_lab (BigQuery)\nmetadata / session_data_feeds / ujet_session_summaries"]
T["Transform / mapping layer\n(TBD: SQL view, dbt, script)"]
WX["Cisco Webex Contact Center\n(TBD: API / import / Analyzer model)"]
BQ --> T --> WX
3. Environments & references
| Item | Source (BigQuery) | Target (Cisco Webex CC) |
| Project / org | p-640-lab-itmsc | TBD Webex org ID |
| Dataset / object | ccaas_raw_lab | TBD |
| Access | roles/bigquery.dataViewer | TBD (Control Hub / API token) |
| Docs | Pipeline runbook | TBD link to Webex CC schema docs |
4. Mapping conventions
- Source column — exact column name in the flat BigQuery table.
- Target field — Webex CC field / attribute name.
- Transform —
direct, cast, lookup,
concat, derive, or a short expression.
- Notes — nullability, cardinality, known gaps.
- Use TBD for anything not yet confirmed.
5. Cisco report fields — SummaryDaily Reports (Agent-Detail)
Target Excel/Sheets export: SummaryDaily Reports(Agent-Detail). 33 columns, one row per
agent × time interval. Column letters are the spreadsheet positions.
New column: BigQuery field = the source column in
ccaas_raw_lab.metadata_current that feeds this Cisco field (from the mapping in
section 6). Violet = Kevin asked for this on
the Sep 10 call.
| # | Col | Field | Kind | Sample | BigQuery field | Notes |
| 1 | A | LOB | dim | BDUS | none (const / derive) | line of business |
| 2 | B | Week | dim | 29 | created_at | ISO week number |
| 3 | C | Date | dim | 07/14/2026 | created_at | MM/DD/YYYY |
| 4 | D | PQ ID | dim | 5059 | selected_menu_id | precision queue ID |
| 5 | E | PQ Name | dim | US_BD | selected_menu_name | precision queue name |
| 6 | F | Team Name | dim | US_YAK_MS7 | none | TBD |
| 7 | G | Agent | dim | Elizabeth_Pinon | agent_info_name | First_Last |
| 8 | H | Hour | dim | 5 | created_at | hour of day (0–23) |
| 9 | I | Time Interval | dim | 5:45:00 | queued_at | 15-min interval start |
| 10 | J | Unique ID | key | Daily_Agent_29_20260714-0545_BDUS_5059_8748 | composite (no single column) | Period_Source_Week_YYYYMMDD-HHMM_LOB_PQID_AgentID |
| 11 | K | Period | dim | Daily | const | grain label |
| 12 | L | Source | dim | Agent | const | TBD |
| 13 | M | AgentID | key | 8748 | agent_info_id | Cisco agent ID |
| 14 | N | PeripheralNumber | key | 623040 | none | peripheral / login ID |
| 15 | O | AgentOut Calls | measure | 0 | call_type | count |
| 16 | P | AgentOut Calls TalkTime | measure | 0:00:00 | call_duration + call_type | HH:MM:SS |
| 17 | Q | Calls Answered | measure | 0 | connected_at / status | count |
| 18 | R | CallsAbandoned | measure | 0 | status / fail_reason / connected_at | count |
| 19 | S | Avg Talktime | measure | 0:02:22 | call_duration | HH:MM:SS |
| 20 | T | Avg WorkTime | measure | 0:00:00 | handle_durations.acw_duration (none in flat metadata_current) | HH:MM:SS |
| 21 | U | Avg HoldTime | measure | 0:00:00 | hold_duration | HH:MM:SS |
| 22 | V | AHT | measure | 0:00:00 | call_duration + hold_duration + work | avg handle time |
| 23 | W | TransferIn | measure | 0 | transfers_count / participants_json | count |
| 24 | X | TransferOut | measure | 0 | transfers_count / participants_json | count |
| 25 | Y | Available Time | measure | 0:08:21 | none | HH:MM:SS |
| 26 | Z | Not Ready Time | measure | 0:01:45 | none | HH:MM:SS |
| 27 | AA | RONA | measure | 0 | none | redirect on no answer count |
| 28 | AB | Abandoned Hold Calls | measure | 0 | none | count |
| 29 | AC | Total Logged In Time | measure | 0:07:17 | none | HH:MM:SS |
| 30 | AD | Total Work Time | measure | 0:00:00 | handle_durations.acw_duration (none in flat metadata_current) | HH:MM:SS |
| 31 | AE | CallsHandled | measure | 1 | id / connected_at | count |
| 32 | AF | Total Talk Time | measure | 0:02:22 | call_duration | HH:MM:SS |
| 33 | AG | Total Hold Time | measure | 0:00:00 | hold_duration | HH:MM:SS |
Grain of this report = agent × 15-minute interval × precision queue,
aggregated to Daily. The CCAI/UJET BigQuery data is per call, so mapping requires a
GROUP BY to this grain.
The live per-call table in p-640-lab-itmsc.ccaas_raw_lab. Confirmed from
SELECT * FROM metadata_current WHERE session_key = 'call-12175'. Same columns as the flat
metadata table plus five view-added columns (channel, provider_channel_id,
session_key, provider_conversation_id, row_hash).
| # | Column | Type | Sample (call-12175) |
| 1 | id | INT64 | 12175 |
| 2 | call_uuid | STRING | 57272f16-15c2-4cac-b4b4-ca26… |
| 3 | lang | STRING | en |
| 4 | call_type | STRING | Voice Inbound (IVR) |
| 5 | session_type | STRING | Voice Inbound (IVR) |
| 6 | session_type_v2 | STRING | Voice Inbound (IVR) |
| 7 | status | STRING | finished |
| 8 | created_at | TIMESTAMP | 2026-09-04 16:05:28 UTC |
| 9 | queued_at | TIMESTAMP | 2026-09-04 16:08:14 UTC |
| 10 | assigned_at | TIMESTAMP | 2026-09-04 16:08:30 UTC |
| 11 | connected_at | TIMESTAMP | 2026-09-04 16:05:53 UTC |
| 12 | ends_at | TIMESTAMP | 2026-09-04 16:09:04 UTC |
| 13 | updated_at | TIMESTAMP | 2026-09-04 16:10:37 UTC |
| 14 | wait_duration | INT64 | 0 |
| 15 | call_duration | INT64 | 251 (seconds) |
| 16 | hold_duration | INT64 | 0 |
| 17 | has_feedback | BOOL | false |
| 18 | out_ticket_id | STRING | 003D700001H5yyMIAR |
| 19 | out_ticket_url | STRING | https://costcowholesalecorporation2--itmscqa.sandbox.my.salesforce.com/…/Contact/003D700001H5yyMIAR/view |
| 20 | is_out_ticket_account | BOOL | true |
| 21 | verified | BOOL | false |
| 22 | recording_url | STRING | null |
| 23 | recording_permission | STRING | not_asked |
| 24 | voicemail_reason | STRING | not_voicemail |
| 25 | deflection | STRING | no_deflection |
| 26 | disconnected_by | STRING | disconnected_by_end_user |
| 27 | fail_reason | STRING | nothing |
| 28 | support_number | STRING | +18153935508 |
| 29 | selected_menu_id | INT64 | 8 |
| 30 | selected_menu_name | STRING | US_ECOMM_General_CB |
| 31 | selected_menu_type | STRING | ivr_menu |
| 32 | menu_path_items_count | INT64 | 3 |
| 33 | menu_path_name | STRING | Routing Queues/ECOMM General… |
| 34 | menu_path_materialized_path | STRING | 2/6/8 |
| 35 | queue_priority_level | INT64 | 0 |
| 36 | agent_info_id | INT64 | 31 |
| 37 | agent_info_name | STRING | Chandrika Veerkar |
| 38 | end_user_id | INT64 | 3014 |
| 39 | end_user_out_contact_id | STRING | 003D700001H5yyMIAR |
| 40 | offer_type | STRING | cascade |
| 41 | answer_type | STRING | manual |
| 42 | participants_count | INT64 | 3 |
| 43 | transfers_count | INT64 | 0 |
| 44 | escalations_count | INT64 | 1 |
| 45 | recordings_count | INT64 | 1 |
| 46 | participants_json | STRING (JSON) | [{adapter_fail_code, agent_assist, call_duration:216, call_id:12175, connected_at…}] |
| 47 | recordings_json | STRING (JSON) | [{call_id:12175, conference_sid, duration:137, id:8949, recording_type:"virtual_agent", redaction_times:[], started_at…}] |
| 48 | va_handle_durations_json | STRING (JSON) | [{call_duration:137, ended_at, escalation_reason:"by_virtual_agent", fallback_response_count:0, finish_reason:"esca…"}] |
| 49 | consumer_handle_durations_json | STRING (JSON) | [{call_duration:216, ended_at, hold_duration:0, id:7489, started_at…}] |
| 50 | raw_json | JSON | {adapter_fail_code:null, agent_info:{agent_number:null, avatar_url:"https://qat-640-aqd2ubm.uw1.ccaiplatform.com/as…"}} |
| 51 | channel | STRING | call |
| 52 | provider_channel_id | STRING | null |
| 53 | session_key | STRING | call-12175 |
| 54 | provider_conversation_id | STRING | 57272f16-15c2-4cac-b4b4-ca26… |
| 55 | row_hash | STRING | 1039963cedffa245d467e4c77a… |
Observed value samples —
call_type/session_type: Voice Inbound (IVR);
status: finished;
disconnected_by: disconnected_by_end_user;
fail_reason: nothing;
offer_type: cascade; answer_type: manual;
deflection: no_deflection; recording_permission: not_asked;
voicemail_reason: not_voicemail; channel: call.
6. metadata_current → Cisco report field
Left column = real column in ccaas_raw_lab.metadata_current. The report grain is
agent × 15-min interval × precision queue, so most rows below need a
GROUP BY rollup off the per-call table.
| Cisco report field | Query table source | Transform | Notes |
LOB | none | const / derive | no CCAI column. Constant (BDUS) or derive from menu_path_name / selected_menu_name prefix (e.g. US_ECOMM_*) |
Week | created_at | derive: EXTRACT(ISOWEEK FROM created_at) | confirm week-start convention vs Cisco |
Date | created_at | cast: FORMAT_DATE('%m/%d/%Y', DATE(created_at, tz)) | source is UTC; Cisco report likely local tz |
PQ ID | selected_menu_id | lookup | sample 8. Needs menu-id → Cisco precision-queue-id cross-walk |
PQ Name | selected_menu_name / menu_path_name | lookup | sample US_ECOMM_General_CB / Routing Queues/ECOMM General… |
Team Name | none | lookup | no CCAI column — needs agent → team roster |
Agent | agent_info_name | direct + reformat | sample Chandrika Veerkar; Cisco uses First_Last → replace space with _ |
Hour | created_at | derive: EXTRACT(HOUR FROM created_at, tz) | pick which timestamp defines the interval (created / connected / assigned) |
Time Interval | created_at | derive: floor to 15 min → H:MM:SS | same timestamp choice as Hour |
Unique ID | — (composite) | concat | Period_Source_Week_YYYYMMDD-HHMM_LOB_PQID_AgentID |
Period | — | const: Daily | report is a daily rollup |
Source | — | const: Agent | agent-detail report |
AgentID | agent_info_id | lookup | sample 31. Cisco AgentID sample 8748 — different ID space, cross-walk needed |
PeripheralNumber | none | lookup | no CCAI column — from Cisco agent record |
AgentOut Calls | call_type | derive: COUNTIF(call_type is an outbound type) | only inbound value seen so far (Voice Inbound (IVR)); confirm outbound label |
AgentOut Calls TalkTime | call_duration + call_type | derive: SUM(call_duration) where outbound → HH:MM:SS | TBD outbound label |
Calls Answered | status / connected_at / answer_type | derive: COUNTIF(connected_at IS NOT NULL) or status='finished' | only finished status seen; enumerate the rest |
CallsAbandoned | status / fail_reason / connected_at | derive: COUNTIF(queued_at IS NOT NULL AND connected_at IS NULL) | fail_reason='nothing' = no failure; confirm abandoned encoding |
Avg Talktime | call_duration | derive: AVG(call_duration) → HH:MM:SS | seconds. Sample 251; consumer_handle_durations shows 216 — confirm which is "talk" |
Avg WorkTime | none | derive | after-call work not in table; possibly assigned_at→ends_at gap, or from a JSON field |
Avg HoldTime | hold_duration | derive: AVG(hold_duration) → HH:MM:SS | seconds. Sample 0 |
AHT | call_duration + hold_duration (+ work) | derive: AVG(handle) → HH:MM:SS | fix the handle-time formula once WorkTime source is known |
TransferIn | transfers_count / participants_json | derive | count=0 here; direction only in participants_json / raw_json |
TransferOut | transfers_count / participants_json | derive | parse JSON for direction; escalations_count (=1) may be relevant |
Available Time | none | derive | agent state time — not in CCAI call export |
Not Ready Time | none | derive | agent state time — not in CCAI call export |
RONA | none | derive | redirect-on-no-answer — maybe from session_data_feeds events; not in metadata |
Abandoned Hold Calls | none | derive | no direct column; hold_duration>0 AND abandoned? |
Total Logged In Time | none | derive | agent session time — not in CCAI call export |
Total Work Time | none | derive | same as Avg WorkTime — source unknown |
CallsHandled | id / connected_at | derive: COUNT(*) where agent connected, in grain | define "handled" (connected to a human agent) |
Total Talk Time | call_duration | derive: SUM(call_duration) → HH:MM:SS | seconds |
Total Hold Time | hold_duration | derive: SUM(hold_duration) → HH:MM:SS | seconds |
Coverage gap: many Cisco fields (PeripheralNumber,
Team Name, Available Time, Not Ready Time, Total Logged In Time,
RONA) describe agent state / roster, which the CCAI/UJET call export does not contain.
Those need a separate source (Cisco Finesse / agent roster / real-time state feed).
6c. Kevin's requirements — working session (Sep 10, 2026)
Source: "Schedule CCaaS Exports to CC Archive" working session, Kevin McCoy (reporting owner) & Rohit Godugu.
Notes below are a summary; verify against the recording before building.
What Kevin wants — two report shapes
- Queue report — nothing to do with individual agents.
- Dimensions: Queue and time interval (date is split out but is the same axis).
- The "big five" measures: Offered, Answered, Abandoned
(roughly offered − answered), Service Level (% of answered calls answered within a
configured threshold), ASA (average speed of answer — how long answered calls waited).
- 6th: Longest wait time in the interval (for answered calls).
- Nice-to-have: max calls in queue at each interval.
- Collected but not critical: abandon-within-30s buckets, abandoned-by-agent vs abandoned-by-member.
- Agent report.
- Dimensions: time interval, queue, agent.
- Core measures (the ones they actually need): Calls Answered, Talk Time,
Work Time (after-call wrap-up), Hold Time.
Talk + Work + Hold = Handle Time (AHT).
- "Take it if we have it": Agent-Out calls, Transfer In / Transfer Out (historically unreliable).
- Low value: Logged-In / Available / Not-Ready time — double-counts when an agent is logged into
multiple queues (every logged-in second counts on every queue).
What Kevin actually wants — CCAI side vs Cisco side
One row per attribute/measure Kevin asked for. CCAI (BigQuery) = column in
ccaas_raw_lab.metadata_current (or a derivation from it). Cisco = column in the
SummaryDaily Reports export. italic grey = not available on that side.
Finding from the raw JSON: the record carries two separate arrays —
escalations[] (has 1 entry here: VA → human agent, with fromVirtualAgent,
toAgent, createdAt→escalatedAt) and transfers[] (empty here).
That's very likely the VA→HA / HA→HA split Kevin asked about: escalations[] = VA→HA
transfer time (escalatedAt − createdAt = 31s in this sample), transfers[] =
HA→HA transfer time (structure unconfirmed — no sample record with a human-to-human transfer yet).
A. Queue report — dimensions
| What Kevin wants | CCAI (BigQuery) — metadata_current | Cisco — SummaryDaily report | GCS BigQuery column | CCAI (JSON data) | Manual mapping (Cisco↔CCAI CSV doc) |
| Queue ID / Queue Name | selected_menu_id, selected_menu_name, menu_path_name, menu_path_materialized_path | PQ ID (5059), PQ Name (US_BD), LOB (BDUS — Cisco-only field, no CCAI/GCS column carries LOB at all) | selected_menu_id (8), selected_menu_name (US_ECOMM_General_CB) | selectedMenu.id (8), selectedMenu.name (US_ECOMM_General_CB)"selectedMenu": {
"id": 8,
"name": "US_ECOMM_General_CB",
"parentId": 6,
"menuType": "ivr_menu"
}
"menuPath": {
"name": "Routing Queues/ECOMM General/US_ECOMM_General_CB",
"materializedPath": "2/6/8"
} | | Cisco | CCAI | Note |
|---|
PQ Name (US_MS_SCB), PQ ID (5137), Team Name US_OKC_EC15 (Table 1 row 1) | menu_path leaf segment (US_MS_General_CB), selected_menu (US_MS_General_CB) | Names don’t match 1:1 — only the LOB/category segment does (Membership → MSUS) |
|
| Time interval | queued_at (floor to 15 min) — also assigned_at / created_at | Time Interval (5:45:00), Hour (5) | queued_at (2026-09-04 16:08:14 UTC) | queuedAt (2026-09-04T16:08:14.000Z) | | Cisco | CCAI | Note |
|---|
Date (07/14/2026), Hour (5), Time Interval (5:45:00) | startTime (2026-08-31T22:41:50Z) | Cisco pre-aggregates to a 15-min bucket; CCAI keeps the raw event timestamp |
|
| Date | DATE(queued_at) | Date (07/14/2026), Week | queued_at (2026-09-04 16:08:14 UTC) | queuedAt (2026-09-04T16:08:14.000Z) | | Cisco | CCAI | Note |
|---|
Date (07/14/2026) | startTime / createTime | Same source pair as Time interval row above |
|
B. Queue report — measures ("the big five" + 2)
| What Kevin wants | CCAI (BigQuery) — metadata_current | Cisco — SummaryDaily report | GCS BigQuery column | CCAI (JSON data) | Manual mapping (Cisco↔CCAI CSV doc) |
| Offered (calls coming in) | derive: COUNT(*) where queued_at IS NOT NULL | not in Agent-Detail — in Queue report | queued_at (2026-09-04 16:08:14 UTC) | queuedAt (2026-09-04T16:08:14.000Z) | | Cisco | CCAI | Note |
|---|
| — (no field named) | COUNT(calls.id) → total_calls_offered (SQL, Table 5 §2) | No direct Cisco equivalent named anywhere in the manual doc |
|
| Answered (to an agent) | derive: COUNTIF(assigned_at IS NOT NULL) / agent_info_id set | Calls Answered (0 in Cisco sample; Table 4 real row: 1) | assigned_at (2026-09-04 16:08:30 UTC) | assignedAt (2026-09-04T16:08:30.000Z) | | Cisco | CCAI | Note |
|---|
SUM(Calls Answered) = 1 | COUNT(status='finished') = 1 | 1 − 1 = 0 — ✓ perfect match (Table 4) |
|
| Abandoned (offered − answered) | derive: queued_at IS NOT NULL AND assigned_at IS NULL | CallsAbandoned (0) | queued_at (2026-09-04 16:08:14 UTC), assigned_at (2026-09-04 16:08:30 UTC) | queuedAt, assignedAt | | Cisco | CCAI | Note |
|---|
CallsAbandoned (0) | status (finished), finish_reason_1 (escalated) | Table 3 “Status/Outcome” keyword row |
|
| Service Level (% answered within threshold) | derive: COUNTIF((assigned_at - queued_at) <= threshold) / COUNTIF(answered) — threshold TBD | not in Agent-Detail — in Queue report | assigned_at (16:08:30), queued_at (16:08:14) — 16s wait in this sample | assignedAt, queuedAt | | Cisco | CCAI | Note |
|---|
| — | — | Not covered anywhere in Tables 0–5 — a real gap on both sides |
|
| ASA (avg speed of answer) | derive: AVG(assigned_at - queued_at) | not in Agent-Detail — in Queue report | assigned_at (16:08:30), queued_at (16:08:14) | assignedAt, queuedAt | | Cisco | CCAI | Note |
|---|
| — | — | Not covered in the manual-mapping doc |
|
| Longest wait time (interval) | derive: MAX(assigned_at - queued_at) over answered | not in Agent-Detail — in Queue report | assigned_at (16:08:30), queued_at (16:08:14) | assignedAt, queuedAt | | Cisco | CCAI | Note |
|---|
| — | — | Not covered in the manual-mapping doc |
|
| Max calls in queue / interval (nice-to-have) | concurrency calc over queued_at…assigned_at — hard from per-call rows | not in Agent-Detail — in Queue report | queued_at, assigned_at | queuedAt, assignedAt | | Cisco | CCAI | Note |
|---|
| — | — | Not covered in the manual-mapping doc |
|
| Abandon <30s buckets / abandoned-by (collected, not critical) | disconnected_by + wait math | partial: Abandoned Hold Calls (0) | disconnected_by (disconnected_by_end_user) | disconnectedBy (disconnected_by_end_user) | | Cisco | CCAI | Note |
|---|
| — | — | Not covered in the manual-mapping doc |
|
C. Agent report — dimensions
| What Kevin wants | CCAI (BigQuery) — metadata_current | Cisco — SummaryDaily report | GCS BigQuery column | CCAI (JSON data) | Manual mapping (Cisco↔CCAI CSV doc) |
| Time interval | assigned_at / connected_at (floor to 15 min) | Time Interval (5:45:00), Hour (5), Date (07/14/2026) | assigned_at (2026-09-04 16:08:30 UTC) | assignedAt (2026-09-04T16:08:30.000Z) | | Cisco | CCAI | Note |
|---|
Date/Hour/Time Interval | startTime/createTime | Same timestamp mapping as table A |
|
| Queue ID / Queue Name | selected_menu_name / menu_path_name | PQ ID (5059), PQ Name (US_BD) | selected_menu_id (8), selected_menu_name (US_ECOMM_General_CB) | selectedMenu.id (8), selectedMenu.name (US_ECOMM_General_CB) | | Cisco | CCAI | Note |
|---|
LOB (MSUS), PQ ID (5137), PQ Name (US_MS_SCB) | menu_paths.materialized_path (Routing Queues/Membership/US_MS_General_CB) | Category segment → LOB, leaf segment → PQ Name (Table 5 §5) |
|
| Agent ID / Agent Name | agent_info_id (31), agent_info_name ("Chandrika Veerkar") | Agent (Elizabeth_Pinon), AgentID (8748), Team Name (US_YAK_MS7), PeripheralNumber (623040) | agent_info_id (31), agent_info_name (Chandrika Veerkar) | agentInfo.id (31), agentInfo.name (Chandrika Veerkar) | | Cisco | CCAI | Note |
|---|
Agent (Elizabeth_Pinon), AgentID (8748) | BOT agentName (QAT-Voice-Member-Self-Service), agentType (AUTOMATED_AGENT) — HUMAN qualityMetadata.displayName (Farhan Hussain), qualityMetadata.agentId (2) | CCAI record carries two agent identities (bot + human); only the human one maps to Cisco Agent/AgentID (Table 0) |
|
D. Agent report — measures
| What Kevin wants | CCAI (BigQuery) — metadata_current | Cisco — SummaryDaily report | GCS BigQuery column | CCAI (JSON data) | Manual mapping (Cisco↔CCAI CSV doc) |
| Calls Answered (per agent, row = credit) | derive: COUNT rows per agent where connected | Calls Answered (0 sample / 1 real row), CallsHandled (1) | id (12175), connected_at (2026-09-04 16:05:53 UTC) | id (12175), connectedAt (2026-09-04T16:05:53.000Z) | | Cisco | CCAI | Note |
|---|
SUM(Calls Answered) = 1 | COUNT(status='finished') = 1 | 1 − 1 = 0 — ✓ perfect match |
|
| Talk Time (on phone with member) | call_duration (251s) — or consumer_handle_durations_json.call_duration (216s), confirm which | Avg Talktime (0:02:22), Total Talk Time (0:02:22) | call_duration (251) | callDuration (top-level, 251) vs consumerHandleDurations[].callDuration (216) | | Cisco | CCAI | Note |
|---|
Total Talk Time (0:01:55 = 115s) | duration (115s) | 115s − 115s = 0s — ✓ perfect match; formula: SUM(call_duration) = Cisco Total Talk Time |
|
| Work Time (after-call wrap-up) | no dedicated column — candidate: updated_at − ends_at (93s in sample) | Avg WorkTime (0:00:00), Total Work Time (0:00:00) | handle_durations.acw_duration (0, 90 — nested only) | handleDurations[].acwDuration (0, 90) | | Cisco | CCAI | Note |
|---|
Total Work Time (0:00:00 sample) | acw_duration → SUM(perf_call_handle_durations.acw_duration) | Confirms acw_duration (our handleDurations[].acwDuration) is the correct Work Time source — closes the gap flagged elsewhere in this doc |
|
| Hold Time (member on hold) | hold_duration (0s) | Avg HoldTime (0:00:00), Total Hold Time (0:00:00) | hold_duration (0) | holdDuration (top-level, 0) / handleDurations[].holdDuration (0, null) | | Cisco | CCAI | Note |
|---|
Total Hold Time (0:00:00) | hold_duration (0s) | 0s − 0s = 0s — ✓ perfect match |
|
| Handle Time = Talk + Work + Hold | derive (blocked on Work Time) | AHT (0:00:00 sample) | call_duration (251) + hold_duration (0) + handle_durations.acw_duration (0, 90) | callDuration (251) + holdDuration (0) + handleDurations[].acwDuration (0, 90) | | Cisco | CCAI | Note |
|---|
AHT | (Talk + Hold + ACW) / CallsHandled | Matches our derivation once Work Time = acw_duration |
|
| Agent-Out calls (if available) | call_type (only "Voice Inbound (IVR)" seen — confirm outbound value) | AgentOut Calls (0), AgentOut Calls TalkTime (0:00:00) | call_type (Voice Inbound (IVR)) | callType (Voice Inbound (IVR)) | | Cisco | CCAI | Note |
|---|
AgentOut Calls (0) | — (no field named) | Listed alongside TransferOut in the Transfers & Escalations domain; no dedicated CCAI table field named |
|
Transfer In / Transfer Out (if available) — likely VA→HA (escalations[]) vs HA→HA (transfers[]) | transfers_count (0) + direction inside participants_json | TransferIn (0), TransferOut (0)session_key: call-12175TransferIn: 0
TransferOut: 0
AgentID: 31 (no per-transfer name field exists in
Cisco's Agent-Detail export -- only aggregate counters;
no comm_transfers-style from/to record is available for
this call since Cisco doesn't track call-12175 at all) | transfers_count (0), handle_durations.transfer (false, false)session_key: call-12175participants_json[2]:
id: 23804
type: "agent"
entry_type: "queue_or_transfer"
user_id: 31
first_name: "Chandrika"
last_name: "Veerkar"
status: "finished"
handle_durations[0].transfer: false
handle_durations[1].transfer: false | transfers[] (empty — HA→HA) vs escalations[] (1 entry — VA→HA, createdAt 16:08:10 → escalatedAt 16:08:41 = 31s) vs handleDurations[].transfer (false, false). Real escalation/transfer ID: escalations[0].id = 5849; handleDurations[].transferId = null (both legs, since transfer is false)session_key: call-12175"transfers": [],
"escalations": [{
"id": 5849,
"status": "escalated",
"reason": "by_virtual_agent",
"createdAt": "2026-09-04T16:08:10.000Z",
"escalatedAt": "2026-09-04T16:08:41.000Z",
"fromVirtualAgent": {"id": 12, "name": "QAT-Voice-Member-Self-Service"},
"toAgent": {"id": 31, "name": "Chandrika Veerkar"}
}]
"participants": [
{"id": 23804, "type": "agent", "entryType": "queue_or_transfer",
"userId": 31, "firstName": "Chandrika", "lastName": "Veerkar"}
]
"handleDurations": [
{"id": 3580, "transfer": false, "transferId": null},
{"id": 3581, "transfer": false, "transferId": null}
] | | Cisco | CCAI | Note |
|---|
TransferIn + TransferOut = 0 no named party on either leg | finish_reason_1 = escalated = 1 VA “QAT-Voice-Member-Self-Service” → Agent “Chandrika Veerkar” | 1 − 0 = +1 CCAI Escalation, ⚠ variance — bot escalation not counted as a Cisco transfer; comm_transfers only covers human-to-human, not VA→HA |
session_key: call-12175Cisco: TransferIn=0, TransferOut=0 (no name)
CCAI: escalations[0].fromVirtualAgent.name = "QAT-Voice-Member-Self-Service"
escalations[0].toAgent.name = "Chandrika Veerkar" |
| Logged-In / Available / Not-Ready (low value) | not in table — agent-state feed only | Total Logged In Time, Available Time, Not Ready Time | none | not in JSON | | Cisco | CCAI | Note |
|---|
Available Time, Not Ready Time, Total Logged In Time | user_activity_logs + user_statuses (status=Available/Break/etc.) | The manual doc DOES map this, even though metadata_current doesn’t — needs the separate agent-state tables it names |
|
| RONA / redirect-on-no-answer (misc) | not in metadata — maybe session_data_feeds events | RONA | none | not in JSON | | Cisco | CCAI | Note |
|---|
RONA (summed counter) | — (no source table named) | No CCAI-side source named in the manual doc either |
|
E. Virtual-agent performance (Kevin wants this included, voice + chat)
| What Kevin wants | CCAI (BigQuery) — metadata_current | Cisco — SummaryDaily report | GCS BigQuery column | CCAI (JSON data) | Manual mapping (Cisco↔CCAI CSV doc) |
| VA interactions entered | participants_json (virtual_agent entries), channel | not represented | participants_json (1 of 3 entries type=virtual_agent), channel (call) | participants[].type == "virtual_agent" (entry id 23803), virtualAgent (id 12, "QAT-Voice-Member-Self-Service"){
"id": 23803,
"type": "virtual_agent",
"status": "finished",
"callDuration": 137,
"connectedAt": "2026-09-04T16:05:53.000Z",
"endedAt": "2026-09-04T16:08:10.000Z",
"virtualAgent": {"conversationId": "119dw_UDr9XTGyfXuNujcf2Fw"}
}
"virtualAgent": {"id": 12, "name": "QAT-Voice-Member-Self-Service", "vaAlias": null} | | Cisco | CCAI | Note |
|---|
Source (IVR) | agentType (AUTOMATED_AGENT), va_count (1) | Cisco does not manage virtual bot turns — only sees bot routing as incoming IVR traffic |
|
| VA answered / handled | va_handle_durations_json (call_duration 137s, finish_reason) | not represented | virtual_agent_handle_durations (call_duration 137, finish_reason escalated) | virtualAgentHandleDurations[] (callDuration 137, finishReason "escalated", responseCount 23){
"id": 7908,
"virtualAgent": {"id": 12, "name": "QAT-Voice-Member-Self-Service"},
"callDuration": 137,
"escalationReason": "by_virtual_agent",
"finishReason": "escalated",
"responseCount": 23,
"fallbackResponseCount": 0,
"initiatedBy": "end_user",
"startedAt": "2026-09-04T16:05:53.000Z",
"endedAt": "2026-09-04T16:08:10.000Z"
} | | Cisco | CCAI | Note |
|---|
| — (no NLU/bot metrics) | perf_call_va_handle_durations.call_duration → bot_talk_sec | Cisco only counts IVR-routed volume via Source='IVR' |
|
| Resolved / contained vs escalated | escalations_count (1), deflection (no_deflection), va_handle_durations_json.finish_reason ("esca…"), recordings_json.recording_type ("virtual_agent") | not represented | escalations_count (1), deflection (no_deflection), virtual_agent_handle_durations.finish_reason (escalated) | escalations[].reason ("by_virtual_agent"), deflection (no_deflection), virtualAgentHandleDurations[].finishReason (escalated) | | Cisco | CCAI | Note |
|---|
TransferIn/TransferOut counters | escalation_reason_1 (by_virtual_agent), finish_reason_1 (escalated) | Reconciled against Cisco Transfer counters and flagged as a variance — bot escalations aren’t Cisco transfers |
|
| Self-service MSA vs FAQ-bot split | menu_path / sub-agent name / raw_json — field TBD | not represented | TBD | not found — virtualAgent.name ("QAT-Voice-Member-Self-Service") is the closest signal but isn't a clean MSA/FAQ flag | not covered in the manual-mapping doc either — genuine open gap on both sides |
F. Grain, keys & PII
| What Kevin wants | CCAI (BigQuery) — metadata_current | Cisco — SummaryDaily report | GCS BigQuery column | CCAI (JSON data) | Manual mapping (Cisco↔CCAI CSV doc) |
| Stable interaction ID (distinct-call count) | id (12175), session_key ("call-12175"), call_uuid, provider_conversation_id | Unique ID (Daily_Agent_29_20260714-0545_BDUS_5059_8748) | id (12175), session_key (call-12175) | id (12175), callUuid (57272f16-15c2-4cac-b4b4-ca261bd8ef49) | | Cisco | CCAI | Note |
|---|
Unique ID (Daily_Agent_29_20260714-0545_BDUS_5059_8748) | conversationId (call-11903), id (11903), dialogflow_conversation_id_1 | Cisco Unique ID is a composite string, not a shared key |
|
| Chat ID | session_key "chat-*" (chats live in session_data_feeds) | n/a in this report | session_key (chat-*) | not in this JSON (session_key is a view-added column, not a raw_json field) | | Cisco | CCAI | Note |
|---|
| — (n/a) | session_key chat-7676 / chat-7681 / chat-7684 (Table 1 rows 24/29/33) | Confirms chat sessions exist in the same CCAI export, keyed the same way as calls |
|
| One row per agent per interaction (transfer credit) | table is 1 row/call, single agent_info_id — must explode participants_json (participants_count = 3) | row-per-agent + Unique ID already assumed | participants_json (3 entries) | participants[] (3 entries: id 23802 end_user, id 23803 virtual_agent, id 23804 agent)"participants": [
{"id": 23802, "type": "end_user", "callId": 12175},
{"id": 23803, "type": "virtual_agent", "callId": 12175},
{"id": 23804, "type": "agent", "userId": 31, "callId": 12175}
] | not explicitly covered — Table 0's nested qualityMetadata array (bot + human agent profiles in one record) is the closest evidence this needs exploding |
| Participants per interaction | participants_count (3), participants_json | not represented | participants_count (3), participants_json | participants.length (3), participants[]{"id": 23802, "type": "end_user", "phoneNumber": "+918867813818"}
{"id": 23803, "type": "virtual_agent", "virtualAgent": {"conversationId": "119dw_UDr9XTGyfXuNujcf2Fw"}}
{"id": 23804, "type": "agent", "userId": 31, "firstName": "Chandrika", "lastName": "Veerkar",
"teams": [{"id":10,"name":"US Ecomm Spanish Agents"}, {"id":13,"name":"PR Logistics English + Spanish"}]} | | Cisco | CCAI | Note |
|---|
| — | qualityMetadata nested array (agentType, displayName, agentId, teams) | Human agent profile nested inside the bot’s CCAI record |
|
| Redact member phone number | session_data_feeds.consumer_number, free-text body — mask before export | n/a (no transcript in report) | consumer_number | participants[0].phoneNumber (+918867813818, present here, on the end_user participant — not just in session_data_feeds) | not covered in the manual-mapping doc |
| Redact member name | session_data_feeds.body / transcript text — mask before export | n/a | body | not present — endUser.identifier is null; no member name field in this JSON | not covered — every name in the manual doc (Farhan Hussain, Elizabeth_Pinon) is an agent name, never a member name, consistent with no member-name field existing |
| Keep support-line number | support_number (+18153935508) | n/a | support_number (+18153935508) | supportNumber (+18153935508) | not covered in the manual-mapping doc |
Cross-cutting requirements
- Virtual agents included (voice and chat) — both the self-service "member
service agent" (does real work via GMP: reward status, membership upgrade) and the FAQ / knowledge bot that
escalates. Want: how many interactions enter, how many answered, how many resolved / contained.
Kevin will separate VA stats in his own reports but wants them in the export.
- Grain = one row per interaction, keyed by
call_id (calls) / chat_id
(chats). On a transfer, one row is not enough — each agent who handled the call must get a
row so both get credit. So: a stable interaction ID for distinct counting, plus per-agent rows for agent credit.
Queue "answered" counts distinct IDs; agent "answered" counts rows.
- PII: redact member name and member phone number from transcripts. Kevin does not want to
collect member PII (compliance burden). The support-line number is fine.
- Where wait time occurs in CCAI: member → steering/root agent (= IVR) → sub-agent
(order mgmt, membership, …; these sub-agents are deployed to queues / PQs) → escalation
agent → human agent. No wait time until escalation to a human agent — ASA / wait
time only accrues at that last step.
Coverage vs our columns
Queue report
| Kevin needs | Cisco Agent-Detail col | CCAI metadata_current | Status |
| Queue dimension | PQ ID / PQ Name | selected_menu_id / selected_menu_name / menu_path_name | Derivable — needs menu → human-PQ cross-walk |
| Time interval / date | Date / Hour / Time Interval | queued_at / assigned_at / created_at | Derivable (choose interval timestamp; tz) |
| Offered | — (not in agent report) | COUNT(*) where queued_at IS NOT NULL | Derivable |
| Answered | Calls Answered | COUNTIF(assigned_at IS NOT NULL) / agent_info_id set | Derivable |
| Abandoned | CallsAbandoned | queued_at IS NOT NULL AND assigned_at IS NULL | Derivable — confirm encoding |
| Service Level | — | COUNTIF(assigned_at - queued_at <= threshold) | Derivable if threshold supplied |
| ASA | — | AVG(assigned_at - queued_at) | Derivable — see timestamp note below |
| Longest wait time | — | MAX(assigned_at - queued_at) | Derivable |
| Max calls in queue / interval | — | concurrency calc over queued_at…assigned_at | Hard from per-call rows — Kevin: "not so important" |
| Abandon <30s buckets, abandoned-by | partial (Abandoned Hold Calls) | disconnected_by + wait math | Partially derivable |
Gap: the sample export we have is the Agent-Detail report only.
Kevin needs a separate Queue-interval report (Offered / SL / ASA / Longest Wait / Max-in-Q) —
get that report's column layout too.
Timestamp caution: for call-12175, connected_at (16:05:53) is before
queued_at (16:08:14) — connected_at looks like the virtual-agent connect, while the
human-queue wait is queued_at → assigned_at (16:08:30). Confirm which pair defines ASA.
wait_duration = 0 in the sample — confirm what it measures.
Agent report
| Kevin needs | Cisco Agent-Detail col | CCAI metadata_current | Status |
| Interval / queue / agent dims | Time Interval / PQ * / Agent + AgentID | timestamps / selected_menu_* / agent_info_id + agent_info_name | Covered (agent-ID cross-walk needed) |
| Calls Answered | Calls Answered / CallsHandled | COUNT rows per agent (connected) | Covered |
| Talk Time | Avg Talktime / Total Talk Time | call_duration (251s) — vs consumer_handle_durations_json.call_duration (216s) | Derivable — confirm which is "talk" |
| Work Time (ACW) | Avg WorkTime / Total Work Time | no dedicated column — maybe ends_at→updated_at gap (93s in sample) | Gap — confirm ACW source |
| Hold Time | Avg HoldTime / Total Hold Time | hold_duration (0s) | Covered |
| Handle Time = Talk+Work+Hold | AHT | derive once Work Time is defined | Blocked on Work Time |
| Agent-Out calls | AgentOut Calls / … TalkTime | call_type (only "Voice Inbound (IVR)" seen) | Derivable — confirm outbound label |
| Transfer In / Out | TransferIn / TransferOut | transfers_count (0) + direction in participants_json | Derivable via JSON explode |
| Per-agent credit on transfers | row per agent + Unique ID | metadata_current = 1 row/call, single agent_info_id | Gap — need a participant-level table (explode participants_json, participants_count=3) |
| Logged-In / Available / Not-Ready | Total Logged In Time / Available Time / Not Ready Time | not present | Gap — agent-state feed; Kevin rates these low-value anyway |
Virtual agent / containment
| Kevin needs | CCAI source | Status |
| VA interactions entered | participants_json (virtual_agent entries), channel | Derivable |
| VA answered / handled | va_handle_durations_json (call_duration, finish_reason) | Derivable |
| Resolved / contained vs escalated | escalations_count (1), deflection (no_deflection), va_handle_durations_json.finish_reason ("esca…"), offer_type (cascade) | Derivable |
| Self-service MSA vs FAQ bot split | menu_path / sub-agent name / raw_json | TBD — find the distinguishing field |
Grain & keys
| Kevin needs | CCAI source | Status |
| Stable interaction ID (calls) | id / session_key (call-12175) / call_uuid / provider_conversation_id | Covered |
| Chat ID | session_key pattern (chat-* in session_data_feeds) | Covered (chats live in the other tables) |
| Participants per interaction | participants_count (3) / participants_json | Covered |
| One row per agent per interaction | explode participants_json | Gap — build the participant-grain table |
PII
| Kevin needs | Where it appears | Action |
| Redact member phone number | session_data_feeds.consumer_number, free-text body | Mask before export |
| Redact member name | session_data_feeds.body / transcript text | Mask before export |
| Support-line number OK | metadata_current.support_number (+18153935508) | Keep |
| Internal IDs OK | end_user_id (3014), end_user_out_contact_id (SF contact) | Keep (review SF ID) |
Bottom line: the CCAI per-call table covers most of Kevin's
queue measures (Offered / Answered / Abandoned / ASA / Longest Wait are all derivable from the
queued_at/assigned_at pair) and most agent core measures (Answered, Talk, Hold).
Four real gaps: (1) after-call Work Time has no clear column; (2) per-agent rows on
transfers need a participant-grain table; (3) agent-state times (Logged-In / Available /
Not-Ready) aren't in the export; (4) we're missing the Queue-interval report layout from Cisco.
6d. One record, fully expanded — call-12175
Every field of a single BigQuery row (session_key = 'call-12175'), flattened section → item →
field, exactly as it comes back from the nested-repeated query. This shows what one real interaction record actually
contains, field by field.
Legend:
violet = field name Kevin asked for (or directly feeds a measure he asked for) on
the Sep 10 call. orange = value already has a matching column in Cisco's
SummaryDaily Reports (Agent-Detail) export. Violet with no orange means Kevin wants it but Cisco's
Agent-Detail report doesn't carry it (queue-level measures like Offered/Service Level/ASA, VA metrics, and the
VA→HA / HA→HA transfer-time split all fall in this bucket — they're derived from these raw fields, not a
literal Cisco column).
| Section | Item | Field | Value |
| agent_info | - | avatar_url | https://qat-640-aqd2ubm.uw1.ccaiplatform.com/assets2/default-profile.png |
| agent_info | - | email | c_cveerkar@costco.com |
| agent_info | - | first_name | Chandrika |
| agent_info | - | id | 31 |
| agent_info | - | last_name | Veerkar |
| agent_info | - | name | Chandrika Veerkar |
| answer_type | - | - | manual |
| assigned_at | - | - | 2026-09-04T09:08:30.000-07:00 |
| auto_session_summaries | 0 | participant_id | 23804 |
| auto_session_summaries | 0 | session_summary | situation / No issue identified / action / No action taken / resolution |
| auto_session_summaries | 0 | session_summary_sections.action | No action taken |
| auto_session_summaries | 0 | session_summary_sections.resolution | N |
| auto_session_summaries | 0 | session_summary_sections.situation | No issue identified |
| auto_session_summaries | 0 | user_id | 31 |
| call_duration | - | - | 251 |
| call_type | - | - | Voice Inbound (IVR) |
| call_uuid | - | - | 57272f16-15c2-4cac-b4b4-ca26... |
| connected_at | - | - | 2026-09-04T09:05:53.000-07:00 |
| consumer_handle_durations | 0 | call_duration | 216 |
| consumer_handle_durations | 0 | ended_at | 2026-09-04T09:09:04.000-07:00 |
| consumer_handle_durations | 0 | hold_duration | 0 |
| consumer_handle_durations | 0 | id | 7489 |
| consumer_handle_durations | 0 | started_at | 2026-09-04T09:05:28.000-07:00 |
| consumer_in_menu_durations | 0 | duration | 21 |
| consumer_in_menu_durations | 0 | ended_at | 2026-09-04T09:05:49.000-07:00 |
| consumer_in_menu_durations | 0 | event | finished |
| consumer_in_menu_durations | 0 | id | 11406 |
| consumer_in_menu_durations | 0 | lang | en |
| consumer_in_menu_durations | 0 | started_at | 2026-09-04T09:05:28.000-07:00 |
| created_at | - | - | 2026-09-04T09:05:28.000-07:00 |
| deflection | - | - | no_deflection |
| disconnected_by | - | - | disconnected_by_end_user |
| end_user | - | id | 3014 |
| end_user | - | out_contact_id | 003D700001H5yyMIAR |
| ends_at | - | - | 2026-09-04T09:09:04.000-07:00 |
| escalations | 0 | created_at | 2026-09-04T09:08:10.000-07:00 |
| escalations | 0 | escalated_at | 2026-09-04T09:08:41.000-07:00 |
| escalations | 0 | from_menu_path.items_count | 3 |
| escalations | 0 | from_menu_path.materialized_path | 2/10/34 |
| escalations | 0 | from_menu_path.name | Routing Queues/Steering Menu... |
| escalations | 0 | from_virtual_agent.avatar_url | https://prod-ujet-server.prod.svc.cluster.local/assets2/default-virtual-agent-avatar-1.png |
| escalations | 0 | from_virtual_agent.id | 12 |
| escalations | 0 | from_virtual_agent.name | QAT-Voice-Member-Self-Service |
| escalations | 0 | id | 5849 |
| escalations | 0 | reason | by_virtual_agent |
| escalations | 0 | status | escalated |
| escalations | 0 | to_agent.avatar_url | https://qat-640-aqd2ubm.uw1.ccaiplatform.com/assets2/default-profile.png |
| escalations | 0 | to_agent.email | c_cveerkar@costco.com |
| escalations | 0 | to_agent.first_name | Chandrika |
| escalations | 0 | to_agent.id | 31 |
| escalations | 0 | to_agent.last_name | Veerkar |
| escalations | 0 | to_agent.name | Chandrika Veerkar |
| escalations | 0 | to_menu_path.items_count | 3 |
| escalations | 0 | to_menu_path.materialized_path | 2/6/8 |
| escalations | 0 | to_menu_path.name | Routing Queues/ECOMM General... |
| fail_reason | - | - | nothing |
| handle_durations | 0 | acw_duration | 0 |
| handle_durations | 0 | agent_id | 31 |
| handle_durations | 0 | assigned_connection_duration | 10 |
| handle_durations | 0 | barged | false |
| handle_durations | 0 | bcw_duration | 0 |
| handle_durations | 0 | call_duration | 24 |
| handle_durations | 0 | ended_at | 2026-09-04T09:09:04.000-07:00 |
| handle_durations | 0 | hold_duration | 0 |
| handle_durations | 0 | id | 3580 |
| handle_durations | 0 | lang | en |
| handle_durations | 0 | menu_path | Routing Queues/ECOMM General... |
| handle_durations | 0 | menu_path_id | 6 |
| handle_durations | 0 | started_at | 2026-09-04T09:08:40.000-07:00 |
| handle_durations | 0 | transfer | false |
| handle_durations | 1 | acw_duration | 90 |
| handle_durations | 1 | agent_id | 31 |
| handle_durations | 1 | assigned_connection_duration | 0 |
| handle_durations | 1 | barged | false |
| handle_durations | 1 | bcw_duration | 0 |
| handle_durations | 1 | call_duration | 0 |
| handle_durations | 1 | ended_at | 2026-09-04T09:10:34.000-07:00 |
| handle_durations | 1 | id | 3581 |
| handle_durations | 1 | lang | en |
| handle_durations | 1 | menu_path | Routing Queues/ECOMM General... |
| handle_durations | 1 | menu_path_id | 6 |
| handle_durations | 1 | started_at | 2026-09-04T09:09:04.000-07:00 |
| handle_durations | 1 | transfer | false |
| has_feedback | - | - | false |
| hold_duration | - | - | 0 |
| id | - | - | 12175 |
| is_out_ticket_account | - | - | true |
| lang | - | - | en |
| menu_path | - | items_count | 3 |
| menu_path | - | materialized_path | 2/6/8 |
| menu_path | - | name | Routing Queues/ECOMM General... |
| offer_events | 0 | casting_time | 2026-09-04T09:08:14.000-07:00 |
| offer_events | 0 | group | Group 1 |
| offer_events | 1 | casting_time | 2026-09-04T09:08:21.000-07:00 |
| offer_events | 1 | group | Group 3 |
| offer_type | - | - | cascade |
| out_ticket_id | - | - | 003D700001H5yyMIAR |
| out_ticket_url | - | - | https://costcowholesalecorporation2--itmscqa.sandbox.my.salesforce.com/lightning/r/Contact/003D700001H5yyMIAR/view |
| participants | 0 | call_duration | 216 |
| participants | 0 | call_id | 12175 |
| participants | 0 | connected_at | 2026-09-04T09:05:28.000-07:00 |
| participants | 0 | end_user_id | 3014 |
| participants | 0 | ended_at | 2026-09-04T09:09:04.000-07:00 |
| participants | 0 | entry_type | queue_or_transfer |
| participants | 0 | fail_reason | nothing |
| participants | 0 | id | 23802 |
| participants | 0 | phone_number | +918867813818 |
| participants | 0 | status | finished |
| participants | 0 | type | end_user |
| participants | 1 | call_duration | 137 |
| participants | 1 | call_id | 12175 |
| participants | 1 | connected_at | 2026-09-04T09:05:53.000-07:00 |
| participants | 1 | ended_at | 2026-09-04T09:08:10.000-07:00 |
| participants | 1 | entry_type | queue_or_transfer |
| participants | 1 | fail_reason | nothing |
| participants | 1 | id | 23803 |
| participants | 1 | status | finished |
| participants | 1 | type | virtual_agent |
| participants | 1 | virtual_agent.conversation_id | 119dw_UDr9XTGyfXuNujcf2Fw |
| participants | 1 | virtual_agent_id | 12 |
| participants | 1 | virtual_agent_params.ani | +918867813818 |
| participants | 1 | virtual_agent_params.callId | 12175 |
| participants | 1 | virtual_agent_params.channel | call |
| participants | 1 | virtual_agent_params.dnis | +18153935508 |
| participants | 2 | agent_assist.conversation_id | 081vdMdB1AOSuyHdJrSzo5v5Q |
| participants | 2 | call_duration | 24 |
| participants | 2 | call_id | 12175 |
| participants | 2 | connected_at | 2026-09-04T09:08:40.000-07:00 |
| participants | 2 | email | c_cveerkar@costco.com |
| participants | 2 | ended_at | 2026-09-04T09:09:04.000-07:00 |
| participants | 2 | entry_type | queue_or_transfer |
| participants | 2 | fail_reason | nothing |
| participants | 2 | first_name | Chandrika |
| participants | 2 | id | 23804 |
| participants | 2 | last_name | Veerkar |
| participants | 2 | status | finished |
| participants | 2 | type | agent |
| participants | 2 | user_id | 31 |
| participants | 2 | teams[2.0].id | 10 |
| participants | 2 | teams[2.0].name | US Ecomm Spanish Agents |
| participants | 2 | teams[2.1].id | 13 |
| participants | 2 | teams[2.1].name | PR Logistics English + Spanish |
| participants | 2 | teams[2.2].id | 14 |
| participants | 2 | teams[2.2].name | PR Logistics Spanish |
| participants | 2 | teams[2.3].id | 19 |
| participants | 2 | teams[2.3].name | PR Driver Gate Spanish Agents |
| participants | 2 | teams[2.4].id | 23 |
| participants | 2 | teams[2.4].name | QA Testing Team - Chat |
| queue_priority_level | - | - | 0 |
| queued_at | - | - | 2026-09-04T09:08:14.000-07:00 |
| recording_permission | - | - | not_asked |
| recordings | 0 | call_id | 12175 |
| recordings | 0 | duration | 137 |
| recordings | 0 | id | 8949 |
| recordings | 0 | recording_type | virtual_agent |
| recordings | 0 | started_at | 2026-09-04T09:05:54.000-07:00 |
| selected_menu | - | deleted | false |
| selected_menu | - | hidden | false |
| selected_menu | - | id | 8 |
| selected_menu | - | menu_type | ivr_menu |
| selected_menu | - | name | US_ECOMM_General_CB |
| selected_menu | - | parent_id | 6 |
| selected_menu | - | position | 1 |
| session_type | - | - | Voice Inbound (IVR) |
| session_type_v2 | - | - | Voice Inbound (IVR) |
| status | - | - | finished |
| support_number | - | - | +18153935508 |
| updated_at | - | - | 2026-09-04T09:10:37.000-07:00 |
| verified | - | - | false |
| virtual_agent_handle_durations | 0 | call_duration | 137 |
| virtual_agent_handle_durations | 0 | ended_at | 2026-09-04T09:08:10.000-07:00 |
| virtual_agent_handle_durations | 0 | escalation_reason | by_virtual_agent |
| virtual_agent_handle_durations | 0 | fallback_response_count | 0 |
| virtual_agent_handle_durations | 0 | finish_reason | escalated |
| virtual_agent_handle_durations | 0 | id | 7908 |
| virtual_agent_handle_durations | 0 | initiated_by | end_user |
| virtual_agent_handle_durations | 0 | lang | en |
| virtual_agent_handle_durations | 0 | menu_path | Routing Queues/Steering Menu... |
| virtual_agent_handle_durations | 0 | menu_path_id | 35 |
| virtual_agent_handle_durations | 0 | response_count | 23 |
| virtual_agent_handle_durations | 0 | started_at | 2026-09-04T09:05:53.000-07:00 |
| virtual_agent_handle_durations | 0 | transfer | false |
| virtual_agent_handle_durations | 0 | virtual_agent.avatar_url | https://prod-ujet-server.prod.svc.cluster.local/assets2/default-virtual-agent-avatar-1.png |
| virtual_agent_handle_durations | 0 | virtual_agent.id | 12 |
| virtual_agent_handle_durations | 0 | virtual_agent.name | QAT-Voice-Member-Self-Service |
| voicemail_reason | - | - | not_voicemail |
| voip_provider | - | - | deprecated |
| wait_duration | - | - | 0 |
Source: p-640-lab-itmsc.ccaas_raw_lab.metadata (~7,278 rows, one per call).
| Source column | Type | Target field | Transform | Notes |
id | INT64 | TBD | TBD | TBD |
call_uuid | STRING | TBD | TBD | 2,507 nulls in POC data |
lang | STRING | TBD | TBD | TBD |
call_type / session_type / session_type_v2 | STRING | TBD | TBD | TBD |
status | STRING | TBD | lookup | see value maps |
created_at / queued_at / assigned_at / connected_at / ends_at / updated_at | TIMESTAMP | TBD | TBD | timezone / format TBD |
wait_duration / call_duration / hold_duration | INT64 | TBD | TBD | seconds; confirm Webex unit (ms?) |
has_feedback / verified / is_out_ticket_account | BOOL | TBD | TBD | TBD |
out_ticket_id / out_ticket_url | STRING | TBD | TBD | TBD |
recording_url / recording_permission | STRING | TBD | TBD | TBD |
voicemail_reason / deflection / disconnected_by / fail_reason | STRING | TBD | TBD | TBD |
support_number | STRING | TBD | TBD | TBD |
selected_menu_id / selected_menu_name / selected_menu_type | INT64 / STRING | TBD | TBD | TBD |
menu_path_name / menu_path_materialized_path / menu_path_items_count | STRING / INT64 | TBD | TBD | candidate for Webex queue |
queue_priority_level | INT64 | TBD | TBD | TBD |
agent_info_id / agent_info_name | INT64 / STRING | TBD | lookup | needs agent ID cross-walk |
end_user_id / end_user_out_contact_id | INT64 / STRING | TBD | TBD | TBD |
offer_type / answer_type | STRING | TBD | TBD | TBD |
participants_count / transfers_count / escalations_count / recordings_count | INT64 | TBD | TBD | TBD |
participants_json / recordings_json / va_handle_durations_json / consumer_handle_durations_json | STRING (JSON) | TBD | explode | may map to per-leg Webex activity rows |
raw_json | JSON | — | — | not mapped; retained for audit |
8. session_data_feeds → Webex CC
Source: p-640-lab-itmsc.ccaas_raw_lab.session_data_feeds (one row per event block).
| Source column | Type | Target field | Transform | Notes |
call_id / call_id_body | STRING | TBD | TBD | join key back to metadata |
file_lang / language | STRING | TBD | TBD | TBD |
event_type | STRING | TBD | lookup | 17 known types — see value maps |
event_time | TIMESTAMP | TBD | TBD | TBD |
fail_reason / fail_details | STRING | TBD | TBD | TBD |
menu | STRING | TBD | TBD | TBD |
support_number / consumer_number | STRING | TBD | TBD | PII — masking rule TBD |
disconnected_by | STRING | TBD | TBD | TBD |
situation / action / resolution / agent | STRING | TBD | TBD | free text summary sections |
crm_link / external_storage_link / gcs_url | STRING | TBD | TBD | TBD |
sentiment_score | INT64 | TBD | TBD | scale / sign convention TBD |
dp_queue_id / dp_order_number / dp_member_verified / dp_order_verified / dp_intent / dp_summary / dp_callid / dp_interaction_id / dp_channel | STRING | TBD | TBD | from dataParameters |
data_parameters_json | STRING (JSON) | TBD | TBD | overflow / audit |
source_file / body | STRING | — | — | provenance; not mapped |
raw_json | JSON | — | — | not mapped; retained for audit |
9. ujet_session_summaries → Webex CC
Source: p-640-lab-itmsc.ccaas_raw_lab.ujet_session_summaries (~30 rows in POC).
| Source column | Type | Target field | Transform | Notes |
id | INT64 | TBD | TBD | join key to metadata |
type / menu_type / menu_path | STRING | TBD | TBD | TBD |
ended_at / finished_at | TIMESTAMP | TBD | TBD | TBD |
session_summary | STRING | TBD | TBD | free text |
summary_situation / summary_action / summary_resolution / summary_agent | STRING | TBD | TBD | parsed summary sections |
summary_sections_count | INT64 | TBD | TBD | TBD |
session_summary_sections_json | STRING (JSON) | TBD | TBD | overflow / audit |
raw_json | JSON | — | — | not mapped; retained for audit |
Reference: value / enum maps
metadata.status → Webex CC
| BigQuery value | Webex CC value | Notes |
| TBD | TBD | TBD |
session_data_feeds.event_type → Webex CC activity / event
| BigQuery event_type | Webex CC target | Notes |
| Call started | TBD | TBD |
| Call ended | TBD | TBD |
| Call failed | TBD | TBD |
| Chat started | TBD | TBD |
| Chat ended | TBD | TBD |
| Dispositions | TBD | TBD |
| Segment sentiment score | TBD | TBD |
| Session sentiment score | TBD | TBD |
| Customer rating received | TBD | TBD |
| Customer email collected | TBD | TBD |
| Agent Assist auto-generated Summary | TBD | TBD |
| Session summary uploaded | TBD | TBD |
| CCAI Insight call recording uploaded | TBD | TBD |
| CCAI Insight chat history uploaded | TBD | TBD |
| Text attachment uploaded | TBD | TBD |
| Custom data from the customer has arrived | TBD | TBD |
| SIP Data Received | TBD | TBD |
| Rule | Definition |
direct | Copy value unchanged. |
cast | Change type only (e.g. TIMESTAMP → ISO-8601 string). TBD target formats. |
lookup | Replace via a value map in value / enum maps. |
concat | Join multiple source columns. TBD. |
derive | Computed (e.g. duration = ends_at - connected_at). TBD. |
explode | Expand a JSON array into multiple Webex rows. TBD grain. |
| Timezone | TBD — BigQuery timestamps are UTC; confirm Webex expectation. |
| Duration unit | TBD — source is seconds; confirm Webex unit. |
| PII handling | TBD — phone numbers, emails, CRM links. |
Open questions
- Which Webex CC surface is the target — Provisioning API, a data import, or the Analyzer / Reporting model?
- Is this a one-way load, or reconciliation between CCAI data and Webex CC records?
- What is the join key between CCAI
call_uuid / id and a Webex CC contact / session ID?
- Target grain: one row per contact, per session, or per activity leg?
- Agent ID cross-walk: how do UJET
agent_info_id values map to Webex CC agent IDs?
- Queue model: does
menu_path_* map to a Webex CC queue, entry point, or something else?
- Required vs optional Webex CC fields with no CCAI source — defaults?
- Timestamp format, timezone, and duration units expected by the target.
Log: Queue name verification notes
Cross-system queue-name verification trail — matching the same interaction across Cisco,
CCAI, BigQuery, and Salesforce, plus a false-positive dead end that came up while doing it.
The verification chain
Confirming Cisco’s “US Membership” queue is the same queue as CCAI’s
US_MS_General_Chat, by tracing one real interaction across all four systems:
| System | Field | Value |
| Google Cloud (BigQuery, QAT env) | selected_menu | “Routing Queues/ECOMM General/US_ECOMM_General_CB” |
| CCAI (Contact Center AI platform) | Queue Name | Routing Queues/Membership/US_MS_General_Chat – Cascade – Group 1 (CCAI queue name: US_MS_General_Chat; aka Cisco “US Membership”) |
| CCAI | Chat ID / Agent | Chat-4018, agent Bibiam Martinez |
| Salesforce (UJET Session History) | Chat ID | 6,104 (UJET-14455) |
| Cisco (Excel export, 07/14/2026) | PQ Name | US Membership (aka CCAI US_MS_General_Chat) |
Dead end: US_EN_CTWS_PCS
A keyword search of the Cisco Excel export for “US Membership” / Bibiam Martinez returned one match —
but it was the wrong record, matched only because the literal text “US Membership” happened to
appear in that row’s Hour column, not the actual queue field.
| Field | Value |
| Unique ID | Daily_Agent_29_20260714-0700_CTWS_5254_51762 |
| PeripheralNumber | 99148427 |
| Agent ID | 51762 |
| LOB | CTWS |
| Date | 2026-07-14 |
| PQ ID / Name | 5254 / US_EN_CTWS_PCS |
| Team Name | ALORICA_FtMyer_Team22 |
| Agent | Ans_Butt (Agent ID: 51762) — not Bibiam Martinez ❌ |
| Hour column text | “US Membership” (coincidental string match only) |
Conclusion: US_EN_CTWS_PCS is an unrelated CTWS-LOB queue and is not part of the
Membership/Chat mapping — the agent mismatch (Ans_Butt vs. Bibiam Martinez) confirms it’s a false positive
from a loose keyword search, not a real cross-system match. Search should filter on the PQ Name column
specifically, not scan every column for the queue-name text.
Confirmed Cisco ↔ CCAI queue-name mapping (reference table)
Source: user’s personal “Queue Name verification 2” notes, cross-referencing Google Cloud/BigQuery (QAT env), CXinsights, CCAI, Salesforce, and a Cisco Excel export dated 07/14/2026. “NEW” rows have no confirmed Cisco-side name yet.