Proactive Triggers
Proactive triggers let your chatbot automatically start conversations based on visitor behavior. Instead of waiting for visitors to click the chat button, the bot can proactively reach out when certain conditions are met — increasing engagement and conversion rates.
Available from the Standard plan. Free plan users see an upgrade notice.
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. | 1 |
| Max. triggers per day | Maximum proactive messages per visitor within 24 hours (stored in browser localStorage). Prevents over-messaging returning visitors. | 3 |
| Cooldown type | Per session: Cooldown resets when the tab is closed. Persistent: Cooldown is stored in the browser across visits. | Per session |
| Cooldown (minutes/hours) | Wait time after a trigger fires before the next trigger is allowed. Minutes for session scope, hours for persistent scope. | 60 min / 24 hours |
| 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. | 15 |
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+ |
| 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 | Standard+ |
| 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/Enterprise |
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/* |
| Device | Restrict the trigger to: All devices, Desktop only, or Mobile only. |
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: 1)
- Daily limit — Max triggers per 24 hours across sessions (default: 3, 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
