# Better Messages - WordPress Private Messaging Plugin > Documentation for Better Messages, a real-time private messaging plugin for WordPress with WebSocket support, video/audio calls, AI chatbots, and mobile apps. ## Additional Documentation - [Hooks & Functions Full Content](/llms-hooks-full.txt) — PHP and JavaScript hooks, filters, and functions - [REST API Full Content](/llms-rest-api-full.txt) — All REST API endpoints ## Voice Messages Voice Messages is an addon for Better Messages that allows users to send recorded voice messages in conversations. ## How it works When installed, a microphone button appears in the message input area. Users can press and hold (or click to toggle) to record a voice message, then send it like any other message. Recorded voice messages are stored on your website hosting in efficient MP3 format and do not consume much storage space. Optional AI-powered transcription via OpenAI can automatically generate text transcripts of voice messages. ## Key capabilities - Record and send voice messages directly in conversations - Microphone button in the message input area - Efficient MP3 format storage on your server - Configurable maximum recording duration - Auto-deletion of voice messages after a specified number of days - Role-based restrictions for sending voice messages - Optional AI-powered transcription via OpenAI - Playback controls for received voice messages - Works in all conversation types (private, group, chat rooms) ## How to install Install the Voice Messages addon through the WordPress plugins screen or upload the addon files to your `/wp-content/plugins/` directory. Activate the addon through the **Plugins** screen. ## Settings Configure the addon at **WP Admin → Better Messages → Settings → Voice Messages**. ### Max Recording Duration Set the maximum recording duration in seconds. During recording, a timer displays the current and maximum time. The timer turns red when 10 seconds or less remain, and recording automatically stops when the limit is reached. ### Auto-Delete Automatically delete voice messages after a specified number of days. Set to `0` to disable auto-deletion. Two deletion modes are available: - Complete — fully deletes the message from the conversation - Replace — removes the audio file but keeps the message with a "Voice message expired" indicator ### Role Restrictions Restrict which user roles can send voice messages. Selected roles will not see the microphone button in the message input area. ### Voice Transcription Enable AI-powered transcription via OpenAI to automatically generate text transcripts of voice messages. Requires an OpenAI API key configured in the plugin settings. ## Troubleshooting ### Incorrect response MIME type error On some servers, you may see the following error when trying to record a voice message: :::danger Error message Error: TypeError: Failed to execute 'compile' on 'WebAssembly': Incorrect response MIME type. Expected 'application/wasm'. ::: There are two ways to fix this: 1. **Configure your server** to serve the WASM file at `https://yourdomain.com/wp-content/plugins/bp-better-messages-voice-messages/assets/js/encoder.wasm` with the `Content-Type: application/wasm` header. 2. **Add this line** to your website's `wp-config.php` file: ```php define('BETTER_MESSAGES_WASM_FALLBACK', true); ``` After applying either fix, voice message recording will work correctly. --- ## Change avatar size This is an example of how to increase or change avatar size in the threads list: ```CSS .bp-messages-wrap .bp-messages-side-threads .threads-list .thread .pic { width: 50px !important; height: 50px !important; } .bp-messages-wrap .bp-messages-side-threads .threads-list .thread .pic img { width: 50px !important; height: 50px !important; } .bp-messages-wrap .bp-messages-side-threads .threads-list .thread .pic.group>* { width: 24px !important; height: 24px !important; } .bp-messages-wrap .bp-messages-side-threads .threads-list .thread .pic.group>* .avatar { width: 24px !important; height: 24px !important; } ``` --- ## Change text size This is an example of how to increase or change text size in Better Messages interface: ```CSS :root{ --bm-message-font-size: 16px; --bm-message-line-height: 20px; } .bp-messages-wrap .threads-list .thread .bm-info .last-message{ font-size: 14px !important; line-height: 16px !important; } .bp-messages-wrap .threads-list .thread .bm-info .name+h4{ font-size: 12px !important; line-height: 14px !important; } .bp-messages-wrap .threads-list .thread .bm-info .name { font-size: 15px; line-height: 15px; } .bp-messages-wrap .threads-list .thread .bm-info h4 { font-size: 15px; line-height: 15px; } ``` --- ## Customize the radius of the mobile chat button ```CSS #bp-better-messages-mini-mobile-open { border-radius: 25px !important; } ``` ### Example of rounded mobile chat button --- ## Replacing verified icon ```CSS span.bm-name-verified{ height: 12px; } span.bm-name-verified svg{ display: none; } span.bm-name-verified::before{ content: url("data:image/svg+xml,%3Csvg stroke='currentColor' fill='currentColor' stroke-width='0' viewBox='0 0 24 24' height='12px' width='12px' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill='none' d='M0 0h24v24H0z'%3E%3C/path%3E%3Cpath d='M12 1L3 5v6c0 5.55 3.84 10.74 9 12 5.16-1.26 9-6.45 9-12V5l-9-4zm-2 16l-4-4 1.41-1.41L10 14.17l6.59-6.59L18 9l-8 8z'%3E%3C/path%3E%3C/svg%3E"); } ``` ### Example of replaced verified icon --- ## How to add a custom file format for uploader? :::info REQUIREMENTS To be able to implement this guide, you need to learn how to insert PHP snippets to your website. You can find guide here: [WP Beginner](https://www.wpbeginner.com/beginners-guide/beginners-guide-to-pasting-snippets-from-the-web-into-wordpress/) ::: Better Messages file uploader rely on WordPress file uploader and media gallery to ensure good compatibility with WordPress plugins ecosystem. To add a custom file format, you need to register it with special php filters. For example, if you want to add .emb format, the code will look like that: ```php $filetype['ext'], 'type' => $filetype['type'], 'proper_filename' => $data['proper_filename'] ]; } else { return $data; } } ``` This code is just an example. For other extensions, you will need to modify this code, based on your requirements. After this you will be able to enable this file format in Better Messages Attachments settings and be able to upload this type of files. --- ## Custom messages location :::info REQUIREMENTS To be able to implement this guide, you need to learn how to insert PHP snippets to your website. You can find guide here: [WP Beginner](https://www.wpbeginner.com/beginners-guide/beginners-guide-to-pasting-snippets-from-the-web-into-wordpress/) ::: By settings custom messages location its possible to integrate plugin with any other plugin or theme as messages system. To display layout of plugin at any custom place of website you can use this function: ```php functions->get_page(); ``` After that done need to point to custom place location url with next filter, so the notifications of plugin are directing to the right place: ```php ## Without PWA plugin To make that working without additional PWA plugins, you need to make basic PWA version of your website. To make that easily website must have manifest.json file located in root of website. This is example of basic `manifest.json` file: ```json { "short_name": "wordplus.org", "name": "WordPlus.org", "icons": [], "start_url": "./", "display": "standalone", "orientation": "portrait" } ``` More advanced `manifest.json` file guide can be found [here](https://web.dev/add-manifest/) Besides that you need to add manifest.json link to your website head part, you can do it with php snippet for example: ```php add_action( 'wp_head', function (){ echo ''; } ``` After that website must be added to ios home-screen as web application and web push feature will start to work there. ## With PWA plugin If you want to make it work with ready to use [PWA Plugins](https://wordpress.org/plugins/tags/pwa/), you need to find the plugin which will be compatible with [OneSignal push notifications](/docs/integrations/onesignal/) integration as with most of PWA solutions the built-in WebPush notifications system of Better Messages will not work due to browser limitations to the number of service workers. --- ## How to replace email notifications with custom layout? :::tip Built-in Customization Options Before using this filter, consider the built-in [Email Template Customization](/docs/features/email-notifications#email-template-customization) options. You can customize colors, logo, text, and even use a custom HTML template directly from the plugin settings without writing code. ::: Use this filter only when you need programmatic control over email content, such as dynamic templates based on user roles or conditional content. :::info REQUIREMENTS To be able to implement this guide, you need to learn how to insert PHP snippets to your website. You can find guide here: [WP Beginner](https://www.wpbeginner.com/beginners-guide/beginners-guide-to-pasting-snippets-from-the-web-into-wordpress/) ::: ```php subject; $email_subject = '[' . get_bloginfo('name') . '] You have unread messages:' . $subject; $thread_url = esc_url( Better_Messages()->functions->add_hash_arg('conversation/' . $thread_id, [], Better_Messages()->functions->get_link($user_id) ) ); /** * Composing html messages list */ $messageHtml = ''; $last_id = 0; foreach ($messages as $message) { $sender = get_userdata($message->sender_id); $timestamp = strtotime($message->date_sent) + $gmt_offset; $time_format = get_option('time_format'); if (gmdate('Ymd') != gmdate('Ymd', $timestamp)) { $time_format .= ' ' . get_option('date_format'); } $time = wp_strip_all_tags(stripslashes(date_i18n($time_format, $timestamp))); $author = wp_strip_all_tags(stripslashes(sprintf(__('%s wrote:', 'bp-better-messages'), $sender->display_name))); $message = wp_strip_all_tags(stripslashes($message->message)); if ($last_id == 0 || $last_id != $sender->ID) { $messageHtml .= '' . $author . ''; } $messageHtml .= ''; $messageHtml .= '' . $message . ''; $messageHtml .= '' . $time . ''; $messageHtml .= ''; $last_id = $sender->ID; } $messageHtml .= ''; /** * Composing Email HTML */ ob_start(); ?> Simple Transactional Email   Hi display_name; ?>, You have unread messages: "" ">Go to the discussion to reply or catch up on the conversation. ">   user_email, $email_subject, $content ); remove_filter( 'wp_mail_content_type', $content_type ); // If true is returned the plugin will not send email itself, if false is returned it will send. return true; } ``` --- ## How to customize sounds in the plugin? ## Built-in Sound Customization Better Messages provides built-in options to customize sounds directly from the plugin settings without any code. Navigate to **Better Messages → Settings → Notifications** tab and scroll to the **Sounds Customization** section. ### Available Options #### Message Notification Sound - **Volume** - Set from 0 to 100 (set to 0 to disable the sound completely) - **Custom Sound** - Click "Select custom sound" to choose an MP3 file from your WordPress Media Library - **Reset** - Click "Reset default sound" to restore the original notification sound #### Message Sent Sound - **Volume** - Set from 0 to 100 (set to 0 to disable the sound completely) - **Custom Sound** - Click "Select custom sound" to choose an MP3 file from your WordPress Media Library - **Reset** - Click "Reset default sound" to restore the original sent sound #### Incoming Call Sound (Premium) - **Volume** - Set from 0 to 100 (set to 0 to disable the sound completely) - **Custom Sound** - Click "Select custom sound" to choose an MP3 file from your WordPress Media Library - **Reset** - Click "Reset default sound" to restore the original incoming call sound #### Outgoing Call Sound (Premium) - **Volume** - Set from 0 to 100 (set to 0 to disable the sound completely) - **Custom Sound** - Click "Select custom sound" to choose an MP3 file from your WordPress Media Library - **Reset** - Click "Reset default sound" to restore the original outgoing call sound :::tip You can preview any sound by clicking the "Play" button before saving your changes. ::: ## Advanced: Replace Sounds Folder via Code :::info REQUIREMENTS To be able to implement this guide, you need to learn how to insert PHP snippets to your website. You can find guide here: [WP Beginner](https://www.wpbeginner.com/beginners-guide/beginners-guide-to-pasting-snippets-from-the-web-into-wordpress/) ::: If you need to replace multiple sound files programmatically, you can use the `bp_better_messages_sounds_assets` filter. Plugin keeps default sound files in this folder: **/plugins/bp-better-messages/assets/sounds** You can copy this folder to another location that won't be overwritten on plugin updates, then use this filter to point to your custom sounds folder: ```php 1, //Sender User ID 'thread_id' => false, 'recipients' => $user_id, 'subject' => 'Welcome to WordPlus.org', 'content' => "Welcome to WordPlus.org\n\n If you have any question about Better Messages you can ask it here directly.", 'date_sent' => bp_core_current_time() ); $result = Better_Messages()->functions->new_message( $args ); } // For BuddyPress add_action('bp_core_activated_user', 'bm_welcome_message', 10, 3); // For BuddyPress (if first one does not works) add_action('bp_core_signups_after_add_backcompat', 'bm_welcome_message', 10, 1); // For Not BuddyPress add_action('register_new_user', 'bm_welcome_message', 10, 1); // For Ultimate Member add_action('um_registration_complete', 'bm_welcome_message', 10, 2); // For Other Cases if above does not work, for example register at Paid Membership Pro Checkout add_action('user_register', 'bm_welcome_message', 10, 2); ``` --- ## How to create group threads? :::info Old guide This guide was created for **Better Messages 1.0**, styling and process can be different slightly in **Better Messages 2.0** ::: --- ## How to set up messages location? :::info Old guide This guide was created for **Better Messages 1.0**, styling and process can be different slightly in **Better Messages 2.0** ::: --- ## AI Chat Bots Better Messages allows you to create AI-powered chat bots using multiple AI providers: OpenAI, Anthropic (Claude), and Google Gemini. ## How it works AI bots appear as regular users in the messaging interface. When a user sends a message to a bot, the message is processed through the selected AI provider and a response is generated. Each bot can be configured with its own provider, model, system instructions, and specific capabilities. In group conversations, bots respond when mentioned with @botname. ## Key capabilities - Multiple AI providers — choose between OpenAI, Anthropic (Claude), and Google Gemini per bot - Create multiple AI bots with different personalities and purposes - Custom system prompts to define bot behavior and knowledge - Per-bot settings — each bot can have its own provider, model selection, and API key override - Web search — bots can search the web for current information - File search — bots can search through uploaded knowledge base files (OpenAI) - Image generation — bots can generate images (OpenAI, Gemini) - Real-time response streaming in conversations - Group conversation support — add bots to group conversations, bots respond when mentioned with @botname - Conversation summarization — AI-generated summaries of conversation history, configurable per thread - Scheduled digests — AI-generated conversation digests on a schedule (hourly, twice daily, daily), configurable per thread - Token usage tracking — per-bot token usage tracking with cost estimation - Points charging — charge users MyCred or GamiPress points for AI responses - Online presence — bots appear as online users (WebSocket version) - Typing indicators — bots show a typing indicator while generating responses (WebSocket version) - E2E encryption exclusion — bots are automatically excluded from end-to-end encrypted conversations - Dedicated admin page for bot management ## How to enable **Step 1:** Configure your AI provider API keys at **WP Admin** → **Better Messages** → **Settings** → **Integrations**. - **OpenAI** — Enter your API key from [platform.openai.com](https://platform.openai.com) - **Anthropic** — Enter your API key from [console.anthropic.com](https://console.anthropic.com) - **Google Gemini** — Enter your API key from [aistudio.google.com](https://aistudio.google.com) You only need to configure the providers you plan to use. **Step 2:** Create and configure bots at **WP Admin** → **Better Messages** → **AI Bots**. - Click **Add New** to create a bot - Set the bot's display name and avatar - Select the AI provider and model - Write a system prompt defining the bot's personality and instructions - Enable desired capabilities (web search, file search, image generation — availability depends on provider) - Optionally override the global API key with a per-bot key - Configure points charging, summarization, and digest settings as needed - Publish the bot :::tip Write detailed system prompts for your bots. The more specific the instructions, the better the bot will perform for your specific use case. ::: --- ## AI Content Moderation Better Messages offers AI-powered content moderation using OpenAI's moderation API to automatically detect and handle harmful content. ## How it works When enabled, messages are analyzed by OpenAI's moderation API before delivery. If harmful content is detected above the configured confidence threshold, the message is automatically held for moderation review instead of being delivered. Moderators can then review flagged messages in the admin Messages Viewer and approve or reject them. The system can detect multiple categories of harmful content and can also moderate images. ## Key capabilities - Automatic detection of harmful content before message delivery - Multiple detection categories: hate speech, harassment, sexual content, violence, self-harm, illicit activities - Configurable confidence threshold (0-1) for flagging sensitivity - Image moderation in addition to text - Flagged messages held for moderator review - Role-based bypass for trusted user roles - Powered by OpenAI's moderation API ## How to enable Navigate to **WP Admin** → **Better Messages** → **Settings** → **Moderation**. - **Enable AI Moderation** — Turn on AI-powered content moderation - **Action** — What happens when content is flagged (hold for review) - **Moderate Images** — Also analyze images sent in messages - **Categories** — Select which content categories to detect (hate, harassment, sexual, violence, self-harm, illicit) - **Confidence Threshold** — How confident the AI must be before flagging (0-1, default 0.5). Lower values catch more content but may have more false positives - **Bypass Roles** — User roles that are exempt from AI moderation :::note AI Content Moderation requires PHP 8.1 or higher and an OpenAI API key configured in **Integrations** → **OpenAI**. ::: --- ## Auto-Delete Old Messages Better Messages can automatically delete old messages to manage database size and comply with data retention policies. ## How it works When configured, the plugin periodically removes messages that are older than a specified number of days. This runs automatically via WordPress cron jobs. Attachments can have a separate retention period. Messages belonging to deleted user accounts can also be automatically cleaned up, ensuring no orphaned data remains in the database. ## Key capabilities - Automatically delete messages older than a specified number of days - Separate retention period for file attachments - Clean up messages when a user account is deleted - Runs automatically via WordPress cron - Helps manage database size on active sites - Useful for data retention compliance ## How to enable Navigate to **WP Admin** → **Better Messages** → **Settings** → **Messaging**. - **Auto-Delete Messages** — Delete messages older than N days (set to 0 to disable) - **Delete on User Removal** — Automatically delete messages when a user account is deleted For attachment retention: **WP Admin** → **Better Messages** → **Settings** → **Attachments**. - **Attachment Retention** — Delete attachments older than N days (set to 0 to disable) :::tip Set a reasonable retention period based on your site's needs. Consider your users' expectations and any applicable data retention regulations. ::: --- ## Bad Words Filter Better Messages includes a bad words filter that automatically blocks messages containing inappropriate language. ## How it works Administrators define a list of banned words, one per line. When a user tries to send a message containing any of these words, the message is rejected and a configurable error message is displayed. Administrator accounts can optionally bypass the filter. This helps maintain a respectful communication environment on your site. ## Key capabilities - Custom list of banned words (one per line) - Messages containing banned words are blocked before delivery - Configurable error message shown to the user - Optional bypass for administrator accounts - Case-insensitive matching ## How to enable Navigate to **WP Admin** → **Better Messages** → **Settings** → **Restrictions**. - **Bad Words List** — Enter banned words, one per line - **Skip for Admins** — Allow administrator accounts to bypass the filter - **Error Message** — Custom message shown when a banned word is detected --- ## Chat Rooms Better Messages supports independent chat rooms that function as public or restricted group conversations. ## How it works Chat rooms are created as a WordPress custom post type and can be embedded anywhere on your site using shortcodes. Unlike regular conversations that are initiated between specific users, chat rooms are persistent spaces that users can join and leave freely. Each chat room can have its own access rules, including which user roles can join and whether guest (non-registered) users are allowed to participate. ## Key capabilities - Persistent chat rooms that exist independently of specific users - Embed anywhere using the shortcode `[better_messages_chat_room id="123"]` - Configurable access by user role - Optional guest access for non-registered visitors - Unlimited number of participants - Auto-join settings for automatic participation - All messaging features available (file sharing, reactions, mentions, etc.) - Support for video and audio calls within chat rooms (WebSocket version) - Dedicated admin page for managing chat rooms with full CRUD operations and participant management - Online users sidebar panel showing currently online members in the chat room ## Admin management Chat rooms have a dedicated administration page at **WP Admin** → **Better Messages** → **Chat Rooms** where administrators can: - Create, edit, and delete chat rooms - Manage participants — add or remove users - Search users by name, login, or email when adding participants ## Online users sidebar Chat rooms include an expandable/collapsible sidebar panel that shows currently online members. A toggle button in the chat header allows users to show or hide the panel. ## How to enable Chat rooms are managed through **WP Admin** → **Better Messages** → **Chat Rooms**. **Creating a chat room:** 1. Click **Add New** to create a new chat room 2. Set the chat room name 3. Configure allowed roles (which user roles can join) 4. Optionally enable guest access for non-registered users 5. Publish the chat room **Embedding a chat room:** Use the shortcode on any page or post: ``` [better_messages_chat_room id="123"] ``` Replace `123` with the actual chat room post ID. --- ## Conversations Muting Better Messages allows users to mute specific conversations to stop receiving notifications for them. ## How it works When a conversation is muted, the user will no longer receive sound notifications, on-site popups, or email notifications for new messages in that conversation. The conversation remains fully accessible — users can still open it, read messages, and send replies. Unread message counts continue to update. Muting is useful for group conversations or busy threads where constant notifications would be distracting. ## Key capabilities - Mute any conversation to stop all notifications for it - Muted conversations remain accessible and functional - Unread counts still update for muted conversations - Users can unmute conversations at any time - Affects sound, on-site, and email notifications - Administrators can configure @mentioned users to still receive notifications in muted conversations ## How to enable Navigate to **WP Admin** → **Better Messages** → **Settings** → **Messaging**. - **Allow Mute Conversations** — Enable or disable the ability for users to mute conversations The feature is enabled by default. --- ## Easy Customization Better Messages can be visually customized to match your website's design without any coding knowledge. ## How it works The primary accent color used throughout the messaging interface can be changed through the WordPress Customizer with a visual color picker. For more advanced customization, you can add custom CSS to modify any aspect of the plugin's appearance. The plugin supports both standard and modern layout templates, each with their own configurable options for message alignment and conversation list layout. ## Key capabilities - Visual color customization through WordPress Customizer - Change accent color used for buttons, links, and highlights - Choice between standard and modern layout templates - Configurable message bubble alignment - Custom CSS support for advanced styling - Responsive design that works with any WordPress theme ## How to enable **Color customization:** Navigate to **WP Admin** → **Appearance** → **Customize** → **Better Messages** and use the color picker to set your accent color. **Layout options:** Navigate to **WP Admin** → **Better Messages** → **Settings** → **General** for template selection, layout mode, and dimension settings. **Custom CSS:** Add CSS rules targeting Better Messages classes through your theme's customizer or a custom CSS plugin. --- ## Email notifications ## How email notifications work? Instead of standard notification on each new message, Better Messages plugin will group messages by thread and send it within next 15 minutes with cron job. - User will not receive email notifications, if they are disabled in user settings. - User will not receive email notifications for already read messages. - User will not receive email notifications, if he was online at website last 10 minutes. ## Email Template Customization Better Messages allows you to customize the appearance of email notifications sent to users. ### Template Source (BuddyPress sites only) If you have BuddyPress installed, you can choose between two template sources: - **BuddyPress Email Template** - Uses your existing BuddyPress email customizations. This is the default option for BuddyPress sites. - **Custom Template** - Use the simple or custom HTML template options described below. ### Template Mode When using custom templates (or on non-BuddyPress sites), you can choose between two modes: #### Simple Mode Simple mode allows you to customize the email appearance without writing any code: - **Email Logo** - Upload a logo image (recommended size: 200x50 pixels) to display at the top of emails. - **Primary Color** - Used for buttons and links. - **Background Color** - Email outer background color. - **Content Background Color** - Main content area background color. - **Text Color** - Color of the email text. - **Header Text** - Custom greeting text. Use `‎{{user_name}}` placeholder for the recipient's name. Leave empty for default "Hi `‎{{user_name}}`,". - **Footer Text** - Custom footer text. Use `‎{{site_name}}` and `‎{{site_url}}` placeholders. - **Button Text** - Text for the "View Conversation" button. #### Custom HTML Mode For full control over email appearance, you can create a custom HTML template. Available placeholders: | Placeholder | Description | |-------------|-------------| | `‎{{site_name}}` | Your website name | | `‎{{site_url}}` | Your website URL | | `‎{{user_name}}` | Recipient's display name | | `‎{{subject}}` | Conversation subject | | `‎{{messages_html}}` | Formatted messages content | | `‎{{thread_url}}` | Link to the conversation | | `‎{{email_subject}}` | Email subject line | | `‎{{unsubscribe_url}}` | Unsubscribe link URL | Click "Load Default Template" to start with the default template structure and customize it. ### Unsubscribe Link You can optionally add an unsubscribe link to message notification emails. When enabled, users can click the link to stop receiving message email notifications. This setting is only available when using custom templates (not BuddyPress email templates, which have their own unsubscribe mechanism). ### Test Email Use the "Send Test Email" feature to preview how your email template looks. Enter an email address and click "Send Test Email" to receive a sample notification. :::tip Save your settings before sending a test email to ensure all changes are applied. ::: --- ## Emoji Selector Better Messages includes a built-in emoji picker that allows users to easily insert emojis into their messages. ## How it works Users can open the emoji picker by clicking the emoji button in the message input area. The picker displays emojis organized by categories such as smileys, people, animals, food, activities, travel, objects, symbols, and flags. Users can browse categories or use the search field to quickly find a specific emoji. The emoji rendering style can be configured to use different visual sets, ensuring consistent appearance across all browsers and devices regardless of the user's operating system. ## Key capabilities - Built-in emoji picker with categorized browsing - Emoji search by keyword - Multiple emoji rendering styles (Apple, Google, Twitter, Facebook, Native) - Per-category enable/disable control - Category ordering via drag-and-drop in admin panel - Consistent emoji appearance across all platforms ## How to enable Navigate to **WP Admin** → **Better Messages** → **Settings** → **Integrations** → **Emojis**. - **Emoji Set** — Choose the visual style: Apple, Google, Twitter, Facebook, or Native (uses the device's built-in emojis) - **Categories** — Enable or disable individual emoji categories - **Category Order** — Drag and drop to reorder categories in the picker --- ## Enhanced Mobile Better Messages includes an enhanced mobile layout optimized for smartphones and tablets. ## How it works The plugin automatically detects mobile devices and activates a mobile-optimized interface. This includes a full-screen messaging mode that takes over the entire screen for a native app-like experience, swipe gestures for navigation, and a floating chat button for quick access from any page. The mobile layout is designed to work smoothly on both iOS and Android devices across all major mobile browsers. ## Key capabilities - Full-screen messaging mode on mobile devices - Automatic full-screen entry when opening messages - Swipe-left gesture to navigate back to conversation list - Floating chat button for quick access from any page - Configurable floating button position and visibility - "Tap to open" prompt for first-time users - Option to disable Enter-to-send on touch devices - Hide potentially overlapping page elements on mobile ## How to enable Navigate to **WP Admin** → **Better Messages** → **Settings** → **Mobile**. - **Full Screen on Mobile** — Enable full-screen messaging mode - **Auto Open Full Screen** — Automatically enter full-screen when opening messages - **Tap to Open** — Show a "Tap to open" prompt message - **Swipe Back** — Enable swipe-left gesture to go back - **Floating Chat Button** — Show a floating button for quick access - **Button Position** — Left or right side of the screen - **Bottom Margin** — Distance from the bottom of the screen in pixels - **Restrict by Roles** — Hide the floating button for specific user roles - **Disable Enter to Send** — Disable Enter key sending on touch devices - **Hide Overlapping Elements** — Hide page elements that may overlap with mobile messaging --- ## Favorite Messages Users can mark individual messages as favorites for quick access later. ## How it works Any message in a conversation can be starred by clicking the favorite/star button. Favorited messages are saved per user and accessible through a dedicated favorites section. This makes it easy to bookmark important information, links, or decisions shared in conversations without having to search through message history. ## Key capabilities - Star/favorite any message in any conversation - Dedicated favorites section for quick access to starred messages - Per-user favorites — each user has their own starred messages - Easy toggle to add or remove a message from favorites ## How to enable Navigate to **WP Admin** → **Better Messages** → **Settings** → **Messaging**. - **Disable Favorite Messages** — Toggle to turn this feature on or off The feature is enabled by default. --- ## File Sharing Better Messages allows users to share files, images, videos, and documents directly in conversations with support for resumable uploads, client-side media optimization, and file access protection. ## How it works Users can attach files to their messages using the attachment button in the message input area. Files can also be dragged and dropped directly onto the conversation. The plugin supports a wide range of file types including images, videos, documents, and archives. Uploaded files are stored in your WordPress media directory. Before uploading, images and videos can be automatically optimized in the user's browser — reducing file sizes, converting to modern formats, and stripping metadata. This happens entirely on the client side using WebAssembly, so your server receives already-optimized files with no additional load. For large files, the plugin supports **resumable uploads** using the TUS protocol, ensuring files can be uploaded reliably even on slow or unstable connections. If an upload is interrupted, it automatically resumes from where it left off. **File access protection** is available through a proxy system that serves files through your WordPress server instead of exposing direct URLs. This prevents unauthorized users from accessing files by guessing or sharing direct download links. ## Key capabilities - Share images, videos, documents, and other file types in messages - Drag-and-drop files directly onto conversations - Webcam photo capture directly in the message composer - Resumable uploads via TUS protocol for reliable large file transfers - Automatically convert images to modern formats (AVIF, WebP, or JPEG) in the browser before uploading - Convert MOV, AVI, WMV, and MKV videos to MP4 in the browser using FFmpeg WASM - Automatically convert iPhone HEIC photos to a compatible format - Remove EXIF data, GPS location, and camera info from images and videos to protect user privacy - Automatically downscale large images to a specified maximum dimension - File access protection through proxy serving (PHP, X-Sendfile, X-Accel-Redirect, LiteSpeed) - Configurable maximum file size and number of files per message - Whitelist of allowed file extensions - Optional auto-deletion of attachments after a specified number of days - Attachments browser tab in conversation details panel - Option to hide uploaded files from the WordPress Media Library ## Image optimization When enabled, images are converted to the best format supported by the user's browser before uploading. The conversion happens entirely in the browser using Web Workers and WebAssembly, so your server receives already-optimized files. The format fallback chain is: **AVIF → WebP → JPEG**. The browser automatically uses the best format it supports — AVIF for modern browsers, WebP for older ones, and JPEG as a universal fallback. Supported input formats: JPEG, PNG, BMP, TIFF, WebP, AVIF, HEIC/HEIF, and ICO. GIFs can optionally be transcoded to WebP, AVIF, or JPEG formats during upload using FFmpeg WASM. SVG files are not converted to preserve vector quality. **HEIC/HEIF photos** from iPhones are always converted to JPEG regardless of whether image optimization is enabled, since browsers cannot display HEIC files natively. This uses the libheif WASM decoder. You can also set a **maximum image resolution** to automatically downscale large images. The image is proportionally scaled so that neither width nor height exceeds the configured value. Set to 0 for no limit. ## Video optimization When enabled, videos in MOV, AVI, WMV, and MKV formats are converted to MP4 in the browser using the FFmpeg WASM engine before uploading. This provides cross-browser and cross-device compatibility. The conversion first attempts a fast **remux** (container change without re-encoding) which completes almost instantly for compatible codecs like H.264. If remuxing fails, it falls back to a full transcode using H.264 video and AAC audio. iPhone MOV files recorded with H.264 are typically remuxed instantly without any quality loss. :::tip The FFmpeg WASM engine is approximately 30MB and needs to be downloaded to your server first. Use the **Download Engine** button in the settings to install it. ::: ## Metadata stripping When enabled, EXIF data, GPS coordinates, camera information, and other metadata are automatically removed from uploaded images and videos. This protects user privacy by preventing location and device information from being shared with other participants. For images, metadata is stripped during the browser-side conversion process. If browser-side processing is unavailable, the server automatically strips metadata as a fallback using WordPress image editor (Imagick or GD). For videos, metadata is stripped using FFmpeg's `-map_metadata` flag during video optimization. ## Upload methods Better Messages supports two upload methods: - **Standard POST** — Traditional file upload. Limited by your server's PHP `upload_max_filesize` and `post_max_size` settings. - **TUS (Resumable Upload)** — Files are uploaded in chunks and can resume after interruptions. Bypasses PHP upload size limits. Some hosting providers with aggressive WAF (Web Application Firewall) rules may block TUS uploads. ## File access protection When file proxy is enabled, all attachment URLs are routed through your WordPress server, which verifies the requesting user has access to the conversation before serving the file. Direct file URLs are blocked. Available proxy methods: - **PHP** — Uses `readfile()` to serve files through PHP. Works everywhere but uses more memory and CPU. - **X-Sendfile** — For Apache with mod_xsendfile. PHP handles authentication, then Apache serves the file directly. - **X-Accel-Redirect** — For Nginx. PHP handles authentication, then Nginx serves the file directly. Requires an `internal` location block in your Nginx configuration. - **LiteSpeed** — For LiteSpeed web server. Uses X-LiteSpeed-Location header for efficient file serving. :::tip For best performance on high-traffic sites, use X-Sendfile (Apache), X-Accel-Redirect (Nginx), or LiteSpeed instead of the PHP method. ::: ## How to enable Navigate to **WP Admin** → **Better Messages** → **Settings** → **Attachments**. ### General settings - **Enable File Sharing** — Turn file attachments on or off - **Hide from Media Library** — Prevent uploaded files from appearing in WordPress Media (enabled by default) - **Attachments Browser** — Show an attachments tab in conversation details for browsing shared files - **Webcam Photo** — Allow users to capture photos from their webcam ### Upload settings - **Upload Method** — Standard POST or TUS resumable uploads - **Max File Size** — Maximum file size in megabytes - **Max Files Per Message** — Maximum number of files per message (0 for unlimited) - **Allowed Formats** — List of permitted file extensions ### Media optimization - **Image Optimization** — Convert images to the best browser-supported format (AVIF, WebP, or JPEG) before uploading - **Image Quality** — Quality level for converted images (1-100, default 85) - **Max Image Resolution** — Downscale images so neither dimension exceeds this value (0 for no limit) - **Video Optimization** — Convert videos (MOV, AVI, WMV, MKV) to MP4 in the browser before uploading - **Strip Metadata** — Remove EXIF, GPS, and camera data from images and videos (enabled by default) ### File access protection - **File Proxy** — Serve files through a proxy to protect direct URLs - **Proxy Method** — Choose between PHP, X-Sendfile, X-Accel-Redirect, or LiteSpeed - **Attachment Retention** — Automatically delete attachments after N days (0 to keep forever) --- ## GIPHY Integration Better Messages integrates with GIPHY to provide a vast library of animated GIFs that users can search and send directly in conversations. ## How it works When enabled, a GIF button appears in the message input area. Users can search GIPHY's extensive library of animated GIFs by keyword, browse trending GIFs, and send them directly in their conversations. The content rating filter ensures only appropriate GIFs are shown based on your site's requirements. ## Key capabilities - Search and browse millions of animated GIFs from GIPHY - Trending GIFs section for popular content - Content rating filter (G, PG, PG-13, R) - Configurable language for search results - GIF button in the message input area - Works in all conversation types (private, group, chat rooms) ## How to enable Navigate to **WP Admin** → **Better Messages** → **Settings** → **Integrations** → **GIPHY**. - **GIPHY API Key** — Enter your API key from GIPHY (required) - **Content Rating** — Filter GIFs by rating: G (all ages), PG, PG-13, or R - **Language** — Language code for search results :::tip You can get a free GIPHY API key by creating an app at [developers.giphy.com](https://developers.giphy.com). ::: --- ## Group Conversations Better Messages supports multi-participant group conversations where users can chat with multiple people at once. ## How it works Users can create new conversations and add multiple participants. There is no limit on the number of participants in a group conversation. The conversation creator can invite additional users at any time. Participants can leave group conversations if this option is enabled by the administrator. All participants see all messages in the conversation in real time. ## Key capabilities - Unlimited number of participants per conversation - Any user can start a group conversation with multiple recipients - Conversation creators can invite additional participants - Users can leave group conversations - Subject lines for group conversations to help identify them - All standard messaging features work in group conversations (file sharing, reactions, replies, etc.) - AI chat bots can be added to group conversations - Bots respond when mentioned with @botname in group conversations ## How to enable Navigate to **WP Admin** → **Better Messages** → **Settings** → **Messaging**. - **Disable Group Conversations** — Toggle to prevent multi-participant conversations - **Allow Users to Leave** — Let participants leave group conversations - **Allow Inviting Users** — Let participants invite others to existing conversations --- ## Group Messages Better Messages can enable group messaging within community plugin groups such as BuddyPress, Ultimate Member, PeepSo, and FluentCommunity. ## How it works When enabled for a supported community plugin, each group gets its own shared conversation. All group members can participate in the group conversation. When new members join the group, they are automatically added to the conversation. When members leave the group, they are automatically removed. This creates a seamless messaging experience tied to your community's group structure. ## Key capabilities - Automatic group conversations for BuddyPress, Ultimate Member, PeepSo, and FluentCommunity groups - Members automatically added/removed when joining or leaving groups - File sharing within group conversations (configurable per integration) - Email notifications for group messages (configurable per integration) - All standard messaging features available in group conversations ## How to enable Navigate to **WP Admin** → **Better Messages** → **Settings** → **Integrations** → then select your community plugin tab (**BuddyPress**, **Ultimate Member**, **PeepSo**, or **FluentCommunity**). - **Enable Group Messaging** — Turn on group conversations for the selected plugin - **Enable File Sharing in Groups** — Allow file attachments in group conversations - **Enable Email Notifications for Groups** — Send email notifications for group messages :::note The integration tab for each community plugin only appears when that plugin is installed and active. ::: --- ## Guest Access Better Messages supports guest access for chat rooms, allowing non-registered visitors to participate in conversations without creating an account. ## How it works When guest access is enabled for a chat room, visitors who are not logged in can join and participate in the conversation. Guest users are assigned an automatically generated display name. This is useful for customer support chat rooms, public discussion spaces, or community chat rooms where you want to lower the barrier to participation. Guest access is configured per chat room, giving administrators control over which rooms are open to guests. ## Key capabilities - Allow non-registered users to participate in chat rooms - Automatically generated display names for guests - Per-chat-room guest access control - Optional redirect to login page for non-logged-in users on other messaging pages - All standard chat features available to guests (messaging, file sharing, etc.) ## How to enable **Global setting:** Navigate to **WP Admin** → **Better Messages** → **Settings** → **General**. - **Guest Chat** — Enable guest access globally - **Redirect Non-Logged Users** — Optionally redirect non-logged-in users to the login page **Per chat room:** Edit the chat room at **WP Admin** → **Better Messages** → **Chat Rooms** and enable guest access in the room's settings by adding guest users to the allowed participants. --- ## Markdown Support Better Messages supports Markdown syntax for formatting messages. ## How it works Users can use standard Markdown notation to apply formatting directly while typing, without needing to use the formatting toolbar. Markdown syntax is automatically rendered when the message is sent. This works alongside the visual formatting toolbar, giving users flexibility in how they format their messages. ## Supported syntax - `**bold**` → **bold** - `*italic*` → *italic* - `[link text](url)` → clickable link - `` `inline code` `` → `inline code` - ` ```code block``` ` → formatted code block - `~~strikethrough~~` → ~~strikethrough~~ ## Key capabilities - Standard Markdown syntax support in messages - Automatic rendering when messages are sent - Works alongside the visual formatting toolbar - No additional configuration required - Available in all conversation types --- ## Mass Messaging Administrators can send messages to all users on the site at once using the mass messaging feature. ## How it works Mass messaging allows site administrators to broadcast a message to every user on the website. Each recipient receives the message as an individual conversation, so replies go directly back to the sender rather than to all recipients. This is useful for announcements, important updates, or reaching your entire user base through the messaging system. ## Key capabilities - Send a message to all registered users at once - Each recipient receives an individual conversation - Replies go directly to the sender - Accessible from the WordPress admin panel - Useful for announcements and site-wide communications ## How to use Navigate to **WP Admin** → **Better Messages** → **Mass Messaging**. Enter your message content, select the recipients (all users or specific roles), and send. The messages will be delivered to each user's inbox as individual conversations. --- ## Mentions Better Messages supports @mentions in conversations, allowing users to directly address specific participants. ## How it works Users can type `@` followed by a participant's name to mention them in a message. An autocomplete dropdown appears as the user types, showing matching participants from the conversation. When a user is mentioned, they receive a notification highlighting that they were specifically addressed. Mentions work in both private conversations and group conversations. ## Key capabilities - Type `@` to trigger the mention autocomplete - Autocomplete dropdown showing matching conversation participants - Mentioned users receive highlighted notifications - Works in private conversations, group conversations, and chat rooms - Mentioned text is visually highlighted in the message - Mentions display user avatars and online status indicator - Mentions are clickable links to the mentioned user's profile - Force notification option — when enabled, mentioned users receive notifications even if they have muted the conversation ## How to enable Mentions are enabled by default when the plugin is active. No additional configuration is required. ### Force notification for mentions When enabled, @mentioned users will receive email and push notifications even if they have muted the conversation. This ensures important messages that directly address someone are not missed. Navigate to **WP Admin** → **Better Messages** → **Settings** → **Notifications** to enable this option. --- ## Message Drafts Better Messages automatically saves unsent messages as drafts. ## How it works When a user types a message but navigates away from the conversation before sending, the text is automatically saved as a draft. When the user returns to the same conversation, the draft is restored in the message input field, allowing them to continue composing from where they left off. This prevents accidental loss of typed messages and works across page reloads and browser sessions. ## Key capabilities - Automatic saving of unsent message text - Drafts restored when returning to the same conversation - Works across page reloads and browser sessions - No manual save action required - Per-conversation drafts (each conversation has its own draft) ## How to enable Navigate to **WP Admin** → **Better Messages** → **Settings** → **Messaging**. - **Enable Drafts** — Turn on automatic draft saving for unsent messages --- ## Message Reactions Better Messages allows users to react to messages with emojis for quick feedback and engagement. ## How it works Users can add emoji reactions to any message by clicking on it or using the reaction button. Multiple users can react to the same message, and the reaction count is displayed below the message. The available reaction emojis can be customized by administrators using a drag-and-drop interface. An optional popup shows which users reacted with each emoji. ## Key capabilities - React to any message with emojis - Multiple users can react to the same message - Reaction counts displayed below messages - Customizable reaction emoji set via drag-and-drop in admin - Optional popup showing who reacted with each emoji - Works in all conversation types ## How to enable Navigate to **WP Admin** → **Better Messages** → **Settings** → **Messaging**. - **Enable Reactions** — Turn on message reactions - **Who Reacted Popup** — Show a popup listing users who reacted when clicking on a reaction - **Reaction Emojis** — Customize available emojis using drag-and-drop ordering --- ## Mini Widgets Better Messages provides mini widgets fixed to the bottom of the screen, giving users quick access to their conversations and contacts from anywhere on the site. ## How it works Mini widgets are small panels anchored to the bottom of the browser window that remain visible as users browse your website. They provide quick access to conversations, friends lists, and group lists without navigating to the main messaging page. Each widget type can be independently enabled and restricted by user role. ## Key capabilities - Mini Threads — compact list of recent conversations with unread counts - Mini Friends — list of friends with online status (requires BuddyPress, Ultimate Member, or PeepSo) - Mini Groups — list of groups with quick access to group conversations - Close button for each widget - Role-based visibility restrictions - Customizable widget display order - Points balance display when a points system (MyCred/GamiPress) is configured - Works alongside other page content :::note **Mini Chats** (popup chat windows) and **Combined Mini Chat** widget require the [WebSocket version](/docs/websocket/mini-chats). ::: ## How to enable Navigate to **WP Admin** → **Better Messages** → **Settings** → **Mini Widgets**. - Mini Threads — enable the conversations list widget - Mini Friends — enable the friends list widget (available with BuddyPress, Ultimate Member, or PeepSo) - Mini Groups — enable the groups list widget - Close Button — show a close button on mini widgets - Restrict by Roles — hide specific widgets for certain user roles --- ## Modern Design Better Messages features a modern, clean messaging interface designed for ease of use and visual appeal. ## How it works The plugin offers a fully customizable messaging layout with modern design principles. Message bubbles can be aligned to different positions, and the interface supports a combined view that shows the conversation list alongside the active conversation. An optional full-screen mode provides an immersive messaging experience on desktop. ## Key capabilities - Modern message bubble layout with configurable alignment (left, right, or all-left) - Combined view showing conversation list and active conversation side by side - Full-screen desktop mode for an immersive chat experience - Customizable accent color to match your website design - Configurable message area height and sidebar width - Responsive layout that adapts to different screen sizes ## How to enable Navigate to **WP Admin** → **Better Messages** → **Settings** → **General**. - **Template** — Choose between standard and modern layout - **Modern Layout** — Message bubble alignment (left/right/all-left) - **Combined View** — Show conversation list alongside the active conversation - **Desktop Full Screen** — Enable full-screen toggle button - **Messages Height** — Height of the message area (default: 650px) - **Messages Min Height** — Minimum height of the message area (default: 450px) - **Side Threads Width** — Width of the conversation list sidebar (default: 320px) Accent color can be customized through **WP Admin** → **Appearance** → **Customize** → **Better Messages**. --- ## MyCred & GamiPress Better Messages integrates with MyCred and GamiPress point systems to charge users credits or points for messaging and calls. ## How it works When integrated with [MyCred](https://www.wordplus.org/mc) or [GamiPress](https://www.wordplus.org/gamipress), the plugin deducts points from users when they send messages or make calls. Pricing can be configured per user role, allowing different rates for different membership levels. If a user doesn't have enough points, they see an error message and cannot send the message or start the call. ## Key capabilities - Charge points per message sent - Charge points per new conversation started - Charge points per minute for voice and video calls - Per-role pricing configuration (different rates for different roles) - Custom error messages when users have insufficient balance - Works with both MyCred and GamiPress point systems ## How to enable Navigate to **WP Admin** → **Better Messages** → **Settings** → **Integrations** → **MyCred** (or **GamiPress**). - **Points Per Message** — Number of points deducted when sending a message (configurable per role) - **Points Per New Conversation** — Points deducted when starting a new conversation (configurable per role) - **Points Per Call Minute** — Points deducted per minute during calls (configurable per role) - **Error Messages** — Custom text shown when a user has insufficient points :::note The MyCred or GamiPress integration tab only appears when the respective plugin is installed and active. ::: --- ## oEmbed Support Better Messages supports oEmbed for rich media previews directly in messages. ## How it works When users share links to supported platforms in their messages, the content is automatically embedded inline. For example, sharing a YouTube link will display a video player directly in the conversation. The plugin also supports nice link previews that show a thumbnail, title, and description for regular URLs, making shared links more informative and visually appealing. ## Key capabilities - Automatic rich media embedding for shared links - Supported services: YouTube, Vimeo, Flickr, SoundCloud, Spotify, and all WordPress oEmbed providers - Nice link previews with thumbnail, title, and description for regular URLs - Media plays inline without leaving the conversation - Works in all conversation types ## How to enable Navigate to **WP Admin** → **Better Messages** → **Settings** → **Messaging**. - **Enable oEmbed** — Turn on automatic rich media embedding - **Enable Nice Links** — Show link preview cards for regular URLs --- ## Pinned Messages Better Messages supports pinning important messages and conversations for easy access. ## How it works **Pinned messages:** Conversation moderators can pin important messages to the top of a conversation. Pinned messages remain easily accessible to all participants, making it simple to highlight key information, rules, or announcements in group conversations and chat rooms. **Pinned conversations:** Users can pin entire conversations to the top of their conversations list. Pinned conversations always appear first, providing quick access to the most important chats regardless of when the last message was sent. ## Key capabilities - Pin important messages to the top of conversations - Pinned messages visible to all participants - Pin conversations to the top of the conversations list - Per-user conversation pinning - Useful for highlighting rules, announcements, or key information ## How to enable Navigate to **WP Admin** → **Better Messages** → **Settings** → **Messaging**. - **Pin Messages** — Allow moderators to pin messages in conversations - **Pin Conversations** — Allow users to pin conversations to the top of their list --- ## Pre-Moderated Messages Better Messages supports pre-moderation of messages, where messages are held for review before being delivered to recipients. ## How it works When pre-moderation is enabled, messages from specified users or roles are placed in a moderation queue instead of being delivered immediately. Moderators can review held messages in the admin Messages Viewer and approve or reject them. This is useful for moderating first-time senders, new users, or specific user roles that require oversight. Email notifications can be sent to moderators when new messages require review. ## Key capabilities - Hold messages for moderator review before delivery - Automatically pre-moderate first-time message senders - Per-role pre-moderation for new conversations - Per-role pre-moderation for replies - Email notifications to moderators when messages need review - Approve or reject messages from the admin Messages Viewer - Multiple moderator email addresses supported ## How to enable Navigate to **WP Admin** → **Better Messages** → **Settings** → **Moderation**. - **Messages Viewer** — Must be enabled first (prerequisite for pre-moderation) - **Enable Pre-Moderation** — Turn on the pre-moderation system - **First-Time Senders** — Automatically hold messages from users sending for the first time - **Roles for New Conversations** — User roles that require moderation when starting new conversations - **Roles for Replies** — User roles that require moderation when replying - **Notification Emails** — Email addresses to notify when messages are held for review :::tip Enable the Messages Viewer first in the Moderation settings before configuring pre-moderation. ::: --- ## Privacy & GDPR Better Messages is designed with privacy in mind and provides the tools needed for GDPR compliance. ## Data Storage All message data is stored on your own server in your WordPress database. No message content is stored on external servers. When the WebSocket version is used for real-time delivery, data is transmitted encrypted and is not stored on external servers. An additional **end-to-end encryption (E2EE)** option is available in the WebSocket version for maximum privacy — messages are encrypted on the sender's device and can only be decrypted by the intended recipients. Browser-cached data (IndexedDB) stays on the user's device and is not shared with anyone. Users can clear it at any time by clearing their browser data. In the WebSocket version, cached data can be additionally encrypted for extra protection. ## No Cookies or Tracking The plugin does not set any cookies. No analytics or tracking scripts are loaded. No user behavior data is collected or sent to third parties. ## WordPress Privacy Tools Integration Better Messages integrates with the WordPress built-in privacy tools: - **Personal Data Export** (Tools → Export Personal Data) — exports all messages sent by the user - **Personal Data Erasure** (Tools → Erase Personal Data) — anonymizes the user's message content and optionally deletes their file attachments - **Suggested Privacy Policy** (Settings → Privacy) — provides a ready-to-use privacy policy text that adapts based on your plugin configuration ## Third-Party Services Better Messages minimizes third-party connections. The following external services may be used depending on your configuration: ### Emoji Images By default, emoji spritesheet images are loaded from a CDN (jsdelivr.net). You can switch to **self-hosted delivery** in the plugin settings (Privacy & GDPR tab) to download emoji images to your server, eliminating external requests. ### Video Embeds (oEmbed) When users share YouTube, Vimeo, or other video links, embedded players may load directly from those services. You can enable **Privacy-friendly oEmbeds** in the plugin settings — this shows a static preview with a play button, and the actual video loads only after the user clicks. ### GIFs and Stickers If GIF (Giphy) or Sticker (Stipop) integrations are enabled, images are loaded from their respective servers when displayed in conversations. These features are optional and can be disabled by removing the API keys in the settings. ### Real-Time Messaging (WebSocket Version) The WebSocket version routes real-time events through a cloud relay server (cloud.better-messages.com) for instant message delivery. Data is transmitted encrypted. The relay server does not store message content. ### Voice and Video Calls (WebSocket Version) Private one-on-one calls are established directly between users (peer-to-peer). Group calls are routed through a cloud service to connect multiple participants. ### AI Chat Bots If AI chat bots are enabled, messages in bot conversations are sent to the configured AI provider (OpenAI, Anthropic, or Google) to generate responses. This only applies to conversations with AI bots, not regular user conversations. ## Privacy Settings All privacy-related settings are consolidated in the **Privacy & GDPR** tab in the plugin settings: - **Emoji Sprite Delivery** — choose between CDN or self-hosted - **Privacy-friendly oEmbeds** — click-to-play video embeds - **Delete attachments on data erasure** — remove uploaded files when a user requests data erasure ## Guest Chat If guest chat is enabled, the following data is collected from guest users: - Display name (required) - Email address (optional) - IP address (for identification purposes) This data is stored in the site database and is not shared with third parties. ## Questions? If you believe we missed something or have a suggestion to improve privacy compliance, please contact us at [support@better-messages.com](mailto:support@better-messages.com). --- ## Realtime Messaging Better Messages supports two communication modes for delivering messages: AJAX polling and WebSocket. ## How it works In **AJAX mode** (included in the free version), the plugin periodically sends requests to your server to check for new messages. The polling frequency is configurable — by default, the plugin checks every 3 seconds when a conversation is open and every 10 seconds on other pages. This ensures users receive messages with only a short delay. The **WebSocket version** upgrades this to instant delivery using persistent connections. Instead of polling, a live connection is maintained between the browser and the server, so messages appear the moment they are sent — up to 200x faster than AJAX mode. This creates a true real-time chat experience similar to popular messaging apps. ## Key capabilities - Two communication modes: AJAX polling (free) and WebSocket (premium) - Configurable polling intervals for AJAX mode - Instant message delivery with WebSocket - Automatic reconnection if the connection is interrupted - Works across all pages of your website ## How to enable Navigate to **WP Admin** → **Better Messages** → **Settings** → **General**. - **Mechanism** — Choose between AJAX or WebSocket - **Thread Interval** — How often to check for new messages in an open conversation (default: 3 seconds, AJAX mode only) - **Site Interval** — How often to check for new messages on other pages (default: 10 seconds, AJAX mode only) :::tip The WebSocket version provides the best user experience with instant delivery, lower server load, and additional features like typing indicators and presence status. ::: --- ## Reply, Edit & Forward Better Messages supports replying to specific messages, editing sent messages, and forwarding messages to other conversations. ## How it works **Replying:** Users can reply to a specific message in a conversation. The reply includes a quoted preview of the original message for context, making it clear which message is being responded to. This is especially useful in active group conversations. **Editing:** Users can edit messages they have already sent. Edited messages display an "edited" indicator so other participants know the message was modified after sending. **Forwarding:** Users can forward messages to one or multiple other conversations. Forwarded messages can optionally include a "Forwarded from" attribution showing who originally sent the message. ## Key capabilities - Reply to specific messages with quoted context - Reply to your own messages (configurable) - Edit already sent messages - "Edited" indicator on modified messages - Forward messages to multiple conversations at once - Optional "Forwarded from" attribution on forwarded messages ## How to enable Navigate to **WP Admin** → **Better Messages** → **Settings** → **Messaging**. - **Enable Replies** — Allow users to reply to (quote) specific messages - **Allow Self Replies** — Allow users to reply to their own messages - **Allow Edit Messages** — Allow users to edit their sent messages - **Enable Message Forwarding** — Allow forwarding messages to other conversations - **Forwarded Attribution** — Show "Forwarded from" label on forwarded messages --- ## Report Messages Better Messages allows users to report inappropriate messages for moderation review. ## How it works When enabled, users can report messages they find inappropriate, offensive, or in violation of your site's rules. Reported messages are flagged and sent to the admin Messages Viewer where moderators can review the content and take appropriate action. This gives your community a self-moderation mechanism while keeping administrators informed about potential issues. ## Key capabilities - Users can report any message in their conversations - Reported messages appear in the admin Messages Viewer - Moderators can review and take action on reports - Helps maintain community standards through user-driven moderation ## How to enable Navigate to **WP Admin** → **Better Messages** → **Settings** → **Moderation**. - **Messages Viewer** — Must be enabled first (prerequisite) - **Allow Reports** — Enable the ability for users to report messages :::tip Enable the Messages Viewer first in the Moderation settings before enabling message reporting. ::: --- ## Role Based Access Control Better Messages provides comprehensive role-based access control to restrict messaging capabilities based on WordPress user roles. ## How it works Administrators can define rules that control which user roles can message which other roles. The system supports both whitelist (allow) and blacklist (disallow) modes. Beyond role-to-role messaging rules, administrators can restrict who can start new conversations, who can reply to existing ones, and who can view message content. Rate limiting can be configured per role to prevent spam. ## Key capabilities - Whitelist or blacklist mode for role-to-role messaging - Control which roles can send messages to which other roles - Restrict new conversation creation by role - Restrict replying to conversations by role - Hide message content for specific roles (shows placeholder text) - Rate limiting per role for new conversations and replies - Allow users to configure who can message them - Custom messages shown when access is restricted ## How to enable Navigate to **WP Admin** → **Better Messages** → **Settings** → **Restrictions**. - **Restriction Mode** — Choose between allow (whitelist) or disallow (blacklist) mode - **Role-to-Role Rules** — Define which roles can message which other roles - **Restrict New Conversations** — Roles not allowed to start new conversations - **Restrict Replies** — Roles not allowed to reply to existing conversations - **Restrict Message Visibility** — Roles that see placeholder text instead of message content - **Visibility Placeholder** — Custom text shown in place of hidden messages - **Rate Limit New Conversations** — Minimum seconds between new conversations - **Rate Limit Replies** — Per-role rate limits for sending replies - **User Self-Restriction** — Allow users to configure who can message them --- ## RTL Layout Support Better Messages includes built-in right-to-left (RTL) layout support for languages such as Arabic, Hebrew, Persian, and Urdu. ## How it works The plugin automatically detects the WordPress site language direction and adjusts the entire messaging interface accordingly. When your WordPress site is configured for an RTL language, all message bubbles, navigation elements, input fields, and toolbars are mirrored to follow the right-to-left reading direction. No additional configuration is needed. ## Key capabilities - Automatic RTL layout detection from WordPress settings - Full interface mirroring (message bubbles, navigation, inputs, toolbars) - Supports Arabic, Hebrew, Persian (Farsi), Urdu, and other RTL languages - No additional configuration required - Works with all plugin features and conversation types ## How to enable RTL support activates automatically when your WordPress site language is set to an RTL language. No manual configuration is needed. Set your site language at **WP Admin** → **Settings** → **General** → **Site Language**. --- ## Search Better Messages includes a built-in search feature that allows users to search through all their messages. ## How it works Users can access the search function from the messaging interface to find specific messages or conversations by typing keywords. The search looks through message content across all of the user's conversations, making it easy to locate specific information, links, or past discussions. ## Key capabilities - Full-text search across all user's messages - Search results show matching messages with conversation context - Quick navigation to the conversation containing the found message - Available from the main messaging interface ## How to enable Navigate to **WP Admin** → **Better Messages** → **Settings** → **Messaging**. - **Disable Search** — Toggle to turn the search feature on or off The search feature is enabled by default. --- ## Site Notifications Better Messages displays on-site notification popups when users receive new messages while browsing your website. ## How it works When a new message arrives, a small notification popup appears in the corner of the screen showing a preview of the message. Users can click the notification to open the conversation directly. The notification automatically disappears if user read the conversation in another tab. The plugin can also display the unread message count in the browser tab title, making it visible even when the user is on another tab. ## Key capabilities - On-site notification popups for new messages - Configurable popup position (left or right corner) - Mobile-specific notification positioning (auto, top, or bottom) - Unread message count in browser tab title - Click to open the conversation directly from the notification ## How to enable Navigate to **WP Admin** → **Better Messages** → **Settings** → **Notifications**. - **On-Site Notifications** — Enable or disable notification popups - **Popup Position** — Left or right corner of the screen - **Mobile Position** — Auto, top, or bottom on mobile devices - **Title Notifications** — Show unread count in browser tab title --- ## Sound Notifications Better Messages plays sound notifications to alert users about new messages and incoming calls. ## How it works When a user receives a new message or an incoming call, the plugin plays an audio notification to get their attention. Each notification type has its own independent sound and volume control. Custom MP3 files can be uploaded through the WordPress media library to replace the default sounds. Users can optionally be given the ability to disable sounds from their personal settings. ## Key capabilities - Separate sound controls for incoming messages, sent messages, incoming calls, and outgoing call dialing - Independent volume control (0-100%) for each sound type - Custom MP3 upload support for each notification sound - Option to allow users to disable sounds from their settings - Sounds play across all pages when notifications are enabled ## How to enable Navigate to **WP Admin** → **Better Messages** → **Settings** → **Notifications**. - **Notification Sound** — Volume (0-100%) and optional custom MP3 for incoming messages - **Sent Sound** — Volume and optional custom MP3 for sent message confirmation - **Call Sound** — Volume and optional custom MP3 for incoming call ringtone - **Dialing Sound** — Volume and optional custom MP3 for outgoing call tone - **Allow Sound Disable** — Let users turn off notification sounds in their settings --- ## Stickers Better Messages supports stickers through integration with the Stipop sticker platform, adding a fun and engaging way to communicate. ## How it works When enabled, a sticker button appears in the message input area. Users can browse through a large library of sticker packs and send stickers directly in their conversations. The sticker library is provided by Stipop and includes thousands of sticker packs across various styles and themes. A free API key from Stipop is required to activate this feature. ## Key capabilities - Thousands of sticker packs available through Stipop - Sticker browser with categories and search - Send stickers in any conversation type (private, group, chat rooms) - Configurable language for sticker content - Free Stipop API key required ## How to enable Navigate to **WP Admin** → **Better Messages** → **Settings** → **Integrations** → **Stickers**. - **Stipop API Key** — Enter your API key from [Stipop](https://stipop.io) (leave empty to disable stickers) - **Language** — Set the language for sticker content :::tip You can get a free Stipop API key by registering at [stipop.io](https://stipop.io). ::: --- ## Subjects Better Messages allows users to set a subject line when starting a new conversation. ## How it works When composing a new conversation, users can enter a subject that describes the topic of discussion. The subject appears as the conversation title in the threads list, making it easier for all participants to identify and organize their conversations. Without a subject, conversations are typically identified by participant names. ## Key capabilities - Subject field on the new conversation screen - Subject displayed as conversation title in the threads list - Helps users organize and identify conversations at a glance - Optional — can be disabled if not needed ## How to enable Navigate to **WP Admin** → **Better Messages** → **Settings** → **Messaging**. - **Disable Subject** — Toggle to hide the subject field from the new conversation screen The subject field is enabled by default. --- ## Text Formatting Better Messages supports rich text formatting in messages through a visual toolbar. ## How it works A formatting toolbar appears above the message input area, providing easy access to common formatting options. Users can apply formatting by selecting text and clicking a toolbar button, or by using the toolbar before typing. This makes messages more expressive and easier to read without requiring users to know any special syntax. ## Available formatting - **Bold** — Emphasize important text - **Italic** — Add emphasis or indicate titles - **Underline** — Underline text for emphasis - **Strikethrough** — Show removed or outdated text - **Links** — Insert clickable hyperlinks - **Code** — Format inline code or code blocks ## Key capabilities - Visual formatting toolbar above the message input - Select text and click to apply formatting - Works alongside [Markdown support](/docs/features/markdown-support) for users who prefer typing syntax - Formatted messages render consistently for all recipients - Available in all conversation types ## How to enable Text formatting is enabled by default. No additional configuration is required. --- ## Fully Translatable Better Messages is fully translatable using the native WordPress translation system. ## How it works All user-facing strings in the plugin are wrapped with WordPress internationalization functions, making them available for translation through standard WordPress tools. You can translate the entire messaging interface into any language, or customize individual strings to match your site's tone and terminology. The plugin's text domain is `bp-better-messages`. ## Key capabilities - All user-facing strings are translatable - Compatible with Loco Translate, WPML, Polylang, and other translation plugins - Standard WordPress `.po/.mo` translation file support - Customize any string — not just translate, but also rephrase to match your brand - Text domain: `bp-better-messages` ## How to translate **Using Loco Translate (recommended):** 1. Install and activate the [Loco Translate](https://wordpress.org/plugins/loco-translate/) plugin 2. Navigate to **WP Admin** → **Loco Translate** → **Plugins** → **Better Messages** 3. Click **New language** to add a translation 4. Translate strings using the built-in editor 5. Save your translations **Using WPML or Polylang:** These plugins automatically detect translatable strings from Better Messages and include them in their translation workflow. **Manual translation:** Place your `.po/.mo` files in `wp-content/languages/plugins/` following the WordPress naming convention: `bp-better-messages-{locale}.po`. --- ## Unread Conversations Filter Better Messages includes an unread conversations filter for quickly finding conversations with new messages. ## How it works When enabled, a filter button appears in the conversations list that toggles between showing all conversations and showing only those with unread messages. This is especially useful for users with many conversations, allowing them to quickly focus on conversations that need their attention. The unread counter can be configured to count either individual unread messages or unread conversations. ## Key capabilities - Filter button to show only unread conversations - Toggle between all conversations and unread-only view - Configurable unread counter mode (messages or conversations) - Helps users manage busy inboxes ## How to enable Navigate to **WP Admin** → **Better Messages** → **Settings** → **Messaging**. - **Enable Unread Filter** — Show the unread filter button in the conversations list - **Unread Counter** — Count unread messages or unread conversations --- ## User to User Block Better Messages allows users to block other users from sending them messages. ## How it works When a user blocks another user, the blocked person can no longer start new conversations with or send messages to the person who blocked them. The block is one-directional — the blocker can still message the blocked user if they choose. Administrators can control which user roles have access to the blocking feature and which roles are immune to being blocked. ## Key capabilities - Block any user from sending you messages - One-directional blocking (blocker can still message the blocked user) - Blocked users cannot start new conversations with the blocker - Role-based control over who can use blocking - Role-based immunity from being blocked - Users can unblock at any time ## How to enable Navigate to **WP Admin** → **Better Messages** → **Settings** → **Restrictions**. - **Allow Users to Block** — Enable the blocking feature - **Roles That Cannot Block** — User roles that are not allowed to use the block feature - **Immune Roles** — User roles that cannot be blocked by other users --- ## Verified Badges Better Messages can display verified badges next to user names in the messaging interface. ## How it works Verified status is pulled from compatible community plugins such as BuddyPress, PeepSo, and other supported integrations. When a user has verified status in the connected plugin, a badge icon appears next to their display name in conversations and user lists. This helps users identify trusted or verified accounts in the messaging interface. ## Key capabilities - Verified badge icon next to user display names - Automatic integration with BuddyPress, PeepSo, and other plugins - Visible in conversations, user lists, and message headers - Badge status synced from the community plugin ## How to enable Verified badges are displayed automatically when a compatible community plugin with verification features is active. The badge status comes from the connected plugin's user verification system. No additional configuration in Better Messages is needed. --- ## White Label Better Messages is a white-label solution that integrates seamlessly into your website without any visible plugin branding. ## How it works The messaging interface appears as a native part of your website with no "Better Messages" or "Powered by" attribution displayed to end users. Combined with the color customization options and translatable strings, you can create a messaging experience that feels entirely custom-built for your site. ## Key capabilities - No visible "Better Messages" branding in the user interface - No "Powered by" or attribution links shown to users - Fully customizable accent colors through WordPress Customizer - All text strings can be translated or modified to match your brand voice - Seamless integration with any WordPress theme - Your users see the messaging system as part of your website ## How to enable White label is built into Better Messages by default — no configuration needed. The plugin never displays branding to your end users. To further customize the appearance: - **Colors:** **WP Admin** → **Appearance** → **Customize** → **Better Messages** - **Text strings:** Use [Loco Translate](https://wordpress.org/plugins/loco-translate/) or any WordPress translation plugin to modify any text --- ## WordPress Native API Better Messages is built using native WordPress architecture, making it easy for developers to extend and customize. ## How it works The plugin uses WordPress action hooks, filters, and the REST API throughout its codebase. This means developers can intercept and modify the plugin's behavior using standard WordPress development practices. Whether you need to customize message handling, add integrations, or modify the user interface, the plugin provides hooks at every key point in the messaging workflow. ## Key capabilities - Full REST API for programmatic access to messaging functionality - WordPress action hooks for intercepting events (message sent, conversation created, etc.) - WordPress filters for modifying data (message content, user permissions, etc.) - Standard WordPress coding patterns and conventions - Compatible with other WordPress plugins and custom development - Hook prefix: `better-messages` (previously `bp-better-messages`) ## Developer resources For detailed documentation on available hooks, filters, functions, and API endpoints, see the Customization section in the sidebar. It covers PHP functions, PHP actions, PHP filters, JavaScript functions, JavaScript actions, JavaScript filters, CSS snippets, and developer guides. --- ## What is Better Messages? **Better Messages** - is a WordPress plugin that allows website owners to create realtime private messaging and chat room systems within their WordPress websites. This plugin can be useful for websites that want to provide a way for users to communicate with each other privately or within designated chat rooms. The plugin provides real-time messaging capabilities, allowing users to engage in instant and live conversations. ## AJAX Version The free version of the plugin uses AJAX, a common web technology for asynchronous communication, to power the real-time messaging features. It allows you to create a basic messaging system without the need of additional server costs, but it requires more server resources and not support all the WebSocket features. ## WebSocket Version WebSocket is a faster and more efficient communication protocol. WebSocket offering improved real-time communication performance and reduced latency, also significantly reduces a load to hosting servers. When you are getting WebSocket license for Better Messages, you don't need to get an extra server for it — this WebSocket hosting service is included in the price of WebSocket version license and does not require any extra configuration. There is also an option for a self-hosted version of Better Messages, which will require a dedicated server to make it running. Self-hosted version is only recommended to be running if you have specific data security requirements (GDPR,HIPPA,etc) The price of Self-Hosted version is currently $300 per year. --- ## Conversation Types Better Messages has few types of conversation which are used depending on needs. ## Standard Conversations The standard type of conversations, it allows users to create private conversations with each other or even create multiple participant conversations. ## Chat Rooms Chat Rooms allow website administrator to create an unlimited number of conversations to embed them to any page, define which user roles can join that chat rooms, allow or disallow guest users to join chat rooms. When you're creating a Chat Room, you get the shortcode, which you can use to embed the chat room anywhere at your WordPress website. Chat room will also appear in user inbox if you enable that in chat room settings. ## Group Chats Group Chats are a special integration implemented with some 3rd party WordPress plugins, which allows to create user groups. Group Chats are automatically syncing members of 3rd party plugin user group and creating chat based on it. This is currently available for: - [BuddyPress Groups](https://buddypress.org/about/groups/) - [PeepSo Groups](https://www.wordplus.org/peepso/) - [Ultimate Member Groups](https://ultimatemember.com/extensions/groups/) - BuddyBoss Groups --- ## Installation :::info REQUIREMENTS To install the plugin ensure that your website running: - **WordPress 5.9 or newer** - **PHP 7.1 or newer** ::: ## How to install The Installation process does not different from any other WordPress plugin. ### General 1. Install the plugin through the WordPress plugins screen directly or upload the plugin files manually to the `/wp-content/plugins/bp-better-messages` directory. 2. Activate the plugin through the **Plugins** screen in WordPress 3. Use the **Better Messages** -> **Settings** menu to configure the plugin ### [Integrations](/docs/category/integrations) * [BuddyPress](/docs/integrations/buddypress) * [BuddyBoss](/docs/integrations/buddyboss) * [PeepSo](/docs/integrations/peepso) * [Ultimate Member](/docs/integrations/ultimate-member) --- ## Messages Location Every user has access to his personal dedicated inbox, where all conversations which users belong to are listed. The user is able to open any conversation and send replies from this page. ![Better Messages - User Inbox](img/user-inbox.png) The location of inbox is required to be set can be set in Better Messages settings page in WP Admin. ![Better Messages - Location](img/location-setting.png) --- ## AutomatorWP :::info REQUIREMENTS To install the plugin ensure that your website running: - **WordPress 5.9 or newer** - **PHP 7.1 or newer** ::: ## Installation ### How to install AutomatorWP **[Download AutomatorWP](https://www.wordplus.org/automatorwp)** from official website and install following standard WordPress installation process ### How to install Better Messages with AutomatorWP 1. Install the plugin through the WordPress plugins screen directly or upload the plugin files to the `/wp-content/plugins/bp-better-messages` directory. 2. Activate the plugin through the **Plugins** screen in WordPress 3. Use the **Better Messages** -> **Settings** menu to configure the plugin ### Supported actions #### Send a private message to the user --- ## BuddyBoss :::info REQUIREMENTS To install the plugin ensure that your website running: - **WordPress 5.9 or newer** - **PHP 7.1 or newer** ::: ## Installation ### How to install BuddyBoss **[Download BuddyBoss](https://www.wordplus.org/buddyboss)** from official website and install following standard WordPress installation process ### How to install Better Messages with BuddyBoss 1. Install the plugin through the WordPress plugins screen directly or upload the plugin files to the `/wp-content/plugins/bp-better-messages` directory. 2. Activate the plugin through the **Plugins** screen in WordPress 3. Use the **Better Messages** -> **Settings** menu to configure the plugin 4. Set **Messages Location** to **Show in BuddyBoss profile** or you can also set any WordPress page to be a messages homepage ### Supported features When you install BuddyBoss plugin with Better Messages: - BuddyBoss Web Push feature automatically integrated to plugin - BuddyBoss Live Messaging features automatically disabled when plugin is activated - BuddyBoss Messages related restrictions automatically applied to Better Messages - BuddyBoss Messages in header automatically replaced by Better Messages conversations list - All links to private messages automatically points to Better Messages - All avatars in Better Messages interface automatically displayed from BuddyBoss user profiles - All links to user profiles in Better Messages interface automatically points to BuddyBoss user profiles #### BuddyBoss Friends Automatically integrates to BuddyBoss Friends, it's also possible to show Mini Friends Widget and Friends Tab in Messages page ![Friends list](friends.png) #### BuddyBoss Groups Automatically integrates to BuddyBoss Groups, it's also possible to show Mini Groups Widget and Groups Tab in Messages page The feature also allow to create Better Messages Group chats automatically based on groups members, with automatic removal and adding users from chat, when they're leaving or joining the group. ![Groups list](groups.png) #### Video & Audio call buttons are added to user profile (WebSocket Version) ![Call buttons](video-call.png) --- ## BuddyPress :::info REQUIREMENTS To install the plugin ensure that your website running: - **WordPress 5.9 or newer** - **PHP 7.1 or newer** ::: ## Installation ### How to install BuddyPress **[Download BuddyPress](https://wordpress.org/plugins/buddypress)** from official website and install following standard WordPress installation process ### How to install Better Messages with BuddyPress 1. Install the plugin through the WordPress plugins screen directly or upload the plugin files to the `/wp-content/plugins/bp-better-messages` directory. 2. Activate the plugin through the **Plugins** screen in WordPress 3. Use the **Better Messages** -> **Settings** menu to configure the plugin 4. Set **Messages Location** to **Show in BuddyPress profile** or you can also set any WordPress page to be a messages homepage ### Video demonstration ### Supported features When you install BuddyPress plugin with Better Messages: - All links to private messages automatically points to Better Messages - All avatars in Better Messages interface automatically displayed from BuddyPress user profiles - All links to user profiles in Better Messages interface automatically points to BuddyPress user profiles - Automatically integrated to BuddyPress Friends with ability to create Friends List directly in plugin interface - Automatically integrated to BuddyPress Groups with ability to create Groups List directly in plugin interface The feature also allow to create Better Messages Group chats automatically based on groups members, with automatic removal and adding users from chat, when they're leaving or joining the group. --- ## Dokan :::info REQUIREMENTS To install the plugin ensure that your website running: - **WordPress 5.9 or newer** - **PHP 7.1 or newer** ::: ### Video demonstration ## Installation ### How to install Dokan **[Download Dokan](https://www.wordplus.org/dokan)** from official website and install following standard WordPress installation process ### How to install Better Messages with Dokan 1. Install the plugin through the WordPress plugins screen directly or upload the plugin files to the `/wp-content/plugins/bp-better-messages` directory. 2. Activate the plugin through the **Plugins** screen in WordPress 3. Use the **Better Messages** -> **Settings** menu to configure the plugin 4. Go to **Integrations -> Other Plugins** and **Enable Live Chat for Vendors** in **Dokan Marketplace Integration** section ![Settings](settings.png) ### Supported features When you install Dokan plugin with Better Messages: - Vendors has new setting in Shop Configuration to enable Live Chat - When Live Chat is enabled in Shop Configuration - the Live Chat tab appears at Vendor Dashboard - All vendor avatars in Better Messages interface automatically displayed from Dokan Vendor shop profiles - All links to vendors in Better Messages interface automatically points to Dokan Vendor shop profiles #### Adds Live Chat tab to Vendor Dashboard ![Dashboard](vendor-dashboard.png) #### Adds Live Chat button to products which are selling by vendors If you are using custom page builder or button does not show up due to different reasons, you can use this shortcode to show the button at your product page `[better_messages_dokan_product_button]` ![Product Page](product-page.png) #### Adds Live Chat button to vendor shop page ![Shop Page](shop-page.png) --- ## FluentCommunity :::info REQUIREMENTS To install the plugin ensure that your website running: - **WordPress 5.9 or newer** - **PHP 7.1 or newer** ::: ## Installation ### How to install FluentCommunity **[Download FluentCommunity](https://www.wordplus.org/fluentcommunity)** from official website and install following standard WordPress installation process ### How to install Better Messages with FluentCommunity 1. Install the plugin through the WordPress plugins screen directly or upload the plugin files to the `/wp-content/plugins/bp-better-messages` directory. 2. Activate the plugin through the **Plugins** screen in WordPress 3. Use the **Better Messages** -> **Settings** menu to configure the plugin 4. Set **Show in FluentCommunity Portal** in Better Messages location settings. 5. If you are using **Fluent Messaging** - disable it as it makes no sense to use it together with **Better Messages** 6. Go to **WP Admin** -> **Better Messages** -> **Settings** -> **Integrations** -> **FluentCommunity** and configure integration :::note The **FluentCommunity** tab in Better Messages integration settings only appears when the FluentCommunity plugin is installed and active. ::: ### Supported features When you install the FluentCommunity plugin with Better Messages: - Automatically place messages page button to header menu and mobile bottom menu - Automatically adds private message, video and audio call buttons to user profile to user profiles - All avatars in Better Messages interface are automatically displayed from FluentCommunity user profiles - All links to user profiles in Better Messages interface automatically point to FluentCommunity user profiles - Automatic switch between dark and light modes based on FluentCommunity settings - Allow creating group messages with automatic removal and adding users from chat, when they're leaving or joining the group ### Profile page ![Profile Page](profile.png) --- ## GamiPress The integration with GamiPress allows charging users for messaging and private calls using GamiPress point types. GamiPress is supported through a unified Points System with provider abstraction, shared with MyCred. :::info REQUIREMENTS To install the plugin ensure that your website running: - **WordPress 5.9 or newer** - **PHP 7.1 or newer** ::: ## Installation ### How to install GamiPress **[Download GamiPress](https://www.wordplus.org/gamipress)** from official website and install following standard WordPress installation process. ### How to install Better Messages with GamiPress 1. Install the plugin through the WordPress plugins screen directly or upload the plugin files to the `/wp-content/plugins/bp-better-messages` directory. 2. Activate the plugin through the **Plugins** screen in WordPress. 3. Use the **Better Messages** → **Settings** → **Integrations** → **Points Systems** menu to configure the integration. ## Configuration ### Point Type Select which GamiPress point type to use for charging. ### Charge Types - **New message** — charge when a user sends a message - **New thread** — charge when a user creates a new conversation ### Charge Categories Different rates can be configured for each conversation type: - **Private threads** — one-on-one conversations - **Groups** — group conversations - **Chat rooms** — chat room messages ### Per-Role Pricing Different charge amounts can be set per WordPress user role for messages, new threads, and calls. ### AI Usage Charging Points can be charged for AI bot responses. This is configured per-bot in the AI Bots settings. ### Balance Display The user's point balance can be shown in multiple locations: - Chat header - Threads list (top) - Threads list (bottom) - User menu - User menu popup - Reply form area ### Balance URL A configurable external URL can be set where users can manage or purchase points. --- ## GIPHY Within the plugin settings, you can add GIPHY integration by entering GIPHY API key. ## Production Requirements When you are ready to move to a GIPHY production key, they require you to have their copyright; it's easy to add with the following CSS: ```css .bpbm-gif:before { position: absolute; content: ""; width: 54px; height: 24px; bottom: 5px; right: 5px; background-color: black; background-color: rgb(0 0 0 / 50%); background-image: url(https://cdn.better-messages.com/images/giphy.png); background-repeat: no-repeat; background-position: center; background-size: 50px 18px; padding: 0; color: white; border-radius:3px; opacity: 1; font-size: 10px; line-height: 17px; z-index: 10; } .bpbm-gifs-selector-gif-container:before{ position: absolute; content: ''; bottom: 5px; left: 5px; width: 54px; height: 24px; background-color: black; background-color: rgb(0 0 0 / 50%); background-image: url(https://cdn.better-messages.com/images/giphy.png); background-repeat: no-repeat; background-position: center; background-size: 50px 18px; padding: 0; color: white; border-radius:3px; opacity: 1; font-size: 10px; line-height: 17px; z-index: 10; } ``` --- ## HivePress :::info REQUIREMENTS To install the plugin ensure that your website running: - **WordPress 5.9 or newer** - **PHP 7.1 or newer** ::: ### Video demonstration ## Installation ### How to install HivePress **[Download HivePress](https://www.wordplus.org/hivepress)** from official website and install following standard WordPress installation process ### How to install Better Messages with HivePress 1. Install the plugin through the WordPress plugins screen directly or upload the plugin files to the `/wp-content/plugins/bp-better-messages` directory. 2. Activate the plugin through the **Plugins** screen in WordPress 3. Use the **Better Messages** -> **Settings** menu to configure the plugin 4. Go to **Integrations -> Other Plugins** and **Enable Live Chat for Vendors** in **HivePress Integration** section ![Settings](settings.png) ### Supported features When you install HivePress plugin with Better Messages, the Better Messages plugin doing the same as native HivePress Messages plugin, but providing much more features and functionality. #### Adds Send Message button to the HivePress listing item in HivePress lists ![Listing item](listing-item.png) #### Adds Send Message button to the HivePress listing page ![Listing page](listing-page.png) #### Adds Send Message button to the HivePress booking lists and booking page ![Booking list](booking-list.png) ![Booking page](booking-page.png) #### Adds Send Message button to the HivePress vendors lists and vendors page ![Vendor list](vendor-list.png) ![Vendor page](vendor-page.png) --- ## Crocoblock JetEngine :::info REQUIREMENTS To install the plugin ensure that your website running: - **WordPress 5.9 or newer** - **PHP 7.1 or newer** ::: ## Installation ### How to install Crocoblock JetEngine **[Get JetEngine](https://www.wordplus.org/jetengine)** from official website and install following standard WordPress installation process ### How to install Better Messages with JetEngine Profile Builder 1. Install the plugin through the WordPress plugins screen directly or upload the plugin files to the `/wp-content/plugins/bp-better-messages` directory. 2. Activate the plugin through the **Plugins** screen in WordPress 3. Use the **Better Messages** -> **Settings** menu to configure the plugin 4. Go to **Integrations** -> **Other plugins** and configure integration in **JetEngine** section ![Settings](settings.png) ### Supported features When you install JetEngine Profile Builder plugin with Better Messages: - Private message shortcodes will correctly point to user when put to JetEngine Profile Builder user profiles - All avatars in Better Messages interface automatically displayed from JetEngine Profile Builder user profiles if enabled --- ## MultiVendorX :::info REQUIREMENTS To install the plugin ensure that your website running: - **WordPress 5.9 or newer** - **PHP 7.1 or newer** ::: ### Video demonstration ## Installation ### How to install MultiVendorX **[Download MultiVendorX](https://www.wordplus.org/multivendorx)** from official website and install following standard WordPress installation process ### How to install Better Messages with MultiVendorX 1. Install the plugin through the WordPress plugins screen directly or upload the plugin files to the `/wp-content/plugins/bp-better-messages` directory. 2. Activate the plugin through the **Plugins** screen in WordPress 3. Use the **Better Messages** -> **Settings** menu to configure the plugin 4. Go to **Integrations -> Other Plugins** and **Enable Live Chat for Vendors** in **MultiVendorX Integration** section ![Settings](settings.png) ### Supported features When you install MultiVendorX plugin with Better Messages: - Vendors have a new setting in Shop Configuration to enable Live Chat - When Live Chat is enabled in Shop Configuration - the Live Chat tab appears at Vendor Dashboard - All vendor avatars in Better Messages interface automatically displayed from MultiVendorX shop profiles - All links to vendors in Better Messages interface automatically points to MultiVendorX shop profiles #### Adds Live Chat tab to Vendor Dashboard ![Dashboard](vendor-dashboard.png) #### Adds Live Chat button to products which are selling by vendors If you are using custom page builder or button does not show up due to different reasons, you can use this shortcode to show the button at your product page `[better_messages_multivendorx_product_button]` ![Product Page](product-page.png) #### Adds Live Chat button to vendor shop page If you are using custom page builder or button does not show up due to different reasons, you can use this shortcode to show the button at your shop page `[better_messages_multivendorx_store_button]` ![Shop Page](shop-page.png) --- ## MyCred The integration with MyCred allows charging users for messaging and private calls using MyCred points. MyCred is supported through a unified Points System with provider abstraction, shared with GamiPress. :::info REQUIREMENTS To install the plugin ensure that your website running: - **WordPress 5.9 or newer** - **PHP 7.1 or newer** ::: ## Installation ### How to install MyCred **[Download MyCred](https://www.wordplus.org/mc)** from official website and install following standard WordPress installation process. ### How to install Better Messages with MyCred 1. Install the plugin through the WordPress plugins screen directly or upload the plugin files to the `/wp-content/plugins/bp-better-messages` directory. 2. Activate the plugin through the **Plugins** screen in WordPress. 3. Use the **Better Messages** → **Settings** → **Integrations** → **Points Systems** menu to configure the integration. ## Configuration ### Point Type Select which MyCred point type to use for charging. ### Charge Types - **New message** — charge when a user sends a message - **New thread** — charge when a user creates a new conversation ### Charge Categories Different rates can be configured for each conversation type: - **Private threads** — one-on-one conversations - **Groups** — group conversations - **Chat rooms** — chat room messages ### Per-Role Pricing Different charge amounts can be set per WordPress user role for messages, new threads, and calls. ### AI Usage Charging Points can be charged for AI bot responses. This is configured per-bot in the AI Bots settings. ### Balance Display The user's point balance can be shown in multiple locations: - Chat header - Threads list (top) - Threads list (bottom) - User menu - User menu popup - Reply form area ### Balance URL A configurable external URL can be set where users can manage or purchase points. --- ## OneSignal ![OneSignal](https://ps.w.org/onesignal-free-web-push-notifications/assets/banner-1544x500.png) :::info WebSocket Version Guide <>This functionality available only with WebSocket Version ::: :::info Compatibility <>This { (props.type ? props.type : 'guide') } compatible with Better Messages {props.version} or higher ::: ## Installation 1. **[Download OneSignal](https://wordpress.org/plugins/onesignal-free-web-push-notifications/)** from official website and install following standard WordPress installation process 2. Configure OneSignal plugin following **[official guide](https://documentation.onesignal.com/docs/wordpress)** By default, OneSignal WordPress plugin does not assign external user id to web push subscription, but that is required for sending private messages notifications, so Better Messages will try to automatically associate user IDs to OneSignal subscriptions as External User Ids. --- ## PeepSo :::info REQUIREMENTS To install the plugin ensure that your website running: - **WordPress 5.9 or newer** - **PHP 7.1 or newer** ::: ## Installation ### How to install PeepSo **[Download PeepSo](https://www.wordplus.org/peepso)** from official website and install following standard WordPress installation process ### How to install Better Messages with PeepSo 1. Install the plugin through the WordPress plugins screen directly or upload the plugin files to the `/wp-content/plugins/bp-better-messages` directory. 2. Activate the plugin through the **Plugins** screen in WordPress 3. Create WordPress page where the messages will be located 4. Use the **Better Messages** -> **Settings** menu to configure the plugin 5. Set **Messages Location** to page which you created at step 3. 6. If you are using **PeepSo Core: Chat plugin** - disable it as it makes no sense to use it together with **Better Messages** ### Supported features When you install PeepSo plugin with Better Messages: - Automatically adds links to user profile and members directory which points to Better Messages - All avatars in Better Messages interface automatically displayed from PeepSo user profiles - All links to user profiles in Better Messages interface automatically points to PeepSo user profiles - Automatically integrated to PeepSo Friends with ability to create Friends List directly in plugin interface - Automatically integrated to PeepSo Groups with ability to create Groups List directly in plugin interface The feature also allow to create Better Messages Group chats automatically based on groups members, with automatic removal and adding users from chat, when they're leaving or joining the group. --- ## ProfileGrid :::info REQUIREMENTS To install the plugin ensure that your website running: - **WordPress 5.9 or newer** - **PHP 7.1 or newer** ::: ## Installation ### How to install ProfileGrid **[Download ProfileGrid](https://www.wordplus.org/profilegrid)** from official website and install following standard WordPress installation process ### How to install Better Messages with ProfileGrid 1. Install the plugin through the WordPress plugins screen directly or upload the plugin files to the `/wp-content/plugins/bp-better-messages` directory. 2. Activate the plugin through the **Plugins** screen in WordPress 3. Use the **Better Messages** -> **Settings** menu to configure the plugin 4. Set **Messages Location** to **Show in ProfileGrid profile** or you can also set any WordPress page to be a messages homepage 5. If you are using **ProfileGrid Messages** - disable it as it makes no sense to use it together with **Better Messages** ### Supported features When you install ProfileGrid plugin with Better Messages: - All avatars in Better Messages interface automatically displayed from ProfileGrid user profiles - All links to user profiles in Better Messages interface automatically points to ProfileGrid user profiles #### Automatically adding messages tab in currently logged-in user profile ![Profile Page](profile-page.png) #### Automatically adding private message button in other user profiles ![Other Profile Page](other-profile.png) --- ## Progressify ![Progressify](progressify-screenshot.png) :::info WebSocket Version Guide <>This functionality available only with WebSocket Version ::: :::info Compatibility <>This { (props.type ? props.type : 'guide') } compatible with Better Messages {props.version} or higher ::: ## Overview [Progressify](https://www.wordplus.org/progressify) is a plugin which allows you to convert your website into PWA (Progressive Web App), including sending push notifications to your users. Special integration is required to send messages notifications from Better Messages to your users, which is now included in Better Messages plugin. ## Installation 1. **[Get Progressify](https://www.wordplus.org/progressify)** from official website and install following standard WordPress installation process 2. Configure Progressify plugin and enable push notifications in Progressify settings Better Messages will automatically detect Progressify plugin and enable push notifications integration, that will be displayed in Better Messages -> Settings -> Notifications. ![Better Messaegs - Progressify](bm.png) ## Bottom menu overlap fix If you are using Progressify's bottom navigation menu, it may overlap the Better Messages reply area on mobile devices. Add the following CSS to fix this: ```css .bp-messages-chat-wrap.bp-messages-mobile, .bp-messages-single-thread-wrap.bp-messages-mobile, .bp-messages-wrap-group.bp-messages-mobile, .bp-messages-wrap-main.bp-messages-mobile { bottom: 58px !important; } ``` You can add this CSS via **WP Admin** → **Appearance** → **Customize** → **Additional CSS**, or use the `better_messages_css_customizations` filter. --- ## SureDash :::info REQUIREMENTS To install the plugin ensure that your website running: - **WordPress 5.9 or newer** - **PHP 7.1 or newer** ::: ## Installation ### How to install SureDash **[Download SureDash](https://www.wordplus.org/suredash)** from official website and install following standard WordPress installation process ### How to install Better Messages with SureDash 1. Install the plugin through the WordPress plugins screen directly or upload the plugin files to the `/wp-content/plugins/bp-better-messages` directory. 2. Activate the plugin through the **Plugins** screen in WordPress 3. Use the **Better Messages** -> **Settings** menu to configure the plugin 4. Set **Show in SureDash Portal** in Better Messages location settings. 5. Go to **WP Admin** -> **Better Messages** -> **Settings** -> **Integrations** -> **SureDash** and configure integration :::note The **SureDash** tab in Better Messages integration settings only appears when the SureDash plugin is installed and active. ::: ### Supported features When you install the SureDash plugin with Better Messages: - Messages page is embedded directly into the SureDash portal - Adds private message button to SureDash user profile pages - Adds compact message icon next to post and comment authors in SureDash discussions - Messages link with unread counter in SureDash sidebar navigation - Messages link with unread counter in SureDash user profile dropdown menu - All links to user profiles in Better Messages Interface automatically point to SureDash user profiles - Automatic switch between dark and light modes based on SureDash settings - Adds video and audio call buttons to user profiles --- ## Ultimate Member :::info REQUIREMENTS To install the plugin ensure that your website running: - **WordPress 5.9 or newer** - **PHP 7.1 or newer** ::: ## Installation ### How to install Ultimate Member **[Download Ultimate Member](https://wordpress.org/plugins/ultimate-member)** from official website and install following standard WordPress installation process ### How to install Better Messages with Ultimate Member 1. Install the plugin through the WordPress plugins screen directly or upload the plugin files to the `/wp-content/plugins/bp-better-messages` directory. 2. Activate the plugin through the **Plugins** screen in WordPress 3. Use the **Better Messages** -> **Settings** menu to configure the plugin 4. Set **Messages Location** to **Show in Ultimate Member profile** or you can also set any WordPress page to be a messages homepage 5. If you are using **Ultimate Member Messages** - disable it as it makes no sense to use it together with **Better Messages** ### Supported features When you install Ultimate Member plugin with Better Messages: - Automatically adds links to user profile and members directory which points to Better Messages - All avatars in Better Messages interface automatically displayed from Ultimate Member user profiles - All links to user profiles in Better Messages interface automatically points to BuddyPress user profiles - Automatically integrated to Ultimate Member Friends with ability to create Friends List directly in plugin interface - Automatically integrated to Ultimate Member Groups with ability to create Groups List directly in plugin interface The feature also allow to create Better Messages Group chats automatically based on groups members, with automatic removal and adding users from chat, when they're leaving or joining the group. --- ## Uncanny Automator :::info REQUIREMENTS To install the plugin ensure that your website running: - **WordPress 5.9 or newer** - **PHP 7.1 or newer** ::: ## Installation ### How to install Uncanny Automator **[Download Uncanny Automator](https://www.wordplus.org/uncanny)** from official website and install following standard WordPress installation process ### How to install Better Messages with Uncanny Automator 1. Install the plugin through the WordPress plugins screen directly or upload the plugin files to the `/wp-content/plugins/bp-better-messages` directory. 2. Activate the plugin through the **Plugins** screen in WordPress 3. Use the **Better Messages** -> **Settings** menu to configure the plugin 4. Set **Messages Location** to **Show in BuddyPress profile** or you can also set any WordPress page to be a messages homepage ### Supported actions #### Send a private message to the user --- ## UsersWP :::info REQUIREMENTS To install the plugin ensure that your website running: - **WordPress 5.9 or newer** - **PHP 7.1 or newer** ::: ## Installation ### How to install UsersWP **[Download UsersWP](https://www.wordplus.org/userswp)** from official website and install following standard WordPress installation process ### How to install Better Messages with UsersWP 1. Install the plugin through the WordPress plugins screen directly or upload the plugin files to the `/wp-content/plugins/bp-better-messages` directory. 2. Activate the plugin through the **Plugins** screen in WordPress 3. Use the **Better Messages** -> **Settings** menu to configure the plugin 4. Set **Messages Location** to **Show in UsersWP profile** or you can also set any WordPress page to be a messages homepage ### Supported features When you install UsersWP plugin with Better Messages: - All avatars in Better Messages interface automatically displayed from UsersWP user profiles - All links to user profiles in Better Messages interface automatically points to UsersWP user profiles #### Automatically adding messages tab in currently logged-in user profile ![Profile Page](profile-page.png) #### Automatically adding private message button in other user profiles ![Other Profile Page](other-profile.png) --- ## WP Job Manager :::info REQUIREMENTS To install the plugin ensure that your website running: - **WordPress 5.9 or newer** - **PHP 7.1 or newer** ::: ## Installation ### How to install WP Job Manager **[Download WP Job Manager](https://www.wordplus.org/wpjobmanager)** from official website and install following standard WordPress installation process ### How to install Better Messages with WP Job Manager 1. Install the plugin through the WordPress plugins screen directly or upload the plugin files to the `/wp-content/plugins/bp-better-messages` directory. 2. Activate the plugin through the **Plugins** screen in WordPress 3. Use the **Better Messages** -> **Settings** menu to configure the plugin 4. Go to **Integrations -> Other Plugins** and **Enable Live Chat for Job Listings** in **WP Job Manager Integration** section ![Settings](settings.png) After the option is activated, all active job listings that are not filled or expired will have "Send Messages" button after job listing description. ![Job Listing](job-listing-page.png) After pressing the Send Message button, user will be directed to private conversation screen, where he can contact job listing author: ![Job Messages](messages-page.png) If after the conversation is created, the job listing item is filled or expired, the user will not be able to send messages anymore and will see the following messages: ![Job Filled](job-filled.png) ![Job Expired](job-expired.png) --- ## WP User Manager :::info REQUIREMENTS To install the plugin ensure that your website running: - **WordPress 5.9 or newer** - **PHP 7.1 or newer** ::: ## Installation ### How to install WP User Manager **[Download WP User Manager](https://www.wordplus.org/wp-user-manager)** from official website and install following standard WordPress installation process ### How to install Better Messages with WP User Manager 1. Install the plugin through the WordPress plugins screen directly or upload the plugin files to the `/wp-content/plugins/bp-better-messages` directory. 2. Activate the plugin through the **Plugins** screen in WordPress 3. Use the **Better Messages** -> **Settings** menu to configure the plugin 4. Set **Messages Location** to **Show in WP User Manager profile** or you can also set any WordPress page to be a messages homepage ### Supported features When you install WP User Manager plugin with Better Messages: - All avatars in Better Messages interface automatically displayed from WP User Manager user profiles - All links to user profiles in Better Messages interface automatically points to WP User Manager user profiles #### Automatically adding messages tab in currently logged-in user profile ![Profile Page](profile-page.png) #### Automatically adding private message button in other user profiles ![Other Profile Page](other-profile.png) --- ## wpForo :::info REQUIREMENTS To install the plugin ensure that your website running: - **WordPress 5.9 or newer** - **PHP 7.1 or newer** ::: ## Installation ### How to install wpForo **[Download wpForo](https://www.wordplus.org/wpforo)** from official website and install following standard WordPress installation process ### How to install Better Messages with wpForo 1. Install the plugin through the WordPress plugins screen directly or upload the plugin files to the `/wp-content/plugins/bp-better-messages` directory. 2. Activate the plugin through the **Plugins** screen in WordPress 3. Use the **Better Messages** -> **Settings** menu to configure the plugin 4. Create WordPress page where the messages will be located 5. Set **Messages Location** to created WordPress page ### Supported features When you install wpForo plugin with Better Messages: - All avatars in Better Messages interface automatically displayed from wpForo user profiles - All links to user profiles in Better Messages interface automatically points to wpForo user profiles #### Automatically adding private message button in other user profiles ![Other Profile Page](other-profile.png) --- ## Android Application :::info WebSocket Version Guide <>This functionality available only with WebSocket Version ::: :::info Compatibility <>This { (props.type ? props.type : 'guide') } compatible with Better Messages {props.version} or higher ::: Android application feature allows you to generate native Android messenger application for your website, which allows you to send push and call notifications and can be published to the Google Play Market. ## Requirements - ### Firebase Project To be able to generate and publish Android application, you need to have [Firebase Project](https://console.firebase.google.com/) with enabled Firebase Cloud Messaging (FCM). - ### Play Market Developer Account (Production Only) To be able to publish Android application to the Google Play Market, you need to have [Google Play Developer Account](https://play.google.com/console/about/) (25 USD one-time fee). - ### Android Device To be able to install and test an Android application, you need to have Android device. ## Create Firebase Project For building Android application, you need to create Firebase Project and enable Firebase Cloud Messaging (FCM) for it. Follow these steps to create Firebase Project: 1. Go to [Firebase Console](https://console.firebase.google.com/) and login with your Google Account. 2. Click on **Create a Firebase Project** button to create a new Firebase Project. ![Firebase Create Project](img/firebase-2.png) 3. Enter your project name (for example `yourwebsite-messenger`) and click on **Continue** button. ![Firebase Project Name](img/firebase-3.png) Press continue until you reach the **Project Overview** page. 4. Click on the **Add app** button and select **Android**. ![Firebase Add Android App](img/firebase-4.png) 5. Enter your Android package name (for example `com.yourdomain.messenger`), app nickname and SHA-1 certificate fingerprint are optional and not required to be filled and click on **Register app** button. ![Firebase Register Android App](img/firebase-5.png) > The Android package name must be unique and should follow the reverse domain name notation (e.g., `com.yourdomain.messenger`). > For development and production applications, you can use the same package name, but it is recommended to use different package names for development and production applications to avoid conflicts. > You can add one more Android package name for development purpose to the same Firebase Project or create a separated Firebase Project if you want to have a separate Firebase configuration for development and production applications. 6. Download the `google-services.json` file and save it to your computer. You will need it later to configure the Android application build. ![Firebase Download Google Services JSON](img/firebase-6.png) 7. Click on **Next** button and then on **Continue to console** button to finish the Firebase Project creation. 8. In the Firebase Console, go to **Project Settings** → **Cloud Messaging** tab. ![Firebase Cloud Messaging Settings](img/firebase-7.png) 9. Ensure that **Firebase Cloud Messaging API (V1)** is **enabled**. If it is not enabled, click on the 3 dots menu and enable it in Google Cloud Console. ![Firebase Cloud Messaging API Enable](img/firebase-8.png) 10. Go to **Project Settings** → **Service accounts** tab and click on the **Generate new private key** button to download the service account key. ![Firebase Service Account Key](img/firebase-9.png) Save the downloaded JSON file to your computer, you will need it later to configure the Android application build in Better Messages settings. ## Development & Production Builds To generate Better Messages Android App Builds, it is required to configure for each type of build separately by uploading the `google-services.json` and `Firebase Admin SDK Private Key` files, which was downloaded from Firebase to **WP Admin** -> **Better Messages** -> **Mobile App** -> **Settings** -> **Android** page. ![Android Settings](img/android-1.png) 1. Set application name 2. Upload `google-services.json` file to Firebase SDK Configuration file field and select appropriate app id after upload. 3. Upload `Firebase Admin SDK Private Key` file to Firebase Admin SDK File field. After thats done it should look similar to this: ![Android Settings Completed](img/android-2.png) The image above shows the configuration for the development build, the configuration for the production build configuration is the same. To build the production build, you also need to Android Keystore file, which is used to sign the application before publishing it to the Google Play Market. You can generate the Android Keystore file using Android Studio at the same page or upload the existing one if you already have it. ![Android Keystore](img/android-keystore-1.png) After you have generated or uploaded the Android Keystore file, you will be able to build the production build of the Android application. ## Development Build Development build is used for testing purposes and can be installed only to Android devices or Emulators. You can install the development build to your Android device or Emulator by scanning QR code with camera and downloading the APK file or by downloading the APK file directly by url. ## Production Build Production build is only possible to upload to Google Play Store with AAB file, for that you need to have Google Developer Account, which is required to publish the application to the Google Play Market. You can register for a Google Developer Account [here](https://play.google.com/console/about/). --- ## iOS Application :::info WebSocket Version Guide <>This functionality available only with WebSocket Version ::: :::info Compatibility <>This { (props.type ? props.type : 'guide') } compatible with Better Messages {props.version} or higher ::: iOS application feature allows you to generate native iOS messenger application for your website, which allows you to send push and call notifications and can be published to the Apple App Store. Example of such application here: https://apps.apple.com/us/app/wordplus-messenger/id1598803821?platform=iphone ## Requirements - ### Apple Developer Program Account To be able to generate and publish iOS application, you need to have paid (99 USD /year) [Apple Developer Program Account](https://developer.apple.com/support/compare-memberships/). - ### iOS Device To be able to build an iOS application, you need to have at least one active iOS device added to [Apple Developer Devices List](https://developer.apple.com/account/resources/devices/list). ## Connection to Apple Developer Account After you have Apple Developer Program Account, to be able to generate Better Messages iOS app, you need to connect Better Messages to your App Store Connect API. 1. Go to [App Store Connect](https://appstoreconnect.apple.com/) and login with your Apple Developer Account. 2. Go to [**App Store Connect API** section](https://appstoreconnect.apple.com/access/integrations/api). 3. Under the **Team Keys** section, click on **+** button to create new key. ![App Store Connect API Add New Key](img/app-store-add-new-key.png) 4. Generate API Key with the **Admin access**, like at the screenshot: ![App Store Connect Generate API Key](img/generate-api-key.png) 5. After you generate the key, you will see the **Key ID**, **Issuer ID** and **Download API Key** button. Click on the **Download API Key** button to download the key. It is only possible to download the key once, so make sure to store it in a safe place. ![App Store Connect Generated API Key](img/generated-key.png) You will need these values to connect Better Messages to your App Store Connect API. 6. Navigate to your website WP Admin → Better Messages → Mobile App → Settings → iOS and fill the **Key ID**, **Issuer ID** and **API Key** fields with the values you got from the App Store Connect API and press **Connect** button. ![Better Messages iOS Connect](img/bm-ios-connect.png) 7. If everything is done correctly, you will see the green message bar confirming the connection is successful and you will be able to continue with the iOS app configuration. ![bm-ios-connected.png](img/bm-ios-connected.png) ## Configure Apple Development Team ID 1. Go to [Apple Developer Account](https://developer.apple.com/account) and login with your Apple Developer Account. 2. Scroll down to the **Membership details** section and copy the **Team ID**. ![app-store-team-id.png](img/app-store-team-id.png) 3. Navigate to your website WP Admin → Better Messages → Mobile App → Settings → iOS and fill the **Team ID** under a general section. ![bm-ios-team-id.png](img/bm-ios-team-id.png) ## Development & Production Builds To generate Better Messages iOS App Build, its required to configure for each type of build separately: - Application Name - Application Identifier - Notification Service Identifier ![ios-development.png](img/ios-development.png) ### Application Name This name will be used as primary mobile application name. Application name is limited to 30 characters, but only 12 characters will show under the icon at the mobile device applications list. ### Application Identifier Application Identifier is unique identifier for your application. It must be unique and match the application identifier in the Apple Developer Account. It is recommended to use the reverse domain name notation e.g.: Development build Application Identifier - **com.yoursitename.messenger.dev** #### Registering Application Identifiers 1. Go to [Apple Developer Account](https://developer.apple.com/account/resources/identifiers/list) and login with your Apple Developer Account. 2. Go to **Identifiers** section and click on **+** button to create a new identifier. ![app-store-create-identifier-1.png](img/app-store-create-identifier-1.png) 3. Select **App IDs** and press **Continue**. ![app-store-create-identifier-2.png](img/app-store-create-identifier-2.png) 4. Select **App** when asked for the type of identifier and press **Continue**. ![app-store-create-identifier-3.png](img/app-store-create-identifier-3.png) 5. Fill the **Description** field with your application name and fill the **Bundle ID** field with your application identifier (e.g. com.yoursitename.messenger). ![app-store-create-identifier-4.png](img/app-store-create-identifier-4.png) 6. The following capabilities must be enabled: - **Associated Domains** - **Push Notifications** - **Communication Notifications** - **Time Sensitive Notifications** 7. Press **Register** button to create the identifier. 8. After the identifier is created, you will need to go to Better Messages settings and press refresh list button to get the new identifier list, then select the identifier which is applicable for your development build. ![app-store-create-identifier-5.png](img/app-store-create-identifier-5.png) ### Notification Service Identifier Please repeat all the steps for [Application Identifier](#application-identifier) but add the suffix to the Bundle ID with **.notifications**. For example, if your main application bundle ID is **com.yoursitename.messenger.dev**, then the Notification Service Identifier should be **com.yoursitename.messenger.dev.notifications**. The notification service does not require any capacities to be enabled. # Application Builds After you have configured the iOS application settings, you can go to Builds tab and create the iOS application build. ![app-builds.png](img/app-builds.png) ## Development Build Development build is used for testing purposes and can be installed only to iOS devices, which were added to your Apple Developer Account Devices List. You can install the development build to your iOS device by scanning QR code with camera. ## Production Build Production build is only possible to upload to App Store Test Flight. There you will be able to test by users which are added to your Test Flight testers list or submit the application to the App Store for review. --- ## better_messages :::info **[How to add shortcodes?](https://www.wpbeginner.com/wp-tutorials/how-to-add-a-shortcode-in-wordpress/)** ::: Show the currently logged-in user inbox layout or login form for un-logged in users ``` [better_messages] ``` --- ## better_messages_video_call_button :::info **[How to add shortcodes?](https://www.wpbeginner.com/wp-tutorials/how-to-add-a-shortcode-in-wordpress/)** ::: :::info WebSocket Version Guide <>This functionality available only with WebSocket Version ::: **Audio call button shortcode** Shows audio call button Attribute Whats it for Default text Sets button text label "Private Message" user_id Set User ID with whom call will be started Post author of WordPress Post/Page url_only Set 1 to not render button, but display just URL 0 class Sets additional class to button html element. Useful for additional CSS styling. None ``` [better_messages_audio_call_button text="Audio Call" url_only="0" class="extra-class"] ``` --- ## better_messages_live_chat_button :::info **[How to add shortcodes?](https://www.wpbeginner.com/wp-tutorials/how-to-add-a-shortcode-in-wordpress/)** ::: **Live chat button shortcode** This shortcode is designed to be universal button for starting new conversation or continue existing conversation with same unique tag with any user on your website. This shortcode will point users to login page if they are not logged in, if a user is logged in, it will open a new conversation or continue existing one with the same unique tag based on plugin settings. For example, if mini chats are enabled, it will open mini chat, but if mini chats are disabled it will open full page chat. Attribute Whats it for Default text Sets button text label "Live Chat" user_id Set User ID with whom conversation will be started Post author of WordPress Post/Page type Type of html element, can be button on link button subject Set subject for conversation If conversation already exists it will be ignored None target [HTML a target attribute](https://www.w3schools.com/tags/att_a_target.asp) None unique_tag This will be usefully if you want to create unique conversations between buyers and seller, when they're discussing different products. For example set unique_tag to product_123 to create or open additional unique conversation between 2 members based on the tag. None class Sets additional class to button html element. Useful for additional CSS styling. None ``` [better_messages_live_chat_button type="button" unique_tag="product_chat_15" text="Product Chat" user_id="5" subject="Product Chat Subject"] ``` --- ## better_messages_mini_chat_button :::info **[How to add shortcodes?](https://www.wpbeginner.com/wp-tutorials/how-to-add-a-shortcode-in-wordpress/)** ::: :::info WebSocket Version Guide <>This functionality available only with WebSocket Version ::: **Mini chat button shortcode** Shows mini chat button (opens mini chat with user on click) **This button will work only if Mini Chats option is enabled in plugin settings** Attribute Whats it for Default text Sets button text label "Private Message" user_id Set User ID with whom conversation will be started Post author of WordPress Post/Page subject Set subject for conversation If conversation already exists it will be ignored None unique_tag This will be usefully if you want to create unique conversations between buyers and seller, when they're discussing different products. For example set unique_tag to product_123 to create or open additional unique conversation between 2 members based on the tag. None class Sets additional class to button html element. Useful for additional CSS styling. None ``` [better_messages_mini_chat_button text="Private Message" subject="New conversation subject" class="extra-class"] ``` --- ## better_messages_my_messages_url :::info **[How to add shortcodes?](https://www.wpbeginner.com/wp-tutorials/how-to-add-a-shortcode-in-wordpress/)** ::: **User inbox URL shortcode** Returns url to logged-in user inbox. To add this shortcode to your menu item you can use **[Shortcode in Menus](https://wordpress.org/plugins/shortcode-in-menus/)** plugin. ``` [better_messages_my_messages_url] ``` --- ## better_messages_pm_button :::info **[How to add shortcodes?](https://www.wpbeginner.com/wp-tutorials/how-to-add-a-shortcode-in-wordpress/)** ::: **Private message button shortcode** Shows private message button Attribute Whats it for Default text Sets button text label "Private Message" user_id Set User ID with whom conversation will be started Post author of WordPress Post/Page subject Prefill subject at the new conversation screen None message Prefill message at the new conversation screen None target Set _self to open in same page Set _blank to open in new browser tab _self fast_start Set 1 to open conversation screen directly by skipping the new conversation screen. subject and message attributes does not works in this mode 0 url_only Set 1 to not render button, but display just URL 0 class Sets additional class to button html element. Useful for additional CSS styling. None
[better_messages_pm_button text="Private Message" subject="Have a question to you" message="Lorem Ipsum is simply dummy text." target="_self" class="extra-class" fast_start="0" url_only="0"]
--- ## better_messages_single_conversation :::info **[How to add shortcodes?](https://www.wpbeginner.com/wp-tutorials/how-to-add-a-shortcode-in-wordpress/)** ::: :::info Compatibility <>This { (props.type ? props.type : 'guide') } compatible with Better Messages {props.version} or higher ::: **Single conversation shortcode** Shows single conversation at any page Attribute Whats it for Default thread_id Sets conversation ID to display with shortcode No default ``` [better_messages_single_conversation thread_id="55"] ``` --- ## better_messages_unread_counter :::info **[How to add shortcodes?](https://www.wpbeginner.com/wp-tutorials/how-to-add-a-shortcode-in-wordpress/)** ::: **Unread messages counter shortcode** Show unread messages counter anywhere in your website To add this shortcode to your menu item you can use **[Shortcode in Menus](https://wordpress.org/plugins/shortcode-in-menus/)** plugin. Attribute Whats it for Default hide_when_no_messages If set to 1 counter will be hidden when there is no unread messages 0 preserve_space If counter is hidden when there is no messages and this set to 1 counter will be invisible, but will still consume space and will appear more smoothly when there are new messages. 0 ``` [better_messages_unread_counter hide_when_no_messages="1" preserve_space="1"] ``` --- ## better_messages_user_conversation :::info **[How to add shortcodes?](https://www.wpbeginner.com/wp-tutorials/how-to-add-a-shortcode-in-wordpress/)** ::: :::info Compatibility <>This { (props.type ? props.type : 'guide') } compatible with Better Messages {props.version} or higher ::: **Conversation with user shortcode** Automatically creates and shows conversation with another user at any page Attribute Whats it for Default user_id Sets User ID to display conversation with Post author of WordPress Post/Page ``` [better_messages_user_conversation user_id="55"] ``` --- ## better_messages_video_call_button(Shortcodes) :::info **[How to add shortcodes?](https://www.wpbeginner.com/wp-tutorials/how-to-add-a-shortcode-in-wordpress/)** ::: :::info WebSocket Version Guide <>This functionality available only with WebSocket Version ::: **Video call button shortcode** Shows video call button Attribute Whats it for Default text Sets button text label "Private Message" user_id Set User ID with whom call will be started Post author of WordPress Post/Page url_only Set 1 to not render button, but display just URL 0 class Sets additional class to button html element. Useful for additional CSS styling. None ``` [better_messages_video_call_button text="Video Call" url_only="0" class="extra-class"] ``` --- ## HD Audio Calls The WebSocket version enables HD 1-to-1 audio calls between users using WebRTC technology. ## How it works Users can initiate audio calls directly from any conversation. Calls use WebRTC technology for peer-to-peer communication when possible, ensuring low latency and high audio quality. The call connection is established through the WebSocket infrastructure for signaling, while the actual audio stream travels directly between participants. ## Key capabilities - 1-to-1 HD audio calls between any two users - WebRTC-based peer-to-peer audio streaming - Low latency, high-quality audio - Initiate calls directly from any conversation - Works in all modern browsers supporting WebRTC ## Requirements - Website must use **HTTPS** (browsers require a secure context for microphone access) - Users need a working microphone - Modern browser with WebRTC support This feature is automatically available with the WebSocket version. --- ## Local Browser Encryption Better Messages WebSocket version can encrypt the local browser database with AES-256 for enhanced security. ## How it works Better Messages caches message data locally in the browser's IndexedDB for fast loading and offline access. When local browser encryption is enabled, this cached data is encrypted with AES-256 encryption. This protects offline message storage from unauthorized access, which is especially important on shared or public computers where multiple users may access the same browser. ## Key capabilities - AES-256 encryption of local browser database (IndexedDB) - Protects cached messages from unauthorized access - Important for shared or public computer environments - Encrypted data can only be read by the authenticated user - Transparent to the user — no extra steps required ## How to enable Local browser encryption can be enabled in the WebSocket version configuration settings. --- ## Can I cancel my subscription after subscribing? Yes, you can cancel WebSocket subscription any time. Your license will be valid still for the period you already paid. No charges will be applied anymore, unless you subscribe to it again. --- ## End-to-End Encryption Better Messages supports end-to-end encryption (E2EE) for private conversations, ensuring that only the participants can read the messages. The server never has access to message content — all encryption and decryption happens directly in the users' browsers. ## Requirements - **WebSocket version** — E2E encryption is only available with the WebSocket real-time mechanism (not available in AJAX mode) - **HTTPS/SSL** — the site must have SSL enabled, since the Web Crypto API requires a secure context - **Modern browser** — any browser with Web Crypto API support (all modern browsers including Chrome, Firefox, Safari, Edge) ## How it works When end-to-end encryption is enabled, each user generates a personal encryption key pair. When a conversation is created, a unique conversation key is generated and securely shared with each participant. Messages are encrypted before leaving the sender's browser and can only be decrypted by the intended recipients. The server stores only encrypted data — it relays messages between participants but cannot read their content. Even site administrators cannot access the plaintext of encrypted messages. ## Key capabilities - Messages encrypted in the browser before transmission — server never sees plaintext - AES-256-GCM encryption for message content and file attachments - ECDH P-256 key exchange for secure key distribution between participants - Password-protected key backup for multi-device access - Key recovery if the user forgets their encryption password - Automatic key distribution for new conversation participants - Key rotation when participants are removed from a conversation - Crypto operations offloaded to Web Workers for better performance - Mobile app support (iOS and Android) ## Setting up encryption ### First-time setup When a user first joins an encrypted conversation, they are prompted to create an encryption password. This password is used to protect their private key so it can be recovered on other devices or browsers. 1. User opens an encrypted conversation 2. A setup dialog appears asking them to create an encryption password 3. The system generates a personal key pair and securely backs up the private key (encrypted with the password) on the server 4. The user can now send and receive encrypted messages ### Multi-device access When accessing encrypted conversations from a new device or browser: 1. The user is prompted to enter their encryption password 2. The encrypted private key backup is downloaded from the server 3. The private key is decrypted locally using the password 4. The user can now read and send encrypted messages on the new device This works the same way on the mobile app — enter the encryption password to restore keys and access encrypted conversations. ### Password recovery If a user forgets their encryption password: 1. Click "Forgot password?" in the key restore dialog 2. Confirm the intent to reset — this generates new encryption keys 3. Enter a new encryption password 4. Other participants will automatically re-wrap the conversation key for the user's new identity key when they come online 5. Once re-wrapped, the user regains access to the conversation and can read previous messages ## How encryption works ### Identity keys Each user has a personal ECDH P-256 key pair: - **Public key** — shared with other users so they can establish secure key exchanges - **Private key** — never leaves the user's device in unencrypted form; backed up on the server encrypted with the user's password (PBKDF2 with 600,000 iterations) ### Conversation keys Each encrypted conversation has its own AES-256 symmetric key: - A random 256-bit key is generated when the conversation is created - This key is wrapped (encrypted) individually for each participant using ECDH shared secrets - Each participant unwraps the conversation key using their own private key - The conversation key is used to encrypt and decrypt all messages in that conversation ### File attachments File attachments in encrypted conversations are also encrypted: - A unique encryption key is generated for each file - The file is encrypted with AES-256-GCM before upload - The file key is wrapped with the conversation key (not directly with participant keys) - Each participant unwraps the file key using the conversation key, then decrypts the file - Decrypted files are cached locally in the browser for performance - File metadata (size, type) is visible to the server, but file content is encrypted ### Performance - All cryptographic operations (encryption, decryption, key wrapping) are offloaded to a SharedWorker or Web Worker so they don't block the UI - Conversation keys are cached in memory after first unwrap for fast encrypt/decrypt ## Group conversations End-to-end encryption works with group conversations: - All participants share the same conversation key - When a new participant is added, they are marked as "pending" until they receive the wrapped conversation key - Pending users see a notice that they need to set up encryption — they cannot send or read messages until setup is complete - Other participants can continue messaging normally while some users are pending - Key distribution happens automatically when both the pending user and a participant who holds the key are online - When a participant is removed, their wrapped key is deleted and they lose access to future messages ## Restrictions - Messages in encrypted conversations **cannot be forwarded** to other conversations - Encrypted conversations **bypass the moderation queue** — the server cannot read ciphertext, so content moderation is not possible for E2E messages - The server **rejects unencrypted messages** sent to encrypted conversations — all messages must be valid E2E ciphertext - AI chat bots are always excluded from encrypted conversations - When creating a new conversation with an AI bot as recipient, the E2E encryption toggle is automatically disabled ## Security properties ### What is encrypted end-to-end - Message text content - File attachment content ### What is NOT encrypted end-to-end - Message metadata (sender, timestamp, read status) - Conversation participant list - User presence and typing indicators - Conversation settings - File metadata (size, type) ### Server limitations - The server relays encrypted messages but cannot decrypt them - The server stores encrypted private key backups but cannot access them without the user's password - Site administrators can see conversation metadata but not message content ## Admin experience - The moderation queue shows **"Encrypted message"** as a placeholder for E2E message content - Admins can see conversation metadata (participants, timestamps, message count) but not the actual content - File attachment metadata (count and size) is visible in the admin panel, but file content is encrypted ## Mobile app support End-to-end encryption is fully supported on the iOS and Android mobile apps: - Uses native cryptographic operations - Keys are backed up and recoverable across devices using the same password-based recovery as the web version - The same encryption password works on both web and mobile ## How to enable End-to-end encryption settings are located in **WP Admin → Better Messages → Settings**. ### General tab - **Enable End-to-End Encryption** — main toggle to activate the E2E encryption feature. Requires HTTPS to be enabled on your site. ### Messaging tab These options appear under the **E2E Encryption** section and are only available when E2E encryption is enabled in the General tab: - **Enabled by default** — the encryption toggle will be pre-checked when users create new conversations. Users can still uncheck it to create unencrypted conversations. - **Force for all conversations** — all new private conversations will be end-to-end encrypted. Users cannot disable encryption. This option requires "Enabled by default" to be checked. - **Allow guest users** — allow guest chat users to participate in end-to-end encrypted conversations. AI chat bots are always excluded regardless of this setting. --- ## End User License Agreement # Better Messages Effective as of Nov 29, 2017 To help you understand the [EULA (End User License Agreement)](https://freemius.com/plugin/1557/bp-better-messages/legal/eula/#eula), we’ve prepared a bullet-point list that summarizes some of the main ideas (yes, including rights, obligations, liabilities, and all that legalese!) covered in there. IMPORTANT: The following bullet-point list is for convenience purposes only, in order to help you navigate (and hopefully, better understand) the [EULA](https://freemius.com/plugin/1557/bp-better-messages/legal/eula/#eula). This bullet-point list is _not_ a substitute for, or even a part of, the [EULA](https://freemius.com/plugin/1557/bp-better-messages/legal/eula/#eula), whose terms and conditions constitute a legally binding contract. It is your responsibility to fully read those terms and conditions. General ------- * The agreement is published at [https://freemius.com/plugin/1557/bp-better-messages/legal/eula/](https://freemius.com/plugin/1557/bp-better-messages/legal/eula/) * You, the customer (or the customer on whose behalf a service provider, such as an agency, is), must be of a legal age in your jurisdiction to form a binding contract, but in any event at least thirteen (13) years old to access or use the [Freemius service](https://freemius.com/). * Freemius, Inc. is an [authorized reseller of “BP Better Messages”](https://freemius.com/terms/vendor/) and is the 'merchant of record' for your purchase. * The agreement is between you and Freemius, Inc. on behalf of the Vendor behind “BP Better Messages” (the “_Vendor_”). You may not assign or transfer it without Freemius’ express prior written consent. * The agreement contains various clauses to limit and exclude Freemius’ and Vendor’s liability, and it also contains indemnity protection for Freemius and the Vendor. Support ------- * While the EULA is between You and Freemius, Inc., all support and maintenance services for the product (such as providing bug fixes, updates, upgrades, troubleshooting, etc.), if any, are the sole responsibility of the Vendor. * You can contact the Vendor’s support via [support@better-messages.com](mailto:support@better-messages.com). So if you're having trouble or have any questions, please contact [support@better-messages.com](mailto:support@better-messages.com) for assistance. * Freemius, Inc. resells and distributes “BP Better Messages” and other plugins and themes "as is" and with no implied or statutory warranties, or guarantees that they will function exactly as you would like, or that they will be compatible with all third-party components and plugins. * Support for this product is only available for those who have an active, paid license. * Product updates are granted for as long as the your license remains active. * Whilst the Vendor attempts to provide the best support possible, there's no guarantee that any particular support query can, or will, be answered to the extent, or within a timeframe, that the inquirer is completely satisfied. Security & Software Updates --------------------------- * Product security and feature updates are included for free as long as your license is active. Updates will be delivered automatically from the WordPress admin dashboard or you can manually download the latest version of the product from your dashboard: [https://users.freemius.com/login/](https://users.freemius.com/login/). Subscriptions & Automatic Renewals ---------------------------------- * The product’s license is sold as automatically recurring subscriptions that renew each month or year (depends on the subscription's billing cycle) on the anniversary of the purchase date. * All subscriptions automatically renew at the end of the monthly/annual license term unless You cancel the subscription prior to the automatic renewal date. * We cannot grant refunds on renewal payments. * For annual subscriptions, we will attempt to send you a renewal reminder email 30 days prior to your renewal date, and you may use this opportunity to cancel your subscription before the renewal payment is automatically processed. Such a reminder would only be a courtesy, and depends on your email client, potentially can end up at your spam box, so do not rely on that email - you alone are responsible for taking any action before a renewal takes effect. Just add yourself a calendar reminder :) * If a subscription renewal fails, the system will attempt to process the payment 3 more times according to our [dunning mechanism schedule](https://freemius.com/help/documentation/selling-with-freemius/dunning-failed-payments/). After the 4th failed attempt, the subscription will be canceled. * If you subscribe to the monthly or annual plans, and your license expires due to a failed renewal, subscription or license cancellation, the paid features & functionality of the product will be disabled. * You can always access your account and cancel the subscription via [https://users.freemius.com/login/](https://users.freemius.com/login/) Price Changes ------------- * Prices of “BP Better Messages” are subject to change without prior notice or consent. * As long as your subscription remains active and you don’t switch to another plan or license-level, your subscription renewals amount will not be affected by any price changes. Free Trials ----------- * If you subscribe for a trial with a payment method and cancel the trial before the 1st payment was processed, the paid features & functionality of the product will be disabled. * If you subscribe for a trial without a payment method and the trial expires, the paid features & functionality of the product will be disabled. * If you subscribe for a trial with a payment method, Freemius will attempt to send you an email reminder 2 days before the trial expiration, giving you enough time to cancel the trial. Such a reminder would only be a courtesy, and depends on your email client, potentially can end up at your spam box, so do not rely on that email - you alone are responsible for taking any action before a the trial expires. Just add yourself a calendar reminder :) * If you subscribe for a trial without a payment method, Freemius will attempt to send you an email reminder 2 days before the trial expiration, giving you the option to purchase a plan. Same like with the trial with a payment method, such a reminder would only be a courtesy, and depends on your email client, potentially can end up at your spam box. Refund Policy ------------- * If, during the first 7 days following the Purchase date, You experience a defect that makes the Product's material functions unusable, and following Your cooperation with our support team we are unable to resolve it, then following Your request we will issue a full refund of the Purchase price. For clarity, any defect or lack of use arising from a conflict or incompatibility with a third party product, is not covered by this policy, and nor are missing Product features. * There are a few very limited cases (as specified in the [EULA](https://freemius.com/plugin/1557/bp-better-messages/legal/eula/#eula)) in which Freemius will determine eligibility for refunds. Otherwise, eligibility for refunds are determined and governed exclusively by the Vendor and [Vendor's refund policy (see below)](https://freemius.com/plugin/1557/bp-better-messages/legal/eula/#refund_policy), and so your ability to get a refund therefor depends on Vendor's cooperation. In any case, no refunds are given beyond the scope of the [Vendor's refund policy](https://freemius.com/plugin/1557/bp-better-messages/legal/eula/#refund_policy), and nor are there any refunds available on renewal payments. END USER LICENSE AGREEMENT -------------------------- ### _Last Updated: July 22, 2021_ This End User License Agreement ("_Agreement_") constitutes a binding contract between you, the customer (or the customer on whose behalf a service provider, such as an agency, is) purchasing the Product (defined below) license ("_You_" and "_Your_") and Freemius, Inc. (“_Freemius_”, “_we_”, “_us_” and “_our_”). By placing Your order via the Checkout (defined below), or by otherwise accessing or using the Product, You acknowledge that You have read, understood, and agree to be bound by the following (the date of such occurrence being the "_Effective Date_"): 1. This Agreement; and 2. Other supplemental terms and policies referenced herein, which are stated to be incorporated into, and made a part of, this Agreement by reference. If You do not agree with any of the terms and conditions of this Agreement, do not place Your order and do not otherwise access or use the Product. Under this Agreement, You are purchasing a license to the Product ("_Purchase_"). Under Your Purchase, You receive a license (more on your license rights in Section 2 _(License)_ below). Your Purchase can either be a recurring subscription (e.g. 'monthly' or 'annual') license or a one-time 'lifetime' license (in each case, a "_License_", and respectively a "_Subscription License_" and a "_Lifetime License_"). Freemius is a reseller of the License, and is the 'merchant of record' for the purpose of this transaction. But the vendor from whom You are ultimately receiving access to the Product (the "_Vendor_") is otherwise responsible for the provision of the Product and all related services, and You acknowledge that Freemius is not the provider or operator of the Product. Again, more on this below. 1. DEFINITIONS AND INTERPRETATION ------------------------------ This Agreement contains a range of capitalized terms, some of which are defined in this Section, and some of which are defined elsewhere. The Section headings in this Agreement are for convenience of reading only, so do not rely upon them for interpretation. As used in this Agreement “_You_” means either you personally or, if you are entering into this Agreement on behalf of an entity (for example, if you are subscribing using an entity’s email domain), such entity, and in such case you represent that you have the authority to bind such entity to this Agreement. “_Affiliate_” means with respect to Freemius, any person, organization or entity controlling, controlled by, or under common control with, Freemius, where “control” means the possession, directly or indirectly, of the power to direct or cause the direction of the management and policies of such person, organization or entity, whether through the ownership of voting securities or by contract or otherwise. "_Checkout_" means the online checkout form which You submit(ted) for Your Purchase. Your order is subject to our Acceptance (defined below), and once Accepted the order is hereby incorporated into, and made a part of this Agreement, by reference. “_Product_” means the software product or service (such as _WordPress_ plugin or theme, or “Serviceware” plugin, or plugins and/or themes bundle) specified in the Checkout. References herein to "Product" shall also include any of its related documentation, as well as any updates and upgrades provided by the Vendor. “_Site_” means the digital property or service (such as a website, browser extension, mobile app, _etc._) owned or operated by You or Your client for which You are using the Product. In the case of a "WordPress multi-site network", each "network sub-site" shall be deemed a Site for the purposes of your order and this Agreement. "_Trial_" means a limited-in-time use of the Product on a trial basis. "_Trial Period_" means the period of the Trial, as specified in the Checkout. 2. ORDERING, REFUND POLICY AND TRIALS ---------------------------------- Your submitted order is only an offer, and is subject to our acceptance of it ("_Acceptance_"). Acceptance only occurs at such time that we have done both of the following: 1. as applicable (depending on the type of Product), provided You with license key(s); and 2. unless the order is for an Trial, received full payment (as confirmed by us or our payment service provider) of the purchase price of your order through settlement of funds via your provided credit card or other payment method. We may, without liability, reject Your order, or otherwise cancel Your order at any time and for any lawful reason prior to Acceptance (for example if we are unable to process or fulfill the order), and in such cases we will refund Your payment. Prior to Acceptance, an automatic e-mail acknowledgement of your order may be generated (but such acknowledgement does not constitute Acceptance of your order). FOLLOWING ACCEPTANCE, AN ORDER IS FINAL, NON-CANCELABLE, AND ORDER PAYMENTS ARE NON-REFUNDABLE, EXCEPT AS SPECIFIED IN THE FOLLOWING REFUND POLICY ("_Vendor Refund Policy_"), which is hereby incorporated into, and made a part of, this Agreement by reference: If, during the first 7 days following the Purchase date, You experience a defect that makes the Product's material functions unusable, and following Your cooperation with our support team we are unable to resolve it, then following Your request we will issue a full refund of the Purchase price. For clarity, any defect or lack of use arising from a conflict or incompatibility with a third party product, is not covered by this policy, and nor are missing Product features. Notwithstanding the above, if You are purchasing a bundled offering of more than one Product (a "_Bundled Offering_"), then the Purchase plan terms and refund policy that specifically govern that Bundled Offering as a whole (the "_Bundled Offering Terms_") shall apply instead of the above-mentioned Vendor Refund Policy, as well as to the extent of any other conflict or inconsistency with a provision of this Agreement. If You subscribed for a free Trial, Freemius may (but shall not be obligated to) send You an email two (2) or more days prior to the expiration of the Trial Period, giving You the opportunity to make a Purchase of the Product. If You subscribed for a Trial with a payment method (a "_Paid Trial_"), then: 1. Freemius may (but shall not be obligated to) send You an email reminder of the upcoming payment two (2) or more days prior to the expiration of the Trial Period. You acknowledge that such a reminder would only be a courtesy, and You alone are responsible for taking any action before a payment takes effect. 2. _In the case of 'monthly' or 'annual' Paid Trials:_ if (per the instructions in the reminder email) You fail to cancel the Trial prior to its expiration, the Trial shall convert to a paid Subscription License, and You will be charged the Fees (defined below) for the initial Purchase Term. 3. _In the case of a 'lifetime' Paid Trial:_ You are deemed to have purchased a Lifetime License, and, subject to the Vendor Refund Policy, You will not be charged the Fees until the expiration of the Trial Period.For the purposes of determining Refund eligibility under a Trial, the period stated in the applicable Vendor Refund Policy shall be deemed to begin on the first day of the Trial Period. 3. LICENSE AND RESTRICTIONS ------------------------ Subject to the terms and conditions of this Agreement, Freemius grants You the following License under Your Purchase. If a third party service provider (such as an agency) is entering into this Agreement on Your behalf for the purpose of operating the Product on Your behalf, the License (and any related services, such as support and maintenance) also extends to such service provider. The License is: 1. limited, non-exclusive, non-assignable, and non-sublicensable; 2. for the term of the Purchase plan (e.g. monthly, annual, lifetime, _etc._) specified in the Checkout, plus for whatever period thereafter the Product (in whole or in part) is still made available to You (the "_Purchase Term_"); 3. to access, use, and as applicable install or receive, the Product solely on or in connection with Your Site(s) (subject to the authorized number of Sites); and 4. subject to whatever volume, location, feature, and other limitations or conditions (if any) are specified in the Checkout. We recommend installing and testing the Product in a staging (or similar non-production) environment prior to installing it in the Site's production environment, and making necessary configurations, which should hopefully allow You to identify any code conflicts between the Product and other products or code of the Site, and therefore avoid disruption to Your Site. As a condition to the License, and unless You obtain the prior express written permission of the Vendor, You shall not do (or permit or encourage to be done) any of the following, in whole or in part: (a) copy, “frame” or “mirror” the Product, on any other server or wireless or Internet-based device; (b) sell, assign, transfer, lease, rent, sublicense, distribute, publicly perform, display or communicate, offer as part of a time-sharing, outsourcing or service bureau environment, or otherwise make available, the Product to any third party, or bundle or incorporate the Product into or with any other product or service; (c) modify, alter, adapt, arrange, or translate the Product; (d) decompile, disassemble, decrypt, reverse engineer, extract, or otherwise attempt to discover the source code or non-literal aspects (such as the underlying structure, sequence, organization, file formats, non-public APIs, ideas, or algorithms) of, the Product; (e) remove, alter, or conceal any copyright, trademark, or other proprietary rights notices displayed on or in the Product; (f) circumvent, disable or otherwise interfere with security-related or technical features or protocols of the Product; (g) make a derivative work of the Product, or use the Product to develop any service or product that is the same as (or substantially similar to) the Product; (h) store or transmit any robot, malware, Trojan horse, spyware, or similar malicious item intended (or that has the potential) to damage or disrupt the Product; (i) use the Product to infringe, misappropriate, or violate any third party's Intellectual Property Rights, or any applicable law (such as anti-spamming laws), or to otherwise engage in any fraudulent activity; (j) employ any hardware, software, device, or technique to pool connections or reduce the number of Sites, devices or users that directly access or use the Product (sometimes referred to as 'virtualisation', 'multiplexing' or 'pooling') in order to circumvent any restrictions on scope of the License; or (k) take any action that imposes or may impose (as determined in Freemius' reasonable discretion) an unreasonable or disproportionately large load on the servers, network, bandwidth, or other cloud infrastructure which operate or support the Product, or otherwise systematically abuse or disrupt the integrity of such servers, network, bandwidth, or infrastructure. The Product may include third party software components, as well as proprietary components (such as [Freemius' SDK](https://github.com/freemius/wordpress-sdk) component that is applied to the Product), that are subject to open source licenses and/or notices (“_Third Party Software_” and “_Third Party Software Terms_”, respectively). This Agreement is not intended, and shall not be construed, to derogate from any rights You may have under such Third Party Software Terms. Accordingly, to the extent that the Product (or any part thereof) is subject to any Third Party Software Terms or to any other licensing terms, and they conflict with the scope of the License granted to You or with any provision of this Agreement, such Third Party Software Terms or other licensing terms (as the case may be) shall prevail. Any undertakings, representations, warranties, guarantees, conditions, or other commitments made by Freemius in this Agreement concerning the Product (if any), are made by Freemius and not by any authors, licensors, or suppliers of, or contributors to, such Third Party Software. _As an example only: if the Product is subject to the GNU General Public License (GPL), then You may use the Product in accordance with the GPL, and may ignore any provision of this Agreement (such as a conflicting License restriction above or a conflicting ownership provision) which conflicts with the GPL._ 4. PAYMENT AND PRICING ------------------- 1. Fees. If or once You have purchased a paid License (including, for example, if You failed to cancel a Paid Trial before its expiry), You agree to pay all fees stated in the Checkout ("_Fees_"), and in accordance with its payment terms. Following receipt of Your order, You authorize Freemius (either directly and/or through third parties) to request and collect payment (or otherwise charge, refund or take any other billing actions) from our payment provider or Your designated banking account, and to charge Your payment method, as well make any inquiries Freemius deems necessary to validate Your designated payment account or financial information, in order to ensure prompt payment (including for the purpose of receiving updated payment details from Your payment, credit card or banking account provider – such as, updated expiry date as may be provided to us by Your credit card company). In connection with Purchase renewals (if applicable), Freemius will attempt to automatically charge You the applicable renewal Fees. In the event of failure to collect the Fees owed by You, we may (but shall not be obligated to) retry to collect at a later time, and/or suspend or terminate Your Purchase, without further notice. Where the Fees are invoiced, each invoice shall be due and payable in full by the due date specified on the invoice.Freemius shall not be responsible or liable (such as for bank fees) in the event any charge causes a negative balance in Your bank or payment account. 2. Refunds. _Except where there has been a duplicate charge to Your payment method (in which case Freemius may, but is not obligated to, determine Refund eligibility:_ You acknowledge and agree that any refunds, cancellations, and returns (collectively, "_Refunds_") for the Product are subject to the [Vendor Refund Policy](https://freemius.com/plugin/1557/bp-better-messages/legal/eula/#refund_policy) only, and that, even though Freemius may assist or otherwise be involved in administering Refunds eligibility for Refunds is determined solely by Vendor (and not Freemius), and accordingly any Refund requests must be made directly to the Vendor. Failure by Vendor to respond to a Refund request or inquiry (for example, if Vendor ceases to do business) shall not give rise to or impose any obligation or liability on Freemius. 3. Price Changes; Renewal Discounts. _In respect of Subscription Licenses only:_ Provided that Your recurring subscription is active, has not changed, and has not been terminated or cancelled: (a) any changes (increases or decreases) to the Product pricing during the Purchase Term shall not affect Your Purchase plan; and (b) You will be entitled to any renewal discounts offered by the Vendor. 4. Changing Plans. When You change Your Purchase plan, You will be deemed to have made a new Purchase, and accordingly no renewal discount will be applicable for such change. You may, however, be entitled to pro-rated Fees for the new Purchase (as further described here: [https://freemius.com/help/documentation/selling-with-freemius/proration/](https://freemius.com/help/documentation/selling-with-freemius/proration/)). 5. General. Pricing for the Product is exclusive of all applicable sales, use, consumption, VAT, GST, and other taxes, duties or governmental charges, except for taxes based upon Freemius' net income. Unless expressly stated otherwise in the Checkout, all amounts payable under this Agreement: 1. are stated, and are to be paid, in US Dollars; 2. are payable in advance (accordingly to the applicable billing cycle); and 3. are non-refundable (subject to the Vendor Refund Policy), and are without any right of set-off or cancellation. 5. PRODUCT SUPPORT AND MAINTENANCE ------------------------------- All support and maintenance services for the Product (such as providing bug fixes, updates, upgrades, troubleshooting, _etc._), if any, are the sole responsibility of the Vendor, and You agree: (a) to look to the Vendor alone for such support and maintenance; and (b) that Freemius has no obligation to provide any such (or similar) services under this Agreement. Nor does Freemius offer or give any Product warranty (see Section ‎8 _(Disclaimer of Warranties)_ for more information). Any Product support and maintenance services that are provided by the Vendor will (unless the Vendor agrees in writing with You otherwise) only be provided to You (or Your service provider, if applicable) and with respect to the applicable Site(s). Some updates and upgrades may be implemented by the Vendor automatically, and some may be implemented manually; but in either case, updates and upgrades to the Product will override any prior modifications You made to the Product. Moreover: (i) You will not be eligible for support and maintenance services in the event You modify the Product, nor following termination or cancellation of Your Purchase; and (ii) no undertaking is made by Vendor that it will support or maintain the Product (for example, if the Vendor ceases to do business or retires the Product), even if You have purchased a Lifetime License. Vendor's support contact is: [support@better-messages.com](mailto:support@better-messages.com) The only support Freemius shall be obligated to provide under this Agreement is first-tier aftersales support (which includes billing and order-related support), which will be provided to You only. 6. PRODUCT FEATURES ---------------- As with support and maintenance services, features of the Product are also the sole responsibility of the Vendor. This includes, but is not limited to, issues as to feature availability, operability, blocking, and de-activation. A new or modified feature may be accompanied by separate or additional terms and conditions. You agree: (a) to look to the Vendor alone for issues relating to features; and (b) that Freemius has no obligation to address issues relating to features. _Moreover, and in respect of Licenses that are configured by the Vendor as 'blocking' Licenses:_ following termination or cancellation of Your Purchase or Your Paid Trial, or expiration of Your free Trial without a payment method, some or all of the Product's 'paid' features may be disabled by the Vendor (and in the event Your Purchase plan is 'monthly', and depending on Your billing cycle, such 'paid' features are automatically disabled), and You acknowledge that this may have the effect of disabling or rendering unusable the entire Product itself. 7. OWNERSHIP --------- 1. Product. Freemius and/or its licensors (including without limitation the Vendor) exclusively own all Intellectual Property Rights (defined below) in and to the Product. Furthermore, Freemius and/or its licensors shall exclusively own (and are hereby assigned) all Intellectual Property Rights in and to any derivative works and/or improvements in or to the Product (regardless of inventorship or authorship); unless the Product is governed by Third Party Software Terms that permit You to make derivative works and/or improvements to the Product, in which case, as between You, Freemius and Vendor, You will exclusively own the Intellectual Property Rights in and to such derivative works and improvements. Except for the License, You are granted no other right or license in or to the Product, whether by implied license, estoppel, patent exhaustion, operation of law, or otherwise. Any rights not expressly granted herein are hereby reserved by Freemius and its licensors. You agree that Vendor shall be a third party beneficiary under this Agreement with the right to enforce provisions hereunder that relate to Vendor's Intellectual Property Rights. 2. Feedback. If You provide Freemius with any ideas, suggestions, or similar feedback about performance of the Product or for improving the Product (“_Feedback_”), You hereby grant to each of Freemius and all Freemius Affiliates a worldwide, assignable, non-exclusive, royalty-free, fully paid-up, sublicensable (through multiple tiers of sublicensees), irrevocable, and perpetual license, to access, use, reproduce, distribute, publish, broadcast, make available to the public, modify, adapt, edit, create derivative works of, publicly display, publically perform, and otherwise commercially exploit such Feedback, in any media format and through any media channels (now known or hereafter developed) (“_Feedback License_”). You hereby represent and warrant that: (A) the Feedback does not, and will not, infringe, misappropriate or violate any third party's Intellectual Property Rights, or any law; and (B) You have obtained, and will maintain during and after this Agreement, all licenses, permissions, consents, approvals, and authorizations required to grant the Feedback License. The Feedback License shall survive any termination of this Agreement. 3. Definition of IP Rights. “_Intellectual Property Rights_” means any and all rights, titles, and interests in and to inventions, works of authorship, databases, technology, designs, and other intellectual property, and includes without limitation patents, copyright and similar authorship rights, personal rights (such as moral rights, rights of privacy, and publicity rights), architectural, building and location (and similar geography-based) rights, mask work rights, trade secret and similar confidentiality rights, design rights, database rights, industrial property rights, trademark, trade name, trade dress and similar branding rights, as well as: (a) all applications, registrations, renewals, extensions, continuations, continuations-in-part, divisions or reissues of the foregoing rights; and (b) all goodwill associated with the foregoing rights. 8. TERM AND TERMINATION -------------------- 1. Purchase Term and Renewals. This Agreement commences on the Effective Date and shall, unless terminated in accordance herewith, continue in full force and effect for the duration of the Purchase Term. If the Purchase Term is 'monthly' or 'annual', it shall automatically renew for successive periods of equal length, unless you cancel the Purchase by canceling the subscription prior to such renewal in accordance with the below. If the Purchase Term is 'annual' (including multi-annual), Freemius may (but shall not be obligated to) provide You with a reminder of the upcoming renewal. You acknowledge that such a reminder would only be a courtesy, and You alone are responsible for taking any action before a renewal takes effect. 2. Cancellation by You. You may cancel Your Purchase at any time and for any reason, via the functionality offered. If You cancel the Purchase, the cancellation will take effect immediately (and will automatically stop any renewals) and the corresponding License will terminate at the end of the then-current Purchase Term. If you purchased a Lifetime License, the Purchase is not eligible for cancellation by You. For the avoidance of doubt, You will not be entitled to any refund in cases where You cancel Your Purchase. If You cancel a Trial, the Product's 'paid' features will be automatically disabled, unless the Product is designated as 'premium-only', in which case the entire Product will be disabled. If You object to any provision of this Agreement or any subsequent changes thereto, or become dissatisfied with the Product in any way, Your only recourse against Freemius is to cancel Your Trial or Purchase (as applicable) as aforementioned. 3. Termination by Freemius for Convenience. Freemius may, at any time, terminate Your Purchase (regardless of the Purchase Term) for convenience, by written notice to You (including via the functionality offered). In such cases, Freemius shall give You a pro-rated refund of any prepaid Fees, as follows: (a) in the case of a Lifetime License, depreciated on a three (3) year straight line basis from the date of installation of the Product; and (b) in the case of a Subscription License (such as 'monthly' or 'annual'), based on the remaining then-current Purchase Term. 4. Termination by Freemius for Breach. Freemius may terminate Your Purchase (regardless of the Purchase Term) in the event You breach any material provision of this Agreement (for example, if you breach the License) and fail to cure such breach, if curable, within thirty (30) days of receiving written notice from Freemius. For the avoidance of doubt, You will not be entitled to any refund in the event of such termination. 5. Effect of Purchase Termination. Upon termination or cancellation of Your Purchase: (a) the License automatically terminates, and You must immediately cease all access to and use of the Product except to the extent any features of the Product remain available to You; (b) You shall promptly pay any unpaid amounts that are outstanding as of such termination or cancellation. Termination and cancellation shall not affect any rights and obligations accrued as of the effective date thereof. 6. Survival. Any provision that is stated to survive, or that ought by its nature to survive, shall survive termination of this Agreement. The following shall also survive termination of this Agreement: Sections 7 (_Ownership_) through 14 (_Miscellaneous_) inclusive. 9. DISCLAIMER OF WARRANTIES ------------------------ THE PRODUCT, AS WELL AS ANY OTHER ITEMS OR SERVICES PROVIDED BY FREEMIUS, ARE PROVIDED AND MADE AVAILABLE TO YOU ON AN “AS IS” AND “AS AVAILABLE” BASIS, WITH ALL FAULTS, AND WITHOUT ANY REPRESENTATION, WARRANTY, GUARANTEE OR CONDITION OF ANY KIND WHATSOEVER, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING WITHOUT LIMITATION ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, SATISFACTORY QUALITY, QUIET POSSESSION, TITLE, QUALITY OF SERVICE, NON-INFRINGEMENT, OR THAT OTHERWISE ARISE FROM A COURSE OF PERFORMANCE OR DEALING, OR USAGE OF TRADE, ALL OF WHICH ARE HEREBY DISCLAIMED BY FREEMIUS AND ITS LICENSORS AND SUPPLIERS (INCLUDING WITHOUT LIMITATION THE VENDOR). IN ADDITION, NEITHER FREEMIUS NOR ITS LICENSORS OR SUPPLIERS (INCLUDING WITHOUT LIMITATION THE VENDOR) DOES NOT MAKE ANY REPRESENTATION, WARRANTY, GUARANTEE OR CONDITION: (A) REGARDING THE EFFECTIVENESS, USEFULNESS, RELIABILITY, AVAILABILITY, TIMELINESS, ACCURACY, OR COMPLETENESS OF THE PRODUCT; (B) THAT YOUR USE OF, OR RELIANCE UPON, THE PRODUCT WILL MEET ANY REQUIREMENTS OR EXPECTATIONS; (C) THAT THE PRODUCT WILL BE UNINTERRUPTED, SECURE, ERROR-FREE OR VIRUS-FREE, OR THAT DEFECTS WILL BE CORRECTED; OR (D) REGARDING THE SATISFACTION OF, OR COMPLIANCE WITH, ANY GOVERNMENT REGULATIONS OR STANDARDS. 10. LIMITATION OF LIABILITY ----------------------- 1. IN NO EVENT SHALL FREEMIUS, ANY FREEMIUS AFFILIATE, OR ANY OF OUR LICENSORS OR SUPPLIERS (INCLUDING WITHOUT LIMITATION THE VENDOR) BE LIABLE UNDER, OR OTHERWISE IN CONNECTION WITH, THIS AGREEMENT, FOR: 1. ANY CONSEQUENTIAL, INDIRECT, SPECIAL, INCIDENTAL, OR PUNITIVE DAMAGES; 2. ANY LOSS OF PROFITS, LOSS OF BUSINESS, LOSS OF REVENUE, OR LOSS OF ANTICIPATED SAVINGS; 3. ANY LOSS OF, OR DAMAGE TO, DATA, REPUTATION, OR GOODWILL; AND/OR 4. THE COST OF PROCURING ANY SUBSTITUTE GOODS OR SERVICES. 2. THE COMBINED AGGREGATE LIABILITY OF FREEMIUS AND ALL FREEMIUS AFFILIATES, AS WELL AS THE VENDOR, UNDER, OR OTHERWISE IN CONNECTION WITH, THIS AGREEMENT SHALL NOT EXCEED THE AMOUNTS ACTUALLY PAID BY YOU TO FREEMIUS UNDER THIS AGREEMENT FOR THE APPLICABLE PRODUCT THAT GAVE RISE TO LIABILITY. 3. THE FOREGOING EXCLUSIONS AND LIMITATIONS SHALL APPLY: (A) TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW; (B) EVEN IF FREEMIUS, A FREEMIUS AFFILIATE, OR THE VENDOR HAS BEEN ADVISED, OR SHOULD HAVE BEEN AWARE, OF THE POSSIBILITY OF LOSSES, DAMAGES, OR COSTS; (C) EVEN IF ANY REMEDY IN THIS AGREEMENT FAILS OF ITS ESSENTIAL PURPOSE; AND (D) REGARDLESS OF THE THEORY OR BASIS OF LIABILITY, INCLUDING WITHOUT LIMITATION BREACH OF WARRANTY, NEGLIGENCE, MISREPRESENTATION, STRICT LIABILITY, OR OTHER CONTRACT OR TORT LIABILITY. 11. INDEMNIFICATION --------------- 1. If any third party (including, but not limited to, a regulatory or governmental authority) brings any kind of demand, claim, suit, action or proceeding against Freemius, a Freemius Affiliate, the Vendor, and/or any of our or their respective directors, officers, employees, or representatives (each, an “_Indemnitee_”), and it is based upon or arises from: 1. Your use of the Product; 2. Your breach under any contract You may have with a Vendor; and/or 3. Your breach of any provision of this Agreement (each of the foregoing, an “_Indemnity Claim_”) then, upon written request by Freemius (to be decided in our sole discretion), You agree to assume full control of the defense and settlement of the Indemnity Claim; _provided, however,_ that (c) Freemius reserves the right, at any time thereafter, to take over full or partial control of the defense and/or settlement of the Indemnity Claim, and in such cases You agree to reasonably cooperate with Freemius' defense activities at Your own cost and expense; and (d) You shall not settle any Indemnity Claim, or admit to any liability thereunder, without the express prior written consent of the Indemnitee(s). 2. In addition, and regardless of whether (or the extent to which) You controlled or participated in the defense and/or settlement of an Indemnity Claim, You agree to indemnify and hold harmless the Indemnitee(s) for and against: (e) any costs and expenses (including reasonable attorneys' fees) incurred by the Indemnitee(s) in the defense of the Indemnity Claim; and (f) any amounts awarded against, or imposed upon, the Indemnitee(s) under such Indemnity Claim, or otherwise paid in settlement of the Indemnity Claim (including without limitation any fines or penalties). 12. GOVERNING LAW ------------- This Agreement (including without limitation its validity and formation) shall be governed by, and construed in accordance with, the laws of the State of New York, USA without regard to any conflicts of laws rules or principles. The United Nations Convention on Contracts for the International Sale of Goods and the Uniform Computer Information Transaction Act shall not apply to this Agreement and are hereby disclaimed. 13. DISPUTE RESOLUTION ------------------ __Please read this Section carefully.__ 1. Mandatory, Bilateral Arbitration. YOU AND FREEMIUS AGREE THAT ANY DISPUTE, CONTROVERSY OR CLAIM ARISING UNDER, OR OTHERWISE IN CONNECTION WITH, THIS AGREEMENT (EACH, A “_Dispute_”) SHALL BE RESOLVED ONLY BY FINAL AND BINDING BILATERAL ARBITRATION, except that each party retains the right to bring an individual action in a small claims court and the right to seek injunctive or other equitable relief in a court of competent jurisdiction to prevent the actual or threatened infringement, misappropriation or violation of a party’s Intellectual Property Rights. This agreement to arbitrate is intended to be broadly interpreted. 1. ### _Arbitration Rules and Governing Law_ * Notwithstanding Your and Freemius’ agreement that New York law governs this Agreement and its validity, interpretation and application, You and Freemius hereby further agree that the Federal Arbitration Act, 9 U.S.C. § 1, et seq. (“_FAA_”) applies to this agreement to arbitrate, and governs all questions of whether a Dispute is subject to arbitration. * Unless You and Freemius expressly agree otherwise in writing in respect of a Dispute, the arbitration shall be administered by Judicial Arbitration and Mediation Services, Inc. (“_JAMS_”), pursuant to JAMS Streamlined Arbitration Rules and Procedures (“_JAMS Streamlined Rules_”), as modified by this Agreement (that is, the terms of this Section ‎17 govern if they conflict with any of the JAMS Streamlined Rules), and consistent with the _JAMS Policy on Consumer Arbitrations Pursuant to Pre-Dispute Clauses Minimum Standards of Procedural Fairness_ (“_JAMS Consumer Fairness Standards_”). The arbitrator must honor the terms and conditions of this Agreement (including without limitation all liability exclusions and limitations), and can award damages and relief, including any attorneys’ fees authorized by law. YOU AGREE THAT, BY ENTERING INTO THIS AGREEMENT, YOU AND FREEMIUS ARE HEREBY EACH IRREVOCABLY WAIVING THE RIGHT TO A TRIAL BY JURY AND THE RIGHT TO PARTICIPATE IN A CLASS ACTION (OR OTHER CLASS-WIDE PROCEEDING). * Notwithstanding JAMS Streamlined Rule 8(b), You and Freemius agree that any dispute as to the arbitrability of a Dispute brought by either You or Freemius shall be resolved by a court of competent jurisdiction. 2. ### _No Class Arbitrations_ THIS ARBITRATION AGREEMENT DOES NOT ALLOW CLASS ARBITRATIONS EVEN IF THE JAMS STREAMLINED RULES, (OR OTHER PROCEDURES OR RULES OF JAMS) WOULD. RATHER, YOU AND FREEMIUS ARE ONLY ENTITLED TO PURSUE ARBITRATION ON AN INDIVIDUAL BASIS. FURTHER, AND UNLESS YOU AND FREEMIUS EXPRESSLY AGREE OTHERWISE IN WRITING IN RESPECT OF A DISPUTE, THE ARBITRATOR MAY NOT CONSOLIDATE MORE THAN ONE INDIVIDUAL PARTY’S DISPUTE WITH ANY OTHER PARTY’S DISPUTE(S), AND MAY NOT OTHERWISE PRESIDE OVER ANY FORM OF A REPRESENTATIVE OR COLLECTIVE PROCEEDING. 3. ### _The Arbitrator's Decision_ * The arbitrator will be subject to this Agreement, and shall not make any decision or award that is in excess of, or contrary to, what this Agreement provides. The arbitrator will render an award in accordance with JAMS Streamlined Rules. The arbitrator’s decision will include the essential findings and conclusions upon which the arbitrator based the award. Judgment on the arbitration award may be entered in any court having jurisdiction thereof. In the event any litigation should arise between You and Freemius in any court of competent jurisdiction in a proceeding to vacate or enforce an arbitration award, YOU AND FREEMIUS HEREBY IRREVOCABLY WAIVE ALL RIGHTS TO A JURY TRIAL, instead electing that the proceeding be resolved by a judge. The arbitrator may award declaratory or injunctive relief only in favor of the plaintiff/claimant and only to the extent necessary to provide relief warranted by the claimant’s individual claim. If You prevail in arbitration You will be entitled to an award of attorneys' fees and expenses, to the extent provided under applicable Law. Freemius will not seek, and hereby waives all rights Freemius may have under applicable Law, to recover attorneys’ fees and expenses if Freemius prevails in arbitration, unless You assert a frivolous claim. * The arbitrator’s decision and award is final and binding, with some exceptions under the FAA. 4. ### _Location and Fees_ * Unless You and Freemius expressly agree otherwise in writing, the arbitration will take place in-person at the following locations: (a) if You are a resident of a country in North America, Central America or South America, the arbitration will take place in New York City, New York, USA; or (b) if You are a resident of any other country in the world, the arbitration will take place in Tel Aviv-Jaffa, Israel. In the event JAMS indicates that it is unable to provide, or arrange for, an arbitrator in Israel, You agree that the arbitration will be held in New York City, New York, USA. * If You initiate an arbitration for a Dispute, You will be required to pay $250 of the fee required to initiate the arbitration and Freemius will pay any remaining JAMS Case Management Fees and all professional fees for the arbitrator’s services; You will remain responsible for its respective costs relating to counsel, experts, witnesses, and travel to the arbitration. * If Freemius initiates an arbitration for a Dispute, Freemius will pay all administrative fees and costs related to the arbitration, including all professional fees for the arbitrator’s services; You will remain responsible for its costs relating to counsel, experts, witnesses, and travel to the arbitration. 5. ### _Small Claims Court_ Notwithstanding the foregoing, either party may bring an individual action in a small claims court for Disputes within the scope of such court’s jurisdiction. This agreement to arbitrate does not preclude You from bringing issues to the attention of federal, state, or local agencies. Such agencies can, if the Law allows, seek relief against Freemius on Your behalf. 2. Opting Out of this Mandatory Arbitration. You can decline this agreement to arbitrate by contacting [legal@freemius.com](mailto:legal@freemius.com) within thirty (30) days of the Effective Date and stating that You decline this arbitration agreement. Furthermore, and notwithstanding the provisions regarding modification of the Agreement, if Freemius changes this _Dispute Resolution_ Section after the Effective Date (or the date You accepted any subsequent changes to this Agreement), You may reject any such change by providing Freemius written notice of such rejection to [legal@freemius.com](mailto:legal@freemius.com) within thirty (30) days of the date such change became effective, as per the terms of this Agreement. In order to be effective, the notice must include Your full name and clearly indicate its intent to reject the change(s) to this _Dispute Resolution_ Section. By rejecting such change(s), You are agreeing that it will arbitrate any Dispute between You and Freemius in accordance with the provisions of this _Dispute Resolution_ Section as of the Effective Date (or the date You accepted any subsequent changes to this Agreement), unless You declined this arbitration agreement in the manner described above. 3. Limitation on Claims. Regardless of any law to the contrary, any claim or cause of action arising out of, or related to, this Agreement must be filed within one (1) year after such claim or cause of action arose, or else You agree that such claim or cause of action will be barred forever. 4. Confidentiality of Disputes. All aspects of the arbitration proceeding, including but not limited to the decision and award of the arbitrator and compliance therewith, shall be strictly confidential. The parties agree to maintain its confidentiality, unless (and in such cases, only the extent) otherwise required by applicable law. This paragraph shall not prevent a party from submitting to a court of competent jurisdiction any information necessary to enforce an arbitration award, or to seek equitable relief. 14. MISCELLANEOUS ------------- 1. Entire Agreement. This Agreement represents the entire agreement between You and Freemius with respect to the subject matter hereof, and supersedes and replaces any and all prior and contemporaneous oral and/or written agreements, understandings and statements between You and Freemius with respect to such subject matter. You acknowledge and agree that in entering into this Agreement You have not relied on any statement or representation (whether negligently or innocently made) not expressly set out in this Agreement, such as statements and explanations in any FAQs, summaries or explanatory guides regarding this Agreement, or other marketing material on the Freemius or Vendor websites. To the extent of any conflict or inconsistency between these terms and conditions on the one hand, and the Checkout on the other hand, the former shall prevail. The language of this Agreement is expressly agreed to be the English language. By entering into the Agreement, You hereby irrevocably waive, to the maximum extent legally permitted, any law applicable to You requiring that the Agreement be localized to meet Your language (as well as any other localization requirements), or requiring an original (non-electronic) signature or delivery or retention of non-electronic records. We may be able (but are not obligated) to provide You with copies of this Agreement on written request; _however_, please be sure to print a copy of this Agreement for Your own records. 2. Assignment. Freemius may assign this Agreement (or any of its rights and/or obligations hereunder) without Your consent, and without notice or obligation to You. This Agreement is personal to You, and, except as permitted by this Agreement, You may not assign (or in any other way transfer) this Agreement (or any of its obligations or rights hereunder) without Freemius' express prior written consent. Any prohibited assignment shall be null and void. 3. Severability. If any provision of this Agreement is held by a court of competent jurisdiction to be illegal, invalid or unenforceable, then: (a) the remaining provisions of this Agreement shall remain in full force and effect; and (b) the Parties hereto agree that the court making such determination shall have the power to limit the provision, to delete specific words or phrases, or to replace the provision with a provision that is legal, valid and enforceable and that most closely approximates the original legal intent and economic impact of such provision, and this Agreement shall be enforceable as so modified in respect of such jurisdiction. In the event such court does not exercise the power granted to it as aforesaid, then such provision will be ineffective solely as to such jurisdiction (and only to the extent and for the duration of such illegality, invalidity or unenforceability), and will be substituted (in respect of such jurisdiction) with a valid, legal and enforceable provision that most closely approximates the original legal intent and economic impact of such provision. 4. Remedies. Except as may be expressly stated otherwise in this Agreement, no right or remedy conferred upon or reserved by any party under this Agreement is intended to be, or shall be deemed, exclusive of any other right or remedy under this Agreement, at law or in equity, but shall be cumulative of such other rights and remedies. 5. Waiver. No failure or delay on the part of any party in exercising any right or remedy under this Agreement shall operate as a waiver thereof, nor shall any single or partial exercise of any such right or remedy preclude any other or further exercise thereof or the exercise of any other right or remedy. Any waiver granted hereunder must be in writing (for waivers by You, emails will be acceptable; for waivers by Freemius, the writing must be duly signed by an authorized representative of Freemius), and shall be valid only in the specific instance in which given. 6. Relationship. The relationship of the parties is solely that of independent contractors. Nothing in this Agreement shall be deemed to create any employment, fiduciary, joint venture, agency or other relationship between the parties. 7. Notices. You agree that Freemius may send You notices by email and/or by regular mail. Except as stated otherwise in this Agreement or required by law applicable to You, You agree to send all notices to Freemius, to [support@freemius.com](mailto:support@freemius.com). 8. No Third Party Beneficiaries. Except as otherwise expressly provided in this Agreement (such as Freemius Affiliates, Freemius' licensors and suppliers (including without limitation the Vendor), and Indemnitees), there shall be no third-party beneficiaries of or under this Agreement. 9. U.S. Government Rights. The Product is “commercial computer software” and the documentation is “commercial computer software documentation”, pursuant to DFAR Section 227.7202 and FAR Section 12.212, as applicable. If You are an agency, department, employee or other entity of the United States Government, then Your access to and use of the Product shall be subject solely to the terms and conditions of this Agreement. 10. Export Compliance. You represent and warrant that: (a) You are not a resident of (and You will not use the Product in) a country that the U.S. government has embargoed for use of the Product, nor are You named on the U.S. Treasury Department’s list of Specially Designated Nationals or any other applicable trade sanctioning regulations of any jurisdiction; and (b) Your country of residence and/or incorporation (as applicable) is the same as the country specified in the contact and/or billing address provided to us. In the event You breach this Section (in whole or in part), or otherwise violate any Export Control Laws (defined below) in connection with the Product, You agrees to indemnify and hold harmless Freemius, all Freemius Affiliates, and the Vendor (including ours and their respective directors, officers, and employees) for any fines and/or penalties imposed upon Freemius, a Freemius Affiliate, and/or Vendor (or such individuals) as a result of such breach or violation. “_Export Control Laws_” means all applicable export and re-export control Laws applicable to You and/or Freemius, as well as the United States' Export Administration Regulations (EAR) maintained by the US Department of Commerce, trade and economic sanctions maintained by the US Treasury Department's Office of Foreign Assets Control, and the International Traffic in Arms Regulations (ITAR) maintained by the US Department of State. 11. Force Majeure. Freemius shall not be responsible for any failure to perform any obligation or provide any service hereunder because of any (a) act of God, (b) war, riot or civil commotion, (c) governmental acts or directives, strikes, work stoppage, or equipment or facilities shortages, and/or (d) other similar cause beyond Freemius' reasonable control. For the avoidance of doubt, any problems relating to the hosting of the Service shall not be deemed within Freemius' reasonable control. --- ## HD Group Audio Chat The WebSocket version enables HD group audio chats supporting up to 50 participants. ## How it works Group audio chat can be started in any conversation, group chat, or chat room. The feature uses WebRTC with a media server for efficient multi-party audio routing. Group audio chats are ideal for voice discussions in larger groups where video is not needed, using less bandwidth than video calls while supporting more participants. ## Key capabilities - Up to 50 simultaneous audio participants - Available in conversations, group chats, and chat rooms - Lower bandwidth usage compared to video calls - Media server for efficient multi-party routing - WebRTC-based for low latency - Remote mute/unmute of participant microphones by the call host - Ideal for voice-only group discussions ## Requirements - Website must use **HTTPS** - Users need a working microphone - Modern browser with WebRTC support This feature is automatically available with the WebSocket version. --- ## HD Group Video Chat The WebSocket version enables HD group video chats supporting up to 32 participants. ## How it works Group video chat can be started in any conversation, group chat, or chat room. The feature uses WebRTC with a media server for efficient multi-party video routing. All participants can see and hear each other simultaneously, with adaptive video quality that adjusts based on network conditions and the number of participants. Screen sharing is also available during group video chats. ## Key capabilities - Up to 32 simultaneous video participants - Available in conversations, group chats, and chat rooms - Adaptive video quality based on network conditions - Screen sharing during group video calls - Media server for efficient multi-party routing - Remote mute/unmute of participant microphones by the call host - WebRTC-based for low latency ## Requirements - Website must use **HTTPS** - Users need a working webcam and microphone - Modern browser with WebRTC support This feature is automatically available with the WebSocket version. --- ## Instant Messages Delivery The WebSocket version delivers messages instantly to all recipients using persistent WebSocket connections. ## How it works Unlike AJAX polling which checks for updates every few seconds, WebSocket maintains a live connection between the browser and the server. Messages appear the moment they are sent — up to 200x faster than AJAX mode. The WebSocket connection is managed through a shared infrastructure that routes events between users without storing message content. A single WebSocket connection is shared across all browser tabs using a SharedWorker, ensuring efficient resource usage regardless of how many tabs the user has open. ## Key capabilities - Instant message delivery without polling delay - Up to 200x faster than AJAX mode - Persistent connection maintained in the background - Single shared connection across all browser tabs - Automatic reconnection if connection is interrupted - Works on all modern browsers ## How to enable Purchase and activate the WebSocket license, then navigate to **WP Admin** → **Better Messages** → **Settings** → **General** and set the **Mechanism** to **WebSocket**. --- ## Load Optimization The WebSocket version significantly reduces server load by replacing AJAX polling with persistent WebSocket connections. ## How it works In AJAX mode, each user's browser makes repeated HTTP requests to your WordPress server every few seconds to check for new messages. With WebSocket, a single persistent connection handles all real-time updates without repeated server requests. This dramatically reduces the number of HTTP requests to your WordPress server, especially on sites with many concurrent users, resulting in lower CPU usage, less database load, and better overall site performance. ## Key capabilities - Eliminates repeated AJAX polling requests to your server - Single persistent connection per user instead of continuous HTTP requests - Dramatically reduces server CPU and database load - Better performance on sites with many concurrent users - Frees up server resources for other site functionality - WebSocket relay handles the connection management offsite --- ## Message Status The WebSocket version shows real-time message delivery status indicators for every message. ## How it works Each message displays its current delivery status, which updates in real time as the message progresses through each stage. Similar to the check marks in popular messaging apps, users can see whether their message has been sent, delivered to the recipient's device, or seen by the recipient. ## Status indicators - **Sent** — Message has left your device and reached the server - **Delivered** — Message has been received by the recipient's device - **Seen** — Recipient has viewed the message ## Key capabilities - Real-time status updates for every message - Three distinct states: sent, delivered, seen - Visual indicators update automatically - Works in both private and group conversations - No additional configuration required This feature is automatically available with the WebSocket version. --- ## Where is my messages stored? Websocket servers not storing any messages itself, all messages stored only in your website database. Websocket servers used only as transitional servers to transmit data in realtime and storing only some required to function data. The messages content and other private data are encrypted at your website side and decrypted in realtime at user end. So its not possible to read the messages by us even if we want to do that. Websocket servers **DO** store next data: * User IDs * Thread IDs * Message IDs * Unread Messages Count by Thread IDs * Messages Delivery Statuses by Message IDs * Licensed website domains, for example ( wordplus.org ) WebSocket servers **DO NOT** store anything else. When you need more privacy, you need upgrade to Self Hosted Plan. --- ## Mini Chats Mini Chats are small chat popup windows fixed to the bottom of the screen, allowing users to message in real time from any page on your site. ## How it works Similar to Facebook Messenger's chat popups, mini chats provide a convenient way to have conversations without navigating to the main messaging page. When a user opens a conversation from the mini threads list or clicks on a notification, a compact chat window appears at the bottom of the screen. Multiple mini chat windows can be open simultaneously, allowing users to manage several conversations at once while browsing your site. ## Key capabilities - Compact chat windows anchored to the bottom of the screen - Multiple simultaneous chat windows - Real-time messaging without leaving the current page - Open from mini threads list or notifications - Full messaging features in a compact interface - Combined mini chat widget option :::note Mini Chats require the WebSocket version for real-time functionality. ::: ## How to enable Navigate to **WP Admin** → **Better Messages** → **Settings** → **Mini Widgets**. - **Enable Mini Chats** — Turn on popup chat windows - **Enable Combined Mini Chat** — Combine threads list and chat in a single widget --- ## Mini Threads List Mini Threads is a compact conversation list widget fixed to the bottom of the screen for quick access to all conversations from any page. ## How it works The Mini Threads widget appears as a small panel at the bottom of the browser window, showing a list of the user's recent conversations with unread counts. Users can browse their conversations and click any thread to open it in a mini chat popup window — all without navigating away from the current page. The widget updates in real time as new messages arrive. ## Key capabilities - Compact conversation list at the bottom of the screen - Shows recent conversations with unread message counts - Click to open any conversation in a mini chat window - Real-time updates as new messages arrive - Role-based visibility restrictions - Persistent across all pages on the site :::note Mini Threads require the WebSocket version for real-time updates. ::: ## How to enable Navigate to **WP Admin** → **Better Messages** → **Settings** → **Mini Widgets**. - **Enable Mini Threads** — Turn on the conversations list widget - **Restrict by Roles** — Hide the widget for specific user roles --- ## No Limits The Better Messages WebSocket infrastructure is designed to handle any scale without imposing limits. ## How it works The WebSocket service has no caps on concurrent connections, monthly active users, or message volume. Whether your site has 100 or 100,000 active users, the service works the same way. There are no throttling mechanisms, connection limits, or usage-based pricing tiers. All WebSocket license holders have equal access to the full infrastructure capacity. ## Key capabilities - No limit on concurrent WebSocket connections - No limit on monthly active users - No message volume restrictions - No throttling or rate limiting on the WebSocket service - Equal access for all license holders regardless of site size - Infrastructure scales to handle any number of users --- ## Presence Indicator & User Statuses The WebSocket version shows real-time online presence indicators and allows users to set their availability status. ## How it works A colored dot next to a user's avatar indicates their current availability status. Presence is tracked through the WebSocket connection, so status changes are reflected instantly across all connected clients. Users can manually set their status to control how they appear to others. ## Status types - **Online** (green) — User is actively on the site - **Away** (yellow) — User has been inactive - **Do Not Disturb** (red) — User has set themselves as unavailable ## Key capabilities - Real-time online/offline presence indicators - User-selectable availability statuses - Instant status updates across all connected users - Colored dot indicators next to user avatars - Visible in conversations, user lists, and mini widgets - No additional configuration required This feature is automatically available with the WebSocket version. --- ## Priority Support All WebSocket version license holders receive priority support with faster response times. ## How it works Priority support requests from WebSocket license holders are handled before standard support requests. This ensures faster response times for any questions or issues related to Better Messages, including plugin configuration, troubleshooting, and general guidance. ## Key capabilities - Faster response times compared to standard support - Available for all WebSocket license holders - Covers all Better Messages topics (not just WebSocket features) - Email-based support ## How to contact support Send your support request to the email address provided in your license documentation. Include your license key and website URL for fastest processing. --- ## Private All sensitive message content is encrypted with AES-256 encryption on your WordPress server before transmission through the WebSocket infrastructure. ## How it works Message content is encrypted on your WordPress server using AES-256 before being sent through the WebSocket relay. The relay server only handles encrypted data and has no ability to decrypt or read message content. Decryption happens in the user's browser using keys that are only available to authorized participants. This ensures complete privacy — even though messages pass through an external relay server, the content remains fully protected. ## Key capabilities - AES-256 encryption of all message content on your server - WebSocket relay server cannot decrypt or read messages - Decryption only in authorized users' browsers - No plaintext message data ever leaves your server - Complete privacy for all conversation types --- ## Refund Policy We stand behind our plugin’s quality and your satisfaction with it is important to us. If you experience problems with the plugin, we will be happy to provide a full refund within 7 days of the original upgrade date. Refunds will be offered at our sole discretion and must meet all of the following conditions fully: * You are within the first 7 days of the purchase of the plugin. * Your issue(s) derives from not being able to install the plugin properly or get the plugin to perform its basic functions. * You have attempted to resolve your issue(s) with our support team by opening a support ticket through the “Contact Us” in the plugin’s admin settings. * No refunds will be granted after the first 7 days of the original purchase whatsoever. * Refunds will not be granted for missing feature(s). If you are not sure we support a specific feature, please contact us first. * Issues caused by conflicts with 3rd party plugins, themes or other software will not provide grounds for a refund. * Refunds will not be granted if you simply decide not to use the plugin. * By upgrading, you agree to this refund policy and relinquish any rights to subject it to any questions, judgment or legal actions. To submit a refund request, please open a refund [support ticket](mailto:support@better-messages.com). --- ## How to reset the license? When you want to change the licensed domain name, but old website is already deleted, you might need to reset your license. You can do it at your customer account dashboard, which you can find at that link: https://users.freemius.com/ As the login you should use the email which were used, when you bought the plugin. If you do not know the password, just recover it. After you logged in to your customer account dashboard, navigate to Licenses, find the license which you want to deactivate and press Deactivate button. ![Freemius license](images/reset-license.png) After that you will be able to activate this license at your new domain. --- ## Screen Sharing Better Messages WebSocket version supports screen sharing during video calls, audio calls, and group chats. ## How it works During an active call, users can share their entire screen or a specific application window with other participants. Screen sharing uses WebRTC technology and is available during 1-to-1 video calls, 1-to-1 audio calls, group video chats, and group audio chats. The shared screen appears as a video stream for other participants. ## Key capabilities - Share entire screen or specific application window - Available during all call types (video, audio, group) - Uses WebRTC for efficient streaming - Other participants see the shared screen as a video feed - Switch between screen sharing and camera during a call ## Requirements - Website must use **HTTPS** - Supported on desktop browsers (Chrome, Firefox, Edge, Safari) - Screen sharing is initiated from within an active call This feature is automatically available during any active call with the WebSocket version. --- ## Secure The WebSocket version ensures secure communication between the server and your site users. ## How it works All WebSocket connections use encrypted WSS (WebSocket Secure) protocol over TLS/SSL. Authentication tokens are generated server-side and validated on each connection, preventing unauthorized access to messaging channels. The WebSocket server only relays encrypted event data and never has access to decrypted message content. ## Key capabilities - Encrypted WSS connections over TLS/SSL - Server-side authentication token generation and validation - Unauthorized connection attempts are rejected - Message content encrypted before transmission - WebSocket relay server cannot read message content - Secure handshake on every connection and reconnection --- ## Where Websocket servers located? WebSocket servers are currently located in Frankfurt, Germany. --- ## Typing & Activity Indicators The WebSocket version shows real-time activity indicators when another participant is typing a message, recording a voice message, or uploading a file. ## How it works When a user performs an activity in a conversation, a visual indicator appears for all other participants showing who is active and what they are doing. Each activity type has its own distinct icon. The indicator disappears when the activity completes or is cancelled. This creates a sense of live, natural interaction similar to popular messaging apps. ## Activity types - Typing — user is composing a text message - Voice recording — user is recording a voice message - File uploading — user is uploading a file ## Key capabilities - Real-time activity status display with distinct icons for each type - Shows which user is performing which activity - Indicators appear in the conversation header and message area - Appears and disappears automatically as activity starts and stops - Works in private conversations, group chats, and chat rooms - Minimal latency through WebSocket connection - No additional configuration required This feature is automatically available with the WebSocket version. --- ## Is there users limit for websocket version? WebSocket connections per standard subscription is not limited in any way. --- ## HD Video Calls ![Video Calls](images/video-calls.png) The WebSocket version enables HD 1-to-1 video calls between users using WebRTC technology. ## How it works Users can initiate video calls directly from any conversation. Calls use WebRTC technology for peer-to-peer communication when possible, ensuring low latency and high-quality video and audio. The call connection is established through the WebSocket infrastructure for signaling, while the actual media stream travels directly between participants. Screen sharing is also available during video calls. ## Key capabilities - 1-to-1 HD video calls between any two users - WebRTC-based peer-to-peer streaming - Low latency, high-quality video and audio - Initiate calls directly from any conversation - Screen sharing during calls - Works in all modern browsers supporting WebRTC ## Requirements - Website must use **HTTPS** (browsers require a secure context for camera and microphone access) - Users need a working webcam and microphone - Modern browser with WebRTC support :::tip **Website must work under HTTPS** to make video and audio calls work. The feature does not work on websites without SSL. ::: This feature is automatically available with the WebSocket version. --- ## Web Push Notifications The WebSocket version supports web push notifications that reach users even when they are not on your website. ## How it works When enabled, users receive browser push notifications for new messages and incoming calls on their desktop or mobile device, even if they have closed your website. Users opt in through a browser permission prompt. Push notifications work across Chrome, Firefox, Edge, and other modern browsers that support the Web Push API. ## Key capabilities - Notifications delivered even when users are offline or on other sites - Support for new message and incoming call notifications - Works across Chrome, Firefox, Edge, and other modern browsers - User opt-in through browser permission prompt - Works on both desktop and mobile browsers - Clickable notifications that open the relevant conversation ## How to enable Web push notifications are automatically available with the WebSocket version. Users will be prompted to allow push notifications through their browser's permission dialog. Users can manage their notification preferences through browser settings. --- ## WordPress Multisite ## Subfolder Networks Subfolder network can use 1 plugin license per network. Plugin must be activated network wide and license should be activated at primary website: ![Subfolder network](./images/wordpress-multisite-1.png) ## Subdomain Networks One license work only with 1 WP Multisite subdomain website instance. Why a license activation on a multisite network isn’t considered as a single activation? Multisite networks are way more complex than standard WordPress installations, have significantly more edge cases, and a higher chance for conflicts as subsites in the network can run different combinations of plugins and themes. Also, multisite-networks are largely used by bigger entities like agencies, boutique hosting providers, and WaaS, who generate revenue from their networks and, therefore, have higher load to us . Consequently, it’s only fair to charge them more for protecting each WPMU website instance. --- ## Your Data is Yours Better Messages does not store any private data on its WebSocket servers. ## How it works All message content, user data, attachments, and conversation history are stored exclusively in your WordPress website's database. The WebSocket server only temporarily processes encrypted event routing data — such as user IDs, thread IDs, and delivery statuses — to facilitate real-time delivery. Once events are delivered, no data is retained on the WebSocket infrastructure. You maintain full ownership and control of all your messaging data. ## Key capabilities - All messages stored in your WordPress database only - No message content stored on WebSocket servers - Only encrypted routing data processed temporarily - No data retention on relay infrastructure - Full data ownership and portability - Compliant with data sovereignty requirements