Operations Made Easy: Archive, ACME, and Transcript
Running a telephony platform isn’t just about connecting calls. Day-to-day operations involve renewing TLS certificates before they expire, archiving old call records so the database doesn’t grow forever, and transcribing recordings for quality audits.
RustPBX bundles three addons that handle these chores automatically. Here’s how each one works.
ACME: Never Manually Renew a Certificate Again
SIP over TLS and HTTPS are non-negotiable for production. But managing SSL certificates is tedious – request, validate, install, restart, repeat every 90 days.
How It Works
The ACME addon integrates with Let’s Encrypt directly inside RustPBX. No certbot, no cron jobs, no manual steps.
Enable it in config.toml:
[proxy]
addons = ["sbc", "acme"]
Configure through Settings > ACME in the console:
| Setting | Default | Notes |
|---|---|---|
| Domain | - | The domain to issue a certificate for |
| Auto Renew | true | Monitor and renew automatically |
| Renewal Threshold | 72 hours | Renew this many hours before expiry |
| Reload HTTPS | true | Reload the HTTPS server after renewal |
| Reload SIP TLS | true | Reload SIP TLS transport after renewal |

The Flow
- You click Request Certificate in the console
- RustPBX provisions an HTTP-01 challenge at
/.well-known/acme-challenge/ - Let’s Encrypt validates ownership
- The certificate is issued and stored locally
- HTTPS and SIP TLS are reloaded – no downtime
Once auto-renew is on, a background task checks the certificate daily. When it approaches the threshold (72 hours by default), renewal triggers automatically.

You’ll see the current status (None / Running / Success / Error) right in the console.
Archive: Keep Your Database Lean
Call records accumulate fast. A busy platform generates millions of CDRs per month. The Archive addon moves old records out of the database and into compressed files, keeping queries fast and storage manageable.
Configuration
[proxy]
addons = ["sbc", "acme", "addon-archive"]
Settings in the console under Archive:
| Setting | Example | Notes |
|---|---|---|
| Archive Time | 03:00 | Daily schedule (runs at 3 AM) |
| Timezone | Asia/Shanghai | Interpret the schedule in this timezone |
| Archive After Days | 30 | Records older than 30 days get archived |
| Retention Days | 365 | Keep archive files for 1 year |
| Archive Directory | /data/archive | Where compressed files are stored |

What Happens
Each night at the scheduled time:
- The addon reads records older than
archive_after_days, day by day - Writes them to gzip-compressed CSV files (
archive/2026-04-01-callrecords.gz) - Deletes the archived records from the database
- Cleans up archive files older than
retention_days
The whole process is cursor-based and batched, so it doesn’t lock the database or impact active calls.
Manual Archival
Need to free up space right now? The console has a Manual Archive button where you specify a date range. Progress is tracked in real time – you can see how many records have been processed.

You can also browse existing archive files, check their sizes, and delete old ones from the console.
Transcript: Turn Recordings into Text
For quality assurance, compliance, or analytics, you often need to know what was said on a call. The Transcript addon converts call recordings into text automatically.
How It Works
[proxy]
addons = ["sbc", "acme", "addon-archive", "addon-transcript"]
The addon uses SenseVoice for offline speech-to-text. No cloud API calls – everything runs locally.
Configure through the console:
| Setting | Notes |
|---|---|
| Command Path | Path to sensevoice-cli binary |
| Models Path | Directory containing the ASR model |
| Language | Auto-detect or specify (en, zh, etc.) |
| Sample Rate | 16000 Hz default |
| Timeout | Max processing time per recording |
Triggering Transcription
From any Call Record detail page, click Transcribe. The addon:
- Locates the recording file (local disk or SipFlow RTP data)
- Invokes
sensevoice-cliwith the configured parameters - Stores the transcript with timestamps and segments
- Displays the result inline on the call record page

The transcript includes:
- Full text of the conversation
- Timestamped segments with start/end times
- Channel information (caller vs callee)
- Processing metrics (real-time factor, word count, model used)
Batch Processing
For bulk transcription, use the API to trigger transcription across multiple recordings. This is useful for retroactively processing historical calls after enabling the addon.
Putting It Together
These three addons address the most common operational tasks:
| Task | Addon | Before | After |
|---|---|---|---|
| TLS certificates | ACME | Manual renewal, expired certs | Auto-renew, zero-downtime reload |
| Database bloat | Archive | Slow queries, growing disk | Scheduled compression, lean database |
| Call QA | Transcript | Listen to every recording | Read transcripts, search by text |
All three are managed from the same console. No separate tools, no cron jobs to maintain, no shell scripts to debug.
What’s Next?
Archived records and transcriptions are useful, but what about debugging a live call? Seeing the SIP signaling, checking the media flow, accessing recordings on demand? That’s where SipFlow comes in. The next post covers how RustPBX captures and visualizes call flows, and how to deploy it at scale.