Vbee AIVoice – Text to Speech

Description

Vbee AIVoice – Text to Speech là công cụ chuyển văn bản thành giọng nói chuyên nghiệp dành cho website WordPress, giúp nội dung trên website trở nên sinh động, dễ tiếp cận và tối ưu trải nghiệm cho mọi nhóm người nghe.

Plugin hỗ trợ chuyển nội dung bài viết thành audio thông qua Vbee Text-to-Speech API, lưu file audio về website và tự động hiển thị trình phát audio ở ngoài frontend.

Để được hỗ trợ cài đặt và kết nối API, bạn có thể liên hệ trực tiếp với đội ngũ Vbee qua Zalo: https://zalo.me/vbeeai, Facebook: https://www.facebook.com/vbeeai

Features:

  • Convert post content to audio with one click from the Posts list.
  • Support for multiple voices per post; the frontend player lets visitors switch between them.
  • Automatic frontend audio player insertion — no shortcode required.
  • Background polling and a webhook callback so audio appears as soon as it is ready.
  • “Kiểm tra lại” (check again) action and detailed error information if a conversion fails.
  • Bulk create and bulk delete audio from the Posts list.
  • Locally-hosted mp3 files stored in wp-content/uploads/vbee-audios/.

This plugin connects to the Vbee Text-to-Speech API, a third-party service operated by Vbee, to perform the actual text-to-speech conversion. See “External Service” below for full details of what is sent and when.

External Service

This plugin connects to the Vbee Text-to-Speech API to convert post content into audio.

When an administrator or editor clicks “Create audio” (including bulk create) for a post, the plugin sends the following data to Vbee:

  • The text content of the selected WordPress post, after stripping HTML tags.
  • The selected voice code(s).
  • Audio settings such as output format, bitrate, and speed.
  • The site’s configured Vbee App ID and Token, for authentication.
  • A webhook URL (a WordPress REST route on this site) so Vbee can notify the site when audio generation is complete.
  • The header x-application-type: WORDPRESS, which allows Vbee to identify requests created from the WordPress plugin. This is the only tracking-related header sent; it does not contain a website identifier, install ID, or domain.

The plugin does not send a plugin install ID, a website tracking ID, the site domain for analytics purposes, or WordPress user personal data.

This service is provided by Vbee (https://vbee.vn):

  • Vbee Terms of Use: https://policy.vbee.vn/chinh-sach-va-dieu-khoan/dieu-khoan-su-dung-dich-vu-vbee-aivoice
  • Vbee Privacy Policy: https://policy.vbee.vn/chinh-sach-va-dieu-khoan/chinh-sach-bao-mat

Support

Để được hỗ trợ cài đặt và kết nối API, bạn có thể liên hệ trực tiếp với đội ngũ Vbee qua các kênh:

  • Hotline: 024 9999 3399
  • Zalo: https://zalo.me/vbeeai
  • Facebook: https://www.facebook.com/vbeeai

License

This plugin is licensed under GPLv2 or later. See https://www.gnu.org/licenses/gpl-2.0.html for the license text.

All plugin code and bundled assets are released under GPLv2 or later, unless otherwise noted.

Installation

  1. Create an account at https://vbee.vn and https://api.vbee.vn/apps, then subscribe to a plan.
  2. Create an App ID and Token for your application in the Vbee dashboard.
  3. In WordPress, go to Vbee Setting and enter:
    • API Address URL (default: https://api.vbee.vn/v1/tts)
    • App ID
    • Token
    • Bit Rate (default: 128)
    • Speed (default: 1.0)
    • The voice(s) you want to generate audio for
  4. Go to Posts > All Posts and click “Tạo audio” (Create audio) on any post.

FAQ

Do I need to add a shortcode to show the player?

No. The audio player is inserted automatically at the top of a post’s content once audio has been generated successfully. There is no supported shortcode. A legacy [vbee_audio] tag left over from older versions is treated as a no-op: it will not print as raw text and will not render an extra player.

Where are the audio files stored?

Locally, in wp-content/uploads/vbee-audios/, named {post_id}--{voice_code}.mp3.

Reviews

There are no reviews for this plugin.

Contributors & Developers

“Vbee AIVoice – Text to Speech” is open source software. The following people have contributed to this plugin.

Contributors

Changelog

2.1.8

  • Fixed WordPress.org Plugin Review pre-review issues:
  • Text Domain changed from vbee-aivoice to vbee-aivoice-text-to-speech to match the assigned WordPress.org plugin slug, updated in the plugin header, load_plugin_textdomain(), and every translation function call.
  • Renamed the plugin folder to vbee-aivoice-text-to-speech and the main plugin file to vbee-aivoice-text-to-speech.php to match the slug.
  • Removed the inline <style> tag previously echoed by the settings page; its CSS now lives in assets/css/vbee-admin.css and is loaded with wp_enqueue_style() only on the Vbee Setting page.
  • Added the standard if ( ! defined( 'ABSPATH' ) ) { exit; } direct-file-access guard to every PHP file in the plugin, replacing the previous non-standard guard.
  • No functional changes: audio generation, polling, retry, error details, delete, bulk actions, the frontend player, and the x-application-type: WORDPRESS header are unchanged.

2.1.7

  • Fixed a WordPress.org submission rejection: Plugin URI and Author URI were identical. Plugin URI is now https://vbee.vn/text-to-speech (the Vbee Text-to-Speech product page) and Author URI remains https://vbee.vn (the Vbee company website).
  • No functional changes: audio generation, polling, retry, error details, delete, bulk actions, the frontend player, and the x-application-type: WORDPRESS header are unchanged.

2.1.6

  • Renamed the plugin display name to “Vbee AIVoice – Text to Speech” (removed the word “Plugin”), in the plugin header Plugin Name, the readme title, the readme metadata, changelog mentions, and the privacy-policy display text, per WordPress.org’s restriction on using “Plugin” in a plugin’s display name/permalink.
  • Folder (vbee-aivoice), main plugin file (vbee-aivoice.php), and text domain (vbee-aivoice) are unchanged.
  • No functional changes: audio generation, polling, retry, error details, delete, bulk actions, the frontend player, and the x-application-type: WORDPRESS header are unchanged.

2.1.5

  • Renamed the plugin to “Vbee AIVoice – Text to Speech” (plugin header Plugin Name, readme title, and privacy-policy display text) for keyword optimization; the plugin’s technical function names were not changed.
  • Renamed the plugin folder to vbee-aivoice and the main plugin file to vbee-aivoice.php.
  • Changed the text domain from vbee-text-to-speech to vbee-aivoice in the plugin header, load_plugin_textdomain(), and every translation function call.
  • Added vietnamese voice and ai voice tags and updated the readme short description.
  • No functional changes: audio generation, polling, retry, error details, delete, bulk actions, the frontend player, and the x-application-type: WORDPRESS header are unchanged.

2.1.4

  • Updated the plugin header Description (shown in WordPress Admin > Plugins) to the full Vietnamese marketing copy plus Zalo/Facebook contact links, kept on a single line with no HTML.
  • Updated the readme Description section to match the same Vietnamese copy, and updated the Support section’s Zalo link to https.
  • No functional changes: audio generation, polling, retry, error details, delete, bulk actions, the frontend player, and the x-application-type: WORDPRESS header are unchanged.

2.1.3

  • Added the official Vbee Terms of Use and Privacy Policy URLs to the “External Service” section, replacing the previous TODO placeholders.
  • Updated readme Contributors to vbeeai and Description to include the Vietnamese marketing copy and Vbee contact channels, plus a new “Support” section with the same contact details.
  • Renamed the plugin folder and main plugin file to the vbee-text-to-speech slug for WordPress.org consistency (see final report for details).
  • Cleaned up the plugin header Description to short, plain text (no contact info, no HTML).
  • No functional changes: audio generation, polling, retry, error details, delete, bulk actions, the frontend player, and the x-application-type: WORDPRESS header are unchanged.

2.1.2

  • Text Domain changed from vbee to vbee-text-to-speech to match the intended plugin slug; all translation function calls and the load_plugin_textdomain() call were updated to match.
  • Reformatted the Vbee Terms of Use / Privacy Policy links in the “External Service” section into explicit TODO markers — the official URLs were not available and were intentionally not invented; they must be filled in before submission.
  • No functional changes: audio generation, polling, retry, error details, delete, bulk actions, the frontend player, and the x-application-type: WORDPRESS header are unchanged.

2.1.1

  • Prepared for WordPress.org Plugin Directory submission: cleaned up the plugin header (removed HTML markup and contact info, added License / License URI), rewrote readme.txt in standard WordPress.org format, added LICENSE.txt, and added an “External Service” section disclosing exactly what data is sent to the Vbee API and when.
  • Added a short, non-intrusive admin notice on the Vbee Setting page near the App ID/Token fields disclosing that post text is sent to Vbee when audio is created, including the x-application-type: WORDPRESS header.
  • Added suggested Privacy Policy content via wp_add_privacy_policy_content() (Settings -> Privacy -> Policy Guide).
  • Replaced the bundled loading GIF with a CSS-only spinner and removed assets/images/vbee-load.gif (unclear image licensing) along with non-essential release files (.gitignore, a stale CSS source map).
  • No change to tracking or data sent: x-application-type: WORDPRESS remains the only tracking-related header; no install ID or website tracking was added.

2.1.0

  • Added the x-application-type: WORDPRESS header to every request the plugin sends to the Vbee API (Create TTS request and Get Request status polling), so Vbee’s backend can attribute requests to the WordPress plugin. No new endpoint, no install ID, and no site/domain/user data is sent.

2.0.4

  • Removed the [vbee_audio] shortcode as a supported feature. The audio player now only ever appears via automatic insertion at the top of the post content when that post has valid audio (check_audio = 1).
  • Older posts that still contain a literal [vbee_audio] tag no longer show it as raw text on the frontend; the tag is now a no-op that renders nothing and does not affect auto-insertion.

2.0.3

  • Fix: Get Request polling now normalizes every status alias Vbee may return (COMPLETED/SUCCESS/DONE, PROCESSING/IN_PROGRESS/QUEUED, FAILED/FAILURE) and reads the audio link from any of audioLink, audio_link, or nested data/result objects.
  • Fix: transient/unclear Get Request errors (empty response, HTTP 5xx, “not found”, timeouts) no longer immediately fail the whole post; they are treated as retryable and polling/”Kiểm tra lại” can recover once Vbee actually finishes.
  • Added raw Get Request debug meta (_vbee_last_get_http_code, _vbee_last_get_raw_body, _vbee_last_get_response) alongside the existing per-voice debug meta.
  • Admin column now offers a “Kiểm tra lại” action on both “Đang tạo audio” and “Convert audio lỗi” rows, which re-checks the existing request instead of creating a new one.
  • Added a “Chi tiết lỗi” action on failed rows that copies full debug info (voices, request IDs, last status/error, last Get Request response, last download result) to the clipboard for bug reports.
  • REST callback now accepts the same status/field aliases as polling, and secret/request_id mismatches are logged without wrongly marking a voice as permanently failed.

2.0.2

  • Fix: polling and the REST callback could leave a post stuck on “Convert audio lỗi” even though Vbee had already generated the audio.
  • Added detailed per-voice debug/error meta (_vbee_voice_states, _vbee_last_status, _vbee_last_error, _vbee_last_request_id, _vbee_last_audio_link, _vbee_last_download_result) so failures show a real reason instead of a generic message.
  • Local audio detection now requires the mp3 to exist AND have a size greater than 0 before it is considered valid.
  • The REST callback now updates only the voice it was called for and recalculates the post’s overall status from all requested voices, instead of one voice’s callback deciding the whole post’s state.
  • Admin list now shows the real failure reason (with a tooltip) instead of a generic “Convert audio lỗi”.
  • Admin JS no longer permanently marks a post as failed just because the browser’s polling timeout was reached; it offers a “Kiểm tra lại” action that re-checks the existing request instead of creating a new one.

2.0.1

  • Packaging update.

2.0.0

  • Rewritten for the new Vbee async TTS API (api.vbee.vn), PHP 8 compatibility, REST webhook callback, and multi-voice support.