Skip to content

Proactive Messages

New

Proactive messages let you start conversations with visitors before they reach out. A small bubble appears next to the chat launcher with a targeted CTA. When the visitor clicks it, the chat window opens with the assistant’s first message — no fake “user said this” messages, just a natural conversation starter.

  1. Create a proactive message in the dashboard — write the CTA text, configure triggers, set frequency
  2. Widget evaluates triggers client-side — time on page, URL match, scroll depth, exit intent, custom events
  3. Bubble appears next to the chat launcher with your CTA text and optional sender identity
  4. Visitor clicks — chat opens, assistant’s engagement message is shown, visitor replies naturally
  5. Analytics tracked — impressions, hovers, clicks, dismissals, and conversions with full page context

Triggers control when a proactive message appears. Multiple triggers on the same message use AND logic — all must match.

Show after the visitor has been on the page for a specified duration.

{ "type": "time_on_page", "seconds": 15 }

Show only on specific pages. Multiple patterns use OR logic (any match triggers).

{ "type": "url_match", "patterns": ["/pricing", "/plans"], "match": "starts_with" }

Match modes: exact, starts_with, contains, regex.

Show when the cursor leaves the top of the browser viewport (desktop only, ignored on touch devices). Requires a minimum 5 seconds on page to prevent false positives.

{ "type": "exit_intent" }

Show when the visitor scrolls past a percentage of the page.

{ "type": "scroll_depth", "percent": 50 }

Show when your website code fires a specific event via the SDK.

{ "type": "custom_event", "event": "viewed-pricing-table" }

Trigger the event from your code:

receiveo.api.track('viewed-pricing-table');

Show different messages based on traffic source.

{ "type": "utm_match", "field": "utm_source", "values": ["google", "facebook"], "match": "exact" }

Fields: utm_source, utm_medium, utm_campaign, utm_term, utm_content, referrer. Match modes: exact, contains.

Target new or returning visitors.

{ "type": "visitor_type", "is_returning": true }

Target specific device types.

{ "type": "device_type", "devices": ["desktop", "mobile"] }

Values: desktop, mobile, tablet.

Control how often a message is shown to the same visitor.

FrequencyBehavior
once_everShow once, never again (persisted in localStorage)
once_per_sessionShow once per browser session (sessionStorage)
once_per_visitShow once per page load
every_timeShow every time all triggers match

Global cooldown: After any proactive message is dismissed, no other message shows for N minutes (default 30, configurable in workspace settings).

Priority: When multiple messages match the same page simultaneously, the highest priority wins. Only one message is shown at a time.

Message text supports {{variable}} templates with optional fallbacks:

Hi {{first_name | "there"}}! Need help choosing a plan?

Contact fields (populated when visitor is identified via identify()):

{{first_name}}, {{last_name}}, {{name}}, {{email}}, {{phone}}, {{city}}, {{country}}, {{job_title}}, {{company}}, {{lifecycle_stage}}

Custom fields (any custom field defined on your workspace):

{{custom.plan}}, {{custom.signup_date}}, etc.

Page context (always available):

{{page_url}}, {{page_path}}, {{page_title}}, {{referrer}}

Messages can be restricted to specific times, days, and date ranges:

  • Days of week — e.g., Monday through Friday only
  • Time of day — e.g., 9:00 AM to 5:00 PM in a specific timezone
  • Date range — e.g., run a campaign from April 1 to April 30

Fire a custom event for custom_event triggers.

receiveo.api.track('viewed-pricing-table');
receiveo.api.track('added-to-cart', { product: 'pro-plan' });

Get the list of proactive message configs loaded from your workspace.

const messages = receiveo.api.getProactiveMessages();
// [{ id: "pm-abc", content: "Need help?", engagementMessage: "...", priority: 10 }, ...]

Manually trigger a specific proactive message by ID, bypassing all trigger and frequency rules.

const messages = receiveo.api.getProactiveMessages();
if (messages.length > 0) {
receiveo.api.showProactiveMessage(messages[0].id);
}

Every proactive message interaction is tracked:

EventWhen
ImpressionMessage bubble is shown to the visitor
HoveredVisitor hovers over the bubble (once per impression)
EngagedVisitor clicks the CTA (opens chat)
DismissedVisitor clicks the X button
ConvertedVisitor sends their first reply in the CTA-originated conversation

The dashboard provides per-message analytics (funnel, time series, page/referrer breakdowns, contact list) and a comparison view across all messages.

When a visitor clicks a proactive message:

  1. The bubble disappears
  2. The chat window opens
  3. The assistant’s engagement message is shown as the first message (not a fake user message)
  4. The visitor replies naturally — the conversation proceeds as normal

This is the industry-standard pattern used by Intercom, Drift, HubSpot, Zendesk, and others. No wasted LLM round trips.