The Navigate component allows your agent to send users to specific pages on your website - perfect for directing to pricing, product pages, checkout, documentation, or any URL.
WebChat/LuaPop Only
This component only works with the website chat widget (LuaPop). It triggers the onNavigate callback you configure.
Important: The Navigate component does not render visually in the chat. It triggers the onNavigate callback directly, causing immediate navigation. Users won’t see a button or link - they’ll be navigated automatically to the specified page.
Parts:
pathname - The page path (e.g., /pricing, /products/laptop, /checkout)
Our pricing scales with your monthly expenses, starting at $300/month for companies under $30k in monthly spend, with a free 30-day trial and special YC founder discounts.Here's the full breakdown:::: navigate:::
What happens:
No visual rendering - The navigate component does not display as a button or link. Instead, it immediately triggers the onNavigate callback and navigates the user to the specified page.
User: “Tell me more about the UltraBook Pro”Agent:
Copy
The UltraBook Pro is our premium laptop with 16GB RAM and 512GB SSD.Perfect for developers and content creators.See full specifications and reviews:::: navigate:::
Screenshot: “View Product Details” buttononNavigate called with:
persona: ` You are a shopping assistant. When users ask about products, after providing info, direct them to the product page: ::: navigate  ::: When ready to checkout: ::: navigate  ::: For pricing questions: ::: navigate  :::`
Example conversation:
Copy
User: "Show me laptops"Agent: We have several great options![Shows product list-items]Want to see full details? Visit our laptop collection:::: navigate:::
persona: ` After showing available options, direct to booking page: ::: navigate  ::: For viewing reservations: ::: navigate  :::`
// Test your onNavigate handleronNavigate: (pathname, options) => { console.log('Would navigate to:', pathname); console.log('With params:', options.query); // Verify it works before deploying}
persona: | You are a sales assistant for our e-commerce site. When discussing products, direct users to product pages: ::: navigate  ::: For pricing questions: ::: navigate  ::: When user is ready to buy: ::: navigate  ::: Always include source=chat parameter for tracking.
const ecommerceSkill = new LuaSkill({ context: ` After showing products, direct to product page: ::: navigate  ::: After adding to cart: ::: navigate  ::: For checkout: ::: navigate  ::: `});
persona: | You are a shopping assistant for TechStore. NAVIGATION GUIDELINES: When users ask about products: - Show product info - Direct to product page:  When discussing pricing: - Explain pricing tiers - Link to pricing:  When cart questions: - Summarize cart - Link to cart:  When ready to checkout: - Confirm items - Link to checkout:  Example response: "The UltraBook Pro is $1,299 with free shipping. See full specs and reviews: ::: navigate  :::"
User: "How much does the UltraBook Pro cost?"Agent:The UltraBook Pro is $1,299.00 with free 2-day shipping.It includes:- 16GB RAM- 512GB SSD- 14" Retina Display- 12-hour battery lifeSee full specifications and customer reviews:::: navigate:::[User clicks button][onNavigate called: ("/products/ultrabook-pro", { query: { source: "chat" } })][User navigated to product page][Chat widget minimizes or stays open based on your implementation]User: "What's your return policy?"Agent:We offer a 45-day return policy with free return shipping.View our complete return policy and start a return:::: navigate:::User: "I'm ready to buy"Agent:Great! I've added the UltraBook Pro to your cart.Review your cart and complete checkout:::: navigate:::
✅ Good:"Our pricing starts at $300/month. Here's the full breakdown:"::: navigate:::❌ Bad:::: navigate:::(No context about what they'll see)
Always add source tracking:Helps you measure:- How many users click- Which pages are popular- Conversion from chat
✅ Handle Navigation Gracefully
Copy
onNavigate: (pathname, options) => { // Validate path exists if (validPaths.includes(pathname)) { router.push({ pathname, query: options.query }); } else { console.error('Invalid path:', pathname); // Fallback to home or show error }}