Here's what happens without this pattern: the website loads, the chat bubble sits in the corner, and the customer has to find it, open it, and explain why they're there. Most won't bother.
The difference comes down to how you treat the link itself. Most chat integrations are built for browsing — someone arrives with a vague purpose and eventually reaches for the widget if they get stuck. But a promotional link creates a different kind of visitor. They didn't arrive by browsing — they were sent. They clicked something specific. That intent is time-sensitive and fragile, and the more steps between click and conversation, the more of it you lose.
Context-aware chat treats the link as the start of the conversation, not a preamble to it. The customer feels — correctly — that they're being understood before they've said anything. In a high-intent moment like a promotional campaign, that's the difference between a lead and a bounce.
Three things that need to happen
The pattern requires exactly three things to work:
The link has to carry the intent. The CTA button doesn't just link to the homepage — it links to lendyr-bank-website.html#apply-loan. The hash fragment (#apply-loan) is the signal.
The chat has to open without being asked. By default, the embedded chat loads as a collapsed launcher bubble. When the page detects the hash, it suppresses the launcher and renders the chat open immediately. The customer lands, the chat is already there. See showLauncher in the ADK docs.
The conversation has to start on behalf of the customer. This is where it gets elegant. Once the widget is ready, the chat:ready event fires. Inside that handler, send() is called with the message "Apply for a loan" and a silent: true flag. The message goes to the agent. The agent responds. The customer sees the agent's reply — but never sees the trigger message. It's as if the assistant simply knew.
From the customer's perspective: they clicked, the chat opened, and the agent immediately said "I can help you apply for our 4% personal loan. Let's get started — what's your name?"
No instructions. No waiting. No starting from scratch.
Going deeper: enriching the conversation with context
Opening the chat and starting the flow is the core of the pattern. But the pre:send event lets you go further.
Every message the customer sends can be silently enriched with context before it reaches the agent — the campaign source, a customer ID from a cookie, the page they're on, how they arrived. The customer's side of the chat stays clean. The agent sees the full picture.
Combine this with context variables in the agent definition, and you can build conversations that are genuinely personalized — not just to the task, but to the person.
The pattern generalizes
Lendyr Bank's loan campaign is one instance of a broader pattern. Anywhere a link carries specific intent, the same approach applies:
- A "back in stock" retail email links to a page where the chat opens pre-loaded with the product in context
- A SaaS welcome email links new trial users directly into an onboarding flow
- A support notification links back to a ticket with the chat already surfacing the issue
- A conference reminder links to an agenda page with the chat ready to help the attendee plan their day
In each case: encode the intent in the URL, suppress the launcher conditionally, and fire a silent message on chat:ready. Same three steps. Different conversation.
What you're working with
Everything in this pattern is built on three parts of the watsonx Orchestrate embedded chat:
showLauncher — Set dynamically at load time to control whether the chat opens as a bubble or renders immediately
chat:ready — The lifecycle event that signals the widget is fully initialized and ready to receive programmatic input
send() — The instance method that sends a message to the agent, with { silent: true } to keep the trigger hidden from the UI
And for going further:
pre:send — Intercept and enrich every outgoing message with context before it reaches the agent
- Context variables — Surface URL-encoded or session-derived context directly inside the agent's reasoning
The best AI experiences aren't just responsive — they're anticipatory. They don't wait for the customer to explain themselves. They read the room. In a world where attention is scarce and intent is fleeting, that's not a nice-to-have. It's the standard.
Written by @Kiran B K
Not using IBM watsonx Orchestrate yet? Start your free trial now.