TalkDock — Floating Chat Button

Description

TalkDock adds a floating WhatsApp button to your site in under two minutes. Visitors tap it and WhatsApp opens straight to your number — no forms, no redirects, no friction.

One settings panel covers everything. No accounts, no code, nothing to configure outside WordPress.

What TalkDock does

  • Floating chat button — appears on every page; visitors tap it and WhatsApp opens directly to your number.
  • Full color control — solid colors or gradients via a built-in picker; matches any brand palette.
  • Flexible positioning — left or right, with fine-grained offset control.
  • Pre-filled welcome message — visitors arrive with a conversation starter already typed.
  • Animations & visibility rules — choose bounce, pulse, shake, or none; show to all visitors, logged-in users, or guests only; hide on mobile with one toggle.
  • Shortcode support — embed [talkdock_button] anywhere in posts or pages.
  • Live preview & clean uninstall — see changes before saving; plugin removes its own data on uninstall.

Upgrade to TalkDock Pro

The free plugin covers everything you need to get a WhatsApp button live. TalkDock Pro is the add-on for teams that want more control, more visibility, and more conversions.

Free

  • Floating chat button — all pages, all devices
  • Full color & gradient control with live preview
  • Flexible position and animation presets
  • Pre-filled welcome message
  • Visitor targeting by login state and device
  • Shortcode [talkdock_button] for inline embeds
  • Accessibility label and clean uninstall

Pro — everything above, plus:

  • Page-level targeting — show or hide the button by page ID, URL pattern, post type, or WooCommerce product
  • Multiple agents & departments — add unlimited agents with names, avatars, titles, and individual WhatsApp links; visitors pick the right person
  • Business hours & offline routing — set open/close windows per day; outside hours the widget auto-switches to a lead capture form
  • Offline leads inbox — missed enquiries saved server-side, reviewable in-dashboard, exportable as CSV
  • Click analytics & conversion tracking — day-by-day click chart per agent, 7/30/90-day windows, Google Analytics and Meta Pixel event firing, CSV export
  • Greeting bubbles & extra button styles — pop-up greeting animations, agent typing indicators, and additional button presets
  • Inline Gutenberg block — drop a fully-styled « Chat with us » CTA anywhere in the block editor

👉 Get TalkDock Pro

About WhatsApp

TalkDock is not affiliated with WhatsApp or Meta. The button opens a standard wa.me link — identical to any hand-coded WhatsApp link. The plugin never contacts WhatsApp’s servers on your behalf.

Privacy & External Services

TalkDock transmits nothing in normal operation — no tracking, no telemetry, no background requests. The floating button is a plain wa.me anchor tag; clicking it opens WhatsApp in the visitor’s browser and nothing else. The only outbound connection is the optional Report a Bug form, fired solely when an administrator clicks Send.

Data sent only when a bug report is submitted:

  • Report subject and message
  • Optional reply-to email address (only if you type one)
  • Up to three screenshot attachments (validated server-side; never stored in your media library)
  • Optional diagnostic info — opt-out, shown to you before sending: plugin, WordPress, PHP, and MySQL versions; active theme; locale; multisite flag; PHP memory limit
  • Never auto-collected: site URL, admin email, license keys, user list, active plugin list, or any visitor data
  • A local copy is saved in tlkd_feedback_log (last 50 entries; removed on uninstall)

External service used:

WhatsApp wa.me links are standard browser anchor tags. The plugin makes no server-side requests to WhatsApp or Meta.

Screenshots

  • General tab — enter your WhatsApp link, toggle the widget on or off, and set the accessibility label. Live preview updates on the right.
  • Design & Position tab — pick gradient colors, set horizontal alignment, adjust side and bottom distance, and choose a button animation.
  • Message tab — enable and configure a pre-filled message so visitors land with a conversation starter already typed.
  • Visibility tab — control who sees the button (all visitors, logged-in only, or guests) and hide it on mobile with one toggle.
  • Pro Features tab (free plugin) — overview of the TalkDock Pro add-on with feature cards covering business hours, multi-agent, page targeting, analytics, greeting bubbles, and inline embeds.
  • Pro License tab — active Pro workspace showing license details, plan, validity, and the full list of enabled Pro features.
  • General tab with Pro active — the full Pro tab bar unlocked: Business Hours, Offline Leads, Agents, Targeting, Analytics, Shortcode & Block, and Pro License.
  • Design tab with Pro active — advanced animation options including Pro-exclusive motion styles; button preview reflects multi-agent bubble rendering.
  • Message tab with Pro active — agent-aware prefill routing; assign prefilled messages to specific agents for personalised touchpoints.
  • Visibility tab with Pro active — full visibility and targeting panel with device, page ID, URL pattern, and agent-specific display logic.
  • Business Hours tab (Pro) — schedule-aware availability engine with per-day open/close windows, timezone selection, and automatic offline routing.
  • Agents tab (Pro) — multiple agents and departments panel; assign names, titles, avatars, departments, and individual WhatsApp links with drag-to-prioritise ordering.
  • Offline Leads tab (Pro) — captured offline lead messages with CSV export; visitor enquiries submitted outside business hours are stored and ready to review.
  • Targeting tab (Pro) — page-level targeting with include/exclude rules by post ID and URL pattern; deploy the button on checkout pages, hide it everywhere else.
  • Shortcode & Block tab (Pro) — inline embed tools showing the shortcode with inline and label variants plus a native Gutenberg block, with a live preview of the styled CTA.
  • Analytics tab (Pro) — click analytics dashboard with 7/30/90-day windows, a day-by-day bar chart, per-agent breakdown table, and CSV export.

Installation

  1. Upload the plugin ZIP through Plugins Add New Upload Plugin, or upload the plugin folder to /wp-content/plugins/.
  2. Activate the plugin via the Plugins screen.
  3. Go to TalkDock in the admin sidebar.
  4. Enter your WhatsApp link in the format https://wa.me/15551234567 and customize colors and position.
  5. Click Save Changes. The button will appear on your site.

FAQ

How do I find my WhatsApp link?

Use the format https://wa.me/<country-code><phone-number> — for example https://wa.me/15551234567. No plus sign, no spaces.

Will this work with my caching plugin?

Yes. TalkDock enqueues static assets and a sanitized generated stylesheet, so the button renders correctly regardless of page caching.

Can I show the button only on certain pages?

The free plugin supports targeting by login state and screen size (hide on mobile). Per-page, per-product, and URL-pattern targeting is available in TalkDock Pro.

Will I lose my settings if I deactivate?

No. Deactivation leaves settings intact. Data is removed only when you delete the plugin — and even then you can opt in to keep it.

Where do I get support?

Free support is available through the WordPress.org support forum for this plugin.

Reviews

There are no reviews for this plugin.

Contributors & Developers

“TalkDock — Floating Chat Button” is open source software. The following people have contributed to this plugin.

Contributors

Changelog

1.1.6

  • Refreshed plugin description copy for clarity and readability.

1.1.5

  • Resolved the Plugin Check nonce-verification warning in settings checkbox payload handling.
  • Reconfirmed AJAX no-refresh settings saving, persisted-value verification, and POST fallback.
  • Maintained save status feedback and live-preview refresh after successful saves.

1.1.2

  • Added the TalkDock Pro integration hooks while keeping all free features fully functional without the add-on.
  • Hardened settings saves, feedback uploads, frontend asset enqueues, and generated CSS output for WordPress.org review.
  • Refined the admin UI, responsive tab layout, and shadow-free design system.
  • Preserved the existing privacy posture: no background telemetry and no visitor data sent by the free plugin.

1.0.9

  • Fixed WordPress.org review blockers: all JavaScript is enqueued through WordPress, the text domain is consistently talkdock across plugin headers, gettext calls, and the POT template, external service disclosure is explicit, Report-a-Bug uploads are sanitized and validated at the boundary, and frontend design CSS is generated from validated values instead of printed as raw inline CSS.
  • Removed the remote Google Fonts admin dependency and uses the system font stack instead.
  • Cleaned admin/front-end markup output and tightened late escaping for dynamic values.
  • Normalized Markas Studio public links under https://studio.markashosting.com/plugins/talkdock/, including docs, support, TalkDock Pro, Terms of Use, and Privacy Policy permalinks.
  • Removed the optional author homepage header because the plugin-specific URL is intentionally used as the Plugin URI; this avoids duplicate URL validation errors during WordPress.org submission.

1.0.8

  • FIX (Report-a-Bug delivery): the modal showed « Thanks — your report has been recorded » even when the cross-site bug-report receiver returned HTTP 413 (payload too large). Two underlying issues: (a) the dispatcher treated any non-WP_Error response from wp_remote_post as success, so a 413 / 429 / 500 from the receiver slipped through as ok = true; (b) the receiver’s body cap was 1 MB while the plugin permits up to 3 × 5 MB images, so a typical multi-screenshot bug report exceeded the cap. The dispatcher now requires an actual 2xx status before reporting success; on non-2xx the modal shows an honest « Saved locally — receiver was unreachable » warning and leaves itself open so the user can resend. The receiver-side cap (in the Markas Studio dashboard’s plugin-bug intake) has been raised to 12 MB to match the plugin’s spec’d wire budget with comfortable headroom.
  • FIX (response parsing — receiver entry_id): the cross-site receiver responds with { success: true, id: <post_id>, message: '...' } on a successful intake, where id is the reference number of the recorded report on the receiver side. The previous dispatcher discarded the body entirely on 2xx and returned only { ok, status } upstream, so the receiver’s reference number was lost between layers. The dispatcher now decodes the response body, extracts the id field (accepting entry_id as a forward-compat alias), and propagates it as remote_entry_id through the dispatch result local log row AJAX response modal history pill. The user-facing success message now includes the receiver-assigned reference (« Thanks — your report has been recorded (ref #847). »), and the Previous Reports panel renders sent rows as « Sent · #847 » so the user has a number to cite in any follow-up. Pre-1.0.8 log entries that lack the field render as « Sent » with no reference, gracefully — no data migration required.
  • NEW (Smart auto-resize): screenshots are now optimized client-side before submission. Images larger than the per-image target are scaled to a 1920px longest edge and re-encoded as JPEG with progressive quality steps (0.85 0.72 0.6) until they fit. A typical 5 MB retina screenshot lands at ~400–600 KB without visible quality loss, and the 413 budget becomes practically unreachable from the UI.
  • NEW (Paste-from-clipboard): you can now paste a screenshot directly into the open modal with Cmd / Ctrl + V. Captured images run through the same auto-resize pipeline. A timestamped filename is synthesized so multiple pastes don’t collide. Text pastes into the subject / message inputs are left untouched.
  • NEW (Previous reports panel): an opt-in « Show previous reports » disclosure inside the modal lists the most recent submissions from this site with their delivery status (Sent / Local only / Not delivered). Reads from the existing bounded local log; no new options are created. Lazy-loaded on first expand.
  • FIX (wp_options bloat): the local tlkd_feedback_log option no longer stores the base64-encoded attachment binary. With 50 entries × up to 15 MB raw attachments, the option row could theoretically reach ~750 MB and slow every admin page load. The log now stores per-attachment metadata only (name, MIME, byte count); the audit trail is preserved, the bloat hazard is gone.
  • FIX (privacy / wire format): the dispatcher’s outbound User-Agent no longer includes home_url(). The readme privacy section already promised the plugin never auto-attaches your site URL, but the previous header TalkDock/1.0.7; <home_url> shipped it on every dispatch. The receiver-side dashboard derives the source host from the Origin / Referer header (unchanged), so the User-Agent is now plain TalkDock/1.0.8.
  • HARDENING (PHPCS hygiene): the $_FILES superglobal is read in three places inside process_attachments() (existence check, raw-array capture, per-file loop). The previous build used an inline phpcs:ignore that only covered one line and left the other two flagged. Replaced with a method-scoped phpcs:disable / phpcs:enable pair stacking both WordPress.Security.NonceVerification.Missing and WordPress.Security.ValidatedSanitizedInput.InputNotSanitized. Each suppression carries a one-line justification naming the mitigation. No behavioural change.
  • HARDENING (link-rel sweep): every target="_blank" link in the plugin’s admin views now uses rel="noopener noreferrer" (was rel="noopener"). noopener neutralizes reverse-tabnabbing; noreferrer additionally suppresses the Referer header so the destination site does not learn which wp-admin/admin.php?page=… page the click came from.
  • No change to the AJAX action names, the nonce, the option keys, the validation rules, the JSON payload schema, the diagnostic block, or what is opt-in vs opt-out. The 5 MB per-image cap and 3-image cap are unchanged. The set of fields transmitted is unchanged — except that the outbound User-Agent header no longer contains home_url(), per the readme’s privacy guarantee.

1.0.7

  • Polished the Report-a-Bug modal. The submit button now shows an inline spinner during dispatch and a brief checkmark on success instead of swapping its text; the form is disabled while the request is in flight so the loading state is clearly bounded.
  • Fixed a desktop layout regression where the modal could overflow the viewport once the « Sending… » status banner appeared, clipping the footer off the bottom of the screen. The dialog wrapping form body now form a proper flex column, so the body scrolls internally instead of pushing the dialog past its max-height cap. The status banner is also auto-scrolled into view when it appears. The dialog now also offsets for the WordPress admin bar (32px / 46px) so it never sits beneath it on desktop.
  • Replaced the fragile backdrop-filter: blur(8px) scrim with a solid dim (rgba(15, 16, 20, 0.62)) that renders deterministically regardless of WP admin chrome stacking contexts. The previous blur approach caused « ghost » rendering where tabs and buttons bled through the backdrop. Removed the associated defensive isolation: isolate and z-index: 0 hacks that were only propping up the broken filter.
  • Switched the admin CSS and JS enqueue from a static plugin-version cache key to a filemtime()-based version. Any byte-level change to admin/css/admin.css or admin/js/admin.js now forces an immediate browser refetch even when the plugin version has not been bumped. The headline plugin version stays visible in ?ver=… because the new format is TLKD_VERSION.MTIME with a graceful fallback to plain TLKD_VERSION if the file cannot be stat’d.
  • Refined the modal visuals toward a minimalist, system-style aesthetic: clean solid-dim backdrop, tighter typography, larger corner radius on desktop, and a primary-indigo Send action that matches the rest of the admin brand instead of the accent terracotta.
  • Mobile rendering hardened: switched the full-screen breakpoint to 100dvh (fixes iOS Safari toolbar overlap), added safe-area-inset padding for notched devices, and reduced the body padding so all fields stay reachable on narrow screens.
  • Accessibility: animations honor prefers-reduced-motion; the spinner is hidden from assistive tech; the live status region continues to announce send/success/error.
  • No change to the AJAX endpoint, validation rules, payload shape, dispatcher behavior, or privacy posture.

1.0.5

  • Suppressed five false-positive Plugin Check warnings in TLKD_Feedback. No behavioural change.

1.0.4

  • Added an optional « Report a Bug » button on the settings page sidebar. Opens a modal that accepts a subject, message, optional reply-to email, and up to three image attachments.
  • The feedback flow is transparent: nothing is transmitted until the administrator clicks Send. Diagnostic environment info is opt-out and the full payload is shown to the user before submission.
  • Submissions are recorded locally in a bounded log (tlkd_feedback_log, 50 most recent entries, removed on uninstall unless data is preserved).
  • New talkdock_feedback_payload and talkdock_feedback_dispatch filters let extensions modify the payload or replace the default dispatcher.
  • Added a == Privacy == section to this readme describing exactly what the Report-a-Bug flow transmits.

1.0.3

  • Renamed plugin to « TalkDock — Floating Chat Button » to comply with WordPress.org Plugin Check trademark rules.
  • Updated admin hero subtitle to match the new name.
  • No functional changes.

1.0.2

  • Rebranded from the previous internal name to « TalkDock ».
  • Reworked description and admin copy to be factual rather than promotional.
  • Removed the red upgrade link from the plugins list row.
  • Added an explicit non-affiliation notice regarding WhatsApp.
  • Shortcode renamed to [talkdock_button].

1.0.0

  • First release.
  • Floating chat button with color, position, and animation controls.
  • Prefilled message support.
  • Visibility rules (login state, hide on mobile).
  • Accessibility-first markup.
  • Inline shortcode for placing buttons inside content.
  • Auto-migration from the legacy custom_wa_* standalone snippet.