EP Voice Messages
EP Voice Messages adds a “Leave a Voice Message” button to any page on your PageMotor site. A visitor taps it, speaks, and the recording is sent to you. No file uploads, no phone calls.
You get an email for every message, and you listen to the recordings in the plugin’s own settings page in your admin. If you add your own OpenAI API key, each message is also turned into a written transcript that appears in the email and in the message list.
Published by ElmsPark Studio.
Overview
Section titled “Overview”Use cases:
- Voice feedback on a page. “What do you think of this article?” with spoken replies instead of typed ones.
- Testimonials. Customers leave a few words in their own voice.
- Problem reports. Visitors describe what went wrong out loud, which is often easier than typing it.
- Accessibility. Some people find speaking easier than a keyboard.
How it works
Section titled “How it works”- A visitor taps the voice message button on your page.
- Their browser asks for permission to use the microphone.
- They speak. A countdown shows how much recording time is left.
- They tap to stop, or the recording stops by itself when the time runs out. It is sent straight away; there is no separate send button.
- The visitor sees a thank-you message, and hears your thank-you recording if you have set one.
- The recording is saved privately on your server and added to your message list.
- If you have added an OpenAI API key, the recording is sent to OpenAI for a transcript. This happens after the visitor has already seen the thank-you, so they never wait for it.
- You get an email with the transcript (or a note saying why there is none) and a View in Admin button. The audio itself is not attached to the email; you listen to it in your admin.
Requirements
Section titled “Requirements”- PageMotor 0.7 or later.
- HTTPS on your site. Browsers only allow microphone access on secure pages.
- A modern browser for your visitors, with a microphone.
- EP Email (recommended) for sending the notification email. It goes out through the transport you chose in EP Email (SMTP, Mailgun, Brevo and so on) and shows in its delivery log. Without EP Email, the plugin uses PageMotor’s own email settings if you have set them up (PageMotor 0.11 and later), or your server’s built-in mail, which is less reliable.
- Your own OpenAI API key (optional), only if you want transcripts. You create it at platform.openai.com. Transcription is billed by OpenAI to your own OpenAI account. ElmsPark does not run a transcription service and does not charge for transcripts. Without a key, everything else works and you simply listen to the audio.
- For transcripts, your server must be able to make outgoing HTTPS connections (PHP’s cURL extension), which almost every host allows.
Installation
Section titled “Installation”ep-voice-messages.zipcomes with an EP Suite licence. ElmsPark supplies it directly (see EP Suite plugins); after install it updates through your site’s Updates screen.- Upload it via Plugins → Manage Plugins and activate it.
- Open the EP Voice Messages settings. Tick Enable and enter your Notification Email, then save. The button does not appear on your site until Enable is ticked.
- Optional: in the Transcription section, paste your OpenAI API key and save, if you want written transcripts.
- Put
[ep-voice-message]on any page where you want the button.
Shortcode
Section titled “Shortcode”| Shortcode | Purpose |
|---|---|
[ep-voice-message] | Shows the voice message button. It takes no attributes; the button text and the maximum length are set in the plugin’s settings. |
[voice-message] | Older form of the same shortcode. Pages that already use it keep working, but use [ep-voice-message] for anything new. |
There is no separate shortcode for viewing messages. Received messages are listed in the plugin’s settings page in your admin (see Listening to your messages).
Settings
Section titled “Settings”Voice Messages
Section titled “Voice Messages”- Enable. Turns the button on. When this is off, the shortcode shows nothing.
- Notification Email. Where the message emails go. Leave it blank and no email is sent, though messages are still saved in your admin.
- Max Recording Duration. 5, 10, 15, 20, 30, 45 or 60 seconds. Default 30 seconds. The recording stops by itself when the time is up.
- Button Text. The words on the button. Default “Leave a Voice Message”.
Thank-You Audio
Section titled “Thank-You Audio”An optional short recording played to the visitor after they send their message. You can either record it in your browser right there in the settings (Record, Stop, then Save or Discard), or upload an audio file (MP3, WAV, OGG, M4A or WebM). Because visitors need to hear it, the thank-you audio is stored as a normal public file, unlike the messages visitors send you.
Transcription
Section titled “Transcription”- OpenAI API Key. Optional. Paste a key from your own OpenAI account to get a written transcript of every message, made with OpenAI’s Whisper speech-to-text model. Each recording is sent to OpenAI and the cost is billed to your OpenAI account. The key is stored encrypted on your server and is only ever sent to OpenAI. Leave it blank and transcription is off: your notification email says so, and you listen to the audio instead.
Security
Section titled “Security”- Messages per Hour. The most voice messages one visitor (one IP address) can send in an hour. Default 5. A visitor who goes over sees “You have reached the message limit. Please try again later.”
- Retention (Days). Messages older than this are deleted automatically, recording and transcript together. Default 90 days. The clean-up runs at most once a day, when an administrator opens the admin. Leaving the box blank, or entering 0, uses the 90-day default; there is no setting to keep messages forever.
The button also includes a hidden spam trap that catches most automated submissions without bothering real visitors.
Listening to your messages
Section titled “Listening to your messages”At the bottom of the EP Voice Messages settings page is a Voice Messages list, with a count of new messages beside its title. For each message it shows:
- The date it arrived.
- The start of the transcript (click it to read the whole thing), or “No transcript”.
- Whether it is New or Read.
- An audio player, so you can listen in the browser.
- Mark Read and Delete buttons.
You can also tick several messages, or Select all, and use Delete Selected. The list shows 20 messages per page. Deleting a message removes its recording from your server as well.
The View in Admin button in each notification email takes you to your admin, where you can go to this list.
Privacy
Section titled “Privacy”- Recordings are private. They are saved in PageMotor’s protected uploads folder on your own server, under random file names, and only a signed-in administrator can play them. They are not stored with ElmsPark or any other third party.
- Transcription goes to OpenAI, only if you turn it on. With an API key saved, each recording is sent to OpenAI under your own OpenAI account, and OpenAI’s API terms and data policies apply to it. Without a key, recordings never leave your server.
- What is kept with each message: the recording, the transcript (if any), the date, and the visitor’s IP address. The IP address is used for the hourly limit and is shown in the notification email.
- Microphone access is granted by the visitor in their own browser. The plugin does not track visitors.
- Voice is personal data. If a visitor asks you to erase their data, find their message in the list and delete it; that removes the recording and the transcript. Consider mentioning voice messages, and OpenAI if you use transcription, in your privacy policy.
Troubleshooting
Section titled “Troubleshooting””The button doesn’t appear on my page”
Section titled “”The button doesn’t appear on my page””Check that Enable is ticked in the settings and saved, and that the page uses [ep-voice-message].
”The button doesn’t ask for microphone permission”
Section titled “”The button doesn’t ask for microphone permission””The page must be on HTTPS; browsers block microphone access on insecure pages. Some browser extensions also block it, so try a private window. If the visitor once refused permission, they need to allow the microphone again in their browser’s site settings.
”Recording works but sending fails”
Section titled “”Recording works but sending fails””The visitor sees “Upload failed. Please try a supported audio format.” or “Something went wrong.” Recordings are small (a 60-second message is usually well under 1 MB), so a very low upload size limit on your host is the most likely cause. Ask your host to check PHP’s upload limits.
”The email says there is no transcript”
Section titled “”The email says there is no transcript””The email tells you why:
- “Transcription is off” means no OpenAI API key is saved. Add one in the Transcription section if you want transcripts.
- “OpenAI did not return one” means OpenAI refused the request. Check that the key is correct and still active, and that your OpenAI account has credit or billing set up.
”The transcript is inaccurate”
Section titled “”The transcript is inaccurate””Speech-to-text is usually very good but can struggle with heavy background noise, strong accents or unusual names. Treat the transcript as a convenience; the recording is the real message.
”The notification email didn’t arrive”
Section titled “”The notification email didn’t arrive””Check that Notification Email is filled in. Then check EP Email’s log, if you use EP Email, and your spam folder. The message is saved in your admin list either way, so nothing is lost.
”Recordings are taking up disk space”
Section titled “”Recordings are taking up disk space””Lower Retention (Days), or delete messages you have dealt with from the list. Deleting a message deletes its recording.
Feedback and corrections
Section titled “Feedback and corrections”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.
Changelog
Section titled “Changelog”1.1.16
Section titled “1.1.16”- Message notifications now go out through EP Email’s chosen transport. When a visitor left a voice message, the notification email was sent through your server’s built-in mail instead of the transport set in EP Email, unless that transport was SMTP. On a site using Mailgun, Brevo, SendGrid or another sending service through EP Email, the email could arrive late, land in spam, or not arrive at all. It now goes out through the same transport as the rest of your site’s email, and appears in EP Email’s delivery log.
- Without EP Email, the notification uses PageMotor’s own email settings when they are set up (PageMotor 0.11 and later), and your server’s built-in mail otherwise.
1.1.15
Section titled “1.1.15”- Transcripts from your own OpenAI account. A new Transcription section in the settings takes an OpenAI API key. With a key saved, each voice message is transcribed by OpenAI’s Whisper service and the written transcript appears in the notification email and in the message list. OpenAI bills the transcription to your own OpenAI account. The key is stored encrypted on your server and is only ever sent to OpenAI.
- The email now says why a transcript is missing. With no key saved it tells you transcription is off and where to turn it on. If OpenAI turns the request down (a wrong key, or no credit on the account) it says so, so you know what to check.
- Voice recordings are now stored privately. They are kept in PageMotor’s protected uploads folder under random file names, and play only for a signed-in administrator. Recordings you already have are moved there automatically the first time the site is visited after the update. Nothing is deleted.
- The “View in Admin” button in the notification email now opens your admin on current PageMotor versions, and the play buttons in the message list use the same address.
1.1.14
Section titled “1.1.14”- Fixes the developer-mode direct Whisper transcription key sometimes not being picked up. On ElmsPark’s own EP_VOICE_MESSAGES_DEV testing builds, a voice message recorded right as the widget’s own AJAX request was handled could read the pre-decryption placeholder for the OpenAI key instead of the real one, so the transcript came back empty. This does not affect customer sites, which do not use this setting. It now reads the securely stored value on that path.
- Settings language menu. The language menu in this plugin’s settings now lists only the languages it is actually translated into, plus English, so you can no longer pick a language that changes nothing.
- Danish. Adds a Danish translation.
- Removes a function call that PHP 8.5 reports as deprecated, so it no longer fills your error log.
1.1.13
Section titled “1.1.13”- Fixes a doubled cache-busting tag on its recorder stylesheet. On PageMotor 0.11 and later the page asked for the file with two version tags on the end of its address (
?v=…?v=…), because the core had started adding its own tag and the plugin was still adding one too. The file loaded correctly, so nothing was visibly broken; the address was just malformed and every cache saw a longer key than it needed. The plugin now leaves the tag to the core on 0.11 and later, and still adds its own on older cores, where nothing else would. - No change to what that stylesheet does.
1.1.12
Section titled “1.1.12”- Fixes stored keys and passwords reading as empty after a PageMotor 0.11.3 or 0.11.4 update. After the core update, every secret this plugin had encrypted at rest came back blank, so anything that needed it failed with an authentication error until the value was typed in again. Nothing was deleted: the encrypted value was still in the settings row, but PageMotor 0.11.3 moved the site secret that opens it, and this plugin was still looking in the old place. It now finds the secret in both places, so an existing value opens again without re-entry, and a value that was re-entered in the meantime keeps working and is moved back under the site secret.
- If you updated PageMotor and then re-entered a key or password, there is nothing to do. If you updated and have not re-entered it, this release restores it on the next page load.
1.1.11
Section titled “1.1.11”- Carries the suite-wide change to storing API keys encrypted, although this plugin was never exposed. Its API key field only exists on a developer install, so a normal installation has no such field and there was never anything to read. No change you will notice.