Skip to main content
Call recordings

Call recording settings

Connect the source of your call recordings, choose the speech-to-text engine, set how calls are matched and posted to HaloPSA tickets, and configure the digest that tells agents about unmatched recordings.

Written By Chris Scaminaci

Last updated About 1 hour ago

The Settings tab of Call Recordings controls how recordings reach QuantumOps, how they are transcribed, how they are matched to tickets and posted to HaloPSA, and how agents hear about recordings that could not be matched. Open Call Recordings in the sidebar and select Settings. Call recordings describes the Recordings tab you use day to day.

Before you start.

  • The Call Recording & Transcription module is off for a new organisation. An Administrator turns it on in Module Management. Until then the Call Recordings link is missing from the sidebar.
  • Only an Administrator can change these settings, including the API keys and connection details on the tab. Service Desk Manager, Dispatcher and Customer Success users can still open Call Recordings and the Settings tab, but they see it read-only: a note says Read-only. Only an administrator can change the Call Recording settings., every box and button in the settings is disabled, saved keys and secrets show as a row of dots instead of their values, and there is no Save Configuration button. Test Digest Notification and Manual Operations (below the settings) stay available to them.
  • You need either a storage container that your phone system uploads recordings to, or a Yeastar P-Series PBX with its API enabled. You also need an account with the speech-to-text engine you choose.
  • Each agent needs an Extension number, set in the person's Edit team member dialog (see Inviting people, roles and agent links). QuantumOps uses it to tell whose call a recording is.

Save your changes

Nothing on the tab is stored until an Administrator selects Save Configuration at the bottom. QuantumOps checks the form first. If something is wrong it shows Configuration is invalid with the reasons. The rules that matter most:

SettingRule
Connection String (Azure Blob Storage)Required. It must contain a blob endpoint and use https. A connection string for local development storage is refused.
Container NameRequired. 3 to 63 characters: lower-case letters, numbers and hyphens, starting and ending with a letter or number. Generic names such as default, shared, common or test are refused.
PBX Base URL (Yeastar)Required, and it must start with https://.
Client ID and Client Secret (Yeastar)Required.
Poll Interval (minutes)5 to 1440.
Scan Interval (minutes)1 to 1440. The box is under Processing Options. Azure Blob Storage is scanned every 15 minutes whatever the value.
Max Parallel Processing1 to 200.
Match Time Window (minutes)5 to 480.
API KeyRequired for AssemblyAI. For Azure Speech you need the key and the Region.

The sidebar badge on Call Recordings reads Configure until the saved configuration passes these checks, then Active.

The first time you open the tab, the form is pre-filled: AssemblyAI as the engine, with every AssemblyAI option ticked, Universal-3 Pro and Summarization included; Auto Match to Tickets, Post to Tickets and Private Notes ticked; Match Time Window (minutes) at 60; Max Parallel Processing at 5; Process Newest First ticked; Enable Dispatcher Correlation and Auto-Group Related Recordings ticked; digests off. The digest settings have their own starting values, listed under Tell agents about unmatched recordings. Read Match recordings to tickets before you save, because Post to Tickets starts ticked.

Choose where recordings come from

Under Recording Ingestion Source, select Azure Blob Storage or Yeastar PBX API. The tab shows only the section for the one you select.

Use Azure Blob Storage

Choose this when your phone system uploads recording files into a storage container.

  1. Select Azure Blob Storage.
  2. Enter the Connection String. The field hides what you type. Enter the Container Name.
  3. Select Test Connection. Connection Successful means QuantumOps can reach the container. Connection Failed gives the reason, for example that the container does not exist. The test gives up after 30 seconds.
  4. Fill in the Filename Format Template below, so QuantumOps can read the caller, the extension and the direction from each file name.
  5. Select Save Configuration.

QuantumOps looks for new files in the background. Scan Storage on the Recordings tab looks now.

Use the Yeastar PBX API

Choose this with a Yeastar P-Series PBX that has OpenAPI enabled. QuantumOps asks the PBX for new recordings on a schedule and fetches each audio file itself.

  1. Select Yeastar PBX API.
  2. Enter the PBX Base URL, the Client ID and the Client Secret from the PBX's API settings.
  3. Set Poll Interval (minutes), from 5 to 1440. A new configuration starts at 15.
  4. Select Test Connection. QuantumOps signs in, lists the extensions and the latest recordings, and reports how many it found, or why it could not.
  5. Select Save Configuration.

QuantumOps links each recording to an agent through the Extension number you set for that agent in the person's Edit team member dialog (Inviting people, roles and agent links). The agent filter and the agent named on each recording come from it.

Two more panels sit under the Yeastar fields:

  • Enable PBX call presence is ticked in a new configuration. It lets QuantumOps follow the PBX's live call events, so the dispatch board and call sessions know who is on a call. The PBX call presence panel shows whether the connection to the PBX is up, when the last event arrived, any warnings and the phone state of each monitored extension. Refresh reloads it. The PBX needs its status monitors switched on for this to work: see Connecting your phone system.
  • Real-Time CDR Webhook (Optional) shows a read-only Webhook URL with a copy button. Point your PBX at it and the PBX sends each call's details as soon as the call ends, so QuantumOps does not wait for the next poll. Polling and the webhook can run together, and duplicates are prevented. The URL is unique to your organisation: treat it as private. Connecting your phone system has the PBX steps.

Choose the speech-to-text engine

Speech-to-Text Engine offers three engines. Select a card, then fill in the fields that appear under it.

EngineWhat the card saysWhat you enter
AssemblyAI (marked Recommended)Fast, accurate, includes sentiment analysis and speaker ID.API Key, then the options below.
Azure SpeechMicrosoft's speech services with diarization.API Key, Region (for example eastus), optionally Language (for example en-US), and Enable Speaker Diarization.
OpenAI WhisperUses your existing OpenAI key, no diarization.API Key is optional. Leave it empty to use your organisation's OpenAI key.

Diarization separates the speakers, so the transcript shows who said what. OpenAI Whisper cannot do it. The screen says so: use AssemblyAI for recordings with more than one speaker.

Summaries and sentiment scores come from AssemblyAI. With Azure Speech or OpenAI Whisper a recording has a transcript but no summary and no sentiment score.

AssemblyAI options

OptionWhat it does
Sentiment AnalysisScores the tone of the call. The result appears under Sentiment Analysis when you open a recording.
Speaker DiarizationSeparates the speakers in the transcript.
Topic DetectionAsks the engine to classify the call's topics (the screen's hint is IAB category classification). The result is stored with the recording. No screen shows it.
Speaker NamesLabels speakers with their names when the engine can tell, instead of a generic label.
SummarizationWrites the call summary. It appears as AI Summary, in digests and in the call log posted to the ticket. Without it a call has no summary.
Universal-3 ProUses the newest, most accurate model, which accepts a custom prompt. Ticking it shows Universal-3 Pro Settings.

All six start ticked in a new configuration.

With Universal-3 Pro ticked:

  • Custom Transcription Prompt gives the engine context: your company and product names, technical terms and the kind of call. The screen allows up to 1,500 words and counts characters against 7,500.
  • Temperature runs from 0.0 to 1.0. The screen recommends 0.0, which is deterministic. Higher values add randomness.

Custom Key Terms (for transcription accuracy) takes company names, technical terms and proper nouns that are hard to transcribe. Type a term and press comma or Enter to add it. Select the cross on a term to remove it. The box appears for AssemblyAI.

If the engine's account runs out of credit or its key is revoked, the recordings it refused land in the Failed view with the Provider Account badge. Fix the account, then use Retry Parked (see Call recordings).

Set how recordings are processed

Processing Options controls the transcription queue.

SettingWhat it does
Max Parallel ProcessingHow many recordings are transcribed at the same time. A new configuration starts at 5. QuantumOps never runs more than 10 at a time, and a very large backlog is worked through over several passes.
Only Process Recordings AfterA date. Recordings from before it are skipped when QuantumOps collects and transcribes. Use it to leave an old backlog alone. Clear Date Filter removes the date. Empty means process everything.
Process Newest FirstWorks on recent recordings before the older backlog. Untick it to work oldest first.

Describe your file names

Filename Format Template tells QuantumOps how your PBX names its files, so it can read the caller, the extension and the direction from the name. It applies to Azure Blob Storage. With the Yeastar PBX API the PBX supplies those details directly, and the template is only a fallback.

Type the template in Filename Template, with placeholders in braces. Each placeholder, except {_}, can appear once.

PlaceholderReads
{timestamp}A 14-digit time stamp, year to second.
{date} and {time}A date as 2026-02-16 and a time as 12-18-59.
{extension}The agent's extension number.
{number}, {caller} and {dialed}A phone number: the one on the call, the caller's, the one dialled.
{direction}Inbound, Outbound or Internal, or in, out, incoming, outgoing.
{agentname}The agent's name.
{callid}, {endtime} and {duration}A call id, an end time or sequence id, and a length in seconds.
{_}A part of the name you do not need. It can appear more than once.

The example under the field is the Yeastar one: {timestamp}-{endtime}-{extension}-{number}-{direction}.

To check a template, paste a real file name into Test Filename and select Test. Template matched! lists what QuantumOps read from the name. Otherwise the box says why the name did not match. Test before you rely on a template: one that does not fit your file names can leave recordings without a caller's number, and those cannot be matched.

Match recordings to tickets

Halo Ticket Matching decides what happens after a recording is transcribed.

SettingWhat it does
Auto Match to TicketsRuns the matching rules on each new recording after it is transcribed, to find its HaloPSA ticket. Untick it and QuantumOps stops running them. Test Match on a recording then says that auto-matching is disabled.
Match Time Window (minutes)How far from the call a ticket can have been opened and still count as a candidate, 5 to 480. Too narrow and calls stay unmatched. Too wide and a call can land on the wrong ticket, which looks resolved and is worse.
Post to TicketsLets QuantumOps write the call to the ticket without a person, in the cases listed below.
Private NotesShown ticked in a new configuration, with the hint Hide from end users.

QuantumOps matches a call by the caller's phone number, the agent's extension and how close the ticket was opened to the call. It matches automatically only when one ticket clearly stands out, for example the agent's own ticket opened just before the call. If several tickets fit, or none does, the recording stays Pending or No Match for a person.

What posting writes to HaloPSA

Posting adds two things to the ticket:

  • A call log entry for the call: the caller's number, the direction, the length and the AI summary, or Call Recording and the length when there is no summary.
  • A note, with the outcome Call Transcript, that holds the full transcript in a collapsed section with the agent, the date and the caller. The note is private: HaloPSA hides it from the customer. When related recordings are combined, the note is headed with the number of segments.

When a person makes the match, QuantumOps also asks HaloPSA to record the caller's number on the ticket's user, so later calls from that number are found. It never does this for an automatic match.

Decide whether you want a call's summary and full transcript on your tickets before you leave Post to Tickets ticked. What QuantumOps writes into HaloPSA lists everything QuantumOps can put on a ticket.

When a call posts without a person

With Post to Tickets ticked, QuantumOps posts on its own only in two cases, and only for calls from the last seven days:

  • The recording was linked to a ticket through a dispatcher's Call Taking session (see below).
  • An AI check matched the recording with a confidence of 90% or more.

Every other match waits for a person. A match made by the phone number, extension and time rules shows as Matched in the Ready to Post view. So does a recording someone attached by hand. A recording is never posted twice to the same ticket.

Match transferred calls

Dispatcher Correlation (Multi-Leg Calls) handles a call that a dispatcher takes and then transfers to an engineer, which leaves more than one recording.

SettingWhat it does
Enable Dispatcher CorrelationThe screen says Link dispatcher recordings to tickets via call taking sessions. When a dispatcher took a call from the same number inside the window and created or linked a ticket in Call Taking, the recording takes that ticket. It is the first thing QuantumOps tries.
Dispatcher Correlation Window (minutes)How far from the recording a dispatcher's session can start, 5 to 120. A new configuration starts at 30.
Auto-Group Related RecordingsWhen a recording is posted, QuantumOps combines other transcribed recordings from the same caller number inside the related-recording window into one transcript note, with a segment for each leg and the agents listed in order.
Related Recording Window (minutes)How close in time recordings must be to count as one call, 5 to 120. A new configuration starts at 10.

Tell agents about unmatched recordings

Digest Notifications sends each agent a Slack message that lists their recordings that no ticket has been matched to, with a button to open them. Matching your own recordings shows what the agent sees.

SettingWhat it does
Enable Digest NotificationsTurns digests on. They are off in a new configuration.
Send via SlackNotify agents with a Slack direct message.
Send via TeamsShown on the tab. Digests are delivered as Slack direct messages.
Include AI SuggestionsAdds the ticket an AI check suggests for a recording, with its confidence.
Digest FrequencyImmediate, Hourly, Daily or Weekly.
Digest Time (for Daily/Weekly)A 24-hour time such as 09:00, in your organisation's time zone.
Weekdays OnlyAppears when the frequency is Daily. Only send Monday to Friday.
Day of Week (for Weekly)The day a weekly digest goes out.
Min Recordings for DigestAn agent with fewer unmatched recordings than this gets no digest. 1 to 50.

A new configuration starts with Enable Digest Notifications unticked and Send via Slack and Include AI Suggestions ticked. Digest Frequency starts at Daily, Digest Time at 09:00, Weekdays Only ticked, Day of Week at Monday and Min Recordings for Digest at 1.

QuantumOps checks every 15 minutes. Daily and Weekly digests go out in the 15 minutes after Digest Time. Hourly goes out at the start of each hour. Immediate goes out at every check, but never to the same agent more than once in 30 minutes. An agent is not sent a second digest in the same period.

Digests are delivered as Slack direct messages. Keep Send via Slack ticked and give each agent a Slack ID. A scheduled digest reaches an agent who has a Slack ID, has at least the minimum number of unmatched recordings and has not been excluded from messaging mapping. Set the Slack ID under Agent Mapping in the Messaging tab of Q-Director Settings (Q-Director Config in the sidebar; see Q-Director: Slack, Teams and agent mapping) or in the agent's Edit team member dialog (Inviting people, roles and agent links). A recording counts as unmatched when it is transcribed and its match status is Pending or No Match, and it belongs to an agent through the extension.

Check a digest before you turn it on

Under Test Digest Notification:

  1. Choose an agent under Select Agent to Send Test Digest To. The list holds only agents with a Slack or Teams ID. If it is empty the screen says No agents have Slack or Teams IDs configured.
  2. Select Preview Digest. Digest Preview shows the message as the platform receives it, in a code view, under a Slack tab and a Teams tab. Above it are how many recordings the digest covers and how many have suggestions, marked Real Data or Sample Data.
  3. Select Send Test Digest to send the message to that agent's Slack direct messages, which needs a Slack ID. It uses the agent's real unmatched recordings, and sample ones when there are none. The result is shown under the buttons.

Use a test digest to confirm a message reaches the agent in Slack before you enable digests for everyone.

Run a job now

Manual Operations has two buttons that do work on demand.

Batch Match & Post has the button Run Batch Match & Post. It runs an AI check over unmatched recordings that have a transcript, are from the last seven days, have no suggestion yet and have not been checked in the last 24 hours, up to 500 at a time. A match of 90% or more is applied, and posted when Post to Tickets is ticked. A match of 50% to 89% is saved as a suggestion, which shows in the digest and in the browser extension. Anything lower is counted under No Match in the result, and the recording stays unmatched. The result lists Processed, Auto-Matched, Auto-Posted, Candidates Created, No Match, Errors and the time taken. The same check runs by itself every two hours, on recordings from the last seven days that were transcribed more than 12 hours ago, 50 at a time. Older calls wait for a person: use Post to Ticket on the Recordings tab, or an agent matches them on My Call Recordings.

Send All Digests has the button Send Digests to All Agents. It sends a digest now to every agent who has unmatched recordings. The result lists Total Agents, Sent, Skipped and Failed. Skipped counts agents with fewer recordings than Min Recordings for Digest.

Other boxes on the tab

Six more boxes appear on the tab. Ticking or unticking them does not change how QuantumOps collects, transcribes, matches or posts recordings, so you can leave them as they are. Each is shown here with the hint the screen gives it.

BoxWhereThe screen's hint
Auto ProcessingProcessing OptionsProcess new recordings automatically
AI EnhancementProcessing OptionsImprove transcripts with AI post-processing
Fetch CDR DataYeastar fieldsEnrich with ring/talk duration and disposition
Sync Extension ListYeastar fieldsAuto-map extensions to agent names from Yeastar
Show Hold Time MarkersDispatcher Correlation (Multi-Leg Calls)Include [Hold: X minutes] in composite transcripts
Include Transcript PreviewDigest NotificationsShow summary in digest messages

A digest shows each recording's summary whether or not Include Transcript Preview is ticked.