- Docs
- Install
Install on WordPress
Add the TalkingDot messenger to a WordPress site with the TalkingDot plugin — no code to paste — or by pasting your snippet into the site footer.
Option 1: the TalkingDot WordPress plugin (easiest)
The plugin adds the messenger to every page, can identify logged-in users (with identity verification) and shows WooCommerce customers’ number of orders and total spent in the inbox. The copy you download from your dashboard already contains your server address and workspace key.
- Download it. In your TalkingDot dashboard, open Settings → Installation and click Download WordPress plugin. You get a .zip file — don’t unzip it.
- Upload and activate. In WordPress, go to Plugins → Add New Plugin → Upload Plugin, choose the file, click Install Now, then Activate.
- Check the settings. Open Settings → TalkingDot, check the workspace key and click Save Changes. To verify signed-in users, paste your secret from Settings → Security into Identity verification secret (or define
TALKINGDOT_IDENTITY_SECRETinwp-config.php).
Use Hide on these pages to keep the messenger off pages like /checkout (one path per line, * as a wildcard). Developers can add their own user details with the talkingdot_settings filter; extra text or number fields become custom attributes.
Prefer code? Options 2 and 3 use your snippet from Settings → Installation in your TalkingDot dashboard. It contains your workspace key and looks like this:
<script src="https://talkingdot.com/widget.js" data-key="YOUR_WORKSPACE_KEY" async></script>Option 2: a header & footer code plugin
This option survives theme changes and updates. The steps below use WPCode (formerly "Insert Headers and Footers"), a free plugin from the WordPress.org directory. Any similar plugin with a footer box works the same way.
- Install the plugin. In WordPress, go to Plugins → Add New, search for WPCode, then click Install and Activate.
- Open its header and footer screen. In WPCode this is Code Snippets → Header & Footer. Menu names can change between plugin versions.
- Paste your snippet into the Footer box. Leave the Header and Body boxes as they are.
- Save. The messenger now loads on every page of your site.
Option 3: your child theme's functions.php
If you'd rather not add a plugin, print the snippet with the wp_footer action. Add this to your child theme's functions.php, or to a small site-specific plugin:
<?php
// TalkingDot messenger: printed just before </body> on every front-end page.
add_action( 'wp_footer', function () {
echo '<script src="https://talkingdot.com/widget.js" data-key="YOUR_WORKSPACE_KEY" async></script>' . "\n";
} );Don't edit a parent theme. Changes to a theme you downloaded (Astra, GeneratePress, Twenty Twenty-Four and so on) are wiped out the next time it updates. Use a child theme, a site-specific plugin, Option 1 or Option 2.
Block themes and the Site Editor
Block themes (edited in Appearance → Editor) don't have a box for site-wide scripts. A Custom HTML block in the footer template part can work, but it's easy to lose when templates are reset or switched. WordPress also strips scripts for users without the unfiltered_html permission, for example on multisite. On block themes, use Option 1 or Option 2.
Caching and optimization plugins
If you use a caching plugin (WP Rocket, W3 Total Cache, LiteSpeed Cache, WP Super Cache and so on) or a CDN, purge its cache after adding the snippet. Otherwise visitors keep getting old pages without it. "Delay JavaScript" or "combine JavaScript" features can postpone or break the messenger. If it doesn't appear, or appears only after scrolling, exclude widget.js from those features.
Optional: identify logged-in WordPress users
For membership sites, WooCommerce stores and other sites with accounts, you can pass the signed-in user to TalkingDot. Your team then sees their name and email, and their conversations follow them between devices. The user_hash proves the identity is genuine, and it must be computed on the server with your workspace secret. Copy the secret from Settings → Security, and see Identity verification for how it works.
1. Store the secret in wp-config.php, above the line that says "That's all, stop editing!". Never put it in a theme file, a plugin's settings box or anywhere in the page.
define( 'TALKINGDOT_IDENTITY_SECRET', 'paste-your-workspace-secret-here' );Using the plugin (Option 1)? You only need to paste the secret into its settings. With Options 2 and 3, follow these two steps.
2. Replace the snippet from Option 2 or Option 3 with this code in your child theme's functions.php or a site-specific plugin. If the snippet is also in a footer plugin, remove it from there.
<?php
add_action( 'wp_footer', function () {
if ( is_user_logged_in() && defined( 'TALKINGDOT_IDENTITY_SECRET' ) ) {
$user = wp_get_current_user();
$settings = array(
'user_id' => (string) $user->ID,
'email' => $user->user_email,
'name' => $user->display_name,
'user_hash' => hash_hmac( 'sha256', (string) $user->ID, TALKINGDOT_IDENTITY_SECRET ),
);
echo '<script>window.TalkingDotSettings = ' . wp_json_encode( $settings ) . ';'
. 'try{localStorage.setItem("talkingdot_wp","1")}catch(e){}</script>' . "\n";
} else {
// Signed out since the last page? Start a fresh, anonymous messenger session.
echo '<script>try{if(localStorage.getItem("talkingdot_wp")){localStorage.removeItem("talkingdot_wp");'
. 'window.TalkingDot=window.TalkingDot||function(){(TalkingDot.q=TalkingDot.q||[]).push(arguments)};'
. 'TalkingDot("shutdown")}}catch(e){}</script>' . "\n";
}
echo '<script src="https://talkingdot.com/widget.js" data-key="YOUR_WORKSPACE_KEY" async></script>' . "\n";
} );The else branch matters on shared computers. When someone signs out, it calls TalkingDot('shutdown') once, so the next person using that browser doesn't see the previous user's conversations.
Verify it works
- Open your site in a private window while logged out of WordPress. The launcher bubble appears in the bottom-right corner, or on whichever side you chose.
- Send a test message. It appears in your TalkingDot Inbox. Settings → Install also shows when the messenger was last seen on your site.
- If you added identification, log in and send another message. The conversation shows your WordPress name and email in the contact sidebar.
Troubleshooting
- Nothing appears: view the page source (Ctrl+U or ⌘+Option+U) and search for
widget.js. If it isn't there, purge your cache. If you used Option 3, make sure your theme callswp_footer(); almost all themes do. - The snippet is in the source, but no launcher: check the browser console for
TalkingDot: missing or invalid data-key. Also check whether a domain allow-list in Settings → Security leaves out this domain. - Security plugins with a Content-Security-Policy: allow
https://talkingdot.comas described in Install on any website. - Users show up as anonymous visitors: if your workspace requires identity verification, a wrong
user_hashis rejected and the browser console shows an "Identity verification failed" warning. Check that the secret inwp-config.phpmatches the one in Settings → Security exactly.
Next steps
- Identity verification: how
user_hashworks and how to require it. - JavaScript API: open the messenger from a "Contact us" button.
- Chatbots and Office hours: handle chats when you're away.