When an agent initiates an attended transfer or conference call but the transfer doesn't complete (the three parties are merged but the agent never drops off), the third Call Reporting record that normally represents the completed transfer is never created. This guide walks you through building a Salesforce Flow to identify these incomplete 3-party calls using a custom checkbox field.
How it works
In a standard attended transfer, the Natterbox platform creates three Call Reporting records. When the 3-way call is not completed (all three parties are merged but the transfer is never finalised), only two records exist:
Record | Direction | Description | UUID relationship |
|---|---|---|---|
Record 1 | Inbound | The original call (e.g. Alice → Bob) | To UUID = Bob's channel |
Record 2 | Outbound | The consult leg (e.g. Bob → Clive) | From UUID = Bob's channel (matches Record 1 To UUID) |
The key identifier for this scenario is that all four Conversation Count and Instance fields equal 1 on both records:
Field Label | Field Name | Value on Record 1 (Inbound) | Value on Record 2 (Outbound) |
|---|---|---|---|
From Conversation Count | nbavs__From_Instance_Count__c | 1 | 1 |
From Conversation Instance | nbavs__From_Conversation_Instance__c | 1 | 1 |
To Conversation Count | nbavs__To_Instance_Count__c | 1 | 1 |
To Conversation Instance | nbavs__To_Conversation_Instance__c | 1 | 1 |
When a transfer does complete normally, these counts increase beyond 1 because additional conversation legs are recorded. The combination of matched UUID records with all counts remaining at 1 is what differentiates an incomplete 3-party call from a completed transfer.
Prerequisites
Salesforce System Administrator permissions (to create fields and Flows)
Access to the Call Reporting object (nbavs__Call_Reporting__c)
Familiarity with Salesforce Flow Builder
Create the custom field
Navigate to Salesforce Setup > Object Manager > search for Call Reporting.
Click Fields & Relationships > New.
Select Checkbox as the data type > Next.
Enter the following details:
Field Label: Three-Party Call
Field Name: Three_Party_Call (auto-populated)
Default Value: Unchecked
Description: When checked, indicates that a 3-party call or attended transfer was attempted but the transfer was not completed.
Click Next.
Set field-level security as required > Next.
Add to page layouts > Save.
Build the Flow
This Record-Triggered Flow fires when an inbound Call Reporting record is created. It uses a Scheduled Path to wait 1 hour before running the logic, ensuring all related records have been created by the Natterbox platform before checking.
Create the Flow and configure the trigger
Navigate to Setup > Flows > New Flow.
Select Record-Triggered Flow > Create.
Configure the trigger:
Object: Call Reporting (nbavs__Call_Reporting__c)
Trigger the Flow When: A record is created
Entry Conditions (All conditions are met):
nbavs__Call_Direction__cEqualsInboundnbavs__From_Instance_Count__cEquals1nbavs__From_Conversation_Instance__cEquals1nbavs__To_Instance_Count__cEquals1nbavs__To_Conversation_Instance__cEquals1
Optimise the Flow For: Actions and Related Records
Why these entry conditions?
Call Direction = Inbound — we only look at the original inbound leg.
All four count/instance fields = 1 — this is the signature of an incomplete 3-party call. If the transfer had completed, these values would be greater than 1.
Add a Scheduled Path
Click the + icon on the Start element to add a Scheduled Path.
Configure:
Path Label: Check After 1 Hour
Time Source: Call Reporting: Created Date
Offset Number: 1
Offset Options: Hours After
This delay ensures the outbound consult record (Record 2) has been created before the Flow checks for it.
Get Records: find the matching outbound consult
On the Scheduled Path, add a Get Records element:
Label: Get Matching Outbound Record
Object: Call Reporting (nbavs__Call_Reporting__c)
Filter Conditions (All conditions are met):
nbavs__From_UUID__cEquals{!$Record.nbavs__To_UUID__c}nbavs__Call_Direction__cEqualsOutboundnbavs__From_Instance_Count__cEquals1nbavs__From_Conversation_Instance__cEquals1nbavs__To_Instance_Count__cEquals1nbavs__To_Conversation_Instance__cEquals1
Sort Order: Created Date, Descending
How Many Records to Store: Only the first record
This looks for an outbound record where:
The From UUID matches the inbound record's To UUID — confirming the same agent initiated the consult.
All four count/instance fields = 1 — confirming the transfer was not completed on the outbound side either.
Decision: was an outbound consult found?
Add a Decision element after the Get Records.
Label: Outbound Consult Found?
Outcome 1 — Yes:
Condition:
{!Get_Matching_Outbound_Record}Is Null equals{!$GlobalConstant.False}
Default Outcome: No Match (end the Flow — this was a standard inbound call, not a 3-party attempt)
Update Records: tick the 3-Party Call checkbox
On the "Yes" path, add an Update Records element:
Label: Mark as Incomplete 3-Party Call
How to Find Records to Update: Use the Call Reporting record that triggered the flow
Set Field Values:
Field: Three_Party_Call
Value:
{!$GlobalConstant.True}
Save and activate
Click Save.
Enter a Flow Label, e.g.
Identify Incomplete 3-Party Calls.Click Activate.
Flow logic summary
Step | Element | Purpose |
|---|---|---|
1 | Trigger | Fires on inbound CRO records where all count/instance fields = 1 |
2 | Scheduled Path | Waits 1 hour to ensure the outbound consult record has been created |
3 | Get Records | Finds the outbound consult by matching inbound To UUID = outbound From UUID, with all counts = 1 |
4 | Decision | Confirms a matching outbound consult leg exists |
5 | Update Record | Sets 3-Party Call checkbox = TRUE |
Field reference
Field label | API name | What it tells you |
|---|---|---|
From Conversation Count | nbavs__From_Instance_Count__c | Total number of conversations the From party had on this call |
From Conversation Instance | nbavs__From_Conversation_Instance__c | Which conversation number this record represents for the From party |
To Conversation Count | nbavs__To_Instance_Count__c | Total number of conversations the To party had on this call |
To Conversation Instance | nbavs__To_Conversation_Instance__c | Which conversation number this record represents for the To party |
From UUID | nbavs__From_UUID__c | Unique identifier for the From party's channel |
To UUID | nbavs__To_UUID__c | Unique identifier for the To party's channel |
Building a report
Once the Flow is active and has populated the Three-Party Call field, you can build a report to surface these records.
Navigate to Reports from the App Launcher.
Click New Report > select report type Call Reporting.
Add the following filters:
Three-Party Call equals
TrueCall Reporting: Created Date = your desired time frame (e.g. THIS WEEK, THIS MONTH)
Group rows by To Natterbox User (to see which agents had incomplete 3-party calls).
Add the following fields:
From Number — the caller's number
To Natterbox User — the agent who attempted the transfer
Conversation Start Time
To UUID — use this to cross-reference the outbound consult leg
Troubleshooting
Issue | Cause | Solution |
|---|---|---|
Checkbox not ticking on any records | Flow not activated, or no records meeting entry criteria | Check the Flow is active. Verify you have inbound records where all four count/instance fields = 1 and a matching outbound record exists. |
Checkbox ticking on normal calls (false positives) | A standard inbound call happens to have a matching outbound with the same To UUID → From UUID link | Review the matched records. Consider adding additional filter criteria such as a time window (e.g. outbound Created Date within 5 minutes of inbound Created Date). |
Checkbox not ticking on known incomplete Three-Party Call | The outbound consult record may not yet exist when the Flow runs | Increase the Scheduled Path delay (e.g. 2 hours). Alternatively, check the UUID values on both records to confirm they match. |