Skip to content

EP Voice Messages

EP Voice Messages adds a voice recording widget to PageMotor. Visitors click, record, and submit audio directly from their browser — no file uploads, no phone calls. The message is transcribed automatically, the admin gets an email notification with the audio file and the transcript.

Published by ElmsPark Studio.

Use cases:

  • Voice feedback on a page. “What do you think of this article?” — voice replies instead of typing.
  • Testimonials. Authentic-sounding testimonials in the customer’s own voice.
  • Bug reports. Visitors describe the problem out loud, easier than typing.
  • Accessibility. Some users find voice easier than keyboard input.
  1. Visitor clicks the record button on your page.
  2. Browser asks for microphone permission.
  3. Visitor records. A timer shows elapsed seconds.
  4. Visitor clicks stop, then submit.
  5. Audio uploads to your server.
  6. A background transcription job runs (using OpenAI Whisper or similar).
  7. Admin gets an email via EP Email with the audio as attachment and the transcript inline.
  • PageMotor 0.8.2b or later
  • EP Email (for admin notification)
  • EP Suite base class
  • A transcription API key (OpenAI Whisper, AssemblyAI, or configured alternative)
  1. Install EP Email.
  2. Download ep-voice-messages.zip from the EP Suite downloads page.
  3. Upload via Plugins → Manage Plugins. Activate.
  4. Configure the transcription provider API key in settings.
  5. Drop [voice-message] on any page.
ShortcodePurpose
[voice-message]Record widget. Attributes: max_seconds=60 (default 60), prompt="Tell us..." (default generic).
[voice-messages-inbox]Admin-only inbox view of all received messages with playback and transcript.
  • Transcription provider. OpenAI Whisper, AssemblyAI, or others.
  • API key.
  • Max recording duration. Enforced client-side (prevents huge uploads). Default 60 seconds.
  • Admin notification email. Where notifications go.
  • Storage. Where to save audio files. Default is user-content/uploads/voice-messages/<date>/.
  • Auto-delete after. Days. Default 90. Set to 0 for no auto-delete.

From [voice-messages-inbox] on an admin-only page:

  • List of every received message.
  • Play each in-browser.
  • Read the transcript.
  • Download the audio file.
  • Delete individual messages.
  • Recordings are stored on your server, not a third-party service (the transcription API does process them briefly to generate the transcript, but doesn’t store).
  • Visitors grant microphone permission per-session. No persistent tracking.
  • GDPR-wise: voice is personal data. If a visitor invokes right-to-erasure, delete their recordings manually. EP GDPR integration may help.

“Record button doesn’t request mic permission”

Section titled ““Record button doesn’t request mic permission””

Browser quirk. Check the page is HTTPS (mic requires secure context). Some extensions block mic requests; test in incognito.

“Recording works but submission fails”

Section titled ““Recording works but submission fails””

Check max file size vs PHP upload limits. A 60-second recording is typically 500KB to 1MB. PHP defaults usually handle that, but if you have low limits, raise them.

Whisper is usually very good but struggles with heavy accents, background noise, or unusual names. Transcripts are a convenience; the original audio is the source of truth.

Check EP Email log. Also check the transcription finished — if transcription fails (API timeout), the whole job might fail.

Auto-delete is on by default at 90 days. Verify. Or clean up manually from the storage path.

For a quick question about this plugin, EP Support inside your admin is the fastest option. The chat widget sits on every EP plugin settings page and knows which one you’re on, with starter questions and links preloaded for that exact screen.

For anything bigger — a bug report, a feature request, or a “how do I…” that needs a real reply — open a ticket at help.elmspark.com. A real person, helped by AI, writes the reply. Usually within a few hours. Tickets don’t disappear into the void.