
FreePBX Call Recording for Outbound Call Centers
Recording outbound calls correctly requires wiring the right mix application, managing storage capacity, and understanding where audio is captured in the call flow.
1. Where Recording Happens in the Outbound Call Flow
In a FreePBX/Asterisk outbound call, there are two places where audio can be captured:
Bridge recording: Asterisk records the bridged audio between the agent's channel and the outbound PJSIP/SIP channel. This captures both legs mixed into a single stereo or mono file. It is the most common approach for outbound call centers — one file per call, simple to retrieve.
Channel recording (dual-channel): Asterisk records each channel separately (agent audio on one track, customer audio on the other). Stereo recording with legs isolated enables agent scoring applications to separate agent speech from customer speech. Requires a storage multiplier of roughly 2x compared to mono.
FreePBX's built-in recording module uses the MixMonitor application, which records the bridged audio. For dual-channel recording, you need a custom dialplan modification using MixMonitor with specific options, or a commercial module.
2. Enabling Recording via the FreePBX Module
Navigate to Admin > Call Recording (requires the Call Recording module from the FreePBX module repository).
Global settings:
- Record Format: wav49 (WAV with GSM compression — approximately 1 MB per 10 minutes) or wav (uncompressed — 10 MB per 10 minutes). For high-volume outbound floors recording thousands of hours per month, wav49 substantially reduces storage requirements with minimal quality loss
- Announcement: None (for outbound, the called party announcement is a separate dialplan step — call recording beeps on outbound are jurisdiction-dependent and should be reviewed with counsel)
Outbound route recording:
Open your outbound route and set Outbound Recording to Force or Don't Care depending on policy. Force records every call regardless of agent preference. Don't Care records only if the agent or admin has enabled recording for their extension.
For compliance-driven outbound operations (collections, financial services), Force is typically the policy. For sales environments where agents may handle sensitive payment information, a pause/resume recording workflow is required — configure this via custom dialplan rather than the Force setting.
3. Custom Dialplan for Selective Recording
For outbound call centers that need to record only connected calls (not ring time), use a custom dialplan in /etc/asterisk/extensions_custom.conf:
`` [macro-outbound-callerid-custom] exten => s,1,NoOp(Starting outbound recording post-answer) same => n,Set(RECORD_ID=${STRFTIME(${EPOCH},%Y%m%d-%H%M%S)}-${UNIQUEID}) same => n,MixMonitor(/var/spool/asterisk/monitor/${RECORD_ID}.wav49,b,) ``
The b option in MixMonitor starts recording only after the call is bridged (answered), not during the ring phase. This keeps recording files free of unanswered ring audio and reduces storage consumption on high-abandon-rate predictive campaigns.
For pause/resume during PCI-scope calls (e.g., when an agent takes a credit card number):
`` same => n,Set(MONITOR_EXEC=/usr/local/bin/post-call-processor.sh) ``
Trigger pause via AMI action MonitorStop during the sensitive window, then resume with Monitor. Most dialers that integrate with Asterisk via AMI handle this natively.
4. Storage Planning for Outbound Recording
At G.711 ulaw, uncompressed WAV recording consumes approximately 1 MB per minute. For a 50-agent center averaging 4 hours of connected call time per agent per day, 5 days per week:
- 50 agents × 240 minutes/day × 1 MB/minute = 12,000 MB/day = 12 GB/day
- Monthly: approximately 240 GB
wav49 (GSM compression) reduces this by about 10x: 24 GB/month. OGG with OPUS codec reduces it further but requires ffmpeg post-processing.
Allocate storage to /var/spool/asterisk/monitor/ with a retention policy. FreePBX's built-in recording interface does not automatically purge old recordings — implement a cron job:
`` 0 2 * * * find /var/spool/asterisk/monitor/ -name "*.wav49" -mtime +90 -delete ``
This purges recordings older than 90 days at 2:00 AM daily. Adjust retention to match your internal policy and any applicable state or federal record-keeping requirements.
5. Accessing and Searching Recordings
FreePBX stores recordings as flat files named by the UNIQUEID. The Call Recording module adds a record to the FreePBX database linking each file to the call's CDR entry. Access via Reports > Call Recording Report in the FreePBX GUI.
For programmatic access — a CRM integration, QA scoring application, or archival pipeline — query the FreePBX MySQL database:
``sql SELECT cdr.calldate, cdr.src, cdr.dst, cdr.duration, cdr.recordingfile FROM asteriskcdrdb.cdr WHERE cdr.calldate >= DATE_SUB(NOW(), INTERVAL 7 DAY) AND cdr.recordingfile != '' ORDER BY cdr.calldate DESC; ``
The recordingfile field contains the filename (not the full path). Prepend /var/spool/asterisk/monitor/ for the filesystem path.
6. Recording Reliability Under Load
Under high concurrent call volumes, disk I/O contention can cause recording gaps or file corruption. Monitor disk write latency on your recording volume:
`` iostat -x /dev/sda 5 ``
If await (average write wait time) exceeds 10ms regularly, your recording disk is a bottleneck. Separate the recording volume from the OS disk and use a dedicated partition on an SSD or NVMe device. For cloud-hosted Asterisk servers, mount a fast block volume (not NFS — NFS latency under heavy concurrent writes causes audio glitches in recordings).
Takeaways
Outbound call recording in FreePBX is reliable when configured correctly: use wav49 for storage efficiency, start recording post-answer on predictive dialer deployments, plan storage against your actual connected minutes, and separate the recording volume from your OS disk under load. The rest is policy — which calls to record, how long to retain, and who can access them.
More Outbound, Same Predictable Cost
Every minute you dial on UnlimCall counts toward your flat monthly seat fee, including time spent on connected recorded calls. No per-minute recording surcharges. /pricing/