{
    "version": "https://jsonfeed.org/version/1",
    "title": "Better Messages Blog",
    "home_page_url": "https://www.better-messages.com/blog/",
    "description": "Guides and tutorials for real-time messaging on WordPress.",
    "items": [
        {
            "id": "https://www.better-messages.com/blog/motors-car-dealer-chat/",
            "content_html": "<p>The Motors plugin from Stylemix turns WordPress into a car-dealer / vehicle-classifieds platform — the most-installed automotive listing plugin on the WordPress ecosystem. Motors ships with <strong>Message Us</strong> and <strong>Make an Offer Price</strong> buttons that email the dealer; what it does not ship with is a real-time chat that keeps the conversation on-site, with persistent history, file attachments, and the option to escalate to a call. Better Messages adds that layer: a Live Chat button on every car listing, a LIVE CHAT pill on every inventory list card, a Live Chat row on the dealer profile, and a MESSAGES tab inside the dealer dashboard.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"what-better-messages-adds-to-motors\">What Better Messages adds to Motors<a href=\"https://www.better-messages.com/blog/motors-car-dealer-chat/#what-better-messages-adds-to-motors\" class=\"hash-link\" aria-label=\"Direct link to What Better Messages adds to Motors\" title=\"Direct link to What Better Messages adds to Motors\" translate=\"no\">​</a></h2>\n<p>Once Better Messages is installed and the Motors integration is enabled under <strong>Better Messages → Settings → Integrations → Directories</strong>:</p>\n<ul>\n<li class=\"\"><strong>Live Chat button on the single car listing page</strong> alongside Motors' Message Us / Make an Offer Price buttons.</li>\n<li class=\"\"><strong>LIVE CHAT pill on each inventory list card</strong> inline with Schedule Test Drive / Add to Compare / Quote by Phone / Trade-In / Share This.</li>\n<li class=\"\"><strong>Live Chat row on the dealer profile</strong> Contact Info card.</li>\n<li class=\"\"><strong>MESSAGES tab inside the dealer dashboard</strong> at <code>/author/&lt;username&gt;/?page=better-messages</code>.</li>\n<li class=\"\"><strong>Listing info card inside the conversation</strong> — car image, title, price.</li>\n<li class=\"\"><strong>Motors author profile links</strong> — clicking the dealer's name in a conversation opens their Motors profile, not the WordPress one.</li>\n<li class=\"\"><strong>Motors theme accent inheritance</strong> — the Live Chat buttons inherit the theme's accent and text colors automatically.</li>\n</ul>\n<p><img decoding=\"async\" loading=\"lazy\" alt=\"Live Chat button on the Motors car listing page, alongside Message Us and Make an Offer Price\" src=\"https://www.better-messages.com/assets/images/listing-page-75e9f1b083c4fb0834c40ebd1d586e76.png\" width=\"2800\" height=\"1800\" class=\"img_ev3q\"></p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"live-chat-pill-on-inventory-cards\">LIVE CHAT pill on inventory cards<a href=\"https://www.better-messages.com/blog/motors-car-dealer-chat/#live-chat-pill-on-inventory-cards\" class=\"hash-link\" aria-label=\"Direct link to LIVE CHAT pill on inventory cards\" title=\"Direct link to LIVE CHAT pill on inventory cards\" translate=\"no\">​</a></h2>\n<p><img decoding=\"async\" loading=\"lazy\" alt=\"LIVE CHAT pill inline on Motors inventory list cards\" src=\"https://www.better-messages.com/assets/images/inventory-list-34987dc3ad4ec4a6fe169b80601f33b6.png\" width=\"2800\" height=\"1800\" class=\"img_ev3q\"></p>\n<p>Buyers do not have to open each car to start a chat — the pill is on every inventory card, inline with the native Motors actions.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"live-chat-row-on-the-dealer-profile\">Live Chat row on the dealer profile<a href=\"https://www.better-messages.com/blog/motors-car-dealer-chat/#live-chat-row-on-the-dealer-profile\" class=\"hash-link\" aria-label=\"Direct link to Live Chat row on the dealer profile\" title=\"Direct link to Live Chat row on the dealer profile\" translate=\"no\">​</a></h2>\n<p><img decoding=\"async\" loading=\"lazy\" alt=\"Live Chat row in the Contact Info card on the dealer profile\" src=\"https://www.better-messages.com/assets/images/dealer-profile-df39baa4833905a804bce95d8d4570a7.png\" width=\"2800\" height=\"1800\" class=\"img_ev3q\"></p>\n<p>Adds a Live Chat row to the dealer / private-seller Contact Info card. Hidden when the dealer has no published listings.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"messages-tab-inside-the-dealer-dashboard\">MESSAGES tab inside the dealer dashboard<a href=\"https://www.better-messages.com/blog/motors-car-dealer-chat/#messages-tab-inside-the-dealer-dashboard\" class=\"hash-link\" aria-label=\"Direct link to MESSAGES tab inside the dealer dashboard\" title=\"Direct link to MESSAGES tab inside the dealer dashboard\" translate=\"no\">​</a></h2>\n<p><img decoding=\"async\" loading=\"lazy\" alt=\"MESSAGES tab inside the Motors dealer dashboard\" src=\"https://www.better-messages.com/assets/images/dashboard-tab-41de65006620fac92d2b03bfcd4362b2.png\" width=\"2800\" height=\"1800\" class=\"img_ev3q\"></p>\n<p>Dealers stay inside the Motors dashboard to read and reply to buyer inquiries. Combined with <strong>Messages Location → Show in Motors Dealer Dashboard</strong>, every internal Messages link in Better Messages routes to this tab.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"multi-listing-support\">Multi-listing support<a href=\"https://www.better-messages.com/blog/motors-car-dealer-chat/#multi-listing-support\" class=\"hash-link\" aria-label=\"Direct link to Multi-listing support\" title=\"Direct link to Multi-listing support\" translate=\"no\">​</a></h2>\n<p>If you run the Motors Multi-Listing add-on with extra vehicle types (motorcycles, boats, trucks, RVs, etc.), every placement above works for those listings automatically — no extra configuration needed.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"installing-better-messages-on-a-motors-site\">Installing Better Messages on a Motors site<a href=\"https://www.better-messages.com/blog/motors-car-dealer-chat/#installing-better-messages-on-a-motors-site\" class=\"hash-link\" aria-label=\"Direct link to Installing Better Messages on a Motors site\" title=\"Direct link to Installing Better Messages on a Motors site\" translate=\"no\">​</a></h2>\n<ol>\n<li class=\"\">Install <strong><a href=\"https://wordpress.org/plugins/bp-better-messages/\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\">Better Messages from WordPress.org</a></strong> and activate it.</li>\n<li class=\"\">Make sure Motors is active. Stylemix's Motors Starter Theme (or any of their commercial Motors themes) is recommended for the polished out-of-the-box layout the screenshots above use.</li>\n<li class=\"\">Open <strong>WP Admin → Better Messages → Settings → Integrations → Directories → Motors Integration</strong>.</li>\n<li class=\"\">Toggle <strong>Enable Motors Integration</strong> and the individual placement toggles you want.</li>\n</ol>\n<p><img decoding=\"async\" loading=\"lazy\" alt=\"Motors integration settings\" src=\"https://www.better-messages.com/assets/images/settings-5e1eb737654e19a78c919d0e47b51132.png\" width=\"2400\" height=\"1800\" class=\"img_ev3q\"></p>\n<p>For custom Elementor templates, sidebar widgets, or theme overrides, place buttons manually:</p>\n<div class=\"language-text codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#393A34;--prism-background-color:#f6f8fa\"><div class=\"codeBlockContent_QJqH\"><pre tabindex=\"0\" class=\"prism-code language-text codeBlock_bY9V thin-scrollbar\" style=\"color:#393A34;background-color:#f6f8fa\"><code class=\"codeBlockLines_e6Vv\"><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">[better_messages_motors_listing_button]</span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">[better_messages_motors_dealer_button]</span><br></span></code></pre></div></div>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"free-vs-websocket-version-for-motors-sites\">Free vs WebSocket version for Motors sites<a href=\"https://www.better-messages.com/blog/motors-car-dealer-chat/#free-vs-websocket-version-for-motors-sites\" class=\"hash-link\" aria-label=\"Direct link to Free vs WebSocket version for Motors sites\" title=\"Direct link to Free vs WebSocket version for Motors sites\" translate=\"no\">​</a></h2>\n<table><thead><tr><th>Feature</th><th style=\"text-align:center\">Free version</th><th style=\"text-align:center\">WebSocket version</th></tr></thead><tbody><tr><td>Live Chat button on listing, inventory cards, dealer profile</td><td style=\"text-align:center\">yes</td><td style=\"text-align:center\">yes</td></tr><tr><td>MESSAGES tab inside the dealer dashboard</td><td style=\"text-align:center\">yes</td><td style=\"text-align:center\">yes</td></tr><tr><td>Listing info card inside the conversation</td><td style=\"text-align:center\">yes</td><td style=\"text-align:center\">yes</td></tr><tr><td>Motors author profile links and theme accent</td><td style=\"text-align:center\">yes</td><td style=\"text-align:center\">yes</td></tr><tr><td>Multi-listing add-on support</td><td style=\"text-align:center\">yes</td><td style=\"text-align:center\">yes</td></tr><tr><td>Real-time delivery</td><td style=\"text-align:center\">polling</td><td style=\"text-align:center\">instant</td></tr><tr><td>Mini-widget popup chat (buyer stays on the car listing)</td><td style=\"text-align:center\">—</td><td style=\"text-align:center\">yes</td></tr><tr><td>One-on-one voice and video calls inside the thread</td><td style=\"text-align:center\">—</td><td style=\"text-align:center\">yes</td></tr><tr><td>Group voice and video calls (e.g. buyer + multiple dealership reps)</td><td style=\"text-align:center\">—</td><td style=\"text-align:center\">yes</td></tr><tr><td>Web push notifications for new messages</td><td style=\"text-align:center\">—</td><td style=\"text-align:center\">yes</td></tr><tr><td>Read receipts</td><td style=\"text-align:center\">—</td><td style=\"text-align:center\">yes</td></tr><tr><td>End-to-end encryption (optional)</td><td style=\"text-align:center\">—</td><td style=\"text-align:center\">yes</td></tr></tbody></table>\n<div class=\"theme-admonition theme-admonition-info admonition_xJq3 alert alert--info\"><div class=\"admonitionHeading_Gvgb\"><span class=\"admonitionIcon_Rf37\"><svg viewBox=\"0 0 14 16\"><path fill-rule=\"evenodd\" d=\"M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z\"></path></svg></span>info</div><div class=\"admonitionContent_BuS1\"><p>For car dealerships running paid Motors listings, the WebSocket version's web push and instant delivery are the difference between a hot lead that converts the same day and a lead that goes cold while the dealer waits for an email notification. The mini-widget popup keeps the buyer on the car page they were considering instead of redirecting them to a separate messages page.</p></div></div>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"frequently-asked-questions\">Frequently asked questions<a href=\"https://www.better-messages.com/blog/motors-car-dealer-chat/#frequently-asked-questions\" class=\"hash-link\" aria-label=\"Direct link to Frequently asked questions\" title=\"Direct link to Frequently asked questions\" translate=\"no\">​</a></h2>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"does-it-work-with-all-motors-theme-variants-cars-motorcycles-boats\">Does it work with all Motors theme variants (Cars, Motorcycles, Boats…)?<a href=\"https://www.better-messages.com/blog/motors-car-dealer-chat/#does-it-work-with-all-motors-theme-variants-cars-motorcycles-boats\" class=\"hash-link\" aria-label=\"Direct link to Does it work with all Motors theme variants (Cars, Motorcycles, Boats…)?\" title=\"Direct link to Does it work with all Motors theme variants (Cars, Motorcycles, Boats…)?\" translate=\"no\">​</a></h3>\n<p>Yes — Better Messages works with the standard Motors plugin regardless of which Stylemix theme you use. The Live Chat buttons inherit the active theme's accent colors automatically.</p>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"does-it-work-with-the-motors-multi-listing-add-on\">Does it work with the Motors Multi-Listing add-on?<a href=\"https://www.better-messages.com/blog/motors-car-dealer-chat/#does-it-work-with-the-motors-multi-listing-add-on\" class=\"hash-link\" aria-label=\"Direct link to Does it work with the Motors Multi-Listing add-on?\" title=\"Direct link to Does it work with the Motors Multi-Listing add-on?\" translate=\"no\">​</a></h3>\n<p>Yes — every placement (listing, inventory card, dealer profile, dashboard) works for motorcycles, boats, trucks, RVs, and any custom vehicle type the Multi-Listing add-on registers.</p>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"can-buyers-chat-without-registering\">Can buyers chat without registering?<a href=\"https://www.better-messages.com/blog/motors-car-dealer-chat/#can-buyers-chat-without-registering\" class=\"hash-link\" aria-label=\"Direct link to Can buyers chat without registering?\" title=\"Direct link to Can buyers chat without registering?\" translate=\"no\">​</a></h3>\n<p>Optional. With <strong>Guest Chat</strong> enabled, an unregistered buyer can start a thread by typing a name and email.</p>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"what-happens-when-a-car-listing-is-unpublished\">What happens when a car listing is unpublished?<a href=\"https://www.better-messages.com/blog/motors-car-dealer-chat/#what-happens-when-a-car-listing-is-unpublished\" class=\"hash-link\" aria-label=\"Direct link to What happens when a car listing is unpublished?\" title=\"Direct link to What happens when a car listing is unpublished?\" translate=\"no\">​</a></h3>\n<p>The Live Chat button is hidden when the listing is not published. Existing threads remain readable on both sides.</p>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"can-i-move-the-live-chat-pill-to-a-different-position-on-inventory-cards\">Can I move the LIVE CHAT pill to a different position on inventory cards?<a href=\"https://www.better-messages.com/blog/motors-car-dealer-chat/#can-i-move-the-live-chat-pill-to-a-different-position-on-inventory-cards\" class=\"hash-link\" aria-label=\"Direct link to Can I move the LIVE CHAT pill to a different position on inventory cards?\" title=\"Direct link to Can I move the LIVE CHAT pill to a different position on inventory cards?\" translate=\"no\">​</a></h3>\n<p>The pill is rendered inline with Motors' standard inventory-card action row. Position is controlled by the order of the Motors action hooks; a custom filter can reorder if needed. For more drastic layout changes, disable the auto-injection toggle and place the button manually via shortcode.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"see-also\">See also<a href=\"https://www.better-messages.com/blog/motors-car-dealer-chat/#see-also\" class=\"hash-link\" aria-label=\"Direct link to See also\" title=\"Direct link to See also\" translate=\"no\">​</a></h2>\n<ul>\n<li class=\"\"><a class=\"\" href=\"https://www.better-messages.com/docs/integrations/motors/\">Motors integration documentation</a> — full setup reference</li>\n<li class=\"\"><a class=\"\" href=\"https://www.better-messages.com/blog/classified-listing-chat/\">Classified Listing chat</a> — for general classifieds sites</li>\n<li class=\"\"><a class=\"\" href=\"https://www.better-messages.com/blog/directorist-listing-chat/\">Directorist chat</a> — for directory sites</li>\n<li class=\"\"><a class=\"\" href=\"https://www.better-messages.com/blog/hivepress-listing-chat/\">HivePress listing chat</a> — for HivePress marketplaces</li>\n</ul>\n<p><a href=\"https://wordpress.org/plugins/bp-better-messages/\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\"><strong>Install Better Messages from WordPress.org →</strong></a></p>",
            "url": "https://www.better-messages.com/blog/motors-car-dealer-chat/",
            "title": "Motors Car Dealer Chat: Real-Time Buyer ↔ Dealer Messaging",
            "summary": "Add real-time chat to a Motors car-dealer / classifieds site — Live Chat button on the car listing, LIVE CHAT pill on inventory cards, button on dealer profiles, and a Messages tab inside the dealer dashboard.",
            "date_modified": "2026-05-15T00:00:00.000Z",
            "author": {
                "name": "Andrij Tkachenko",
                "url": "/docs/getting-started/about"
            },
            "tags": [
                "Motors",
                "Guides"
            ]
        },
        {
            "id": "https://www.better-messages.com/blog/classified-listing-chat/",
            "content_html": "<p>Classified Listing (RTCL — Radius Theme Classified Listing) is the best-known classifieds plugin on WordPress, used for everything from local for-sale boards to country-wide listings sites. Better Messages adds a WordPress-native real-time chat layer to RTCL sites — running on its own WebSocket cloud, with the messenger hooking into every RTCL surface: the listing page, archive cards, author / store pages, the My Account dashboard, plus a floating header chat icon with live unread badge.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"what-better-messages-adds-to-classified-listing\">What Better Messages adds to Classified Listing<a href=\"https://www.better-messages.com/blog/classified-listing-chat/#what-better-messages-adds-to-classified-listing\" class=\"hash-link\" aria-label=\"Direct link to What Better Messages adds to Classified Listing\" title=\"Direct link to What Better Messages adds to Classified Listing\" translate=\"no\">​</a></h2>\n<p>Once Better Messages is installed and the Classified Listing integration is enabled under <strong>Better Messages → Settings → Integrations → Directories</strong>:</p>\n<ul>\n<li class=\"\"><strong>Live Chat button on the listing page</strong> inside the Seller Information widget.</li>\n<li class=\"\"><strong>Live Chat button on archive listing cards</strong> (opt-in).</li>\n<li class=\"\"><strong>Live Chat button on author and store pages</strong> (Classified Listing Store add-on supported).</li>\n<li class=\"\"><strong>Floating header chat icon</strong> with live unread-count badge.</li>\n<li class=\"\"><strong>Messages tab inside the My Account dashboard</strong> next to My Listings, Store, Payments.</li>\n<li class=\"\"><strong>Listing info card inside the conversation</strong> — image, title, price, location.</li>\n<li class=\"\"><strong>Author archive links</strong> — clicking the seller's name in a conversation opens their RTCL author archive.</li>\n</ul>\n<p><img decoding=\"async\" loading=\"lazy\" alt=\"Live Chat button inside the RTCL listing Seller Information widget\" src=\"https://www.better-messages.com/assets/images/listing-page-a90c20acda28be71cda4ff2d486998fa.png\" width=\"546\" height=\"756\" class=\"img_ev3q\"></p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"floating-header-chat-icon\">Floating header chat icon<a href=\"https://www.better-messages.com/blog/classified-listing-chat/#floating-header-chat-icon\" class=\"hash-link\" aria-label=\"Direct link to Floating header chat icon\" title=\"Direct link to Floating header chat icon\" translate=\"no\">​</a></h2>\n<p><img decoding=\"async\" loading=\"lazy\" alt=\"Floating chat icon in the site header with unread badge\" src=\"https://www.better-messages.com/assets/images/header-icon-dd3efb76abc5f13a83eccca399a07465.png\" width=\"3006\" height=\"180\" class=\"img_ev3q\"></p>\n<p>Inserts a chat-bubble icon into the site header next to My Account and (when Pro is active) the native Chat icon. Inherits the theme's header-icon styling and shows a live unread count that updates in real time. Opt-in via the <strong>Header Chat Icon</strong> toggle.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"messages-tab-in-the-rtcl-my-account-dashboard\">Messages tab in the RTCL My Account dashboard<a href=\"https://www.better-messages.com/blog/classified-listing-chat/#messages-tab-in-the-rtcl-my-account-dashboard\" class=\"hash-link\" aria-label=\"Direct link to Messages tab in the RTCL My Account dashboard\" title=\"Direct link to Messages tab in the RTCL My Account dashboard\" translate=\"no\">​</a></h2>\n<p><img decoding=\"async\" loading=\"lazy\" alt=\"Messages tab inside the Classified Listing My Account dashboard\" src=\"https://www.better-messages.com/assets/images/dashboard-tab-cb377d394a35c39a783befcbef05c6ae.png\" width=\"500\" height=\"1260\" class=\"img_ev3q\"></p>\n<p>Embeds the full Better Messages inbox inside the RTCL My Account layout. Combined with <strong>Messages Location → Show in Classified Listing Account</strong>, every internal Messages link routes here.</p>\n<div class=\"theme-admonition theme-admonition-info admonition_xJq3 alert alert--info\"><div class=\"admonitionHeading_Gvgb\"><span class=\"admonitionIcon_Rf37\"><svg viewBox=\"0 0 14 16\"><path fill-rule=\"evenodd\" d=\"M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z\"></path></svg></span>info</div><div class=\"admonitionContent_BuS1\"><p>After enabling the dashboard tab for the first time, visit <strong>Settings → Permalinks</strong> and click <strong>Save Changes</strong> to register the new endpoint. Without that step the tab will appear in the sidebar but the URL will 404.</p></div></div>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"listing-info-card-inside-the-conversation\">Listing info card inside the conversation<a href=\"https://www.better-messages.com/blog/classified-listing-chat/#listing-info-card-inside-the-conversation\" class=\"hash-link\" aria-label=\"Direct link to Listing info card inside the conversation\" title=\"Direct link to Listing info card inside the conversation\" translate=\"no\">​</a></h2>\n<p><img decoding=\"async\" loading=\"lazy\" alt=\"Conversation with the Classified Listing info card showing image, title, price\" src=\"https://www.better-messages.com/assets/images/thread-info-b96a7a39e159e1325c463807e4e0550e.png\" width=\"1196\" height=\"1212\" class=\"img_ev3q\"></p>\n<p>The card removes the \"which listing is this about\" question — the seller sees the listing image, title, and price at the top of the thread.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"using-classified-listing-pro-chat-alongside-better-messages\">Using Classified Listing Pro chat alongside Better Messages<a href=\"https://www.better-messages.com/blog/classified-listing-chat/#using-classified-listing-pro-chat-alongside-better-messages\" class=\"hash-link\" aria-label=\"Direct link to Using Classified Listing Pro chat alongside Better Messages\" title=\"Direct link to Using Classified Listing Pro chat alongside Better Messages\" translate=\"no\">​</a></h2>\n<p>If you are running Classified Listing Pro with its built-in chat enabled, Better Messages coexists with it — both buttons render side by side on the listing page, both inboxes work independently.</p>\n<div class=\"theme-admonition theme-admonition-info admonition_xJq3 alert alert--info\"><div class=\"admonitionHeading_Gvgb\"><span class=\"admonitionIcon_Rf37\"><svg viewBox=\"0 0 14 16\"><path fill-rule=\"evenodd\" d=\"M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z\"></path></svg></span>info</div><div class=\"admonitionContent_BuS1\"><p>For the cleanest experience, disable Pro's built-in chat under <strong>Classified Listing → Settings → Chat → uncheck Enable Chat</strong> so visitors only see one Live Chat button.</p></div></div>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"installing-better-messages-on-a-classified-listing-site\">Installing Better Messages on a Classified Listing site<a href=\"https://www.better-messages.com/blog/classified-listing-chat/#installing-better-messages-on-a-classified-listing-site\" class=\"hash-link\" aria-label=\"Direct link to Installing Better Messages on a Classified Listing site\" title=\"Direct link to Installing Better Messages on a Classified Listing site\" translate=\"no\">​</a></h2>\n<ol>\n<li class=\"\">Install <strong><a href=\"https://wordpress.org/plugins/bp-better-messages/\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\">Better Messages from WordPress.org</a></strong> and activate it.</li>\n<li class=\"\">Make sure Classified Listing (RTCL) is active. Pro is optional — both work.</li>\n<li class=\"\">Open <strong>WP Admin → Better Messages → Settings → Integrations → Directories → Classified Listing Integration</strong>.</li>\n<li class=\"\">Toggle <strong>Enable Classified Listing Integration</strong> and the individual placement toggles you want.</li>\n</ol>\n<p><img decoding=\"async\" loading=\"lazy\" alt=\"Classified Listing integration settings\" src=\"https://www.better-messages.com/assets/images/settings-648547a3f8aff510eb619f55b672b8a0.png\" width=\"3036\" height=\"1600\" class=\"img_ev3q\"></p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"free-vs-websocket-version-for-classified-listing-sites\">Free vs WebSocket version for Classified Listing sites<a href=\"https://www.better-messages.com/blog/classified-listing-chat/#free-vs-websocket-version-for-classified-listing-sites\" class=\"hash-link\" aria-label=\"Direct link to Free vs WebSocket version for Classified Listing sites\" title=\"Direct link to Free vs WebSocket version for Classified Listing sites\" translate=\"no\">​</a></h2>\n<table><thead><tr><th>Feature</th><th style=\"text-align:center\">Free version</th><th style=\"text-align:center\">WebSocket version</th></tr></thead><tbody><tr><td>Live Chat buttons on listing, archive cards, author / store pages</td><td style=\"text-align:center\">yes</td><td style=\"text-align:center\">yes</td></tr><tr><td>Floating header chat icon with unread badge</td><td style=\"text-align:center\">yes</td><td style=\"text-align:center\">yes</td></tr><tr><td>Messages tab inside RTCL My Account</td><td style=\"text-align:center\">yes</td><td style=\"text-align:center\">yes</td></tr><tr><td>Listing info card inside the thread</td><td style=\"text-align:center\">yes</td><td style=\"text-align:center\">yes</td></tr><tr><td>Real-time delivery</td><td style=\"text-align:center\">polling</td><td style=\"text-align:center\">instant</td></tr><tr><td>Mini-widget popup chat (buyer stays on the listing)</td><td style=\"text-align:center\">—</td><td style=\"text-align:center\">yes</td></tr><tr><td>One-on-one voice and video calls inside the thread</td><td style=\"text-align:center\">—</td><td style=\"text-align:center\">yes</td></tr><tr><td>Group voice and video calls</td><td style=\"text-align:center\">—</td><td style=\"text-align:center\">yes</td></tr><tr><td>Web push notifications for new messages</td><td style=\"text-align:center\">—</td><td style=\"text-align:center\">yes</td></tr><tr><td>Read receipts</td><td style=\"text-align:center\">—</td><td style=\"text-align:center\">yes</td></tr><tr><td>End-to-end encryption (optional)</td><td style=\"text-align:center\">—</td><td style=\"text-align:center\">yes</td></tr></tbody></table>\n<div class=\"theme-admonition theme-admonition-info admonition_xJq3 alert alert--info\"><div class=\"admonitionHeading_Gvgb\"><span class=\"admonitionIcon_Rf37\"><svg viewBox=\"0 0 14 16\"><path fill-rule=\"evenodd\" d=\"M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z\"></path></svg></span>info</div><div class=\"admonitionContent_BuS1\"><p>For classified sites where the time-to-first-reply is the conversion metric, the WebSocket version's web push notifications close the gap dramatically — sellers see and reply to inquiries within minutes, not hours. The mini-widget popup keeps the buyer on the listing page they were considering.</p></div></div>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"frequently-asked-questions\">Frequently asked questions<a href=\"https://www.better-messages.com/blog/classified-listing-chat/#frequently-asked-questions\" class=\"hash-link\" aria-label=\"Direct link to Frequently asked questions\" title=\"Direct link to Frequently asked questions\" translate=\"no\">​</a></h2>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"does-it-work-with-classified-listing-pro\">Does it work with Classified Listing Pro?<a href=\"https://www.better-messages.com/blog/classified-listing-chat/#does-it-work-with-classified-listing-pro\" class=\"hash-link\" aria-label=\"Direct link to Does it work with Classified Listing Pro?\" title=\"Direct link to Does it work with Classified Listing Pro?\" translate=\"no\">​</a></h3>\n<p>Yes. Pro is optional — Better Messages works with the free RTCL plugin too. With Pro, the Better Messages buttons render next to (or instead of) the Pro chat depending on whether you disable Pro's chat.</p>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"will-the-dashboard-tab-work-on-commercial-themes-like-classima\">Will the dashboard tab work on commercial themes like Classima?<a href=\"https://www.better-messages.com/blog/classified-listing-chat/#will-the-dashboard-tab-work-on-commercial-themes-like-classima\" class=\"hash-link\" aria-label=\"Direct link to Will the dashboard tab work on commercial themes like Classima?\" title=\"Direct link to Will the dashboard tab work on commercial themes like Classima?\" translate=\"no\">​</a></h3>\n<p>Yes — the Messages tab is added through RTCL's My Account endpoint registration, which commercial themes respect. The archive-card button is the only piece that depends on RTCL's default loop templates (some commercial themes replace those, and the archive button does not auto-render on those themes — listing page and header icon still work).</p>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"can-visitors-message-without-an-account\">Can visitors message without an account?<a href=\"https://www.better-messages.com/blog/classified-listing-chat/#can-visitors-message-without-an-account\" class=\"hash-link\" aria-label=\"Direct link to Can visitors message without an account?\" title=\"Direct link to Can visitors message without an account?\" translate=\"no\">​</a></h3>\n<p>Optional. With <strong>Guest Chat</strong> enabled, unregistered visitors can start a thread from a listing by typing a name and email.</p>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"does-the-header-chat-icon-support-translation--dark-mode\">Does the header chat icon support translation / dark mode?<a href=\"https://www.better-messages.com/blog/classified-listing-chat/#does-the-header-chat-icon-support-translation--dark-mode\" class=\"hash-link\" aria-label=\"Direct link to Does the header chat icon support translation / dark mode?\" title=\"Direct link to Does the header chat icon support translation / dark mode?\" translate=\"no\">​</a></h3>\n<p>Yes — the icon inherits the theme's native header-icon styling, so dark-mode flips and RTL layouts are handled by the theme automatically.</p>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"can-i-place-the-header-chat-icon-in-a-custom-location\">Can I place the header chat icon in a custom location?<a href=\"https://www.better-messages.com/blog/classified-listing-chat/#can-i-place-the-header-chat-icon-in-a-custom-location\" class=\"hash-link\" aria-label=\"Direct link to Can I place the header chat icon in a custom location?\" title=\"Direct link to Can I place the header chat icon in a custom location?\" translate=\"no\">​</a></h3>\n<p>Yes — use the shortcode <code>[better_messages_classified_listing_header_button]</code> inside a page-builder block or a custom header template.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"see-also\">See also<a href=\"https://www.better-messages.com/blog/classified-listing-chat/#see-also\" class=\"hash-link\" aria-label=\"Direct link to See also\" title=\"Direct link to See also\" translate=\"no\">​</a></h2>\n<ul>\n<li class=\"\"><a class=\"\" href=\"https://www.better-messages.com/docs/integrations/classified-listing/\">Classified Listing integration documentation</a> — full setup reference</li>\n<li class=\"\"><a class=\"\" href=\"https://www.better-messages.com/blog/directorist-listing-chat/\">Directorist chat</a> — for Directorist-driven sites</li>\n<li class=\"\"><a class=\"\" href=\"https://www.better-messages.com/blog/geodirectory-listing-chat/\">GeoDirectory chat</a> — for GeoDirectory-driven sites</li>\n<li class=\"\"><a class=\"\" href=\"https://www.better-messages.com/blog/hivepress-listing-chat/\">HivePress listing chat</a> — for HivePress-driven sites</li>\n<li class=\"\"><a class=\"\" href=\"https://www.better-messages.com/blog/motors-car-dealer-chat/\">Motors car dealer chat</a> — for automotive classifieds</li>\n</ul>\n<p><a href=\"https://wordpress.org/plugins/bp-better-messages/\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\"><strong>Install Better Messages from WordPress.org →</strong></a></p>",
            "url": "https://www.better-messages.com/blog/classified-listing-chat/",
            "title": "Classified Listing (RTCL) Chat: Real-Time Messaging Plugin",
            "summary": "Add real-time chat between Classified Listing (RTCL) sellers and buyers — Live Chat button on listings and archive cards, floating header chat icon, Messages tab inside the RTCL My Account dashboard.",
            "date_modified": "2026-05-14T00:00:00.000Z",
            "author": {
                "name": "Andrij Tkachenko",
                "url": "/docs/getting-started/about"
            },
            "tags": [
                "Classified Listing",
                "Guides"
            ]
        },
        {
            "id": "https://www.better-messages.com/blog/wordpress-lms-chat-plugin/",
            "content_html": "<p>WordPress LMS plugins compete on course-builder UX, certificates, and quizzes — but none of them ship with real-time student ↔ instructor messaging out of the box. Students who hit a roadblock either drop the question in a forum that may or may not be monitored, email the instructor and wait, or abandon the course. The fix is a chat layer that lives inside the course page, knows which students are enrolled, and stays in sync as enrollment changes.</p>\n<p>Better Messages adds that layer to LearnDash, LearnPress, Tutor LMS, MasterStudy LMS, and FluentCommunity Courses — from one install. This post compares what the integration looks like across the five LMS plugins.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"the-five-lms-integrations-at-a-glance\">The five LMS integrations at a glance<a href=\"https://www.better-messages.com/blog/wordpress-lms-chat-plugin/#the-five-lms-integrations-at-a-glance\" class=\"hash-link\" aria-label=\"Direct link to The five LMS integrations at a glance\" title=\"Direct link to The five LMS integrations at a glance\" translate=\"no\">​</a></h2>\n<table><thead><tr><th>LMS plugin</th><th style=\"text-align:center\">Active installs (approx.)</th><th style=\"text-align:center\">Message Instructor button on course page</th><th style=\"text-align:center\">Auto-managed course group chat</th><th style=\"text-align:center\">Instructor profile Send Message button</th></tr></thead><tbody><tr><td>LearnDash</td><td style=\"text-align:center\">100,000+</td><td style=\"text-align:center\">yes</td><td style=\"text-align:center\">yes</td><td style=\"text-align:center\">yes (Instructor Role add-on)</td></tr><tr><td>LearnPress</td><td style=\"text-align:center\">70,000+</td><td style=\"text-align:center\">yes</td><td style=\"text-align:center\">yes</td><td style=\"text-align:center\">yes</td></tr><tr><td>Tutor LMS</td><td style=\"text-align:center\">90,000+</td><td style=\"text-align:center\">yes</td><td style=\"text-align:center\">yes</td><td style=\"text-align:center\">yes</td></tr><tr><td>MasterStudy LMS</td><td style=\"text-align:center\">30,000+</td><td style=\"text-align:center\">yes</td><td style=\"text-align:center\">yes</td><td style=\"text-align:center\">yes</td></tr><tr><td>FluentCommunity Courses</td><td style=\"text-align:center\">5,000+</td><td style=\"text-align:center\">— (course-driven via FC)</td><td style=\"text-align:center\">yes (Courses widget)</td><td style=\"text-align:center\">—</td></tr></tbody></table>\n<p>All five share the same Better Messages course-info card, shared course settings (info card / email / push toggles), and the dedicated <strong>Courses widget</strong> on the messenger's Mini Widgets bar — separate from the social Groups widget so academic chats and friend cohorts do not mix.</p>\n<p><img decoding=\"async\" loading=\"lazy\" alt=\"Better Messages Courses widget on a multi-LMS site\" src=\"https://www.better-messages.com/assets/images/courses-widget-9753ef12210f53a81f66ba4dafe3186b.png\" width=\"2800\" height=\"1888\" class=\"img_ev3q\"></p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"learndash\">LearnDash<a href=\"https://www.better-messages.com/blog/wordpress-lms-chat-plugin/#learndash\" class=\"hash-link\" aria-label=\"Direct link to LearnDash\" title=\"Direct link to LearnDash\" translate=\"no\">​</a></h2>\n<p>The most-installed LMS on WordPress. Better Messages adds a Message Instructor button on every course page, an auto-managed Course Group Chat that mirrors enrollment, a LearnDash Group cohort chat, and a Send Message button on the LearnDash Instructor Role profile.</p>\n<p><img decoding=\"async\" loading=\"lazy\" alt=\"Message Instructor button on a LearnDash course page\" src=\"https://www.better-messages.com/assets/images/learndash-course-button-5fbb266e759d7e6b4134bbd0b19e132a.png\" width=\"2800\" height=\"1888\" class=\"img_ev3q\"></p>\n<p>Full write-up: <a class=\"\" href=\"https://www.better-messages.com/blog/learndash-student-messaging/\">LearnDash student messaging plugin</a>. Reference: <a class=\"\" href=\"https://www.better-messages.com/docs/integrations/learndash/\">LearnDash integration documentation</a>.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"learnpress\">LearnPress<a href=\"https://www.better-messages.com/blog/wordpress-lms-chat-plugin/#learnpress\" class=\"hash-link\" aria-label=\"Direct link to LearnPress\" title=\"Direct link to LearnPress\" translate=\"no\">​</a></h2>\n<p>LearnPress's structure (Courses, Lessons, Quizzes) maps directly to Better Messages: each course gets its own group chat, the instructor's user gets a Send Message button on their profile, and the Courses widget surfaces every course the student is enrolled in.</p>\n<p><img decoding=\"async\" loading=\"lazy\" alt=\"Message Instructor button on a LearnPress course page\" src=\"https://www.better-messages.com/assets/images/learnpress-course-button-ae07fa6cef5d83f5a566d221664986c9.png\" width=\"2800\" height=\"1800\" class=\"img_ev3q\"></p>\n<p>Reference: <a class=\"\" href=\"https://www.better-messages.com/docs/integrations/learnpress/\">LearnPress integration documentation</a>.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"tutor-lms\">Tutor LMS<a href=\"https://www.better-messages.com/blog/wordpress-lms-chat-plugin/#tutor-lms\" class=\"hash-link\" aria-label=\"Direct link to Tutor LMS\" title=\"Direct link to Tutor LMS\" translate=\"no\">​</a></h2>\n<p>Tutor LMS has its own student / instructor dashboards. Better Messages adds a Messages tab to the Tutor LMS dashboard and a Message Instructor button on the course page; the integration also adds a student-profile Send Message button so instructors can reach out to specific students.</p>\n<p><img decoding=\"async\" loading=\"lazy\" alt=\"Message Instructor button on a Tutor LMS course page\" src=\"https://www.better-messages.com/assets/images/tutor-lms-course-button-a5810ef99d7a27e05dcd836b890c6c43.png\" width=\"2800\" height=\"1800\" class=\"img_ev3q\"></p>\n<p>Reference: <a class=\"\" href=\"https://www.better-messages.com/docs/integrations/tutor-lms/\">Tutor LMS integration documentation</a>.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"masterstudy-lms\">MasterStudy LMS<a href=\"https://www.better-messages.com/blog/wordpress-lms-chat-plugin/#masterstudy-lms\" class=\"hash-link\" aria-label=\"Direct link to MasterStudy LMS\" title=\"Direct link to MasterStudy LMS\" translate=\"no\">​</a></h2>\n<p>MasterStudy ships with its own account-messages tab. Better Messages takes it over and embeds the full messenger inside the MasterStudy account layout — students never leave the LMS UI to chat.</p>\n<p><img decoding=\"async\" loading=\"lazy\" alt=\"Message Instructor button on a MasterStudy LMS course page\" src=\"https://www.better-messages.com/assets/images/masterstudy-course-button-8d57484a22c9d896792894a81187c5a1.png\" width=\"2800\" height=\"1800\" class=\"img_ev3q\"></p>\n<p>Reference: <a class=\"\" href=\"https://www.better-messages.com/docs/integrations/masterstudy-lms/\">MasterStudy LMS integration documentation</a>.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"fluentcommunity-courses\">FluentCommunity Courses<a href=\"https://www.better-messages.com/blog/wordpress-lms-chat-plugin/#fluentcommunity-courses\" class=\"hash-link\" aria-label=\"Direct link to FluentCommunity Courses\" title=\"Direct link to FluentCommunity Courses\" translate=\"no\">​</a></h2>\n<p>FluentCommunity has its own community + course product. Better Messages integrates with FluentCommunity Spaces (community side) and FluentCommunity Courses (LMS side); the Courses widget lists every FC course a student is enrolled in, and each course gets its paired group chat.</p>\n<p>Reference: <a class=\"\" href=\"https://www.better-messages.com/docs/integrations/fluentcommunity/\">FluentCommunity integration documentation</a>.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"how-they-compare-on-the-student-instructor-flow\">How they compare on the student-instructor flow<a href=\"https://www.better-messages.com/blog/wordpress-lms-chat-plugin/#how-they-compare-on-the-student-instructor-flow\" class=\"hash-link\" aria-label=\"Direct link to How they compare on the student-instructor flow\" title=\"Direct link to How they compare on the student-instructor flow\" translate=\"no\">​</a></h2>\n<table><thead><tr><th>Student → instructor flow</th><th style=\"text-align:center\">LearnDash</th><th style=\"text-align:center\">LearnPress</th><th style=\"text-align:center\">Tutor LMS</th><th style=\"text-align:center\">MasterStudy</th><th style=\"text-align:center\">FC Courses</th></tr></thead><tbody><tr><td>Course page → DM the instructor</td><td style=\"text-align:center\">yes</td><td style=\"text-align:center\">yes</td><td style=\"text-align:center\">yes</td><td style=\"text-align:center\">yes</td><td style=\"text-align:center\">yes (via FC)</td></tr><tr><td>Course → shared group chat with all enrolled students</td><td style=\"text-align:center\">yes</td><td style=\"text-align:center\">yes</td><td style=\"text-align:center\">yes</td><td style=\"text-align:center\">yes</td><td style=\"text-align:center\">yes</td></tr><tr><td>Group chat enrollment auto-sync</td><td style=\"text-align:center\">yes</td><td style=\"text-align:center\">yes</td><td style=\"text-align:center\">yes</td><td style=\"text-align:center\">yes</td><td style=\"text-align:center\">yes</td></tr><tr><td>Cohort / group-leader chat</td><td style=\"text-align:center\">yes (LearnDash Groups)</td><td style=\"text-align:center\">—</td><td style=\"text-align:center\">—</td><td style=\"text-align:center\">—</td><td style=\"text-align:center\">yes (FC Spaces)</td></tr><tr><td>Instructor profile Send Message button</td><td style=\"text-align:center\">yes (Inst. Role)</td><td style=\"text-align:center\">yes</td><td style=\"text-align:center\">yes</td><td style=\"text-align:center\">yes</td><td style=\"text-align:center\">—</td></tr><tr><td>Courses widget in the messenger</td><td style=\"text-align:center\">yes</td><td style=\"text-align:center\">yes</td><td style=\"text-align:center\">yes</td><td style=\"text-align:center\">yes</td><td style=\"text-align:center\">yes</td></tr><tr><td>Course info card above the conversation</td><td style=\"text-align:center\">yes</td><td style=\"text-align:center\">yes</td><td style=\"text-align:center\">yes</td><td style=\"text-align:center\">yes</td><td style=\"text-align:center\">yes</td></tr></tbody></table>\n<p>The core experience — Message Instructor + course group chat + Courses widget — is identical across all five. Differences are in dashboard placement (each LMS has its own conventions) and a couple of advanced surfaces (LearnDash Groups, FluentCommunity Spaces).</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"shared-lms-settings-apply-to-all-five\">Shared LMS settings apply to all five<a href=\"https://www.better-messages.com/blog/wordpress-lms-chat-plugin/#shared-lms-settings-apply-to-all-five\" class=\"hash-link\" aria-label=\"Direct link to Shared LMS settings apply to all five\" title=\"Direct link to Shared LMS settings apply to all five\" translate=\"no\">​</a></h2>\n<p>Three toggles under <strong>Better Messages → Settings → Integrations → LMS → Shared Course Settings</strong> apply across every LMS integration:</p>\n<ul>\n<li class=\"\"><strong>Course Info Card</strong> <em>(on by default)</em> — banner with course title, image, and instructor name above the conversation.</li>\n<li class=\"\"><strong>Email Notifications</strong> <em>(on by default)</em> — standard new-message email for course chat activity.</li>\n<li class=\"\"><strong>Push Notifications</strong> <em>(off by default, WebSocket version)</em> — integration-level real-time push for course-chat events.</li>\n</ul>\n<p>Changing any toggle propagates across LearnDash, LearnPress, Tutor LMS, MasterStudy LMS, and FluentCommunity Courses.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"installing-better-messages-on-any-lms-site\">Installing Better Messages on any LMS site<a href=\"https://www.better-messages.com/blog/wordpress-lms-chat-plugin/#installing-better-messages-on-any-lms-site\" class=\"hash-link\" aria-label=\"Direct link to Installing Better Messages on any LMS site\" title=\"Direct link to Installing Better Messages on any LMS site\" translate=\"no\">​</a></h2>\n<ol>\n<li class=\"\">Install <strong><a href=\"https://wordpress.org/plugins/bp-better-messages/\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\">Better Messages from WordPress.org</a></strong> and activate it.</li>\n<li class=\"\">Install your LMS plugin of choice (LearnDash, LearnPress, Tutor LMS, MasterStudy LMS, or FluentCommunity).</li>\n<li class=\"\">Open <strong>WP Admin → Better Messages → Settings → Integrations → LMS</strong> and enable the integrations you want.</li>\n</ol>\n<p>Sites running more than one LMS plugin (rare, but it happens) can enable multiple integrations simultaneously — each appears as its own section in the Courses widget.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"free-vs-websocket-version-for-lms-sites\">Free vs WebSocket version for LMS sites<a href=\"https://www.better-messages.com/blog/wordpress-lms-chat-plugin/#free-vs-websocket-version-for-lms-sites\" class=\"hash-link\" aria-label=\"Direct link to Free vs WebSocket version for LMS sites\" title=\"Direct link to Free vs WebSocket version for LMS sites\" translate=\"no\">​</a></h2>\n<table><thead><tr><th>Feature</th><th style=\"text-align:center\">Free version</th><th style=\"text-align:center\">WebSocket version</th></tr></thead><tbody><tr><td>Message Instructor button on course page</td><td style=\"text-align:center\">yes</td><td style=\"text-align:center\">yes</td></tr><tr><td>Auto-managed Course Group Chat</td><td style=\"text-align:center\">yes</td><td style=\"text-align:center\">yes</td></tr><tr><td>Cohort / Group chat (LearnDash Groups, FC Spaces)</td><td style=\"text-align:center\">yes</td><td style=\"text-align:center\">yes</td></tr><tr><td>Courses widget on the Mini Widgets bar</td><td style=\"text-align:center\">yes</td><td style=\"text-align:center\">yes</td></tr><tr><td>Real-time delivery</td><td style=\"text-align:center\">polling</td><td style=\"text-align:center\">instant</td></tr><tr><td>One-on-one voice and video calls inside course threads (private office hours)</td><td style=\"text-align:center\">—</td><td style=\"text-align:center\">yes</td></tr><tr><td>Group voice and video calls inside course threads (cohort office hours, study sessions)</td><td style=\"text-align:center\">—</td><td style=\"text-align:center\">yes</td></tr><tr><td>Web push notifications for new messages</td><td style=\"text-align:center\">—</td><td style=\"text-align:center\">yes</td></tr><tr><td>Integration-level real-time push for course-chat events</td><td style=\"text-align:center\">—</td><td style=\"text-align:center\">yes</td></tr><tr><td>Read receipts</td><td style=\"text-align:center\">—</td><td style=\"text-align:center\">yes</td></tr><tr><td>End-to-end encryption (optional per thread)</td><td style=\"text-align:center\">—</td><td style=\"text-align:center\">yes</td></tr></tbody></table>\n<div class=\"theme-admonition theme-admonition-info admonition_xJq3 alert alert--info\"><div class=\"admonitionHeading_Gvgb\"><span class=\"admonitionIcon_Rf37\"><svg viewBox=\"0 0 14 16\"><path fill-rule=\"evenodd\" d=\"M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z\"></path></svg></span>info</div><div class=\"admonitionContent_BuS1\"><p>The WebSocket version turns course threads into a Discord-style space for the cohort: instant delivery, group voice / video calls for office hours and study sessions, and web push notifications that reach students when the LMS tab is closed. For paid courses and structured cohorts, this is the difference between a passive course library and an active learning community.</p></div></div>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"frequently-asked-questions\">Frequently asked questions<a href=\"https://www.better-messages.com/blog/wordpress-lms-chat-plugin/#frequently-asked-questions\" class=\"hash-link\" aria-label=\"Direct link to Frequently asked questions\" title=\"Direct link to Frequently asked questions\" translate=\"no\">​</a></h2>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"will-students-from-different-courses-end-up-in-the-same-chat\">Will students from different courses end up in the same chat?<a href=\"https://www.better-messages.com/blog/wordpress-lms-chat-plugin/#will-students-from-different-courses-end-up-in-the-same-chat\" class=\"hash-link\" aria-label=\"Direct link to Will students from different courses end up in the same chat?\" title=\"Direct link to Will students from different courses end up in the same chat?\" translate=\"no\">​</a></h3>\n<p>No — each course has its own group chat. Students enrolled in multiple courses see one thread per course in the Courses widget.</p>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"what-happens-when-a-students-enrollment-is-revoked\">What happens when a student's enrollment is revoked?<a href=\"https://www.better-messages.com/blog/wordpress-lms-chat-plugin/#what-happens-when-a-students-enrollment-is-revoked\" class=\"hash-link\" aria-label=\"Direct link to What happens when a student's enrollment is revoked?\" title=\"Direct link to What happens when a student's enrollment is revoked?\" translate=\"no\">​</a></h3>\n<p>Better Messages listens to each LMS plugin's enrollment hooks (<code>learndash_update_course_access</code>, <code>learn-press/user-enrolled-course</code>, <code>tutor_after_enrolled</code>, etc.) and removes the student from the course chat. Their previous messages remain in history.</p>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"can-i-run-two-lms-plugins-side-by-side\">Can I run two LMS plugins side by side?<a href=\"https://www.better-messages.com/blog/wordpress-lms-chat-plugin/#can-i-run-two-lms-plugins-side-by-side\" class=\"hash-link\" aria-label=\"Direct link to Can I run two LMS plugins side by side?\" title=\"Direct link to Can I run two LMS plugins side by side?\" translate=\"no\">​</a></h3>\n<p>Yes — Better Messages detects each active LMS and wires the integration in independently. The Courses widget surfaces courses from every LMS.</p>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"are-course-chats-included-in-the-standard-email-digest\">Are course chats included in the standard email digest?<a href=\"https://www.better-messages.com/blog/wordpress-lms-chat-plugin/#are-course-chats-included-in-the-standard-email-digest\" class=\"hash-link\" aria-label=\"Direct link to Are course chats included in the standard email digest?\" title=\"Direct link to Are course chats included in the standard email digest?\" translate=\"no\">​</a></h3>\n<p>Yes — the shared <strong>Email Notifications</strong> toggle controls the standard new-message email for every LMS course chat. Toggle it off if your students prefer not to receive email per message.</p>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"does-it-work-with-learndash-groups-cohort-feature\">Does it work with LearnDash Groups (cohort feature)?<a href=\"https://www.better-messages.com/blog/wordpress-lms-chat-plugin/#does-it-work-with-learndash-groups-cohort-feature\" class=\"hash-link\" aria-label=\"Direct link to Does it work with LearnDash Groups (cohort feature)?\" title=\"Direct link to Does it work with LearnDash Groups (cohort feature)?\" translate=\"no\">​</a></h3>\n<p>Yes — each LearnDash Group gets its own chat, separate from the per-course chat. Group Leaders are auto-joined as instructors.</p>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"does-it-work-with-fluentcommunitys-own-messaging\">Does it work with FluentCommunity's own messaging?<a href=\"https://www.better-messages.com/blog/wordpress-lms-chat-plugin/#does-it-work-with-fluentcommunitys-own-messaging\" class=\"hash-link\" aria-label=\"Direct link to Does it work with FluentCommunity's own messaging?\" title=\"Direct link to Does it work with FluentCommunity's own messaging?\" translate=\"no\">​</a></h3>\n<p>Better Messages adds a real-time chat layer to FluentCommunity, with paired group chats for FluentCommunity Spaces and FC Courses. If you are using Fluent Messaging, deactivate it after installing Better Messages to avoid a double-messenger conflict.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"see-also\">See also<a href=\"https://www.better-messages.com/blog/wordpress-lms-chat-plugin/#see-also\" class=\"hash-link\" aria-label=\"Direct link to See also\" title=\"Direct link to See also\" translate=\"no\">​</a></h2>\n<ul>\n<li class=\"\"><a class=\"\" href=\"https://www.better-messages.com/blog/learndash-student-messaging/\">LearnDash student messaging plugin</a></li>\n<li class=\"\"><a class=\"\" href=\"https://www.better-messages.com/blog/learnpress-student-messaging/\">LearnPress student messaging plugin</a></li>\n<li class=\"\"><a class=\"\" href=\"https://www.better-messages.com/blog/tutor-lms-student-messaging/\">Tutor LMS student messaging plugin</a></li>\n<li class=\"\"><a class=\"\" href=\"https://www.better-messages.com/blog/masterstudy-lms-student-messaging/\">MasterStudy LMS student messaging plugin</a></li>\n<li class=\"\"><a class=\"\" href=\"https://www.better-messages.com/blog/fluentcommunity-chat-plugin/\">FluentCommunity chat plugin</a> — includes the FluentCommunity Courses LMS integration</li>\n<li class=\"\"><a class=\"\" href=\"https://www.better-messages.com/docs/features/group-conversations/\">Group conversations</a> — how the group chat feature works</li>\n<li class=\"\"><a class=\"\" href=\"https://www.better-messages.com/docs/features/mini-widgets/\">Mini widgets</a> — including the Courses widget</li>\n<li class=\"\"><a class=\"\" href=\"https://www.better-messages.com/docs/features/realtime-messaging/\">Real-time messaging</a> — what changes with the WebSocket version</li>\n</ul>\n<p><a href=\"https://wordpress.org/plugins/bp-better-messages/\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\"><strong>Install Better Messages from WordPress.org →</strong></a></p>",
            "url": "https://www.better-messages.com/blog/wordpress-lms-chat-plugin/",
            "title": "WordPress LMS Chat: Student & Instructor Messaging Compared",
            "summary": "Adding real-time chat to LearnDash, LearnPress, Tutor LMS, MasterStudy LMS, and FluentCommunity Courses — one plugin covers all five, with course group chats, instructor DMs, and cohort office hours.",
            "date_modified": "2026-05-13T00:00:00.000Z",
            "author": {
                "name": "Andrij Tkachenko",
                "url": "/docs/getting-started/about"
            },
            "tags": [
                "LearnDash",
                "LMS",
                "Guides"
            ]
        },
        {
            "id": "https://www.better-messages.com/blog/learndash-student-messaging/",
            "content_html": "<p>LearnDash is the most-installed LMS plugin on WordPress. Students who have a question for an instructor often open a support ticket on a separate system, drop a note in a forum that may or may not be monitored, or — most often — abandon the question. Better Messages adds a real-time messenger that hooks into LearnDash at every level: a <strong>Message Instructor</strong> button on every course page, an auto-managed <strong>Course Group Chat</strong> that mirrors course enrollment, a <strong>LearnDash Group</strong> cohort chat, and a <strong>Send Message</strong> button on the LearnDash Instructor Role public profile.</p>\n<p>This guide walks through what Better Messages adds to a LearnDash site, how the auto-managed chats stay in sync with enrollment changes, and what the differences are between the free and WebSocket versions.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"what-better-messages-adds-to-learndash\">What Better Messages adds to LearnDash<a href=\"https://www.better-messages.com/blog/learndash-student-messaging/#what-better-messages-adds-to-learndash\" class=\"hash-link\" aria-label=\"Direct link to What Better Messages adds to LearnDash\" title=\"Direct link to What Better Messages adds to LearnDash\" translate=\"no\">​</a></h2>\n<p>Once LearnDash is detected and the integration is enabled in <strong>Better Messages → Settings → Integrations → LMS</strong>, three independent features come online:</p>\n<ol>\n<li class=\"\"><strong>Message Instructor button</strong> on every course page — students open a private DM with the course author in one click.</li>\n<li class=\"\"><strong>Course Group Chat</strong> — a group conversation auto-created per course, with the course author and every enrolled student auto-joined.</li>\n<li class=\"\"><strong>LearnDash Group Chat</strong> — a group conversation for each LearnDash Group (a cohort of students sharing access to one or more courses), with Group Leaders auto-joined as instructors.</li>\n</ol>\n<p>A fourth toggle adds a <strong>Send Message</strong> button to the public profile generated by the paid <strong>LearnDash Instructor Role</strong> add-on.</p>\n<p><img decoding=\"async\" loading=\"lazy\" alt=\"LearnDash integration settings in Better Messages\" src=\"https://www.better-messages.com/assets/images/settings-lms-1016e59260e907123be1a90f61d6370e.png\" width=\"2800\" height=\"1888\" class=\"img_ev3q\"></p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"message-instructor-button-on-course-pages\">Message Instructor button on course pages<a href=\"https://www.better-messages.com/blog/learndash-student-messaging/#message-instructor-button-on-course-pages\" class=\"hash-link\" aria-label=\"Direct link to Message Instructor button on course pages\" title=\"Direct link to Message Instructor button on course pages\" translate=\"no\">​</a></h2>\n<p>Adds a <strong>Message Instructor</strong> button to every LearnDash course page. The button targets the user listed as the course author, and is hidden on the instructor's own course.</p>\n<p><img decoding=\"async\" loading=\"lazy\" alt=\"Message Instructor button on a LearnDash course page\" src=\"https://www.better-messages.com/assets/images/course-page-button-5fbb266e759d7e6b4134bbd0b19e132a.png\" width=\"2800\" height=\"1888\" class=\"img_ev3q\"></p>\n<p>Clicking it opens a private one-to-one conversation with the instructor — no group, no other students.</p>\n<p>If your site uses a custom layout, page builder, or block theme that breaks the auto-injected button, place it manually with a shortcode:</p>\n<div class=\"language-text codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#393A34;--prism-background-color:#f6f8fa\"><div class=\"codeBlockContent_QJqH\"><pre tabindex=\"0\" class=\"prism-code language-text codeBlock_bY9V thin-scrollbar\" style=\"color:#393A34;background-color:#f6f8fa\"><code class=\"codeBlockLines_e6Vv\"><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">[better_messages_learndash_course_button]</span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">[better_messages_learndash_course_button course_id=\"123\"]</span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">[better_messages_learndash_course_button text=\"Ask the instructor\"]</span><br></span></code></pre></div></div>\n<p>The shortcode auto-detects the current course on a course page, and supports per-instance overrides for course, recipient, label, and CSS classes.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"course-group-chat--auto-managed-enrollment\">Course Group Chat — auto-managed enrollment<a href=\"https://www.better-messages.com/blog/learndash-student-messaging/#course-group-chat--auto-managed-enrollment\" class=\"hash-link\" aria-label=\"Direct link to Course Group Chat — auto-managed enrollment\" title=\"Direct link to Course Group Chat — auto-managed enrollment\" translate=\"no\">​</a></h2>\n<p>When <strong>Course Group Chat</strong> is enabled, opening a course in the messenger creates a group conversation that the course author and every enrolled student can join. Students are added on enrollment and removed when their access is revoked.</p>\n<p><img decoding=\"async\" loading=\"lazy\" alt=\"LearnDash Course Group Chat with the course info card header\" src=\"https://www.better-messages.com/assets/images/course-group-chat-7ab30fd961c29e6ac45fbc09300700ff.png\" width=\"2800\" height=\"1888\" class=\"img_ev3q\"></p>\n<p>The conversation header shows the course thumbnail, title, and instructor name — so students always know which course the discussion belongs to. The card is rendered automatically above the conversation, including on private DMs opened through the <strong>Message Instructor</strong> button.</p>\n<p>The enrollment sync is driven by LearnDash's <code>learndash_update_course_access</code> hook, which Better Messages listens to for both adds and removes — including the ones LearnDash performs automatically when a student is enrolled into a course via a LearnDash Group.</p>\n<p>To hide the course info card across all LMS conversations, toggle off <strong>Better Messages → Settings → Integrations → LMS → Shared Course Settings → Course Info Card</strong>.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"learndash-group-chat--cohort-messaging\">LearnDash Group Chat — cohort messaging<a href=\"https://www.better-messages.com/blog/learndash-student-messaging/#learndash-group-chat--cohort-messaging\" class=\"hash-link\" aria-label=\"Direct link to LearnDash Group Chat — cohort messaging\" title=\"Direct link to LearnDash Group Chat — cohort messaging\" translate=\"no\">​</a></h2>\n<p>LearnDash Groups are cohorts of students sharing access to one or more courses, managed by users with the <strong>Group Leader</strong> role. Better Messages mirrors that organization by creating a dedicated chat for each LearnDash Group.</p>\n<p><img decoding=\"async\" loading=\"lazy\" alt=\"LearnDash Group cohort chat with the group info card header\" src=\"https://www.better-messages.com/assets/images/learndash-group-chat-415a105a0323c771e2a39849ea04ac13.png\" width=\"2800\" height=\"1888\" class=\"img_ev3q\"></p>\n<p>Group members are kept in sync via LearnDash's <code>ld_added_group_access</code> and <code>ld_removed_group_access</code> hooks, and every Group Leader assigned to the cohort is auto-joined as an instructor of the chat.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"send-message-button-on-the-instructor-role-profile\">Send Message button on the Instructor Role profile<a href=\"https://www.better-messages.com/blog/learndash-student-messaging/#send-message-button-on-the-instructor-role-profile\" class=\"hash-link\" aria-label=\"Direct link to Send Message button on the Instructor Role profile\" title=\"Direct link to Send Message button on the Instructor Role profile\" translate=\"no\">​</a></h2>\n<p>If you run the paid <strong>LearnDash Instructor Role</strong> add-on, every instructor gets a public profile at <code>/instructor/&lt;username&gt;/</code>. With <strong>Send Message Button on Instructor Profile</strong> enabled, Better Messages adds a <strong>Send Message</strong> button to that profile, right under the instructor's name.</p>\n<p><img decoding=\"async\" loading=\"lazy\" alt=\"Send Message button on a LearnDash Instructor Role profile\" src=\"https://www.better-messages.com/assets/images/instructor-role-profile-button-3ceae7b954cd48ea8c7f2d59a09362b0.png\" width=\"1600\" height=\"814\" class=\"img_ev3q\"></p>\n<p>Clicking it opens a private DM with that instructor — the same flow as the <strong>Message Instructor</strong> button on a course page, but available anywhere the instructor's profile is linked.</p>\n<div class=\"theme-admonition theme-admonition-info admonition_xJq3 alert alert--info\"><div class=\"admonitionHeading_Gvgb\"><span class=\"admonitionIcon_Rf37\"><svg viewBox=\"0 0 14 16\"><path fill-rule=\"evenodd\" d=\"M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z\"></path></svg></span>info</div><div class=\"admonitionContent_BuS1\"><p>The <strong>LearnDash Instructor Role</strong> add-on is a separate paid LearnDash extension and is not bundled with Better Messages. The toggle is hidden on sites without it.</p></div></div>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"courses-widget-for-students\">Courses widget for students<a href=\"https://www.better-messages.com/blog/learndash-student-messaging/#courses-widget-for-students\" class=\"hash-link\" aria-label=\"Direct link to Courses widget for students\" title=\"Direct link to Courses widget for students\" translate=\"no\">​</a></h2>\n<p>Once Course Group Chat or LearnDash Group Chat is enabled, the user's enrolled courses and LearnDash Group cohorts surface in the dedicated <strong>Courses widget</strong> on the messenger's Mini Widgets bar, Side Panel, and Mobile bar — separate from the social Groups widget so academic chats and friend cohorts do not mix.</p>\n<p><img decoding=\"async\" loading=\"lazy\" alt=\"Courses widget showing LearnDash courses and group cohorts\" src=\"https://www.better-messages.com/assets/images/courses-widget-9753ef12210f53a81f66ba4dafe3186b.png\" width=\"2800\" height=\"1888\" class=\"img_ev3q\"></p>\n<p>The widget icon, role restrictions, and \"Hide Tab When Empty\" behavior are configurable under <strong>Better Messages → Settings → Mini Widgets → Courses</strong>.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"shared-course-settings-apply-to-all-lms-integrations\">Shared course settings (apply to all LMS integrations)<a href=\"https://www.better-messages.com/blog/learndash-student-messaging/#shared-course-settings-apply-to-all-lms-integrations\" class=\"hash-link\" aria-label=\"Direct link to Shared course settings (apply to all LMS integrations)\" title=\"Direct link to Shared course settings (apply to all LMS integrations)\" translate=\"no\">​</a></h2>\n<p>Three toggles under <strong>Settings → Integrations → LMS → Shared Course Settings</strong> apply to every LMS course conversation across LearnDash, LearnPress, Tutor LMS, MasterStudy LMS, and FluentCommunity Courses:</p>\n<ul>\n<li class=\"\"><strong>Course Info Card</strong> <em>(on by default)</em> — show the title, image, and instructor name banner above each course conversation, including private DMs opened by <strong>Message Instructor</strong>.</li>\n<li class=\"\"><strong>Email Notifications</strong> <em>(on by default)</em> — send the standard new-message email to participants when activity happens in a course chat.</li>\n<li class=\"\"><strong>Push Notifications</strong> <em>(off by default, requires WebSocket version)</em> — send browser and mobile push notifications for new course messages.</li>\n</ul>\n<p>Changing any of these toggles propagates across all four LMS integrations.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"installing-better-messages-on-learndash\">Installing Better Messages on LearnDash<a href=\"https://www.better-messages.com/blog/learndash-student-messaging/#installing-better-messages-on-learndash\" class=\"hash-link\" aria-label=\"Direct link to Installing Better Messages on LearnDash\" title=\"Direct link to Installing Better Messages on LearnDash\" translate=\"no\">​</a></h2>\n<ol>\n<li class=\"\">Install <strong><a href=\"https://wordpress.org/plugins/bp-better-messages/\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\">Better Messages from WordPress.org</a></strong> and activate it.</li>\n<li class=\"\">Open <strong>WP Admin → Better Messages → Settings → Integrations → LMS → LearnDash Integration</strong>.</li>\n<li class=\"\">Toggle on the features you want: <strong>Message Instructor Button</strong>, <strong>Course Group Chat</strong>, <strong>LearnDash Group Chat</strong>, and (if applicable) <strong>Send Message Button on Instructor Profile</strong>.</li>\n</ol>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"free-vs-websocket-version-for-learndash-sites\">Free vs WebSocket version for LearnDash sites<a href=\"https://www.better-messages.com/blog/learndash-student-messaging/#free-vs-websocket-version-for-learndash-sites\" class=\"hash-link\" aria-label=\"Direct link to Free vs WebSocket version for LearnDash sites\" title=\"Direct link to Free vs WebSocket version for LearnDash sites\" translate=\"no\">​</a></h2>\n<table><thead><tr><th>Feature</th><th style=\"text-align:center\">Free version</th><th style=\"text-align:center\">WebSocket version</th></tr></thead><tbody><tr><td>Message Instructor button on course pages</td><td style=\"text-align:center\">yes</td><td style=\"text-align:center\">yes</td></tr><tr><td>Auto-managed Course Group Chat</td><td style=\"text-align:center\">yes</td><td style=\"text-align:center\">yes</td></tr><tr><td>LearnDash Group Chat with auto-joined Group Leaders</td><td style=\"text-align:center\">yes</td><td style=\"text-align:center\">yes</td></tr><tr><td>Instructor Role profile Send Message button</td><td style=\"text-align:center\">yes</td><td style=\"text-align:center\">yes</td></tr><tr><td>Courses widget on the Mini Widgets bar</td><td style=\"text-align:center\">yes</td><td style=\"text-align:center\">yes</td></tr><tr><td>Real-time delivery</td><td style=\"text-align:center\">polling</td><td style=\"text-align:center\">instant</td></tr><tr><td>Push notifications for course messages (integration-level real-time push)</td><td style=\"text-align:center\">—</td><td style=\"text-align:center\">yes</td></tr><tr><td>One-on-one voice and video calls inside course threads</td><td style=\"text-align:center\">—</td><td style=\"text-align:center\">yes</td></tr><tr><td>Group voice and video calls inside course threads (cohort office hours, study sessions)</td><td style=\"text-align:center\">—</td><td style=\"text-align:center\">yes</td></tr><tr><td>Web push notifications for new messages</td><td style=\"text-align:center\">—</td><td style=\"text-align:center\">yes</td></tr><tr><td>Read receipts</td><td style=\"text-align:center\">—</td><td style=\"text-align:center\">yes</td></tr><tr><td>End-to-end encryption (optional per thread)</td><td style=\"text-align:center\">—</td><td style=\"text-align:center\">yes</td></tr></tbody></table>\n<div class=\"theme-admonition theme-admonition-info admonition_xJq3 alert alert--info\"><div class=\"admonitionHeading_Gvgb\"><span class=\"admonitionIcon_Rf37\"><svg viewBox=\"0 0 14 16\"><path fill-rule=\"evenodd\" d=\"M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z\"></path></svg></span>info</div><div class=\"admonitionContent_BuS1\"><p>The WebSocket version turns course threads into something close to a course Discord — instant message delivery, push notifications when an instructor posts an update, and one-click voice / video calls for office hours, all inside the course's own conversation thread.</p></div></div>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"frequently-asked-questions\">Frequently asked questions<a href=\"https://www.better-messages.com/blog/learndash-student-messaging/#frequently-asked-questions\" class=\"hash-link\" aria-label=\"Direct link to Frequently asked questions\" title=\"Direct link to Frequently asked questions\" translate=\"no\">​</a></h2>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"will-students-from-different-courses-end-up-in-the-same-thread\">Will students from different courses end up in the same thread?<a href=\"https://www.better-messages.com/blog/learndash-student-messaging/#will-students-from-different-courses-end-up-in-the-same-thread\" class=\"hash-link\" aria-label=\"Direct link to Will students from different courses end up in the same thread?\" title=\"Direct link to Will students from different courses end up in the same thread?\" translate=\"no\">​</a></h3>\n<p>No — each course has its own Course Group Chat. Students enrolled in multiple courses see multiple separate threads, one per course.</p>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"what-happens-when-a-students-access-is-revoked\">What happens when a student's access is revoked?<a href=\"https://www.better-messages.com/blog/learndash-student-messaging/#what-happens-when-a-students-access-is-revoked\" class=\"hash-link\" aria-label=\"Direct link to What happens when a student's access is revoked?\" title=\"Direct link to What happens when a student's access is revoked?\" translate=\"no\">​</a></h3>\n<p>LearnDash fires <code>learndash_update_course_access</code> on revoke, which Better Messages listens to. The student is removed from the Course Group Chat immediately. Their previous messages remain in the thread history.</p>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"does-it-work-with-learndash-group-leaders-and-assistant-instructors\">Does it work with LearnDash group leaders and assistant instructors?<a href=\"https://www.better-messages.com/blog/learndash-student-messaging/#does-it-work-with-learndash-group-leaders-and-assistant-instructors\" class=\"hash-link\" aria-label=\"Direct link to Does it work with LearnDash group leaders and assistant instructors?\" title=\"Direct link to Does it work with LearnDash group leaders and assistant instructors?\" translate=\"no\">​</a></h3>\n<p>Yes — Group Leaders are auto-joined as instructors of the LearnDash Group Chat. Assistant instructors on a course can be added to the Course Group Chat manually or through a custom filter.</p>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"can-students-message-each-other-from-the-course\">Can students message each other from the course?<a href=\"https://www.better-messages.com/blog/learndash-student-messaging/#can-students-message-each-other-from-the-course\" class=\"hash-link\" aria-label=\"Direct link to Can students message each other from the course?\" title=\"Direct link to Can students message each other from the course?\" translate=\"no\">​</a></h3>\n<p>The Course Group Chat is shared — students can post to each other inside it. For private student-to-student DMs, that depends on whether your site allows the messenger globally; with WordPress role-based access on, you can restrict who can start one-to-one threads.</p>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"does-it-work-alongside-learndash-forums\">Does it work alongside LearnDash Forums?<a href=\"https://www.better-messages.com/blog/learndash-student-messaging/#does-it-work-alongside-learndash-forums\" class=\"hash-link\" aria-label=\"Direct link to Does it work alongside LearnDash Forums?\" title=\"Direct link to Does it work alongside LearnDash Forums?\" translate=\"no\">​</a></h3>\n<p>Yes — the two surfaces address different intents. Forums are asynchronous and threaded; Better Messages course chats are real-time and one-room-per-course. Many LearnDash sites use both — forums for long-form questions, chats for real-time discussion.</p>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"will-it-work-with-the-other-lms-plugins-on-the-same-site\">Will it work with the other LMS plugins on the same site?<a href=\"https://www.better-messages.com/blog/learndash-student-messaging/#will-it-work-with-the-other-lms-plugins-on-the-same-site\" class=\"hash-link\" aria-label=\"Direct link to Will it work with the other LMS plugins on the same site?\" title=\"Direct link to Will it work with the other LMS plugins on the same site?\" translate=\"no\">​</a></h3>\n<p>Yes — Better Messages has matching integrations for LearnPress, Tutor LMS, MasterStudy LMS, and FluentCommunity Courses, and they share the Course Info Card / email / push settings. A site running LearnDash plus another LMS will see Course Group Chats from both, surfaced together in the Courses widget.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"see-also\">See also<a href=\"https://www.better-messages.com/blog/learndash-student-messaging/#see-also\" class=\"hash-link\" aria-label=\"Direct link to See also\" title=\"Direct link to See also\" translate=\"no\">​</a></h2>\n<ul>\n<li class=\"\"><a class=\"\" href=\"https://www.better-messages.com/docs/integrations/learndash/\">LearnDash integration documentation</a> — full setup reference with every option</li>\n<li class=\"\"><a class=\"\" href=\"https://www.better-messages.com/docs/features/group-conversations/\">Group conversations</a> — how group chats work in general</li>\n<li class=\"\"><a class=\"\" href=\"https://www.better-messages.com/docs/features/mini-widgets/\">Mini widgets</a> — including the Courses widget</li>\n<li class=\"\"><a class=\"\" href=\"https://www.better-messages.com/docs/features/realtime-messaging/\">Real-time messaging</a> — what changes with the WebSocket version</li>\n</ul>\n<p><a href=\"https://wordpress.org/plugins/bp-better-messages/\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\"><strong>Install Better Messages from WordPress.org →</strong></a></p>",
            "url": "https://www.better-messages.com/blog/learndash-student-messaging/",
            "title": "LearnDash Student & Instructor Messaging Plugin",
            "summary": "Add private messaging to LearnDash — Message Instructor button on every course, auto-managed Course Group Chat that mirrors enrollment, LearnDash Group cohort chats, Instructor Role profile button.",
            "date_modified": "2026-05-12T00:00:00.000Z",
            "author": {
                "name": "Andrij Tkachenko",
                "url": "/docs/getting-started/about"
            },
            "tags": [
                "LearnDash",
                "LMS",
                "Guides"
            ]
        },
        {
            "id": "https://www.better-messages.com/blog/geodirectory-listing-chat/",
            "content_html": "<p>GeoDirectory is the location-aware directory plugin for WordPress — restaurants, gyms, professionals, real estate, anywhere people search \"near me.\" Each listing has an owner; the visitor's natural next step after finding a listing is to ask a question. Better Messages adds a real-time Send Message button to every GeoDirectory listing page, with the listing's image / title / address / price showing as a context card inside the conversation.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"what-better-messages-adds-to-geodirectory\">What Better Messages adds to GeoDirectory<a href=\"https://www.better-messages.com/blog/geodirectory-listing-chat/#what-better-messages-adds-to-geodirectory\" class=\"hash-link\" aria-label=\"Direct link to What Better Messages adds to GeoDirectory\" title=\"Direct link to What Better Messages adds to GeoDirectory\" translate=\"no\">​</a></h2>\n<p>Once Better Messages is installed and the GeoDirectory integration is enabled under <strong>Better Messages → Settings → Integrations → Directories</strong>:</p>\n<ul>\n<li class=\"\"><strong>Send Message button on the listing page</strong> next to GeoDirectory's author actions.</li>\n<li class=\"\"><strong>Listing info card inside the thread</strong> — image, title, address, price.</li>\n<li class=\"\"><strong>GeoDirectory author profile links</strong> — clicking the author's name in a conversation opens their GeoDirectory profile, not the default WordPress one.</li>\n</ul>\n<p><img decoding=\"async\" loading=\"lazy\" alt=\"Send Message button on a GeoDirectory listing page\" src=\"https://www.better-messages.com/assets/images/listing-page-0a905e82e82bfdad26f793ba53c31fa3.png\" width=\"3368\" height=\"5628\" class=\"img_ev3q\"></p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"listing-info-card-inside-the-conversation\">Listing info card inside the conversation<a href=\"https://www.better-messages.com/blog/geodirectory-listing-chat/#listing-info-card-inside-the-conversation\" class=\"hash-link\" aria-label=\"Direct link to Listing info card inside the conversation\" title=\"Direct link to Listing info card inside the conversation\" translate=\"no\">​</a></h2>\n<p><img decoding=\"async\" loading=\"lazy\" alt=\"Conversation with the GeoDirectory listing info card showing image, title, address\" src=\"https://www.better-messages.com/assets/images/thread-info-6001770125fd024c2206f73ba0dc3fec.png\" width=\"3368\" height=\"3298\" class=\"img_ev3q\"></p>\n<p>The listing owner sees exactly which listing the visitor is asking about — no \"which listing was this?\" question. The card is rendered automatically above the conversation.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"installing-better-messages-on-a-geodirectory-site\">Installing Better Messages on a GeoDirectory site<a href=\"https://www.better-messages.com/blog/geodirectory-listing-chat/#installing-better-messages-on-a-geodirectory-site\" class=\"hash-link\" aria-label=\"Direct link to Installing Better Messages on a GeoDirectory site\" title=\"Direct link to Installing Better Messages on a GeoDirectory site\" translate=\"no\">​</a></h2>\n<ol>\n<li class=\"\">Install <strong><a href=\"https://wordpress.org/plugins/bp-better-messages/\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\">Better Messages from WordPress.org</a></strong> and activate it.</li>\n<li class=\"\">Make sure GeoDirectory is active.</li>\n<li class=\"\">Open <strong>WP Admin → Better Messages → Settings → Integrations → Directories → GeoDirectory Integration</strong>.</li>\n<li class=\"\">Toggle <strong>Enable GeoDirectory Integration</strong>.</li>\n</ol>\n<p><img decoding=\"async\" loading=\"lazy\" alt=\"GeoDirectory integration settings\" src=\"https://www.better-messages.com/assets/images/settings-b97c876406133939b10f8d7dd1016fe4.png\" width=\"3368\" height=\"3128\" class=\"img_ev3q\"></p>\n<p>For custom layouts or theme overrides, place the button manually:</p>\n<div class=\"language-text codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#393A34;--prism-background-color:#f6f8fa\"><div class=\"codeBlockContent_QJqH\"><pre tabindex=\"0\" class=\"prism-code language-text codeBlock_bY9V thin-scrollbar\" style=\"color:#393A34;background-color:#f6f8fa\"><code class=\"codeBlockLines_e6Vv\"><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">[better_messages_geodirectory_listing_button]</span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">[better_messages_geodirectory_listing_button listing_id=\"123\"]</span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">[better_messages_geodirectory_listing_button text=\"Contact owner\"]</span><br></span></code></pre></div></div>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"free-vs-websocket-version-for-geodirectory-sites\">Free vs WebSocket version for GeoDirectory sites<a href=\"https://www.better-messages.com/blog/geodirectory-listing-chat/#free-vs-websocket-version-for-geodirectory-sites\" class=\"hash-link\" aria-label=\"Direct link to Free vs WebSocket version for GeoDirectory sites\" title=\"Direct link to Free vs WebSocket version for GeoDirectory sites\" translate=\"no\">​</a></h2>\n<table><thead><tr><th>Feature</th><th style=\"text-align:center\">Free version</th><th style=\"text-align:center\">WebSocket version</th></tr></thead><tbody><tr><td>Send Message button on listing pages</td><td style=\"text-align:center\">yes</td><td style=\"text-align:center\">yes</td></tr><tr><td>Listing info card inside the conversation</td><td style=\"text-align:center\">yes</td><td style=\"text-align:center\">yes</td></tr><tr><td>GeoDirectory author profile links</td><td style=\"text-align:center\">yes</td><td style=\"text-align:center\">yes</td></tr><tr><td>Real-time delivery</td><td style=\"text-align:center\">polling</td><td style=\"text-align:center\">instant</td></tr><tr><td>Mini-widget popup chat</td><td style=\"text-align:center\">—</td><td style=\"text-align:center\">yes</td></tr><tr><td>One-on-one voice and video calls inside the thread</td><td style=\"text-align:center\">—</td><td style=\"text-align:center\">yes</td></tr><tr><td>Group voice and video calls (e.g. listing owner + assistants)</td><td style=\"text-align:center\">—</td><td style=\"text-align:center\">yes</td></tr><tr><td>Web push notifications for new messages</td><td style=\"text-align:center\">—</td><td style=\"text-align:center\">yes</td></tr><tr><td>Read receipts</td><td style=\"text-align:center\">—</td><td style=\"text-align:center\">yes</td></tr><tr><td>End-to-end encryption (optional)</td><td style=\"text-align:center\">—</td><td style=\"text-align:center\">yes</td></tr></tbody></table>\n<div class=\"theme-admonition theme-admonition-info admonition_xJq3 alert alert--info\"><div class=\"admonitionHeading_Gvgb\"><span class=\"admonitionIcon_Rf37\"><svg viewBox=\"0 0 14 16\"><path fill-rule=\"evenodd\" d=\"M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z\"></path></svg></span>info</div><div class=\"admonitionContent_BuS1\"><p>For GeoDirectory sites running paid listings, the WebSocket version's web push notifications close the response-time gap that paid-listing customers complain about — owners see and reply within minutes even when their dashboard tab is closed.</p></div></div>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"frequently-asked-questions\">Frequently asked questions<a href=\"https://www.better-messages.com/blog/geodirectory-listing-chat/#frequently-asked-questions\" class=\"hash-link\" aria-label=\"Direct link to Frequently asked questions\" title=\"Direct link to Frequently asked questions\" translate=\"no\">​</a></h2>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"does-it-work-with-geodirectorys-paid-add-ons\">Does it work with GeoDirectory's paid add-ons?<a href=\"https://www.better-messages.com/blog/geodirectory-listing-chat/#does-it-work-with-geodirectorys-paid-add-ons\" class=\"hash-link\" aria-label=\"Direct link to Does it work with GeoDirectory's paid add-ons?\" title=\"Direct link to Does it work with GeoDirectory's paid add-ons?\" translate=\"no\">​</a></h3>\n<p>Yes — the integration uses GeoDirectory's core listing hooks, which paid add-ons extend rather than replace.</p>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"can-visitors-message-without-an-account\">Can visitors message without an account?<a href=\"https://www.better-messages.com/blog/geodirectory-listing-chat/#can-visitors-message-without-an-account\" class=\"hash-link\" aria-label=\"Direct link to Can visitors message without an account?\" title=\"Direct link to Can visitors message without an account?\" translate=\"no\">​</a></h3>\n<p>Optional. With <strong>Guest Chat</strong> enabled in <strong>Better Messages → Settings → Guest Chat</strong>, unregistered visitors can start a thread from a listing.</p>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"what-happens-when-a-listing-is-unpublished\">What happens when a listing is unpublished?<a href=\"https://www.better-messages.com/blog/geodirectory-listing-chat/#what-happens-when-a-listing-is-unpublished\" class=\"hash-link\" aria-label=\"Direct link to What happens when a listing is unpublished?\" title=\"Direct link to What happens when a listing is unpublished?\" translate=\"no\">​</a></h3>\n<p>The Send Message button is hidden when the listing is not published, and existing threads remain readable on both sides.</p>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"will-it-work-with-custom-geodirectory-theme-layouts\">Will it work with custom GeoDirectory theme layouts?<a href=\"https://www.better-messages.com/blog/geodirectory-listing-chat/#will-it-work-with-custom-geodirectory-theme-layouts\" class=\"hash-link\" aria-label=\"Direct link to Will it work with custom GeoDirectory theme layouts?\" title=\"Direct link to Will it work with custom GeoDirectory theme layouts?\" translate=\"no\">​</a></h3>\n<p>The button auto-renders on standard layouts. For custom themes, the shortcode <code>[better_messages_geodirectory_listing_button]</code> works inside any page builder.</p>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"does-the-listing-owner-get-notified-by-email\">Does the listing owner get notified by email?<a href=\"https://www.better-messages.com/blog/geodirectory-listing-chat/#does-the-listing-owner-get-notified-by-email\" class=\"hash-link\" aria-label=\"Direct link to Does the listing owner get notified by email?\" title=\"Direct link to Does the listing owner get notified by email?\" translate=\"no\">​</a></h3>\n<p>Yes — Better Messages' standard email-notification system applies. Owners can adjust their per-thread email preferences in their account settings.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"see-also\">See also<a href=\"https://www.better-messages.com/blog/geodirectory-listing-chat/#see-also\" class=\"hash-link\" aria-label=\"Direct link to See also\" title=\"Direct link to See also\" translate=\"no\">​</a></h2>\n<ul>\n<li class=\"\"><a class=\"\" href=\"https://www.better-messages.com/docs/integrations/geodirectory/\">GeoDirectory integration documentation</a> — full setup reference</li>\n<li class=\"\"><a class=\"\" href=\"https://www.better-messages.com/blog/directorist-listing-chat/\">Directorist chat</a> — for Directorist-driven sites</li>\n<li class=\"\"><a class=\"\" href=\"https://www.better-messages.com/blog/hivepress-listing-chat/\">HivePress listing chat</a> — for HivePress-driven sites</li>\n<li class=\"\"><a class=\"\" href=\"https://www.better-messages.com/blog/classified-listing-chat/\">Classified Listing chat</a> — for Classified Listing (RTCL) sites</li>\n<li class=\"\"><a class=\"\" href=\"https://www.better-messages.com/blog/motors-car-dealer-chat/\">Motors car dealer chat</a> — for automotive listing sites</li>\n</ul>\n<p><a href=\"https://wordpress.org/plugins/bp-better-messages/\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\"><strong>Install Better Messages from WordPress.org →</strong></a></p>",
            "url": "https://www.better-messages.com/blog/geodirectory-listing-chat/",
            "title": "GeoDirectory Chat: Real-Time Messaging for GeoDirectory Listings",
            "summary": "Add real-time chat between GeoDirectory listing owners and visitors — Send Message button on every listing page, with listing info card inside the conversation.",
            "date_modified": "2026-05-08T00:00:00.000Z",
            "author": {
                "name": "Andrij Tkachenko",
                "url": "/docs/getting-started/about"
            },
            "tags": [
                "GeoDirectory",
                "Guides"
            ]
        },
        {
            "id": "https://www.better-messages.com/blog/directorist-listing-chat/",
            "content_html": "<p>Directorist turns WordPress into a directory site — a YellowPages, a restaurant guide, a coworking-space finder, a marketplace of services. Each listing has an author; the obvious bridge between a visitor and that author is a one-click Send Message button. Better Messages adds a real-time chat layer that hooks into every Directorist surface: the listing page, archive cards, the author profile, and a Messages tab inside the Directorist user dashboard.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"what-better-messages-adds-to-directorist\">What Better Messages adds to Directorist<a href=\"https://www.better-messages.com/blog/directorist-listing-chat/#what-better-messages-adds-to-directorist\" class=\"hash-link\" aria-label=\"Direct link to What Better Messages adds to Directorist\" title=\"Direct link to What Better Messages adds to Directorist\" translate=\"no\">​</a></h2>\n<p>Once Better Messages is installed and the Directorist integration is enabled under <strong>Better Messages → Settings → Integrations → Directories</strong>:</p>\n<ul>\n<li class=\"\"><strong>Send Message button on the listing page</strong> inside the Author Info card.</li>\n<li class=\"\"><strong>Send Message button on archive listing cards</strong> in the grid and list views (opt-in).</li>\n<li class=\"\"><strong>Send Message button on the author profile page</strong>.</li>\n<li class=\"\"><strong>Messages tab inside the Directorist user dashboard</strong> next to My Listings, My Profile, Favorite Listings.</li>\n<li class=\"\"><strong>Listing info card</strong> — conversations started from a listing show the listing's image, title, price, and address inside the thread.</li>\n<li class=\"\"><strong>Author profile links</strong> — clicking the author's name in a conversation opens the Directorist author profile, not the WordPress one.</li>\n</ul>\n<p><img decoding=\"async\" loading=\"lazy\" alt=\"Send Message button inside the Directorist listing Author Info card\" src=\"https://www.better-messages.com/assets/images/listing-page-356b23a2a303a45a1c27d773d614e2fb.png\" width=\"2880\" height=\"1888\" class=\"img_ev3q\"></p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"messages-tab-inside-the-user-dashboard\">Messages tab inside the user dashboard<a href=\"https://www.better-messages.com/blog/directorist-listing-chat/#messages-tab-inside-the-user-dashboard\" class=\"hash-link\" aria-label=\"Direct link to Messages tab inside the user dashboard\" title=\"Direct link to Messages tab inside the user dashboard\" translate=\"no\">​</a></h2>\n<p><img decoding=\"async\" loading=\"lazy\" alt=\"Messages tab inside the Directorist user dashboard\" src=\"https://www.better-messages.com/assets/images/dashboard-tab-3e995e3b6415ba97a430bf61d788f269.png\" width=\"2880\" height=\"1888\" class=\"img_ev3q\"></p>\n<p>Visitors and listing owners read and reply to conversations without leaving the Directorist dashboard. Combined with <strong>Messages Location → Show in Directorist Dashboard</strong>, every internal Messages link routes to this tab.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"listing-info-card-inside-the-conversation\">Listing info card inside the conversation<a href=\"https://www.better-messages.com/blog/directorist-listing-chat/#listing-info-card-inside-the-conversation\" class=\"hash-link\" aria-label=\"Direct link to Listing info card inside the conversation\" title=\"Direct link to Listing info card inside the conversation\" translate=\"no\">​</a></h2>\n<p><img decoding=\"async\" loading=\"lazy\" alt=\"Conversation with the Directorist listing info card showing image, title, price\" src=\"https://www.better-messages.com/assets/images/thread-info-08a2615bddd1cf7dd82e9f3891196de6.png\" width=\"2880\" height=\"1888\" class=\"img_ev3q\"></p>\n<p>The card removes the \"what listing is this about\" question — the owner sees exactly which listing the visitor is asking about, with the image and price visible at the top of the thread.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"installing-better-messages-on-a-directorist-site\">Installing Better Messages on a Directorist site<a href=\"https://www.better-messages.com/blog/directorist-listing-chat/#installing-better-messages-on-a-directorist-site\" class=\"hash-link\" aria-label=\"Direct link to Installing Better Messages on a Directorist site\" title=\"Direct link to Installing Better Messages on a Directorist site\" translate=\"no\">​</a></h2>\n<ol>\n<li class=\"\">Install <strong><a href=\"https://wordpress.org/plugins/bp-better-messages/\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\">Better Messages from WordPress.org</a></strong> and activate it.</li>\n<li class=\"\">Make sure Directorist is active.</li>\n<li class=\"\">Open <strong>WP Admin → Better Messages → Settings → Integrations → Directories → Directorist Integration</strong>.</li>\n<li class=\"\">Toggle <strong>Enable Directorist Integration</strong> and the individual placement toggles you want.</li>\n</ol>\n<p><img decoding=\"async\" loading=\"lazy\" alt=\"Directorist integration settings\" src=\"https://www.better-messages.com/assets/images/settings-0b949b8c8edf953a8adbe43f6d4ba8a4.png\" width=\"2880\" height=\"1888\" class=\"img_ev3q\"></p>\n<p>For custom layouts, manual placement is supported via shortcodes:</p>\n<div class=\"language-text codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#393A34;--prism-background-color:#f6f8fa\"><div class=\"codeBlockContent_QJqH\"><pre tabindex=\"0\" class=\"prism-code language-text codeBlock_bY9V thin-scrollbar\" style=\"color:#393A34;background-color:#f6f8fa\"><code class=\"codeBlockLines_e6Vv\"><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">[better_messages_directorist_listing_button]</span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">[better_messages_directorist_author_button]</span><br></span></code></pre></div></div>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"free-vs-websocket-version-for-directorist-sites\">Free vs WebSocket version for Directorist sites<a href=\"https://www.better-messages.com/blog/directorist-listing-chat/#free-vs-websocket-version-for-directorist-sites\" class=\"hash-link\" aria-label=\"Direct link to Free vs WebSocket version for Directorist sites\" title=\"Direct link to Free vs WebSocket version for Directorist sites\" translate=\"no\">​</a></h2>\n<table><thead><tr><th>Feature</th><th style=\"text-align:center\">Free version</th><th style=\"text-align:center\">WebSocket version</th></tr></thead><tbody><tr><td>Send Message buttons on listing, archive cards, author profile</td><td style=\"text-align:center\">yes</td><td style=\"text-align:center\">yes</td></tr><tr><td>Messages tab inside the Directorist dashboard</td><td style=\"text-align:center\">yes</td><td style=\"text-align:center\">yes</td></tr><tr><td>Listing info card inside the conversation</td><td style=\"text-align:center\">yes</td><td style=\"text-align:center\">yes</td></tr><tr><td>Author profile links from Directorist</td><td style=\"text-align:center\">yes</td><td style=\"text-align:center\">yes</td></tr><tr><td>Real-time delivery</td><td style=\"text-align:center\">polling</td><td style=\"text-align:center\">instant</td></tr><tr><td>Mini-widget popup chat</td><td style=\"text-align:center\">—</td><td style=\"text-align:center\">yes</td></tr><tr><td>One-on-one voice and video calls inside the thread</td><td style=\"text-align:center\">—</td><td style=\"text-align:center\">yes</td></tr><tr><td>Group voice and video calls (e.g. multi-owner business team)</td><td style=\"text-align:center\">—</td><td style=\"text-align:center\">yes</td></tr><tr><td>Web push notifications for new messages</td><td style=\"text-align:center\">—</td><td style=\"text-align:center\">yes</td></tr><tr><td>Read receipts</td><td style=\"text-align:center\">—</td><td style=\"text-align:center\">yes</td></tr><tr><td>End-to-end encryption (optional)</td><td style=\"text-align:center\">—</td><td style=\"text-align:center\">yes</td></tr></tbody></table>\n<div class=\"theme-admonition theme-admonition-info admonition_xJq3 alert alert--info\"><div class=\"admonitionHeading_Gvgb\"><span class=\"admonitionIcon_Rf37\"><svg viewBox=\"0 0 14 16\"><path fill-rule=\"evenodd\" d=\"M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z\"></path></svg></span>info</div><div class=\"admonitionContent_BuS1\"><p>For Directorist sites monetizing paid listings, the WebSocket version's web push notifications mean listing owners see and reply to inquiries within minutes, not hours — the engagement signal that paid-listing customers expect.</p></div></div>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"frequently-asked-questions\">Frequently asked questions<a href=\"https://www.better-messages.com/blog/directorist-listing-chat/#frequently-asked-questions\" class=\"hash-link\" aria-label=\"Direct link to Frequently asked questions\" title=\"Direct link to Frequently asked questions\" translate=\"no\">​</a></h2>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"does-it-work-with-directorist-pro-extensions\">Does it work with Directorist Pro extensions?<a href=\"https://www.better-messages.com/blog/directorist-listing-chat/#does-it-work-with-directorist-pro-extensions\" class=\"hash-link\" aria-label=\"Direct link to Does it work with Directorist Pro extensions?\" title=\"Direct link to Does it work with Directorist Pro extensions?\" translate=\"no\">​</a></h3>\n<p>Yes — the integration listens to Directorist's core listing and author hooks, which Pro extensions extend rather than replace. Booking, claim-listing, and review extensions all coexist.</p>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"can-visitors-message-without-registering\">Can visitors message without registering?<a href=\"https://www.better-messages.com/blog/directorist-listing-chat/#can-visitors-message-without-registering\" class=\"hash-link\" aria-label=\"Direct link to Can visitors message without registering?\" title=\"Direct link to Can visitors message without registering?\" translate=\"no\">​</a></h3>\n<p>Optional. With <strong>Guest Chat</strong> enabled, unregistered visitors can start a thread from a listing by typing a name and email. The thread is preserved if they later register.</p>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"can-i-have-a-send-message-button-on-archive-cards-but-not-the-listing-page\">Can I have a Send Message button on archive cards but not the listing page?<a href=\"https://www.better-messages.com/blog/directorist-listing-chat/#can-i-have-a-send-message-button-on-archive-cards-but-not-the-listing-page\" class=\"hash-link\" aria-label=\"Direct link to Can I have a Send Message button on archive cards but not the listing page?\" title=\"Direct link to Can I have a Send Message button on archive cards but not the listing page?\" translate=\"no\">​</a></h3>\n<p>Yes — each placement has its own toggle in the integration settings. Enable archive cards, disable the listing page button (or vice versa).</p>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"does-it-support-multi-directory-sites\">Does it support multi-directory sites?<a href=\"https://www.better-messages.com/blog/directorist-listing-chat/#does-it-support-multi-directory-sites\" class=\"hash-link\" aria-label=\"Direct link to Does it support multi-directory sites?\" title=\"Direct link to Does it support multi-directory sites?\" translate=\"no\">​</a></h3>\n<p>Yes — Better Messages does not care which Directorist directory a listing belongs to. The button appears for every listing regardless of directory.</p>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"will-it-work-with-custom-directorist-templates\">Will it work with custom Directorist templates?<a href=\"https://www.better-messages.com/blog/directorist-listing-chat/#will-it-work-with-custom-directorist-templates\" class=\"hash-link\" aria-label=\"Direct link to Will it work with custom Directorist templates?\" title=\"Direct link to Will it work with custom Directorist templates?\" translate=\"no\">​</a></h3>\n<p>Most Directorist themes use the standard template hooks; the integration auto-renders the buttons. For heavily customized themes, place the buttons manually via shortcode (each placement has a matching shortcode).</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"see-also\">See also<a href=\"https://www.better-messages.com/blog/directorist-listing-chat/#see-also\" class=\"hash-link\" aria-label=\"Direct link to See also\" title=\"Direct link to See also\" translate=\"no\">​</a></h2>\n<ul>\n<li class=\"\"><a class=\"\" href=\"https://www.better-messages.com/docs/integrations/directorist/\">Directorist integration documentation</a> — full setup reference</li>\n<li class=\"\"><a class=\"\" href=\"https://www.better-messages.com/blog/geodirectory-listing-chat/\">GeoDirectory chat</a> — for GeoDirectory-driven sites</li>\n<li class=\"\"><a class=\"\" href=\"https://www.better-messages.com/blog/hivepress-listing-chat/\">HivePress listing chat</a> — for HivePress-driven sites</li>\n<li class=\"\"><a class=\"\" href=\"https://www.better-messages.com/blog/classified-listing-chat/\">Classified Listing chat</a> — for Classified Listing (RTCL) sites</li>\n</ul>\n<p><a href=\"https://wordpress.org/plugins/bp-better-messages/\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\"><strong>Install Better Messages from WordPress.org →</strong></a></p>",
            "url": "https://www.better-messages.com/blog/directorist-listing-chat/",
            "title": "Directorist Chat: Real-Time Messaging for Directory Listings",
            "summary": "Add real-time chat between Directorist listing owners and visitors — Send Message button on the listing, archive cards, author profile, plus a Messages tab inside the Directorist user dashboard.",
            "date_modified": "2026-05-07T00:00:00.000Z",
            "author": {
                "name": "Andrij Tkachenko",
                "url": "/docs/getting-started/about"
            },
            "tags": [
                "Directorist",
                "Guides"
            ]
        },
        {
            "id": "https://www.better-messages.com/blog/masterstudy-lms-student-messaging/",
            "content_html": "<p>Better Messages adds a modern real-time messenger to MasterStudy LMS sites. The integration takes over the MasterStudy account Messages tab, adds a Message Instructor button on every course, auto-manages Course Group Chats, and adds Send Message buttons on both the public instructor and student profiles. MasterStudy's built-in chat can be hidden with one toggle so members see only Better Messages.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"what-better-messages-adds-to-masterstudy-lms\">What Better Messages adds to MasterStudy LMS<a href=\"https://www.better-messages.com/blog/masterstudy-lms-student-messaging/#what-better-messages-adds-to-masterstudy-lms\" class=\"hash-link\" aria-label=\"Direct link to What Better Messages adds to MasterStudy LMS\" title=\"Direct link to What Better Messages adds to MasterStudy LMS\" translate=\"no\">​</a></h2>\n<p>Once MasterStudy LMS is detected and the integration is enabled under <strong>Better Messages → Settings → Integrations → LMS</strong>:</p>\n<ul>\n<li class=\"\"><strong>Message Instructor button</strong> on every MasterStudy course page next to the enrol/buy button.</li>\n<li class=\"\"><strong>Send Message button</strong> on the MasterStudy public instructor profile and the public student profile.</li>\n<li class=\"\"><strong>Course Group Chat</strong> — auto-created per course, with the instructor and every enrolled student auto-joined.</li>\n<li class=\"\"><strong>Messages tab</strong> inside the MasterStudy LMS account sidebar (<code>/account/messages/</code>) embedding the full Better Messages inbox.</li>\n<li class=\"\"><strong>Disable MasterStudy Messages</strong> toggle — hide the native MasterStudy Messages tab and the native <strong>Send message</strong> buttons.</li>\n<li class=\"\"><strong>Use the MasterStudy account as the primary messages location</strong> — every internal Messages link routes here.</li>\n</ul>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"message-instructor-button-on-course-pages\">Message Instructor button on course pages<a href=\"https://www.better-messages.com/blog/masterstudy-lms-student-messaging/#message-instructor-button-on-course-pages\" class=\"hash-link\" aria-label=\"Direct link to Message Instructor button on course pages\" title=\"Direct link to Message Instructor button on course pages\" translate=\"no\">​</a></h2>\n<p><img decoding=\"async\" loading=\"lazy\" alt=\"Message Instructor button on a MasterStudy LMS course page\" src=\"https://www.better-messages.com/assets/images/course-page-button-8d57484a22c9d896792894a81187c5a1.png\" width=\"2800\" height=\"1800\" class=\"img_ev3q\"></p>\n<p>Sits next to MasterStudy's enrol/buy button so the student can ask before they enrol. Hidden for the instructor on their own course. For custom layouts, use the shortcode:</p>\n<div class=\"language-text codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#393A34;--prism-background-color:#f6f8fa\"><div class=\"codeBlockContent_QJqH\"><pre tabindex=\"0\" class=\"prism-code language-text codeBlock_bY9V thin-scrollbar\" style=\"color:#393A34;background-color:#f6f8fa\"><code class=\"codeBlockLines_e6Vv\"><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">[better_messages_masterstudy_course_button]</span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">[better_messages_masterstudy_course_button course_id=\"123\"]</span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">[better_messages_masterstudy_course_button text=\"Ask the instructor\"]</span><br></span></code></pre></div></div>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"course-group-chat--auto-managed-enrollment\">Course Group Chat — auto-managed enrollment<a href=\"https://www.better-messages.com/blog/masterstudy-lms-student-messaging/#course-group-chat--auto-managed-enrollment\" class=\"hash-link\" aria-label=\"Direct link to Course Group Chat — auto-managed enrollment\" title=\"Direct link to Course Group Chat — auto-managed enrollment\" translate=\"no\">​</a></h2>\n<p><img decoding=\"async\" loading=\"lazy\" alt=\"MasterStudy Course Group Chat with the course info card header\" src=\"https://www.better-messages.com/assets/images/group-thread-4eae11f0f5efc92a8178b105378be6e7.png\" width=\"2800\" height=\"1800\" class=\"img_ev3q\"></p>\n<p>When <strong>Course Group Chat</strong> is enabled, opening a course creates a group conversation. Students are added on enrollment, removed when their enrollment is deleted. The course info card (thumbnail, title, instructor) appears above the conversation and on private DMs opened from the <strong>Message Instructor</strong> button.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"messages-tab-in-the-masterstudy-account\">Messages tab in the MasterStudy account<a href=\"https://www.better-messages.com/blog/masterstudy-lms-student-messaging/#messages-tab-in-the-masterstudy-account\" class=\"hash-link\" aria-label=\"Direct link to Messages tab in the MasterStudy account\" title=\"Direct link to Messages tab in the MasterStudy account\" translate=\"no\">​</a></h2>\n<p><img decoding=\"async\" loading=\"lazy\" alt=\"Better Messages tab inside the MasterStudy LMS account\" src=\"https://www.better-messages.com/assets/images/account-messages-tab-2a4ea4f161ddac448d094714a0f88a26.png\" width=\"2800\" height=\"1800\" class=\"img_ev3q\"></p>\n<p>Embeds the full Better Messages inbox inside the MasterStudy account sidebar. Combined with <strong>Messages Location → Show in MasterStudy LMS Account</strong>, every internal Messages link routes here.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"replacing-the-native-masterstudy-messages\">Replacing the native MasterStudy Messages<a href=\"https://www.better-messages.com/blog/masterstudy-lms-student-messaging/#replacing-the-native-masterstudy-messages\" class=\"hash-link\" aria-label=\"Direct link to Replacing the native MasterStudy Messages\" title=\"Direct link to Replacing the native MasterStudy Messages\" translate=\"no\">​</a></h2>\n<p>With <strong>Disable MasterStudy Messages</strong> toggled on, MasterStudy's built-in <strong>Messages</strong> entry in the account sidebar and the <strong>Send message</strong> buttons on the public instructor and student profiles are hidden so visitors only see Better Messages. The native page is still reachable at <code>/account/chat/</code> for anyone who has it bookmarked, but nothing in the UI links to it.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"shared-lms-settings\">Shared LMS settings<a href=\"https://www.better-messages.com/blog/masterstudy-lms-student-messaging/#shared-lms-settings\" class=\"hash-link\" aria-label=\"Direct link to Shared LMS settings\" title=\"Direct link to Shared LMS settings\" translate=\"no\">​</a></h2>\n<p>Three toggles under <strong>Better Messages → Settings → Integrations → LMS → Shared Course Settings</strong> apply across every LMS integration: <strong>Course Info Card</strong>, <strong>Email Notifications</strong>, and <strong>Push Notifications</strong> (WebSocket version). Changing any propagates across LearnDash, LearnPress, Tutor LMS, MasterStudy LMS, and FluentCommunity Courses.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"installing-better-messages-on-a-masterstudy-lms-site\">Installing Better Messages on a MasterStudy LMS site<a href=\"https://www.better-messages.com/blog/masterstudy-lms-student-messaging/#installing-better-messages-on-a-masterstudy-lms-site\" class=\"hash-link\" aria-label=\"Direct link to Installing Better Messages on a MasterStudy LMS site\" title=\"Direct link to Installing Better Messages on a MasterStudy LMS site\" translate=\"no\">​</a></h2>\n<ol>\n<li class=\"\">Install <strong><a href=\"https://wordpress.org/plugins/bp-better-messages/\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\">Better Messages from WordPress.org</a></strong> and activate it.</li>\n<li class=\"\">Open <strong>WP Admin → Better Messages → Settings → Integrations → LMS → MasterStudy LMS Integration</strong>.</li>\n<li class=\"\">Toggle on the features you want: <strong>Message Instructor Button</strong>, <strong>Course Group Chat</strong>, <strong>Messages Account Tab</strong>, <strong>Send Message Button on Instructor Profile</strong>, <strong>Send Message Button on Student Profile</strong>, <strong>Disable MasterStudy Messages</strong>.</li>\n</ol>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"free-vs-websocket-version-for-masterstudy-lms-sites\">Free vs WebSocket version for MasterStudy LMS sites<a href=\"https://www.better-messages.com/blog/masterstudy-lms-student-messaging/#free-vs-websocket-version-for-masterstudy-lms-sites\" class=\"hash-link\" aria-label=\"Direct link to Free vs WebSocket version for MasterStudy LMS sites\" title=\"Direct link to Free vs WebSocket version for MasterStudy LMS sites\" translate=\"no\">​</a></h2>\n<table><thead><tr><th>Feature</th><th style=\"text-align:center\">Free version</th><th style=\"text-align:center\">WebSocket version</th></tr></thead><tbody><tr><td>Message Instructor button on course page</td><td style=\"text-align:center\">yes</td><td style=\"text-align:center\">yes</td></tr><tr><td>Auto-managed Course Group Chat</td><td style=\"text-align:center\">yes</td><td style=\"text-align:center\">yes</td></tr><tr><td>Messages Account Tab inside MasterStudy</td><td style=\"text-align:center\">yes</td><td style=\"text-align:center\">yes</td></tr><tr><td>Send Message buttons on instructor / student profiles</td><td style=\"text-align:center\">yes</td><td style=\"text-align:center\">yes</td></tr><tr><td>Disable native MasterStudy Messages</td><td style=\"text-align:center\">yes</td><td style=\"text-align:center\">yes</td></tr><tr><td>Courses widget on the Mini Widgets bar</td><td style=\"text-align:center\">yes</td><td style=\"text-align:center\">yes</td></tr><tr><td>Real-time delivery</td><td style=\"text-align:center\">polling</td><td style=\"text-align:center\">instant</td></tr><tr><td>One-on-one voice and video calls inside course threads</td><td style=\"text-align:center\">—</td><td style=\"text-align:center\">yes</td></tr><tr><td>Group voice and video calls (cohort office hours, study sessions)</td><td style=\"text-align:center\">—</td><td style=\"text-align:center\">yes</td></tr><tr><td>Web push notifications for new messages</td><td style=\"text-align:center\">—</td><td style=\"text-align:center\">yes</td></tr><tr><td>Push notifications for course messages</td><td style=\"text-align:center\">—</td><td style=\"text-align:center\">yes</td></tr><tr><td>Read receipts</td><td style=\"text-align:center\">—</td><td style=\"text-align:center\">yes</td></tr><tr><td>End-to-end encryption (optional per thread)</td><td style=\"text-align:center\">—</td><td style=\"text-align:center\">yes</td></tr></tbody></table>\n<div class=\"theme-admonition theme-admonition-info admonition_xJq3 alert alert--info\"><div class=\"admonitionHeading_Gvgb\"><span class=\"admonitionIcon_Rf37\"><svg viewBox=\"0 0 14 16\"><path fill-rule=\"evenodd\" d=\"M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z\"></path></svg></span>info</div><div class=\"admonitionContent_BuS1\"><p>For MasterStudy LMS academies running paid cohorts, the WebSocket version's group calls turn the course chat into a live office-hours room — students drop in for a question, the instructor jumps on a group video call, then drops back to async chat. The MasterStudy account becomes a full learning hub instead of a course library plus a separate Zoom link.</p></div></div>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"frequently-asked-questions\">Frequently asked questions<a href=\"https://www.better-messages.com/blog/masterstudy-lms-student-messaging/#frequently-asked-questions\" class=\"hash-link\" aria-label=\"Direct link to Frequently asked questions\" title=\"Direct link to Frequently asked questions\" translate=\"no\">​</a></h2>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"can-i-keep-masterstudy-messages-and-better-messages-side-by-side\">Can I keep MasterStudy Messages and Better Messages side by side?<a href=\"https://www.better-messages.com/blog/masterstudy-lms-student-messaging/#can-i-keep-masterstudy-messages-and-better-messages-side-by-side\" class=\"hash-link\" aria-label=\"Direct link to Can I keep MasterStudy Messages and Better Messages side by side?\" title=\"Direct link to Can I keep MasterStudy Messages and Better Messages side by side?\" translate=\"no\">​</a></h3>\n<p>Yes — the <strong>Disable MasterStudy Messages</strong> toggle is optional. Keep it off to show both, on to show only Better Messages. Most sites pick one to avoid confusing students with two Messages tabs.</p>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"what-happens-when-a-students-masterstudy-enrollment-is-cancelled\">What happens when a student's MasterStudy enrollment is cancelled?<a href=\"https://www.better-messages.com/blog/masterstudy-lms-student-messaging/#what-happens-when-a-students-masterstudy-enrollment-is-cancelled\" class=\"hash-link\" aria-label=\"Direct link to What happens when a student's MasterStudy enrollment is cancelled?\" title=\"Direct link to What happens when a student's MasterStudy enrollment is cancelled?\" translate=\"no\">​</a></h3>\n<p>MasterStudy fires its standard enrollment hooks; Better Messages listens and removes the student from the Course Group Chat. Their previous messages stay in history.</p>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"does-it-work-with-masterstudy-pro\">Does it work with MasterStudy Pro?<a href=\"https://www.better-messages.com/blog/masterstudy-lms-student-messaging/#does-it-work-with-masterstudy-pro\" class=\"hash-link\" aria-label=\"Direct link to Does it work with MasterStudy Pro?\" title=\"Direct link to Does it work with MasterStudy Pro?\" translate=\"no\">​</a></h3>\n<p>Yes — Better Messages reads MasterStudy's core hooks, which Pro features extend rather than replace. WooCommerce-based enrollments, subscriptions, and certificates are all compatible.</p>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"can-the-native-masterstudy-chat-history-be-migrated\">Can the native MasterStudy chat history be migrated?<a href=\"https://www.better-messages.com/blog/masterstudy-lms-student-messaging/#can-the-native-masterstudy-chat-history-be-migrated\" class=\"hash-link\" aria-label=\"Direct link to Can the native MasterStudy chat history be migrated?\" title=\"Direct link to Can the native MasterStudy chat history be migrated?\" translate=\"no\">​</a></h3>\n<p>Not automatically — the two messengers store data differently. For sites with active history in the native chat, run both side by side for a transition period, then enable <strong>Disable MasterStudy Messages</strong> when students have moved over.</p>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"does-it-work-alongside-other-lms-plugins\">Does it work alongside other LMS plugins?<a href=\"https://www.better-messages.com/blog/masterstudy-lms-student-messaging/#does-it-work-alongside-other-lms-plugins\" class=\"hash-link\" aria-label=\"Direct link to Does it work alongside other LMS plugins?\" title=\"Direct link to Does it work alongside other LMS plugins?\" translate=\"no\">​</a></h3>\n<p>Yes — sites running MasterStudy alongside LearnDash, LearnPress, or Tutor LMS see all course chats together in the Courses widget. Each integration loads independently.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"see-also\">See also<a href=\"https://www.better-messages.com/blog/masterstudy-lms-student-messaging/#see-also\" class=\"hash-link\" aria-label=\"Direct link to See also\" title=\"Direct link to See also\" translate=\"no\">​</a></h2>\n<ul>\n<li class=\"\"><a class=\"\" href=\"https://www.better-messages.com/docs/integrations/masterstudy-lms/\">MasterStudy LMS integration documentation</a> — full setup reference</li>\n<li class=\"\"><a class=\"\" href=\"https://www.better-messages.com/blog/wordpress-lms-chat-plugin/\">WordPress LMS chat plugin</a> — comparing every LMS integration</li>\n<li class=\"\"><a class=\"\" href=\"https://www.better-messages.com/blog/learndash-student-messaging/\">LearnDash student messaging plugin</a></li>\n<li class=\"\"><a class=\"\" href=\"https://www.better-messages.com/blog/learnpress-student-messaging/\">LearnPress student messaging plugin</a></li>\n<li class=\"\"><a class=\"\" href=\"https://www.better-messages.com/blog/tutor-lms-student-messaging/\">Tutor LMS student messaging plugin</a></li>\n</ul>\n<p><a href=\"https://wordpress.org/plugins/bp-better-messages/\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\"><strong>Install Better Messages from WordPress.org →</strong></a></p>",
            "url": "https://www.better-messages.com/blog/masterstudy-lms-student-messaging/",
            "title": "MasterStudy LMS Student & Instructor Messaging Plugin",
            "summary": "Add real-time chat to MasterStudy LMS — Message Instructor button on courses, embedded Messages tab in the MasterStudy account, course group chats. Optionally replace the native MasterStudy chat.",
            "date_modified": "2026-05-06T00:00:00.000Z",
            "author": {
                "name": "Andrij Tkachenko",
                "url": "/docs/getting-started/about"
            },
            "tags": [
                "MasterStudy LMS",
                "LMS",
                "Guides"
            ]
        },
        {
            "id": "https://www.better-messages.com/blog/learnpress-student-messaging/",
            "content_html": "<p>LearnPress is one of the most-installed free LMS plugins on WordPress, with a course/lesson/quiz model used by tens of thousands of online schools. Students with a question for the instructor need a fast on-site way to reach them — email is slow, forums get unmonitored. Better Messages adds a real-time chat layer to LearnPress with a Message Instructor button on every course, an auto-managed Course Group Chat, a Send Message button on the LearnPress instructor profile, and a <strong>Messages</strong> tab inside the LearnPress profile.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"what-better-messages-adds-to-learnpress\">What Better Messages adds to LearnPress<a href=\"https://www.better-messages.com/blog/learnpress-student-messaging/#what-better-messages-adds-to-learnpress\" class=\"hash-link\" aria-label=\"Direct link to What Better Messages adds to LearnPress\" title=\"Direct link to What Better Messages adds to LearnPress\" translate=\"no\">​</a></h2>\n<p>When LearnPress is detected and the integration is enabled under <strong>Better Messages → Settings → Integrations → LMS</strong>:</p>\n<ul>\n<li class=\"\"><strong>Message Instructor button</strong> on every LearnPress course page.</li>\n<li class=\"\"><strong>Send Message button</strong> on the LearnPress instructor archive (<code>/instructor/&lt;slug&gt;/</code>).</li>\n<li class=\"\"><strong>Course Group Chat</strong> — auto-created per course, with the instructor and every enrolled student auto-joined.</li>\n<li class=\"\"><strong>Messages tab</strong> inside the LearnPress profile (<code>/lp-profile/&lt;slug&gt;/messages/</code>) so students read and reply to conversations without leaving their profile.</li>\n<li class=\"\"><strong>Use the LearnPress profile as the primary messages location</strong> — every internal Messages link can be routed to the LearnPress profile Messages tab.</li>\n</ul>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"message-instructor-button-on-course-pages\">Message Instructor button on course pages<a href=\"https://www.better-messages.com/blog/learnpress-student-messaging/#message-instructor-button-on-course-pages\" class=\"hash-link\" aria-label=\"Direct link to Message Instructor button on course pages\" title=\"Direct link to Message Instructor button on course pages\" translate=\"no\">​</a></h2>\n<p><img decoding=\"async\" loading=\"lazy\" alt=\"Message Instructor button on a LearnPress course page\" src=\"https://www.better-messages.com/assets/images/course-page-button-ae07fa6cef5d83f5a566d221664986c9.png\" width=\"2800\" height=\"1800\" class=\"img_ev3q\"></p>\n<p>Styled to match LearnPress's native course buttons. Hidden for the instructor on their own course. For custom layouts, use the shortcode:</p>\n<div class=\"language-text codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#393A34;--prism-background-color:#f6f8fa\"><div class=\"codeBlockContent_QJqH\"><pre tabindex=\"0\" class=\"prism-code language-text codeBlock_bY9V thin-scrollbar\" style=\"color:#393A34;background-color:#f6f8fa\"><code class=\"codeBlockLines_e6Vv\"><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">[better_messages_learnpress_course_button]</span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">[better_messages_learnpress_course_button course_id=\"123\"]</span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">[better_messages_learnpress_course_button text=\"Ask the instructor\"]</span><br></span></code></pre></div></div>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"course-group-chat--auto-managed-enrollment\">Course Group Chat — auto-managed enrollment<a href=\"https://www.better-messages.com/blog/learnpress-student-messaging/#course-group-chat--auto-managed-enrollment\" class=\"hash-link\" aria-label=\"Direct link to Course Group Chat — auto-managed enrollment\" title=\"Direct link to Course Group Chat — auto-managed enrollment\" translate=\"no\">​</a></h2>\n<p>When <strong>Course Group Chat</strong> is enabled, opening a course creates a group conversation. Students are added on enrollment and removed when their enrollment ends.</p>\n<p><img decoding=\"async\" loading=\"lazy\" alt=\"LearnPress Course Group Chat with the course info card header\" src=\"https://www.better-messages.com/assets/images/group-thread-6d4edd01e997612b0993f3d711ec8128.png\" width=\"2800\" height=\"1800\" class=\"img_ev3q\"></p>\n<p>The conversation header shows the course thumbnail, title, and instructor name — students always know which course they are in. The card also appears on private DMs opened through the <strong>Message Instructor</strong> button so the recipient knows which course the student is asking about.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"messages-tab-in-the-learnpress-profile\">Messages tab in the LearnPress profile<a href=\"https://www.better-messages.com/blog/learnpress-student-messaging/#messages-tab-in-the-learnpress-profile\" class=\"hash-link\" aria-label=\"Direct link to Messages tab in the LearnPress profile\" title=\"Direct link to Messages tab in the LearnPress profile\" translate=\"no\">​</a></h2>\n<p><img decoding=\"async\" loading=\"lazy\" alt=\"Messages tab inside the LearnPress profile\" src=\"https://www.better-messages.com/assets/images/profile-messages-tab-3b8736e26e579985631765b58e8ec102.png\" width=\"2800\" height=\"1888\" class=\"img_ev3q\"></p>\n<p>Adds a <strong>Messages</strong> tab to the LearnPress user profile that embeds the full Better Messages inbox. Combined with <strong>Messages Location → Show in LearnPress Profile</strong>, every internal Messages link routes here.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"shared-lms-settings\">Shared LMS settings<a href=\"https://www.better-messages.com/blog/learnpress-student-messaging/#shared-lms-settings\" class=\"hash-link\" aria-label=\"Direct link to Shared LMS settings\" title=\"Direct link to Shared LMS settings\" translate=\"no\">​</a></h2>\n<p>Three toggles under <strong>Better Messages → Settings → Integrations → LMS → Shared Course Settings</strong> apply across all LMS integrations:</p>\n<ul>\n<li class=\"\"><strong>Course Info Card</strong> <em>(on by default)</em> — banner above each course conversation.</li>\n<li class=\"\"><strong>Email Notifications</strong> <em>(on by default)</em> — standard new-message email.</li>\n<li class=\"\"><strong>Push Notifications</strong> <em>(off by default, WebSocket version)</em> — integration-level real-time push.</li>\n</ul>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"installing-better-messages-on-a-learnpress-site\">Installing Better Messages on a LearnPress site<a href=\"https://www.better-messages.com/blog/learnpress-student-messaging/#installing-better-messages-on-a-learnpress-site\" class=\"hash-link\" aria-label=\"Direct link to Installing Better Messages on a LearnPress site\" title=\"Direct link to Installing Better Messages on a LearnPress site\" translate=\"no\">​</a></h2>\n<ol>\n<li class=\"\">Install <strong><a href=\"https://wordpress.org/plugins/bp-better-messages/\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\">Better Messages from WordPress.org</a></strong> and activate it.</li>\n<li class=\"\">Open <strong>WP Admin → Better Messages → Settings → Integrations → LMS</strong> and enable the LearnPress toggles you want.</li>\n</ol>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"free-vs-websocket-version-for-learnpress-sites\">Free vs WebSocket version for LearnPress sites<a href=\"https://www.better-messages.com/blog/learnpress-student-messaging/#free-vs-websocket-version-for-learnpress-sites\" class=\"hash-link\" aria-label=\"Direct link to Free vs WebSocket version for LearnPress sites\" title=\"Direct link to Free vs WebSocket version for LearnPress sites\" translate=\"no\">​</a></h2>\n<table><thead><tr><th>Feature</th><th style=\"text-align:center\">Free version</th><th style=\"text-align:center\">WebSocket version</th></tr></thead><tbody><tr><td>Message Instructor button on course page</td><td style=\"text-align:center\">yes</td><td style=\"text-align:center\">yes</td></tr><tr><td>Auto-managed Course Group Chat</td><td style=\"text-align:center\">yes</td><td style=\"text-align:center\">yes</td></tr><tr><td>Messages Profile Tab inside LearnPress</td><td style=\"text-align:center\">yes</td><td style=\"text-align:center\">yes</td></tr><tr><td>Courses widget on the Mini Widgets bar</td><td style=\"text-align:center\">yes</td><td style=\"text-align:center\">yes</td></tr><tr><td>Real-time delivery</td><td style=\"text-align:center\">polling</td><td style=\"text-align:center\">instant</td></tr><tr><td>One-on-one voice and video calls inside course threads</td><td style=\"text-align:center\">—</td><td style=\"text-align:center\">yes</td></tr><tr><td>Group voice and video calls (cohort office hours, study sessions)</td><td style=\"text-align:center\">—</td><td style=\"text-align:center\">yes</td></tr><tr><td>Web push notifications for new messages</td><td style=\"text-align:center\">—</td><td style=\"text-align:center\">yes</td></tr><tr><td>Push notifications for course messages</td><td style=\"text-align:center\">—</td><td style=\"text-align:center\">yes</td></tr><tr><td>Read receipts</td><td style=\"text-align:center\">—</td><td style=\"text-align:center\">yes</td></tr><tr><td>End-to-end encryption (optional per thread)</td><td style=\"text-align:center\">—</td><td style=\"text-align:center\">yes</td></tr></tbody></table>\n<div class=\"theme-admonition theme-admonition-info admonition_xJq3 alert alert--info\"><div class=\"admonitionHeading_Gvgb\"><span class=\"admonitionIcon_Rf37\"><svg viewBox=\"0 0 14 16\"><path fill-rule=\"evenodd\" d=\"M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z\"></path></svg></span>info</div><div class=\"admonitionContent_BuS1\"><p>For LearnPress sites running paid courses, the WebSocket version's group calls and web push are the difference between students who check the course once a week and a cohort that engages daily — instant delivery for questions, group office hours inside the thread, push notifications that pull students in.</p></div></div>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"frequently-asked-questions\">Frequently asked questions<a href=\"https://www.better-messages.com/blog/learnpress-student-messaging/#frequently-asked-questions\" class=\"hash-link\" aria-label=\"Direct link to Frequently asked questions\" title=\"Direct link to Frequently asked questions\" translate=\"no\">​</a></h2>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"does-it-work-with-learnpresss-woocommerce-based-payments\">Does it work with LearnPress's WooCommerce-based payments?<a href=\"https://www.better-messages.com/blog/learnpress-student-messaging/#does-it-work-with-learnpresss-woocommerce-based-payments\" class=\"hash-link\" aria-label=\"Direct link to Does it work with LearnPress's WooCommerce-based payments?\" title=\"Direct link to Does it work with LearnPress's WooCommerce-based payments?\" translate=\"no\">​</a></h3>\n<p>Yes — Better Messages reads LearnPress's enrollment state, which is set by the same hooks regardless of payment method.</p>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"what-happens-when-a-students-course-access-expires\">What happens when a student's course access expires?<a href=\"https://www.better-messages.com/blog/learnpress-student-messaging/#what-happens-when-a-students-course-access-expires\" class=\"hash-link\" aria-label=\"Direct link to What happens when a student's course access expires?\" title=\"Direct link to What happens when a student's course access expires?\" translate=\"no\">​</a></h3>\n<p>LearnPress fires its standard enrollment-end hooks; Better Messages removes the student from the Course Group Chat. Their previous messages stay in history.</p>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"can-i-have-a-course-chat-that-includes-multiple-instructors\">Can I have a course chat that includes multiple instructors?<a href=\"https://www.better-messages.com/blog/learnpress-student-messaging/#can-i-have-a-course-chat-that-includes-multiple-instructors\" class=\"hash-link\" aria-label=\"Direct link to Can I have a course chat that includes multiple instructors?\" title=\"Direct link to Can I have a course chat that includes multiple instructors?\" translate=\"no\">​</a></h3>\n<p>The course author is auto-joined as the primary instructor. Additional instructors can be added manually to the chat, or via a custom filter for sites with multi-instructor course models.</p>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"does-it-work-alongside-other-lms-plugins\">Does it work alongside other LMS plugins?<a href=\"https://www.better-messages.com/blog/learnpress-student-messaging/#does-it-work-alongside-other-lms-plugins\" class=\"hash-link\" aria-label=\"Direct link to Does it work alongside other LMS plugins?\" title=\"Direct link to Does it work alongside other LMS plugins?\" translate=\"no\">​</a></h3>\n<p>Yes — sites running LearnPress alongside another LMS (LearnDash, Tutor LMS, MasterStudy LMS) see all course chats together in the Courses widget. Each integration loads independently.</p>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"will-students-lose-their-messages-if-i-migrate-to-a-different-lms\">Will students lose their messages if I migrate to a different LMS?<a href=\"https://www.better-messages.com/blog/learnpress-student-messaging/#will-students-lose-their-messages-if-i-migrate-to-a-different-lms\" class=\"hash-link\" aria-label=\"Direct link to Will students lose their messages if I migrate to a different LMS?\" title=\"Direct link to Will students lose their messages if I migrate to a different LMS?\" translate=\"no\">​</a></h3>\n<p>No — Better Messages stores threads in its own tables, independent of any LMS. Migrating LMS plugins keeps the chat history; only the LMS-specific surfaces (course page button, profile tab) re-bind.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"see-also\">See also<a href=\"https://www.better-messages.com/blog/learnpress-student-messaging/#see-also\" class=\"hash-link\" aria-label=\"Direct link to See also\" title=\"Direct link to See also\" translate=\"no\">​</a></h2>\n<ul>\n<li class=\"\"><a class=\"\" href=\"https://www.better-messages.com/docs/integrations/learnpress/\">LearnPress integration documentation</a> — full setup reference</li>\n<li class=\"\"><a class=\"\" href=\"https://www.better-messages.com/blog/wordpress-lms-chat-plugin/\">WordPress LMS chat plugin</a> — comparing every LMS integration</li>\n<li class=\"\"><a class=\"\" href=\"https://www.better-messages.com/blog/learndash-student-messaging/\">LearnDash student messaging plugin</a></li>\n<li class=\"\"><a class=\"\" href=\"https://www.better-messages.com/blog/tutor-lms-student-messaging/\">Tutor LMS student messaging plugin</a></li>\n<li class=\"\"><a class=\"\" href=\"https://www.better-messages.com/docs/features/group-conversations/\">Group conversations</a> — how group chats work in general</li>\n</ul>\n<p><a href=\"https://wordpress.org/plugins/bp-better-messages/\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\"><strong>Install Better Messages from WordPress.org →</strong></a></p>",
            "url": "https://www.better-messages.com/blog/learnpress-student-messaging/",
            "title": "LearnPress Student & Instructor Messaging Plugin",
            "summary": "Add real-time chat to LearnPress — Message Instructor button on courses, Messages tab inside the LearnPress profile, auto-managed course group chats that mirror enrollment.",
            "date_modified": "2026-05-05T00:00:00.000Z",
            "author": {
                "name": "Andrij Tkachenko",
                "url": "/docs/getting-started/about"
            },
            "tags": [
                "LearnPress",
                "LMS",
                "Guides"
            ]
        },
        {
            "id": "https://www.better-messages.com/blog/tutor-lms-student-messaging/",
            "content_html": "<p>Better Messages adds a real-time chat layer to Tutor LMS sites — students and instructors message each other directly from the course page, the dashboard, or the public profile. The integration hooks into every Tutor LMS surface: a <strong>Message Instructor</strong> button on every course page, a <strong>Messages</strong> tab inside the Tutor LMS dashboard, auto-managed <strong>Course Group Chat</strong>, and <strong>Send Message</strong> buttons on both the public instructor and student profiles.</p>\n<p>This guide covers what Better Messages adds to a Tutor LMS site, how the auto-managed course chats stay in sync with enrollment, and what the difference is between the free and WebSocket versions.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"what-better-messages-adds-to-tutor-lms\">What Better Messages adds to Tutor LMS<a href=\"https://www.better-messages.com/blog/tutor-lms-student-messaging/#what-better-messages-adds-to-tutor-lms\" class=\"hash-link\" aria-label=\"Direct link to What Better Messages adds to Tutor LMS\" title=\"Direct link to What Better Messages adds to Tutor LMS\" translate=\"no\">​</a></h2>\n<p>Once Tutor LMS is detected and the integration is enabled under <strong>Better Messages → Settings → Integrations → LMS</strong>, the following become available:</p>\n<ul>\n<li class=\"\"><strong>Message Instructor button</strong> on every Tutor LMS course page — students DM the instructor with one click.</li>\n<li class=\"\"><strong>Send Message button</strong> on the public instructor profile (<code>/profile/&lt;username&gt;/?view=instructor</code>).</li>\n<li class=\"\"><strong>Send Message button</strong> on the public student profile — peer-to-peer student messaging.</li>\n<li class=\"\"><strong>Course Group Chat</strong> — a group conversation auto-created per course, with the instructor (and any co-instructors) plus every enrolled student auto-joined.</li>\n<li class=\"\"><strong>Messages tab</strong> inside the Tutor LMS dashboard (<code>/dashboard/messages/</code>) for both students and instructors.</li>\n<li class=\"\"><strong>Use the Tutor LMS dashboard as the primary messages location</strong> — every internal Messages link can be routed to the Tutor LMS dashboard tab.</li>\n</ul>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"message-instructor-button-on-course-pages\">Message Instructor button on course pages<a href=\"https://www.better-messages.com/blog/tutor-lms-student-messaging/#message-instructor-button-on-course-pages\" class=\"hash-link\" aria-label=\"Direct link to Message Instructor button on course pages\" title=\"Direct link to Message Instructor button on course pages\" translate=\"no\">​</a></h2>\n<p>Adds a <strong>Message Instructor</strong> button to every Tutor LMS course page, styled to match the native Tutor LMS course buttons. The button is hidden for the instructor on their own course.</p>\n<p><img decoding=\"async\" loading=\"lazy\" alt=\"Message Instructor button on a Tutor LMS course page\" src=\"https://www.better-messages.com/assets/images/course-page-button-a5810ef99d7a27e05dcd836b890c6c43.png\" width=\"2800\" height=\"1800\" class=\"img_ev3q\"></p>\n<p>For sites with a custom course template that breaks the auto-injection, the same button can be placed manually:</p>\n<div class=\"language-text codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#393A34;--prism-background-color:#f6f8fa\"><div class=\"codeBlockContent_QJqH\"><pre tabindex=\"0\" class=\"prism-code language-text codeBlock_bY9V thin-scrollbar\" style=\"color:#393A34;background-color:#f6f8fa\"><code class=\"codeBlockLines_e6Vv\"><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">[better_messages_tutorlms_course_button]</span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">[better_messages_tutorlms_course_button course_id=\"123\"]</span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">[better_messages_tutorlms_course_button text=\"Ask the instructor\"]</span><br></span></code></pre></div></div>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"course-group-chat--auto-managed-enrollment\">Course Group Chat — auto-managed enrollment<a href=\"https://www.better-messages.com/blog/tutor-lms-student-messaging/#course-group-chat--auto-managed-enrollment\" class=\"hash-link\" aria-label=\"Direct link to Course Group Chat — auto-managed enrollment\" title=\"Direct link to Course Group Chat — auto-managed enrollment\" translate=\"no\">​</a></h2>\n<p>When <strong>Course Group Chat</strong> is enabled, opening a course in the messenger creates a group conversation that the instructor and every enrolled student can join. Students are added on enrollment and removed when their enrollment ends or is cancelled.</p>\n<p><img decoding=\"async\" loading=\"lazy\" alt=\"Tutor LMS Course Group Chat with the course info card header\" src=\"https://www.better-messages.com/assets/images/group-thread-911572d57777141fcc89a819ee451ac3.png\" width=\"2800\" height=\"1800\" class=\"img_ev3q\"></p>\n<p>The conversation header shows the course thumbnail, title, and instructor name. The card is rendered automatically above every course conversation, including private DMs opened through the <strong>Message Instructor</strong> button. Co-instructors are auto-joined as instructors of the chat.</p>\n<p>To hide the course info card across all LMS conversations, toggle off <strong>Better Messages → Settings → Integrations → LMS → Shared Course Settings → Course Info Card</strong>.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"messages-tab-inside-the-tutor-lms-dashboard\">Messages tab inside the Tutor LMS dashboard<a href=\"https://www.better-messages.com/blog/tutor-lms-student-messaging/#messages-tab-inside-the-tutor-lms-dashboard\" class=\"hash-link\" aria-label=\"Direct link to Messages tab inside the Tutor LMS dashboard\" title=\"Direct link to Messages tab inside the Tutor LMS dashboard\" translate=\"no\">​</a></h2>\n<p>Adds a <strong>Messages</strong> tab to the Tutor LMS dashboard for both students and instructors. The tab embeds the full Better Messages inbox so users can read and reply to conversations without leaving the dashboard.</p>\n<p><img decoding=\"async\" loading=\"lazy\" alt=\"Messages tab inside the Tutor LMS dashboard\" src=\"https://www.better-messages.com/assets/images/dashboard-messages-tab-412e50a875d0d8adaccb0d6603cc8e40.png\" width=\"2800\" height=\"1800\" class=\"img_ev3q\"></p>\n<p>If you want every internal Messages link (notification emails, the <strong>All messages</strong> link in mini-chats, etc.) to route to the dashboard tab, set <strong>Better Messages → Settings → General → Messages Location</strong> to <strong>Show in Tutor LMS Dashboard</strong>. The Messages Dashboard Tab toggle is then locked on automatically — without it the redirect would have no destination.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"shared-lms-settings\">Shared LMS settings<a href=\"https://www.better-messages.com/blog/tutor-lms-student-messaging/#shared-lms-settings\" class=\"hash-link\" aria-label=\"Direct link to Shared LMS settings\" title=\"Direct link to Shared LMS settings\" translate=\"no\">​</a></h2>\n<p>Three toggles under <strong>Better Messages → Settings → Integrations → LMS → Shared Course Settings</strong> apply across every LMS integration (LearnDash, LearnPress, Tutor LMS, MasterStudy LMS, FluentCommunity Courses):</p>\n<ul>\n<li class=\"\"><strong>Course Info Card</strong> <em>(on by default)</em> — banner with course title, image, and instructor name above each course conversation.</li>\n<li class=\"\"><strong>Email Notifications</strong> <em>(on by default)</em> — standard new-message email for course chat activity.</li>\n<li class=\"\"><strong>Push Notifications</strong> <em>(off by default, WebSocket version)</em> — integration-level real-time push for course-chat events.</li>\n</ul>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"installing-better-messages-on-a-tutor-lms-site\">Installing Better Messages on a Tutor LMS site<a href=\"https://www.better-messages.com/blog/tutor-lms-student-messaging/#installing-better-messages-on-a-tutor-lms-site\" class=\"hash-link\" aria-label=\"Direct link to Installing Better Messages on a Tutor LMS site\" title=\"Direct link to Installing Better Messages on a Tutor LMS site\" translate=\"no\">​</a></h2>\n<ol>\n<li class=\"\">Install <strong><a href=\"https://wordpress.org/plugins/bp-better-messages/\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\">Better Messages from WordPress.org</a></strong> and activate it.</li>\n<li class=\"\">Open <strong>WP Admin → Better Messages → Settings → Integrations → LMS → Tutor LMS Integration</strong>.</li>\n<li class=\"\">Toggle on the features you want: <strong>Message Instructor Button</strong>, <strong>Course Group Chat</strong>, <strong>Messages Dashboard Tab</strong>, <strong>Send Message Button on Instructor Profile</strong>, <strong>Send Message Button on Student Profile</strong>.</li>\n</ol>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"free-vs-websocket-version-for-tutor-lms-sites\">Free vs WebSocket version for Tutor LMS sites<a href=\"https://www.better-messages.com/blog/tutor-lms-student-messaging/#free-vs-websocket-version-for-tutor-lms-sites\" class=\"hash-link\" aria-label=\"Direct link to Free vs WebSocket version for Tutor LMS sites\" title=\"Direct link to Free vs WebSocket version for Tutor LMS sites\" translate=\"no\">​</a></h2>\n<table><thead><tr><th>Feature</th><th style=\"text-align:center\">Free version</th><th style=\"text-align:center\">WebSocket version</th></tr></thead><tbody><tr><td>Message Instructor button on course page</td><td style=\"text-align:center\">yes</td><td style=\"text-align:center\">yes</td></tr><tr><td>Auto-managed Course Group Chat</td><td style=\"text-align:center\">yes</td><td style=\"text-align:center\">yes</td></tr><tr><td>Send Message button on instructor / student profiles</td><td style=\"text-align:center\">yes</td><td style=\"text-align:center\">yes</td></tr><tr><td>Messages Dashboard Tab inside Tutor LMS</td><td style=\"text-align:center\">yes</td><td style=\"text-align:center\">yes</td></tr><tr><td>Courses widget on the Mini Widgets bar</td><td style=\"text-align:center\">yes</td><td style=\"text-align:center\">yes</td></tr><tr><td>Real-time delivery</td><td style=\"text-align:center\">polling</td><td style=\"text-align:center\">instant</td></tr><tr><td>One-on-one voice and video calls inside course threads</td><td style=\"text-align:center\">—</td><td style=\"text-align:center\">yes</td></tr><tr><td>Group voice and video calls inside course threads (cohort office hours, study sessions)</td><td style=\"text-align:center\">—</td><td style=\"text-align:center\">yes</td></tr><tr><td>Web push notifications for new messages</td><td style=\"text-align:center\">—</td><td style=\"text-align:center\">yes</td></tr><tr><td>Push notifications for course messages</td><td style=\"text-align:center\">—</td><td style=\"text-align:center\">yes</td></tr><tr><td>Read receipts</td><td style=\"text-align:center\">—</td><td style=\"text-align:center\">yes</td></tr><tr><td>End-to-end encryption (optional per thread)</td><td style=\"text-align:center\">—</td><td style=\"text-align:center\">yes</td></tr></tbody></table>\n<div class=\"theme-admonition theme-admonition-info admonition_xJq3 alert alert--info\"><div class=\"admonitionHeading_Gvgb\"><span class=\"admonitionIcon_Rf37\"><svg viewBox=\"0 0 14 16\"><path fill-rule=\"evenodd\" d=\"M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z\"></path></svg></span>info</div><div class=\"admonitionContent_BuS1\"><p>The WebSocket version turns each course thread into a Discord-style space for the cohort: instant message delivery, group voice / video calls for office hours, and web push that reaches students when their Tutor LMS dashboard tab is closed.</p></div></div>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"frequently-asked-questions\">Frequently asked questions<a href=\"https://www.better-messages.com/blog/tutor-lms-student-messaging/#frequently-asked-questions\" class=\"hash-link\" aria-label=\"Direct link to Frequently asked questions\" title=\"Direct link to Frequently asked questions\" translate=\"no\">​</a></h2>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"will-students-from-different-courses-end-up-in-the-same-chat\">Will students from different courses end up in the same chat?<a href=\"https://www.better-messages.com/blog/tutor-lms-student-messaging/#will-students-from-different-courses-end-up-in-the-same-chat\" class=\"hash-link\" aria-label=\"Direct link to Will students from different courses end up in the same chat?\" title=\"Direct link to Will students from different courses end up in the same chat?\" translate=\"no\">​</a></h3>\n<p>No — each Tutor LMS course has its own Course Group Chat. Students enrolled in multiple courses see multiple separate threads.</p>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"what-happens-when-a-students-enrollment-ends\">What happens when a student's enrollment ends?<a href=\"https://www.better-messages.com/blog/tutor-lms-student-messaging/#what-happens-when-a-students-enrollment-ends\" class=\"hash-link\" aria-label=\"Direct link to What happens when a student's enrollment ends?\" title=\"Direct link to What happens when a student's enrollment ends?\" translate=\"no\">​</a></h3>\n<p>Tutor LMS fires its standard enrollment hooks; Better Messages listens and removes the student from the Course Group Chat. Their previous messages stay in history.</p>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"does-it-work-with-tutor-lms-pro-features\">Does it work with Tutor LMS Pro features?<a href=\"https://www.better-messages.com/blog/tutor-lms-student-messaging/#does-it-work-with-tutor-lms-pro-features\" class=\"hash-link\" aria-label=\"Direct link to Does it work with Tutor LMS Pro features?\" title=\"Direct link to Does it work with Tutor LMS Pro features?\" translate=\"no\">​</a></h3>\n<p>Yes — the integration listens to Tutor LMS core hooks, which Pro features extend rather than replace. WooCommerce-based payments, subscriptions, and certificates are all compatible.</p>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"can-co-instructors-be-added-to-the-course-chat\">Can co-instructors be added to the course chat?<a href=\"https://www.better-messages.com/blog/tutor-lms-student-messaging/#can-co-instructors-be-added-to-the-course-chat\" class=\"hash-link\" aria-label=\"Direct link to Can co-instructors be added to the course chat?\" title=\"Direct link to Can co-instructors be added to the course chat?\" translate=\"no\">​</a></h3>\n<p>Yes — anyone marked as a co-instructor on the Tutor LMS course is auto-joined as an instructor of the matching course chat.</p>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"does-it-work-alongside-learndash--learnpress--masterstudy\">Does it work alongside LearnDash / LearnPress / MasterStudy?<a href=\"https://www.better-messages.com/blog/tutor-lms-student-messaging/#does-it-work-alongside-learndash--learnpress--masterstudy\" class=\"hash-link\" aria-label=\"Direct link to Does it work alongside LearnDash / LearnPress / MasterStudy?\" title=\"Direct link to Does it work alongside LearnDash / LearnPress / MasterStudy?\" translate=\"no\">​</a></h3>\n<p>Yes — sites running multiple LMS plugins (rare but it happens) see all course chats together inside the Courses widget. Each LMS integration loads independently.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"see-also\">See also<a href=\"https://www.better-messages.com/blog/tutor-lms-student-messaging/#see-also\" class=\"hash-link\" aria-label=\"Direct link to See also\" title=\"Direct link to See also\" translate=\"no\">​</a></h2>\n<ul>\n<li class=\"\"><a class=\"\" href=\"https://www.better-messages.com/docs/integrations/tutor-lms/\">Tutor LMS integration documentation</a> — full setup reference</li>\n<li class=\"\"><a class=\"\" href=\"https://www.better-messages.com/blog/wordpress-lms-chat-plugin/\">WordPress LMS chat plugin</a> — comparing LearnDash, LearnPress, Tutor LMS, MasterStudy LMS, FluentCommunity Courses</li>\n<li class=\"\"><a class=\"\" href=\"https://www.better-messages.com/blog/learndash-student-messaging/\">LearnDash student messaging plugin</a></li>\n<li class=\"\"><a class=\"\" href=\"https://www.better-messages.com/docs/features/group-conversations/\">Group conversations</a> — how group chats work in general</li>\n<li class=\"\"><a class=\"\" href=\"https://www.better-messages.com/docs/features/realtime-messaging/\">Real-time messaging</a> — what changes with the WebSocket version</li>\n</ul>\n<p><a href=\"https://wordpress.org/plugins/bp-better-messages/\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\"><strong>Install Better Messages from WordPress.org →</strong></a></p>",
            "url": "https://www.better-messages.com/blog/tutor-lms-student-messaging/",
            "title": "Tutor LMS Student & Instructor Messaging Plugin",
            "summary": "Add real-time chat to Tutor LMS — Message Instructor button on courses, Messages tab inside the Tutor dashboard, auto-managed course group chats that mirror enrollment.",
            "date_modified": "2026-05-04T00:00:00.000Z",
            "author": {
                "name": "Andrij Tkachenko",
                "url": "/docs/getting-started/about"
            },
            "tags": [
                "Tutor LMS",
                "LMS",
                "Guides"
            ]
        },
        {
            "id": "https://www.better-messages.com/blog/wordpress-chat-stickers/",
            "content_html": "<p>Stickers are how casual conversation actually happens in 2026 — a sticker sends a feeling in one tap where typing the same sentiment takes a sentence. Better Messages 2.14.16 introduced a <strong>built-in sticker pack system</strong> with a curated catalog (one-click install from the Better Messages library), multi-language support, role-based access per pack, inline typing suggestions, and the ability to upload your own custom packs. The legacy Stipop provider is still around but the built-in system is the recommended option.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"what-stickers-look-like-in-the-messenger\">What stickers look like in the messenger<a href=\"https://www.better-messages.com/blog/wordpress-chat-stickers/#what-stickers-look-like-in-the-messenger\" class=\"hash-link\" aria-label=\"Direct link to What stickers look like in the messenger\" title=\"Direct link to What stickers look like in the messenger\" translate=\"no\">​</a></h2>\n<p>Two ways for members to send a sticker:</p>\n<ol>\n<li class=\"\"><strong>Sticker picker</strong> — tap the sticker button next to the composer, browse packs, search, tap a sticker to send.</li>\n<li class=\"\"><strong>Inline suggestions</strong> — type a keyword (e.g. \"hi\", \"thanks\") and a horizontal strip of matching stickers pops up above the composer. Pick with click, arrow keys, or Tab. Press Escape or add a space to dismiss.</li>\n</ol>\n<p>The picker simplifies when only one pack is installed: pack tabs disappear, sticker grid + search appear immediately.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"built-in-sticker-catalog\">Built-in sticker catalog<a href=\"https://www.better-messages.com/blog/wordpress-chat-stickers/#built-in-sticker-catalog\" class=\"hash-link\" aria-label=\"Direct link to Built-in sticker catalog\" title=\"Direct link to Built-in sticker catalog\" translate=\"no\">​</a></h2>\n<p>The Better Messages library publishes a growing catalog of free sticker packs. Each pack:</p>\n<ul>\n<li class=\"\">Has a cover image and name visible in the picker tabs.</li>\n<li class=\"\">Is <strong>type-classified</strong> as <code>reaction</code> (text-based stickers like \"LOL\", \"THANKS\") or <code>character</code> (illustrated characters like cute animals).</li>\n<li class=\"\">Lists <strong>available languages</strong> — for text-based packs, you pick which image-language variants to install; for character packs, label translations come bundled automatically.</li>\n</ul>\n<p>One-click install from <strong>Settings → Integrations → Stickers</strong>. Multiple packs can install simultaneously with their own progress indicators.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"multi-language-packs\">Multi-language packs<a href=\"https://www.better-messages.com/blog/wordpress-chat-stickers/#multi-language-packs\" class=\"hash-link\" aria-label=\"Direct link to Multi-language packs\" title=\"Direct link to Multi-language packs\" translate=\"no\">​</a></h2>\n<p>Two distinct localization shapes:</p>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"text-based-packs-reaction-type\">Text-based packs (reaction type)<a href=\"https://www.better-messages.com/blog/wordpress-chat-stickers/#text-based-packs-reaction-type\" class=\"hash-link\" aria-label=\"Direct link to Text-based packs (reaction type)\" title=\"Direct link to Text-based packs (reaction type)\" translate=\"no\">​</a></h3>\n<p>Stickers like \"LOL\", \"THANKS\", \"GG\" have text baked into the image. These packs ship <strong>separate image sets per language</strong>. When installing, select which image languages you want (English, Spanish, French, Japanese, etc.). Each language has its own sticker images, cover, and translated keywords. Members on locale <code>es_ES</code> see Spanish sticker images; members on locale <code>ja</code> see Japanese ones.</p>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"character-packs-universal-images\">Character packs (universal images)<a href=\"https://www.better-messages.com/blog/wordpress-chat-stickers/#character-packs-universal-images\" class=\"hash-link\" aria-label=\"Direct link to Character packs (universal images)\" title=\"Direct link to Character packs (universal images)\" translate=\"no\">​</a></h3>\n<p>Stickers like cute character art (\"Whiskers\", \"Mochi\", \"Bruno\") have no language-baked-in text. These packs use one image set globally but ship <strong>translated sticker names and keywords</strong> for many languages automatically. A Spanish-speaking member searching \"gato\" finds the cat sticker; an English speaker searching \"cat\" finds the same one.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"role-based-access-per-pack\">Role-based access per pack<a href=\"https://www.better-messages.com/blog/wordpress-chat-stickers/#role-based-access-per-pack\" class=\"hash-link\" aria-label=\"Direct link to Role-based access per pack\" title=\"Direct link to Role-based access per pack\" translate=\"no\">​</a></h2>\n<p>Each pack has an <strong>Allowed roles</strong> setting:</p>\n<ul>\n<li class=\"\">Leave all unchecked → pack visible to everyone (including guests).</li>\n<li class=\"\">Check specific roles → only those roles see the pack.</li>\n<li class=\"\">Includes a synthetic <strong>Guests</strong> role for unregistered visitors.</li>\n</ul>\n<p>If a user has no access to any enabled pack, the sticker button is hidden from their chat composer entirely. Useful for tier-gating: free members get the basic reaction pack, Pro members get the premium character packs, guests get nothing.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"custom-packs-upload-your-own\">Custom packs (upload your own)<a href=\"https://www.better-messages.com/blog/wordpress-chat-stickers/#custom-packs-upload-your-own\" class=\"hash-link\" aria-label=\"Direct link to Custom packs (upload your own)\" title=\"Direct link to Custom packs (upload your own)\" translate=\"no\">​</a></h2>\n<p>Click <strong>+ New pack</strong> in <strong>Settings → Integrations → Stickers → Installed sticker packs</strong> to create a pack from scratch. Upload PNG / WebP / animated WebP images, assign keywords for search, set the cover, configure allowed roles, optionally add per-language translations.</p>\n<p>Custom packs work exactly like catalog packs — same picker, same translation pipeline, same role access.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"inline-typing-suggestions\">Inline typing suggestions<a href=\"https://www.better-messages.com/blog/wordpress-chat-stickers/#inline-typing-suggestions\" class=\"hash-link\" aria-label=\"Direct link to Inline typing suggestions\" title=\"Direct link to Inline typing suggestions\" translate=\"no\">​</a></h2>\n<p>Toggle the global <strong>Inline suggestions</strong> setting on, then opt in per-pack. Behavior:</p>\n<ul>\n<li class=\"\">Type a single word (2–20 characters) in the composer.</li>\n<li class=\"\">A horizontal strip of matching stickers appears above the input.</li>\n<li class=\"\">Up to 8 matches shown, scored by quality (exact name &gt; exact keyword &gt; starts-with &gt; contains).</li>\n<li class=\"\">Click, Tab, or arrow-key + Enter to pick and send.</li>\n<li class=\"\">Escape or space to dismiss.</li>\n</ul>\n<p>The sticker manifest loads lazily on the first keystroke — no impact on chat-page load time.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"per-locale-customization-in-custom-packs\">Per-locale customization in custom packs<a href=\"https://www.better-messages.com/blog/wordpress-chat-stickers/#per-locale-customization-in-custom-packs\" class=\"hash-link\" aria-label=\"Direct link to Per-locale customization in custom packs\" title=\"Direct link to Per-locale customization in custom packs\" translate=\"no\">​</a></h2>\n<p>The pack editor's locale tabs let you:</p>\n<ul>\n<li class=\"\">Translate the pack title and description per language.</li>\n<li class=\"\">Translate per-sticker names and keywords per language.</li>\n<li class=\"\">Upload per-language sticker images (for text-based packs).</li>\n<li class=\"\">Upload a per-language cover image (so locale-specific covers show in the picker tabs).</li>\n</ul>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"how-to-enable\">How to enable<a href=\"https://www.better-messages.com/blog/wordpress-chat-stickers/#how-to-enable\" class=\"hash-link\" aria-label=\"Direct link to How to enable\" title=\"Direct link to How to enable\" translate=\"no\">​</a></h2>\n<ol>\n<li class=\"\"><strong>WP Admin → Better Messages → Settings → Integrations → Stickers</strong>.</li>\n<li class=\"\">Set <strong>Provider</strong> to <strong>Built-in packs</strong>.</li>\n<li class=\"\">(Optional) Enable <strong>Inline suggestions</strong>.</li>\n<li class=\"\">Browse the <strong>Available sticker packs</strong> catalog. Click <strong>Install</strong> on packs you want.</li>\n<li class=\"\">(Optional) Reorder installed packs with the arrow buttons. The order determines the tab order in the picker.</li>\n<li class=\"\">(Optional) Click <strong>Edit</strong> on a pack to set role restrictions, edit translations, or upload more stickers.</li>\n</ol>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"free-vs-websocket-version\">Free vs WebSocket version<a href=\"https://www.better-messages.com/blog/wordpress-chat-stickers/#free-vs-websocket-version\" class=\"hash-link\" aria-label=\"Direct link to Free vs WebSocket version\" title=\"Direct link to Free vs WebSocket version\" translate=\"no\">​</a></h2>\n<p>Stickers work on both versions:</p>\n<table><thead><tr><th>Feature</th><th style=\"text-align:center\">Free version</th><th style=\"text-align:center\">WebSocket version</th></tr></thead><tbody><tr><td>Built-in sticker catalog</td><td style=\"text-align:center\">yes</td><td style=\"text-align:center\">yes</td></tr><tr><td>Multi-language packs</td><td style=\"text-align:center\">yes</td><td style=\"text-align:center\">yes</td></tr><tr><td>Custom upload packs</td><td style=\"text-align:center\">yes</td><td style=\"text-align:center\">yes</td></tr><tr><td>Role-based access per pack</td><td style=\"text-align:center\">yes</td><td style=\"text-align:center\">yes</td></tr><tr><td>Inline typing suggestions</td><td style=\"text-align:center\">yes</td><td style=\"text-align:center\">yes</td></tr><tr><td>Real-time delivery of sticker messages</td><td style=\"text-align:center\">polling</td><td style=\"text-align:center\">instant</td></tr><tr><td>Animated WebP stickers</td><td style=\"text-align:center\">yes</td><td style=\"text-align:center\">yes</td></tr></tbody></table>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"frequently-asked-questions\">Frequently asked questions<a href=\"https://www.better-messages.com/blog/wordpress-chat-stickers/#frequently-asked-questions\" class=\"hash-link\" aria-label=\"Direct link to Frequently asked questions\" title=\"Direct link to Frequently asked questions\" translate=\"no\">​</a></h2>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"does-this-work-alongside-giphy\">Does this work alongside GIPHY?<a href=\"https://www.better-messages.com/blog/wordpress-chat-stickers/#does-this-work-alongside-giphy\" class=\"hash-link\" aria-label=\"Direct link to Does this work alongside GIPHY?\" title=\"Direct link to Does this work alongside GIPHY?\" translate=\"no\">​</a></h3>\n<p>Yes — GIPHY GIFs and Stickers are separate features. GIPHY GIFs come from the GIPHY library; stickers come from the BM catalog (or your custom uploads). Members can use both in the same conversation.</p>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"can-stickers-be-animated\">Can stickers be animated?<a href=\"https://www.better-messages.com/blog/wordpress-chat-stickers/#can-stickers-be-animated\" class=\"hash-link\" aria-label=\"Direct link to Can stickers be animated?\" title=\"Direct link to Can stickers be animated?\" translate=\"no\">​</a></h3>\n<p>Yes — animated WebP is supported for both catalog and custom stickers. PNG and static WebP are also supported.</p>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"where-are-sticker-images-stored\">Where are sticker images stored?<a href=\"https://www.better-messages.com/blog/wordpress-chat-stickers/#where-are-sticker-images-stored\" class=\"hash-link\" aria-label=\"Direct link to Where are sticker images stored?\" title=\"Direct link to Where are sticker images stored?\" translate=\"no\">​</a></h3>\n<p>In your WordPress uploads directory.</p>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"what-happened-to-stipop\">What happened to Stipop?<a href=\"https://www.better-messages.com/blog/wordpress-chat-stickers/#what-happened-to-stipop\" class=\"hash-link\" aria-label=\"Direct link to What happened to Stipop?\" title=\"Direct link to What happened to Stipop?\" translate=\"no\">​</a></h3>\n<p>Stipop is a third-party sticker service that Better Messages integrated with historically. Its free plan has been reduced to 20 monthly active users, so the built-in catalog is now the recommended provider. Stipop still works for sites that already use it.</p>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"can-i-sell-sticker-packs-to-members\">Can I sell sticker packs to members?<a href=\"https://www.better-messages.com/blog/wordpress-chat-stickers/#can-i-sell-sticker-packs-to-members\" class=\"hash-link\" aria-label=\"Direct link to Can I sell sticker packs to members?\" title=\"Direct link to Can I sell sticker packs to members?\" translate=\"no\">​</a></h3>\n<p>The plugin does not have a built-in sticker store. For \"paid stickers\", combine role-based access on a pack with a membership plugin: gate the pack to a paid role, sell access to the role via your membership plugin.</p>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"will-sticker-keyword-search-work-in-a-non-latin-script\">Will sticker keyword search work in a non-Latin script?<a href=\"https://www.better-messages.com/blog/wordpress-chat-stickers/#will-sticker-keyword-search-work-in-a-non-latin-script\" class=\"hash-link\" aria-label=\"Direct link to Will sticker keyword search work in a non-Latin script?\" title=\"Direct link to Will sticker keyword search work in a non-Latin script?\" translate=\"no\">​</a></h3>\n<p>Yes — search runs against the language-specific keyword set per pack. Japanese / Chinese / Cyrillic / Arabic search all work for packs that ship those translations.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"see-also\">See also<a href=\"https://www.better-messages.com/blog/wordpress-chat-stickers/#see-also\" class=\"hash-link\" aria-label=\"Direct link to See also\" title=\"Direct link to See also\" translate=\"no\">​</a></h2>\n<ul>\n<li class=\"\"><a class=\"\" href=\"https://www.better-messages.com/docs/features/stickers/\">Stickers feature documentation</a> — full reference</li>\n<li class=\"\"><a class=\"\" href=\"https://www.better-messages.com/docs/features/giphy-integration/\">GIPHY integration documentation</a> — for adding GIFs alongside stickers</li>\n<li class=\"\"><a class=\"\" href=\"https://www.better-messages.com/blog/translate-wordpress-chat-multilingual/\">WordPress chat translation</a> — the underlying i18n system</li>\n<li class=\"\"><a class=\"\" href=\"https://www.better-messages.com/blog/role-based-access-wordpress-chat/\">Role-based access for WordPress chat</a> — for tier-gating sticker packs</li>\n</ul>\n<p><a href=\"https://wordpress.org/plugins/bp-better-messages/\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\"><strong>Install Better Messages from WordPress.org →</strong></a></p>",
            "url": "https://www.better-messages.com/blog/wordpress-chat-stickers/",
            "title": "Stickers for WordPress Chat: Built-In Sticker Packs",
            "summary": "Add stickers to WordPress chat — built-in sticker pack catalog, multi-language packs (translated text + universal characters), role-based access, inline typing suggestions, custom uploaded packs.",
            "date_modified": "2026-04-30T00:00:00.000Z",
            "author": {
                "name": "Andrij Tkachenko",
                "url": "/docs/getting-started/about"
            },
            "tags": [
                "Community",
                "Guides"
            ]
        },
        {
            "id": "https://www.better-messages.com/blog/ai-voice-message-transcription-wordpress/",
            "content_html": "<p>Voice messages are the right tool for chat moments when typing is slow or the relationship is personal — but they have one universal problem: the recipient cannot always listen. They are in a meeting, on a noisy train, or simply prefer text. Better Messages adds <strong>AI voice-message transcription</strong> to bridge the gap: any participant in a thread can click the transcribe button on a voice message and a text version appears below it, in any of 99+ languages, with results cached so the next viewer sees the text instantly. Two providers — Better Messages Cloud AI (included with the WebSocket license, no third-party key) or OpenAI (free with your own OpenAI key).</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"how-transcription-works-inside-the-messenger\">How transcription works inside the messenger<a href=\"https://www.better-messages.com/blog/ai-voice-message-transcription-wordpress/#how-transcription-works-inside-the-messenger\" class=\"hash-link\" aria-label=\"Direct link to How transcription works inside the messenger\" title=\"Direct link to How transcription works inside the messenger\" translate=\"no\">​</a></h2>\n<ol>\n<li class=\"\">A user records and sends a <strong>voice message</strong> (via the Voice Messages add-on).</li>\n<li class=\"\">Recipients see the voice message in the thread with a transcribe button.</li>\n<li class=\"\">Any participant clicks the button — the audio is sent to the configured provider.</li>\n<li class=\"\">The transcribed text appears below the voice message, visible to <strong>all participants</strong>.</li>\n<li class=\"\">Results are cached on the server — once transcribed, every future viewer sees the text instantly.</li>\n</ol>\n<p>The on-demand model means transcription costs only happen when someone actually needs the text, not on every voice message sent. Members who prefer audio do not trigger transcription; members who need text get it per-message.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"two-providers-pick-by-use-case\">Two providers, pick by use case<a href=\"https://www.better-messages.com/blog/ai-voice-message-transcription-wordpress/#two-providers-pick-by-use-case\" class=\"hash-link\" aria-label=\"Direct link to Two providers, pick by use case\" title=\"Direct link to Two providers, pick by use case\" translate=\"no\">​</a></h2>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"better-messages-cloud-ai\">Better Messages Cloud AI<a href=\"https://www.better-messages.com/blog/ai-voice-message-transcription-wordpress/#better-messages-cloud-ai\" class=\"hash-link\" aria-label=\"Direct link to Better Messages Cloud AI\" title=\"Direct link to Better Messages Cloud AI\" translate=\"no\">​</a></h3>\n<ul>\n<li class=\"\">Included with the WebSocket license. <strong>No third-party API key</strong>, no OpenAI account.</li>\n<li class=\"\">Runs on private Better Messages servers — no data shared with any third party.</li>\n<li class=\"\">99+ languages with automatic source-language detection.</li>\n<li class=\"\">Real-time response when possible; async callback for longer audio.</li>\n</ul>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"openai-whisper\">OpenAI Whisper<a href=\"https://www.better-messages.com/blog/ai-voice-message-transcription-wordpress/#openai-whisper\" class=\"hash-link\" aria-label=\"Direct link to OpenAI Whisper\" title=\"Direct link to OpenAI Whisper\" translate=\"no\">​</a></h3>\n<ul>\n<li class=\"\">Free to use with your own OpenAI API key.</li>\n<li class=\"\">Same language coverage (OpenAI Whisper supports 99+ languages).</li>\n<li class=\"\">Configured under <strong>Integrations → OpenAI</strong>.</li>\n</ul>\n<p>For most sites, <strong>Better Messages Cloud AI is the default</strong> — no API key to manage, no separate billing, no third-party data flow.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"language-auto-detection-vs-explicit-setting\">Language auto-detection vs explicit setting<a href=\"https://www.better-messages.com/blog/ai-voice-message-transcription-wordpress/#language-auto-detection-vs-explicit-setting\" class=\"hash-link\" aria-label=\"Direct link to Language auto-detection vs explicit setting\" title=\"Direct link to Language auto-detection vs explicit setting\" translate=\"no\">​</a></h2>\n<p>By default, the AI auto-detects the language from the audio. For sites where every user speaks the same language, set a specific language code (<code>en</code>, <code>es</code>, <code>ru</code>, <code>ja</code>, etc.) in the settings — this is faster and more accurate than auto-detection for known-language sites.</p>\n<p>For multilingual communities, leave auto-detection on. The transcription picks up Spanish, Mandarin, Arabic, and 90+ other languages seamlessly.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"how-to-enable\">How to enable<a href=\"https://www.better-messages.com/blog/ai-voice-message-transcription-wordpress/#how-to-enable\" class=\"hash-link\" aria-label=\"Direct link to How to enable\" title=\"Direct link to How to enable\" translate=\"no\">​</a></h2>\n<ol>\n<li class=\"\">Install <strong><a href=\"https://wordpress.org/plugins/bp-better-messages/\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\">Better Messages from WordPress.org</a></strong> with the WebSocket license.</li>\n<li class=\"\">Install the <strong>Voice Messages</strong> add-on.</li>\n<li class=\"\">Open <strong>WP Admin → Better Messages → Settings → Voice Messages</strong>.</li>\n<li class=\"\">For Cloud AI: select <strong>Better Messages Transcription AI</strong> as the provider.</li>\n<li class=\"\">For OpenAI: configure your OpenAI key under <strong>Integrations → OpenAI</strong>, then select OpenAI as the provider.</li>\n<li class=\"\">Enable <strong>Transcription</strong>.</li>\n<li class=\"\">Optionally set a <strong>Language</strong> code (or leave empty for auto-detection).</li>\n<li class=\"\">Save.</li>\n</ol>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"free-vs-websocket-version\">Free vs WebSocket version<a href=\"https://www.better-messages.com/blog/ai-voice-message-transcription-wordpress/#free-vs-websocket-version\" class=\"hash-link\" aria-label=\"Direct link to Free vs WebSocket version\" title=\"Direct link to Free vs WebSocket version\" translate=\"no\">​</a></h2>\n<p>Voice messages themselves work on both versions (the Voice Messages add-on is a separate plugin compatible with both AJAX and WebSocket Better Messages). <strong>Transcription requires the WebSocket version</strong> — the Cloud AI provider depends on the WebSocket cloud, and the OpenAI provider also requires PHP 8.1+ and the WebSocket relay for callback delivery.</p>\n<table><thead><tr><th>Feature</th><th style=\"text-align:center\">Free version</th><th style=\"text-align:center\">WebSocket version</th></tr></thead><tbody><tr><td>Voice message recording / playback</td><td style=\"text-align:center\">yes</td><td style=\"text-align:center\">yes</td></tr><tr><td>Voice message transcription (Better Messages Cloud AI)</td><td style=\"text-align:center\">—</td><td style=\"text-align:center\">yes</td></tr><tr><td>Voice message transcription (OpenAI Whisper)</td><td style=\"text-align:center\">—</td><td style=\"text-align:center\">yes</td></tr><tr><td>Auto-detect language vs explicit language setting</td><td style=\"text-align:center\">—</td><td style=\"text-align:center\">yes</td></tr><tr><td>Cached transcriptions</td><td style=\"text-align:center\">—</td><td style=\"text-align:center\">yes</td></tr><tr><td>99+ language support</td><td style=\"text-align:center\">—</td><td style=\"text-align:center\">yes</td></tr></tbody></table>\n<div class=\"theme-admonition theme-admonition-info admonition_xJq3 alert alert--info\"><div class=\"admonitionHeading_Gvgb\"><span class=\"admonitionIcon_Rf37\"><svg viewBox=\"0 0 14 16\"><path fill-rule=\"evenodd\" d=\"M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z\"></path></svg></span>info</div><div class=\"admonitionContent_BuS1\"><p>Transcription costs only happen when someone clicks the transcribe button — not on every voice message sent. Cached results make subsequent views instant. For sites with heavy voice-message usage and budget concerns on the OpenAI provider, this on-demand model keeps costs proportional to actual need.</p></div></div>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"when-transcription-matters-most\">When transcription matters most<a href=\"https://www.better-messages.com/blog/ai-voice-message-transcription-wordpress/#when-transcription-matters-most\" class=\"hash-link\" aria-label=\"Direct link to When transcription matters most\" title=\"Direct link to When transcription matters most\" translate=\"no\">​</a></h2>\n<table><thead><tr><th>Use case</th><th>Why transcription helps</th></tr></thead><tbody><tr><td>Coaching businesses</td><td>Coach sends a 2-minute voice note; client wants to revisit specific advice quickly via text search</td></tr><tr><td>LMS instructor chats</td><td>Student gets a voice answer; can read the transcript later when reviewing</td></tr><tr><td>Multilingual community</td><td>Voice in one language, recipient toggles transcription and uses <a class=\"\" href=\"https://www.better-messages.com/blog/ai-message-translation-wordpress/\">AI Message Translation</a> to read in their language</td></tr><tr><td>Accessibility</td><td>Members with hearing impairment get the text version</td></tr><tr><td>Marketplaces / vendor chat</td><td>Vendor sends a voice product description; buyer transcribes for sharing or copying details</td></tr><tr><td>Quote / agreement audit</td><td>Voice agreement transcribed for written record</td></tr></tbody></table>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"callback-reliability\">Callback reliability<a href=\"https://www.better-messages.com/blog/ai-voice-message-transcription-wordpress/#callback-reliability\" class=\"hash-link\" aria-label=\"Direct link to Callback reliability\" title=\"Direct link to Callback reliability\" translate=\"no\">​</a></h2>\n<p>Cloud AI transcription uses a callback URL to deliver results from Better Messages Cloud to your site. The plugin includes a <strong>Test Callback URL</strong> button in the Voice Messages settings to verify the cloud can reach your endpoint. If your firewall / WAF blocks external requests, whitelist:</p>\n<div class=\"language-text codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#393A34;--prism-background-color:#f6f8fa\"><div class=\"codeBlockContent_QJqH\"><pre tabindex=\"0\" class=\"prism-code language-text codeBlock_bY9V thin-scrollbar\" style=\"color:#393A34;background-color:#f6f8fa\"><code class=\"codeBlockLines_e6Vv\"><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">https://yoursite.com/wp-json/better-messages/v1/ai/task-result</span><br></span></code></pre></div></div>\n<p>Without a reachable callback, transcription falls back to a cron-based retry that still delivers results, just slower.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"data-privacy\">Data privacy<a href=\"https://www.better-messages.com/blog/ai-voice-message-transcription-wordpress/#data-privacy\" class=\"hash-link\" aria-label=\"Direct link to Data privacy\" title=\"Direct link to Data privacy\" translate=\"no\">​</a></h2>\n<p>Voice message audio is sent to the configured provider over HTTPS:</p>\n<ul>\n<li class=\"\"><strong>Better Messages Cloud AI</strong> — runs on private Better Messages servers. No data shared with any third party. Audio is processed in real time and immediately discarded after transcription.</li>\n<li class=\"\"><strong>OpenAI</strong> — subject to OpenAI's data-usage policy. Audio is sent to OpenAI's API for transcription; consult OpenAI's terms for retention specifics.</li>\n</ul>\n<p>For sites with strict data-residency requirements, consider upgrading to the self-hosted plan so transcription processing stays inside your infrastructure.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"frequently-asked-questions\">Frequently asked questions<a href=\"https://www.better-messages.com/blog/ai-voice-message-transcription-wordpress/#frequently-asked-questions\" class=\"hash-link\" aria-label=\"Direct link to Frequently asked questions\" title=\"Direct link to Frequently asked questions\" translate=\"no\">​</a></h2>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"are-transcriptions-accurate\">Are transcriptions accurate?<a href=\"https://www.better-messages.com/blog/ai-voice-message-transcription-wordpress/#are-transcriptions-accurate\" class=\"hash-link\" aria-label=\"Direct link to Are transcriptions accurate?\" title=\"Direct link to Are transcriptions accurate?\" translate=\"no\">​</a></h3>\n<p>Modern AI speech recognition handles clean speech in well-supported languages at ~95% accuracy. Background noise, accents, technical jargon, and overlapping speakers reduce accuracy. For mission-critical transcription (legal, medical), treat AI output as a starting draft, not a final transcript.</p>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"can-transcription-be-enabled-per-thread-or-only-site-wide\">Can transcription be enabled per-thread or only site-wide?<a href=\"https://www.better-messages.com/blog/ai-voice-message-transcription-wordpress/#can-transcription-be-enabled-per-thread-or-only-site-wide\" class=\"hash-link\" aria-label=\"Direct link to Can transcription be enabled per-thread or only site-wide?\" title=\"Direct link to Can transcription be enabled per-thread or only site-wide?\" translate=\"no\">​</a></h3>\n<p>The provider configuration is site-wide. Whether the transcribe button appears on a voice message is controlled by whether transcription is enabled — there is no per-thread toggle in the default UI. A custom filter can hide the button on specific threads if needed.</p>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"does-it-work-in-end-to-end-encrypted-threads\">Does it work in end-to-end encrypted threads?<a href=\"https://www.better-messages.com/blog/ai-voice-message-transcription-wordpress/#does-it-work-in-end-to-end-encrypted-threads\" class=\"hash-link\" aria-label=\"Direct link to Does it work in end-to-end encrypted threads?\" title=\"Direct link to Does it work in end-to-end encrypted threads?\" translate=\"no\">​</a></h3>\n<p>No — E2E threads are decrypted only in the participants' browsers. Server-side AI cannot access the encrypted audio. This is the standard trade-off for E2E threads (also applies to AI translation and moderation). See <a class=\"\" href=\"https://www.better-messages.com/blog/end-to-end-encrypted-wordpress-messaging/\">End-to-end encrypted messaging on WordPress</a>.</p>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"can-we-charge-users-for-transcription\">Can we charge users for transcription?<a href=\"https://www.better-messages.com/blog/ai-voice-message-transcription-wordpress/#can-we-charge-users-for-transcription\" class=\"hash-link\" aria-label=\"Direct link to Can we charge users for transcription?\" title=\"Direct link to Can we charge users for transcription?\" translate=\"no\">​</a></h3>\n<p>Yes — combine with <a class=\"\" href=\"https://www.better-messages.com/blog/gamipress-pay-to-message/\">GamiPress pay-to-message</a> or <a class=\"\" href=\"https://www.better-messages.com/blog/mycred-pay-to-message/\">MyCred pay-to-message</a>. The user spends N points per transcription request. Useful for sites where transcription cost is meaningful.</p>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"what-audio-formats-are-supported\">What audio formats are supported?<a href=\"https://www.better-messages.com/blog/ai-voice-message-transcription-wordpress/#what-audio-formats-are-supported\" class=\"hash-link\" aria-label=\"Direct link to What audio formats are supported?\" title=\"Direct link to What audio formats are supported?\" translate=\"no\">​</a></h3>\n<p>WebM (the Voice Messages add-on's primary codec) and MP3 (the legacy codec) are both supported. Other audio formats uploaded as file attachments are not auto-transcribed — only voice messages from the add-on get the transcribe button.</p>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"will-the-transcription-appear-in-search-results\">Will the transcription appear in search results?<a href=\"https://www.better-messages.com/blog/ai-voice-message-transcription-wordpress/#will-the-transcription-appear-in-search-results\" class=\"hash-link\" aria-label=\"Direct link to Will the transcription appear in search results?\" title=\"Direct link to Will the transcription appear in search results?\" translate=\"no\">​</a></h3>\n<p>Yes — once transcribed and cached, the text is searchable through the standard message search (<a class=\"\" href=\"https://www.better-messages.com/blog/wordpress-chat-search/\">WordPress chat search</a>). Voice messages without a transcription are not searchable by content.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"see-also\">See also<a href=\"https://www.better-messages.com/blog/ai-voice-message-transcription-wordpress/#see-also\" class=\"hash-link\" aria-label=\"Direct link to See also\" title=\"Direct link to See also\" translate=\"no\">​</a></h2>\n<ul>\n<li class=\"\"><a class=\"\" href=\"https://www.better-messages.com/blog/voice-messages-in-wordpress-chat/\">Voice messages in WordPress chat</a> — the underlying Voice Messages add-on</li>\n<li class=\"\"><a class=\"\" href=\"https://www.better-messages.com/blog/ai-message-translation-wordpress/\">AI message translation</a> — combine with transcription for multilingual communities</li>\n<li class=\"\"><a class=\"\" href=\"https://www.better-messages.com/blog/ai-content-moderation-wordpress-chat/\">AI content moderation</a> — another Better Messages Cloud AI feature</li>\n<li class=\"\"><a class=\"\" href=\"https://www.better-messages.com/blog/ai-chat-bots-wordpress-messaging/\">AI chat bots for WordPress private messaging</a> — for AI participant bots</li>\n<li class=\"\"><a class=\"\" href=\"https://www.better-messages.com/blog/wordpress-chat-search/\">WordPress chat search</a> — transcribed text becomes searchable</li>\n<li class=\"\"><a class=\"\" href=\"https://www.better-messages.com/blog/end-to-end-encrypted-wordpress-messaging/\">End-to-end encrypted messaging</a> — the trade-off with E2E threads</li>\n</ul>\n<p><a href=\"https://wordpress.org/plugins/bp-better-messages/\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\"><strong>Install Better Messages from WordPress.org →</strong></a></p>",
            "url": "https://www.better-messages.com/blog/ai-voice-message-transcription-wordpress/",
            "title": "AI Voice Message Transcription for WordPress Chat",
            "summary": "Auto-transcribe voice messages in WordPress chat — Better Messages Cloud AI or OpenAI, 99+ languages with auto-detection, cached results, per-thread on-demand transcription.",
            "date_modified": "2026-04-20T00:00:00.000Z",
            "author": {
                "name": "Andrij Tkachenko",
                "url": "/docs/getting-started/about"
            },
            "tags": [
                "WebSocket",
                "Guides",
                "Voice messages"
            ]
        },
        {
            "id": "https://www.better-messages.com/blog/woocommerce-customer-chat/",
            "content_html": "<p>WooCommerce ships with the Contact form on the store page but no way for a shopper to ask a question about a specific product, ask whether items still fit in the cart, or follow up about an order they already placed. Better Messages adds a <strong>Contact</strong> button on each of those pages — product, cart, checkout, and order — and posts the cart contents or order details into the conversation as a rich context card so the support agent immediately sees what the customer is looking at.</p>\n<p>This post covers what the WooCommerce integration adds, where each button shows up, and what the difference is between the free and WebSocket versions.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"the-four-buttons-woocommerce-gets\">The four buttons WooCommerce gets<a href=\"https://www.better-messages.com/blog/woocommerce-customer-chat/#the-four-buttons-woocommerce-gets\" class=\"hash-link\" aria-label=\"Direct link to The four buttons WooCommerce gets\" title=\"Direct link to The four buttons WooCommerce gets\" translate=\"no\">​</a></h2>\n<p>Each button is independent — enable any combination, choose where it appears, and pick a different support recipient for each.</p>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"product-page-button\">Product page button<a href=\"https://www.better-messages.com/blog/woocommerce-customer-chat/#product-page-button\" class=\"hash-link\" aria-label=\"Direct link to Product page button\" title=\"Direct link to Product page button\" translate=\"no\">​</a></h3>\n<p>A <strong>Contact us about this product</strong> button on the single product page. When clicked, a thread opens with the recipient you have selected, and the product name, image, and price appear as a context card at the top of the conversation. Your agent immediately knows which product the customer is asking about.</p>\n<p><img decoding=\"async\" loading=\"lazy\" alt=\"Contact us about this product button on a WooCommerce product page\" src=\"https://www.better-messages.com/assets/images/product-aa5235e6a18c9d31abc7d0828a5d1c80.png\" width=\"2540\" height=\"1562\" class=\"img_ev3q\"></p>\n<p>Four placements are supported (above summary, above add-to-cart, below add-to-cart, below summary) plus a manual <code>[better_messages_woocommerce_product_button]</code> shortcode for custom builders. A per-product override on the product edit screen lets you route specific products to different agents.</p>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"cart-and-checkout-pre-sales-button\">Cart and checkout pre-sales button<a href=\"https://www.better-messages.com/blog/woocommerce-customer-chat/#cart-and-checkout-pre-sales-button\" class=\"hash-link\" aria-label=\"Direct link to Cart and checkout pre-sales button\" title=\"Direct link to Cart and checkout pre-sales button\" translate=\"no\">​</a></h3>\n<p>A <strong>Need help? Chat with us</strong> button on the cart and checkout pages. When the customer opens the chat, the contents of their cart are automatically posted as the first message — a rich card with each item, price, and a link back to its product page.</p>\n<p><img decoding=\"async\" loading=\"lazy\" alt=\"Chat thread showing the customer&amp;#39;s WooCommerce cart contents as a rich card\" src=\"https://www.better-messages.com/assets/images/chat-with-cart-info-1976d25d13fc26d1abfd5ca59f78ec6b.png\" width=\"1580\" height=\"1284\" class=\"img_ev3q\"></p>\n<p>The cart snapshot is content-aware: if the cart changes and the customer reopens the chat, a new snapshot is posted; if the cart has not changed, no duplicate message is sent.</p>\n<p>Five placements on cart, four on checkout, plus a <code>[better_messages_woocommerce_pre_purchase_button]</code> shortcode for manual placement.</p>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"order-page-button\">Order page button<a href=\"https://www.better-messages.com/blog/woocommerce-customer-chat/#order-page-button\" class=\"hash-link\" aria-label=\"Direct link to Order page button\" title=\"Direct link to Order page button\" translate=\"no\">​</a></h3>\n<p>A <strong>Contact us about this order</strong> button on the <strong>My Account → View Order</strong> page. Only the customer who placed the order sees the button; the thread is tagged with the order, and the support agent sees order details (number, status, total, items) as a context card.</p>\n<p><img decoding=\"async\" loading=\"lazy\" alt=\"Contact us about this order button on a WooCommerce order page\" src=\"https://www.better-messages.com/assets/images/order-0f984448334b37aef8f5969a9aeee7b0.png\" width=\"2370\" height=\"2358\" class=\"img_ev3q\"></p>\n<p>The thread sidebar also includes a <strong>View order</strong> link that is role-aware: admins and shop managers are routed to the wp-admin order edit screen, customers to their My Account → View Order page.</p>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"my-account-inbox-link-or-full-inbox-embedded-as-a-tab\">My Account inbox link (or full inbox embedded as a tab)<a href=\"https://www.better-messages.com/blog/woocommerce-customer-chat/#my-account-inbox-link-or-full-inbox-embedded-as-a-tab\" class=\"hash-link\" aria-label=\"Direct link to My Account inbox link (or full inbox embedded as a tab)\" title=\"Direct link to My Account inbox link (or full inbox embedded as a tab)\" translate=\"no\">​</a></h3>\n<p>A <strong>Messages</strong> item is added to the WooCommerce <strong>My Account</strong> menu, linking to the customer's inbox. Optionally, the entire Better Messages inbox can be rendered as a tab inside My Account instead:</p>\n<p><img decoding=\"async\" loading=\"lazy\" alt=\"Better Messages inbox embedded inside the WooCommerce My Account layout\" src=\"https://www.better-messages.com/assets/images/my-account-inbox-embedded-e8cc22935d7a3e69e892b65d84cf19ba.png\" width=\"2126\" height=\"1606\" class=\"img_ev3q\"></p>\n<p>This is enabled at <strong>Better Messages → Settings → General → Messages Location → Show in WooCommerce My Account</strong>.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"settings\">Settings<a href=\"https://www.better-messages.com/blog/woocommerce-customer-chat/#settings\" class=\"hash-link\" aria-label=\"Direct link to Settings\" title=\"Direct link to Settings\" translate=\"no\">​</a></h2>\n<p>Every WooCommerce integration setting lives at <strong>Better Messages → Settings → Integrations → WooCommerce</strong>.</p>\n<p><img decoding=\"async\" loading=\"lazy\" alt=\"Better Messages WooCommerce integration settings\" src=\"https://www.better-messages.com/assets/images/settings-35ce3f61984595f222a7c7b6cf09ff1f.png\" width=\"1844\" height=\"1704\" class=\"img_ev3q\"></p>\n<p>Each button has its own toggle, placement options, and recipient. A button is silently hidden if no recipient is assigned to it.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"installing-better-messages-on-woocommerce\">Installing Better Messages on WooCommerce<a href=\"https://www.better-messages.com/blog/woocommerce-customer-chat/#installing-better-messages-on-woocommerce\" class=\"hash-link\" aria-label=\"Direct link to Installing Better Messages on WooCommerce\" title=\"Direct link to Installing Better Messages on WooCommerce\" translate=\"no\">​</a></h2>\n<ol>\n<li class=\"\">Install <strong><a href=\"https://wordpress.org/plugins/bp-better-messages/\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\">Better Messages from WordPress.org</a></strong> and activate it.</li>\n<li class=\"\">Open <strong>WP Admin → Better Messages → Settings → Integrations → WooCommerce</strong> and toggle <strong>Enable WooCommerce Integration</strong>.</li>\n<li class=\"\">For each button you want active, pick a <strong>Recipient</strong> (the support user who receives the messages).</li>\n<li class=\"\">Optionally pick placements for each button.</li>\n</ol>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"free-vs-websocket-version-for-woocommerce-stores\">Free vs WebSocket version for WooCommerce stores<a href=\"https://www.better-messages.com/blog/woocommerce-customer-chat/#free-vs-websocket-version-for-woocommerce-stores\" class=\"hash-link\" aria-label=\"Direct link to Free vs WebSocket version for WooCommerce stores\" title=\"Direct link to Free vs WebSocket version for WooCommerce stores\" translate=\"no\">​</a></h2>\n<table><thead><tr><th>Feature</th><th style=\"text-align:center\">Free version</th><th style=\"text-align:center\">WebSocket version</th></tr></thead><tbody><tr><td>Product / Cart / Checkout / Order buttons</td><td style=\"text-align:center\">yes</td><td style=\"text-align:center\">yes</td></tr><tr><td>Cart snapshot as a rich message</td><td style=\"text-align:center\">yes</td><td style=\"text-align:center\">yes</td></tr><tr><td>Per-product recipient override</td><td style=\"text-align:center\">yes</td><td style=\"text-align:center\">yes</td></tr><tr><td>Rich product cards from pasted URLs</td><td style=\"text-align:center\">yes</td><td style=\"text-align:center\">yes</td></tr><tr><td>HPOS (High-Performance Order Storage) compatibility</td><td style=\"text-align:center\">yes</td><td style=\"text-align:center\">yes</td></tr><tr><td>Real-time replies</td><td style=\"text-align:center\">polling</td><td style=\"text-align:center\">instant</td></tr><tr><td><strong>Mini-widget popup</strong> (chat appears as an overlay; the cart / checkout page stays visible)</td><td style=\"text-align:center\">—</td><td style=\"text-align:center\">yes</td></tr><tr><td>One-on-one voice and video calls from the support thread</td><td style=\"text-align:center\">—</td><td style=\"text-align:center\">yes</td></tr><tr><td>Group voice and video calls (e.g. customer + multiple agents)</td><td style=\"text-align:center\">—</td><td style=\"text-align:center\">yes</td></tr><tr><td>Web push notifications for new messages</td><td style=\"text-align:center\">—</td><td style=\"text-align:center\">yes</td></tr><tr><td>Guest fallback to mini widget when Messages Location is My Account</td><td style=\"text-align:center\">—</td><td style=\"text-align:center\">yes</td></tr><tr><td>End-to-end encryption (optional per thread)</td><td style=\"text-align:center\">—</td><td style=\"text-align:center\">yes</td></tr></tbody></table>\n<div class=\"theme-admonition theme-admonition-info admonition_xJq3 alert alert--info\"><div class=\"admonitionHeading_Gvgb\"><span class=\"admonitionIcon_Rf37\"><svg viewBox=\"0 0 14 16\"><path fill-rule=\"evenodd\" d=\"M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z\"></path></svg></span>info</div><div class=\"admonitionContent_BuS1\"><p>The mini-widget popup is the single biggest UX change with the WebSocket version on WooCommerce. Without it, every click on a Contact button navigates to the messages page — useful, but it interrupts the shopping flow. With it, the conversation pops up as an overlay and the customer keeps their cart, checkout, or product page visible while chatting with support.</p></div></div>\n<div class=\"theme-admonition theme-admonition-info admonition_xJq3 alert alert--info\"><div class=\"admonitionHeading_Gvgb\"><span class=\"admonitionIcon_Rf37\"><svg viewBox=\"0 0 14 16\"><path fill-rule=\"evenodd\" d=\"M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z\"></path></svg></span>info</div><div class=\"admonitionContent_BuS1\"><p>If guest checkout is enabled and Messages Location is set to <strong>Show in WooCommerce My Account</strong> (a logged-in-only page), the WebSocket version automatically falls back to the popup mini chat for guests — they get a clean inline chat experience without being redirected to wp-login. The free version requires you to either put the messages page on a public WordPress page or disable Guest Chat.</p></div></div>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"frequently-asked-questions\">Frequently asked questions<a href=\"https://www.better-messages.com/blog/woocommerce-customer-chat/#frequently-asked-questions\" class=\"hash-link\" aria-label=\"Direct link to Frequently asked questions\" title=\"Direct link to Frequently asked questions\" translate=\"no\">​</a></h2>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"can-different-products-go-to-different-support-agents\">Can different products go to different support agents?<a href=\"https://www.better-messages.com/blog/woocommerce-customer-chat/#can-different-products-go-to-different-support-agents\" class=\"hash-link\" aria-label=\"Direct link to Can different products go to different support agents?\" title=\"Direct link to Can different products go to different support agents?\" translate=\"no\">​</a></h3>\n<p>Yes — set a global recipient in WooCommerce integration settings, then override it per product from the product edit screen using the <strong>Better Messages Contact</strong> sidebar metabox. Useful when different product categories are handled by different teams.</p>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"does-it-work-with-hpos\">Does it work with HPOS?<a href=\"https://www.better-messages.com/blog/woocommerce-customer-chat/#does-it-work-with-hpos\" class=\"hash-link\" aria-label=\"Direct link to Does it work with HPOS?\" title=\"Direct link to Does it work with HPOS?\" translate=\"no\">​</a></h3>\n<p>Yes — High-Performance Order Storage is supported. Orders are read through WooCommerce's CRUD layer, so HPOS sites work without any extra configuration.</p>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"does-it-work-with-the-modern-cart-and-checkout-blocks\">Does it work with the modern Cart and Checkout blocks?<a href=\"https://www.better-messages.com/blog/woocommerce-customer-chat/#does-it-work-with-the-modern-cart-and-checkout-blocks\" class=\"hash-link\" aria-label=\"Direct link to Does it work with the modern Cart and Checkout blocks?\" title=\"Direct link to Does it work with the modern Cart and Checkout blocks?\" translate=\"no\">​</a></h3>\n<p>Yes — both the legacy <code>[woocommerce_cart]</code> / <code>[woocommerce_checkout]</code> shortcodes and the modern WooCommerce Cart and Checkout blocks are supported.</p>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"will-the-conversation-be-tied-to-the-customers-order-in-wp-admin\">Will the conversation be tied to the customer's order in wp-admin?<a href=\"https://www.better-messages.com/blog/woocommerce-customer-chat/#will-the-conversation-be-tied-to-the-customers-order-in-wp-admin\" class=\"hash-link\" aria-label=\"Direct link to Will the conversation be tied to the customer's order in wp-admin?\" title=\"Direct link to Will the conversation be tied to the customer's order in wp-admin?\" translate=\"no\">​</a></h3>\n<p>Yes — when a customer chats from the order page, the thread is tagged with the order and is reachable from the order screen via the <strong>View order</strong> sidebar link.</p>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"can-guests-use-the-pre-sales-chat\">Can guests use the pre-sales chat?<a href=\"https://www.better-messages.com/blog/woocommerce-customer-chat/#can-guests-use-the-pre-sales-chat\" class=\"hash-link\" aria-label=\"Direct link to Can guests use the pre-sales chat?\" title=\"Direct link to Can guests use the pre-sales chat?\" translate=\"no\">​</a></h3>\n<p>Yes — Guest Chat must be enabled in <strong>Better Messages → Settings → General</strong>. Guests enter a name and email, then chat with support. The thread is preserved if they later register and place an order.</p>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"does-it-work-alongside-other-live-chat-plugins-like-tawk-or-crisp\">Does it work alongside other live-chat plugins like Tawk or Crisp?<a href=\"https://www.better-messages.com/blog/woocommerce-customer-chat/#does-it-work-alongside-other-live-chat-plugins-like-tawk-or-crisp\" class=\"hash-link\" aria-label=\"Direct link to Does it work alongside other live-chat plugins like Tawk or Crisp?\" title=\"Direct link to Does it work alongside other live-chat plugins like Tawk or Crisp?\" translate=\"no\">​</a></h3>\n<p>It can — Better Messages handles on-site customer-to-support chat, and external live-chat widgets handle anonymous visitors. The two do not conflict, though most stores standardize on one to avoid two chat bubbles competing for the customer's attention.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"see-also\">See also<a href=\"https://www.better-messages.com/blog/woocommerce-customer-chat/#see-also\" class=\"hash-link\" aria-label=\"Direct link to See also\" title=\"Direct link to See also\" translate=\"no\">​</a></h2>\n<ul>\n<li class=\"\"><a class=\"\" href=\"https://www.better-messages.com/docs/integrations/woocommerce/\">WooCommerce integration documentation</a> — full setup reference with every option</li>\n<li class=\"\"><a class=\"\" href=\"https://www.better-messages.com/blog/dokan-vendor-chat-plugin/\">Dokan vendor chat plugin</a> — the marketplace counterpart for vendor ↔ customer chat</li>\n<li class=\"\"><a class=\"\" href=\"https://www.better-messages.com/docs/features/realtime-messaging/\">Real-time messaging</a> — what changes with the WebSocket version</li>\n<li class=\"\"><a class=\"\" href=\"https://www.better-messages.com/docs/features/guest-access/\">Guest access</a> — how guest checkout customers chat</li>\n</ul>\n<p><a href=\"https://wordpress.org/plugins/bp-better-messages/\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\"><strong>Install Better Messages from WordPress.org →</strong></a></p>",
            "url": "https://www.better-messages.com/blog/woocommerce-customer-chat/",
            "title": "WooCommerce Customer Chat: Pre-Sales and Order Support",
            "summary": "Add a Contact button to WooCommerce product, cart, checkout, and order pages — customers chat with your support team in one click, cart contents and order details posted as a rich card.",
            "date_modified": "2026-04-15T00:00:00.000Z",
            "author": {
                "name": "Andrij Tkachenko",
                "url": "/docs/getting-started/about"
            },
            "tags": [
                "WooCommerce",
                "Marketplace",
                "Guides"
            ]
        },
        {
            "id": "https://www.better-messages.com/blog/end-to-end-encrypted-wordpress-messaging/",
            "content_html": "<p>Most WordPress messaging plugins store every message in plaintext in the database. Anyone with access to the database — a site admin, a host's support engineer, an attacker who exfiltrates a database backup — can read every conversation. For most sites that is acceptable. For some sites — therapists with clients, lawyers with opposing parties, journalists with sources, founders discussing acquisition terms — it is not. Better Messages 2.13 introduced optional <strong>per-thread end-to-end encryption</strong>: messages are encrypted in the sender's browser, stay encrypted at rest, and are decrypted in the recipient's browser. The database holds ciphertext only.</p>\n<p>This post covers how the encryption works, what stays encrypted versus what does not, the trade-offs, and how to enable it.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"what-end-to-end-means-here\">What end-to-end means here<a href=\"https://www.better-messages.com/blog/end-to-end-encrypted-wordpress-messaging/#what-end-to-end-means-here\" class=\"hash-link\" aria-label=\"Direct link to What end-to-end means here\" title=\"Direct link to What end-to-end means here\" translate=\"no\">​</a></h2>\n<p>End-to-end encryption means the encryption keys never leave the participants' browsers. The server stores ciphertext and public keys; it has no way to decrypt messages.</p>\n<p>Concretely for a Better Messages thread with E2E enabled:</p>\n<ul>\n<li class=\"\">Each participant's browser generates a keypair (public + private). The public key is uploaded to the server. The private key never leaves the device.</li>\n<li class=\"\">A symmetric thread key is generated for the thread, encrypted to every participant's public key, and stored — once per participant — in the database.</li>\n<li class=\"\">Each new message is encrypted with the thread key in the sender's browser before it is sent to the server.</li>\n<li class=\"\">Every recipient's browser decrypts the thread key with their private key, then decrypts each message with the thread key.</li>\n</ul>\n<p>The database stores: ciphertext message bodies, encrypted per-participant copies of the thread key, public keys. The database does <strong>not</strong> store: any private key, any cleartext message body for an encrypted thread.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"what-stays-encrypted\">What stays encrypted<a href=\"https://www.better-messages.com/blog/end-to-end-encrypted-wordpress-messaging/#what-stays-encrypted\" class=\"hash-link\" aria-label=\"Direct link to What stays encrypted\" title=\"Direct link to What stays encrypted\" translate=\"no\">​</a></h2>\n<table><thead><tr><th>Data</th><th style=\"text-align:center\">Encrypted at rest</th></tr></thead><tbody><tr><td>Message body text</td><td style=\"text-align:center\">yes</td></tr><tr><td>File attachments uploaded inside the encrypted thread</td><td style=\"text-align:center\">yes</td></tr><tr><td>Reactions, replies, edits, mentions</td><td style=\"text-align:center\">yes</td></tr><tr><td>Thread participant list</td><td style=\"text-align:center\">no</td></tr><tr><td>Thread title / subject</td><td style=\"text-align:center\">no</td></tr><tr><td>Timestamps</td><td style=\"text-align:center\">no</td></tr><tr><td>User identities</td><td style=\"text-align:center\">no</td></tr><tr><td>Read state</td><td style=\"text-align:center\">no</td></tr></tbody></table>\n<p>The trade-off: an admin with database access can still see <em>who</em> talked to <em>whom</em> and <em>when</em>. They cannot see <em>what</em> was said.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"what-you-give-up-to-use-e2e\">What you give up to use E2E<a href=\"https://www.better-messages.com/blog/end-to-end-encrypted-wordpress-messaging/#what-you-give-up-to-use-e2e\" class=\"hash-link\" aria-label=\"Direct link to What you give up to use E2E\" title=\"Direct link to What you give up to use E2E\" translate=\"no\">​</a></h2>\n<p>End-to-end encryption is a trade-off. Some features have to be turned off for an E2E thread because they require the server to read message content:</p>\n<ul>\n<li class=\"\"><strong>Server-side search</strong> — the search index cannot include encrypted bodies, so search on E2E threads is browser-only and only covers messages already decrypted on the device.</li>\n<li class=\"\"><strong>Email notification preview</strong> — email notifications for E2E threads carry a generic \"new encrypted message\" line, not the message body.</li>\n<li class=\"\"><strong>AI bots in the thread</strong> — AI bots are server-side actors; they cannot participate in an E2E thread.</li>\n<li class=\"\"><strong>Server-side moderation hooks</strong> — pre-moderation, bad-words filter, content scanning, and the bot-detection layer all bypass E2E threads.</li>\n</ul>\n<p>For most threads on most sites, none of these trade-offs matter. For the threads that need encryption, those compromises are usually exactly what you want.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"per-thread-not-per-site\">Per-thread, not per-site<a href=\"https://www.better-messages.com/blog/end-to-end-encrypted-wordpress-messaging/#per-thread-not-per-site\" class=\"hash-link\" aria-label=\"Direct link to Per-thread, not per-site\" title=\"Direct link to Per-thread, not per-site\" translate=\"no\">​</a></h2>\n<p>E2E is enabled per thread, not per site. The same Better Messages installation can host:</p>\n<ul>\n<li class=\"\">Public chat rooms (no encryption, full search and moderation)</li>\n<li class=\"\">Standard private threads (no encryption, full features)</li>\n<li class=\"\">E2E-encrypted private threads (encryption on, server-side features off for those threads)</li>\n</ul>\n<p>A user starts an E2E-encrypted thread the same way they start a regular thread, then toggles encryption on for that thread. The toggle is one-way: once a thread is encrypted you cannot unencrypt the historical messages (the server never had the cleartext).</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"enabling-e2e-on-the-site\">Enabling E2E on the site<a href=\"https://www.better-messages.com/blog/end-to-end-encrypted-wordpress-messaging/#enabling-e2e-on-the-site\" class=\"hash-link\" aria-label=\"Direct link to Enabling E2E on the site\" title=\"Direct link to Enabling E2E on the site\" translate=\"no\">​</a></h2>\n<p>Encryption is available on the <strong>WebSocket version</strong>. Two things to configure:</p>\n<ol>\n<li class=\"\"><strong>Better Messages → Settings → General → Encryption</strong> — global on / off for the encryption capability. When off, the encryption toggle on individual threads is hidden.</li>\n<li class=\"\"><strong>Permissions → \"Allow encrypted threads\"</strong> — per-role control. You can let only certain roles start encrypted threads (e.g. paid members, staff).</li>\n</ol>\n<p>Once both are configured, the thread sidebar shows a lock icon that users toggle to encrypt the thread.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"performance\">Performance<a href=\"https://www.better-messages.com/blog/end-to-end-encrypted-wordpress-messaging/#performance\" class=\"hash-link\" aria-label=\"Direct link to Performance\" title=\"Direct link to Performance\" translate=\"no\">​</a></h2>\n<p>Encryption adds CPU work on the sender and receiver, not on the server. For typical text messages on modern devices the overhead is imperceptible. For large attachments the encryption pass is noticeable but still under a second.</p>\n<p>The plugin lazy-loads the crypto bundle on the first encrypted thread interaction, so the page-weight cost is only paid by users who actually use the feature.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"who-needs-this\">Who needs this<a href=\"https://www.better-messages.com/blog/end-to-end-encrypted-wordpress-messaging/#who-needs-this\" class=\"hash-link\" aria-label=\"Direct link to Who needs this\" title=\"Direct link to Who needs this\" translate=\"no\">​</a></h2>\n<p>E2E is the right tool when:</p>\n<ul>\n<li class=\"\">You handle data that has a legal classification (HIPAA-adjacent health info, attorney-client privilege, PII under GDPR Article 9).</li>\n<li class=\"\">You handle data whose disclosure would cause direct harm (journalists with sources, security teams with vulnerability reports).</li>\n<li class=\"\">You promise users that no one — including you — can read their messages.</li>\n</ul>\n<p>E2E is over-engineering when:</p>\n<ul>\n<li class=\"\">Your site is a community / marketplace / LMS and the conversations are not unusually sensitive.</li>\n<li class=\"\">You want server-side search across all threads.</li>\n<li class=\"\">You rely on AI bots, moderation, or bad-words filtering for every thread.</li>\n</ul>\n<p>If only some threads in a community fit the first category, that is exactly the right shape: leave E2E disabled by default and let the relevant roles toggle it on per thread.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"frequently-asked-questions\">Frequently asked questions<a href=\"https://www.better-messages.com/blog/end-to-end-encrypted-wordpress-messaging/#frequently-asked-questions\" class=\"hash-link\" aria-label=\"Direct link to Frequently asked questions\" title=\"Direct link to Frequently asked questions\" translate=\"no\">​</a></h2>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"can-i-recover-messages-if-i-lose-my-private-key\">Can I recover messages if I lose my private key?<a href=\"https://www.better-messages.com/blog/end-to-end-encrypted-wordpress-messaging/#can-i-recover-messages-if-i-lose-my-private-key\" class=\"hash-link\" aria-label=\"Direct link to Can I recover messages if I lose my private key?\" title=\"Direct link to Can I recover messages if I lose my private key?\" translate=\"no\">​</a></h3>\n<p>No — by design. If a user clears browser storage on every device, their private key is lost and any encrypted thread they participate in becomes unreadable for them. This is the trade-off of true end-to-end encryption.</p>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"does-it-work-with-the-mobile-app\">Does it work with the mobile app?<a href=\"https://www.better-messages.com/blog/end-to-end-encrypted-wordpress-messaging/#does-it-work-with-the-mobile-app\" class=\"hash-link\" aria-label=\"Direct link to Does it work with the mobile app?\" title=\"Direct link to Does it work with the mobile app?\" translate=\"no\">​</a></h3>\n<p>Yes — the mobile app generates and stores the private key on the device. Switching devices requires a key transfer.</p>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"is-encryption-fips-validated\">Is encryption FIPS-validated?<a href=\"https://www.better-messages.com/blog/end-to-end-encrypted-wordpress-messaging/#is-encryption-fips-validated\" class=\"hash-link\" aria-label=\"Direct link to Is encryption FIPS-validated?\" title=\"Direct link to Is encryption FIPS-validated?\" translate=\"no\">​</a></h3>\n<p>The browser's Web Crypto API uses NIST-standard primitives (P-256, AES-GCM). It is not FIPS-validated as a cryptographic module. If FIPS validation is a contractual requirement, talk to support before relying on Better Messages E2E.</p>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"can-i-export-an-encrypted-thread-for-compliance--discovery\">Can I export an encrypted thread for compliance / discovery?<a href=\"https://www.better-messages.com/blog/end-to-end-encrypted-wordpress-messaging/#can-i-export-an-encrypted-thread-for-compliance--discovery\" class=\"hash-link\" aria-label=\"Direct link to Can I export an encrypted thread for compliance / discovery?\" title=\"Direct link to Can I export an encrypted thread for compliance / discovery?\" translate=\"no\">​</a></h3>\n<p>Yes — participants in the thread can export the decrypted thread from their browser. The server cannot perform the export, by design.</p>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"what-happens-if-a-new-member-joins-an-existing-encrypted-thread\">What happens if a new member joins an existing encrypted thread?<a href=\"https://www.better-messages.com/blog/end-to-end-encrypted-wordpress-messaging/#what-happens-if-a-new-member-joins-an-existing-encrypted-thread\" class=\"hash-link\" aria-label=\"Direct link to What happens if a new member joins an existing encrypted thread?\" title=\"Direct link to What happens if a new member joins an existing encrypted thread?\" translate=\"no\">​</a></h3>\n<p>When a new participant joins, every existing participant's browser re-encrypts the thread key to the new participant's public key. The new member can read messages sent <em>after</em> their join, not historical ones — unless an existing participant explicitly shares historical content.</p>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"does-it-work-with-file-uploads\">Does it work with file uploads?<a href=\"https://www.better-messages.com/blog/end-to-end-encrypted-wordpress-messaging/#does-it-work-with-file-uploads\" class=\"hash-link\" aria-label=\"Direct link to Does it work with file uploads?\" title=\"Direct link to Does it work with file uploads?\" translate=\"no\">​</a></h3>\n<p>Yes — file attachments in an E2E thread are encrypted before upload. The server stores ciphertext; recipients decrypt the file on download.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"see-also\">See also<a href=\"https://www.better-messages.com/blog/end-to-end-encrypted-wordpress-messaging/#see-also\" class=\"hash-link\" aria-label=\"Direct link to See also\" title=\"Direct link to See also\" translate=\"no\">​</a></h2>\n<ul>\n<li class=\"\"><a class=\"\" href=\"https://www.better-messages.com/docs/features/privacy-gdpr/\">Privacy &amp; GDPR</a> — site-wide privacy controls (separate from per-thread E2E)</li>\n<li class=\"\"><a class=\"\" href=\"https://www.better-messages.com/docs/features/realtime-messaging/\">Real-time messaging</a> — what the WebSocket version unlocks (E2E lives here)</li>\n<li class=\"\"><a class=\"\" href=\"https://www.better-messages.com/docs/features/role-based-access/\">Role-based access</a> — gating who can start encrypted threads</li>\n</ul>\n<p><a href=\"https://wordpress.org/plugins/bp-better-messages/\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\"><strong>Install Better Messages from WordPress.org →</strong></a></p>",
            "url": "https://www.better-messages.com/blog/end-to-end-encrypted-wordpress-messaging/",
            "title": "End-to-End Encrypted Messaging on WordPress",
            "summary": "Optional per-thread end-to-end encryption for Better Messages — encryption keys never leave the participants' browsers, database row contents are unreadable to admins, and the rest of the messenger keeps working unchanged.",
            "date_modified": "2026-03-08T00:00:00.000Z",
            "author": {
                "name": "Andrij Tkachenko",
                "url": "/docs/getting-started/about"
            },
            "tags": [
                "Encryption",
                "WebSocket",
                "Guides"
            ]
        },
        {
            "id": "https://www.better-messages.com/blog/suredash-messaging-plugin/",
            "content_html": "<p>SureDash is the SureCart team's portal / community platform — a Discord-style hub built around discussions, with sidebar nav, profiles, and a clean modern UI. It does not ship with a real-time messenger. Better Messages adds one that hooks into every SureDash surface: a Messages page embedded inside the portal, a Private Message button on every profile, audio and video call buttons, a compact message icon next to post authors in discussions, and a sidebar Messages link with a live unread counter.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"what-better-messages-adds-to-suredash\">What Better Messages adds to SureDash<a href=\"https://www.better-messages.com/blog/suredash-messaging-plugin/#what-better-messages-adds-to-suredash\" class=\"hash-link\" aria-label=\"Direct link to What Better Messages adds to SureDash\" title=\"Direct link to What Better Messages adds to SureDash\" translate=\"no\">​</a></h2>\n<p>Once Better Messages is installed and the SureDash integration is enabled under <strong>Better Messages → Settings → Integrations → SureDash</strong>:</p>\n<ul>\n<li class=\"\"><strong>Messages page embedded inside the SureDash portal</strong> — same layout as the rest of the portal.</li>\n<li class=\"\"><strong>Private Message button on every SureDash user profile</strong>.</li>\n<li class=\"\"><strong>Compact message icon next to post and comment authors in discussions</strong> — DM the author of a comment without leaving the discussion thread.</li>\n<li class=\"\"><strong>Messages link with unread counter in the SureDash sidebar nav</strong>.</li>\n<li class=\"\"><strong>Messages link with unread counter in the SureDash user profile dropdown</strong>.</li>\n<li class=\"\"><strong>SureDash avatars and profile links</strong> used throughout the messenger.</li>\n<li class=\"\"><strong>Automatic dark / light mode switch</strong> following the SureDash portal setting.</li>\n<li class=\"\"><strong>Audio and Video Call buttons on user profiles</strong> (WebSocket version).</li>\n</ul>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"installing-better-messages-on-a-suredash-site\">Installing Better Messages on a SureDash site<a href=\"https://www.better-messages.com/blog/suredash-messaging-plugin/#installing-better-messages-on-a-suredash-site\" class=\"hash-link\" aria-label=\"Direct link to Installing Better Messages on a SureDash site\" title=\"Direct link to Installing Better Messages on a SureDash site\" translate=\"no\">​</a></h2>\n<ol>\n<li class=\"\">Install <strong><a href=\"https://wordpress.org/plugins/bp-better-messages/\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\">Better Messages from WordPress.org</a></strong> and activate it.</li>\n<li class=\"\">Open <strong>WP Admin → Better Messages → Settings → General</strong> and set <strong>Messages Location</strong> to <strong>Show in SureDash Portal</strong>.</li>\n<li class=\"\">Open <strong>WP Admin → Better Messages → Settings → Integrations → SureDash</strong> and configure the integration.</li>\n</ol>\n<p>The SureDash integration tab only appears when the SureDash plugin is active.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"free-vs-websocket-version-for-suredash-portals\">Free vs WebSocket version for SureDash portals<a href=\"https://www.better-messages.com/blog/suredash-messaging-plugin/#free-vs-websocket-version-for-suredash-portals\" class=\"hash-link\" aria-label=\"Direct link to Free vs WebSocket version for SureDash portals\" title=\"Direct link to Free vs WebSocket version for SureDash portals\" translate=\"no\">​</a></h2>\n<table><thead><tr><th>Feature</th><th style=\"text-align:center\">Free version</th><th style=\"text-align:center\">WebSocket version</th></tr></thead><tbody><tr><td>Messages embedded inside the SureDash portal</td><td style=\"text-align:center\">yes</td><td style=\"text-align:center\">yes</td></tr><tr><td>Private Message button on profiles</td><td style=\"text-align:center\">yes</td><td style=\"text-align:center\">yes</td></tr><tr><td>Message icon next to post / comment authors</td><td style=\"text-align:center\">yes</td><td style=\"text-align:center\">yes</td></tr><tr><td>Sidebar Messages link + unread counter</td><td style=\"text-align:center\">yes</td><td style=\"text-align:center\">yes</td></tr><tr><td>Profile dropdown Messages link + unread counter</td><td style=\"text-align:center\">yes</td><td style=\"text-align:center\">yes</td></tr><tr><td>SureDash avatars and profile links</td><td style=\"text-align:center\">yes</td><td style=\"text-align:center\">yes</td></tr><tr><td>Dark / light mode mirror from SureDash</td><td style=\"text-align:center\">yes</td><td style=\"text-align:center\">yes</td></tr><tr><td>Real-time delivery</td><td style=\"text-align:center\">polling</td><td style=\"text-align:center\">instant</td></tr><tr><td>Audio and Video Call buttons on profiles</td><td style=\"text-align:center\">—</td><td style=\"text-align:center\">yes</td></tr><tr><td>Group voice and video calls inside threads</td><td style=\"text-align:center\">—</td><td style=\"text-align:center\">yes</td></tr><tr><td>Web push notifications for new messages</td><td style=\"text-align:center\">—</td><td style=\"text-align:center\">yes</td></tr><tr><td>Read receipts</td><td style=\"text-align:center\">—</td><td style=\"text-align:center\">yes</td></tr><tr><td>End-to-end encryption (optional)</td><td style=\"text-align:center\">—</td><td style=\"text-align:center\">yes</td></tr></tbody></table>\n<div class=\"theme-admonition theme-admonition-info admonition_xJq3 alert alert--info\"><div class=\"admonitionHeading_Gvgb\"><span class=\"admonitionIcon_Rf37\"><svg viewBox=\"0 0 14 16\"><path fill-rule=\"evenodd\" d=\"M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z\"></path></svg></span>info</div><div class=\"admonitionContent_BuS1\"><p>SureDash is built for active portal communities — the WebSocket version's audio / video call buttons turn member profiles into a one-click meetup surface, and web push pulls members back into the portal when the tab is closed.</p></div></div>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"frequently-asked-questions\">Frequently asked questions<a href=\"https://www.better-messages.com/blog/suredash-messaging-plugin/#frequently-asked-questions\" class=\"hash-link\" aria-label=\"Direct link to Frequently asked questions\" title=\"Direct link to Frequently asked questions\" translate=\"no\">​</a></h2>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"does-suredash-have-its-own-messaging-that-i-should-disable\">Does SureDash have its own messaging that I should disable?<a href=\"https://www.better-messages.com/blog/suredash-messaging-plugin/#does-suredash-have-its-own-messaging-that-i-should-disable\" class=\"hash-link\" aria-label=\"Direct link to Does SureDash have its own messaging that I should disable?\" title=\"Direct link to Does SureDash have its own messaging that I should disable?\" translate=\"no\">​</a></h3>\n<p>SureDash does not ship with a separate messenger — Better Messages adds the layer cleanly without a conflict.</p>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"will-the-dark-mode-switch-follow-my-suredash-settings-exactly\">Will the dark-mode switch follow my SureDash settings exactly?<a href=\"https://www.better-messages.com/blog/suredash-messaging-plugin/#will-the-dark-mode-switch-follow-my-suredash-settings-exactly\" class=\"hash-link\" aria-label=\"Direct link to Will the dark-mode switch follow my SureDash settings exactly?\" title=\"Direct link to Will the dark-mode switch follow my SureDash settings exactly?\" translate=\"no\">​</a></h3>\n<p>Yes — Better Messages mirrors the SureDash portal's active mode (light / dark / system). When SureDash flips, Better Messages flips with it.</p>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"can-i-configure-messaging-permissions-by-suredash-community--space\">Can I configure messaging permissions by SureDash community / Space?<a href=\"https://www.better-messages.com/blog/suredash-messaging-plugin/#can-i-configure-messaging-permissions-by-suredash-community--space\" class=\"hash-link\" aria-label=\"Direct link to Can I configure messaging permissions by SureDash community / Space?\" title=\"Direct link to Can I configure messaging permissions by SureDash community / Space?\" translate=\"no\">​</a></h3>\n<p>SureDash Spaces map to WordPress roles or to SureDash's own community capability flags, which Better Messages reads via its permissions layer. Configure restrictions in <strong>Better Messages → Settings → Permissions</strong>.</p>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"are-suredash-profile-call-buttons-hidden-for-non-friends\">Are SureDash profile call buttons hidden for non-friends?<a href=\"https://www.better-messages.com/blog/suredash-messaging-plugin/#are-suredash-profile-call-buttons-hidden-for-non-friends\" class=\"hash-link\" aria-label=\"Direct link to Are SureDash profile call buttons hidden for non-friends?\" title=\"Direct link to Are SureDash profile call buttons hidden for non-friends?\" translate=\"no\">​</a></h3>\n<p>The Audio and Video Call buttons have a <strong>friends-only</strong> option in <strong>Better Messages → Settings → Calls</strong> — when enabled, the buttons are hidden for users who are not connected.</p>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"will-the-sidebar-messages-link-respect-suredashs-sidebar-customization\">Will the sidebar Messages link respect SureDash's sidebar customization?<a href=\"https://www.better-messages.com/blog/suredash-messaging-plugin/#will-the-sidebar-messages-link-respect-suredashs-sidebar-customization\" class=\"hash-link\" aria-label=\"Direct link to Will the sidebar Messages link respect SureDash's sidebar customization?\" title=\"Direct link to Will the sidebar Messages link respect SureDash's sidebar customization?\" translate=\"no\">​</a></h3>\n<p>Yes — the link is registered through SureDash's standard sidebar API. Reordering and theming follow SureDash's conventions.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"see-also\">See also<a href=\"https://www.better-messages.com/blog/suredash-messaging-plugin/#see-also\" class=\"hash-link\" aria-label=\"Direct link to See also\" title=\"Direct link to See also\" translate=\"no\">​</a></h2>\n<ul>\n<li class=\"\"><a class=\"\" href=\"https://www.better-messages.com/docs/integrations/suredash/\">SureDash integration documentation</a> — full setup reference</li>\n<li class=\"\"><a class=\"\" href=\"https://www.better-messages.com/blog/wordpress-community-chat-plugin/\">WordPress community chat plugin</a> — comparing community platforms</li>\n<li class=\"\"><a class=\"\" href=\"https://www.better-messages.com/blog/fluentcommunity-chat-plugin/\">FluentCommunity chat plugin</a> — the closest peer for portal-style communities</li>\n</ul>\n<p><a href=\"https://wordpress.org/plugins/bp-better-messages/\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\"><strong>Install Better Messages from WordPress.org →</strong></a></p>",
            "url": "https://www.better-messages.com/blog/suredash-messaging-plugin/",
            "title": "SureDash Messaging Plugin: Real-Time Chat for SureDash Portals",
            "summary": "Add real-time chat to a SureDash portal — Messages embedded in the portal, Private Message button on every profile, video and audio call buttons, sidebar nav with unread counter, dark mode mirror.",
            "date_modified": "2026-03-01T00:00:00.000Z",
            "author": {
                "name": "Andrij Tkachenko",
                "url": "/docs/getting-started/about"
            },
            "tags": [
                "SureDash",
                "Community",
                "Guides"
            ]
        },
        {
            "id": "https://www.better-messages.com/blog/wc-vendors-chat/",
            "content_html": "<p>WC Vendors is the classic-ecommerce multi-vendor option for WooCommerce — a smaller plugin footprint than Dokan or WCFM, focused on the storefront rather than a full vendor portal. The free version of WC Vendors gives vendors a shop with no chat. The Pro version adds a vendor dashboard but no built-in messenger. Better Messages adds buyer ↔ vendor chat on top of both: a Live Chat button on every vendor product page, on the vendor store page on classic themes, and a Messages tab on the WC Vendors Pro Vendor Dashboard.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"what-better-messages-adds-to-wc-vendors\">What Better Messages adds to WC Vendors<a href=\"https://www.better-messages.com/blog/wc-vendors-chat/#what-better-messages-adds-to-wc-vendors\" class=\"hash-link\" aria-label=\"Direct link to What Better Messages adds to WC Vendors\" title=\"Direct link to What Better Messages adds to WC Vendors\" translate=\"no\">​</a></h2>\n<p>Once Better Messages is installed and the WC Vendors integration is enabled under <strong>Better Messages → Settings → Integrations → WooCommerce</strong>:</p>\n<ul>\n<li class=\"\"><strong>Live Chat button on every vendor product page</strong> with product-card context inside the thread.</li>\n<li class=\"\"><strong>Live Chat button on the vendor store page</strong> (classic themes via <code>wcvendors_after_main_header</code>; block themes via shortcode).</li>\n<li class=\"\"><strong>Per-vendor toggle</strong> — vendors enable Live Chat per store in their Shop Settings.</li>\n<li class=\"\"><strong>Vendor avatars and links</strong> in the messenger pulled from WC Vendors shop profiles.</li>\n<li class=\"\"><strong>Messages tab in the WC Vendors Pro Vendor Dashboard</strong> — Pro vendors get a dedicated inbox with a live unread counter (free WC Vendors does not provide a custom dashboard, so the chat lives on store and product pages instead).</li>\n</ul>\n<p><img decoding=\"async\" loading=\"lazy\" alt=\"Live Chat button on a WC Vendors product page\" src=\"https://www.better-messages.com/assets/images/product-page-fb73493665bdd48f249ec34793edecfe.png\" width=\"960\" height=\"792\" class=\"img_ev3q\"></p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"free-wc-vendors-vs-wc-vendors-pro\">Free WC Vendors vs WC Vendors Pro<a href=\"https://www.better-messages.com/blog/wc-vendors-chat/#free-wc-vendors-vs-wc-vendors-pro\" class=\"hash-link\" aria-label=\"Direct link to Free WC Vendors vs WC Vendors Pro\" title=\"Direct link to Free WC Vendors vs WC Vendors Pro\" translate=\"no\">​</a></h2>\n<table><thead><tr><th>Surface</th><th style=\"text-align:center\">Free WC Vendors</th><th style=\"text-align:center\">WC Vendors Pro</th></tr></thead><tbody><tr><td>Live Chat button on product pages</td><td style=\"text-align:center\">yes</td><td style=\"text-align:center\">yes</td></tr><tr><td>Live Chat button on store pages (classic themes)</td><td style=\"text-align:center\">yes</td><td style=\"text-align:center\">yes</td></tr><tr><td>Live Chat button on store pages (block themes, shortcode)</td><td style=\"text-align:center\">yes</td><td style=\"text-align:center\">yes</td></tr><tr><td>Vendor Dashboard Messages tab</td><td style=\"text-align:center\">—</td><td style=\"text-align:center\">yes</td></tr><tr><td>Per-vendor Live Chat toggle</td><td style=\"text-align:center\">yes (Shop Settings)</td><td style=\"text-align:center\">yes (Shop Settings)</td></tr></tbody></table>\n<p>Free WC Vendors does not provide a custom vendor dashboard — vendors handle store admin from wp-admin. With Pro, the dedicated Messages tab keeps vendors inside the storefront when replying.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"live-chat-on-classic-vs-block-themes\">Live Chat on classic vs block themes<a href=\"https://www.better-messages.com/blog/wc-vendors-chat/#live-chat-on-classic-vs-block-themes\" class=\"hash-link\" aria-label=\"Direct link to Live Chat on classic vs block themes\" title=\"Direct link to Live Chat on classic vs block themes\" translate=\"no\">​</a></h2>\n<p>The button auto-renders on classic theme storefronts (such as Storefront) via the <code>wcvendors_after_main_header</code> template hook. Block themes do not fire this hook — on those, place the button manually with the shortcode:</p>\n<div class=\"language-text codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#393A34;--prism-background-color:#f6f8fa\"><div class=\"codeBlockContent_QJqH\"><pre tabindex=\"0\" class=\"prism-code language-text codeBlock_bY9V thin-scrollbar\" style=\"color:#393A34;background-color:#f6f8fa\"><code class=\"codeBlockLines_e6Vv\"><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">[better_messages_wc_vendors_store_button]</span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">[better_messages_wc_vendors_product_button]</span><br></span></code></pre></div></div>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"installing-better-messages-on-a-wc-vendors-site\">Installing Better Messages on a WC Vendors site<a href=\"https://www.better-messages.com/blog/wc-vendors-chat/#installing-better-messages-on-a-wc-vendors-site\" class=\"hash-link\" aria-label=\"Direct link to Installing Better Messages on a WC Vendors site\" title=\"Direct link to Installing Better Messages on a WC Vendors site\" translate=\"no\">​</a></h2>\n<ol>\n<li class=\"\">Install <strong><a href=\"https://wordpress.org/plugins/bp-better-messages/\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\">Better Messages from WordPress.org</a></strong> and activate it.</li>\n<li class=\"\">Make sure WC Vendors is active (free or Pro).</li>\n<li class=\"\">Open <strong>WP Admin → Better Messages → Settings → Integrations → WooCommerce</strong>.</li>\n<li class=\"\">Find <strong>WC Vendors Integration</strong> and toggle <strong>Enable Vendor Live Chat</strong>.</li>\n</ol>\n<p><img decoding=\"async\" loading=\"lazy\" alt=\"WC Vendors integration settings\" src=\"https://www.better-messages.com/assets/images/settings-e6fae68e333e2556f6e278aa060073cf.png\" width=\"1800\" height=\"284\" class=\"img_ev3q\"></p>\n<p>Vendors then enable Live Chat for their store under <strong>Shop Settings → Live Chats</strong>.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"free-vs-websocket-version-for-wc-vendors-stores\">Free vs WebSocket version for WC Vendors stores<a href=\"https://www.better-messages.com/blog/wc-vendors-chat/#free-vs-websocket-version-for-wc-vendors-stores\" class=\"hash-link\" aria-label=\"Direct link to Free vs WebSocket version for WC Vendors stores\" title=\"Direct link to Free vs WebSocket version for WC Vendors stores\" translate=\"no\">​</a></h2>\n<table><thead><tr><th>Feature</th><th style=\"text-align:center\">Free version</th><th style=\"text-align:center\">WebSocket version</th></tr></thead><tbody><tr><td>Live Chat button on product / store pages</td><td style=\"text-align:center\">yes</td><td style=\"text-align:center\">yes</td></tr><tr><td>Messages tab in WC Vendors Pro dashboard</td><td style=\"text-align:center\">yes</td><td style=\"text-align:center\">yes</td></tr><tr><td>Per-vendor enable / disable</td><td style=\"text-align:center\">yes</td><td style=\"text-align:center\">yes</td></tr><tr><td>Product card context in threads</td><td style=\"text-align:center\">yes</td><td style=\"text-align:center\">yes</td></tr><tr><td>Real-time delivery</td><td style=\"text-align:center\">polling</td><td style=\"text-align:center\">instant</td></tr><tr><td>Mini-widget popup chat</td><td style=\"text-align:center\">—</td><td style=\"text-align:center\">yes</td></tr><tr><td>One-on-one voice and video calls inside the thread</td><td style=\"text-align:center\">—</td><td style=\"text-align:center\">yes</td></tr><tr><td>Group voice and video calls (vendor team)</td><td style=\"text-align:center\">—</td><td style=\"text-align:center\">yes</td></tr><tr><td>Web push notifications for new messages</td><td style=\"text-align:center\">—</td><td style=\"text-align:center\">yes</td></tr><tr><td>Read receipts</td><td style=\"text-align:center\">—</td><td style=\"text-align:center\">yes</td></tr><tr><td>End-to-end encryption (optional)</td><td style=\"text-align:center\">—</td><td style=\"text-align:center\">yes</td></tr></tbody></table>\n<div class=\"theme-admonition theme-admonition-info admonition_xJq3 alert alert--info\"><div class=\"admonitionHeading_Gvgb\"><span class=\"admonitionIcon_Rf37\"><svg viewBox=\"0 0 14 16\"><path fill-rule=\"evenodd\" d=\"M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z\"></path></svg></span>info</div><div class=\"admonitionContent_BuS1\"><p>For WC Vendors stores running on the free plugin (no vendor dashboard), the WebSocket version's mini-widget popup is the difference between losing the customer when they click Live Chat (navigated away) and keeping them on the product page where they were considering checkout.</p></div></div>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"frequently-asked-questions\">Frequently asked questions<a href=\"https://www.better-messages.com/blog/wc-vendors-chat/#frequently-asked-questions\" class=\"hash-link\" aria-label=\"Direct link to Frequently asked questions\" title=\"Direct link to Frequently asked questions\" translate=\"no\">​</a></h2>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"does-it-work-with-wc-vendors-pro-memberships\">Does it work with WC Vendors Pro Memberships?<a href=\"https://www.better-messages.com/blog/wc-vendors-chat/#does-it-work-with-wc-vendors-pro-memberships\" class=\"hash-link\" aria-label=\"Direct link to Does it work with WC Vendors Pro Memberships?\" title=\"Direct link to Does it work with WC Vendors Pro Memberships?\" translate=\"no\">​</a></h3>\n<p>Yes — Better Messages reads vendor capability flags, which Pro Memberships sets the same way as Pro itself.</p>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"can-vendors-message-each-other\">Can vendors message each other?<a href=\"https://www.better-messages.com/blog/wc-vendors-chat/#can-vendors-message-each-other\" class=\"hash-link\" aria-label=\"Direct link to Can vendors message each other?\" title=\"Direct link to Can vendors message each other?\" translate=\"no\">​</a></h3>\n<p>Yes — the Better Messages inbox is a full messenger. Vendors can also be added to group conversations for marketplace-wide announcements.</p>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"what-if-my-theme-is-a-block-theme\">What if my theme is a block theme?<a href=\"https://www.better-messages.com/blog/wc-vendors-chat/#what-if-my-theme-is-a-block-theme\" class=\"hash-link\" aria-label=\"Direct link to What if my theme is a block theme?\" title=\"Direct link to What if my theme is a block theme?\" translate=\"no\">​</a></h3>\n<p>The store-page button needs a manual shortcode placement on block themes (block themes do not fire the legacy <code>wcvendors_after_main_header</code> hook). Product-page buttons render on both classic and block themes.</p>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"does-it-work-alongside-wc-vendors-stripe-payment-add-ons\">Does it work alongside WC Vendors Stripe payment add-ons?<a href=\"https://www.better-messages.com/blog/wc-vendors-chat/#does-it-work-alongside-wc-vendors-stripe-payment-add-ons\" class=\"hash-link\" aria-label=\"Direct link to Does it work alongside WC Vendors Stripe payment add-ons?\" title=\"Direct link to Does it work alongside WC Vendors Stripe payment add-ons?\" translate=\"no\">​</a></h3>\n<p>Yes — the integration listens to WC Vendors' core vendor capability flags, which payment add-ons extend rather than replace.</p>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"can-guests-start-a-thread\">Can guests start a thread?<a href=\"https://www.better-messages.com/blog/wc-vendors-chat/#can-guests-start-a-thread\" class=\"hash-link\" aria-label=\"Direct link to Can guests start a thread?\" title=\"Direct link to Can guests start a thread?\" translate=\"no\">​</a></h3>\n<p>Yes if <strong>Guest Chat</strong> is enabled in <strong>Better Messages → Settings → Guest Chat</strong>. Guest checkout customers can chat with vendors and the thread is preserved if they later register.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"see-also\">See also<a href=\"https://www.better-messages.com/blog/wc-vendors-chat/#see-also\" class=\"hash-link\" aria-label=\"Direct link to See also\" title=\"Direct link to See also\" translate=\"no\">​</a></h2>\n<ul>\n<li class=\"\"><a class=\"\" href=\"https://www.better-messages.com/docs/integrations/wc-vendors/\">WC Vendors integration documentation</a> — full setup reference</li>\n<li class=\"\"><a class=\"\" href=\"https://www.better-messages.com/blog/wordpress-marketplace-chat/\">WordPress marketplace chat</a> — comparing Dokan, WCFM, WC Vendors, MultiVendorX</li>\n<li class=\"\"><a class=\"\" href=\"https://www.better-messages.com/blog/dokan-vendor-chat-plugin/\">Dokan vendor chat plugin</a></li>\n<li class=\"\"><a class=\"\" href=\"https://www.better-messages.com/blog/woocommerce-customer-chat/\">WooCommerce customer chat</a> — for stores without a multi-vendor layer</li>\n</ul>\n<p><a href=\"https://wordpress.org/plugins/bp-better-messages/\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\"><strong>Install Better Messages from WordPress.org →</strong></a></p>",
            "url": "https://www.better-messages.com/blog/wc-vendors-chat/",
            "title": "WC Vendors Chat: Buyer ↔ Vendor Messaging Plugin",
            "summary": "Add real-time chat between WC Vendors marketplace vendors and customers — Live Chat button on every vendor product, vendor store page, and Messages tab on WC Vendors Pro dashboards.",
            "date_modified": "2026-02-27T00:00:00.000Z",
            "author": {
                "name": "Andrij Tkachenko",
                "url": "/docs/getting-started/about"
            },
            "tags": [
                "WC Vendors",
                "Marketplace",
                "Guides"
            ]
        },
        {
            "id": "https://www.better-messages.com/blog/wcfm-marketplace-chat/",
            "content_html": "<p>WCFM Marketplace is the most-customizable multi-vendor plugin for WooCommerce — it ships with its own front-end dashboard, store-builder, and vendor membership system. Better Messages adds a modern real-time buyer ↔ vendor chat to WCFM: a Live Chat button on every WCFM vendor product page, a Messages menu inside the WCFM Vendor Dashboard with a live unread counter, and product-card context inside threads started from product pages.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"what-better-messages-adds-to-wcfm-marketplace\">What Better Messages adds to WCFM Marketplace<a href=\"https://www.better-messages.com/blog/wcfm-marketplace-chat/#what-better-messages-adds-to-wcfm-marketplace\" class=\"hash-link\" aria-label=\"Direct link to What Better Messages adds to WCFM Marketplace\" title=\"Direct link to What Better Messages adds to WCFM Marketplace\" translate=\"no\">​</a></h2>\n<p>Once Better Messages is installed and the WCFM Marketplace integration is enabled under <strong>Better Messages → Settings → Integrations → WooCommerce</strong>:</p>\n<ul>\n<li class=\"\"><strong>Live Chat button on every vendor product page</strong> — customers ask a question before adding to cart.</li>\n<li class=\"\"><strong>Live Chat button on the vendor store page</strong> — customers browsing a vendor's full catalog can start a thread without picking a product.</li>\n<li class=\"\"><strong>Messages menu in the WCFM Vendor Dashboard</strong> with a live unread-message counter.</li>\n<li class=\"\"><strong>Per-vendor toggle</strong> — vendors enable Live Chat per store in their WCFM settings.</li>\n<li class=\"\"><strong>Vendor avatars and links</strong> in the messenger are pulled from WCFM store profiles.</li>\n<li class=\"\"><strong>Product context card</strong> — threads started from a product page automatically show the product's image, title, and price.</li>\n</ul>\n<p><img decoding=\"async\" loading=\"lazy\" alt=\"Live Chat button on a WCFM product page\" src=\"https://www.better-messages.com/assets/images/product-page-68a69bc2305f0b45e88b30e8e9aaeec8.png\" width=\"1202\" height=\"1168\" class=\"img_ev3q\"></p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"messages-tab-in-the-wcfm-vendor-dashboard\">Messages tab in the WCFM Vendor Dashboard<a href=\"https://www.better-messages.com/blog/wcfm-marketplace-chat/#messages-tab-in-the-wcfm-vendor-dashboard\" class=\"hash-link\" aria-label=\"Direct link to Messages tab in the WCFM Vendor Dashboard\" title=\"Direct link to Messages tab in the WCFM Vendor Dashboard\" translate=\"no\">​</a></h2>\n<p><img decoding=\"async\" loading=\"lazy\" alt=\"Messages tab inside the WCFM Vendor Dashboard with unread counter\" src=\"https://www.better-messages.com/assets/images/vendor-dashboard-e722513dc804106e81da6338a588d5a2.png\" width=\"404\" height=\"1034\" class=\"img_ev3q\"></p>\n<p>The Messages menu integrates with the WCFM Vendor Dashboard layout — vendors stay inside the dashboard to reply, no jumping to a separate inbox. The unread counter updates as new messages arrive.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"live-chat-button-on-the-vendor-store-page\">Live Chat button on the vendor store page<a href=\"https://www.better-messages.com/blog/wcfm-marketplace-chat/#live-chat-button-on-the-vendor-store-page\" class=\"hash-link\" aria-label=\"Direct link to Live Chat button on the vendor store page\" title=\"Direct link to Live Chat button on the vendor store page\" translate=\"no\">​</a></h2>\n<p><img decoding=\"async\" loading=\"lazy\" alt=\"Live Chat button on a WCFM vendor store page\" src=\"https://www.better-messages.com/assets/images/shop-page-dc2cee03058f8a45b4b277db695d6b65.png\" width=\"2128\" height=\"812\" class=\"img_ev3q\"></p>\n<p>Customers browsing a vendor's full catalog can start a conversation without first selecting a product. The button auto-renders on standard WCFM store layouts; for custom themes use the shortcode:</p>\n<div class=\"language-text codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#393A34;--prism-background-color:#f6f8fa\"><div class=\"codeBlockContent_QJqH\"><pre tabindex=\"0\" class=\"prism-code language-text codeBlock_bY9V thin-scrollbar\" style=\"color:#393A34;background-color:#f6f8fa\"><code class=\"codeBlockLines_e6Vv\"><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">[better_messages_wcfm_store_button]</span><br></span></code></pre></div></div>\n<p>Same for product pages:</p>\n<div class=\"language-text codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#393A34;--prism-background-color:#f6f8fa\"><div class=\"codeBlockContent_QJqH\"><pre tabindex=\"0\" class=\"prism-code language-text codeBlock_bY9V thin-scrollbar\" style=\"color:#393A34;background-color:#f6f8fa\"><code class=\"codeBlockLines_e6Vv\"><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">[better_messages_wcfm_product_button]</span><br></span></code></pre></div></div>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"installing-better-messages-on-a-wcfm-marketplace-site\">Installing Better Messages on a WCFM Marketplace site<a href=\"https://www.better-messages.com/blog/wcfm-marketplace-chat/#installing-better-messages-on-a-wcfm-marketplace-site\" class=\"hash-link\" aria-label=\"Direct link to Installing Better Messages on a WCFM Marketplace site\" title=\"Direct link to Installing Better Messages on a WCFM Marketplace site\" translate=\"no\">​</a></h2>\n<ol>\n<li class=\"\">Install <strong><a href=\"https://wordpress.org/plugins/bp-better-messages/\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\">Better Messages from WordPress.org</a></strong> and activate it.</li>\n<li class=\"\">Make sure both the free <strong>WCFM – WooCommerce Frontend Manager</strong> and <strong>WCFM Marketplace</strong> plugins are active.</li>\n<li class=\"\">Open <strong>WP Admin → Better Messages → Settings → Integrations → WooCommerce</strong>.</li>\n<li class=\"\">Find <strong>WCFM Marketplace Integration</strong> and toggle <strong>Enable Vendor Live Chat</strong>.</li>\n</ol>\n<p><img decoding=\"async\" loading=\"lazy\" alt=\"WCFM integration settings\" src=\"https://www.better-messages.com/assets/images/settings-571955c7bda9dd3804f9dd4ded1375fb.png\" width=\"1800\" height=\"286\" class=\"img_ev3q\"></p>\n<p>Vendors then enable Live Chat for their store in <strong>WCFM Vendor Dashboard → Settings → Live Chats</strong>.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"free-vs-websocket-version-for-wcfm-marketplace-stores\">Free vs WebSocket version for WCFM Marketplace stores<a href=\"https://www.better-messages.com/blog/wcfm-marketplace-chat/#free-vs-websocket-version-for-wcfm-marketplace-stores\" class=\"hash-link\" aria-label=\"Direct link to Free vs WebSocket version for WCFM Marketplace stores\" title=\"Direct link to Free vs WebSocket version for WCFM Marketplace stores\" translate=\"no\">​</a></h2>\n<table><thead><tr><th>Feature</th><th style=\"text-align:center\">Free version</th><th style=\"text-align:center\">WebSocket version</th></tr></thead><tbody><tr><td>Live Chat button on product / store pages</td><td style=\"text-align:center\">yes</td><td style=\"text-align:center\">yes</td></tr><tr><td>Messages menu inside the WCFM Vendor Dashboard</td><td style=\"text-align:center\">yes</td><td style=\"text-align:center\">yes</td></tr><tr><td>Per-vendor enable / disable in WCFM settings</td><td style=\"text-align:center\">yes</td><td style=\"text-align:center\">yes</td></tr><tr><td>Product card context in threads</td><td style=\"text-align:center\">yes</td><td style=\"text-align:center\">yes</td></tr><tr><td>Real-time delivery</td><td style=\"text-align:center\">polling</td><td style=\"text-align:center\">instant</td></tr><tr><td>Mini-widget popup chat (buyer stays on the product page)</td><td style=\"text-align:center\">—</td><td style=\"text-align:center\">yes</td></tr><tr><td>One-on-one voice and video calls inside the thread</td><td style=\"text-align:center\">—</td><td style=\"text-align:center\">yes</td></tr><tr><td>Group voice and video calls (vendor team huddles)</td><td style=\"text-align:center\">—</td><td style=\"text-align:center\">yes</td></tr><tr><td>Web push notifications for new messages</td><td style=\"text-align:center\">—</td><td style=\"text-align:center\">yes</td></tr><tr><td>Read receipts</td><td style=\"text-align:center\">—</td><td style=\"text-align:center\">yes</td></tr><tr><td>End-to-end encryption (optional)</td><td style=\"text-align:center\">—</td><td style=\"text-align:center\">yes</td></tr></tbody></table>\n<div class=\"theme-admonition theme-admonition-info admonition_xJq3 alert alert--info\"><div class=\"admonitionHeading_Gvgb\"><span class=\"admonitionIcon_Rf37\"><svg viewBox=\"0 0 14 16\"><path fill-rule=\"evenodd\" d=\"M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z\"></path></svg></span>info</div><div class=\"admonitionContent_BuS1\"><p>For WCFM marketplaces where vendors compete on customer service, the WebSocket version's mini-widget popup is the difference between a buyer who clicks Live Chat and stays on the product page (good) and a buyer who clicks Live Chat and is navigated away to the messages page (less good). The popup keeps the cart and product context visible while the buyer chats.</p></div></div>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"frequently-asked-questions\">Frequently asked questions<a href=\"https://www.better-messages.com/blog/wcfm-marketplace-chat/#frequently-asked-questions\" class=\"hash-link\" aria-label=\"Direct link to Frequently asked questions\" title=\"Direct link to Frequently asked questions\" translate=\"no\">​</a></h2>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"does-it-work-with-wcfm-membership-levels\">Does it work with WCFM membership levels?<a href=\"https://www.better-messages.com/blog/wcfm-marketplace-chat/#does-it-work-with-wcfm-membership-levels\" class=\"hash-link\" aria-label=\"Direct link to Does it work with WCFM membership levels?\" title=\"Direct link to Does it work with WCFM membership levels?\" translate=\"no\">​</a></h3>\n<p>Yes — Better Messages reads WordPress roles and WCFM's vendor capability flags. Live Chat can be enabled for all vendors or restricted to specific WCFM membership tiers.</p>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"can-customers-chat-without-a-wordpress-account\">Can customers chat without a WordPress account?<a href=\"https://www.better-messages.com/blog/wcfm-marketplace-chat/#can-customers-chat-without-a-wordpress-account\" class=\"hash-link\" aria-label=\"Direct link to Can customers chat without a WordPress account?\" title=\"Direct link to Can customers chat without a WordPress account?\" translate=\"no\">​</a></h3>\n<p>Optional. Enable <strong>Guest Chat</strong> in <strong>Better Messages → Settings → Guest Chat</strong>. Guest checkout customers can start a thread by typing a name and email; the thread is preserved if they later register.</p>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"will-the-unread-counter-update-in-real-time\">Will the unread counter update in real time?<a href=\"https://www.better-messages.com/blog/wcfm-marketplace-chat/#will-the-unread-counter-update-in-real-time\" class=\"hash-link\" aria-label=\"Direct link to Will the unread counter update in real time?\" title=\"Direct link to Will the unread counter update in real time?\" translate=\"no\">​</a></h3>\n<p>On the free version the counter polls (a few seconds delay). On the WebSocket version it updates instantly when a new message arrives.</p>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"does-it-work-alongside-wcfms-own-internal-vendor-to-admin-messaging\">Does it work alongside WCFM's own internal vendor-to-admin messaging?<a href=\"https://www.better-messages.com/blog/wcfm-marketplace-chat/#does-it-work-alongside-wcfms-own-internal-vendor-to-admin-messaging\" class=\"hash-link\" aria-label=\"Direct link to Does it work alongside WCFM's own internal vendor-to-admin messaging?\" title=\"Direct link to Does it work alongside WCFM's own internal vendor-to-admin messaging?\" translate=\"no\">​</a></h3>\n<p>Yes — WCFM's vendor-to-admin messaging is a separate system and is not affected by Better Messages. Better Messages adds buyer ↔ vendor chat on the storefront and inside the vendor dashboard.</p>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"what-about-wcfm-bookings--wcfm-auction\">What about WCFM Bookings / WCFM Auction?<a href=\"https://www.better-messages.com/blog/wcfm-marketplace-chat/#what-about-wcfm-bookings--wcfm-auction\" class=\"hash-link\" aria-label=\"Direct link to What about WCFM Bookings / WCFM Auction?\" title=\"Direct link to What about WCFM Bookings / WCFM Auction?\" translate=\"no\">​</a></h3>\n<p>The integration works regardless of which WCFM add-ons are active — the Live Chat button is added based on the WCFM product type, not the WCFM add-ons in use.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"see-also\">See also<a href=\"https://www.better-messages.com/blog/wcfm-marketplace-chat/#see-also\" class=\"hash-link\" aria-label=\"Direct link to See also\" title=\"Direct link to See also\" translate=\"no\">​</a></h2>\n<ul>\n<li class=\"\"><a class=\"\" href=\"https://www.better-messages.com/docs/integrations/wcfm/\">WCFM integration documentation</a> — full setup reference</li>\n<li class=\"\"><a class=\"\" href=\"https://www.better-messages.com/blog/wordpress-marketplace-chat/\">WordPress marketplace chat</a> — comparing Dokan, WCFM, WC Vendors, MultiVendorX</li>\n<li class=\"\"><a class=\"\" href=\"https://www.better-messages.com/blog/dokan-vendor-chat-plugin/\">Dokan vendor chat plugin</a></li>\n<li class=\"\"><a class=\"\" href=\"https://www.better-messages.com/blog/woocommerce-customer-chat/\">WooCommerce customer chat</a> — for WooCommerce stores without a multi-vendor layer</li>\n</ul>\n<p><a href=\"https://wordpress.org/plugins/bp-better-messages/\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\"><strong>Install Better Messages from WordPress.org →</strong></a></p>",
            "url": "https://www.better-messages.com/blog/wcfm-marketplace-chat/",
            "title": "WCFM Marketplace Chat: Vendor Live Chat Plugin",
            "summary": "Add real-time chat between WCFM Marketplace vendors and customers — Live Chat button on every product, Messages tab in the WCFM Vendor Dashboard, product-card context.",
            "date_modified": "2026-02-26T00:00:00.000Z",
            "author": {
                "name": "Andrij Tkachenko",
                "url": "/docs/getting-started/about"
            },
            "tags": [
                "WCFM",
                "Marketplace",
                "Guides"
            ]
        },
        {
            "id": "https://www.better-messages.com/blog/wordpress-marketplace-chat/",
            "content_html": "<p>If you run a WordPress marketplace, the single biggest conversion gap is the moment a buyer wants to ask a vendor a question before checkout. Email is too slow, contact forms feel formal, and pushing buyers off-site to WhatsApp or Telegram is a leak in the funnel.</p>\n<p>Better Messages adds a Live Chat button on every product page, vendor shop page, and vendor dashboard across <strong>all four</strong> marketplace plugins, from a single install. This post compares what each integration looks like and what to expect.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"the-four-marketplace-integrations-at-a-glance\">The four marketplace integrations at a glance<a href=\"https://www.better-messages.com/blog/wordpress-marketplace-chat/#the-four-marketplace-integrations-at-a-glance\" class=\"hash-link\" aria-label=\"Direct link to The four marketplace integrations at a glance\" title=\"Direct link to The four marketplace integrations at a glance\" translate=\"no\">​</a></h2>\n<table><thead><tr><th>Marketplace</th><th style=\"text-align:center\">Active installs (approx.)</th><th style=\"text-align:center\">Live Chat button on product page</th><th style=\"text-align:center\">Live Chat tab in vendor dashboard</th><th style=\"text-align:center\">Live Chat button on shop page</th></tr></thead><tbody><tr><td>Dokan</td><td style=\"text-align:center\">80,000+</td><td style=\"text-align:center\">yes</td><td style=\"text-align:center\">yes</td><td style=\"text-align:center\">yes</td></tr><tr><td>WCFM Marketplace</td><td style=\"text-align:center\">40,000+</td><td style=\"text-align:center\">yes</td><td style=\"text-align:center\">yes</td><td style=\"text-align:center\">yes</td></tr><tr><td>MultiVendorX</td><td style=\"text-align:center\">20,000+</td><td style=\"text-align:center\">yes</td><td style=\"text-align:center\">yes</td><td style=\"text-align:center\">yes</td></tr><tr><td>WC Vendors</td><td style=\"text-align:center\">10,000+</td><td style=\"text-align:center\">yes</td><td style=\"text-align:center\">yes (Pro)</td><td style=\"text-align:center\">—</td></tr></tbody></table>\n<p>All four use the same Better Messages core, so feature parity outside the marketplace-specific touch-points (cart snapshot in WooCommerce chat, role-aware order links, etc.) is identical.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"dokan\">Dokan<a href=\"https://www.better-messages.com/blog/wordpress-marketplace-chat/#dokan\" class=\"hash-link\" aria-label=\"Direct link to Dokan\" title=\"Direct link to Dokan\" translate=\"no\">​</a></h2>\n<p>Dokan is the most-installed multi-vendor plugin on WordPress and was the first marketplace Better Messages integrated with natively.</p>\n<p><img decoding=\"async\" loading=\"lazy\" alt=\"Live Chat tab on the Dokan vendor dashboard\" src=\"https://www.better-messages.com/assets/images/dokan-dashboard-72d15e4e8b35c76980a17c7f795f12a6.png\" width=\"2134\" height=\"1260\" class=\"img_ev3q\"></p>\n<p>What you get: Live Chat tab in the vendor dashboard, Live Chat button on every product page, Live Chat button on the vendor shop page, and automatic use of Dokan vendor avatars / shop profile links inside the messenger. Full write-up: <a class=\"\" href=\"https://www.better-messages.com/blog/dokan-vendor-chat-plugin/\">Dokan vendor chat plugin</a>.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"wcfm-marketplace\">WCFM Marketplace<a href=\"https://www.better-messages.com/blog/wordpress-marketplace-chat/#wcfm-marketplace\" class=\"hash-link\" aria-label=\"Direct link to WCFM Marketplace\" title=\"Direct link to WCFM Marketplace\" translate=\"no\">​</a></h2>\n<p>Better Messages adds buyer ↔ vendor chat to WCFM Marketplace — Live Chat tab in the WCFM Vendor Dashboard, Live Chat button on every product page and store page, product-card context inside threads, and WebSocket-version features like one-on-one and group calls and live unread badges.</p>\n<p><img decoding=\"async\" loading=\"lazy\" alt=\"Live Chat tab on the WCFM vendor dashboard\" src=\"https://www.better-messages.com/assets/images/wcfm-dashboard-e722513dc804106e81da6338a588d5a2.png\" width=\"404\" height=\"1034\" class=\"img_ev3q\"></p>\n<p>WCFM's vendor dashboard layout is more customizable than Dokan's, and the Live Chat tab slots into the standard WCFM navigation. Full reference: <a class=\"\" href=\"https://www.better-messages.com/docs/integrations/wcfm/\">WCFM integration documentation</a>.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"multivendorx\">MultiVendorX<a href=\"https://www.better-messages.com/blog/wordpress-marketplace-chat/#multivendorx\" class=\"hash-link\" aria-label=\"Direct link to MultiVendorX\" title=\"Direct link to MultiVendorX\" translate=\"no\">​</a></h2>\n<p>MultiVendorX (formerly WC Marketplace) supports both v4.x and v5.0+ — Better Messages ships separate integrations for each so you do not have to migrate to the new MultiVendorX version just to get vendor chat.</p>\n<p><img decoding=\"async\" loading=\"lazy\" alt=\"Live Chat button on a MultiVendorX product page\" src=\"https://www.better-messages.com/assets/images/multivendorx-product-e8909240b4e814b9c38be3b82b91daf4.png\" width=\"1642\" height=\"1606\" class=\"img_ev3q\"></p>\n<p>Reference: <a class=\"\" href=\"https://www.better-messages.com/docs/integrations/multivendorx/\">MultiVendorX integration documentation</a>.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"wc-vendors\">WC Vendors<a href=\"https://www.better-messages.com/blog/wordpress-marketplace-chat/#wc-vendors\" class=\"hash-link\" aria-label=\"Direct link to WC Vendors\" title=\"Direct link to WC Vendors\" translate=\"no\">​</a></h2>\n<p>WC Vendors is the most \"ecommerce-classic\" of the four — a simpler marketplace model with a smaller plugin footprint. Better Messages adds the product-page Live Chat button automatically; the vendor-dashboard tab is available on WC Vendors Pro.</p>\n<p><img decoding=\"async\" loading=\"lazy\" alt=\"Live Chat button on a WC Vendors product page\" src=\"https://www.better-messages.com/assets/images/wc-vendors-product-fb73493665bdd48f249ec34793edecfe.png\" width=\"960\" height=\"792\" class=\"img_ev3q\"></p>\n<p>Reference: <a class=\"\" href=\"https://www.better-messages.com/docs/integrations/wc-vendors/\">WC Vendors integration documentation</a>.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"how-they-compare-on-the-customer-journey\">How they compare on the customer journey<a href=\"https://www.better-messages.com/blog/wordpress-marketplace-chat/#how-they-compare-on-the-customer-journey\" class=\"hash-link\" aria-label=\"Direct link to How they compare on the customer journey\" title=\"Direct link to How they compare on the customer journey\" translate=\"no\">​</a></h2>\n<table><thead><tr><th>Customer journey step</th><th style=\"text-align:center\">Dokan</th><th style=\"text-align:center\">WCFM</th><th style=\"text-align:center\">MultiVendorX</th><th style=\"text-align:center\">WC Vendors</th></tr></thead><tbody><tr><td>Discover product → ask before buying (product-page chat)</td><td style=\"text-align:center\">yes</td><td style=\"text-align:center\">yes</td><td style=\"text-align:center\">yes</td><td style=\"text-align:center\">yes</td></tr><tr><td>Browse vendor catalog → start a thread (shop-page chat)</td><td style=\"text-align:center\">yes</td><td style=\"text-align:center\">yes</td><td style=\"text-align:center\">yes</td><td style=\"text-align:center\">—</td></tr><tr><td>Buyer-initiated thread routed to the correct vendor</td><td style=\"text-align:center\">yes</td><td style=\"text-align:center\">yes</td><td style=\"text-align:center\">yes</td><td style=\"text-align:center\">yes</td></tr><tr><td>Vendor sees inbox inside their own dashboard</td><td style=\"text-align:center\">yes</td><td style=\"text-align:center\">yes</td><td style=\"text-align:center\">yes</td><td style=\"text-align:center\">Pro</td></tr><tr><td>Vendor avatar / link in messenger = marketplace profile</td><td style=\"text-align:center\">yes</td><td style=\"text-align:center\">yes</td><td style=\"text-align:center\">yes</td><td style=\"text-align:center\">yes</td></tr><tr><td>One-click voice / video call (WebSocket version)</td><td style=\"text-align:center\">yes</td><td style=\"text-align:center\">yes</td><td style=\"text-align:center\">yes</td><td style=\"text-align:center\">yes</td></tr><tr><td>Mini-widget popup chat (WebSocket version)</td><td style=\"text-align:center\">yes</td><td style=\"text-align:center\">yes</td><td style=\"text-align:center\">yes</td><td style=\"text-align:center\">yes</td></tr></tbody></table>\n<p>The marketplace-specific behavior is identical across all four integrations — what changes is whether your marketplace plugin supports the surface (e.g. WC Vendors shop pages do not have a chat injection point in the free plugin).</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"picking-the-right-marketplace-plugin-chat-is-not-the-decision\">Picking the right marketplace plugin (chat is not the decision)<a href=\"https://www.better-messages.com/blog/wordpress-marketplace-chat/#picking-the-right-marketplace-plugin-chat-is-not-the-decision\" class=\"hash-link\" aria-label=\"Direct link to Picking the right marketplace plugin (chat is not the decision)\" title=\"Direct link to Picking the right marketplace plugin (chat is not the decision)\" translate=\"no\">​</a></h2>\n<p>Better Messages supports all four, so chat is not the variable. The marketplace decision comes down to vendor-experience defaults, payout flexibility, and your tolerance for upsell modules. The chat layer is the same regardless of which one you pick.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"installing-better-messages-on-any-marketplace\">Installing Better Messages on any marketplace<a href=\"https://www.better-messages.com/blog/wordpress-marketplace-chat/#installing-better-messages-on-any-marketplace\" class=\"hash-link\" aria-label=\"Direct link to Installing Better Messages on any marketplace\" title=\"Direct link to Installing Better Messages on any marketplace\" translate=\"no\">​</a></h2>\n<ol>\n<li class=\"\">Install <strong><a href=\"https://wordpress.org/plugins/bp-better-messages/\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\">Better Messages from WordPress.org</a></strong> and activate it.</li>\n<li class=\"\">Install your marketplace plugin of choice (Dokan, WCFM, MultiVendorX, or WC Vendors).</li>\n<li class=\"\">Open <strong>WP Admin → Better Messages → Settings → Integrations → Other Plugins</strong> (or <strong>Marketplaces</strong>) and enable Live Chat for your marketplace.</li>\n</ol>\n<p>That is the entire setup. The same installation works regardless of which of the four marketplaces you run — Better Messages detects the active plugin and wires itself in.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"free-vs-websocket-version-on-marketplaces\">Free vs WebSocket version on marketplaces<a href=\"https://www.better-messages.com/blog/wordpress-marketplace-chat/#free-vs-websocket-version-on-marketplaces\" class=\"hash-link\" aria-label=\"Direct link to Free vs WebSocket version on marketplaces\" title=\"Direct link to Free vs WebSocket version on marketplaces\" translate=\"no\">​</a></h2>\n<table><thead><tr><th>Feature</th><th style=\"text-align:center\">Free (AJAX) version</th><th style=\"text-align:center\">WebSocket version</th></tr></thead><tbody><tr><td>Live Chat button on product / shop / dashboard</td><td style=\"text-align:center\">yes</td><td style=\"text-align:center\">yes</td></tr><tr><td>Per-vendor inbox in the dashboard</td><td style=\"text-align:center\">yes</td><td style=\"text-align:center\">yes</td></tr><tr><td>Real-time delivery between buyer and vendor</td><td style=\"text-align:center\">polling</td><td style=\"text-align:center\">instant</td></tr><tr><td>Mini-widget popup chat (buyer never leaves the product)</td><td style=\"text-align:center\">—</td><td style=\"text-align:center\">yes</td></tr><tr><td>One-on-one voice and video calls inside the thread</td><td style=\"text-align:center\">—</td><td style=\"text-align:center\">yes</td></tr><tr><td>Group voice and video calls (vendor team huddles, buyer + multiple agents)</td><td style=\"text-align:center\">—</td><td style=\"text-align:center\">yes</td></tr><tr><td>Web push notifications for new messages</td><td style=\"text-align:center\">—</td><td style=\"text-align:center\">yes</td></tr><tr><td>Read receipts</td><td style=\"text-align:center\">—</td><td style=\"text-align:center\">yes</td></tr><tr><td>End-to-end encryption (optional)</td><td style=\"text-align:center\">—</td><td style=\"text-align:center\">yes</td></tr></tbody></table>\n<div class=\"theme-admonition theme-admonition-info admonition_xJq3 alert alert--info\"><div class=\"admonitionHeading_Gvgb\"><span class=\"admonitionIcon_Rf37\"><svg viewBox=\"0 0 14 16\"><path fill-rule=\"evenodd\" d=\"M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z\"></path></svg></span>info</div><div class=\"admonitionContent_BuS1\"><p>For marketplaces where vendors actively use chat as a competitive advantage, the WebSocket version's instant delivery and mini-widget popup are the difference between a buyer who walks away and a buyer who finishes checkout — the chat opens as an overlay and the buyer stays on the product page they were considering.</p></div></div>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"frequently-asked-questions\">Frequently asked questions<a href=\"https://www.better-messages.com/blog/wordpress-marketplace-chat/#frequently-asked-questions\" class=\"hash-link\" aria-label=\"Direct link to Frequently asked questions\" title=\"Direct link to Frequently asked questions\" translate=\"no\">​</a></h2>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"what-if-i-run-two-marketplace-plugins-side-by-side\">What if I run two marketplace plugins side by side?<a href=\"https://www.better-messages.com/blog/wordpress-marketplace-chat/#what-if-i-run-two-marketplace-plugins-side-by-side\" class=\"hash-link\" aria-label=\"Direct link to What if I run two marketplace plugins side by side?\" title=\"Direct link to What if I run two marketplace plugins side by side?\" translate=\"no\">​</a></h3>\n<p>Better Messages supports having multiple marketplace plugins active simultaneously — each integration loads independently. This is rare in practice but works.</p>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"will-switching-marketplace-plugins-keep-my-chat-history\">Will switching marketplace plugins keep my chat history?<a href=\"https://www.better-messages.com/blog/wordpress-marketplace-chat/#will-switching-marketplace-plugins-keep-my-chat-history\" class=\"hash-link\" aria-label=\"Direct link to Will switching marketplace plugins keep my chat history?\" title=\"Direct link to Will switching marketplace plugins keep my chat history?\" translate=\"no\">​</a></h3>\n<p>Yes — Better Messages stores its threads in its own tables, not in the marketplace plugin's. If you migrate from Dokan to WCFM, the threads survive; only the marketplace-specific surfaces re-bind.</p>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"can-vendors-message-each-other\">Can vendors message each other?<a href=\"https://www.better-messages.com/blog/wordpress-marketplace-chat/#can-vendors-message-each-other\" class=\"hash-link\" aria-label=\"Direct link to Can vendors message each other?\" title=\"Direct link to Can vendors message each other?\" translate=\"no\">​</a></h3>\n<p>Yes — the vendor dashboard chat is a full messenger. Vendors can also be added to group conversations for marketplace-wide announcements.</p>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"do-customers-need-a-wordpress-account-to-start-a-chat\">Do customers need a WordPress account to start a chat?<a href=\"https://www.better-messages.com/blog/wordpress-marketplace-chat/#do-customers-need-a-wordpress-account-to-start-a-chat\" class=\"hash-link\" aria-label=\"Direct link to Do customers need a WordPress account to start a chat?\" title=\"Direct link to Do customers need a WordPress account to start a chat?\" translate=\"no\">​</a></h3>\n<p>Optional. If you enable <strong>Guest Chat</strong> in <strong>Better Messages → Settings → Guest Chat</strong>, an unregistered buyer can start a thread by typing a name and email. Their history is preserved if they later register and place an order.</p>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"does-it-work-with-woocommerce-subscriptions-on-marketplace-plugins\">Does it work with WooCommerce Subscriptions on marketplace plugins?<a href=\"https://www.better-messages.com/blog/wordpress-marketplace-chat/#does-it-work-with-woocommerce-subscriptions-on-marketplace-plugins\" class=\"hash-link\" aria-label=\"Direct link to Does it work with WooCommerce Subscriptions on marketplace plugins?\" title=\"Direct link to Does it work with WooCommerce Subscriptions on marketplace plugins?\" translate=\"no\">​</a></h3>\n<p>Yes — the integration listens to WooCommerce product / order hooks, not subscription-specific ones, so subscription products are handled the same way as regular products.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"see-also\">See also<a href=\"https://www.better-messages.com/blog/wordpress-marketplace-chat/#see-also\" class=\"hash-link\" aria-label=\"Direct link to See also\" title=\"Direct link to See also\" translate=\"no\">​</a></h2>\n<ul>\n<li class=\"\"><a class=\"\" href=\"https://www.better-messages.com/blog/dokan-vendor-chat-plugin/\">Dokan vendor chat plugin</a></li>\n<li class=\"\"><a class=\"\" href=\"https://www.better-messages.com/blog/wcfm-marketplace-chat/\">WCFM Marketplace chat</a></li>\n<li class=\"\"><a class=\"\" href=\"https://www.better-messages.com/blog/wc-vendors-chat/\">WC Vendors chat</a></li>\n<li class=\"\"><a class=\"\" href=\"https://www.better-messages.com/blog/multivendorx-vendor-chat/\">MultiVendorX vendor chat</a></li>\n<li class=\"\"><a class=\"\" href=\"https://www.better-messages.com/blog/woocommerce-customer-chat/\">WooCommerce customer chat</a> — for stores running WooCommerce without a multi-vendor layer</li>\n<li class=\"\"><a class=\"\" href=\"https://www.better-messages.com/docs/features/realtime-messaging/\">Real-time messaging</a> — what changes with the WebSocket version</li>\n</ul>\n<p><a href=\"https://wordpress.org/plugins/bp-better-messages/\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\"><strong>Install Better Messages from WordPress.org →</strong></a></p>",
            "url": "https://www.better-messages.com/blog/wordpress-marketplace-chat/",
            "title": "WordPress Marketplace Chat: Buyer ↔ Vendor Messaging Compared",
            "summary": "A side-by-side look at how to add buyer ↔ vendor messaging to Dokan, WCFM, WC Vendors, and MultiVendorX — one plugin covers all four with a Live Chat button on every product, shop page, and vendor dashboard.",
            "date_modified": "2026-02-25T00:00:00.000Z",
            "author": {
                "name": "Andrij Tkachenko",
                "url": "/docs/getting-started/about"
            },
            "tags": [
                "Dokan",
                "Marketplace",
                "Guides"
            ]
        },
        {
            "id": "https://www.better-messages.com/blog/add-chat-room-to-wordpress/",
            "content_html": "<p>A chat room is a single persistent conversation that any number of people can join, leave, and come back to — unlike a private message, which is bound to a specific pair of users. On a WordPress site, a chat room is the right tool for live event lobbies, course cohorts, paid-membership lounges, support rooms, and any case where you want one URL where people congregate.</p>\n<p>This guide walks through the fastest way to add a chat room to a WordPress page, what access-control options matter, and the trade-offs versus a Discord or Slack embed.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"the-fastest-path-a-single-shortcode\">The fastest path: a single shortcode<a href=\"https://www.better-messages.com/blog/add-chat-room-to-wordpress/#the-fastest-path-a-single-shortcode\" class=\"hash-link\" aria-label=\"Direct link to The fastest path: a single shortcode\" title=\"Direct link to The fastest path: a single shortcode\" translate=\"no\">​</a></h2>\n<p>With Better Messages installed, every chat room is a WordPress custom post type — you create one in the admin and embed it anywhere with a shortcode.</p>\n<ol>\n<li class=\"\">Install <strong><a href=\"https://wordpress.org/plugins/bp-better-messages/\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\">Better Messages from WordPress.org</a></strong> and activate it.</li>\n<li class=\"\">Open <strong>WP Admin → Better Messages → Chat Rooms → Add New</strong>.</li>\n<li class=\"\">Give the room a name (for example, <em>Members Lounge</em>).</li>\n<li class=\"\">Pick which <strong>user roles</strong> are allowed to join.</li>\n<li class=\"\">Optionally enable <strong>Guest access</strong> to let unregistered visitors participate.</li>\n<li class=\"\">Publish.</li>\n<li class=\"\">On any page or post, add the shortcode with the chat room's post ID:</li>\n</ol>\n<div class=\"language-text codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#393A34;--prism-background-color:#f6f8fa\"><div class=\"codeBlockContent_QJqH\"><pre tabindex=\"0\" class=\"prism-code language-text codeBlock_bY9V thin-scrollbar\" style=\"color:#393A34;background-color:#f6f8fa\"><code class=\"codeBlockLines_e6Vv\"><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">[better_messages_chat_room id=\"123\"]</span><br></span></code></pre></div></div>\n<p>That is the whole setup. The page now renders a full chat room — message history, file uploads, reactions, mentions, an online-users sidebar, the works.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"access-control-who-can-join\">Access control: who can join<a href=\"https://www.better-messages.com/blog/add-chat-room-to-wordpress/#access-control-who-can-join\" class=\"hash-link\" aria-label=\"Direct link to Access control: who can join\" title=\"Direct link to Access control: who can join\" translate=\"no\">​</a></h2>\n<p>The two access-control levers cover almost every case:</p>\n<ul>\n<li class=\"\"><strong>Allowed user roles</strong> — restrict the room to subscribers, members, customers, students, instructors, vendors, or any custom role. Anyone outside the allowed roles sees a \"join not permitted\" message instead of the chat.</li>\n<li class=\"\"><strong>Guest access</strong> — optional. When on, unregistered visitors can join the chat after typing a display name. Each guest is stored in the plugin's own table and gets a negative-ID identity, so guest history is preserved across visits on the same browser.</li>\n</ul>\n<p>Common combinations:</p>\n<table><thead><tr><th>Use case</th><th>Allowed roles</th><th style=\"text-align:center\">Guest access</th></tr></thead><tbody><tr><td>Public live-event lobby</td><td>all (or none with guests enabled)</td><td style=\"text-align:center\">on</td></tr><tr><td>Members-only lounge</td><td>members / subscribers</td><td style=\"text-align:center\">off</td></tr><tr><td>Paid-course cohort</td><td>students + instructors</td><td style=\"text-align:center\">off</td></tr><tr><td>Public support room</td><td>all</td><td style=\"text-align:center\">on</td></tr><tr><td>Vendor-only operations room</td><td>vendors + admin</td><td style=\"text-align:center\">off</td></tr></tbody></table>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"picking-a-chat-room-approach-for-wordpress\">Picking a chat-room approach for WordPress<a href=\"https://www.better-messages.com/blog/add-chat-room-to-wordpress/#picking-a-chat-room-approach-for-wordpress\" class=\"hash-link\" aria-label=\"Direct link to Picking a chat-room approach for WordPress\" title=\"Direct link to Picking a chat-room approach for WordPress\" translate=\"no\">​</a></h2>\n<p>A few patterns sites use for chat-room functionality on WordPress:</p>\n<ul>\n<li class=\"\"><strong>A chat-room plugin</strong> (such as Better Messages) — the conversation lives on the site, gated by WordPress roles, tied to user accounts, ownable and exportable.</li>\n<li class=\"\"><strong>Embed a third-party service</strong> (Slack, Discord, Tawk, Crisp) — the chat lives off-site, the site cannot read it, and members need a separate account.</li>\n<li class=\"\"><strong>Comments</strong> — pseudo-chat, but page-refresh based and threaded in a way that does not feel like a chat room.</li>\n<li class=\"\"><strong>Roll your own</strong> — a non-trivial engineering project involving a WebSocket server.</li>\n</ul>\n<p>For the on-site, role-gated, account-tied pattern, a chat-room plugin like Better Messages is the right tool.</p>\n<p>A WordPress chat room plugin is the only path that keeps the conversation inside the site, tied to WordPress user accounts and roles.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"real-time-delivery-free-version-vs-websocket-version\">Real-time delivery: free version vs WebSocket version<a href=\"https://www.better-messages.com/blog/add-chat-room-to-wordpress/#real-time-delivery-free-version-vs-websocket-version\" class=\"hash-link\" aria-label=\"Direct link to Real-time delivery: free version vs WebSocket version\" title=\"Direct link to Real-time delivery: free version vs WebSocket version\" translate=\"no\">​</a></h2>\n<p>A chat room only feels like a chat room if new messages arrive within a second or two. Better Messages offers two delivery modes:</p>\n<ul>\n<li class=\"\"><strong>Free (AJAX)</strong> — the page polls the server every few seconds. Good enough for low-traffic rooms with a handful of active participants. Server cost grows with the number of open tabs.</li>\n<li class=\"\"><strong>WebSocket</strong> — a persistent connection delivers messages instantly. Hosted relay is included in the license, so you do not run your own server. Required for voice and video calls inside the chat room.</li>\n</ul>\n<div class=\"theme-admonition theme-admonition-info admonition_xJq3 alert alert--info\"><div class=\"admonitionHeading_Gvgb\"><span class=\"admonitionIcon_Rf37\"><svg viewBox=\"0 0 14 16\"><path fill-rule=\"evenodd\" d=\"M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z\"></path></svg></span>info</div><div class=\"admonitionContent_BuS1\"><p>If you expect more than ~20 simultaneously active participants in a single room, go straight to the WebSocket version. The polling load on a busy room outweighs the license cost quickly.</p></div></div>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"advanced-keeping-the-room-healthy\">Advanced: keeping the room healthy<a href=\"https://www.better-messages.com/blog/add-chat-room-to-wordpress/#advanced-keeping-the-room-healthy\" class=\"hash-link\" aria-label=\"Direct link to Advanced: keeping the room healthy\" title=\"Direct link to Advanced: keeping the room healthy\" translate=\"no\">​</a></h2>\n<p>A chat room with 500 silent members and 5 active ones feels dead. Better Messages includes an <strong>Auto-remove inactive users</strong> option on each room with three triggers:</p>\n<ul>\n<li class=\"\">The user has not visited the site for N days</li>\n<li class=\"\">The user has not sent a message in this room for N days</li>\n<li class=\"\">The user has not opened this room for N days</li>\n</ul>\n<p>You can scope this to a specific role — for example, ticking only <strong>Guests</strong> prunes silent unregistered visitors but leaves members alone. Pin specific users (admins, room owners) via a filter so they are never removed:</p>\n<div class=\"language-php codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#393A34;--prism-background-color:#f6f8fa\"><div class=\"codeBlockContent_QJqH\"><pre tabindex=\"0\" class=\"prism-code language-php codeBlock_bY9V thin-scrollbar\" style=\"color:#393A34;background-color:#f6f8fa\"><code class=\"codeBlockLines_e6Vv\"><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token function\" style=\"color:#d73a49\">add_filter</span><span class=\"token punctuation\" style=\"color:#393A34\">(</span><span class=\"token plain\"> </span><span class=\"token string single-quoted-string\" style=\"color:#e3116c\">'better_messages_clean_inactive_chat_users_exclude_user_ids'</span><span class=\"token punctuation\" style=\"color:#393A34\">,</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:#00009f\">function</span><span class=\"token punctuation\" style=\"color:#393A34\">(</span><span class=\"token plain\"> </span><span class=\"token variable\" style=\"color:#36acaa\">$ids</span><span class=\"token plain\"> </span><span class=\"token punctuation\" style=\"color:#393A34\">)</span><span class=\"token plain\"> </span><span class=\"token punctuation\" style=\"color:#393A34\">{</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">    </span><span class=\"token keyword\" style=\"color:#00009f\">return</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:#00009f\">array</span><span class=\"token punctuation\" style=\"color:#393A34\">(</span><span class=\"token plain\"> </span><span class=\"token number\" style=\"color:#36acaa\">1</span><span class=\"token punctuation\" style=\"color:#393A34\">,</span><span class=\"token plain\"> </span><span class=\"token number\" style=\"color:#36acaa\">42</span><span class=\"token punctuation\" style=\"color:#393A34\">,</span><span class=\"token plain\"> </span><span class=\"token number\" style=\"color:#36acaa\">7</span><span class=\"token plain\"> </span><span class=\"token punctuation\" style=\"color:#393A34\">)</span><span class=\"token punctuation\" style=\"color:#393A34\">;</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\"></span><span class=\"token punctuation\" style=\"color:#393A34\">}</span><span class=\"token plain\"> </span><span class=\"token punctuation\" style=\"color:#393A34\">)</span><span class=\"token punctuation\" style=\"color:#393A34\">;</span><br></span></code></pre></div></div>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"when-a-chat-room-is-the-wrong-answer\">When a chat room is the wrong answer<a href=\"https://www.better-messages.com/blog/add-chat-room-to-wordpress/#when-a-chat-room-is-the-wrong-answer\" class=\"hash-link\" aria-label=\"Direct link to When a chat room is the wrong answer\" title=\"Direct link to When a chat room is the wrong answer\" translate=\"no\">​</a></h2>\n<p>A chat room is the right tool when there is one shared space everyone joins. If you need:</p>\n<ul>\n<li class=\"\"><strong>Private one-on-one conversations</strong> between two users — use private messages, not a chat room.</li>\n<li class=\"\"><strong>A separate thread per topic</strong> — use group conversations created on demand, not a single persistent room.</li>\n<li class=\"\"><strong>Live event lobby that ends when the event ends</strong> — a chat room with an expiration date is fine, but consider whether the conversation should survive the event.</li>\n</ul>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"frequently-asked-questions\">Frequently asked questions<a href=\"https://www.better-messages.com/blog/add-chat-room-to-wordpress/#frequently-asked-questions\" class=\"hash-link\" aria-label=\"Direct link to Frequently asked questions\" title=\"Direct link to Frequently asked questions\" translate=\"no\">​</a></h2>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"can-i-embed-the-chat-room-inside-a-page-builder-like-elementor\">Can I embed the chat room inside a page builder like Elementor?<a href=\"https://www.better-messages.com/blog/add-chat-room-to-wordpress/#can-i-embed-the-chat-room-inside-a-page-builder-like-elementor\" class=\"hash-link\" aria-label=\"Direct link to Can I embed the chat room inside a page builder like Elementor?\" title=\"Direct link to Can I embed the chat room inside a page builder like Elementor?\" translate=\"no\">​</a></h3>\n<p>Yes — the shortcode works in any builder that accepts WordPress shortcodes (Elementor, Bricks, Oxygen, Beaver Builder, the block editor's Shortcode block).</p>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"can-a-single-room-have-voice-or-video-calls\">Can a single room have voice or video calls?<a href=\"https://www.better-messages.com/blog/add-chat-room-to-wordpress/#can-a-single-room-have-voice-or-video-calls\" class=\"hash-link\" aria-label=\"Direct link to Can a single room have voice or video calls?\" title=\"Direct link to Can a single room have voice or video calls?\" translate=\"no\">​</a></h3>\n<p>With the WebSocket version, yes — group voice and video calls work inside the chat room. With the free version, the call button is hidden.</p>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"can-guests-in-a-chat-room-upload-files\">Can guests in a chat room upload files?<a href=\"https://www.better-messages.com/blog/add-chat-room-to-wordpress/#can-guests-in-a-chat-room-upload-files\" class=\"hash-link\" aria-label=\"Direct link to Can guests in a chat room upload files?\" title=\"Direct link to Can guests in a chat room upload files?\" translate=\"no\">​</a></h3>\n<p>Yes, if you allow it. Guest permissions are configured per chat room and again globally under <strong>Better Messages → Settings → Guest Chat</strong>.</p>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"how-many-participants-can-a-chat-room-have\">How many participants can a chat room have?<a href=\"https://www.better-messages.com/blog/add-chat-room-to-wordpress/#how-many-participants-can-a-chat-room-have\" class=\"hash-link\" aria-label=\"Direct link to How many participants can a chat room have?\" title=\"Direct link to How many participants can a chat room have?\" translate=\"no\">​</a></h3>\n<p>There is no hard limit. The plugin has been used with rooms of several thousand members. Past a few hundred actively-typing participants, the WebSocket version's instant delivery becomes meaningful.</p>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"will-the-chat-room-be-indexed-by-google\">Will the chat room be indexed by Google?<a href=\"https://www.better-messages.com/blog/add-chat-room-to-wordpress/#will-the-chat-room-be-indexed-by-google\" class=\"hash-link\" aria-label=\"Direct link to Will the chat room be indexed by Google?\" title=\"Direct link to Will the chat room be indexed by Google?\" translate=\"no\">​</a></h3>\n<p>The container page is indexable, but the messages themselves load via REST API and are not in the initial HTML, so Google does not index message content. This is usually the desired behavior — chat room conversations are ephemeral, not canonical content.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"see-also\">See also<a href=\"https://www.better-messages.com/blog/add-chat-room-to-wordpress/#see-also\" class=\"hash-link\" aria-label=\"Direct link to See also\" title=\"Direct link to See also\" translate=\"no\">​</a></h2>\n<ul>\n<li class=\"\"><a class=\"\" href=\"https://www.better-messages.com/docs/features/chat-rooms/\">Chat rooms documentation</a> — full reference for the chat-room feature</li>\n<li class=\"\"><a class=\"\" href=\"https://www.better-messages.com/docs/features/group-conversations/\">Group conversations</a> — for ad-hoc multi-user threads rather than a persistent room</li>\n<li class=\"\"><a class=\"\" href=\"https://www.better-messages.com/docs/features/guest-access/\">Guest access</a> — how unregistered visitors participate</li>\n<li class=\"\"><a class=\"\" href=\"https://www.better-messages.com/docs/features/role-based-access/\">Role-based access</a> — controlling who can join</li>\n</ul>\n<p><a href=\"https://wordpress.org/plugins/bp-better-messages/\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\"><strong>Install Better Messages from WordPress.org →</strong></a></p>",
            "url": "https://www.better-messages.com/blog/add-chat-room-to-wordpress/",
            "title": "How to Add a Chat Room to Your WordPress Site (2026 Guide)",
            "summary": "Add a public or members-only chat room to any WordPress page in five minutes — guest access, role-based permissions, mobile-friendly, no third-party service.",
            "date_modified": "2026-02-23T00:00:00.000Z",
            "author": {
                "name": "Andrij Tkachenko",
                "url": "/docs/getting-started/about"
            },
            "tags": [
                "Chat rooms",
                "Guides",
                "Community"
            ]
        },
        {
            "id": "https://www.better-messages.com/blog/ai-content-moderation-wordpress-chat/",
            "content_html": "<p>Public chat surfaces — community lobbies, vendor support inboxes, course cohort chats — get spam, harassment, and inappropriate content the way any open input does. Manual moderation does not scale beyond a few hundred members. Better Messages adds AI-powered content moderation that automatically detects harmful messages and either flags them for admin review or holds them until approved. Two providers are supported: <strong>Better Messages Moderation AI</strong> (no API key required, included with the WebSocket license) and <strong>OpenAI Moderation API</strong> (free with your own OpenAI key).</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"two-providers-pick-by-use-case\">Two providers, pick by use case<a href=\"https://www.better-messages.com/blog/ai-content-moderation-wordpress-chat/#two-providers-pick-by-use-case\" class=\"hash-link\" aria-label=\"Direct link to Two providers, pick by use case\" title=\"Direct link to Two providers, pick by use case\" translate=\"no\">​</a></h2>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"better-messages-moderation-ai\">Better Messages Moderation AI<a href=\"https://www.better-messages.com/blog/ai-content-moderation-wordpress-chat/#better-messages-moderation-ai\" class=\"hash-link\" aria-label=\"Direct link to Better Messages Moderation AI\" title=\"Direct link to Better Messages Moderation AI\" translate=\"no\">​</a></h3>\n<ul>\n<li class=\"\"><strong>No third-party API key</strong> required. Included at no extra cost with the WebSocket license.</li>\n<li class=\"\"><strong>Powered by Better Messages Cloud</strong> — no data sent to OpenAI or any other third party.</li>\n<li class=\"\"><strong>23 content categories</strong> — including extended categories OpenAI's API does not cover.</li>\n<li class=\"\"><strong>Custom moderation rules</strong> — define your own rules in plain text (\"Block contact info\", \"Block off-platform redirects\", etc.).</li>\n<li class=\"\"><strong>Conversation context awareness</strong> — detects patterns spread across multiple messages (e.g. a phone number split into two parts to evade single-message checks).</li>\n<li class=\"\"><strong>Text and image moderation</strong>.</li>\n</ul>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"openai-moderation-api\">OpenAI Moderation API<a href=\"https://www.better-messages.com/blog/ai-content-moderation-wordpress-chat/#openai-moderation-api\" class=\"hash-link\" aria-label=\"Direct link to OpenAI Moderation API\" title=\"Direct link to OpenAI Moderation API\" translate=\"no\">​</a></h3>\n<ul>\n<li class=\"\"><strong>Free to use</strong> with your own OpenAI API key.</li>\n<li class=\"\"><strong>Fixed set of categories</strong> — OpenAI's standard moderation taxonomy.</li>\n<li class=\"\"><strong>Configurable confidence threshold</strong>.</li>\n<li class=\"\"><strong>Text and image moderation</strong>.</li>\n</ul>\n<p>For most sites, Better Messages Moderation AI is the default — it has more categories, supports custom rules, and does not require an external API account. OpenAI is the right pick if you have an existing OpenAI workflow and prefer to consolidate.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"what-actions-are-available\">What actions are available<a href=\"https://www.better-messages.com/blog/ai-content-moderation-wordpress-chat/#what-actions-are-available\" class=\"hash-link\" aria-label=\"Direct link to What actions are available\" title=\"Direct link to What actions are available\" translate=\"no\">​</a></h2>\n<p>Two actions per flagged message:</p>\n<ul>\n<li class=\"\"><strong>Flag Only (recommended)</strong> — the message is delivered normally but marked for admin review. Best for UX since no AI is 100% accurate, and legitimate messages do not get blocked.</li>\n<li class=\"\"><strong>Hold for Review</strong> — the message is held until an admin approves or rejects it. Stricter, but may delay legitimate messages — appropriate for high-stakes environments (regulated industries, minors-safe communities).</li>\n</ul>\n<p>Moderators review flagged / held messages in the <strong>Better Messages → Administration</strong> screen.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"content-categories\">Content categories<a href=\"https://www.better-messages.com/blog/ai-content-moderation-wordpress-chat/#content-categories\" class=\"hash-link\" aria-label=\"Direct link to Content categories\" title=\"Direct link to Content categories\" translate=\"no\">​</a></h2>\n<p>Both providers detect the base OpenAI categories:</p>\n<ul>\n<li class=\"\">Hate / Hate-Threatening</li>\n<li class=\"\">Harassment / Harassment-Threatening</li>\n<li class=\"\">Sexual Content / Sexual Minors</li>\n<li class=\"\">Violence / Violence-Graphic</li>\n<li class=\"\">Self-Harm / Self-Harm Intent / Self-Harm Instructions</li>\n<li class=\"\">Illicit / Illicit-Violent</li>\n</ul>\n<p><strong>Better Messages Moderation AI</strong> adds extended categories that OpenAI does not cover:</p>\n<ul>\n<li class=\"\">Spam</li>\n<li class=\"\">Scam / Phishing</li>\n<li class=\"\">Minor Safety</li>\n<li class=\"\">Contact Sharing (phone numbers, emails, social handles, off-platform redirects)</li>\n<li class=\"\">Profanity</li>\n<li class=\"\">Impersonation</li>\n<li class=\"\">Doxxing</li>\n<li class=\"\">Drugs / Alcohol</li>\n<li class=\"\">Threats</li>\n<li class=\"\">Commercial Promotion</li>\n</ul>\n<p>Selecting a parent category covers its subcategories.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"custom-rules-bm-moderation-ai\">Custom rules (BM Moderation AI)<a href=\"https://www.better-messages.com/blog/ai-content-moderation-wordpress-chat/#custom-rules-bm-moderation-ai\" class=\"hash-link\" aria-label=\"Direct link to Custom rules (BM Moderation AI)\" title=\"Direct link to Custom rules (BM Moderation AI)\" translate=\"no\">​</a></h2>\n<p>Beyond categories, Better Messages Moderation AI supports plain-text custom rules. One rule per line:</p>\n<div class=\"language-text codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#393A34;--prism-background-color:#f6f8fa\"><div class=\"codeBlockContent_QJqH\"><pre tabindex=\"0\" class=\"prism-code language-text codeBlock_bY9V thin-scrollbar\" style=\"color:#393A34;background-color:#f6f8fa\"><code class=\"codeBlockLines_e6Vv\"><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">Block contact info (phones, emails, social handles) and off-platform moves</span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">Block promotions, affiliate links, recruitment</span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">Block discussion of competitor platforms</span><br></span></code></pre></div></div>\n<p>The AI applies each rule per message and per conversation context. Categories and custom rules work independently — use one, the other, or both.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"conversation-context\">Conversation context<a href=\"https://www.better-messages.com/blog/ai-content-moderation-wordpress-chat/#conversation-context\" class=\"hash-link\" aria-label=\"Direct link to Conversation context\" title=\"Direct link to Conversation context\" translate=\"no\">​</a></h2>\n<p>The conversation-context setting controls how many previous messages the AI considers for the moderation decision (0–20, default 5–10). This is how the AI catches patterns split across messages — a phone number broken into two messages, or a leading sentence in one message that makes the next message harmful.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"bypass-roles\">Bypass roles<a href=\"https://www.better-messages.com/blog/ai-content-moderation-wordpress-chat/#bypass-roles\" class=\"hash-link\" aria-label=\"Direct link to Bypass roles\" title=\"Direct link to Bypass roles\" translate=\"no\">​</a></h2>\n<p>Admins, moderators, instructors, and other trusted roles can bypass moderation. Configure in <strong>Settings → Moderation → Bypass Roles</strong>. Moderation does not run for messages from these roles.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"how-to-enable\">How to enable<a href=\"https://www.better-messages.com/blog/ai-content-moderation-wordpress-chat/#how-to-enable\" class=\"hash-link\" aria-label=\"Direct link to How to enable\" title=\"Direct link to How to enable\" translate=\"no\">​</a></h2>\n<ol>\n<li class=\"\"><strong>WP Admin → Better Messages → Settings → Moderation</strong>.</li>\n<li class=\"\">Select a <strong>Moderation Provider</strong> (Better Messages or OpenAI).</li>\n<li class=\"\">Enable <strong>AI Moderation</strong>.</li>\n<li class=\"\">Choose the <strong>Flagged Message Action</strong> (Flag Only or Hold for Review).</li>\n<li class=\"\">Select the content categories to detect.</li>\n<li class=\"\">(BM provider) Add custom rules in the Custom Rules textarea.</li>\n<li class=\"\">Set the conversation-context size.</li>\n<li class=\"\">Configure bypass roles.</li>\n<li class=\"\">(OpenAI) Paste your OpenAI API key under <strong>Integrations → OpenAI</strong>. Requires PHP 8.1+.</li>\n</ol>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"free-vs-websocket-version\">Free vs WebSocket version<a href=\"https://www.better-messages.com/blog/ai-content-moderation-wordpress-chat/#free-vs-websocket-version\" class=\"hash-link\" aria-label=\"Direct link to Free vs WebSocket version\" title=\"Direct link to Free vs WebSocket version\" translate=\"no\">​</a></h2>\n<table><thead><tr><th>Feature</th><th style=\"text-align:center\">Free version</th><th style=\"text-align:center\">WebSocket version</th></tr></thead><tbody><tr><td>OpenAI Moderation API (with your OpenAI key)</td><td style=\"text-align:center\">yes</td><td style=\"text-align:center\">yes</td></tr><tr><td><strong>Better Messages Moderation AI</strong> (no API key, BM Cloud)</td><td style=\"text-align:center\">—</td><td style=\"text-align:center\">yes</td></tr><tr><td>Custom moderation rules</td><td style=\"text-align:center\">—</td><td style=\"text-align:center\">yes</td></tr><tr><td>Conversation context awareness</td><td style=\"text-align:center\">—</td><td style=\"text-align:center\">yes</td></tr><tr><td>Extended categories (spam, contact sharing, doxxing, etc.)</td><td style=\"text-align:center\">—</td><td style=\"text-align:center\">yes</td></tr><tr><td>Text + image moderation</td><td style=\"text-align:center\">yes (OpenAI)</td><td style=\"text-align:center\">yes (both providers)</td></tr></tbody></table>\n<div class=\"theme-admonition theme-admonition-info admonition_xJq3 alert alert--info\"><div class=\"admonitionHeading_Gvgb\"><span class=\"admonitionIcon_Rf37\"><svg viewBox=\"0 0 14 16\"><path fill-rule=\"evenodd\" d=\"M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z\"></path></svg></span>info</div><div class=\"admonitionContent_BuS1\"><p>Better Messages Moderation AI is the substantial WebSocket-version perk on the moderation side. The extended categories (especially Spam, Contact Sharing, Doxxing, Impersonation, Commercial Promotion) are exactly what community admins moderate most often — and OpenAI's standard moderation API does not flag those.</p></div></div>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"data-privacy\">Data privacy<a href=\"https://www.better-messages.com/blog/ai-content-moderation-wordpress-chat/#data-privacy\" class=\"hash-link\" aria-label=\"Direct link to Data privacy\" title=\"Direct link to Data privacy\" translate=\"no\">​</a></h2>\n<p>Message content is sent to the selected provider for analysis. <strong>Better Messages Cloud does not store any message data</strong> — content is analyzed in real time and immediately discarded. If using OpenAI, review OpenAI's data-usage policy. AI moderation does not run on end-to-end encrypted threads (the server cannot see the ciphertext).</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"frequently-asked-questions\">Frequently asked questions<a href=\"https://www.better-messages.com/blog/ai-content-moderation-wordpress-chat/#frequently-asked-questions\" class=\"hash-link\" aria-label=\"Direct link to Frequently asked questions\" title=\"Direct link to Frequently asked questions\" translate=\"no\">​</a></h2>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"will-this-catch-every-harmful-message\">Will this catch every harmful message?<a href=\"https://www.better-messages.com/blog/ai-content-moderation-wordpress-chat/#will-this-catch-every-harmful-message\" class=\"hash-link\" aria-label=\"Direct link to Will this catch every harmful message?\" title=\"Direct link to Will this catch every harmful message?\" translate=\"no\">​</a></h3>\n<p>No — no AI moderation is 100% accurate. The recommended <strong>Flag Only</strong> mode delivers messages normally and asks an admin to review flagged ones, so false negatives still get a human-review pass and false positives do not block legitimate conversations.</p>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"does-it-work-in-real-time\">Does it work in real time?<a href=\"https://www.better-messages.com/blog/ai-content-moderation-wordpress-chat/#does-it-work-in-real-time\" class=\"hash-link\" aria-label=\"Direct link to Does it work in real time?\" title=\"Direct link to Does it work in real time?\" translate=\"no\">​</a></h3>\n<p>Yes — moderation runs on every message at send time. With Flag Only, the message is delivered immediately; the flag is applied in parallel. With Hold for Review, the send blocks until the moderation decision returns (typically under a second).</p>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"does-it-support-non-english-content\">Does it support non-English content?<a href=\"https://www.better-messages.com/blog/ai-content-moderation-wordpress-chat/#does-it-support-non-english-content\" class=\"hash-link\" aria-label=\"Direct link to Does it support non-English content?\" title=\"Direct link to Does it support non-English content?\" translate=\"no\">​</a></h3>\n<p>Yes — both providers handle the major Western, CJK, and Indic languages. Coverage of less-common languages depends on the underlying AI provider.</p>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"will-it-flag-legitimate-technical-messages-code-urls-etc\">Will it flag legitimate technical messages (code, URLs, etc.)?<a href=\"https://www.better-messages.com/blog/ai-content-moderation-wordpress-chat/#will-it-flag-legitimate-technical-messages-code-urls-etc\" class=\"hash-link\" aria-label=\"Direct link to Will it flag legitimate technical messages (code, URLs, etc.)?\" title=\"Direct link to Will it flag legitimate technical messages (code, URLs, etc.)?\" translate=\"no\">​</a></h3>\n<p>The AI providers are tuned to avoid false positives on common technical content. If you see false positives, the <strong>Flag Only</strong> mode lets you build a feel for the model's behavior before switching to <strong>Hold for Review</strong>.</p>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"can-i-turn-off-image-moderation-independently\">Can I turn off image moderation independently?<a href=\"https://www.better-messages.com/blog/ai-content-moderation-wordpress-chat/#can-i-turn-off-image-moderation-independently\" class=\"hash-link\" aria-label=\"Direct link to Can I turn off image moderation independently?\" title=\"Direct link to Can I turn off image moderation independently?\" translate=\"no\">​</a></h3>\n<p>Yes — the <strong>Moderate Images</strong> toggle is separate from text moderation. Disable it on sites where users only share documents and PDFs.</p>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"does-it-work-with-the-ai-chat-bots-add-on\">Does it work with the AI Chat Bots add-on?<a href=\"https://www.better-messages.com/blog/ai-content-moderation-wordpress-chat/#does-it-work-with-the-ai-chat-bots-add-on\" class=\"hash-link\" aria-label=\"Direct link to Does it work with the AI Chat Bots add-on?\" title=\"Direct link to Does it work with the AI Chat Bots add-on?\" translate=\"no\">​</a></h3>\n<p>The two are independent. AI Chat Bots are conversation participants; AI Content Moderation is a pre-delivery check on every message. A bot's responses can be moderation-checked too — useful for guarding against AI hallucinations of harmful content.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"see-also\">See also<a href=\"https://www.better-messages.com/blog/ai-content-moderation-wordpress-chat/#see-also\" class=\"hash-link\" aria-label=\"Direct link to See also\" title=\"Direct link to See also\" translate=\"no\">​</a></h2>\n<ul>\n<li class=\"\"><a class=\"\" href=\"https://www.better-messages.com/docs/features/ai-content-moderation/\">AI Content Moderation feature documentation</a> — full reference</li>\n<li class=\"\"><a class=\"\" href=\"https://www.better-messages.com/blog/ai-chat-bots-wordpress-messaging/\">AI Chat Bots for WordPress private messaging</a> — the related AI add-on</li>\n<li class=\"\"><a class=\"\" href=\"https://www.better-messages.com/docs/features/pre-moderation/\">Pre-moderation documentation</a> — manual + AI hybrid moderation flow</li>\n<li class=\"\"><a class=\"\" href=\"https://www.better-messages.com/blog/gdpr-compliant-wordpress-messaging/\">GDPR-compliant WordPress messaging</a> — privacy footprint of the moderation flow</li>\n</ul>\n<p><a href=\"https://wordpress.org/plugins/bp-better-messages/\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\"><strong>Install Better Messages from WordPress.org →</strong></a></p>",
            "url": "https://www.better-messages.com/blog/ai-content-moderation-wordpress-chat/",
            "title": "AI Content Moderation for WordPress Chat",
            "summary": "Automatically detect harmful content in WordPress private messages and chat rooms — Better Messages Moderation AI (no API key, included with WebSocket) or OpenAI Moderation. Flag or hold for review.",
            "date_modified": "2026-01-20T00:00:00.000Z",
            "author": {
                "name": "Andrij Tkachenko",
                "url": "/docs/getting-started/about"
            },
            "tags": [
                "Community",
                "WebSocket",
                "Guides"
            ]
        },
        {
            "id": "https://www.better-messages.com/blog/ai-message-translation-wordpress/",
            "content_html": "<p>WordPress communities that span multiple countries hit the same wall: the chat feed becomes a polyglot mess where half the members cannot read what the other half wrote. Static translation plugins (WPML, Polylang) translate site content but not user-generated message bodies. Better Messages handles this with AI message translation: each member sets their preferred display language; messages from other members are auto-translated by an AI provider on the fly. The sender writes in their language, the recipient reads in theirs — both sides see the original on hover.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"how-ai-message-translation-works\">How AI message translation works<a href=\"https://www.better-messages.com/blog/ai-message-translation-wordpress/#how-ai-message-translation-works\" class=\"hash-link\" aria-label=\"Direct link to How AI message translation works\" title=\"Direct link to How AI message translation works\" translate=\"no\">​</a></h2>\n<ol>\n<li class=\"\"><strong>Each user picks a preferred language</strong> in their profile — one of dozens of supported languages.</li>\n<li class=\"\"><strong>Messages from other users get translated</strong> to the recipient's preferred language at render time.</li>\n<li class=\"\"><strong>The original is preserved</strong>; a \"show original\" hover or tap reveals the original-language text.</li>\n<li class=\"\"><strong>The sender sees their own messages in the original language</strong> — no double-translation round-trip.</li>\n<li class=\"\"><strong>Translation runs through your configured AI provider</strong> — OpenAI, Anthropic Claude, or Google Gemini — using the same API keys you set up for AI Chat Bots.</li>\n</ol>\n<p>The translation is per-recipient, per-message — a Spanish-speaking member reading a thread sees every message translated to Spanish; an English-speaking member sees the same thread in English.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"when-to-enable-per-thread-vs-site-wide\">When to enable per-thread vs site-wide<a href=\"https://www.better-messages.com/blog/ai-message-translation-wordpress/#when-to-enable-per-thread-vs-site-wide\" class=\"hash-link\" aria-label=\"Direct link to When to enable per-thread vs site-wide\" title=\"Direct link to When to enable per-thread vs site-wide\" translate=\"no\">​</a></h2>\n<p>Translation has a real cost (AI tokens) and a real UX trade-off (translated text loses nuance). Most sites enable it as an opt-in per thread:</p>\n<ul>\n<li class=\"\"><strong>A multilingual cohort chat</strong> — turn on for the thread, every member reads in their language.</li>\n<li class=\"\"><strong>An international vendor ↔ buyer chat</strong> — turn on once a language gap is noticed.</li>\n<li class=\"\"><strong>A community AMA with international audience</strong> — turn on for the AMA group.</li>\n</ul>\n<p>For sites where most threads are multilingual, the global toggle in <strong>Better Messages → Settings → AI Translation</strong> enables it by default for every new thread.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"cost-control\">Cost control<a href=\"https://www.better-messages.com/blog/ai-message-translation-wordpress/#cost-control\" class=\"hash-link\" aria-label=\"Direct link to Cost control\" title=\"Direct link to Cost control\" translate=\"no\">​</a></h2>\n<p>AI translation tokens are charged to the configured provider. Better Messages tracks usage:</p>\n<ul>\n<li class=\"\"><strong>Per-thread token tracking</strong> — see token spend per thread in the admin.</li>\n<li class=\"\"><strong>Per-role rate limiting</strong> — restrict translation to specific roles (e.g. only paid members).</li>\n<li class=\"\"><strong>Points charging</strong> — combine with the <a class=\"\" href=\"https://www.better-messages.com/blog/mycred-pay-to-message/\">MyCred</a> or <a class=\"\" href=\"https://www.better-messages.com/blog/gamipress-pay-to-message/\">GamiPress</a> integration to charge points per translation, controlling cost without disabling the feature.</li>\n</ul>\n<p>For most communities the token cost is small (translations are short), but a high-traffic public site should configure rate limits before going live.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"languages-supported\">Languages supported<a href=\"https://www.better-messages.com/blog/ai-message-translation-wordpress/#languages-supported\" class=\"hash-link\" aria-label=\"Direct link to Languages supported\" title=\"Direct link to Languages supported\" translate=\"no\">​</a></h2>\n<p>The AI providers (OpenAI / Claude / Gemini) support 50+ languages between them, with Claude and GPT-4 family covering the broadest set. Specific accuracy varies by language pair — major Western languages, CJK languages, and Indic languages are all well-supported.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"installing-ai-message-translation\">Installing AI message translation<a href=\"https://www.better-messages.com/blog/ai-message-translation-wordpress/#installing-ai-message-translation\" class=\"hash-link\" aria-label=\"Direct link to Installing AI message translation\" title=\"Direct link to Installing AI message translation\" translate=\"no\">​</a></h2>\n<ol>\n<li class=\"\">Install <strong><a href=\"https://wordpress.org/plugins/bp-better-messages/\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\">Better Messages from WordPress.org</a></strong> (WebSocket version recommended).</li>\n<li class=\"\">Install the Better Messages AI add-on (same add-on that powers AI Chat Bots) and configure at least one AI provider's API key.</li>\n<li class=\"\">Open <strong>WP Admin → Better Messages → Settings → AI Translation</strong> and enable the feature.</li>\n<li class=\"\">(Optional) Configure per-role permissions and rate limits.</li>\n<li class=\"\">(Optional) Combine with MyCred or GamiPress points charging.</li>\n</ol>\n<p>Members then pick their preferred language in their account settings.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"free-vs-websocket-version\">Free vs WebSocket version<a href=\"https://www.better-messages.com/blog/ai-message-translation-wordpress/#free-vs-websocket-version\" class=\"hash-link\" aria-label=\"Direct link to Free vs WebSocket version\" title=\"Direct link to Free vs WebSocket version\" translate=\"no\">​</a></h2>\n<p>AI message translation runs on the WebSocket version — the same constraint as AI Chat Bots, because translations are dispatched off the WebSocket event fan-out.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"frequently-asked-questions\">Frequently asked questions<a href=\"https://www.better-messages.com/blog/ai-message-translation-wordpress/#frequently-asked-questions\" class=\"hash-link\" aria-label=\"Direct link to Frequently asked questions\" title=\"Direct link to Frequently asked questions\" translate=\"no\">​</a></h2>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"does-this-work-with-wpml-or-polylang\">Does this work with WPML or Polylang?<a href=\"https://www.better-messages.com/blog/ai-message-translation-wordpress/#does-this-work-with-wpml-or-polylang\" class=\"hash-link\" aria-label=\"Direct link to Does this work with WPML or Polylang?\" title=\"Direct link to Does this work with WPML or Polylang?\" translate=\"no\">​</a></h3>\n<p>Yes — WPML / Polylang translate site content (posts, pages, menus). AI message translation handles user-generated chat content. They are complementary, not competing.</p>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"what-happens-with-technical-jargon-or-code-in-messages\">What happens with technical jargon or code in messages?<a href=\"https://www.better-messages.com/blog/ai-message-translation-wordpress/#what-happens-with-technical-jargon-or-code-in-messages\" class=\"hash-link\" aria-label=\"Direct link to What happens with technical jargon or code in messages?\" title=\"Direct link to What happens with technical jargon or code in messages?\" translate=\"no\">​</a></h3>\n<p>AI translation generally preserves code blocks and technical terms verbatim (they look like proper nouns to the model). For pure code chat, set the thread's translation to off — the original is always preserved underneath the translation, so members can toggle.</p>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"can-i-rely-on-it-for-legally-binding-translations\">Can I rely on it for legally-binding translations?<a href=\"https://www.better-messages.com/blog/ai-message-translation-wordpress/#can-i-rely-on-it-for-legally-binding-translations\" class=\"hash-link\" aria-label=\"Direct link to Can I rely on it for legally-binding translations?\" title=\"Direct link to Can I rely on it for legally-binding translations?\" translate=\"no\">​</a></h3>\n<p>No — AI translation is suitable for casual conversation, not for legally-binding text. For legal documents, use a certified human translator.</p>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"does-it-work-with-end-to-end-encrypted-threads\">Does it work with end-to-end encrypted threads?<a href=\"https://www.better-messages.com/blog/ai-message-translation-wordpress/#does-it-work-with-end-to-end-encrypted-threads\" class=\"hash-link\" aria-label=\"Direct link to Does it work with end-to-end encrypted threads?\" title=\"Direct link to Does it work with end-to-end encrypted threads?\" translate=\"no\">​</a></h3>\n<p>No — E2E messages are decrypted only in the participants' browsers, so the server-side AI cannot see them. Choose between E2E and AI translation per thread.</p>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"what-happens-if-the-ai-provider-is-down\">What happens if the AI provider is down?<a href=\"https://www.better-messages.com/blog/ai-message-translation-wordpress/#what-happens-if-the-ai-provider-is-down\" class=\"hash-link\" aria-label=\"Direct link to What happens if the AI provider is down?\" title=\"Direct link to What happens if the AI provider is down?\" translate=\"no\">​</a></h3>\n<p>Translation fails gracefully — the message is shown in its original language with a \"translation unavailable\" indicator. The thread does not break.</p>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"can-i-exclude-specific-languages-from-translation\">Can I exclude specific languages from translation?<a href=\"https://www.better-messages.com/blog/ai-message-translation-wordpress/#can-i-exclude-specific-languages-from-translation\" class=\"hash-link\" aria-label=\"Direct link to Can I exclude specific languages from translation?\" title=\"Direct link to Can I exclude specific languages from translation?\" translate=\"no\">​</a></h3>\n<p>Yes — per-thread configuration. A member who chose \"auto-translate to French\" sees a thread participant writing in Italian translated to French, but a thread set to \"no translation\" shows everything in original.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"see-also\">See also<a href=\"https://www.better-messages.com/blog/ai-message-translation-wordpress/#see-also\" class=\"hash-link\" aria-label=\"Direct link to See also\" title=\"Direct link to See also\" translate=\"no\">​</a></h2>\n<ul>\n<li class=\"\"><a class=\"\" href=\"https://www.better-messages.com/blog/ai-chat-bots-wordpress-messaging/\">AI Chat Bots</a> — the same AI add-on that powers translation</li>\n<li class=\"\"><a class=\"\" href=\"https://www.better-messages.com/blog/gamipress-pay-to-message/\">GamiPress pay-to-message</a> — for charging points per translation</li>\n<li class=\"\"><a class=\"\" href=\"https://www.better-messages.com/blog/mycred-pay-to-message/\">MyCred pay-to-message</a> — for charging points per translation</li>\n<li class=\"\"><a class=\"\" href=\"https://www.better-messages.com/blog/end-to-end-encrypted-wordpress-messaging/\">End-to-end encrypted messaging</a> — the trade-off with E2E threads</li>\n</ul>\n<p><a href=\"https://wordpress.org/plugins/bp-better-messages/\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\"><strong>Install Better Messages from WordPress.org →</strong></a></p>",
            "url": "https://www.better-messages.com/blog/ai-message-translation-wordpress/",
            "title": "AI Message Translation for WordPress Chat",
            "summary": "Auto-translate chat messages on a WordPress site — each member reads in their language while the sender writes in theirs. AI-powered, per-thread opt-in, works with OpenAI / Anthropic / Gemini.",
            "date_modified": "2026-01-15T00:00:00.000Z",
            "author": {
                "name": "Andrij Tkachenko",
                "url": "/docs/getting-started/about"
            },
            "tags": [
                "Community",
                "Guides",
                "WebSocket"
            ]
        }
    ]
}