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.

Grow Smart with Agentforce: Treat Your AI Like a Teammate—Not Just a Tool

Part 4 of our Agentforce Series

In Part 1, we helped you launch fast with FAQs.
In Part 2, we showed you how to scale smart using escalations.
In Part 3, we boosted accuracy with advanced grounding.

Now it’s time for the next evolution: making your AI agent a true member of your service team.
Because when you treat your AI like a teammate—not just another automation tool—you unlock collaboration, trust, and efficiency at scale.

Whether you’re just starting to see AI’s potential or you’re ready to take it to the next level, this post will give you the mindset and steps to get there.

In this post, you’ll learn how to:

🤝 Foster a collaborative relationship between agents and AI
🧩 Define roles and responsibilities for your human + AI team
📈 Measure and improve the AI’s performance like any team member

Why Thinking “Teammate” Changes the Game

When AI is seen only as a tool, it risks becoming a black box—used occasionally, understood rarely, and trusted even less.
When AI becomes a teammate, it:

  • Builds trust by showing work and reasoning
  • Reduces burnout by taking repetitive tasks off human plates
  • Levels up your team’s expertise with consistent, context-rich answers
  • Drives continuous improvement through feedback and coaching loops

Just like a new hire, your AI needs:

  • Clear expectations
  • Ongoing training
  • Feedback on performance
  • Access to the same resources your human agents use

What Does AI-as-a-Teammate Look Like in Practice?

  1. Give Your AI a Role and Scope
    • Define what your AI owns vs. what humans own.
    • Example: AI drafts responses for Tier 1 inquiries, humans approve or escalate.
  2. Coach and Retrain Regularly
    • Use post-interaction reviews to flag where the AI nailed it—or missed the mark.
    • Feed that back into your grounding sources and escalation rules.
  3. Promote Transparency
    • Let your AI show its sources or reasoning in drafts so agents can quickly validate accuracy.
  4. Encourage Two-Way Learning
    • Just like a teammate, your AI learns from human input.
    • Leverage “accept” or “edit” actions as signals for future improvement.
  5. Track Metrics That Matter
    • Measure CSAT, first-response accuracy, and escalation rates for AI-handled interactions.
    • Review these in the same cadence you’d review team performance.

The AI-Teammate Mindset Shift

When you start thinking of AI as part of your service org, you stop asking “What can AI replace?” and start asking:

“How can AI help my team do their best work?”

This shift:
✅ Strengthens agent trust in AI-generated responses
✅ Increases adoption and consistency in use
✅ Improves customer outcomes without overburdening agents

Continuous Collaboration = Continuous Growth

The best teams grow together. That means:
📌 Including AI performance in team retros
🧠 Giving your AI “training data” like you’d give a teammate onboarding materials
📥 Updating its knowledge and role as your business evolves
🧪 Experimenting with new use cases to expand impact

It’s a loop: better AI collaboration → happier agents → better customer experiences → stronger business results.

What’s Next: Scaling AI Across Channels

Now that your AI is an active, trusted teammate, it’s time to see where else it can shine.
In our next post, we’ll explore:
⚡ Orchestrating consistent customer experiences across touchpoints

✉️ Struggling to make your customer service emails hit the mark?

Discover why they’re falling short—and how AI can turn them into powerful customer moments.

👉 Read the full guide here

How is AI changing the way you handle customer service emails—and where do you see the biggest opportunity to improve?

Share your perspective below. 👇

Grow Smart with Agentforce: Boost Accuracy with Advanced Grounding

Part 3 of Our Agentforce Series

In Part 1, we helped you launch fast with FAQs.

In Part 2, we showed you how to scale smart using escalations.

Now we’re diving into the next phase: getting your AI agent to respond with confidence—and precision—by improving how it finds and uses information.

Whether you’re just getting up and running or refining your AI agent’s performance, this post is for you.

In this post, you’ll learn how to:
🔗 Connect your AI agent to deeper, structured sources of truth
📚 Ground responses in accurate, real-time data
⚙️ Set up scalable systems that grow with your content

Why Accuracy Matters—Especially Now

As your AI agent takes on more complex questions, expectations go up.

Customers don’t just want answers.
They want the right answers—immediately and consistently.

That’s where grounding comes in.

A confident, useful response depends on trusted content. And not just generic help articles or static FAQs. You need to connect to the live, structured sources your teams already use:

  • Knowledge bases
  • Internal help docs
  • Product catalogs
  • Policy databases
  • Field-level case data

What Is Advanced Grounding?

Think of grounding as the process of anchoring your AI agent to facts.

Basic grounding starts with FAQs or email templates.
Advanced grounding goes further—linking your agent to dynamic, structured content across your org.

Done well, advanced grounding helps your AI:
✅ Find the most up-to-date answer
✅ Reduce hallucinations or vague responses
✅ Boost agent and customer trust
✅ Cut down on unnecessary escalations

How to Set It Up: From Content Chaos to Connected Confidence

1. Take Inventory of What’s Working Today
Your teams are already using reliable content sources—bring those into the mix:

  • Salesforce Knowledge Articles
  • Salesforce record data (like case, account, or entitlement fields)
  • Uploaded internal documentation and structured files
  • Help center content
  • Public site information
  • High-performing responses like macros, flows, and templates

2. Prioritize Based on Gaps and Volume
Use your escalation review loop to find where your agent struggles.
Is it with pricing? Returns? Coverage details?
Identify high-volume topics where grounding would have the biggest impact.

3. Make It Structured and Searchable
AI agents love structure. Use tags, metadata, and organized formats (like lists, tables, or field references) to make it easier for the model to retrieve and reference relevant content.

4. Build Your Context Variables
Agentforce lets you pass structured context into your email responses—like CaseId and ContactId.
This helps your agent tailor answers more accurately by grounding in the right version of content.

Continuous Grounding = Continuous Growth

Your AI agent isn’t static—and your content shouldn’t be either.

Make grounding part of your sprint cycle:
📌 Review new escalations
🧠 Identify what content was missing
📥 Add or update structured sources
🧪 Re-test and measure impact

It’s a flywheel: better grounding → better answers → fewer escalations → more scale.

What’s Next: AI as a Channel

Now that your AI agent is accurate, responsive, and scalable—it’s time to go bigger.

In our next post, we’ll explore:
💬 What it means to treat your AI like a teammate, not just a tool

🚀 Ready to see what’s new in Agentforce?

Check out the Summer ’25 Release Readiness Highlights for Service Cloud to get a look at the latest updates.

👉 Watch here

How are you grounding your AI agent today—and where are you seeing the biggest wins or challenges?
Let’s learn from each other.👇

Grow Smart with Agentforce: Turn Escalations into Your Enablement Engine

Part 2 of our Agentforce Series
In Part 1, we covered how to get your AI agent live fast with FAQs. Now, we’re moving beyond launch.

In this post, you’ll learn how to:
🔍 Analyze escalations to uncover what your agent should learn next
🧠 Use real case data to expand your AI’s knowledge
🔁 Set up a repeatable process to improve performance every sprint

If you’ve gone live—this is your roadmap for scaling thoughtfully (and ROI-positive).

The Opportunity: Your AI Agent Is Talking—Are You Listening?

You launched with FAQs. You went live fast. You’re seeing value.

But now your AI agent is hitting edge cases. It’s handing off emails it can’t resolve.

That’s not a sign to stop.
It’s your next roadmap.

Escalations aren’t failures. They’re feedback. And they’re your biggest unlock for scaling your AI agent beyond the basics.

Why Escalations? Because They Show You What’s Next

Every time your AI agent hands off a message, it’s telling you something:

  • “I don’t understand this request.”
  • “This topic isn’t in my training set.”
  • “I need better grounding data to respond confidently.”

These patterns are gold.

The best teams don’t ignore escalations—they analyze them.
They turn confusion into clarity, and handoffs into high-impact training data.

Train Smarter: Use Real Cases to Build Real Capability

If FAQs are your training wheels, escalations are your upgrade path.

Here’s how to use them to expand agent coverage:

  1. Find the themes. Are cases escalating around order changes, subscription adjustments, or loyalty programs? Tag and group them.
  2. Source your content. Pull from agent macros, email templates, flows, and internal KBs already in use.
  3. Feed your AI what works. Use real examples from high-performing agents who’ve answered these questions well.

You’re not building from scratch—you’re building from success.

Build the Feedback Loop: Escalation → Enablement → Impact

With every iteration, your agent gets better. And so does your process.

Set a rhythm:

  • Review escalations weekly or every sprint
  • Prioritize high-volume or repeatable intents
  • Add grounding data and test again
  • Measure agent performance and customer outcomes

This isn’t one big launch.
It’s a flywheel of continuous improvement.

Measure When You’re Ready to Expand

How do you know your agent is maturing?

Look for signals:

✅ Lower escalation rates in key categories
✅ Faster case resolution times
✅ Higher agent satisfaction (they’re focused on complex work)
✅ Better customer feedback (and fewer “please clarify” loops)

When you see those signs—it’s time to unlock new categories.

Real Scale, Real Impact

The most successful Agentforce teams don’t automate everything at once.
They automate what matters—and scale with intention.

By listening to what your AI agent can’t do, you’ll figure out exactly what it should do next.

It’s not about doing more. It’s about doing the right next thing.

Real Scale, Real Impact

The most successful Agentforce teams don’t automate everything at once.
They automate what matters—and scale with intention.

By listening to what your AI agent can’t do, you’ll figure out exactly what it should do next.

It’s not about doing more. It’s about doing the right next thing.

What’s Next: Beyond Email—The Future of AI as a Channel

You’ve launched. You’ve scaled.
Now it’s time to think bigger.

Next up? We’ll dive into boosting accuracy with advanced grounding—exploring how to enrich your AI agent’s responses by connecting deeper into trusted, structured sources across your org.

👉 Ready to start or scale? Check out the Help Guide to connect your Agentforce Service Agent to email.

What’s the most surprising thing your AI agent has escalated—and how did it help you improve?

Let’s learn from each other.👇

Grow Smart with Agentforce: Train Your Agent Like a Human

Part 1 of our Agentforce for Service Email Series

In this post, you’ll learn how to:

  • ✅ Launch your AI fast using what you already have
  • 📚 Train it like a human service rep
  • 🔁 Create a foundation you can grow and scale

The Problem: AI Projects Stall Before They Start

You’ve invested in the platform. You’ve got the data. Leadership is on board. But your AI initiative still isn’t live.

Why?

Because most teams get stuck trying to launch the “perfect” use case.
They overthink. They overbuild. And they delay deployment—turning what could’ve been a quick win into a 6-month experiment with little to show for it.

Sound familiar?

If you want to move fast, deliver ROI, and start making real impact, there’s one proven place to begin:
👉 Start with your FAQs.

Why FAQs? Because They Just Work.

Launching Agentforce for Service Email doesn’t require a massive overhaul. You already have what you need:

  • A robust knowledge base
  • Common, repeatable inquiries
  • High-volume case categories perfect for automation

Think about how you onboard a new rep. You start with the basics:

  • “How do I reset my password?”
  • “Where’s my order?”
  • “What’s your return policy?”

These are your agent’s training wheels—and they’re your fastest path to value.

Train Your Agent Like You Would a Human Service Representative 

The most successful teams don’t treat AI like a black box.
They treat it like a teammate. Here’s how:

  • Use what you already have—macros, quick texts, and KB articles.
  • Model the best—feed in examples from high-performing agents.
  • Ground in real data—Salesforce cases, flows, and templates.

With Agentforce, your AI agent can start handling email in weeks, not months.
This isn’t about perfection. It’s about progress. 🚀

Escalations = Your Roadmap to Scale

Once your agent is live, you’ll start seeing what it can’t handle. That’s not failure—that’s opportunity.

Use escalations to:

  • Spot gaps in your content or logic
  • Identify new areas for grounding
  • Prioritize your next round of automation

Every escalation tells you where to go next.

The Flywheel of AI Service Maturity

Here’s how the most successful support orgs scale Agentforce:

  • ✅ Launch with FAQs
  • 📊 Track what gets escalated
  • 🔍 Expand training and grounding data
  • 🔁 Iterate and deploy again

This “rinse, learn, repeat” model drives continuous improvement—without burning time or resources.

Real Impact in Real Time

Teams with Agentforce for Service Email are seeing:

  • ⏱️ Faster resolution for common questions
  • 🎯 More time for agents to focus on high-value issues
  • 🚀 Deployments in weeks, not quarters

And the best part? It all starts with the content you already have.

If you’re stuck or waiting for the “perfect” use case—don’t be.

Start with FAQs. Get your agent into production.
And let the results speak for themselves.

Let’s get you live.

Progress Over Perfection

Your AI doesn’t need to handle every edge case on day one.
It just needs to start helping.

And once it’s live, you’ll start learning fast.
In Part 2, we’ll show you how to use escalations to identify gaps and scale intelligently.

🎥 Want to see it in action?
Check out our quick demo of Agentforce for Service on Email:
👉 Watch the video

🤔 What’s the one service question you wish your AI could handle today?
Let us know in the comments—we’re building this together.

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.