Skip to content

Magic Agent Widget

Plug & Play Universeel widget component — werkt op elke tenant zonder code-aanpassingen.


┌─────────────────┐ ┌──────────────────┐ ┌─────────────────────┐
│ Storefront │────▶│ Widget Server │────▶│ Agent Database │
│ (Next.js) │ │ (port 4061) │ │ magic_agent_<t> │
│ │ │ │ │ │
│ chat-widget/ │ │ widget-loader │ │ bot_name, colors, │
│ index.tsx │ │ widget-core │ │ welcome messages │
└─────────────────┘ └──────────────────┘ └─────────────────────┘
│ │
│ data-agent=<tenant> │ /api/widget-config/<agent>
│ data-tenant=<tenant> │
▼ ▼
Automatisch afgeleid Config uit DB
uit NEXT_PUBLIC_BASE_URL (kleuren, naam, taal)
ComponentLocatieFunctie
Widget Server/mnt/data/magic_omniverse/magic_agent/widget/Express server, host widget bestanden + API
widget-loader.jsGeserveerd door widget serverLichtgewicht loader, haalt config op, injecteert widget-core
widget-core.jsGeserveerd door widget serverVolledige chat UI (242KB)
chat-widget/index.tsxPer tenant storefrontNext.js component, injecteert loader script
wayne-chat-widget.tsxPer tenant backend/adminAdmin dashboard widget
Agent Databasemagic_agent_<tenant> PostgreSQLBot configuratie (naam, kleuren, teksten)

Het widget component is universeel — exact dezelfde code op elke tenant. Configuratie komt uit twee bronnen:

Het component leidt de tenant naam af uit de NEXT_PUBLIC_BASE_URL environment variabele:

https://jodasign.magiceverse.online → jodasign
https://brinxx.magiceverse.online → brinxx
https://spranz.magiceverse.online → spranz

2. Widget Configuratie (uit Agent Database)

Section titled “2. Widget Configuratie (uit Agent Database)”

De widget-server haalt config op via /api/widget-config/<agent>. Alles zit in de magic_agent_<tenant> database:

InstellingVoorbeeld (JoDa Sign)
bot_nameLuke
primary_color#fcb900
secondary_color#0a0a0a
accent_color#fcb900
gradient_color#e5a600
welcome_message_nlHallo, ik ben Luke. Waarmee kan ik je helpen?
welcome_message_enHello, I am Luke. How can I help you?
welcome_message_deHallo, ich bin Luke. Wie kann ich Ihnen helfen?
positionbottom-right
auto_speechfalse

  1. Agent database aanmaken

    Maak een nieuwe PostgreSQL database magic_agent_<tenant> aan en vul de widget configuratie:

    -- Bot configuratie
    INSERT INTO widget_config (key, value) VALUES
    ('agent_name', '<tenant>'),
    ('brand_name', '<Bedrijfsnaam>'),
    ('bot_name', '<Bot Naam>'),
    ('primary_color', '#hexcode'),
    ('secondary_color', '#hexcode'),
    ('accent_color', '#hexcode'),
    ('welcome_message_nl', 'Hallo! Ik ben <Bot>, waarmee kan ik je helpen?'),
    ('welcome_message_en', 'Hello! I am <Bot>, how can I help you?');
  2. Widget component is al aanwezig

    Het universele chat-widget/index.tsx zit in elke tenant storefront na sync vanuit development. Geen code-aanpassingen nodig.

  3. Environment variabelen checken

    Zorg dat NEXT_PUBLIC_BASE_URL correct is in de storefront .env:

    storefront/.env
    NEXT_PUBLIC_BASE_URL=https://<tenant>.magiceverse.online

    Optionele overrides:

    Terminal window
    NEXT_PUBLIC_WIDGET_AGENT=<tenant> # Override tenant naam
    NEXT_PUBLIC_WIDGET_LANGUAGE=nl # Override taal (default: nl)
    NEXT_PUBLIC_WIDGET_POSITION=bottom-right # Override positie
  4. Agent registreren in widget-server

    Voeg een fallback config toe aan widget-loader.js (optioneel, alleen voor als de API niet bereikbaar is):

    '<tenant>': {
    agent_name: '<tenant>',
    brand_name: '<Bedrijfsnaam>',
    bot_name: '<Bot Naam>',
    primary_color: '#hexcode',
    secondary_color: '#hexcode'
    }
  5. Testen

    Open de storefront en controleer:

    • Widget verschijnt rechtsonder
    • Kleuren kloppen
    • Bot naam is correct
    • Welkomsttekst in juiste taal

De admin widget (wayne-chat-widget.tsx) injecteert de support_agent in het Medusa admin dashboard. Dit is een apart agent profiel dat voor alle tenants hetzelfde is.

InstellingWaarde
Agentsupport_agent
Bot naamWayne
Positiebottom-left
Kleur#CF0D65 (magenta)

EndpointMethodeBeschrijving
/api/widget-config/<agent>GETWidget configuratie (kleuren, naam, teksten)
/api/chatPOSTChat bericht sturen naar agent
/api/bookingsGET/POSTBooking slots beheren
/healthGETWidget server status

Het widget component zit in de storefront (niet backend). Bij code sync vanuit development:

Terminal window
# Sync widget naar alle tenants
SOURCE="/mnt/data/magic_omniverse/magic_commerce/magic_development"
FILE="storefront/src/modules/common/components/chat-widget/index.tsx"
for tenant in magic_brinxx magic_default magic_jodasign ...; do
TARGET="/mnt/data/magic_omniverse/magic_commerce/$tenant"
cp "$SOURCE/$FILE" "$TARGET/$FILE"
done

ProbleemOorzaakOplossing
Widget verschijnt nietScript niet geladenCheck browser console voor [MagicWidget] logs
Verkeerde kleurenDB config niet geladenCheck /api/widget-config/<agent> response
”MagicAgentWidget not found”widget-core.js niet geladenCheck widget-server PM2 process
Widget op betaBeta check in componentNormaal — widget is uitgeschakeld op beta omgevingen
Fallback configAPI niet bereikbaarWidget gebruikt hardcoded fallback uit widget-loader.js

Zie JoDa Sign QA Audit voor bekende issues:

  • CRITICAL: 9 onbeheerde database pools (110+ connections)
  • CRITICAL: Hardcoded credentials in source code
  • HIGH: 7 fetch calls zonder timeout
  • HIGH: Session management race conditions