Skip to main content

Flametree Chat Widget: Integrate Your Agent into Web Application

Integrate your Flametree AI agent into any website with a powerful, customizable React chat widget. This widget provides seamless real-time chat functionality with extensive customization options and support for both floating and embedded deployment modes.

Prerequisitesโ€‹

  • Access to Flametree platform
  • A configured AI agent
  • Website with ability to edit HTML/add custom code
  • Basic understanding of HTML and JavaScript

Featuresโ€‹

  • ๐Ÿ’ฌ Real-time messaging - Instant chat functionality
  • ๐ŸŽค Audio recording - Voice message support with playback
  • ๐Ÿ—ฃ๏ธ Speech-to-text - Convert voice to text automatically
  • ๐Ÿ”Š Text-to-speech - Voice-over capabilities for accessibility
  • ๐ŸŽฏ Flexible deployment - Floating button or embedded widget
  • ๐Ÿ“ฑ Responsive design - Optimized for all device sizes
  • โŒจ๏ธ RTL support - Right-to-left text compatibility
  • ๐Ÿ”„ Session management - Persistent conversation history
  • ๐ŸŽจ UI customization - Extensive styling options

Widget Typesโ€‹

The widget supports two deployment modes:

ModeDescriptionUse Case
FloatingDisplays as a floating button that opens a modal chat windowCustomer support, help desk
EmbeddedOccupies full width/height of parent containerDedicated chat pages, integrated experiences

Integration Setupโ€‹

Step 1: Get the Widget Codeโ€‹

  1. Navigate to Your Agent

    • Open the Flametree portal
    • Go to the AI Agents section
    • Click on the agent you want to configure
  2. Locate the HTML Code Section

    • On the right-hand configuration panel, scroll down to the HTML Code section
    • Next to the HTML Code label, you'll see two icon buttons:
      • ๐Ÿ‘ View โ€” to preview the code
      • ๐Ÿ“‹ Copy โ€” to copy the code to clipboard
  3. Copy the Widget Code

    • Click the Copy (๐Ÿ“‹) icon to copy the generated HTML snippet

Step 2: Add Widget to Your Websiteโ€‹

  1. Insert the Code

    • Paste the copied snippet at the end of your page, just before the closing </body> tag
    • For website builders (Tilda, Webflow, Wix, WordPress), paste into the custom HTML or script section
  2. Alternative Manual Setup

    • Add container element: <div id="chat-widget"></div>
    • Include widget script: <script src="https://portal.flametree.ai/public-storage/widget/bot-chat-widget.umd.js"></script>
    • Initialize widget with configuration

Step 3: Test the Integrationโ€‹

  1. Reload Your Website

    • The chat button should appear (floating mode) or widget should load (embedded mode)
  2. Test Functionality

    • Click the chat button or interact with embedded widget
    • Send a test message to verify agent response
    • Test voice features if enabled

Configuration Optionsโ€‹

Required Parametersโ€‹

ParameterTypeDescription
botRoutestringAPI endpoint URL for the chat bot
authorizationTokenstringAuthorization token for API requests

Core Settingsโ€‹

ParameterTypeDefaultDescription
elementIdstring'chat-widget'HTML element ID for widget mounting
userIdstring''Unique user identifier
userNamestring'Guest'Display name for the user
emailstring''User's email address
phonestring''User's phone number

Appearance & Behaviorโ€‹

ParameterTypeDefaultDescription
isFloatingBtnbooleanfalseEnable floating button mode
primaryColorstring#ff613ePrimary theme color
openByDefaultbooleanfalseAuto-open chat on load
openByDefaultDelaynumber3000Delay in milliseconds for auto-open chat on load. Min value: 1000
headerTitlestring'Chat with the Agent'Chat header title
headerTitleColorstring'#000000'Header title color
showPoweredBybooleantrueShow "Powered by" footer
showWaitingMessagebooleanfalseShow typing indicators
voiceOverbooleanfalseEnable text-to-speech

Floating Button Customizationโ€‹

ParameterTypeDefaultDescription
floatingBtnSizenumber58Button size in pixels
floatingBtnOpennedIconUrlstring''Custom open icon URL
floatingBtnClosedIconUrlstring''Custom closed icon URL
floatingBtnIconClosedSizenumber58Closed icon size
floatingBtnIconOpenedSizenumber32Open icon size
floatingBtnMarginBottomnumber8Bottom margin
floatingBtnMarginRightnumber16Right margin
floatingBtnMobileMarginBottomnumber8Mobile bottom margin
floatingBtnMobileMarginRightnumber16Mobile right margin
flametreeIconVariantstatic, animatedstaticWidget icon display option: static or animated image

Advanced Optionsโ€‹

ParameterTypeDefaultDescription
disableSendingMessageWhileAwaitingResponsebooleanfalsePrevent messages during bot response
onError(error: Error) => voidโ€“Error handling callback
avatarUrlstring''Custom agent avatar URL
tooltipTextstring''Floating button tooltip
giftTextstring''Gift button text
giftLinkstring''Gift button URL
multiAgentbooleanfalseEnable multi-agent support
versionstring'v1'Widget version
kwargsobject'{}'Custom variables to pass when starting a session. Variables starting with _ will not be logged or passed to the agent's prompt.

User ID Managementโ€‹

The userId parameter follows this priority order:

  1. Explicitly provided in widget parameters
  2. Retrieved from localStorage (flametree-widget-userId-v2)
  3. Auto-generated and saved to localStorage if not provided (when userId is empty)

Operation Modesโ€‹

The widget supports three distinct operation modes:

Mode 1: Standard Chat (version: 'v1')โ€‹

  • Creates new session on initialization
  • No chat history retrieval
  • Simple, straightforward chat experience

Mode 2: Session Management (version: 'v2', multiAgent: false)โ€‹

  • Retrieves all active user sessions on initialization
  • Continues existing session if botRoute matches
  • Creates new session if no match found
  • No agent selection screen

Mode 3: Multi-Agent (version: 'v2', multiAgent: true)โ€‹

  • Displays all active user sessions
  • Shows agent selection screen
  • Allows switching between different agent conversations
  • Supports multiple sessions per agent

Implementation Examplesโ€‹

Basic Floating Chatโ€‹

BotChatWidget.createBotChat({
botRoute: 'https://api.example.com/bot',
authorizationToken: 'your-auth-token',
elementId: 'chat-widget',
isFloatingBtn: true,
primaryColor: '#007bff',
});

Embedded Chat with Voice Featuresโ€‹

BotChatWidget.createBotChat({
botRoute: 'https://api.example.com/bot',
authorizationToken: 'your-auth-token',
elementId: 'embedded-chat',
isFloatingBtn: false,
voiceOver: true,
showWaitingMessage: true,
headerTitle: 'AI Assistant',
});

Advanced Multi-Agent Setupโ€‹

BotChatWidget.createBotChat({
// Required
botRoute: 'https://api.example.com/bot',
authorizationToken: 'your-auth-token',

// Multi-agent configuration
version: 'v2',
multiAgent: true,

// Customization
elementId: 'chat-widget',
userId: 'user123',
userName: 'John Doe',
email: 'john@example.com',
isFloatingBtn: true,
primaryColor: '#ff613e',
openByDefault: false,

// UI Customization
headerTitle: 'Support Center',
headerTitleColor: '#ffffff',
showPoweredBy: false,
avatarUrl: 'https://example.com/bot-avatar.png',

// Floating button
floatingBtnSize: 64,
floatingBtnOpennedIconUrl: './assets/close-icon.svg',
floatingBtnClosedIconUrl: './assets/chat-icon.svg',
tooltipText: 'Need help? Chat with us!',

// Features
voiceOver: true,
showWaitingMessage: true,
disableSendingMessageWhileAwaitingResponse: true,

// Gift feature
giftText: 'Send Gift ๐ŸŽ',
giftLink: 'https://example.com/gifts',

// Error handling
onError: (error) => {
console.error('Chat widget error:', error);
// Custom error handling logic
}
});

External Widget Methodsโ€‹

The widget exposes several optional helper methods that allow external scripts on your website to control the widget programmatically. These methods become available on the global window object after the widget is initialized.

Available Methods

// Open a specific session by ID (v2 mode)
window.BotChatWidget.openSession(sessionId: string): void;

// Programmatically open the chat widget
window.BotChatWidget.openChat(): void;

// Update session parameters for the currently active session.
// Example payload:
// {
// env_info: {
// _party_id: "123",
// _session_id: "123",
// customKey: "value",
// ...
// }
// }
window.BotChatWidget.updateSession(data: object): void;

// Action trigger for sending an optional message in a chat widget
window.BotChatWidget.runAction(message: string): void;

When to Use These Methods

  • Refreshing expiring tokens. Call updateSession() to pass updated session kwargs without restarting the session.
  • Deep-linking into conversations. Use openSession() to jump directly to a specific chat session.
  • Opening the widget from your UI. Attach openChat() to buttons, menus, or onboarding flows.
  • Sending an action message to the widget. Use runAction() to initiate an action message in the active chat session.

Widget Message Handling (Custom Events from Agent)โ€‹

The widget can receive custom messages from the agent over the WebSocket connection and use them to trigger JavaScript actions in the host application. When such a message arrives, the widget identifies the analytics provider, determines the event name, and invokes the appropriate client-side handler.

A custom message includes the analytics provider, the event name, and optional data. Based on this information, the widget identifies the provider, reads the event name, and runs the corresponding client-side action.

โš ๏ธ Important: custom WebSocket messages must include the field type: custom so the widget can distinguish them from system or internal messages.

A custom message uses the following format:

   {
"type": "custom",
"provider": "string",
"event": "string",
"data": {}
}
  • type โ€” must always be custom for custom event messages
  • provider โ€” the target analytics provider, such as Google or Meta
  • event โ€” the event name that the widget should trigger. For example, submitForm
  • data โ€” an object with arbitrary fields. Fox example, submitted form data. May be empty.

When the widget receives this message, it reads the type, provider and event name, then calls the matching client-side handler. For example, if the provider is Google Analytics, the widget adds a new entry to dataLayer.

Testing Your Integrationโ€‹

Quick Test Stepsโ€‹

  1. Verify Widget Appearance

    • Check if floating button appears (floating mode)
    • Verify embedded widget loads correctly (embedded mode)
  2. Test Basic Functionality

    • Click the chat button or interact with widget
    • Send a test message like: "Hello, what services do you offer?"
    • Verify the agent responds appropriately
  3. Test Advanced Features

    • Voice messages (if audio recording enabled)
    • Text-to-speech playback (if voiceOver enabled)
    • Multi-agent switching (if multiAgent enabled)

Common Issues & Solutionsโ€‹

Widget not appearing

Possible causes:

  • HTML code placed incorrectly
  • JavaScript errors blocking execution
  • Website security policies blocking external scripts

Solutions:

  1. Check placement: Ensure code is in <head> or before closing </body> tag
  2. Console errors: Check browser console for JavaScript errors
  3. Script permissions: Verify website allows external scripts
  4. Cache issues: Clear browser cache and reload
Widget not responding

Possible causes:

  • Agent is in "Error" status
  • Invalid botRoute or authorizationToken
  • Network connectivity issues
  • Missing agent workflow configuration

Solutions:

  1. Check agent status: Confirm agent is running and not in error state
  2. Verify credentials: Check botRoute and authorizationToken are correct
  3. Network test: Verify connectivity to Flametree servers
  4. Agent config: Ensure agent has proper workflow configuration
Voice features not working

Possible causes:

  • Browser doesn't support MediaRecorder API
  • Microphone permissions denied
  • Voice features not enabled in agent

Solutions:

  1. Browser support: Use Chrome 60+, Firefox 55+, Safari 12+, or Edge 79+
  2. Permissions: Allow microphone access when prompted
  3. Agent settings: Enable voice features in agent configuration
  4. HTTPS required: Voice features require secure (HTTPS) connection
Styling conflicts

Possible causes:

  • CSS conflicts with existing website styles
  • Z-index issues with floating button
  • Responsive design problems

Solutions:

  1. CSS isolation: Use more specific selectors or !important declarations
  2. Z-index: Adjust floating button z-index values
  3. Responsive testing: Test on different screen sizes
  4. Custom styling: Override default styles with custom CSS

Browser Storageโ€‹

localStorageโ€‹

KeyPurpose
flametree-widget-userId-v2Auto-generated user ID when not explicitly provided
unreadConversationsArray of unread conversation IDs

sessionStorageโ€‹

KeyPurpose
flametree-widget-defaultAuthorizationTokenInitial authorization token
flametree-widget-authorizationTokenCurrent active token (updated in multi-agent mode)
flametree-widget-defaultBotRouteInitial bot route URL
${botRoute}-sessionIdActive session ID for specific agent

Browser Supportโ€‹

The Flametree Chat Widget is compatible with all modern browsers that support:

  • ES6+ JavaScript features
  • MediaRecorder API (for audio recording)
  • Local/Session Storage
  • CSS Grid and Flexbox

Supported Browsers:

  • Chrome 60+
  • Firefox 55+
  • Safari 12+
  • Edge 79+

FAQโ€‹

Can I customize the widget appearance?

Yes, the widget offers extensive customization options including:

  • Primary colors and themes
  • Custom icons for floating button
  • Header titles and colors
  • Button sizes and positioning
  • Custom avatars and branding
Does the widget work on mobile devices?

Yes, the widget is fully responsive and optimized for mobile devices. It includes specific mobile margin settings and touch-friendly interactions.

Can I use multiple widgets on the same page?

Yes, you can embed multiple widgets by using different elementId values for each widget instance.

Is the chat history persistent?

Yes, when using version 'v2', the widget supports session management and can retrieve previous conversations based on user ID.

How do I handle widget errors?

Use the onError callback parameter to implement custom error handling:

onError: (error) => {
console.error('Widget error:', error);
// Your custom error handling logic
}

Security Considerationsโ€‹

Token Securityโ€‹

  • Protect authorization tokens - don't expose them in client-side code
  • Use environment variables for sensitive configuration
  • Rotate tokens regularly if compromised
  • Monitor usage for suspicious activity

Privacy Settingsโ€‹

  • Configure user data handling according to your privacy policy
  • Consider data retention settings in your Flametree account
  • Implement appropriate consent mechanisms for voice recording