Operations Made Easy: Archive, ACME, and Transcript

M
Miuda Team
Building conversational AI tooling
Rust Telephony SIP

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:

SettingDefaultNotes
Domain-The domain to issue a certificate for
Auto RenewtrueMonitor and renew automatically
Renewal Threshold72 hoursRenew this many hours before expiry
Reload HTTPStrueReload the HTTPS server after renewal
Reload SIP TLStrueReload SIP TLS transport after renewal

ACME configuration

The Flow

  1. You click Request Certificate in the console
  2. RustPBX provisions an HTTP-01 challenge at /.well-known/acme-challenge/
  3. Let’s Encrypt validates ownership
  4. The certificate is issued and stored locally
  5. 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.

ACME status

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:

SettingExampleNotes
Archive Time03:00Daily schedule (runs at 3 AM)
TimezoneAsia/ShanghaiInterpret the schedule in this timezone
Archive After Days30Records older than 30 days get archived
Retention Days365Keep archive files for 1 year
Archive Directory/data/archiveWhere compressed files are stored

Archive settings

What Happens

Each night at the scheduled time:

  1. The addon reads records older than archive_after_days, day by day
  2. Writes them to gzip-compressed CSV files (archive/2026-04-01-callrecords.gz)
  3. Deletes the archived records from the database
  4. 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.

Manual archive

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:

SettingNotes
Command PathPath to sensevoice-cli binary
Models PathDirectory containing the ASR model
LanguageAuto-detect or specify (en, zh, etc.)
Sample Rate16000 Hz default
TimeoutMax processing time per recording

Triggering Transcription

From any Call Record detail page, click Transcribe. The addon:

  1. Locates the recording file (local disk or SipFlow RTP data)
  2. Invokes sensevoice-cli with the configured parameters
  3. Stores the transcript with timestamps and segments
  4. Displays the result inline on the call record page

Transcript result

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:

TaskAddonBeforeAfter
TLS certificatesACMEManual renewal, expired certsAuto-renew, zero-downtime reload
Database bloatArchiveSlow queries, growing diskScheduled compression, lean database
Call QATranscriptListen to every recordingRead 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.