A model and its bill
Pick a model, handle rate limits and watch token costs grow with traffic.

// ai-chatbot.ts
const SRC = "https://elfsightcdn.com/platform.js";
export function mountAiChatbot(container: HTMLElement, widgetId: string): void {
const el = document.createElement("div");
el.className = `elfsight-app-${widgetId}`;
el.setAttribute("data-elfsight-app-lazy", "");
container.appendChild(el);
if (!document.querySelector(`script[src="${SRC}"]`)) {
const s = document.createElement("script");
s.src = SRC;
s.async = true;
document.body.appendChild(s);
}
}
// mountAiChatbot(document.body, "YOUR-WIDGET-ID");mountAiChatbot(document.body, "YOUR-ID");Learns from your website automatically
Lead forms and human handoff built in
Chat history, transcripts and analytics
Floating or embedded, styled in the editor
Free plan, no credit card
No framework needed. A typed function you can call from any bundle or framework.
Loads the script once. Call it for several widgets; platform.js is added a single time.
Floating or embedded. Mount a floating chat on document.body; an embedded one into its container.
// ai-chatbot.ts
const SRC = "https://elfsightcdn.com/platform.js";
export function mountAiChatbot(container: HTMLElement, widgetId: string): void {
const el = document.createElement("div");
el.className = `elfsight-app-${widgetId}`;
el.setAttribute("data-elfsight-app-lazy", "");
container.appendChild(el);
if (!document.querySelector(`script[src="${SRC}"]`)) {
const s = document.createElement("script");
s.src = SRC;
s.async = true;
document.body.appendChild(s);
}
}
// mountAiChatbot(document.body, "YOUR-WIDGET-ID");Time to launch
AI Chatbot
Your own build
Knowledge
AI Chatbot
Your own build
Chat UI
AI Chatbot
Your own build
Leads and handoff
AI Chatbot
Your own build
Transcripts and analytics
AI Chatbot
Your own build
Costs
AI Chatbot
Your own build
Upkeep
AI Chatbot
Your own build