{"id":342262,"date":"2026-08-02T09:25:43","date_gmt":"2026-08-02T09:25:43","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/live-chat-help-desk-by-mds\/"},"modified":"2026-08-08T06:57:32","modified_gmt":"2026-08-08T06:57:32","slug":"mds-live-chat-helpdesk","status":"publish","type":"plugin","link":"https:\/\/ml.wordpress.org\/plugins\/mds-live-chat-helpdesk\/","author":23369415,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.5.1","stable_tag":"1.5.1","tested":"7.0.4","requires":"6.0","requires_php":"7.4","requires_plugins":null,"header_name":"MDS Live Chat and Helpdesk","header_author":"Nagendra","header_description":"Live support chat system for WooCommerce - requesting\/active\/closed chat pipeline, guest & registered customer detection, order history lookup, agent transfer, roles, and self-hosted web push notifications (no third-party service).","assets_banners_color":"412b33","last_updated":"2026-08-08 06:57:32","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/mdsapps.in\/live-chat\/","header_author_uri":"https:\/\/mdsapps.in\/","rating":5,"author_block_rating":0,"active_installs":0,"downloads":154,"num_ratings":2,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.3.0":{"tag":"1.3.0","author":"nagendrarm","date":"2026-08-04 14:57:41"},"1.5.1":{"tag":"1.5.1","author":"nagendrarm","date":"2026-08-08 06:57:32"}},"upgrade_notice":{"1.1.0":"<p>Important security update - please update as soon as possible. No action needed; existing chats and settings are preserved automatically.<\/p>","1.0.0":"<p>Initial release.<\/p>"},"ratings":{"1":0,"2":0,"3":0,"4":0,"5":2},"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3631790,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3631790,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3631865,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3631865,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.3.0","1.5.1"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3631790,"resolution":"1","location":"assets","locale":"","width":1536,"height":1024},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3631790,"resolution":"2","location":"assets","locale":"","width":1535,"height":1024},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3631790,"resolution":"3","location":"assets","locale":"","width":1535,"height":1024},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3631790,"resolution":"4","location":"assets","locale":"","width":1535,"height":1024},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3631790,"resolution":"5","location":"assets","locale":"","width":1535,"height":1024}},"screenshots":{"1":"Customer-facing chat widget","2":"Admin chat dashboard","3":"Settings page"}},"plugin_section":[],"plugin_tags":[4049,2379,1155,1104,286],"plugin_category":[45,47],"plugin_contributors":[274224],"plugin_business_model":[],"class_list":["post-342262","plugin","type-plugin","status-publish","hentry","plugin_tags-helpdesk","plugin_tags-live-chat","plugin_tags-push-notifications","plugin_tags-support","plugin_tags-woocommerce","plugin_category-ecommerce","plugin_category-education-and-support","plugin_contributors-nagendrarm","plugin_committers-nagendrarm"],"banners":{"banner":"https:\/\/ps.w.org\/mds-live-chat-helpdesk\/assets\/banner-772x250.png?rev=3631865","banner_2x":"https:\/\/ps.w.org\/mds-live-chat-helpdesk\/assets\/banner-1544x500.png?rev=3631865","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/mds-live-chat-helpdesk\/assets\/icon-128x128.png?rev=3631790","icon_2x":"https:\/\/ps.w.org\/mds-live-chat-helpdesk\/assets\/icon-256x256.png?rev=3631790","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/mds-live-chat-helpdesk\/assets\/screenshot-1.png?rev=3631790","caption":"Customer-facing chat widget"},{"src":"https:\/\/ps.w.org\/mds-live-chat-helpdesk\/assets\/screenshot-2.png?rev=3631790","caption":"Admin chat dashboard"},{"src":"https:\/\/ps.w.org\/mds-live-chat-helpdesk\/assets\/screenshot-3.png?rev=3631790","caption":"Settings page"},{"src":"https:\/\/ps.w.org\/mds-live-chat-helpdesk\/assets\/screenshot-4.png?rev=3631790","caption":""},{"src":"https:\/\/ps.w.org\/mds-live-chat-helpdesk\/assets\/screenshot-5.png?rev=3631790","caption":""}],"raw_content":"<!--section=description-->\n<p>MDS Live Chat and Helpdesk adds a full support chat widget to your WooCommerce store, with a WhatsApp-style admin dashboard for managing conversations.<\/p>\n\n<p><strong>Key features:<\/strong><\/p>\n\n<ul>\n<li>Real-time chat between customers and support agents, no page refresh required<\/li>\n<li>Automatic ticket ID system (e.g. MDS-TKT-1001) for every conversation<\/li>\n<li>Requesting \/ Active \/ Closed chat pipeline with unread-message badges<\/li>\n<li>Guest and registered-customer support, with automatic order history and total order value lookup for WooCommerce orders<\/li>\n<li>Self-hosted Web Push notifications (built on the standard Web Push API) - no OneSignal or other third-party account needed<\/li>\n<li>Quick Replies (saved canned responses) for agents<\/li>\n<li>Auto Reply and Auto Resolve automation, each with configurable delays<\/li>\n<li>Agent roles and permissions, chat transfer between agents<\/li>\n<li>Agents can send photos and documents to customers (WhatsApp-style, view\/download) directly from the admin chat panel<\/li>\n<li>Selectable chat icon, icon size, and notification icon<\/li>\n<li>Bulk select and delete for chat history<\/li>\n<\/ul>\n\n<h4>Requirements<\/h4>\n\n<ul>\n<li>WooCommerce must be installed and active for order-history features to work. The chat system itself will function without WooCommerce, but order lookups will be skipped.<\/li>\n<\/ul>\n\n<h3>External Services<\/h3>\n\n<p>This plugin uses the browser's native <strong>Web Push<\/strong> capability to deliver chat-reply notifications to customers and agents even when the site isn't open in their browser.<\/p>\n\n<p><strong>What it is:<\/strong> Web Push is a W3C web standard built into every modern browser (Chrome, Firefox, Edge, Safari, etc.). It is not a third-party SaaS product - this plugin does not use OneSignal or any similar service, and no external account or API key is required. However, delivering a push message still relies on infrastructure the browser vendor itself operates (for example Google's Firebase Cloud Messaging for Chrome\/Edge, or Mozilla's Push Service for Firefox), because that is how the Web Push standard works in every browser that implements it. Because of that, this counts as an external service for disclosure purposes even though no MDS-operated or other third-party server is involved.<\/p>\n\n<p><strong>What is sent, and when:<\/strong> When a customer or agent opts in to notifications, their browser generates a push subscription (an endpoint URL plus encryption keys), which is stored on your own WordPress database - not on any external server operated by this plugin. When a new chat reply is sent, the plugin encrypts the notification title and message text (RFC 8291) and delivers it directly from your own site to that browser vendor's push endpoint, which then delivers it to the subscribed device. This happens only when a reply is sent on a chat the visitor has subscribed to; no data is sent at any other time, and no chat content is ever sent to us (the plugin developer) or stored anywhere outside your own WordPress database.<\/p>\n\n<p>Related policies:<\/p>\n\n<ul>\n<li>Privacy Policy: <a href=\"https:\/\/mdsapps.in\/live-chat\/privacy-policy\/\">https:\/\/mdsapps.in\/live-chat\/privacy-policy\/<\/a><\/li>\n<li>Terms of Service: <a href=\"https:\/\/mdsapps.in\/live-chat\/terms-of-service\/\">https:\/\/mdsapps.in\/live-chat\/terms-of-service\/<\/a><\/li>\n<\/ul>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>mds-live-chat-helpdesk<\/code> folder to the <code>\/wp-content\/plugins\/<\/code> directory, or install the plugin zip directly through the Plugins screen.<\/li>\n<li>Activate the plugin through the \"Plugins\" screen in WordPress.<\/li>\n<li>Go to <strong>MDS Live Chat and Helpdesk \u2192 Settings<\/strong> to configure the widget's appearance, position, and push notification icon.<\/li>\n<li>Go to <strong>MDS Live Chat and Helpdesk \u2192 Add Users \/ Roles<\/strong> to add support agents.<\/li>\n<li>Visit your site - the chat icon should appear according to your settings.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20this%20require%20woocommerce%3F\"><h3>Does this require WooCommerce?<\/h3><\/dt>\n<dd><p>WooCommerce is recommended so the order-history and order-value features work, but the core chat functionality works without it.<\/p><\/dd>\n<dt id=\"do%20i%20need%20a%20third-party%20push%20notification%20service%3F\"><h3>Do I need a third-party push notification service?<\/h3><\/dt>\n<dd><p>No. MDS Live Chat and Helpdesk generates its own Web Push (VAPID) keys automatically on activation and sends notifications directly through each browser's native Web Push service - no external account or API key required. See the \"External Services\" section above for details on how this works.<\/p><\/dd>\n<dt id=\"can%20customers%20attach%20files%3F\"><h3>Can customers attach files?<\/h3><\/dt>\n<dd><p>Not currently. Agents can send photos and documents to customers from the admin chat panel, and customers can view\/download them, but there is no upload option in the customer-facing widget itself.<\/p><\/dd>\n<dt id=\"does%20this%20work%20for%20guests%20as%20well%20as%20logged-in%20customers%3F\"><h3>Does this work for guests as well as logged-in customers?<\/h3><\/dt>\n<dd><p>Yes. Guests provide a name, email, and mobile number to start a chat; logged-in customers' details are used automatically.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.5.1<\/h4>\n\n<ul>\n<li>Fix: sites updating from a build that used the plugin's earlier \"mds_\" table-name prefix (before a WordPress.org-required rename to \"mdsapps_\") now have their existing chats, messages, agents, push subscriptions, and quick replies copied over to the new tables automatically. Previously the old data remained safely in the database but silently stopped appearing in the dashboard after updating, requiring manual recovery. The copy only moves columns that exist in both the old and new table (rather than assuming identical structure), so it works correctly even if the old table predates a newer column.<\/li>\n<\/ul>\n\n<h4>1.5.0<\/h4>\n\n<ul>\n<li>The Recent Orders panel in the admin chat view now shows each order's total amount alongside the order number, not just the order number.<\/li>\n<\/ul>\n\n<h4>1.4.0<\/h4>\n\n<ul>\n<li>Renamed all internal function\/class\/constant\/option\/hook names from the \"MDS_\" \/ \"mds_\" \/ \"mds-\" prefix to \"MDSAPPS_\" \/ \"mdsapps_\" \/ \"mdsapps-\", per WordPress.org review feedback that the 3-character \"mds\" prefix is too short and not unique enough (100,000+ plugins are hosted on WordPress.org, so short prefixes risk collisions). This affects PHP constants, class names, database option names, cron hook names, admin-post\/nonce action names, REST API namespace, and script\/style handles. It does not affect the plugin slug or text domain (mds-live-chat-helpdesk), which the review team already confirmed is fine as-is.<\/li>\n<li>Note: because the internal database table names changed as part of this (e.g. wp_mds_chats -&gt; wp_mdsapps_chats), any chats\/tickets created while testing an earlier pre-release build will no longer appear after updating - the plugin will simply create fresh tables under the new names. This only affects test data created before this plugin was ever approved for public release; there is no live user base to migrate.<\/li>\n<\/ul>\n\n<h4>1.3.0<\/h4>\n\n<ul>\n<li>Security: fixed a flaw where verify_customer_access() could not distinguish \"no such chat\" from \"chat exists but its access token is empty\/NULL\" - both cases were treated as authorized. The check now fails closed: a chat with no token denies access rather than granting it. Affects the poll, send, mark-seen, and subscribe endpoints.<\/li>\n<li>Security: resume-by-ticket (used to reconnect to a chat via Ticket ID + email\/phone, e.g. after clearing browser data) now has rate limiting, both per requesting IP and per ticket ID, after repeated failed attempts. This was previously guessable\/brute-forceable since ticket IDs are sequential and the contact field alone isn't a strong secret.<\/li>\n<li>Removed a \"legacy chat\" bypass in poll_messages\/verify_customer_access that is no longer applicable (the plugin has no prior public release to remain compatible with) and was itself the source of the two issues above.<\/li>\n<li>Hardening: the admin menu now only registers at all for users who are agents\/admins, instead of registering visibly for every logged-in WordPress user (e.g. customer accounts) and relying solely on a page-level check to turn them away. No change for actual agents\/admins.<\/li>\n<li>Removed a leftover unused settings-save handler (admin-post.php action) from before the Settings page was moved to the REST API; the REST endpoint has handled saving for some time; this was dead code, not a live code path.<\/li>\n<li>Fix: removed an incorrect \"Requires Plugins: woocommerce\" declaration in the plugin header. WooCommerce is optional (order lookup is skipped gracefully when it isn't installed, as already documented), but that header hard-blocks activation entirely on sites without WooCommerce - it contradicted the plugin's actual, intended behavior.<\/li>\n<\/ul>\n\n<h4>1.2.1<\/h4>\n\n<ul>\n<li>Fix: the \"Start Chat\" (and \"Resume Ticket\") button had no protection against multiple clicks, so a double-click or a slow connection could fire the request more than once, creating several duplicate tickets from the same visitor. The button is now disabled with a loading label while the request is in progress, and a matching safety check was added on the server so an accidental rapid resubmission reuses the ticket that's already being created instead of making a new one.<\/li>\n<\/ul>\n\n<h4>1.2.0<\/h4>\n\n<ul>\n<li>New: Agents can now send photos and documents to customers from the admin chat panel (an attach button next to Send). Customers can view images inline and download any file - WhatsApp-style. This is admin-to-customer only; the customer-facing widget does not gain a file-upload option, by design.<\/li>\n<\/ul>\n\n<h4>1.1.0<\/h4>\n\n<ul>\n<li>Security: customer-facing chat endpoints (poll, send, mark-seen, subscribe) now require proof of ownership of the specific chat before returning or accepting data, closing a gap that previously allowed any visitor to access another visitor's conversation by guessing a chat ID.<\/li>\n<li>Renamed the plugin to MDS Live Chat and Helpdesk (slug: mds-live-chat-helpdesk) for WordPress.org compliance.<\/li>\n<li>Moved all inline JavaScript and inline event handlers out of PHP templates into properly enqueued external script files.<\/li>\n<li>Added translation support (text domain: mds-live-chat-helpdesk) across admin screens.<\/li>\n<li>General code cleanup for WordPress Coding Standards compliance.<\/li>\n<li>Pasted links in chat messages are now automatically rendered as clickable links, both in the customer widget and the admin dashboard.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release.<\/li>\n<\/ul>","raw_excerpt":"Self-hosted live chat and support tickets for WooCommerce - real-time messaging, ticket IDs, order lookup, and free web push notifications.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/ml.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/342262","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ml.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/ml.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/ml.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=342262"}],"author":[{"embeddable":true,"href":"https:\/\/ml.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/nagendrarm"}],"wp:attachment":[{"href":"https:\/\/ml.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=342262"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/ml.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=342262"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/ml.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=342262"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/ml.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=342262"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/ml.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=342262"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/ml.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=342262"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}