5.1 Overview

The Call History system preserves the operational record of telephone activity processed through AIUNIFY Call Center.

A Call record can contain:

Call owner
Call type
Direction
From Number
To Number
Provider Call SID
Status
Duration
Campaign
Contact
Recording
Transcript
DTMF activity
Disposition
Call Notes
Callback date
Error information
Call cost
Sentiment
Lead Score
AI Summary
Key Intents
Start and End times

The application contains several interfaces that may all be described as Call History:

Communication → History
/calls

Customer → My Call History
/my-calls

Conversational AI → Call History
/ai-agents/calls

Administration → Call Logs
/admin/call-logs

These interfaces do not display the same Call types, fields, or ownership scope.

This chapter primarily covers:

Communication → History
Customer → My Call History

AI Agent Call History and Administrator Call Logs will be covered separately.

Call Record Types

5.2 Manual Calls

A Call is stored as:

call_type = manual

when it originates from operations such as:

Browser Softphone
Contact click-to-call
On-demand human calling
Inbound call routing

5.3 Campaign Calls

A Campaign Call is stored as:

call_type = campaign

when it is created through an outbound Campaign workflow.

A Campaign Call can be connected to:

Campaign
Campaign Contact
Master Contact
Message Variant

5.4 Call Directions

Supported directions are:

outbound
inbound

Outbound

The system or Agent called an external destination.

Inbound

An external caller called an AIUNIFY-managed Phone Number.

Call Statuses

5.5 Supported Call Statuses

The Call model supports:

initiated
ringing
in-progress
completed
busy
no-answer
failed
canceled


5.6 Initiated

Initiated means the Call record was created and the provider connection process began.

It does not confirm that the destination rang.

5.7 Ringing

Ringing means the provider reported that a Call leg was ringing.

It does not confirm that a person answered.

5.8 In Progress

In Progress means the Call is currently connected or treated as active.

5.9 Completed

Completed means the provider reported that the Call reached its completed state.

Completed does not automatically mean:

A person answered
The Contact was interested
The Campaign succeeded
A sale occurred
The full intended conversation occurred

Duration, recording, transcript, and disposition should also be reviewed.

5.10 Busy

Busy means the destination returned a busy condition.

5.11 No Answer

No Answer means the destination was not answered within the provider’s permitted ring period.

5.12 Failed

Failed means the provider or application could not complete the Call.

Possible causes include:

Invalid destination
Provider rejection
Insufficient carrier access
Configuration failure
Network problem
Unavailable service

The normal Call History table does not display the stored error_message.

5.13 Canceled

Canceled means the Call was canceled before normal provider completion.

A Call manually ended through the Softphone can also be stored as Canceled under the current implementation.

Opening Communication Call History

5.14 Main Call History Page

To open the primary history:

  1. Sign in.
  2. Open Communication in the Sidebar.
  3. Select History.
  4. Wait for Calls and statistics to load.

The page address is:

/calls

The heading is:

Call History

The description is:

View all your calls and their details

5.15 KYC Requirement

The main Call History route is inside the Basic KYC group.

A normal Customer requires an approved Basic or Business KYC record when KYC is globally enabled.

5.16 Permission Requirement

The user normally requires:

calls.view

When the permission is missing, the page renders an empty Call list and displays:

You do not have permission to view call history.

It does not intentionally return a raw authorization page for this specific list request.

Call History Ownership

5.17 Administrator Scope

An Administrator can see all standard Call records in the main Call History.

5.18 Customer Scope

The main Call History query shows Calls where:

call.user_id = Customer User ID

It does not add Calls whose User ID belongs to one of the Customer’s Agents.

5.19 Agent Scope

The main Agent Call History query shows Calls where:

call.user_id = Agent’s parent Customer ID

It does not include the Agent’s own User ID.

5.20 Agent Call-Ownership Limitation

A browser Call initiated by an Agent is created with:

user_id = signed-in Agent ID

The main Agent history page searches the parent Customer ID instead.

An Agent’s own Softphone Calls can therefore be absent from:

Communication → History

5.21 Customer Team-Call Limitation

The Call authorization policy allows a Customer to view Calls belonging to its Agents.

However, the main list and CSV export query only the Customer’s own User ID.

Therefore:

Call Policy:
Customer may view Customer and Agent Calls

History list and export:
Customer receives only Customer-owned Calls

This is a current ownership-scope inconsistency.

5.22 Detail Authorization Is Broader

The individual Call policy permits:

Administrator:
All Calls

Customer:
Own Calls and Calls belonging to attached Agents

Agent:
Parent Customer Calls and Agent’s own Calls

A Call can therefore be authorized on its direct detail route even when it does not appear in the user’s main list.

Call Statistics

5.23 Statistics Cards

The top of the main Call History displays:

Total Calls
Completed
Failed
In Progress
Inbound
Outbound

5.24 Total Calls

Total Calls counts all Calls within the role’s main history scope.

5.25 Completed Calls

Completed counts Calls whose Status is:

completed

5.26 Success Rate

The displayed Success Rate is:

Completed Calls
÷
Total Calls
×
100

Example:

Total Calls: 100
Completed Calls: 65

Displayed Success Rate:
65%

This is not necessarily an answer rate because the Completed Status can include Calls with limited or zero useful conversation duration.

5.27 Failed Calls

The Failed Card combines:

failed
busy
no-answer

A busy or unanswered Call is therefore counted in the red Failed statistic even though its exact Status remains available in the table.

5.28 In-Progress Calls

The In Progress Card combines:

initiated
ringing
in-progress

5.29 Inbound and Outbound Percentages

Inbound and Outbound Cards display their counts and percentages of Total Calls.

5.30 Statistics Ignore Current Filters

The statistics are calculated from the user’s full role-scoped Call history.

They are not recalculated from the currently selected:

Status
Type
Direction
Date range
Search

Example:

Total Call history: 5,000
Filtered Calls shown: 25

Total Calls Card:
5,000

This is expected under the current controller.

Searching Call History

5.31 Search Field

The main Search placeholder states:

Search by phone number or contact name...

The backend currently searches only:

to_number
from_number

It does not search Contact Name.

5.32 Searching a Number

Enter any recognizable part of the From or To Number.

Example:

313555

The search uses substring matching.

5.33 Starting Search

To search:

  1. Enter the Phone Number or partial number.
  2. Select Search.
  3. Review the resulting Calls.
  4. Clear the Search field and submit again to return to the full list.

5.34 Search Does Not Normalize Input

The Search query compares the entered text against stored number strings.

Differences involving:

Plus signs
Spaces
Parentheses
Hyphens
Country codes

can affect results.

Searching a shorter numeric portion can improve matching.

Filters

5.35 Opening Filters

Select:

Show Filters

The interface expands five controls:

Status
Type
Direction
From Date
To Date

5.36 Status Filter

The visible Status options are:

All Status
Completed
Failed
Busy
No Answer
In Progress

The menu does not provide visible choices for:

Initiated
Ringing
Canceled

although those statuses exist in Call records.

5.37 Call Type Filter

The Type options are:

All Types
Manual
Campaign

5.38 Direction Filter

The Direction options are:

All Directions
Inbound
Outbound

5.39 Date Filters

The date fields are:

From Date
To Date

The backend applies the date range to:

created_at

rather than started_at or ended_at.

5.40 Browser and Server Dates

The selected date is submitted as a calendar date and compared against the stored database date.

The visible Date and Time column is later formatted through the browser.

Near midnight, a record can appear under a different local calendar day than the date used by the backend filter.

5.41 Filter Changes

Changing a dropdown or date field immediately requests a refreshed list.

Search requires selecting the Search button or pressing the form submission action.

5.42 Clearing Filters

There is no dedicated Reset button on the main Call History page.

To clear filters:

Status:
All Status

Type:
All Types

Direction:
All Directions

From Date:
Blank

To Date:
Blank

Search:
Blank

Call History Table

5.43 Table Columns

The main table contains:

Status
Direction
Contact / Number
Type
Campaign
Duration
Cost
Recording
Date & Time
Actions


5.44 Status

The first column displays:

Status icon
Status Badge

Completed Calls use a positive indicator.

Failed, Busy, and No Answer use a red missed-Call indicator.

Ringing and In-Progress Calls use a blue active indicator.

5.45 Direction

Direction is displayed as an Inbound or Outbound Badge.

5.46 Contact and Number

For a Campaign Contact, the interface attempts to display:

First Name + Last Name

and falls back to the destination number when no name exists.

Below it, the table displays:

From: [From Number]

5.47 Campaign Contact Naming Mismatch

The controller loads the relationship as:

campaignContact

Laravel normally serializes the relationship key as:

campaign_contact

The page expects:

campaignContact

Because the expected frontend property does not match the normal serialized key, Campaign Contact names can fall back to the To Number.

5.48 Call Type

The Type Badge displays:

manual
campaign

5.49 Campaign

When the Call has an associated Campaign, its Name is displayed as a link.

Selecting it opens the Campaign Details page.

A Call without a Campaign displays:

-

5.50 Duration

Duration is formatted as:

minutes:seconds

Examples:

0:00
0:47
3:12

A null or zero duration displays:

0:00

This can represent:

Call did not connect
Provider duration not yet received
Call was extremely short
Status synchronization is incomplete

5.51 Cost

The main Call History formats Cost using the application’s currency formatter and displays four decimal places.

Examples:

$0.0125
$0.1050

When Cost is null or zero:


is displayed.

5.52 Recording

When a Recording URL exists, the table displays:

Microphone icon
Browser audio player

When no Recording URL exists:

-

is displayed.

5.53 Date and Time

The table displays the Call record’s:

created_at

timestamp using the browser’s local date and time format.

It does not display started_at in this column.

5.54 Actions

The Eye icon opens:

/calls/[Call ID]

Pagination

5.55 Page Size

The main Call History controller returns:

10 Calls per page

5.56 Pagination Controls

When more than one page exists, the bottom displays:

Showing [from] to [to] of [total] calls

Previous
Next

5.57 Filters Are Preserved

Pagination retains the active:

Search
Status
Type
Direction
Date range

Empty States

5.58 No Calls

When the account has no matching Calls:

No calls found

is displayed.

5.59 No Results After Filtering

When filters are active, the page advises the user to adjust them.

5.60 Make a Call

When no Calls exist, a Make a Call button opens:

/softphone

Call Details

5.61 Opening a Call

Select the Eye icon on the main history table.

The Call Details address is:

/calls/[Call ID]

5.62 Detail Authorization

The application checks the Call policy before opening the page.

A user cannot normally open an unrelated account’s Call merely by changing the ID.

5.63 Detail Page Header

The heading is:

Call #[ID]

with:

Detailed information about this call

5.64 Summary Cards

The page attempts to display:

Status
Duration
Direction
Campaign

5.65 Contact Information

The Contact Information Card can display:

Contact Name
Phone Number
View Contact

5.66 Contact Source Limitation

The controller creates Contact information only when the Call has a:

campaign_contact_id

It does not load the Call’s direct:

contact_id

relationship for this page.

A manually placed Contact-linked Softphone Call can therefore display:

No contact information available

even when contact_id exists.

5.67 Timeline

The Timeline Card displays:

Started At
Ended At

using browser-local formatting.

5.68 Active or Incomplete Calls

When ended_at is null, the current interface still attempts to construct a date.

This can produce an invalid or misleading Ended At value.

5.69 Recording Card

When recording_url exists, the page displays a full-width browser audio player.

5.70 Notes Card

The Detail page expects a field named:

notes

The actual Call model stores post-Call notes as:

call_notes

As a result, saved post-Call Notes do not normally appear in the current Notes Card.

Current Call Detail Data Mismatches

5.71 Campaign Name

The page expects:

campaign_name

The controller sends the raw Call model with a loaded:

campaign

relationship.

It does not create a campaign_name property.

The Campaign Card can therefore be blank.

5.72 Manual Campaign Link

The Campaign Card is rendered even when a Call has no Campaign.

A manual Call can produce a blank or invalid Campaign link.

5.73 Contact Properties

The frontend Call interface expects fields such as:

contact_name
contact_phone

These are not supplied directly on the Call object.

The separate contact property is used for the Contact Card, but only for Campaign Contacts.

5.74 Information Not Displayed

The current Call Details page does not display:

From Number
To Number
Call Type
Call Cost
Price Currency
Provider SID
Answered By
Error Message
DTMF digits
Disposition
Call Notes under their correct field
Callback date
Transcript
Transcript Status
Transcript Cost
Sentiment
Lead Score
Lead Quality
AI Summary
Key Intents

Although the translation help text says the Eye action can provide recordings, transcripts, and additional information, the current page does not render the Transcript fields.

5.75 No Detail Actions

The page does not provide visible controls for:

Editing the Call
Deleting the Call
Synchronizing provider Status
Analyzing sentiment
Changing Disposition
Downloading the Recording
Exporting one Call

My Call History

5.76 Opening My Call History

Customer navigation also contains:

Communication
→ My Call History

The page address is:

/my-calls

The heading is:

My Call History

The description states that the user can view Calls and listen to Recordings.

5.77 Route Access

The /my-calls route does not have an explicit Customer-role or KYC middleware declaration in its immediate route definition.

The controller scopes results to:

call.user_id = signed-in User ID

Although the Sidebar presents it as a Customer feature, another authenticated role can potentially open the route directly and receive its own Call records.

5.78 My Call History Scope

This page shows only Calls whose User ID matches the signed-in account.

For an Agent, this can provide Agent-owned Calls that are missing from the main Agent /calls history.

For a Customer, it does not include Calls stored under Agent User IDs.

5.79 Page Size

My Call History returns:

50 Calls per page

5.80 Refresh

The page includes a:

Refresh

button.

It reloads the current page and query.

It does not perform a direct provider synchronization.

My Call History Filters

5.81 Search

The visible placeholder states:

Search by phone number...

The backend searches:

to_number
from_number
twilio_call_sid

5.82 Status Options

The Status selector contains all eight standard statuses:

Completed
Initiated
Ringing
In Progress
Busy
Failed
No Answer
Canceled

5.83 Type Options

Type options are:

Campaign
Manual

5.84 Sentiment Options

Sentiment can be filtered by:

Positive
Neutral
Negative

5.85 Lead Quality Options

Lead Quality can be filtered by:

Hot
Warm
Cold
Not Interested

5.86 Applying Filters

Select:

Filter

to submit the selected criteria.

5.87 Resetting Filters

Select:

Reset

to clear:

Search
Status
Type
Sentiment
Lead Quality

My Call History Table

5.88 Columns

The table contains:

From / To
Type
Campaign
Status
Duration
Cost
AI Analysis
Recording
Transcript
Created

5.89 From and To

Both telephone numbers are shown:

[From Number]
→ [To Number]

5.90 Duration

My Call History displays raw seconds:

47s
192s

rather than minutes:seconds.

5.91 Cost Currency Limitation

My Call History displays Cost using a hard-coded dollar sign:

$0.0125

It does not use:

price_unit
Application base currency
Currency formatter

A non-USD Call can therefore be labeled incorrectly.

5.92 AI Analysis

When sentiment data exists, the table displays:

Sentiment
Sentiment Confidence
Lead Quality
Lead Score

5.93 Recording Player

When a Recording URL exists, the page displays a custom Play/Pause button with:

Current playback time
Recording duration

5.94 Transcript

The intended Transcript behavior is:

Transcript exists:
View button

Transcript Status = in-progress:
Processing...

Recording exists but no Transcript:
Not available

No Recording:

Current My Call History Data Defect

5.95 Selected Fields

The My Call History controller explicitly selects:

ID
Call Type
Direction
From Number
To Number
Status
Duration
Price
Price Unit
Recording URL
Recording Duration
Start and End times
Created time
Campaign ID
Sentiment fields

It does not select:

twilio_call_sid
error_message
transcript_text
transcript_status
transcript_price


5.96 Transcript Button Cannot Normally Appear

The page checks:

call.transcript_text

but the controller does not return that column.

Therefore, the Transcript View button and Transcript modal cannot normally be reached under the current controller response.

5.97 Processing Status Cannot Appear

The page checks:

transcript_status = in-progress

but transcript_status is not selected.

The visible Processing... Badge cannot normally appear.

5.98 Search by Provider SID Still Works

The backend may still filter by twilio_call_sid because SQL can search a column that is not part of the selected result.

However, the SID is not returned to the frontend.

5.99 Error Message Is Not Available

The frontend defines an error_message property, but the controller does not select it.

Failed Calls do not display their error details in this interface.

Recordings

5.100 Recording Fields

A standard Call can store:

recording_url
recording_duration
recording_sid
enable_recording

5.101 Recording Availability

A Recording appears only after the provider has:

Created the audio
Completed its Recording callback
Delivered the Recording URL
Updated the Call record

A completed Call can therefore initially show no Recording.

5.102 Recording Duration

Recording Duration can differ from the Call’s total Duration because recording may begin at answer rather than at initial Call creation.

5.103 Direct Recording URL

The standard user interfaces place the stored Recording URL directly into the browser audio player.

The API recording endpoint also returns the URL rather than proxying the audio content through AIUNIFY.

5.104 Protected Provider URLs

Because the current interface does not proxy standard Call Recordings, playback depends on the stored provider URL being directly accessible to the browser.

A provider-protected Recording URL can fail to play even though the database contains the URL.

5.105 Recording Permissions Mismatch

The Call Policy defines separate permissions for:

calls.recordings
calls.download

However, the normal Call History pages render the Recording whenever recording_url is present after the user gains access to the Call list.

Those pages do not visibly invoke the separate Recording-listen permission.

This is a current permission-enforcement gap.

5.106 No Download Button

The standard user Call History pages do not provide a dedicated:

Download Recording

button.

The browser’s native audio controls may provide browser-dependent options, but this is not an AIUNIFY-managed download workflow.

5.107 No Recording Deletion

Normal users cannot delete a Recording from Call History.

5.108 Recording Retention

The interface does not display:

Expiration date
Retention period
Storage location
Deletion schedule

Do not assume Recordings remain permanently available.

Transcriptions

5.109 Transcript Fields

A standard Call can store:

transcript_sid
transcript_text
transcript_status
transcript_price

5.110 How a Transcript Is Created

For applicable recorded Calls, the provider sends a Transcription callback containing:

Transcription SID
Transcription Text
Transcription Status
Transcription Price

The controller stores those values on the Call.

5.111 Transcript Price

Transcript Price is stored separately from the Call’s telephone Cost.

The current standard user pages do not display it.

5.112 Automatic AI Analysis

When:

Transcript Status = completed
+
Transcript Text is not empty

the transcription callback attempts to start AI sentiment analysis.

5.113 Calls Without Transcripts

A Transcript may be unavailable when:

Recording was disabled
Call did not connect
Provider transcription was not requested
Provider transcription failed
Recording was too short
Webhook was not delivered
Transcript is still processing

5.114 Transcript Presentation

The intended My Call History modal displays:

From Number
To Number
Call date
Duration
AI Analysis
Full Transcript

The current controller omission prevents the Transcript data from reaching that modal.

5.115 No Transcript on Main Details

The main /calls/[ID] page does not render Transcript Text or Transcript Status.

5.116 No Transcript Export

The standard Call CSV export excludes:

Transcript Text
Transcript Status
Transcript Cost

AI Sentiment and Lead Analysis

5.117 Stored AI Fields

A Call can contain:

sentiment
sentiment_confidence
lead_score
lead_quality
ai_summary
key_intents
sentiment_analyzed_at

5.118 Sentiment Values

Sentiment is classified as:

positive
neutral
negative

5.119 Confidence

Sentiment Confidence is stored as a percentage from:

0 through 100

5.120 Lead Quality

Lead Quality can be:

hot
warm
cold
not_interested

5.121 Primary Automatic Lead Score

The primary automatic transcription-analysis service requests a Lead Score from:

1 through 10

The My Call History interface displays:

[score]/10

5.122 Alternate Analyzer Inconsistency

A separate sentiment-analysis API service instructs its model to produce a score from:

0 through 100

and stores that result in the same lead_score column.

The interface still labels it:

/10

A Call analyzed through that alternate path could therefore display an invalid-looking result such as:

75/10

This is a current scoring-range inconsistency.

5.123 AI Summary

AI Summary is intended to provide a brief description of the conversation.

It is not a verbatim Transcript.

5.124 Key Intents

Detected intents can include concepts such as:

Interested
Requested Callback
Not Interested
Price Concern
Competitor Mention
Decision Maker
Needs Information
Do Not Call

5.125 Analysis Requirements

AI Analysis generally requires:

Completed Transcript
Meaningful Transcript length
Configured OpenRouter service
Available AI model
Successful JSON response

5.126 Analysis Is Not Guaranteed

A Transcript can exist without AI Analysis.

Possible reasons include:

Transcript too short
OpenRouter unavailable
Invalid provider response
No API key
Analysis failed
Analysis callback was not triggered

5.127 Campaign Contact Updates

The automatic Sentiment Analysis service can update the associated Campaign Contact.

Its mapping includes:

Hot:
Answered

Warm:
Answered

Cold:
Answered

Not Interested:
Opted Out

It can also append AI Summary, Lead Score, Sentiment, and Intents to Campaign Contact Notes.

5.128 Manual Review Required

AI Sentiment and Lead Quality are estimates.

They should not independently determine:

Legal consent
Credit approval
Employment decisions
Medical decisions
Customer eligibility
Do-not-call compliance
Contract acceptance

Review the Transcript and business context.

Dispositions

5.129 Supported Dispositions

The Softphone post-Call workflow supports:

interested
not_interested
callback
wrong_number
voicemail
no_answer
do_not_call

5.130 Disposition Storage

The selected result is stored in:

disposition

5.131 Call Notes

Post-Call Notes are stored in:

call_notes

with a maximum of 5,000 characters through the user disposition endpoint.

5.132 Callback Date

A Callback result can store:

callback_at

5.133 Contact Updates

When the Call has a direct contact_id, saving the Disposition can:

Update Last Contacted At
Increment Total Calls
Append Call Notes to Contact Notes

5.134 History Display Limitation

The main Call list does not display:

Disposition
Call Notes
Callback date

5.135 Detail Notes Mismatch

The Call Details page expects notes instead of call_notes.

Saved post-Call Notes do not normally appear there.

5.136 No Disposition Filter

The main history and My Call History pages do not provide a Disposition filter.

5.137 No Disposition Editing

Call History does not provide a form to revise a saved Disposition.

5.138 Do Not Call Limitation

A Call Disposition of:

do_not_call

does not automatically set the master Contact’s Status to DNC.

The Contact must be updated separately according to the approved suppression process.

5.139 Callback Limitation

callback_at stores a date and time.

It does not automatically create:

Reminder
Calendar event
Scheduled Call
Notification
Sequence enrollment

Exporting Calls

5.140 Export Button

The main Call History contains:

Export

The button downloads a CSV file from:

/calls/export

5.141 Export Scope

The export uses the same main ownership rules:

Administrator:
All Calls

Customer:
Customer-owned Calls only

Agent:
Parent Customer-owned Calls only

It has the same Agent and Customer team-Call omissions as the main list.

5.142 Filtered Export

The export preserves:

Status
Call Type
Direction
From Date
To Date
Search

Only Calls matching those active filters are exported.

5.143 Export Is Not Limited to Current Page

The export includes all matching Call records rather than only the ten visible rows.

5.144 Export Filename

The filename follows:

calls_export_YYYY-MM-DD_HHMMSS.csv

Example:

calls_export_2026-07-26_143502.csv

5.145 Export Columns

The CSV contains:

ID
Status
Direction
From Number
To Number
Contact Name
Call Type
Campaign
Duration (seconds)
Cost
Recording URL
Started At
Ended At
Created At


5.146 Export Contact Name

Contact Name is taken from the Campaign Contact’s:

First Name
Last Name

When unavailable, the export places the To Number in the Contact Name column.

A directly linked manual Contact is not used for this export name.

5.147 Export Cost

Cost is exported as a raw numeric value.

The CSV does not include:

Price Unit
Currency Code
Currency Symbol

Do not assume every Cost value is USD when the platform supports multiple currencies.

5.148 Recording URL in Export

The CSV contains the raw Recording URL.

Treat the export as sensitive because anyone who can access a working URL may be able to attempt Recording access.

5.149 Information Excluded from Export

The standard CSV excludes:

Provider Call SID
Recording SID
Recording Duration
Transcript
Transcript Status
Transcript Price
Sentiment
Sentiment Confidence
Lead Score
Lead Quality
AI Summary
Key Intents
Disposition
Call Notes
Callback date
Error Message
Answered By
DTMF digits
User or Agent Name
Price Unit

5.150 Export Processing

The backend streams records in groups of:

500

to reduce server memory usage during large exports.

5.151 No My Call History Export

The /my-calls page has no Export button.

Use the main /calls export where the required Calls are included in its ownership scope.

Data Freshness and Synchronization

5.152 Webhook Updates

Call Status, Duration, Recording, and Transcript information are normally updated through provider Webhooks.

5.153 No Automatic List Polling

The standard Call History pages do not repeatedly poll for updates.

A Call can remain visibly:

Initiated
Ringing
In Progress

until the page is refreshed.

5.154 Refreshing Main Call History

The main page has no dedicated Refresh button.

Use:

Browser refresh
Navigate away and return
Reopen History from the Sidebar

5.155 Refreshing My Call History

Select the visible Refresh button.

This reloads database information.

5.156 Provider Synchronization Routes

The backend contains:

POST /calls/sync
POST /calls/[Call ID]/sync

These can synchronize active Call information with Twilio.

The current standard history pages do not expose visible Sync buttons.

5.157 Stuck Call Status

When a Call remains active long after it ended:

  1. Refresh Call History.
  2. Check whether the provider Call completed.
  3. Record the Call ID and approximate time.
  4. Contact an Administrator.
  5. Request provider synchronization where appropriate.

Deleting and Editing Calls

5.158 No Normal Delete Action

Normal users cannot delete Call records from Call History.

5.159 Administrator-Only Deletion Policy

The Call Policy reserves Call deletion for Administrators.

The standard user pages do not show a Delete button.

5.160 No General Editing

Normal users cannot directly change:

Status
Duration
Price
Recording URL
Transcript
Sentiment
Provider SID

through Call History.

Recording and Transcript Security

5.161 Sensitive Information

Recordings and Transcripts can contain:

Names
Telephone numbers
Addresses
Payment discussions
Health information
Financial information
Business information
Account identifiers
Private conversations

5.162 Access Control

Only authorized personnel should have:

calls.view
Recording access
Export access
Customer record access

5.163 Export Protection

Store Call exports in an approved secure location.

Do not leave CSV files in:

Public downloads folders
Shared personal drives
Unencrypted Email
Public chat rooms
Unmanaged devices

5.164 Recording Links

Do not paste Recording URLs into:

Support Tickets
Contact Notes
Campaign scripts
Public Email
Unsecured messages

unless specifically authorized and protected.

5.165 Retention Requirements

Follow the organization’s policies for:

Recording retention
Transcript retention
Customer access requests
Legal holds
Deletion requests
Consent documentation

Troubleshooting Call History

5.166 Calls Are Missing

Check:

Correct account
Correct role
Correct page
Active filters
Date range
Call owner
Agent versus parent Customer ownership
KYC
calls.view permission

5.167 Agent Calls Are Missing

The main Agent history queries the parent Customer ID.

Open /my-calls directly to check the Agent’s own User-scoped Calls, or use approved Administrator reporting.

5.168 Customer Cannot See Agent Calls

The Customer list query does not include attached Agent User IDs.

Use approved Administrator reports until the ownership query is corrected.

5.169 Search by Contact Name Fails

The placeholder mentions Contact Name, but the backend searches only From and To Numbers.

Search by telephone number instead.

5.170 Canceled Calls Cannot Be Filtered

The main Status menu omits Canceled.

Use My Call History or export all records and filter the CSV.

5.171 Statistics Do Not Match Filtered Rows

The statistics ignore page filters and represent the user’s full role-scoped Call history.

5.172 Contact Name Does Not Display

The frontend expects a different Campaign Contact relationship key from the backend’s normal serialization.

The table can show the destination number instead.

5.173 Campaign Name Is Blank on Details

The Call Detail page expects campaign_name, but the controller supplies a loaded Campaign relationship.

Return to the main list to view the Campaign link.

5.174 Notes Do Not Appear

Post-Call Notes are stored as call_notes.

The Detail page checks notes.

Review the linked Contact Notes where the Disposition process appended them.

Troubleshooting Recordings

5.175 No Recording

Possible causes include:

Recording disabled
Call never connected
Inbound path not configured for Recording
Provider callback pending
Provider callback failed
Recording was removed
Recording URL was not stored

5.176 Recording Player Does Not Start

Possible causes include:

Provider URL requires authentication
Recording is still processing
Browser blocks media
Network issue
Recording expired
Stored URL is invalid

5.177 Recording Duration Is Blank

The Recording callback may not have included Duration, or the provider update may still be pending.

5.178 Recording Works in Provider but Not AIUNIFY

The standard page uses the stored provider URL directly rather than a server-side audio proxy.

Contact an Administrator to review protected Recording access.

Troubleshooting Transcripts

5.179 Transcript Is Not Available

Check:

Recording was enabled
Call connected
Recording completed
Transcription was requested
Transcript callback completed
Transcript Text exists

5.180 Transcript View Button Never Appears

The current My Call History controller does not include Transcript fields in its selected columns.

This is a known current implementation defect.

5.181 Transcript Exists in Database but Not Details

The standard Call Detail page does not render Transcript fields.

5.182 Transcript Is Inaccurate

Transcription quality can be affected by:

Background noise
Accents
Multiple speakers
Poor connection
Low volume
Overlapping speech
Industry terminology

Use the Recording for verification where authorized.

Troubleshooting AI Analysis

5.183 No Sentiment

Possible causes include:

No Transcript
Transcript too short
OpenRouter not configured
AI service failure
Analysis not triggered
Invalid AI response

5.184 Lead Score Appears Above 10

The alternate analysis service can save a 0–100 score while the page labels the result /10.

Treat the value as unreliable until the scoring pipeline is identified and corrected.

5.185 Not Interested Updated Campaign Contact

The automatic analysis service can change the associated Campaign Contact to:

opted_out

when Lead Quality is not_interested.

Review the Transcript before reactivating the Campaign Contact.

5.186 AI Summary Conflicts with Recording

Treat the Recording and verified human review as authoritative.

AI Summary is an interpretation.

Troubleshooting Exports

5.187 Export Does Not Start

Check:

calls.view permission
KYC
Active login session
Browser download permission
Network

5.188 Export Has Fewer Calls Than Expected

Review:

Status filter
Type filter
Direction filter
Date range
Search
Role-based ownership scope
Agent and Customer ownership mismatch

5.189 Export Cost Has No Currency

The CSV omits price_unit.

Confirm the applicable currency through Account Statement, pricing records, or administrative reporting.

5.190 Export Does Not Include Transcript

This is expected in the current standard Call export.

Daily Call Review Checklist

5.191 Status Review

Confirm:

Completed Calls
Failed Calls
Busy Calls
No Answers
Canceled Calls
Calls still In Progress

5.192 Quality Review

For authorized samples, review:

Recording
Duration
Transcript
Disposition
AI Summary
Sentiment
Lead Quality

5.193 Follow-Up Review

Confirm:

Interested Contacts routed correctly
Callbacks recorded
Wrong Numbers corrected
Voicemails scheduled appropriately
Do Not Call Contacts suppressed separately

Failed Call Checklist

5.194 Before Retrying

Confirm:

Destination number
Country code
Call Status
Error details where available
Previous attempts
Calling hours
DNC status
Provider configuration
Credits

5.195 Avoid Blind Retries

Do not automatically retry every:

Failed
Busy
No Answer
Canceled

Call without applying the organization’s retry rules.

Recording Checklist

5.196 Before Playback

Confirm:

Authorized user
Approved business purpose
Private environment
Headset used
Recording disclosure requirements satisfied

5.197 After Playback

Do not:

Download unnecessarily
Copy the Recording URL
Share customer audio
Store it outside approved systems

Export Checklist

5.198 Before Export

Confirm:

Correct account scope
Correct filters
Correct date range
Business need
Authorized storage destination

5.199 After Export

Confirm:

Expected row count
Correct Call dates
Correct ownership
Cost currency verified
Recording URLs protected
File stored securely

Current-Build Limitations

5.200 Confirmed Current Limitations

The reviewed Call History implementation currently includes these important limitations:

Main Customer History excludes Agent-owned Calls

Main Agent History excludes Agent-owned Calls
and shows parent Customer Calls

Statistics do not follow visible filters

Search claims Contact Name support
but searches Phone Numbers only

Main Status filter omits Initiated, Ringing, and Canceled

Campaign Contact frontend relationship name
does not match normal backend serialization

Call Details expects campaign_name
that the controller does not provide

Call Details only builds Contact data
from Campaign Contacts

Call Details expects notes
instead of call_notes

Call Details does not show Transcript,
AI Analysis, Disposition, Error, DTMF, or Cost

My Call History does not select Transcript fields
required by its Transcript modal

My Call History hard-codes a dollar sign

Recording URLs are used directly
instead of through an authenticated audio proxy

Separate Recording permissions are not clearly
enforced by the standard history pages

AI Lead Score can use inconsistent 1–10
and 0–100 pipelines

CSV export omits Currency, Transcript,
Disposition, Notes, Sentiment, and AI Analysis

Provider Sync routes exist
but are not exposed through visible history controls

Chapter Completion

At the end of this chapter, the user should understand the differences among Manual, Campaign, Inbound, and Outbound Calls and know how to interpret:

Initiated
Ringing
In Progress
Completed
Busy
No Answer
Failed
Canceled

The user should know how to open Communication Call History, interpret the six statistics Cards, search by Phone Number, filter by Status, Type, Direction, and Date, review Call rows, play available Recordings, open Call Details, and navigate pagination.

The user should understand that the main statistics represent the full role-scoped history rather than the filtered table and that the displayed Success Rate is:

Completed Calls ÷ Total Calls

The user should understand the difference between:

/calls

and:

/my-calls

including their different ownership rules, page sizes, filters, AI fields, and current implementation defects.

The user should know that standard Calls can store:

Recording
Transcript
Disposition
Call Notes
Callback date
Sentiment
Lead Score
AI Summary
Key Intents

but the current user interfaces do not reliably expose every stored field.

The user should understand that the intended Transcript and AI Analysis modal on My Call History is currently blocked because its controller does not return Transcript fields. The user should also recognize the inconsistent Lead Score pipelines and avoid treating an AI-generated score as a definitive business decision.

The user should know how to export all filtered Calls to CSV and understand that the file includes Phone Numbers, Costs, and Recording URLs but excludes Transcripts, AI Analysis, Dispositions, Notes, and Currency Codes.

Finally, the user should follow this Call-review workflow:

Open Call History
Confirm account and filters
Review Call Status
Review Duration and Cost
Review Recording where authorized
Verify Transcript and AI interpretation
Confirm Disposition and follow-up
Export only when required
Store data securely


Write Your Comment