Proactive Triggers
Proactive triggers let your chatbot reach out first instead of waiting for a click. When a visitor lingers on your pricing page, scrolls to the bottom, or moves to close the tab, the bot can pop up with a relevant message. Used well, this lifts engagement; used badly, it annoys people — so the feature ships with several anti-annoyance limits (covered below).
Getting Started
- Navigate to Dashboard → Chatbot → Widget Customization → Triggers tab
- Enable "Proactive Triggers"
- Add a trigger type and configure the message
- Save and rebuild the widget
Trigger Types
Nine trigger types are available. Each type fires under different visitor behavior conditions.
| Trigger Type | Description | Parameters | Example Use Case |
|---|---|---|---|
| Time on Page | Fires after a visitor spends X seconds on a page. | Delay (seconds): 5–300, default 30 | "You've been on our pricing page for a while — can I help you choose?" |
| Exit Intent | Fires when a visitor is about to leave. Desktop: mouse moves to top of viewport. Mobile: tab switch or browser minimization. | None | "Before you go — can I answer any questions?" |
| Scroll Depth | Fires when a visitor scrolls past X% of the page. | Scroll depth (%): 10–100, default 50 | "You've read quite far — do you have any questions?" |
| Inactivity | Fires after X seconds without mouse, keyboard, or scroll activity. | Inactivity (seconds): 10–300, default 60 | "It looks like you might have questions — can I help?" |
| URL Match | Fires when a visitor lands on specific pages matching glob patterns. Fires with a 2-second minimum delay. | URL patterns: glob patterns, one per line | "Welcome to our pricing page! Can I help you choose a plan?" |
| Section Visibility | Fires when a specific DOM element is visible in the viewport for X seconds (using IntersectionObserver). | CSS selector (e.g. #pricing), Visibility duration (sec.): 5–120, default 8 | "I see you're looking at our pricing — can I help?" |
| Returning Visitor | Fires when a visitor returns to the site for the Nth time (tracked via localStorage). | Minimum visits: 1–100, default 2 | "Welcome back! Can I help you today?" |
| Pages Visited | Fires after a visitor has viewed X pages in the current session (tracked via sessionStorage). | Minimum pages: 2–50, default 3 | "You've explored quite a bit — do you have questions?" |
| Rage Click | Fires when a visitor rapidly clicks the same element multiple times (frustration detection). | Click count: 3–10, default 4. Time window (ms): 500–3000, default 1500 | "Something seems to not be working — can I help?" |
Global Settings
These settings apply to all proactive triggers globally.
| Field | Description | Default |
|---|---|---|
| Enable Proactive Triggers | Master switch to enable/disable all proactive triggers. | Off |
| Max. triggers per session | Maximum number of proactive messages a visitor receives per browser tab session. After reaching this limit, no more triggers fire. (Range 1–100.) | 10 |
| Max. triggers per day | Maximum proactive messages per visitor within 24 hours (stored in browser localStorage). Prevents over-messaging returning visitors. (Range 1–50.) | 20 |
| Cooldown type | Per session: Cooldown resets when the tab is closed. Persistent: Cooldown is stored in the browser across visits. | Per session |
| Cooldown (seconds/hours) | Wait time after a trigger fires before the next trigger is allowed. The value is in seconds for session scope and hours for persistent scope. | 5 sec (session) / 24 hours (persistent) |
| Respect permanent dismiss | If a visitor closes the proactive message, they will never be messaged again (until they clear browser data). | On |
| Show as speech bubble | Displays the proactive message as a speech bubble next to the chat button when the chat is closed. If disabled, the chat opens directly. | On |
| Bubble auto-hide (sec.) | Time in seconds before the speech bubble automatically hides. Set to 0 to keep it visible until the visitor interacts. (Range 0–60.) | 0 (stays visible) |
Response Modes
Each trigger can use one of three response modes to control how the proactive message is generated and delivered.
| Mode | Description | Cost | Plan Required |
|---|---|---|---|
| Static message | Displays the configured message exactly as written. No API call. | Free | Standard or higher |
| AI context on reply | Shows the static message first. When the visitor replies, the bot receives page context (page title, meta description, or element text) for a context-aware response. | Only on reply | Premium or higher |
| AI-generated message | The bot generates the proactive greeting itself based on page content. Makes an API call when the trigger fires. Rate-limited to 50/hour, cached for 1 hour. 3-second timeout with fallback to static message. | Per trigger | Premium or higher |
Conditions & Scheduling
Each trigger supports optional conditions and scheduling to fine-tune when and where it fires.
Conditions
Conditions are AND-combined with the trigger.
| Field | Description |
|---|---|
| URL filter (glob) | Trigger only fires on pages matching this pattern. Empty = all pages. Example: /pricing/* |
| Mobile only | When enabled, the trigger fires only on mobile devices. Leave it off to fire on all devices. |
Schedule
| Field | Description |
|---|---|
| Enable schedule | Toggle time-based scheduling for this trigger. |
| Start time | The trigger becomes active at this time (HH:MM format). |
| End time | The trigger stops firing after this time. |
| Timezone | IANA timezone (e.g., Europe/Berlin, America/New_York). |
Trigger Combinations (AND Logic)
You can require that other triggers have also been satisfied before this trigger fires. For example, combine "Scroll Depth 70%" AND "Time on Page 45s" so the message only appears when both conditions are met.
Anti-Annoyance Protection
Proactive triggers include multiple layers of protection to avoid annoying visitors:
- Session limit — Max triggers per browser tab session (default: 10; lower it to 1–2 to be less intrusive)
- Daily limit — Max triggers per 24 hours across sessions (default: 20, stored in localStorage)
- Cooldown — Wait time between triggers (session or persistent)
- Permanent dismiss — Visitor who closes a message is never messaged again
- No re-trigger — Each specific trigger fires only once per session
- Chat open guard — No trigger fires when the chat is already open
- User message guard — No trigger fires after the visitor has already sent a message
- Bubble auto-hide — Speech bubble disappears automatically after configured time
Templates
Three pre-built template bundles are available to get started quickly. Loading a template replaces existing triggers (with confirmation).
| Template | Includes | Best For |
|---|---|---|
| E-Commerce Bundle | Exit Intent + Inactivity (60s) + Section Visibility (#cart) | Online shops, reducing cart abandonment |
| Lead Generation Bundle | Time on Page (30s) + Scroll Depth (70%) + Returning Visitor (2) | SaaS, B2B lead capture |
| Support Bundle | Rage Click + Inactivity (45s) | Help desks, documentation sites |
Analytics
The Triggers tab shows a performance overview table when data is available.
| Column | Description |
|---|---|
| Trigger | First 40 characters of the trigger message |
| Type | Trigger type (e.g., Time on Page, Exit Intent) |
| Fired | Total number of times the trigger was activated |
| Response rate | Percentage of fired triggers where the visitor sent a reply |
| Dismiss rate | Percentage of fired triggers where the visitor closed the message |
Use this data to optimize your trigger messages and settings. Low response rates may indicate the message is not relevant or the trigger fires too early.
Privacy / GDPR
Proactive triggers store the following data in the visitor's browser:
| Storage | Data | Purpose |
|---|---|---|
| localStorage | Visit count, daily trigger count, permanent dismiss flag, persistent cooldown timestamps | Cross-session tracking |
| sessionStorage | Fired trigger IDs, session trigger count, pages visited, session dismiss flag | Current session state |
Important:
- No cookies are set by proactive triggers
- No personal data is collected or transmitted
- Page context (for AI context on reply / AI-generated modes) is extracted from visible text only — no form data, no
data-*attributes - Context text is used for the current API call only and is not stored in the database
- Mention localStorage usage in your privacy policy
Best Practices
- Start simple — Begin with 1-2 triggers and measure performance before adding more
- Keep messages short — 1-2 sentences maximum; be helpful, not pushy
- Set appropriate delays — Time on Page: at least 15-30 seconds. Don't trigger immediately
- Use conditions — Target specific pages rather than firing everywhere
- Monitor analytics — Check response and dismiss rates regularly; adjust or disable low-performing triggers
- Respect visitors — Keep session limits low (1-2), enable permanent dismiss
- Test on mobile — Verify exit intent via tab switch works as expected
- Use templates — Start with a bundle and customize from there
- Combine triggers — Use AND logic for precise targeting (e.g., scroll + time)
- Add a privacy notice — Update your privacy policy to mention localStorage usage
