omni-channel-reporting-data

Omni-Channel analytics data: agent work records, queue metrics, capacity utilization, wait time reporting. NOT for admin routing setup.

Best use case

omni-channel-reporting-data is best used when you need a repeatable AI agent workflow instead of a one-off prompt.

Omni-Channel analytics data: agent work records, queue metrics, capacity utilization, wait time reporting. NOT for admin routing setup.

Teams using omni-channel-reporting-data should expect a more consistent output, faster repeated execution, less prompt rewriting.

When to use this skill

  • You want a reusable workflow that can be run more than once with consistent structure.

When not to use this skill

  • You only need a quick one-off answer and do not need a reusable workflow.
  • You cannot install or maintain the underlying files, dependencies, or repository context.

Installation

Claude Code / Cursor / Codex

$curl -o ~/.claude/skills/omni-channel-reporting-data/SKILL.md --create-dirs "https://raw.githubusercontent.com/PranavNagrecha/AwesomeSalesforceSkills/main/skills/data/omni-channel-reporting-data/SKILL.md"

Manual Installation

  1. Download SKILL.md from GitHub
  2. Place it in .claude/skills/omni-channel-reporting-data/SKILL.md inside your project
  3. Restart your AI agent — it will auto-discover the skill

How omni-channel-reporting-data Compares

Feature / Agentomni-channel-reporting-dataStandard Approach
Platform SupportNot specifiedLimited / Varies
Context Awareness High Baseline
Installation ComplexityUnknownN/A

Frequently Asked Questions

What does this skill do?

Omni-Channel analytics data: agent work records, queue metrics, capacity utilization, wait time reporting. NOT for admin routing setup.

Where can I find the source code?

You can find the source code on GitHub using the link provided at the top of the page.

SKILL.md Source

Omni-Channel reporting questions become tractable once you separate assignment history from presence history and choose the exact service channel you are analyzing. The goal is to produce metrics that match how Salesforce stores work movement: AgentWork for per-assignment timing and UserServicePresence for status-duration capacity analysis. Historical reporting gets reliable only when the design respects channel-specific joins and the fact that transfers and abandons create additional AgentWork rows.

## Before Starting

- Which exact channel needs historical reporting: Case, MessagingSession, VoiceCall, or more than one?
- Is the metric really about handled assignments, or is it about agent presence time and capacity utilization?
- Should transferred and abandoned work count as separate assignment events, or is the business trying to approximate conversation-level volume?

## Core Concepts

### AgentWork Stores Assignment-Level Metrics

AgentWork is the historical record for an Omni-Channel assignment. The researched sources identify `RequestDateTime`, `AcceptDateTime`, `CloseDateTime`, `WaitTime`, `HandleTime`, `ActiveTime`, `CapacityWeight`, and `DeclineReason` as the core fields for understanding how long work waited, when it was accepted, how long it stayed active, and how much capacity it consumed. Use these fields when the question is about assignment timing or workload, not when the question is about how long an agent stayed in a given presence status.

### UserServicePresence Stores Presence Duration History

UserServicePresence is the data source for presence-status duration analysis. That matters because capacity utilization is not just a sum of handled work; it depends on how long agents were in statuses that made them available, away, or otherwise participating in Omni-Channel routing. If the reporting request says "utilization," "status duration," or "time spent available," the design has to include UserServicePresence rather than trying to derive everything from AgentWork alone.

### Historical Reporting Is Channel Specific

The researched notes are explicit that historical Omni-Channel reporting requires Custom Report Types per channel that join AgentWork to the underlying work item object. That means a Case-routed design is different from a MessagingSession-routed design, and a VoiceCall-routed design is different again. A single universal historical report model is the wrong starting point because the related object differs by service channel.

### Transfers and Abandons Change the Row Grain

Transferred and abandoned work do not preserve a single AgentWork row from start to finish. The researched notes state that abandoned and transferred work each generate new AgentWork records. That makes AgentWork an assignment-grain dataset rather than a conversation-grain dataset. If a team counts raw rows without defining the grain, totals can rise for reasons that are operationally correct but analytically surprising.

## Common Patterns

### Channel-Specific Historical Report Types

**When to use:** A stakeholder wants historical wait time, handle time, or active time for a specific Omni-Channel channel.

**How it works:** Build a Custom Report Type for that channel by joining AgentWork to the related work item object: Case, MessagingSession, or VoiceCall. Expose the AgentWork timing and capacity fields, then add the channel-specific business fields needed for grouping and filtering.

**Why not the alternative:** A single generic report type hides the real join requirement and breaks as soon as different channels need different related-object context.

### Capacity Utilization From Presence Plus Work

**When to use:** An operations lead asks for capacity utilization, online time, or time-in-status analysis.

**How it works:** Treat UserServicePresence as the source for status durations and AgentWork as the source for handled-assignment timing. Put the two datasets side by side in the reporting design instead of forcing one object to answer both questions.

**Why not the alternative:** AgentWork can describe assignment timing, but the researched notes point to UserServicePresence for presence-status durations used in utilization analysis.

### Assignment Reporting That Survives Transfers

**When to use:** Reports look inflated after heavy transfer or abandonment activity.

**How it works:** Keep the metric labeled at assignment grain, and document that transferred or abandoned work can create additional AgentWork rows. If leadership needs conversation-level counting, define that as a separate derived metric rather than silently reinterpreting AgentWork rows.

**Why not the alternative:** Pretending each row equals one customer interaction produces misleading totals because Salesforce creates new AgentWork records for transferred and abandoned work.

## Recommended Workflow

1. Confirm the channel scope first, and split the work into separate reporting designs for Case, MessagingSession, and VoiceCall where needed.
2. Map each requested metric to its real source: AgentWork for assignment timing and UserServicePresence for presence-duration utilization.
3. Build the channel-specific Custom Report Type that joins AgentWork to the correct related work item object.
4. Expose and validate the AgentWork fields the analysis depends on: `RequestDateTime`, `AcceptDateTime`, `CloseDateTime`, `WaitTime`, `HandleTime`, `ActiveTime`, `CapacityWeight`, and `DeclineReason`.
5. Define the reporting grain in writing before aggregating anything, and state how transferred and abandoned work will be treated.
6. Test the design with known transfer and abandonment samples so stakeholders can see why row counts and conversation counts are not always the same.
7. Publish the metric definitions alongside the report so supervisors know which measures come from AgentWork and which come from UserServicePresence.

Related Skills

sandbox-data-masking

8
from PranavNagrecha/AwesomeSalesforceSkills

Use this skill when configuring or reviewing Salesforce Data Mask to protect PII/PHI in partial or full copy sandboxes after a refresh. Trigger keywords: data mask, sandbox masking, PII in sandbox, GDPR sandbox, HIPAA non-production, mask contacts, obfuscate fields non-production. NOT for sandbox refresh mechanics (use sandbox-refresh-and-templates), NOT for production data anonymization, NOT for Shield Platform Encryption at rest.

gdpr-data-privacy

8
from PranavNagrecha/AwesomeSalesforceSkills

Use this skill when implementing GDPR or CCPA data privacy controls in Salesforce: Individual sObject linkage, consent tracking, Right to Be Forgotten (RTBF) requests, data subject request handling, and Privacy Center configuration. Trigger keywords: GDPR, data privacy, consent management, right to erasure, Individual object, ContactPointConsent, ShouldForget, data subject request, Privacy Center, data portability. NOT for general data quality cleanup, duplicate management, field-level encryption (see platform-encryption skill), or sandbox data masking (see sandbox-data-masking skill).

data-classification-labels

8
from PranavNagrecha/AwesomeSalesforceSkills

Classify Salesforce fields by data sensitivity and compliance category using the four built-in classification attributes (SecurityClassification, ComplianceGroup, BusinessOwnerId, BusinessStatus). Covers Metadata API deployment, Tooling API querying, and Einstein Data Detect recommendations. NOT for data masking, Shield Platform Encryption, or runtime access control enforcement.

customer-data-request-workflow

8
from PranavNagrecha/AwesomeSalesforceSkills

Implement GDPR/CCPA data subject rights (access, deletion, rectification) using Salesforce Privacy Center and/or custom workflow. NOT for general backup or org-level data retention policy.

vlocity-to-native-omnistudio-migration

8
from PranavNagrecha/AwesomeSalesforceSkills

Use when migrating an org from the Vlocity managed package (vlocity_ins, vlocity_cmt, vlocity_ps) to native OmniStudio. Trigger keywords: Vlocity to OmniStudio migration, namespace migration, vlocity_ins to omnistudio, OmniStudio Migration Tool, DataRaptor namespace update, OmniScript JSON export, managed package to native. NOT for new OmniStudio setup in greenfield orgs, nor for migrating between OmniStudio-native orgs, nor for Salesforce CPQ to Industries CPQ migration.

omnistudio-vs-flow-decision

8
from PranavNagrecha/AwesomeSalesforceSkills

Use when choosing between OmniStudio (OmniScript / Integration Procedure / FlexCard / DataRaptor) and Flow / Screen Flow / Apex for a given capability. Triggers: 'omnistudio or flow', 'omniscript vs screen flow', 'integration procedure vs subflow', 'flexcard vs lightning page'. NOT for general automation selection across Workflow/Process Builder/Apex (see automation-selection tree).

omnistudio-testing-patterns

8
from PranavNagrecha/AwesomeSalesforceSkills

Use when testing or validating OmniStudio components — OmniScript preview, Integration Procedure step debugging, DataRaptor field-mapping validation, and end-to-end UTAM-based automation. NOT for Apex unit testing or standard Flow debugging.

omnistudio-security

8
from PranavNagrecha/AwesomeSalesforceSkills

Use when designing or reviewing OmniStudio security across OmniScripts, Integration Procedures, DataRaptors, custom LWCs, Apex actions, guest-user exposure, and outbound HTTP actions. Triggers: 'OmniStudio security', 'guest user omniscript', 'DataRaptor CRUD FLS', 'OmniStudio Apex security', 'HTTP action data exposure'. NOT for general portal identity architecture or generic Apex security reviews when OmniStudio is not the main surface.

omnistudio-remote-actions

8
from PranavNagrecha/AwesomeSalesforceSkills

Use when configuring, troubleshooting, or choosing between Remote Action types in OmniScript or FlexCard. Triggers: 'remote action', 'OmniScript action', 'IP action', 'Apex action element', 'VlocityOpenInterface2', 'Send/Response JSON Path'. NOT for Integration Procedure internal design (use integration-procedures) or generic Apex callout patterns (use apex integration skills).

omnistudio-performance

8
from PranavNagrecha/AwesomeSalesforceSkills

Use when diagnosing or improving runtime performance in OmniStudio assets: slow OmniScripts, Integration Procedures with high latency, DataRaptor caching, excessive API call counts, FlexCard rendering delays, or async IP fire-and-forget patterns. Triggers: 'OmniScript slow', 'Integration Procedure timeout', 'DataRaptor cache', 'FlexCard loading too long', 'reduce API calls OmniStudio'. NOT for LWC performance outside of OmniScript runtime (use lwc-performance skill). NOT for OmniScript step design or journey UX (use omniscript-design-patterns skill).

omnistudio-multi-language

8
from PranavNagrecha/AwesomeSalesforceSkills

Localize OmniScripts, FlexCards, and DataRaptors using Label-based translation, multi-language JSON, and locale-aware number/date formatting. NOT for Salesforce Translation Workbench alone.

omnistudio-lwc-omniscript-migration

8
from PranavNagrecha/AwesomeSalesforceSkills

Migrate classic Visualforce-based OmniScripts to LWC-based runtime with feature parity and regression testing. NOT for new OmniScript design.