Install BotNotice anywhere
One script, every platform. The notice appears beside your existing chat widget; nothing in your chat setup changes. Get your site key from the dashboard.
<script src="https://botnotice.app/w/YOUR_SITE_KEY.js" async></script>
WordPress
Plugin- Install the BotNotice plugin from the WordPress directory (or upload the zip).
- Settings → BotNotice → paste your site key → Save.
- Optional: add the [botnotice_statement] shortcode to your footer.
Shopify
App embed- Install the BotNotice app from the Shopify App Store.
- Online Store → Themes → Customize → App embeds → toggle BotNotice → paste your site key.
- Works with Shopify Inbox, Gorgias, Tidio and any storefront chat.
Google Tag Manager
Tag template- Templates → Tag Templates → New → Import botnotice.tpl.
- Create a tag from the template, paste your site key, trigger on All Pages, publish.
GoHighLevel
Footer code + webhooks- Sites → Settings → Tracking Code → Footer → paste the snippet.
- Add a Custom Webhook to your Conversation AI handoff workflow to log human takeovers.
- Agencies: save it all as a Snapshot and load it into every client.
Wix, Squarespace, Webflow, Framer, Carrd
Custom code- Site settings → Custom code (footer / before </body>).
- Paste the snippet from your dashboard. Done.
Intercom, HubSpot, Zendesk, Tidio, Crisp, LiveChat, Tawk.to, Chatbase, Voiceflow, Botpress
Nothing extra- Install the snippet on your site once.
- BotNotice detects these launchers automatically and shows the notice beside them.
Custom chatbots: the JavaScript API
If you built your own chat, or your platform hands conversations between AI and people, wire these calls in. They are available on window.BotNotice once the snippet loads.
Show, reset, minors
// Show the notice on demand (e.g. when your chat window opens) BotNotice.disclose(); // Forget the visitor's acknowledgement (testing) BotNotice.reset(); // Apply the stricter minor timer for this browser BotNotice.setMinor(true);
Answer "are you a bot?" truthfully
// Utah requires an honest answer when asked.
if (BotNotice.isAskingIfHuman(userMessage)) {
reply(BotNotice.disclosureText());
// → "You're chatting with an AI assistant, not a human…"
// → or, after a human handoff:
// "You're now chatting with a team member, a real person."
}Hybrid AI → human → AI handoffs
// A person takes over: logs the handoff, shows
// "You're now chatting with Maria, a real person",
// and pauses the 3-hour / hourly re-disclosure timer.
BotNotice.handoff('human', { name: 'Maria' });
// The bot resumes (after hours, overflow): logs it and
// re-discloses, as the statutes require for a new AI interaction.
BotNotice.handoff('ai');
// Suppress the visible message, keep the log entry:
BotNotice.handoff('human', { name: 'Maria', notify: false });
BotNotice.mode(); // 'ai' | 'human'Voice agents and server-side bots
No web page? Post events straight to the ledger from your voice platform, workflow tool, or backend.
POST https://botnotice.app/api/log
Content-Type: text/plain
{"k":"YOUR_SITE_KEY","e":"voice_disclosed","p":"call:abc123"}
// events: shown · ack · redisclosed · manual
// voice_disclosed · handoff_human · handoff_aiWhy handoffs matter legally
Disclosure duties attach to the AI part of a conversation. Handing to a person ends the duty; a person quietly handing back to AI (after hours, overflow) starts it again. The three-hour and hourly reminders in New York, Washington, Oregon and Connecticut count only AI time. Recording both transitions in the ledger is how you show which parts of a transcript were AI and that each AI segment was disclosed.