Tag Archive for: Omni-Channel

Re-routing or Ending “Waiting” Conversations

We’ve all been there. You look at your Omni-Channel Supervisor dashboard and see a list of conversations sitting in the backlog waiting for a service rep to action them. Maybe the customer wandered off, or maybe the floor is just slammed, or it’s routed to a queue or skillset that doesn’t have anybody online right now.

Let’s look at this from the customer’s perspective. If a user is on a web chat and hasn’t been connected for 10+ minutes, they aren’t just “waiting”—they’re potentially stuck in a void. Maybe your agents were pulled into an emergency meeting, or a fire alarm went off, or the shift ended and the backlog didn’t clear. Keeping a customer staring at a spinning wheel for 15-20 minutes when no one is coming is a surefire way to tank your CSAT.

Wouldn’t it be better to proactively manage that experience? In this post, I’ll show you how to use Scheduled Paths and a “janitor” Bot to automatically re-route or end conversations that have been waiting too long. These steps will focus on how to solve this for our messaging channels, but a similar approach could be used for Voice calls, when using Unified Routing.


The “Why”: Proactive Queue Management

When a conversation stays waiting indefinitely, it clutters your backlog and misleads the customer. By automating the cleanup:

  • Respect the Customer’s Time: Instead of infinite waiting, give them a clear exit or an alternative way to reach you.
  • Accurate reporting: Wait times aren’t blown out by a few conversations that are waiting for an inordinate length of time.
  • Cleaner Backlog: Supervisors can focus on the work that is actually actionable.

The “How”: Using Scheduled Paths

The magic happens in a Record-Triggered Flow on the MessagingSession object (or VoiceCall for the phone channel).

Option 1: The Simple “Safety Net”

This approach creates a global rule: if any session waits too long, we take action.

  1. Configure the Start: Trigger the Flow when a record is created or updated where Status equals Waiting.
  2. Add a Scheduled Path: Click Add Scheduled Paths.
  3. Set the Timer: Set the offset to, say, 10 or 20 minutes after the session moves to waiting (Time Source = When MessagingSession is Created or Updated)
  4. Route Work: Within that path, use the Route Work action to move the session to a different queue or an Enhanced Bot or Agentforce Agent.

Option 2: The “Prescriptive” Approach (Custom SLAs)

If you want to be more specific—perhaps giving VIP customers a longer wait threshold—you can use a custom field.

  1. Custom Field: Add a Date/Time field to MessagingSession called TimeToReRouteSession.
  2. Initial Routing: In your main Omni Flow, use a formula like NOW() + (1/(24*60)) to set a specific “expiration” time on that record.
  3. Triggered Flow: Set your Record-Triggered Flow to fire based on that custom field reaching its deadline  (Time Source = MessagingSession:TimeToReRouteSession)

The Secret Sauce: The “Janitor” Bot

Salesforce doesn’t have a “Close Session” action in Flow yet. To end a session gracefully, we use an Enhanced Einstein Bot as our “janitor” (messaging only).

  1. Create the Bot: Build a simple Enhanced Bot.
  2. The “Welcome” Dialogue: Send a message that acknowledges the delay: “We’re sorry, it looks like our team is currently unavailable. Please try again later or visit our Help Center.”.
  3. The “End Chat” Action: Immediately following the message, add an End Chat action.
  4. The Hand-off: In your Flow’s Scheduled Path, route the “expired” session to this Bot.

The Bot triggers, explains the situation to the customer, and closes the session cleanly.


Technical Gotchas to Keep in Mind

  • The 5-Minute Window: Scheduled paths run every minute. This means the scheduled path won’t execute exactly down to the second of expiry, but up to 59 seconds after it expires. Furthermore, depending on org activity, it can take up to 5 minutes for the automation to actually fire if you have a lot of these. 
  • Different Queues: If you route to a Bot, ensure the Fallback Queue in the Route Work action is different from the queue the work is currently in, or it won’t route at all.
  • Work fails to re-route: In some circumstances, the re-routing can fail, I recommend a second scheduled path to catch these stragglers (Product is working on a fix here to handle these scenarios).
  • Omni Supervisor Lag: We’ve seen cases where the work stays in the “Queues Backlog” view for a moment after the automation fires. A simple refresh usually clears the “ghost” session.

By setting up these safety nets, you ensure that if the worst happens and your queue is left unattended, your customers aren’t left in the dark and your backlogs stay clean.

Acceptance Due Date: The Omni-Channel SLA Sensation You Need

One of the oldest challenges in Service Cloud is ensuring your urgent work gets handled first—not just the old work, but the work that is truly closest to violating its Service Level Agreement (SLA).

You might have a customer who paid for a 2-hour response time, and another who is on a standard 8-hour agreement. Prioritizing items that enter the queue at the same time is relatively straightforward today, just using priorities. The real challenge arises over time, when your longer SLAs are approaching expiry, and new shorter ones are still entering your backlog.

Historically, we’ve relied on clever, but ultimately limited & complex uses of Primary and Secondary Priority to try to solve for this – or a lot of manual assignment by supervisors. Now, with the Winter ’26 release, we’re proving a dedicated tool for this: Acceptance Due Date

This feature is a game-changer for any service center dealing with mixed-length SLAs or simply needing to prioritize work by true urgency.


The “Why”: Solving the Mixed-SLA Problem

The issue with traditional Primary Priority is that it’s a static integer (1, 2, 3, etc.).

If you have work coming from different SLA buckets (High Priority = 2 hours; Medium Priority = 8 hours), you might set the 2-hour SLA to Primary Priority 2 and the 8-hour SLA to Primary Priority 5.

This works at the start. But what happens 7 hours later? The work item with P=5 is now an hour from expiry, while the new P=2 item still has two hours to go. The P=5 item is now more urgent, but the system will still prioritize the P=2 item.

The new Acceptance Due Date (ADD), exposed via the Acceptance Due Date field on the Route Work Flow action, solves this by making the time the prioritization factor.


The “How”: Calculating the Acceptance Due Date

Setting this up is straightforward and happens entirely within your Omni-Channel Flow.

Step 1: Calculate the Due Date

When a work item (e.g., Case, Messaging Session) is created, your Flow needs to calculate its acceptance deadline. I recommend using a formula in Flow, of type Date/Time to set the due date/time.

For example you can use these formulas:

  • 5 minute SLA: NOW() + 5 / (24*60)
  • 2-Hour SLA: NOW() + 2 / 24
  • 8-Hour SLA: NOW() + 8 / 24 

Want to use Salesforce SLAs? Check out the section further down this page on integrating with those!

Now, based on your business logic you can select which SLA is the right one for a given work item. Luckily – you are using the worlds #1 CRM, so you should be able to pull information about the person contacting you to work out their service agreements, or spend with you, loyalty status etc. to help you decide which to pick for each inbound work item.

Step 2: Route by the Acceptance Due Date

In your Omni-Channel Flow, when you use the Route Work action, you will now see an Acceptance Due Date field.

Instead of manually setting a date, you pass the dynamic date/time variable you selected in Step 1.

The magic happens when Omni-Channel compares all items in the queue: it will automatically prioritize the work item whose Acceptance Due Date is the earliest (i.e., the item closest to expiration or already expired).


The Technical Gotcha: Unifying Priority for True Urgency

This is the most crucial part to understand and is what separates a successful implementation from a confusing one.

The routing engine uses the following prioritization order:

  1. Primary Priority (Lowest number wins, e.g., 1 is highest priority in Salesforce routing)
  2. Secondary Priority (Lowest number wins – same as Primary) – Optional
  3. Target Acceptance Date (Earliest date wins) – Optional
  4. Date Enters Queue (Oldest work wins)

If you want Acceptance Due Date to be your primary mechanism for determining urgency, you must ensure all work items being compared have the same Primary & Secondary Priority.

Action: Set the Primary Priority field to a single, consistent value for all work items that you want routed by SLA – this comes from your Routing Configuration. You’ll also want to ensure your Secondary Routing Priority isn’t being set – you can find this in the Service Channel settings in Setup for the given channel.

Best Practice: The P=5 Rule (Leaving Room for Firefighters)

For a stable, reliable setup, don’t set your SLA-routed work items to Primary Priority 1.

Suggestion: Start your default SLA-driven Primary Priority value at P=5.

This gives you P=1, P=2, P=3, and P=4 to use for true human-driven overrides. If a supervisor needs to put a true “fire drill” ahead of the Acceptance due date logic, they can manually update that work item’s Primary Priority to 1 or 2, ensuring it bypasses the SLA queue and gets routed first, while the rest of your system continues to function perfectly using the Acceptance Due Date.

By combining the dynamic calculation of Acceptance Due Date with a unified, moderate Primary Priority value, you finally have an Omni-Channel routing system that prioritizes work based on true, calculated SLA urgency.


See it in action!

Want to see it in action? Check out this video from our friend Magulan Duraipandian over at Infallibilbe Techie walk you through how this works:


Bonus! Integrate with Salesforce SLAs

You can integrate this process with Salesforce SLAs – formally known as Entitlements & Milestones. This is only supported for the Case and Work Order objects right now. You can reuse your existing Milestone Types, or create a new specific one for the Acceptance Due Date – it’s up to you. Creating a new one will mean you can re-use your reporting on Milestones to track it, but you can also report on it from the AgentWork record, as detailed in our help docs. To get the target date, follow these steps

  1. Load the ‘Milestone’ object your are using by ‘Name’
  2. Load the ‘Case Milestone’ record with the ‘recordId’ of the Case we’re routing and the ‘Milestone Type ID’ you loaded in Step 1
  3. In your ‘Route Work’ action, use the ‘TargetDate’ field on the ‘Case Milestone’ you loaded in step 2

Done! Just like that, the SLAs you’ve already been using can now drive Routing in Omni-Channel. Magic!


What about reporting if you hitting the target?

One of the most important measures in many contact centers is whether you answered calls within a certain time period, or if you are hitting you SLAs – these can often come with financial penalties if you don’t. While we have SLA Management within Service Cloud that may be more suited to reporting on some of those targets, you can report whether you hit your target acceptance date or not.

The key fields live on the ‘AgentWork’ record, named: ‘Accept Date’ and ‘Target Accept Date Time’. You can add these to a any Report Type that includes the ‘AgentWork’ object. Once you’ve added them, you’ll then want to include them into a report to compare the values.

You then have a choice as to that you want to do in terms of a Row-Level Formula – either create one that outputs Text or a Number. To calculate the Text one, you can use a formula like this:

IF(ISNULL(AgentWork.TargetAcceptDateTime), NULL, IF(AgentWork.AcceptDateTime > AgentWork.TargetAcceptDateTime, "Target Not Met", "Met Target"))
(substitute 1s and 0s for a number type)
(I suggest filtering out records without a 'TargetAcceptDateTime' value and that aren't closed yet)

At that point you can then choose what to do with this – I’ve created reports where I group by this Row-Level. Then you can use a ‘Summary-Level Formula’ to calculate a percentage of the records in your report that are in each group – giving you the percentage of records that hit the target date.

Report on Abandoned Conversations with Salesforce Channels

One important piece of information for Service centers is related to abandoned conversations – that is how many people that really wanted to talk to you, gave up while they were waiting for a rep to talk to them. This primarily applies to real-time communication channels like web chat and voice calls, where a customer may abandon the interaction while waiting in queue before being connected to a service rep. This could also include after being handed off from a Bot or AI Agent conversation, to connect with a human.

Why is Abandoned Reporting Important?

This is a hugely important metric, but you probably know that already, that’s why you’re here. But just as a reminder, here are a few key reasons why:

  • Understanding Customer Frustration: High abandonment rates can indicate long wait times or other issues causing customer frustration.
  • Optimizing Resource Allocation: Tracking abandonments helps determine staffing levels and potential bottlenecks in customer service.
  • Improving Customer Experience: Identifying reasons for abandonments leads to process improvements and better overall customer experience.

Great – we know it’s a gap, we know it’s important, how do we solve it?

How to report on Abandoned

First – we are planning an out of the box solution for this (on Enhanced Omni only) where we will write a new ‘AgentWork’ record, with the ‘Status’ of ‘Abandoned’ – but ahead of that change coming in the Winter ‘26 release (October 2025), here are some ways to report on it.

I will go through a simple option, followed by a more complex one the captures more scenarios, but is a lot more difficult to implement and track. The scope of this is to solve it for Enhanced Chat (formally known as Messaging for In-app and Web) and Voice calls.

Step 1 – Add new fields to the objects

Both options involve adding these 3 fields to both the ‘MessagingSession’ and ‘VoiceCall’ records:

  1. Num Times queued (Number) – default 0
  2. Num Agent accepts (Number) – default 0
  3. Was abandoned (Formula (Checkbox)). This formula compares the two values above, plus that the conversation was ended by the end customer/visitor, as opposed to an agent or the application:
    1. For MessagingSession:
      ISPICKVAL(EndedByType, "End User") && ( Num_Times_queued__c > Num_agent_accepts__c)
    2. For VoiceCall:
      DisconnectReason = "CUSTOMER_DISCONNECT" && ( Num_Times_queued__c > Num_Agent_accepts__c)

Step 2 – Update on each accept

Now we need to increment the two counters in the appropriate places – for the number of accepts that is relatively straightforward:

  1. Create a Record Triggered Flow on ‘AgentWork’, and configure the start conditions in this way:
    1. Trigger is ‘A record is created or updated’
    2. Trigger condition for ‘Status’ equals ‘Opened’ and ‘Bot ID’ is Null equals ‘true’ (ignore any time the bot accepts work)
    3. Ensure you select ‘Only when a record is updated to meet the condition requirements’
  2. Add a decision node to check the type of work that was accepted. That decision node should check the ‘Starts With’ of the ‘WorkItemId’ matches the appropriate prefix for the objects we care about:
    1. MessagingSession: 0Mw
    2. VoiceCall: 0LQ
  3. Within each outcome, you’ll add 3 elements
    1. Get Records – load the appropriate record
    2. Assignment – ‘Add’ 1 to the ‘Num agent accepts’ field
    3. Update Records – save the updated value

Step 3 – Update on each routing request

Now we get to the trickier part – updating the record to count each time a routing request was made for the record. For efficiency and ensuring that the work gets delivered, we prevent a lot of automation on the ‘Pending Service Routing’ object, as any errors could cause systems to get out of sync, calls dropped or work not actioned as expected. However, that creates some issues when trying to catch a new routing request of a record – so I have 1 simple, and 1 more complex solution for this.

Simple solution

This involves simply updating the record each time you attempt to route it to a human service rep (don’t do this when routing to a bot or Agentforce Agent) – in the most basic case, this is incrementing the counter within the Omni Flow that you route the object in, similar to the screen shot on the right (this one assumes we’ve previously loaded the Voice Call record in the Flow). 

Assuming you know all the places that you are routing Voice Calls and Messaging Sessions, and when you transfer between users you are using an Omni Flow, then this should lead to an accurate count of routing requests, and therefore abandonments.

More complex solution

A more complex solution is to use ‘Change Data Capture’. You can enable this in Setup, and add the ‘Pending Service Routing’ object to the ‘Selected Entities’ – you can only enable 5 entitles without purchasing an add-on for more. This will then allow you access to the ‘PendingServiceRoutingChangeEvent’, which you can add an Apex Trigger to – yep we’re going to need to write Apex for this one, hence the added complexity.

trigger PSR_CDC_Trigger on PendingServiceRoutingChangeEvent (after insert) {
    // Iterate through each event message.
    for (PendingServiceRoutingChangeEvent event : Trigger.New) {
    // Get some event header fields
        EventBus.ChangeEventHeader header = event.ChangeEventHeader;
        List<String> recordIds = event.ChangeEventHeader.getRecordIds();
        System.debug('Received change event for ' + header.entityName + ' for ' + header.recordIds + ' of type ' + header.changeType + ' operation.');
        if (header.changetype == 'CREATE')
        {
            // New PSR record created - check the object type for the work item
            System.debug('event.WorkItemId: ' + event.WorkItemId);            
            // Ensure we aren't routing to a Bot/AI Agent
            if (event.BotId == null) {
            	for (String recordId : recordIds) {
                    if (event.WorkItemId.getSobjectType() == Schema.VoiceCall.SObjectType)
                    {
                        // VoiceCall - load record and increment num times queued.
                        System.debug('PSR for a Voice Call created.');
                        VoiceCall call = [SELECT Id, Num_Times_queued__c from VoiceCall where Id = :event.WorkItemId LIMIT 1];
                        call.Num_Times_queued__c++;
                        update call;
                    }
                    else if (event.WorkItemId.getSobjectType() == Schema.MessagingSession.SObjectType)
                    {
                        // MessagingSession - load record and increment num times queued.
                        System.debug('PSR for a Messaging Session created.');
                        MessagingSession ms = [SELECT Id, Num_Times_queued__c from MessagingSession where Id = :event.WorkItemId LIMIT 1];
                        ms.Num_Times_queued__c++;
                        update ms;
                    }
                }
            }
        }
    }
}

This is an example of the Apex Trigger that would increment the value – you can copy and paste this into the ‘Developer Console’ after going to ‘File’ → ‘New’ → ‘Apex Trigger’. Name it ‘PSR_CDC_Trigger’, and select the ‘PendingServiceRoutingChangeEvent’ object.

That should capture all creations of PSR records, and increment the routing requests as appropriate. 

Step 4 – Create the report

To keep this post a reasonable length, I’m not going to go into details on how to create reports, but it should be pretty straightforward to create a report for each object to report on this, and there is lots of helpful content out there. Follow the usual reporting steps to create a ‘Report Type’, ensuring it has the ‘Was Abandoned’ field included, and then create a report using the report type. You will need to create two separate reports, 1 per object – but I suggest dropping them both onto a single dashboard. You likely also want an abandonment rate – you can use a summary level formula to calculate this in standard reporting for a time period – below is an example of how you might do this, if you grouped by date:

Limitations

There will be a few limitations to this solution, particularly with regards to the Voice channel:

  • The ‘Disconnected Reason’ needs to come from the telephony system. With the ‘AWS Connect’ integration, this can take a while after the call disconnects before it is populated. It may also be populated differently (or not at all) by other telephony providers.
  • To use the Omni Flow solution, you will need to be calling Omni-Flow from your telephony provider.
  • Transfers may need some thought, and you’ll need to decide if you want to count conversations that drop when being transferred between teams or service reps as abandoned or not.
  • Only unauthenticated Messaging Sessions can be ended/abandoned, so may not totally cover all abandoned scenarios related to web chats.
  • There will be some edge cases, error scenarios etc. that may not be captured by this setup

Conclusion

While out of the box Salesforce does not track abandoned yet, this custom solution can fill the gap. By implementing appropriate methods and metrics, organizations can effectively measure and analyze abandonments in both Messaging and Voice channels, leading to improved customer service and operational efficiency. Let me know how you get on, and if there are any issues or remaining gaps this misses.

One Engine to Route Them All:Unified Voice Arrives in Omni-Channel!

It’s official: Omni-Channel can now route voice calls end-to-end! 🎉

For the first time, Salesforce Omni-Channel is the single routing engine for all supported channels — including voice. That means all customer interactions — from phone calls, chats, emails, leads — are routed through one unified routing engine. Until now, voice routing lived in a separate engine — causing complexity, sync issues, and routing conflicts — especially when blending voice with channels like chat.

With Unified Voice Routing (GA for Amazon Connect), voice is now fully native to Omni-Channel — enabling seamless channel blending through a single routing engine. It also unlocks skills-based and direct-to-agent routing for voice, leveraging Omni-Channel’s CRM-powered, channel-agnostic design to deliver smarter and more consistent customer experiences.


Why This Matters: One Engine to Route It All

Here’s what Unified Voice Routing brings to the table:

Omni-Channel routes voice calls directly, delivering consistent routing across all channels
Simplified setup experience — no more juggling complex configurations across two platforms; all routing rules live in one place
Improved channel blending, especially between voice and chat, for smoother work distribution
Skills-based and direct-to-agent routing support now extended to voice calls
Elimination of race conditions and presence conflicts — one routing engine rules them all
Flexible push timeout configuration, removing the frustrating 20-second push time out for SCV Amazon Connect agents


What a Smarter Voice Routing Experience Looks Like

What makes Unified Voice Routing stand out is how naturally voice now fits into the Omni-Channel experience — using the same routing logic you rely on for other channels — including skills based routing!

Shareable Link: https://salesforce.vidyard.com/watch/bNZrwRjpDe6ABiTSa1jNdY

In this demo:

  • A customer calls about a billing issue
  • IVR inputs are captured and passed from Amazon Connect to Salesforce
  • Omni-Channel Flow determines how the work should be routed
  • The voice call is routed using skills-based logic and placed in the Supervisor skill backlog
  • An agent is matched and offered the call based on their skill proficiency
  • The experience mirrors routing across all other channels — cases, leads, messaging, and chat — and now, voice!

You’ll see a real-world scenario where a customer calls in with a technical support issue, and the system routes the call directly to the most skilled available agent — automatically, seamlessly, and in real time. Omni-Channel Routing is CRM-powered and channel-agnostic — routing decisions are based on rich Salesforce context and applied consistently across every channel. This is voice routing — the Salesforce Omni-Channel way.


Let’s Get Technical: How Unified Voice Routing Works

Here’s how it all comes together under the hood:

  • Amazon Connect handles the IVR and the physical phone call connection.
  • When a call arrives, Amazon notifies Salesforce, passing along the IVR inputs and other call attributes (e.g. number dialled menu selections, customer responses).
  • Salesforce Omni-Channel uses those inputs to make CRM-powered routing decisions using Unified Routing.
  • While Salesforce determines the best agent, Amazon holds the call in a temporary queue.
  • Omni-Channel selects the right agent — based on skills, queue logic, or direct-to-agent routing — and sends which agent is the best person for the call
  • Amazon then connects the caller to the selected agent.

The result: voice, chat, email, and other work items are now routed, prioritised, and distributed through a single intelligent engine.


Who Should Adopt Unified Voice Routing?

Unified Voice Routing is ideal for:

  • Existing Omni-Channel customers already using channels like messaging or email who want to bring voice into the same routing engines
  • Existing Amazon Connect SCV Customers prioritising seamless channel blending and aiming to eliminate routing conflicts and sync issues
  • Customers looking to scale Omni-Channel across sales and service teams, simplifying routing management across multiple channels. One of Omni-Channel value is routing over 25 objects — including leads and custom object — meaning that sales and service users can have consistent routing rules

⚠️ What’s Not Supported (Yet)

  • Queued Callbacks
  • Scheduled Callbacks / Scheduled Work
  • Telephony partners outside of Amazon Connect
    • We are currently working with several partners to enable them to also support Unified Routing. Check with your Bring Your Own Telephony partner whether they will support Unified Routing in the future. Or work with your Account Team to identify the right Bring Your Own Telephony partner for your use-case. For partners looking to implement Unified Routing, have a look at the Bring Your Own Telephony developer guide.


Try It Out and Help Shape What’s Next!

One engine. Every channel. Unified at last.

I hope this article has you as excited to try Unified Voice Routing as the Omni & Voice teams were to help bring it to life. We’d love for you to give it a try — and let us know how it’s working for you! Your feedback is key to shaping what we build next. Share your thoughts and enhancement ideas on the IdeasExchange, tag us on LinkedIn, or drop a comment below. We’re here to help you get the most out of this powerful new capability.

👉 Get started with our help docs
👉 Explore best practices for your routing strategy

Reporting on Service Cloud channels

Reporting on Salesforce Service Cloud can sometimes feel like navigating a labyrinth. While the platform offers immense flexibility, it often leaves users yearning for more guidance. This blog aims to demystify the process, providing you with the insights and tools needed to harness the full power of Salesforce Service Cloud reporting.

Simplifying the Complexity

Historically, we’ve made it challenging for our customers by offering a plethora of reporting options without clear direction, or even making them aware of the options out there. Many customers will start with a single channel and build reports on that single object with some success. However, what happens when you add more channels and want consistent reporting across them all? The flexibility is there in the application, but the guidance on how to do it has been lacking. This blog, and future ones coming, are intended to help bridge that gap, making it easier for you to create meaningful reports and understand the data at your fingertips.

Harnessing the Power of Omni-Channel

One of the most powerful features of Salesforce Service Cloud is Omni-Channel. This tool is not only a powerhouse for work classification and routing, but also allows you to report consistently across all channels using a unified object model.

There are 2 objects that are critical to this consistent reporting:
1. AgentWork Object: This object is your go-to for tracking all the work assigned to agents and their performance. By analyzing the AgentWork object, you can gain insights into how efficiently your agents are handling their tasks, and the volumes you are handling.

This is where you find key performance indicators like average handle time, wait time (speed to answer) and wrap up time (after conversation time). For a work focused view, remember to group by the WorkItemId to find all the work performed for a given case or conversation, or alternatively for a service rep focused view, group by the UserId to find all the important metrics for your team.

For those with more advanced routing configurations, this object joins to the AgentWorkSkill object, where you can find if additional skills were dropped or not, and the relevant performance per skill.

2. UserServicePresence Object: To monitor user presence and capacity throughout each day, the UserServicePresence object is invaluable. It helps you keep track of when agents were available, busy, or offline, providing a clear picture of your team’s capacity and workload over time.

This contains important information related to how busy your team was, and how they are spending their time while logged in. You’ll want to group by user, presence status and date, to identify how long they are in each status each day, as well as analyze their idle time and average capacity, to see where you are potentially over or under staffed.

Recent Reporting Enhancements

We’ve recently enhanced our reporting capabilities to make it even easier to join Omni-Channel data with channel-specific data in Custom Report Types. For example, you can now join the AgentWork object with Case, MessagingSession, and VoiceCall objects (amongst others). This capability allows for a more comprehensive view of your service operations, enabling you to make data-driven decisions with greater confidence, and create consistent reports across channels.

This allows more in-depth analysis per channel, for instance determining which Case Types have a higher average handle time than others, or which customers you are spending the most time supporting. You will need to create separate reports for each object you want to join, but you will then be able to put them all on the same dashboard with common filters, allowing you to identify trends around volume or performance.

Existing Reporting Gaps

While we’ve made some strides in improving our reporting capabilities, we acknowledge that there are still some gaps that you can’t report accurately on (or at all) without customization. Two of the most common gaps we hear about are related to abandoned and transferred work – stay tuned for future blogs in this series, where we’ll provide tips and tricks to help you navigate these gaps until we can address them natively in the product.

In the Summer ’25 release we are going to be adding some reports and dashboards that you can install from the Setup screens, with the intention of giving you some basic reporting right away, with the flexibility to customize and enhance to your hearts desire – we’d love you feedback on those once they are available.

Future Topics

This blog is largely an introduction and some high level guidance, with some extra posts planned in the coming weeks, including more in depth guides on building these reports, as well as work arounds to address the known gaps. I’ll also call attention to these two new help docs related to reporting on Messaging:

Future blog topics include:

  • Step by step instructions on how to report on the AgentWork object
    • Extra: How to report on Skills
  • Step by step instructions on how to report on the UserServicePresence object
    • Extra: Utilization & Concurrency
  • How to report on Transfer
  • How to report on Abandoned

Let me know if there is something else I’m missing that you’re wanting to learn more about – these aren’t in a particular order, so those that are most desired I can start with.

Announcing Live AI Agent Monitoring for Supervisors

Revolutionizing Service Oversight with the Live AI Agents View

Autonomous AI agents are revolutionizing the service industry, transforming how businesses engage with their customers. But for many service leaders, one critical question remains: What are the AI Agents actually saying to my customers? With the new AI Agents tab in the Service Cloud Supervisor experience, supervisors gain unprecedented visibility into and control of the real-time conversations that Agentforce agents are having with customers.

Supervisors have long played a critical role in monitoring and supporting live, human-handled interactions. But as AI-driven service agents transform the industry, they now need the same level of oversight for AI-handled conversations. Until now, conversations handled by AI agents requiring assistance bypassed supervisors entirely, being routed directly to human agents. This gap in visibility and control left little room for nuanced judgment or proactive intervention. The new ability to live monitor AI agents changes the game, empowering supervisors to stay informed and engaged when it matters most.

Introducing Live AI Agent Monitoring for Supervisors

The new AI Agents Tab in Omni Supervisor experience provides supervisors with real-time visibility into ongoing conversations managed by AI agents. With this feature, supervisors can monitor conversations, identify which ones need human intervention, and seamlessly transfer them to service reps if required.

  • (A) Session Overview: Supervisors can view a live list of all active enhanced messaging conversations in the AI Agents Tab. Support for more channels to come in the future – stay tuned!
  • (B) Live Transcript Monitoring: With the Monitor button, supervisors can open monitoring windows, showing live transcripts of messages being exchanged between the agents and the customer.
  • (C) Swift Transfers: If human intervention is needed, supervisors can click the Transfer to Rep button. This action will remove the AI agent from the conversation, thus removing the conversation from the live list view. It also triggers the outbound omni-channel flow that the admin selected during AI Agent setup, routing the conversation to the specified target. 
  • (D) Customizable Flagging: Admins can add the new Raise Flag for Supervisor Agent Action to their AI agent’s topics. In each topic, admins can add natural language instructions for what criteria should trigger the raised flag such as requests for refunds or frustrated language. The possibilities here are endless. We will dive into this a bit more.

Real-Life Scenarios with AI Agents Monitoring

Preparing for a Surge in Customer Inquiries

During a busy afternoon, a travel company supervisor may notice several flagged conversations related to a flight cancellation. By viewing these AI agent-managed chats in the AI Agents tab, the supervisor identifies the growing trend and realizes service reps will soon need to address similar concerns. The supervisor prepares their team with updated information about rebooking policies and compensation options. When the influx of inquiries hits, the team is ready to deliver fast, consistent answers, minimizing customer frustration during a stressful situation

Identifying and Assessing Customer Frustration

Imagine your admin configured the Raise Flag for Supervisor Agent Action to appear when a customer’s language suggests they are upset or frustrated. As a supervisor, you can now review flagged conversations and determine if the customer’s annoyance stems from the problem itself (which the AI agent is handling effectively) or dissatisfaction with the AI agent’s performance. For example, a customer may be frustrated about not having any checked baggage included in their fare. The AI agent can continue to help by processing their payment to add baggage, without human support needed. This allows supervisors to protect service reps’ precious time, escalating work only when necessary.

Retaining Customers in Competitive Situations

Thanks to the customized Raise Flag for Supervisor Agent Action instructions, a supervisor sees a flagged conversation with a customer who mentioned a competitor’s name. After looking into the live transcript, the supervisor notices the customer’s interest in switching services. Recognizing the importance of this interaction, the supervisor can immediately transfer the chat to a service rep trained in competitive retention strategies. The rep addressed the customer’s specific inquiries and offered a tailored incentive. Thanks to the supervisor’s timely intervention, the company retains a valuable client.

Providing White-Glove Service for High-Value Accounts

When messaging with an AI agent to get support with an order issue, a client may mention their premium account status. With yet another simple Agentforce action customization, a supervisor can see a flag for the conversation involving the high-value client. The supervisor can now monitor the conversation closely, ensuring the AI agent provides swift support with the issue. Ready to step in at any sign of dissatisfaction, the supervisor ensures the interaction is seamless, reaffirming the company’s commitment to top-tier service for premium clients.

Get Started with A Few Clicks (Or None!) 

The AI Agents Tab is available in the Spring ‘25 release to all Service Cloud customers with AI agents. Here’s how to get started:

  1. Ensure that you are using an enhanced Omni-Channel. If you are not, what are you waiting for?! Learn more about its benefits here and start using Enhanced with one button click!
  2. Confirm that your organization has at least one active Agentforce Service Agent. To check, navigate to the Agents page in Setup and confirm you have agents of type Digital Channel. If no such agents are present, follow the steps outlined in this guide to set them up.
  3. If you’re using Supervisor Configurations, simply add the AI Agents Tab to the visible tabs in your desired Supervisor Configuration(s). 
  4. If you choose to use the Raise Flag for Supervisor Agentforce action, add this action to your desired AI agent(s) and its topic(s), specifying trigger criteria in the topic instructions. For detailed instructions, refer to this guide.

Resources You Might Find Helpful

Ready to Enhance Your Supervision?

We hope you are excited about the power of real-time AI Agent monitoring, achieving proactive oversight, and the option of seamless human intervention. You are now ready to start delivering unparalleled, AI-powered service experiences!As always, we would love to hear your thoughts, feedback, and ideas via comments on this post, IdeasExchange, or LinkedIn.

Take Omni-Channel on the Go!

I’m thrilled to share some exciting news with you all! After a lot of hard work and determination, we’ve finally introduced a feature that has been on my mind since early in my time at Salesforce: the ability to message with customers directly from a mobile device. This has been a challenging problem to solve, but one we’ve managed to solve in a generic cross channel way – I can’t wait to dive into the details and show you how this can enhance your customer interactions on the go.

So what is Omni for Mobile?

Simply – this is the ability to login to Omni-Channel and receive work on your iOS or Android device within the Salesforce Mobile app.. There isn’t a whole lot more to it than that, and that is very deliberate – it’s the Omni-Channel experience that you already know, now available on a mobile device.

This includes push notifications to your mobile when new work is delivered, or updates to that work occur – such as replies to your emails or messages being sent by customers.

At launch, it includes support for all channels supported on Enhanced Omni-Channel, with the exception of Service Cloud Voice. That means that users can now send & receive text message with their customers in a secure, trusted & compliant way from their mobile device – super powerful!

Check out this demo to see it in action:

What does this unlock?

This new feature opens up a huge number of new use-cases for Omni-Channel & all the channels we offer (outside of voice, of course). The most exciting part of this feature is that it opens up totally new use cases that we couldn’t help with before, particularly for users in more Sales-focused roles who want to provide white-glove service. Some examples we’ve been hearing include:

  • Financial advisors: Keeping their customers up to date on market trends and answering them quickly & securely from anywhere.
  • Retail: Enhancing customer recommendations, interactions and support on the go.
  • Hospitality: Ensuring their high value or priority guests have all they need.
  • Real estate agents: Keep in contact their customers while showing houses or apartments.

This is going to be particularly relevant for highly regulated industries, as having all customer correspondence logged may be a requirement. Similarly, industries with a high turnover will want to be able to reassign numbers easily and allow new employees to see past correspondence, rather than losing it all when employees leave with their phone.

In addition to these Sales use cases, there are a few in our traditional service area that this enables:

  • Supervisor approvals or escalations: A persona that is commonly away from their computer but may need to be informed about something to action urgently.
  • Field Service technicians: Enabling them to contact clients they are visiting securely via the Salesforce app.
  • Overtime or on-call: Allow users to step away from their computer and still get important work done.
  • Ad-hoc service tasks: Users that get a few tasks here and there throughout the day that need to be completed.

I’m sure you can think of so many more!

Great – what does it cost?

Good news here! For most of these use cases, it is included – this feature only requires that the user that is receiving work on the mobile device has a Digital Engagement license, which if they are handling SMS or WhatsApp conversations already today, then they will have this license already.

Amazing! How do I set it up?

The other great thing about this solution, is that we’ve made it super simple to setup. Once you have setup all of your Omni routing rules, it is very simple to enable that work to be delivered to mobile workers. There are a couple of pre-requisites

  1. The Org is using Enhanced Omni-Channel
  2. The user has a Digital Engagement license
  3. The channel you want to use on the mobile is set to use ‘Status-based Capacity’

Once you have those pre-requisites configured, there are just a couple of simple steps left – check out our help docs for the setup steps.

The last consideration is updating the mobile page layouts for the objects you are planning to route on the mobile – in particular check the Messaging Session object. Ensure you have all the required components and actions available for your mobile users, so they can take action once the work is assigned to them.

Give it a go!

I hope this article has got you as excited to try it out as I am to have delivered it to you! Please try it out and let us know how you get on and what we should be prioritizing next to enhance the experience by logging items on the IdeasExchange, LinkedIn or comments on this page. We’d love to help you be successful with this offering.

Check out our other Winter ’25 innovations in this blog too!

Omni-Channel Winter 25’ Highlights! 🚀


The wait is over – Winter 25’ is here! The Omni-Channel team have been working hard to deliver some incredible updates, all centered around enhancing the agent experience and boosting platform scalability. These features were developed by our engineering teams across Dublin, Paris, and the US who work hard to create awesome features that directly benefit thousands of customers like you. Without further ado, let’s dive into what’s new!

🌟 Support Customers on the Go with Omni-Channel for Mobile (Generally Available)

We are very excited to announce Omni-Channel for Mobile is now GA! This was a highly demanded ideas exchange with over 4,530 points and we are so excited for you to try it out in your orgs today. With Omni-Channel for Mobile, empower your mobile sales and service agents to be routed work via the Salesforce Mobile. Agents can set their status and handle work requests from all enhanced channels, excluding Voice. This is exciting as agents can now receive and respond to customer inquiries and messaging conversations whether they are at the desk or on the go – improving your agents experience. This is powerful as all conversations with customers, whether on desktop or mobile, remain in the Salesforce platform — boosting compliance across your organisation!

🌟 Status Based Capacity for Messaging (Generally Available)

Omni-Channel now supports Status Based Capacity for Messaging Session! Status Based Capacity for Messaging aligns to agents having more long running and asynchronous conversations with customers. The value of using Status Based Capacity for Messaging is that it simplifies routing of long running conversations as conversations always return to the session owner, improves visibility for agents with paused work and most excitingly, it allows messaging sessions to be compatible with standard apps and Omni for Mobile!

🌟 Pilot in Winter 25’: Unified Routing

With Unified Routing, Omni-Channel now routes voice calls completely end to end. Currently with Service Cloud Voice, there are two routing engines: Omni-Channel and the Voice engine. This leads to competing routing engines that does not allow for seamless blending of channels. For example, chat and voice today. With Unified Routing, Omni-Channel can route Voice calls natively to make, the Omni we all know and love, the single brain of every channel. Which also means that we unlock Skills Based Routing for Voice calls too! This is in pilot with amazon connect today so please reach out to your Account Executive today to see if you are eligible and sign up today.

🌟 Get Informed with Proactive Monitoring

Signature customers now receive alerts via email if Omni-Channel experiences service degradation. To inform you of longer than expected response times, Salesforce sends an alert if a work item isn’t routed punctually. Reach out to your Customer Success Manager to find out more.


Those our Winter 25 highlights for Omni-Channel! Check out our Release Notes and try out our capabilities today. I also want to take the opportunity to say a big thank you to our amazing engineering teams across Dublin, Paris, and the US for their relentless dedication, creativity, and passion. Their work powers everything we do, and we’re so excited to share these innovations with all of you.

What’s Next?

  • Make the Move to Our Enhanced Omni-Channel Platform: if you haven’t migrated to our enhanced platform yet, now’s the perfect time. Enhanced Omni Channel is built on hyperforce, designed for scalability and where all of our latest capabilities such as Omni-Channel for Mobile, Unified Routing etc are being built on!
  • Join the Conversation, Help Shape What’s Next! We’re proud of what we’ve built, but we’re always thinking ahead. What features do you want to see next? What’s working for you, and where can we improve? Check out the roadmap exchange today to provide your feedback today.
  • Check out our Omni-Channel Best Practices session at Dreamforce streaming on Salesforce+. We solved four common challenges / use cases to improve agent and supervisor productivity.

New Agent Experience with the Omni-Channel Sidebar!

Update 6/18: Known issues should be resolved – please try it out!

I’m so excited to bring this whole new agent experience to our customers in the Spring ’24 release with the new Omni-Channel sidebar! This has been several releases in the making, and will be a total game-changer in efficiency and usability for Omni-Channel users, and will entice even more of you to move to Enhanced Omni-Channel!

The Omni-Channel sidebar is the Omni-Channel agent experience that you know and love, but now it is much more accessible and readily available on the left hand side of the screen – expanding and collapsing as required. What’s more – this is also available in Salesforce Apps using the ‘Standard Navigation’ style, welcoming a whole new family of users to Omni-Channel. Hi there!

Why a new experience?

The goal of the Omni-Channel component is to be the place where users manage all of the work they need to complete. The original experience in the utility bar achieves this well for work items with a short life-cycle, particularly when using the tab-based capacity. However, where you have a large number of work items, especially if they are long running, it is difficult to manage all of your work out of the utility bar experience. With status-based capacity and the addition of ‘Paused’ work items in the Winter ’24 release, this has grown the number of items that could be in the Inbox view as well, so a new experience was required to make the most of these recent enhancements, and to support our future vision of the Agent Experience for work.

What’s included in the Sidebar experience?

This first version of the sidebar comes with the ability to expand and collapse the sidebar on the left hand size for all App types. While in collapsed mode, a notification of both new work, and updates to work (e.g. work resuming after being paused) will be shown, with the ability to accept or decline work from the collapsed state (as shown in the gif above).

When expanded, the Sidebar will operate exactly the same as when the component is rendered in the Utility bar – expect all the same Omni-Channel notifications, sounds, and abilities like accepting & declining work, and of course changing your Omni-Channel status – just with more screen real-estate.

That’s great! How do I turn it on?

Turning it on is simple. First you will have to have enabled Enhanced Omni-Channel – you can find more about that here. Once you have done that, go to App Manager and edit the App that you want to add the Sidebar to. From there, select ‘App’ options, and there you will see a new checkbox labelled “Use Omni-Channel sidebar”. Check that box, save, and the Sidebar will show up in your app! Easy! Note that once the Sidebar is enabled, the Utility bar component will be disabled – so you can remove it while you are here by going to ‘Utility Items’ and removing it.

Check out the video below to see the Sidebar in action and be walked through the steps described above to turn it on.

What’s next for the Sidebar?

This is just the beginning! We’re going to continue to enhance the agent experience and add more features to the Sidebar, further improving agent productivity. Some of the items coming in the short to medium term include:

  • Bulk actions that can be executed across 1-many work items in the Inbox
  • Messaging enhancements to see the most recent message and typing indicators
  • Search, Filter and Sort the Inbox
  • Add new Custom Tabs to the Inbox – custom pages in the Inbox similar to Supervisor Custom Tabs
  • More actions from the collapsed state like update status

Many of these may also be supported in the Utility bar experience, however the limited screen real estate may mean the experience is less than desirable – each new feature we’ll consider on a case by case basis on where it should and shouldn’t be supported.

Thanks for reading this blog! I’d love to hear what you think, are you excited about the new experience? What else should we be prioritizing?

Custom Tabs for Omni Supervisor

New in Spring ’24 is the ability to customize the tabs that are shown on the Omni Supervisor screen. This comes in two different flavors:

  1. Add, remove and reorder the existing Tabs, and
  2. Create your own new Lightning Page and add it to the screen as a Tab

These two new capabilities bring a lot of power to enhance the usability and usefulness of the Omni Supervisor screen, allowing it to be a true ‘Home’ for more users. We’re excited to see what use cases our customers and partners come up with to make the most of these new powers, but here are some example use cases we’ve been asked for from customers:

  • Add historical reporting alongside the live data (e.g. Salesforce Dashboards, CRM Analytics or Tableau Dashboards, or even a 3rd party reporting tools visualizations),
  • Display live monitoring from another application such as a telephony provider or workforce management tool (bring your own supervisor),
  • Restrict the tabs available to give more users access to Omni Supervisor, without giving them access to see everything a supervisor does (i.e. a “read-only” view of Omni Supervisor).

I’m sure you are already brainstorming many more ways to bring extra information and efficiency to your Salesforce users! Read on for details on how to make the most of this new feature, or jump to the end to check out a video of it in action.

To access this great new feature, you will need to be on Enhanced Omni-Channelfind out more about that here.

How to configure the Tabs

The configuration of which tabs show up is done in the same place as all our other Supervisor enhancements – in the ‘Supervisor Configuration’ admin screen. At the bottom of this screen is a new section, titled ‘Define Visible Tabs‘ – this section allows you to set which tabs are shown to the Supervisors with this configuration and in what order

Define Visible Tabs administration

How do you add your own tabs to the list of Tabs available though? Let’s find out in the next section!

How to create a new Custom Tab

To create a new Tab, we need to create a new Lightning Page of type ‘Omni Supervisor Page‘. This can be done by going to ‘Lightning App Builder‘ in Setup, and clicking the ‘New‘ button. In the popup you will see the ‘Omni Supervisor Page‘ option – select that and complete the rest of the fields until you are taken to App Builder. Note that the name you give the page will show up in Omni Supervisor as the tab heading, so give it a sensible but succinct name (you can edit in App Builder later too).

Once created you will be taken to Lightning App Builder – this page will be familiar for all admins and allows you to drag and drop all the components you’d expect, such as Dashboards, List Views and Visualforce pages, as well as any custom components in your org that are configured to be available for this page type (more on this later). When you’re done adding components to the page, Save and Activate the page – it’ll then be available in the Supervisor Configuration admin screen we talked about above.

For now there is only 1 template available – ‘One Region’ – please let us know what other templates you’d love to see. You can use a Visualforce page to build more sophisticated layouts in the mean time.

Create Custom Components for Omni Supervisor Pages

Can’t find your custom component to add your new Omni Supervisor Page? Or only want your component to be available for these types of pages and no where else? You’re in the right place – for many Aura components, they will just show up, but for Lightning Web Components some updates will needs to be made.

Aura Components

For Aura components, there are two interfaces that you can implement which will make it available for these page types:

flexipage:availableForAllPageTypes (makes available for all page types)
omni:availableForOmniSupervisorPage (available for Omni Supervisor Page type only

There is no need to implement both, as ‘omni:availableForOmniSupervisorPage’ is implicit within ‘flexipage:availableForAllPageTypes’.

Lightning Web Components

For Lightning Web Components you will need to add a new target to the .js-meta.xml for your component for it to an option to be added to the page. Add this within your <targets> tag:

<target>lightning__OmniSupervisorPage</target>

Once updated, it should become available in App Builder*

*May not be initially available in pre-release orgs or sandboxes when upgraded to Spring ‘24 (bug fix coming). Wrap in an Aura component for now.

See it in action

See how to configure Custom Tabs for Omni Supervisor in this video!

Please share this page and let us know how you’ll make the most of this new feature!