
Imago Car Finder är en inbäddningsbar AI-chattwidget som levereras som en enda JavaScript-fil — https://bilar.imagoplatform.ai/widget-streaming/imagowidget-streaming-02.js. Widgeten kopplas till en backend via en WebSocket-gateway på wss://monarch-public.imagoplatform.io/ws/ och kräver ingen inloggning för slutanvändare. Du placerar ett eget HTML-element i din markup, laddar ett skript, och allt fungerar direkt.
Dokumentet täcker tre inbäddningslägen: Widget-läge, Embedded-läge och Frameless-läge.
Widgeten registrerar ett Custom Element <imagowidget-streaming> som webbläsaren känner igen automatiskt när skriptet laddas. Elementet skapar en Shadow DOM-rot och injicerar all CSS inuti den — fullständigt isolerad från resten av din sida.
All JavaScript och CSS, inklusive Tailwind, kompileras och paketeras till en enda IIFE-fil. Du behöver inte ladda några externa beroenden — allt medföljer i en enda HTTP-request.
<imagowidget-streaming> registreras globalt och aktiveras automatiskt.Tre lager — utifrån och in:
Diagrammet visar hur widgeten är uppbyggd i tre lager: ytterst den paketerade IIFE-filen, sedan Shadow DOM för isolering, och innerst själva Custom Elementet som körs i webbläsaren.
Att installera Imago Car Finder kräver bara två saker: ett <imagowidget-streaming>-element med dina attribut, och en <script>-tagg som laddar widgetfilen. Placera båda precis före den avslutande </body>-taggen för bästa prestanda och korrekt DOM-initialisering.
<imagowidget-streaming
mode="frameless"
gateway-url="wss://monarch-public.imagoplatform.io/ws/"
webhook-path="din_webhook_path"
request-key="din_request_key"
organisation="din_organisation"
cdn-base-url="https://media.imagoplatform.ai/carfinder"
theme-color="#6B4423"
header-image="https://media.imagoplatform.ai/carfinder/header.webp"
welcome-message="Välkommen till CarFinder, vi hjälper dig att hitta din perfekta bil, berätta vad du behöver!"
title="Streaming Chat"
placeholder="Ask anything..."
avatar-url=""
new-chat-label="Ny chatt"
disclaimer-text="Den här bilrådgivaren använder AI som kan göra misstag - stäm alltid av all information med din säljare"
conversation-starters='["Jag vill ha lägsta ägandekostnad", "Jag söker något snabbt och sportigt", "Jag behöver en elbil med lång räckvidd"]'
></imagowidget-streaming>
<script src="https://bilar.imagoplatform.ai/widget-streaming/imagowidget-streaming-02.js"></script>Det är allt. <imagowidget-streaming> visas omedelbart som en flytande chattbubbla i det nedre högra hörnet av sidan. Användaren klickar på bubblan för att öppna chattpanelen och skriver sitt första meddelande — inget konto, ingen autentisering krävs av slutanvändaren.
Infoga <imagowidget-streaming> med attribut.
Placera <script>-taggen efter elementet.
Widgeten syns i webbsidans hörn.
Hela installationen tar under en minut för en erfaren webbutvecklare. Det finns inga build-steg, inga pakethanterare och ingen konfigurationsfil att underhålla.
Alla inställningar för Imago Car Finder görs via HTML-attribut direkt på <imagowidget-streaming>-elementet. Nedan finns en komplett referens över alla tillgängliga attribut, deras typ, standardvärde och funktion.
Imago Car Finder stöder tre visningslägen som passar olika use cases. Välj det läge som passar din webbplats arkitektur och användarupplevelse bäst. Läget styrs via mode-attributet.
Visar en flytande bubbla i hörnet av sidan. Användaren klickar på bubblan för att öppna chattpanelen. En oläst-badge visas om det finns obesvarade meddelanden. Det här är standardläget och kräver inget extra — utelämnar du mode-attributet används widget-läget automatiskt.
Visar chatten som en inbäddad komponent som fyller sitt föräldraelements hela bredd och höjd. Ingen bubbla visas — chatten är alltid synlig. Inkluderar en "Ny chatt"-knapp i headern. Perfekt för dedikerade supportsidor eller chattportaler.
Viktigt för embedded-läge: Föräldraelementet måste ha en definierad höjd (px, vh, %, etc.) — annars kollapsar det till noll pixlar och widgeten syns inte.
Visar chatten helt utan widgetens egen chrome — ingen header, ingen avatar, ingen titelrad, ingen inbyggd "Ny chatt"-knapp. Endast meddelandelistan och textinmatningen med skicka-knapp. Detta läge är designat för byråer och designteam som vill bädda in chatten i sin egen sidlayout och själva äga all omkringliggande UI (sidhuvud, branding, knappar, reset-knapp).
Eftersom headern är borttagen i frameless-läge finns inte heller den inbyggda "Ny chatt"-knappen. Använd JS-API:et nedan för att koppla in din egen reset-knapp var som helst på sidan.
<imagowidget-streaming>-elementet exponerar en publik metod resetChat() som rensar konversationen och startar en ny session:
För ramverk eller knappar som skapas senare kan du lyssna på imago-chat:ready-eventet, som triggar en gång efter att widgeten monterats och som även exponerar resetChat-funktionen via event.detail:
Metoden resetChat() och eventet imago-chat:ready finns tillgängliga i alla lägen (widget / embedded / frameless), men de är mest användbara i frameless-läget där widgeten medvetet inte renderar någon egen reset-knapp.
Istället för — eller som komplement till — HTML-attribut kan du konfigurera widgeten via det globala objektet window.ImagoChatConfig. Detta är praktiskt när du genererar konfiguration dynamiskt på serversidan, eller när du vill hålla konfigurationen samlad i ett JavaScript-objekt snarare än utspridd i HTML-markup.
<script>
window.ImagoChatConfig = {
gatewayUrl: "wss://monarch-public.imagoplatform.io/ws/",
webhookPath: "/webhook/ef2f49f5",
requestKey: "33SJW0jRl1VH7JMb0giO7C",
organisation: "Bingster Cars",
cdnBaseUrl: "https://media.imagoplatform.ai/",
mode: "widget",
welcomeMessage: "Hej! Hur kan jag hjälpa dig?",
title: "Bingster Cars",
placeholder: "Fråga vad som helst!",
avatarUrl: "https://media.imagoplatform.ai/Swirl_300x300.png",
conversationStarters: [
"Jag vill ha lägsta ägandekostnad",
"Jag söker något snabbt och sportigt"
]
};
</script>
<script src="https://bilar.imagoplatform.ai/widget-streaming/imagowidget-streaming-02.js"></script>Egenskapsnamnen i window.ImagoChatConfig använder camelCase, t.ex. gatewayUrl, cdnBaseUrl.
HTML-attributen använder kebab-case, t.ex. gateway-url, cdn-base-url. Detta är konsekvent med webbstandarder.
Om du använder window.ImagoChatConfig utan ett <imagowidget-streaming>-element i HTML:en skapas elementet automatiskt och läggs till i <body>. Du behöver alltså inte ens ha elementet i din markup om du föredrar den JavaScript-baserade konfigurationen.
När <imagowidget-streaming> läggs till i DOM:en skapas en Shadow DOM-rot med attachShadow({ mode: 'open' }). All widgetens CSS injiceras som en <style>-tagg inuti denna Shadow DOM. Det innebär fullständig bilateral isolation — widgetens CSS läcker inte ut till resten av sidan, och sidans CSS påverkar inte widgeten. Du behöver inte oroa dig för stilkonflikter med ditt befintliga tema eller CSS-ramverk.
Vid varje meddelande etableras en WebSocket-anslutning till gatewayen wss://monarch-public.imagoplatform.io/ws/ med följande JSON-payload:
{
"message": "Användarens meddelande",
"sessionId": "550e8400-e29b-41d4-a716-446655440000",
"timestamp": "2026-03-19T14:30:00.000Z",
"device": "desktop",
"webhookPath": "/din-webhook-path",
"requestKey": "din-request-key",
"organisation": "din_organisation"
}Unikt per webbläsare och webhook-path, sparat i localStorage.
Detekteras automatiskt: mobile, tablet eller desktop.
Svaret från gatewayen läses som en ström. Widgeten stöder tre responsformat automatiskt:
application/json. Svar med fälten output, text eller message.
Progressiv visning med begin-, item- och end-events.
Rå text streamad chunk-för-chunk direkt.
Text visas gradvis tecken-för-tecken vid 60 fps. Om svaret pausar i mer än 1,5 sekunder visas en "tänker"-indikator automatiskt.
Imago Car Finder kräver en modern webbläsare med stöd för ett antal specifika webb-API:er. Alla dessa API:er är väletablerade och stöds av samtliga aktuella webbläsarversioner. Inget polyfill-lager inkluderas i widgeten — den förlitar sig på nativ webbläsarstöd för bästa prestanda och minsta möjliga filstorlek.
Registrering av <imago-chat> som eget HTML-element.
Fullständig CSS-isolation via inkapslade DOM-träd.
Modern JavaScript: optional chaining, nullish coalescing, BigInt m.m.
Krävs för att läsa HTTP-streaming-svar från webhook:en.
Nedan finns de vanligaste problemen du kan stöta på vid integration av Imago Car Finder, samt rekommenderade lösningar. Öppna alltid webbläsarens utvecklarverktyg (F12) och kontrollera konsolen som första steg — de flesta fel rapporteras direkt där.
Kontrollera att <script>-sökvägen är korrekt och att filen är åtkomlig. Öppna webbläsarens utvecklarverktyg (F12) och kolla fliken Network — letar du efter ett 404-svar på skriptfilen? Kontrollera även fliken Console efter JavaScript-fel.
I embedded- eller frameless-läge: kontrollera att föräldraelementet har en definierad höjd — annars kollapsar widgeten till noll pixlar.
Kontrollera att gateway-url och webhook-path är korrekta, och att anslutningen sker via wss://. Testa även att request-key är giltig. Prova sedan gateway:en direkt med ett verktyg som Postman eller curl för att isolera om problemet ligger i widgeten eller i backend-flödet.
Widgeten använder Shadow DOM och ska vara immun mot externa stilar. Om layouten ändå ser konstig ut — kontrollera att skriptet laddats korrekt och utan JavaScript-fel. Äldre webbläsare utan Shadow DOM-stöd kan orsaka problem; uppdatera till en modern webbläsare.
Detta är avsiktligt — frameless-läget renderar ingen egen reset-knapp. Använd JS-API:et: document.querySelector('imagowidget-streaming').resetChat() på din egen knapp. Se Visningslägen → Frameless-läge.
localStorage kan rensas av användaren manuellt, av webbläsarens integritetsläge (t.ex. Privat/Incognito), eller av tredjepartskookies-blockering. Sessionen sparas per gateway-url och webhook-path, så om någon av dessa ändras skapas en ny session automatiskt.
Nedan följer ett komplett, kopieringsfärdigt HTML-dokument som visar en minimal men fullt fungerande integration av Imago Car Finder. Ersätt attributvärdena med din faktiska webhook-URL, auth-token och önskad konfiguration innan du driftsätter.
<!DOCTYPE html>
<html lang="sv">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Min webbplats</title>
</head>
<body>
<h1>Välkommen till min webbplats</h1>
<p>Innehåll här...</p>
<!-- Imago Car Finder -->
<imagowidget-streaming
gateway-url="wss://monarch-public.imagoplatform.io/ws/"
webhook-path="din_webhook_path"
request-key="din_request_key"
organisation="din_organisation"
cdn-base-url="https://media.imagoplatform.ai/carfinder"
theme-color="#6B4423"
header-image="https://media.imagoplatform.ai/carfinder/header.webp"
welcome-message="Hej, hur kan jag hjälpa dig att hitta rätt bil? Berätta vad du letar efter!"
title="Bingster Cars"
placeholder="Fråga vad som helst!"
avatar-url="https://media.imagoplatform.ai/swirl_300x300.png"
new-chat-label="Ny chatt"
disclaimer-text="Svaren är vägledande och bör verifieras innan köp."
conversation-starters='["Jag vill ha lägsta ägandekostnad","Jag söker något snabbt och sportigt","Jag behöver en elbil med lång räckvidd","Jag letar efter en SUV för familjen"]'
></imagowidget-streaming>
<script src="https://bilar.imagoplatform.ai/widget-streaming/imagowidget-streaming-02.js"></script>
</body>
</html>Lägg till följande CSS i din sidas stylesheet. Denna mall sätter upp en flexibel layout med sidhuvud och chattyta — anpassa efter din egen design.
html, body { height: 100%; margin: 0; font-family: system-ui, sans-serif; }
body { display: flex; flex-direction: column; background: #f8fafc; }
.site-header {
display: flex; align-items: center; justify-content: space-between;
padding: 1rem 2rem; background: #111827; color: #fff;
}
.site-header h1 { margin: 0; font-size: 1.25rem; }
.reset-btn {
background: #fff; color: #111827; border: none; border-radius: 8px;
padding: 0.55rem 1.1rem; font-size: 0.875rem; font-weight: 600; cursor: pointer;
}
main { flex: 1; min-height: 0; padding: 1.5rem 2rem; }
.chat-frame {
height: 100%; background: #fff;
border: 1px solid #e5e7eb; border-radius: 12px; overflow: hidden;
}Bygg upp HTML-strukturen med sidhuvud och chattyta. Inkludera CSS-mallen från föregående sida.
<!DOCTYPE html>
<html lang="sv">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Bingster Cars</title>
<style>
/* [CSS här] */
</style>
</head>
<body>
<header class="site-header">
<h1>Bingster Cars</h1>
<button type="button" id="chat-reset-btn" class="reset-btn">Ny chatt</button>
</header>
<main>
<div class="chat-frame">
<imagowidget-streaming
mode="frameless"
gateway-url="wss://monarch-public.imagoplatform.io/ws/"
webhook-path="/webhook/ef2f49f5"
request-key="33SJW0jRl1VH7JMb0"
organisation="Bingster Cars"
cdn-base-url="https://media.imagoplatform.ai/carfinder"
theme-color="#226096"
welcome-message="Hej, hur kan jag hjälpa dig att hitta rätt bil?"
placeholder="Fråga vad som helst!"
avatar-url="https://media.imagoplatform.ai/swirl_300x300.png"
></imagowidget-streaming>
</div>
</main>
<script src="https://bilar.imagoplatform.ai/widget-streaming/imagowidget-streaming-02.js"></script>
</body>
</html>Koppla värdsidans reset-knapp till widgetens publika API. Lägg till detta script-block i slutet av body, efter widget-scriptet.
<script src="https://bilar.imagoplatform.ai/widget-streaming/imagowidget-streaming-02.js"></script>
<script>
// Koppla värdsidans egen knapp till widgetens publika API.
const btn = document.getElementById('chat-reset-btn');
const el = document.querySelector('imagowidget-streaming');
btn.addEventListener('click', () => el.resetChat());
</script>