Start a live chat conversation from a company website

A visitor on a company website opens the chat widget and sends a message, establishing an anonymous real-time connection and creating a conversation — without any platform account.

When this happens: Visitor clicks the widget launcher and sends a message.

How it works

  • EasyCRM opens https://www.acme.example (a page with the installed snippet).
  • EasyCRM loads the widget loader script; the launcher appears bottom-right.
  • Clicks the launcher; the chat frame opens showing the configured greeting.
  • Calls BootstrapAsync: validates the page's origin against Allowed Origins, checks the honeypot and the per-IP rate limit, finds no existing valid resume token, and creates a new VisitorSession with a temporary identifier and a visitor hub token.
  • Types Do you ship to Moldova? and sends it.
  • EasyCRM checks length and rate limit, creates the Conversation (FR-25 inbound pipeline) and the first Message (Inbound, Customer), and routes it (FR-24) or applies out-of-hours/no-operator behavior.
  • EasyCRM shows a connecting… state in the widget until an operator or the AI responds.

Other paths

Visitor identifies before messaging

When the identification form is set to *Before first message*, the form appears before the composer is enabled.

If something goes wrong

Origin not allowed

At step 4 the page's origin is not in Allowed Origins. BootstrapAsync throws EasyCrm:LiveChat:OriginNotAllowed; the widget shows nothing usable and the event is logged for the widget's error list.

Rate limited

Too many new sessions from the same IP within a minute. EasyCRM shows a generic please try again shortly message; no session is created.

Honeypot tripped

The hidden honeypot field is non-empty (automated traffic). EasyCRM returns a normal-shaped success response with no session actually created, so the bot cannot tell it was rejected.

Good to know

  • The widget's real-time channel is dedicated to visitors and never accepts the staff hub token, or vice versa.
  • A Live Chat conversation never has a messaging-window expiry (CustomerWindowExpiresAt is always NULL).