<?php
} );
<?php
/**
* Plugin Name: ECM Studiechatbot
* Description: Lille vejledende chatbot til studieecm.dk. Svarer kun på spørgsmål om E-commerce & Digital Marketing på EK (uddannelse, studieliv, karriere, optagelse). Alt andet henvises til studievejledningen.
* Version: 1.0.0
* Author: ECM
* Text Domain: ecm-studiechatbot
*/
if ( ! defined( 'ABSPATH' ) ) { exit; }
add_action( 'wp_footer', function () {
if ( is_admin() || is_feed() ) { return; }
// Slå chatbotten fra på bestemte sider med: add_filter('ecm_chatbot_enabled','__return_false');
if ( ! apply_filters( 'ecm_chatbot_enabled', true ) ) { return; }
?>
<div id="ecmbot" aria-live="off"></div>
<style id="ecmbot-css">
#ecmbot{--bg:#fff;--ink:#1b2430;--mute:#5d6877;--line:#dde2e8;--brand:#1f3a5f;--brand-ink:#fff;--accent:#ffd166;
font:15px/1.5 system-ui,-apple-system,"Segoe UI",Roboto,sans-serif;color:var(--ink);position:fixed;right:20px;bottom:20px;z-index:99999}
#ecmbot *{box-sizing:border-box}
.ecmbot-fab{display:flex;align-items:center;gap:.5rem;border:0;border-radius:999px;background:var(--brand);color:var(--brand-ink);
padding:.8rem 1.1rem;font-family:inherit;font-weight:600;font-size:15px;cursor:pointer;box-shadow:0 6px 20px rgba(20,33,61,.3)}
.ecmbot-fab:hover{background:#17304f}
.ecmbot-dot{width:.6rem;height:.6rem;border-radius:50%;background:var(--accent)}
.ecmbot-panel{position:absolute;right:0;bottom:calc(100% + 12px);width:min(380px,calc(100vw - 32px));height:min(560px,calc(100vh - 110px));
display:none;flex-direction:column;background:var(--bg);border:1px solid var(--line);border-radius:14px;overflow:hidden;box-shadow:0 18px 50px rgba(20,33,61,.28)}
.ecmbot-panel.open{display:flex}
.ecmbot-head{display:flex;justify-content:space-between;align-items:center;gap:1rem;padding:.85rem 1rem;background:var(--brand);color:var(--brand-ink)}
.ecmbot-head strong{display:block;font-size:15px}
.ecmbot-head span{font-size:12.5px;opacity:.8}
.ecmbot-x{border:0;background:transparent;color:inherit;font-size:22px;line-height:1;cursor:pointer;padding:.25rem .5rem;border-radius:6px}
.ecmbot-log{flex:1;overflow-y:auto;padding:1rem;display:flex;flex-direction:column;gap:.65rem;background:#f6f8fa}
.ecmbot-msg{max-width:88%;padding:.6rem .8rem;border-radius:12px;white-space:pre-line;word-wrap:break-word}
.ecmbot-msg.bot{background:#fff;border:1px solid var(--line);align-self:flex-start;border-bottom-left-radius:4px}
.ecmbot-msg.me{background:var(--brand);color:var(--brand-ink);align-self:flex-end;border-bottom-right-radius:4px}
.ecmbot-msg a{display:inline-block;margin-top:.4rem;color:var(--brand);font-weight:600}
.ecmbot-chips{display:flex;flex-wrap:wrap;gap:.4rem;padding:.6rem 1rem 0;background:#f6f8fa}
.ecmbot-chips button{border:1px solid var(--brand);background:#fff;color:var(--brand);border-radius:999px;padding:.3rem .75rem;font-family:inherit;font-weight:500;font-size:13px;cursor:pointer}
.ecmbot-chips button:hover{background:var(--brand);color:var(--brand-ink)}
.ecmbot-form{display:flex;gap:.5rem;padding:.75rem 1rem;border-top:1px solid var(--line);background:#fff}
.ecmbot-form input{flex:1;min-width:0;border:1px solid var(--line);border-radius:8px;padding:.6rem .75rem;font:inherit}
.ecmbot-form button{border:0;border-radius:8px;background:var(--brand);color:var(--brand-ink);padding:0 1rem;font-family:inherit;font-weight:600;font-size:14px;cursor:pointer}
.ecmbot-note{font-size:11.5px;color:var(--mute);padding:0 1rem .6rem;background:#fff}
#ecmbot button:focus-visible,#ecmbot input:focus-visible,#ecmbot a:focus-visible{outline:3px solid var(--accent);outline-offset:2px}
@media (max-width:480px){#ecmbot{right:12px;bottom:12px}}
@media (prefers-reduced-motion:no-preference){.ecmbot-panel.open{animation:ecmbotIn .18s ease-out}
@keyframes ecmbotIn{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}}
</style>
<script id="ecmbot-js">
(function () {
var EK = 'https://www.ek.dk/videregaaende-uddannelser/e-commerce-og-digital-marketing';
var MAIL = 'mailto:studievejledning@ek.dk';
// ---- VIDENSBASE: kun indhold fra studieecm.dk / EK. Ret og tilføj her. ----
// k = nøgleord (præfiks-match; ord på højst 3 tegn skal matche helt)
var KB = [
{ id:'overblik', k:['uddannelse','professionsbachelor','ects','længde','varighed','hvor lang','semestre','ecm','e-commerce','digital marketing','om studiet'],
a:'E-commerce & Digital Marketing (ECM) er en 3¼-årig professionsbachelor på 210 ECTS fordelt på 7 semestre. Du lærer at forbinde forretning, teknologi og marketing og bruge det til at bygge webshops, forstå kunder og skabe digitale kampagner.\nStudiet foregår på Nansensgade 19, 1366 København K, tæt på Nørreport.',
l:['Læs mere hos EK', EK] },
{ id:'fagomraader', k:['fagområde','forretning','teknologi','marketing','tre fag','indhold','hvad lærer'],
a:'Uddannelsen har tre fagområder, som mødes i praksis:\n• Forretning: webshoppens kunder, forretningsmodel, økonomi og daglig drift.\n• Teknologi & data: e-commerce-platforme, webanalyse, UX og CRO.\n• Marketing: content, SEO, annoncering, sociale medier og kunderejser.' },
{ id:'opgaver', k:['opgave','hvad laver','arbejder med','case','projekt','praksis','webshop'],
a:'Du undersøger, bygger, tester og forbedrer digitale forretninger. Eksempler på opgaver: at opbygge og teste en webshop, finde mønstre i data om besøgende, skabe en digital kampagne med content, SEO og annoncer, og arbejde med en virkelig case, hvor du kortlægger en kunderejse og præsenterer anbefalinger.' },
{ id:'vaerktoej', k:['værktøj','fag','shopify','woocommerce','seo','paid','analyse','cro','ux','email','e-mail','automatisering','loyalitet','jura','projektledelse','lagerstyring','indkøb'],
a:'Eksempler på fag og værktøjer:\n• Forretning & drift: digital forretningsforståelse, forretningsmodeller, driftsøkonomi, indkøb, lagerstyring, projektledelse, jura i e-handel.\n• Teknologi & data: e-commerce-platforme, Shopify, WooCommerce, webanalyse, data, UX, CRO.\n• Digital marketing: SEO, Paid Search, Paid Social, sociale medier, content, e-mail marketing, automatisering, loyalitet.' },
{ id:'semestre', k:['semester','forløb','opbygning','bachelorprojekt','specialisering','valgfag','1.','2.','3.','4.','6.','7.'],
a:'Forløbet:\n1. sem.: Introduktion til e-handel & forretning\n2. sem.: Data, teknologi & kundeoplevelser\n3. sem.: Digital marketing & content\n4. sem.: Vækst, markedspladser & e-eksport\n5. sem.: Praktik (5 måneder)\n6. sem.: Specialisering & valgfag, eller et semester i udlandet\n7. sem.: Bachelorprojekt, ofte sammen med en virksomhed' },
{ id:'praktik', k:['praktik','praktikplads','udlandet','udveksling','kontaktperson','vejleder'],
a:'Praktikken ligger på 5. semester og varer fem måneder. Du arbejder med opgaver inden for uddannelsens læringsmål og får en kontaktperson i virksomheden og en vejleder fra EK.\nEK’s praktikkontor modtager stillingsopslag, men du skal selv aktivt søge din praktikplads. Du kan også tage praktikken i udlandet. Muligheder for at tage SU med og søge legater afhænger af land og betingelser, så få vejledning hos EK, inden du planlægger økonomien.' },
{ id:'uge', k:['uge','skema','hverdag','undervisning','fuldtid','timer','selvstudie','gruppearbejde','normal'],
a:'En uge varierer med semester og projekt. Du kan møde undervisning, gruppearbejde, cases og selvstudie. Siden viser et eksempel (ikke et fast skema): mandag casestart, tirsdag selvstudie, onsdag byg og test, torsdag præsentation, fredag status og fællesskab. Uddannelsen er et fuldtidsstudie.' },
{ id:'teori', k:['teoretisk','teori','boglig','praktisk','gruppe','samarbejde'],
a:'Du arbejder både med teori og praksis. Teorien hjælper dig med at forstå dine valg, og du bruger den i cases, projekter og digitale løsninger. Samarbejde indgår i cases og projekter, og der er også selvstændigt arbejde.' },
{ id:'studieliv', k:['studieliv','studiemiljø','fredagsbar','forening','studenterforening','labs','tech lab','fællesskab','campus','social','running','heat','ski','sauna','venner'],
a:'Studielivet på EK omfatter Tech Labs (udstyr til fx lyd, video og prototyper; adgang afhænger af det enkelte lab), fredagsbar og sociale arrangementer, og studenterforeninger som EK Running Club, EK Heatclub (saunaklub) og EK Skiudvalg. Du bestemmer selv, hvor meget du er med ud over undervisningen.',
l:['Se EK’s studiemiljø', EK + '#studiemiljoe'] },
{ id:'karriere', k:['karriere','job','jobmulighed','blive','arbejde bagefter','stilling','e-commerce manager','crm','content creator','iværksætter','specialist'],
a:'Du kan gå flere veje:\n• E-commerce & digital forretning: fx E-commerce Manager eller e-handelskoordinator.\n• Synlighed & kampagner: SEO-specialist, Paid Media Specialist, Digital Marketing Specialist.\n• Kunder & oplevelser: UX/CRO-specialist eller CRM.\n• Content & egne idéer: Content Creator eller iværksætter.\nDet er mulige retninger. Dit job afhænger af din profil, erfaring og de muligheder, du søger.' },
{ id:'adgang', k:['adgangskrav','optagelse','optag','søge','hvem kan','krav','gymnasie','erhvervsuddannelse','hhx','stx','htx','hf','fagkrav'],
a:'Du kan søge med en gymnasial uddannelse eller en relevant erhvervsuddannelse. Det specifikke fagkrav er matematik B eller virksomhedsøkonomi B. Se alle adgangsveje og ansøgningsguiden hos EK.',
l:['Søg ind hos EK', EK] },
{ id:'kvote2', k:['kvote 2','kvote2','kvote','kvalifikationer','erhvervserfaring','dokumentation','bilag','eksamensbevis'],
a:'I kvote 2 vurderer EK flere kvalifikationer end karaktergennemsnittet alene, fx eksamensgennemsnit, erhvervserfaring og anden erfaring. Varighed, timetal og dokumentation har betydning.\nHav dit eksamensbevis og dokumentation for dine aktiviteter klar, og følg EK’s guide for bilagsliste og eventuelle særkrav for din adgangsvej.',
l:['EK’s optagelsesinfo', EK] },
{ id:'frister', k:['frist','deadline','ansøgningsfrist','hvornår','studiestart','starte','juli','marts'],
a:'Ifølge siden er fristerne: kvote 2 den 15. marts kl. 12.00 og kvote 1 den 5. juli kl. 12.00. Næste studiestart er angivet til sommer 2028. Tjek altid EK’s officielle side for de gældende datoer.',
l:['Tjek datoer hos EK', EK] },
{ id:'su', k:['su','stipendium','økonomi','penge','legat'],
a:'Uddannelsen er SU-berettiget, så du kan søge SU under studiet.' },
{ id:'sps', k:['sps','ordblind','handicap','funktionsnedsættelse','specialpædagogisk','støtte'],
a:'Er du ordblind, eller har du et handicap eller en funktionsnedsættelse, kan SPS (Specialpædagogisk Støtte) hjælpe dig gennem studiet. Kontakt EK’s SPS-kontor og hør om dine muligheder.',
l:['Læs om SPS hos EK', 'https://www.ek.dk/videregaaende-uddannelser/ansoegere/specialpaedagogisk-stoette-sps'] },
{ id:'matematik', k:['matematik','matematisk','tal','regne','god til'],
a:'Du kommer til at arbejde med tal, økonomi og data, men du behøver ikke have prøvet webanalyse før. Det officielle fagkrav er matematik B eller virksomhedsøkonomi B. Er du i tvivl, så spørg studievejledningen.',
l:['Skriv til studievejledningen', MAIL] },
{ id:'videre', k:['læse videre','kandidat','overbygning','videreuddannelse','master'],
a:'Det afhænger af den konkrete uddannelses adgangskrav. En professionsbachelor giver ikke automatisk adgang til en bestemt kandidatuddannelse. Få vejledning hos EK og den institution, du overvejer.',
l:['Skriv til studievejledningen', MAIL] },
{ id:'passer', k:['passer','egner','nysgerrig','for mig','hvem er','tvivl'],
a:'Uddannelsen passer til dig, der er nysgerrig på, hvordan kunder, teknologi og forretning hænger sammen. Du må gerne komme med størst interesse for ét område og have lyst til at lære de andre.' },
{ id:'aabenthus', k:['åbent hus','aabent','besøg','komme forbi','arrangement'],
a:'Åbent hus på EK Nansensgade er den 3. november 2026 kl. 14.00–17.00 (Nansensgade 19, 1366 København K). Du kan møde undervisere og studerende, høre oplæg om uddannelser og jobmuligheder og få svar om optagelse og hverdagen som studerende.',
l:['Læs mere om åbent hus', 'https://www.ek.dk/om-os/kalender/aabent-hus-nansensgade'] },
{ id:'kontakt', k:['kontakt','telefon','ring','mail','adresse','vejledning','studievejledning','nansensgade','hvor ligger'],
a:'EK – Nansensgade, Nansensgade 19, 1366 København K.\nStudievejledning: studievejledning@ek.dk\nTelefon: 36 15 45 15',
l:['Skriv til studievejledningen', MAIL] },
{ id:'hej', k:['hej','hejsa','goddag','hello','hi','halløj'],
a:'Hej! Jeg kan hjælpe med spørgsmål om E-commerce & Digital Marketing på EK: uddannelsen, studielivet, praktik, karriere og optagelse. Hvad vil du vide?' }
];
var CHIPS = ['Optagelse og kvote 2','Praktik','Karriere','Studieliv','Åbent hus'];
var CHIP_Q = { 'Optagelse og kvote 2':'kvote 2 optagelse', 'Praktik':'praktik', 'Karriere':'karriere', 'Studieliv':'studieliv', 'Åbent hus':'åbent hus' };
var FALLBACK = 'Det kan jeg ikke svare sikkert på. Jeg er en vejviser til E-commerce & Digital Marketing på EK og kan kun hjælpe med uddannelsen, studielivet, praktik, karriere og optagelse. Prøv at omformulere spørgsmålet, eller spørg studievejledningen.';
function norm(s){ return ' ' + s.toLowerCase().replace(/[^\p{L}\p{N}.\-]+/gu,' ').trim() + ' '; }
function answer(q){
var n = norm(q), tokens = n.trim().split(' '), best = null, top = 0;
KB.forEach(function(e){
var s = 0;
e.k.forEach(function(k){
if (k.indexOf(' ') > -1) { if (n.indexOf(' ' + k) > -1) s += 3; return; }
var hit = k.length <= 3 ? tokens.indexOf(k) > -1 : tokens.some(function(t){ return t.indexOf(k) === 0; });
if (hit) s += k.length > 5 ? 2 : 1;
});
if (s > top) { top = s; best = e; }
});
return top > 0 ? best : null;
}
// ---- UI (bygges uden innerHTML, så svar aldrig kan injicere kode) ----
function el(tag, cls, txt){ var e = document.createElement(tag); if (cls) e.className = cls; if (txt) e.textContent = txt; return e; }
var root = document.getElementById('ecmbot');
var fab = el('button','ecmbot-fab'); fab.type = 'button';
fab.setAttribute('aria-expanded','false'); fab.setAttribute('aria-controls','ecmbot-panel');
fab.appendChild(el('span','ecmbot-dot')); fab.appendChild(document.createTextNode('Spørg om ECM'));
var panel = el('section','ecmbot-panel'); panel.id = 'ecmbot-panel'; panel.setAttribute('aria-label','Studiechatbot for E-commerce og Digital Marketing');
var head = el('div','ecmbot-head'), ht = el('div');
ht.appendChild(el('strong',null,'ECM-vejviser')); ht.appendChild(el('span',null,'E-commerce & Digital Marketing, EK'));
var close = el('button','ecmbot-x','×'); close.type = 'button'; close.setAttribute('aria-label','Luk chat');
head.appendChild(ht); head.appendChild(close);
var log = el('div','ecmbot-log'); log.setAttribute('role','log'); log.setAttribute('aria-live','polite');
var chips = el('div','ecmbot-chips');
var form = el('form','ecmbot-form'), input = el('input'); input.type = 'text'; input.placeholder = 'Skriv dit spørgsmål …'; input.setAttribute('aria-label','Dit spørgsmål'); input.maxLength = 200;
var send = el('button',null,'Send'); send.type = 'submit'; form.appendChild(input); form.appendChild(send);
var note = el('div','ecmbot-note','Automatisk vejledning. Gældende regler og datoer står altid hos EK.');
[head,log,chips,form,note].forEach(function(x){ panel.appendChild(x); });
root.appendChild(panel); root.appendChild(fab);
function say(text, who, link){
var m = el('div','ecmbot-msg ' + who, text);
if (link) { var a = el('a',null,link[0]); a.href = link[1]; if (link[1].indexOf('http') === 0) { a.target = '_blank'; a.rel = 'noopener'; } m.appendChild(document.createElement('br')); m.appendChild(a); }
log.appendChild(m); log.scrollTop = log.scrollHeight;
}
function ask(q){
q = q.trim(); if (!q) return;
say(q,'me');
var hit = answer(q);
setTimeout(function(){ hit ? say(hit.a,'bot',hit.l) : say(FALLBACK,'bot',['Skriv til studievejledningen', MAIL]); }, 250);
}
CHIPS.forEach(function(c){ var b = el('button',null,c); b.type = 'button'; b.addEventListener('click', function(){ ask(CHIP_Q[c]); }); chips.appendChild(b); });
function toggle(open){
panel.classList.toggle('open', open); fab.setAttribute('aria-expanded', String(open));
if (open) { if (!log.children.length) say(KB[KB.length-1].a,'bot'); input.focus(); } else { fab.focus(); }
}
fab.addEventListener('click', function(){ toggle(!panel.classList.contains('open')); });
close.addEventListener('click', function(){ toggle(false); });
root.addEventListener('keydown', function(e){ if (e.key === 'Escape' && panel.classList.contains('open')) toggle(false); });
form.addEventListener('submit', function(e){ e.preventDefault(); ask(input.value); input.value = ''; });
})();
</script>
<?php
} );
