Skip to main content
Call recordings

Connecting your phone system

Connect your phone system so a ringing call opens Call Taking with the caller looked up, agents' phone state shows on the dispatch board, and recordings arrive as soon as a call ends.

Written By Chris Scaminaci

Last updated About 2 hours ago

A phone system can connect to QuantumOps in three ways. Each does a different job, and you can use any combination.

ConnectionWhat it doesWorks withNeeds
Screen-popOpens the Call Taking screen when a call rings, with the caller's number already searched.Any phone system that can open a web address when a call rings or is answered.Agents who can take calls: the Administrator, Service Desk Manager, Dispatcher or Technician role.
PBX call presenceShows each agent's phone state on the dispatch board and keeps call sessions in step with the phone.Yeastar P-Series.The Call Recording & Transcription module and Yeastar PBX API recording ingestion.
Call-end webhooksBrings a recording in moments after the call ends, instead of waiting for the next poll.Yeastar, 3CX, or any system that can post call details.The Call Recording & Transcription module.

Before you start: you need access to your phone system's administration. To change call recording settings you need the Administrator role; Service Desk Manager, Dispatcher and Customer Success users can open the Settings tab but only read it. To give agents extension numbers you need the Administrator role.

Open Call Taking when a call rings

  1. In QuantumOps, select New call and copy the address of the tab that opens. It ends in your organisation's own identifier, for example https://your-address/CallTaking/{tenantId}.

  2. In your phone system, set the action that opens a web address when a call rings or is answered. Use the address from step 1 with these details added after a question mark, separated by &:

    DetailWhat to passWhat the screen does
    calleridThe caller's number.Searches for the caller as soon as the screen opens.
    didThe number the caller dialled.Uses it to tell which white-label partner's line was called, so that partner's script starts first.
    agentidThe answering agent's HaloPSA agent number.Attaches the call to that agent. The number also shows beside the name in the header when agentname is passed too.
    agentnameThe answering agent's name.Shows the name beside AGENT in the header.

    An example: https://your-address/CallTaking/{tenantId}?callerid=+15550100&did=+15550123&agentid=12&agentname=Jane%20Smith.

  3. Test with a call. The screen opens with the number in the Phone box and the search already run. It never picks the person for the agent: the agent still chooses from the results (see Taking a call).

Each agent still signs in to QuantumOps in that browser. If the session has ended the screen shows Session Expired.

If the phone system opens the screen inside a HaloPSA tab, your own HaloPSA address is always allowed to frame it. Any other address, such as a partner's HaloPSA, must be added under Allowed Embedding Origins. See Adding QuantumOps tabs to HaloPSA.

Show phone state with PBX call presence

PBX call presence lets QuantumOps see what each agent's phone is doing. It works with a Yeastar P-Series PBX.

Turn it on

  1. Make sure the Call Recording & Transcription module is on. An Administrator turns modules on in Module Management.
  2. As an Administrator, open Call Recordings in the sidebar, then the Settings tab. Under Recording Ingestion Source, choose Yeastar PBX API and save the PBX Base URL, Client ID and Client Secret. The PBX must have its OpenAPI enabled. Test Connection checks the details. See Call recording settings.
  3. Give each agent their extension number: set Extension number in the person's Edit team member dialog (see Inviting people, roles and agent links). The dialog shows the field only for a person who has a HaloPSA agent. At least one active agent needs one.
  4. On the Settings tab, tick Enable PBX call presence and select Save Configuration.
  5. On the PBX, open Integrations β†’ API β†’ Extension Status Monitor and, for each extension, turn on Call Status Monitor, Registration Status Monitor and Presence Status Monitor. For trunk state, also turn on Trunk Status Monitor.

QuantumOps starts watching about a minute after it starts, and picks up changes to these settings within a few minutes.

Check that it works

Below the checkboxes, the PBX call presence box reports what QuantumOps sees. Select Refresh to update it.

  • The first line says whether QuantumOps is connected to the PBX and since when, or Not connected with the reason. It also shows when the last event arrived and how many of each event type have arrived.
  • Warnings appear when something needs attention, for example two agents sharing one extension number or an extension that the PBX does not report call status for.
  • Trunks: lists each trunk and whether it is healthy.
  • The table has one row per extension: Ext, Agent, Role, Phone (on or off), Presence (for example Available, Away or Do not disturb), Call state (Idle, Ringing, Busy or Unknown), Since, Caller and Monitored on PBX.

If the box says the monitor has not reported yet, check the steps above: it needs the module, Yeastar PBX API ingestion, saved credentials, Enable PBX call presence and at least one agent with an extension number. If every Call state is Unknown, Call Status Monitor is not turned on for those extensions on the PBX.

What you get

  • On the dispatch board. Each agent's phone state appears with their other details, and live call tiles show who is on a call. See Pulse, live calls and notice ribbons and Queue, tracked tickets, lists and agents.
  • Sessions that follow the phone. QuantumOps keeps each call's session in step with the phone:
    • A screen-pop that opened for a call that rang on an extension but was answered elsewhere is closed automatically.
    • When the agent hangs up, the session moves to wrap-up. It stays open so the agent can still create a ticket or record an outcome.
    • When a dispatcher answers an inbound call and no screen-pop opened, QuantumOps opens a session for them. This applies to agents whose Agent role is Dispatch, which you set in Team Management under Edit details (see Inviting people, roles and agent links). Outbound and internal calls never open one.
    • When the agent is on a call with the same person again and the wrap-up session for the earlier call started less than ten minutes before, QuantumOps reopens that session instead of starting a second one. A wrap-up session with no caller number can be reopened in the same way.
    • Every automatic change adds a note to the session, so its history says what happened.
  • A session for every agent. Where it is enabled for your organisation, QuantumOps opens a session for any agent who answers an inbound call, so the Call tab in the browser extension opens by itself for technicians too. See Call tab.

Calls nobody closes

Every few minutes QuantumOps looks for call sessions that are still open four hours after they started. It marks them abandoned and adds the note Closed automatically: no outcome was recorded within 4 hours of the call starting. so the dispatch board stops showing old calls as live. This runs for every organisation, with or without PBX call presence.

Bring in recordings quickly with call-end webhooks

QuantumOps collects recordings by polling. A webhook lets the phone system tell it the moment a call ends, so the recording is processed within moments. Polling and the webhook can run together; a recording that arrives both ways is stored once.

  1. Open Call Recordings β†’ Settings. With Yeastar PBX API chosen, the Real-Time CDR Webhook (Optional) box shows a Webhook URL:. Select Copy to clipboard.
  2. In your Yeastar PBX, send call-end events to that address under Settings β†’ Event Center β†’ API Events or PBX β†’ General β†’ API.
  3. For a 3CX system, use the same address but end it in /3cx instead of /yeastar. Any other system can post JSON call details to the address without an ending, using these field names: callId, callerNumber, calledNumber, extension, agentName, startTime, endTime, durationSeconds, direction, recordingUrl, recordingFileName and status. The call must include recordingUrl or recordingFileName.

A call record is only used when it names a recording file or gives a recording address; others are acknowledged and ignored. The webhook accepts events only while the Call Recording & Transcription module is on.

Treat the address as private. It identifies your organisation.