Calls & recording issues
Fix calls not reaching the CRM and recordings that never appear — phone capability states, permissions, battery restrictions and retention purges.
Calls & recording issues
Calls are missing from the CRM, or recordings are missing from the calls that did arrive. The Android app is capability-first: it reports what the phone can actually do (some devices simply cannot record calls) and never fakes a recording. So the fix usually starts with reading the phone's own capability state, then the phone's permissions, then the CRM.
Who this is for: agents who use the dialer, and admins supporting them.
Problem
After a phone call you expect a call record in the CRM, a recording (or a recording link), and the call mapped to the right lead. One or more of those is missing.
What you see
| Symptom | Where |
|---|---|
Capability mode shown as METADATA_ONLY or UNKNOWN |
Device Health screen |
Recording mode NATIVE_RECORDING / IMPORTABLE_RECORDING unavailable |
Device Health screen |
Tracking shown as LIMITED (never UNAVAILABLE) |
Device Health screen — means call data flows are partially restricted |
| Permission rows: Registered / Permission denied / Not configured / Pending | More → Device health |
| Calls appear without any audio | CRM call record |
| Old recordings disappeared | Possibly retention, not a fault — audio is purged on schedule |
Likely causes
- The phone cannot record. Android 10+ and many OEMs block call recording entirely; some allow it only with a specific dialer/SIM. This is a device fact, not a CRM bug.
- Play-distributed build limitations: call-log access (
READ_CALL_LOG) is a restricted permission — the Play build cannot use it the way a sideloaded build may, so call-log scanning is limited. - Permissions not granted: phone/SIM/call-log permissions, plus notification permission on Android 13+ (miss it and background work is quietly degraded).
- Battery optimisation killed or throttled the background call-log scan (it runs roughly every 15 minutes).
- Call tracking settings wrong: Monitored SIMs not set, or the recordings folder not pointed at where the phone actually writes files (Settings → Call tracking: Monitored SIMs, Additional recordings folder, Excluded numbers).
- The number is excluded — excluded numbers produce no tracked call by design.
- Retention purge removed the audio:
leadhub:purge-recordings(daily, 03:15) deletes recording files and marks the rowsexpired, while keeping the call metadata.
Quick fix
- Open More → Device health on the phone. Read three things: the recording capability mode, the tracking level, and which rows are not "Registered".
- Grant whatever is denied, then set the app's battery usage to Allow unrestricted (the Device Health battery row names the exact setting on that device).
- In Settings → Call tracking, check Monitored SIMs (the right SIM is on), the Additional recordings folder (points at where the phone saves recordings), and Excluded numbers (the number is not excluded).
- Place a real test call and check Sync queue ("N waiting · N retrying") — then Sync now.
Step-by-step fix
- Establish what the phone supports. The app classifies the device:
NATIVE_RECORDING(the app can record),IMPORTABLE_RECORDING(a recorder writes files the app can import),METADATA_ONLY(call data only — no audio),UNKNOWN(capability not yet probed).METADATA_ONLYon a device that supposedly records usually means permissions or an unavailable recorder — recheck permissions and the recordings folder. Some devices will stayMETADATA_ONLYno matter what; that is the honest answer, not a bug. - Tracking level
LIMITEDis the expected outcome on many modern devices — the app reports how much of the call lifecycle it can see rather than pretending. Limited tracking can still deliver call records; it may miss fine detail. - Fix permissions. Missing phone-account/SIM access breaks SIM attribution; missing call-log access breaks call detection. On Android 13+, the notification permission is also required — without it, background scanning and sync degrade.
- Battery. Set the app to Allow unrestricted. On aggressive OEM skins (Xiaomi, Oppo, Vivo, Samsung), also allow autostart/background activity if the device offers it.
- Call tracking settings. Monitored SIMs: only monitored SIMs produce calls. Additional recordings folder: without the correct folder,
IMPORTABLE_RECORDINGdevices cannot find files. Excluded numbers: calls to/from these are ignored by design. - Background scan and sync. Call logs are scanned roughly every 15 minutes; results enter the offline queue (Room) and sync with retry/backoff, so a call can legitimately take a few minutes to appear. Force it with Sync now on the Sync queue page; use Retry failed for stuck items.
- Check the CRM record. A call record with no audio on a
METADATA_ONLYdevice is correct behavior; on a recording-capable device, the recording arrives as an upload after sync — allow extra time on slow connections. - Old audio missing? Check the retention window before assuming data loss — the nightly purge deletes only audio, marks rows
expiredand nulls the stored path, keeping the call history intact. See Data retention & privacy (GDPR).
No fake recordings — ever The app will not fabricate a recording. If the device cannot record, the call appears as metadata only and the app says so. Do not promise a client audio the phone never captured; use the capability rows as the source of truth.
Admin fix
- There is no server-side switch that turns recording on for a device — capability is determined on the phone. An admin's job is to read Device Health with the agent, fix permissions/settings with them, and set expectations.
- Check the agent's calls appear under the right lead: call records link to leads; open the lead's timeline. Deep links (
crm://lead/{id}) in notifications jump straight to the record. - If a specific agent's calls never arrive while others work, compare their Device Health rows — the difference is usually a permission or battery setting on that one phone.
Developer fix
- Recording modes (
NATIVE_RECORDING,IMPORTABLE_RECORDING,METADATA_ONLY,UNKNOWN) and tracking levels (FULL,LIMITED) come from device capability probes;UNAVAILABLEis deliberately not used for tracking. - Call-log background scan cadence: ~15 minutes; offline queue is Room-backed; uploads retry via WorkManager with backoff and are idempotent (a retried upload does not duplicate the call).
- The Play-store build's
READ_CALL_LOGrestriction explains call-log limitations on distributed builds — do not chase parity with sideloaded builds. - Recording retention:
leadhub:purge-recordings {--dry}— audio deleted, rowstatus=expired, path nulled, metadata kept.
Logs to check
- Device Health screen on the phone (first stop, always) and the Sync queue page's counts.
- The agent's call list in the CRM and the lead timeline.
- Server side:
storage/logs/laravel.logfor mobile upload errors; Super Admin → Android App → Devices for the device registration.
When to escalate
- Calls syncing from one phone but never from an identical model on the same OS — capture both Device Health screens for the developer.
- Recordings uploading but unreadable/corrupt — preserve the original file on the phone before uninstalling anything.
- A retention purge seems to have deleted audio it should have kept — freeze the setting change, collect dates, and escalate to the super admin before running any purge manually.
Related guides
Was this page helpful?
Thanks — noted. ✦