Documentation Index Fetch the complete documentation index at: https://docs.heylua.ai/llms.txt
Use this file to discover all available pages before exploring further.
Overview
This guide helps you migrate from popular chat widgets to LuaPop with minimal disruption.
From Intercom
Before (Intercom)
< script >
window . intercomSettings = {
app_id: "your_app_id" ,
name: "John Doe" ,
email: "[email protected] "
};
</ script >
< script >
( function (){ var w = window ; var ic = w . Intercom ; ... })();
</ script >
After (LuaPop)
< script src = "https://lua-ai-global.github.io/lua-pop/lua-pop.umd.js" ></ script >
< script >
window . LuaPop . init ({
agentId: "your-agent-id" ,
sessionId: "john-doe-123" ,
position: "bottom-right" ,
welcomeMessage: "Hi John! 👋 How can I help you today?" ,
runtimeContext: "user:[email protected] "
});
</ script >
Migration Benefits
✅ Simpler Setup - Single script tag vs complex initialization
✅ AI-Powered - Intelligent responses vs human-only support
✅ 24/7 Availability - AI never sleeps
✅ Lower Cost - Pay per usage vs monthly fees
From Zendesk Chat
Before (Zendesk)
< script id = "ze-snippet" src = "https://static.zdassets.com/ekr/snippet.js?key=your-key" ></ script >
< script >
zE ( 'webWidget' , 'updateSettings' , {
webWidget: {
color: { theme: '#78a300' }
}
});
</ script >
After (LuaPop)
< script src = "https://lua-ai-global.github.io/lua-pop/lua-pop.umd.js" ></ script >
< script >
window . LuaPop . init ({
agentId: "your-agent-id" ,
position: "bottom-right" ,
buttonColor: "#78a300"
});
</ script >
From Drift
Before (Drift)
drift . load ( 'your-drift-id' );
After (LuaPop)
< script src = "https://lua-ai-global.github.io/lua-pop/lua-pop.umd.js" ></ script >
< script >
window . LuaPop . init ({
agentId: "your-agent-id" ,
position: "bottom-right" ,
buttonText: "👋 Let's chat" ,
buttonColor: "#2d88ff" ,
voiceModeEnabled: true
});
</ script >
From Tawk.to
Before (Tawk.to)
var Tawk_API = Tawk_API || {};
( function (){
var s1 = document . createElement ( "script" );
s1 . src = 'https://embed.tawk.to/your-tawk-id/default' ;
document . head . appendChild ( s1 );
})();
After (LuaPop)
< script src = "https://lua-ai-global.github.io/lua-pop/lua-pop.umd.js" ></ script >
< script >
window . LuaPop . init ({
agentId: "your-agent-id" ,
position: "bottom-right" ,
buttonColor: "#00b894"
});
</ script >
Configuration Mapping
Feature Intercom Zendesk Drift LuaPop ID app_idkeydrift-idagentIdPosition Not configurable positionNot configurable positionColor color_overridecolor.themetheme.primaryColorbuttonColorButton Text Not available Custom CSS teaser.textbuttonTextWelcome Message custom_launcher_selectorLimited teaser.textwelcomeMessageUser ID user_idCustom userIdsessionId
Event Migration
Intercom ( 'onShow' , function () {
console . log ( 'Widget opened' );
});
From Zendesk Events
zE ( 'webWidget:on' , 'open' , function () {
console . log ( 'Opened' );
});
Gradual Migration
Roll out LuaPop to a percentage of users:
class GradualMigration {
constructor () {
this . migrationPercentage = 25 ; // Start with 25%
this . shouldUseLuaPop = this . inMigrationGroup ();
if ( this . shouldUseLuaPop ) {
this . initLuaPop ();
} else {
this . initLegacyChat ();
}
}
inMigrationGroup () {
const userId = this . getUserId ();
const hash = this . simpleHash ( userId );
return ( hash % 100 ) < this . migrationPercentage ;
}
simpleHash ( str ) {
let hash = 0 ;
for ( let i = 0 ; i < str . length ; i ++ ) {
hash = (( hash << 5 ) - hash ) + str . charCodeAt ( i );
}
return Math . abs ( hash );
}
getUserId () {
return localStorage . getItem ( 'user_id' ) || 'anonymous' ;
}
initLuaPop () {
window . LuaPop . init ({
agentId: "migration-agent" ,
position: "bottom-right"
});
}
initLegacyChat () {
// Your existing chat solution
}
}
new GradualMigration ();
Migration Checklist
Next Steps
Configuration Complete configuration options
Quick Start Get started with LuaPop