Integrează AceEngine
pe orice site în 5 minute
Un singur <script> adaugă un asistent AI pe site-ul tău.
Funcționează cu orice tehnologie — fără backend propriu, fără chei OpenAI expuse.
⚡ Quickstart
Adaugă un singur tag <script> înainte de </body> și gata. Înlocuiește LIC-XXXX cu cheia ta din Dashboard.
<!-- Adaugă înainte de </body> -->
<script src="https://ludoprogrammingaceengine-dwb8bdexfnbzdvd2.northeurope-01.azurewebsites.net/api/ace.js?key=LIC-XXXX"></script>
🔍 Cum funcționează
-
1Script încărcat — browserul descarcă
ace.jsde pe serverele AceEngine. -
2Validare licență — cheia este validată server-side față de domeniul autorizat. Dacă nu coincide, widget-ul nu pornește.
-
3Config fetch — widget-ul descarcă culorile, titlul și setările White Label configurate în Dashboard.
-
4Indexare pagină — conținutul HTML al paginii curente este trimis la AceEngine, chuncat, embeddtat vectorial și stocat pentru RAG.
-
5Chat activ — fiecare mesaj al vizitatorului declanșează un RAG search + răspuns GPT bazat exclusiv pe conținutul site-ului tău.
HTML / Vanilla JS
Cea mai simplă integrare — funcționează pe orice site static sau generat server-side.
HTML
<!DOCTYPE html>
<html lang="ro">
<head>
<meta charset="UTF-8">
<title>Site-ul meu</title>
</head>
<body>
<!-- conținutul tău -->
<!-- AceEngine — înainte de </body> -->
<script src="https://ludoprogrammingaceengine-dwb8bdexfnbzdvd2.northeurope-01.azurewebsites.net/api/ace.js?key=LIC-XXXX"></script>
</body>
</html>
React / Next.js
Folosește un useEffect pentru a injecta script-ul o singură dată la mount-ul componentei root.
React App.jsx / Layout.jsx
import { useEffect } from 'react';
export default function Layout({ children }) {
useEffect(() => {
const script = document.createElement('script');
script.src = 'https://ludoprogrammingaceengine-dwb8bdexfnbzdvd2.northeurope-01.azurewebsites.net/api/ace.js?key=LIC-XXXX';
script.async = true;
document.body.appendChild(script);
return () => document.body.removeChild(script);
}, []);
return <>{children}</>;
}
Next.js App Router — layout.tsx
import Script from 'next/script';
export default function RootLayout({ children }) {
return (
<html>
<body>
{children}
<Script
src="https://ludoprogrammingaceengine-dwb8bdexfnbzdvd2.northeurope-01.azurewebsites.net/api/ace.js?key=LIC-XXXX"
strategy="afterInteractive"
/>
</body>
</html>
);
}
strategy="afterInteractive" pentru a nu bloca hydration-ul. Evită strategy="beforeInteractive".
Vue / Nuxt
Vue 3 App.vue
<script setup>
import { onMounted, onUnmounted } from 'vue';
let script;
onMounted(() => {
script = document.createElement('script');
script.src = 'https://ludoprogrammingaceengine-dwb8bdexfnbzdvd2.northeurope-01.azurewebsites.net/api/ace.js?key=LIC-XXXX';
document.body.appendChild(script);
});
onUnmounted(() => script?.remove());
</script>
<template>
<RouterView />
</template>
Nuxt 3 nuxt.config.ts
export default defineNuxtConfig({
app: {
head: {
script: [
{
src: 'https://ludoprogrammingaceengine-dwb8bdexfnbzdvd2.northeurope-01.azurewebsites.net/api/ace.js?key=LIC-XXXX',
defer: true,
body: true
}
]
}
}
})
Angular
Angular Varianta 1 — index.html (simplă)
<!-- src/index.html — înainte de </body> -->
<script src="https://ludoprogrammingaceengine-dwb8bdexfnbzdvd2.northeurope-01.azurewebsites.net/api/ace.js?key=LIC-XXXX" defer></script>
Angular Varianta 2 — AppComponent (programatic)
import { Component, OnInit } from '@angular/core';
import { DOCUMENT } from '@angular/common';
import { Inject } from '@angular/core';
@Component({ selector: 'app-root', templateUrl: './app.component.html' })
export class AppComponent implements OnInit {
constructor(@Inject(DOCUMENT) private document: Document) {}
ngOnInit() {
const s = this.document.createElement('script');
s.src = 'https://ludoprogrammingaceengine-dwb8bdexfnbzdvd2.northeurope-01.azurewebsites.net/api/ace.js?key=LIC-XXXX';
s.defer = true;
this.document.body.appendChild(s);
}
}
WordPress
Există 3 metode — recomandăm wp_enqueue_scripts prin functions.php pentru control maxim.
WordPress Metoda 1 — functions.php (recomandat)
// Adaugă în wp-content/themes/TEMA-TA/functions.php
add_action( 'wp_enqueue_scripts', function() {
wp_enqueue_script(
'aceengine',
'https://ludoprogrammingaceengine-dwb8bdexfnbzdvd2.northeurope-01.azurewebsites.net/api/ace.js?key=LIC-XXXX',
[],
null,
true // true = încarcat în footer, înainte de </body>
);
});
WordPress Metoda 2 — Plugin Header & Footer Scripts
<!-- Settings → Insert Headers and Footers → Scripts in Footer -->
<script src="https://ludoprogrammingaceengine-dwb8bdexfnbzdvd2.northeurope-01.azurewebsites.net/api/ace.js?key=LIC-XXXX" defer></script>
WordPress Metoda 3 — Elementor / Page Builder
În Elementor Pro: Site Settings → Custom Code → Add Code → Location: Body End și lipește tag-ul <script> de mai sus.
Webflow / Wix / Squarespace
Webflow
- 1Deschide Project Settings → Custom Code
- 2În secțiunea Footer Code, lipește tag-ul
<script> - 3Click Save Changes și publică site-ul
Wix
- 1Din Editor, click Settings → Custom Code
- 2Click + Add Custom Code
- 3Lipește tag-ul, selectează Body — end, aplică pe All pages
Squarespace
- 1Mergi la Settings → Advanced → Code Injection
- 2În câmpul Footer, lipește tag-ul
<script> - 3Click Save
ASP.NET Core / Razor
Razor _Layout.cshtml
<!-- Views/Shared/_Layout.cshtml — înainte de </body> -->
<script src="https://ludoprogrammingaceengine-dwb8bdexfnbzdvd2.northeurope-01.azurewebsites.net/api/ace.js?key=LIC-XXXX"
asp-append-version="false"></script>
Razor Dezactivare pe Development
<environment exclude="Development">
<script src="https://ludoprogrammingaceengine-dwb8bdexfnbzdvd2.northeurope-01.azurewebsites.net/api/ace.js?key=LIC-XXXX"></script>
</environment>
<environment exclude="Development"> face widget-ul invizibil în development și activ doar în Staging/Production.
Laravel / PHP
Laravel layouts/app.blade.php
<!-- resources/views/layouts/app.blade.php — înainte de </body> -->
@unless(app()->isLocal())
<script src="https://ludoprogrammingaceengine-dwb8bdexfnbzdvd2.northeurope-01.azurewebsites.net/api/ace.js?key={{ config('aceengine.key') }}"
defer></script>
@endunless
Laravel config/aceengine.php
<?php
// config/aceengine.php
return [
'key' => env('ACEENGINE_KEY', ''),
];
ACEENGINE_KEY=LIC-XXXX
⚙️ Configurare widget
Widget-ul preia automat configurarea din Dashboard (White Label). Opțional, poți suprascrie setările direct în pagină prin obiectul global window.AceConfig definit înainte de tag-ul <script>.
<!-- Înainte de tag-ul ace.js -->
<script>
window.AceConfig = {
title: 'Asistent AI', // titlul din header widget
placeholder: 'Cum te pot ajuta?', // placeholder input
primaryColor:'#7c3aed', // culoare principală
position: 'bottom-right', // 'bottom-right' | 'bottom-left'
language: 'ro', // 'ro' | 'en'
showBranding:false, // ascunde "Powered by AceEngine"
};
</script>
<script src="...ace.js?key=LIC-XXXX"></script>
| Proprietate | Default | Descriere |
|---|---|---|
| title | "Asistent AI" | Titlul afișat în header-ul widget-ului |
| placeholder | "Scrie o întrebare..." | Textul placeholder din câmpul de input |
| primaryColor | "#7c3aed" | Culoarea principală (hex). Afectează butonul, header, link-uri |
| position | "bottom-right" | Poziția butonului flotant: bottom-right sau bottom-left |
| language | "ro" | Limba interfeței: ro (română) sau en (engleză) |
| showBranding | true | Afișează / ascunde "Powered by AceEngine" (disponibil pe planul Pro+) |
📡 Evenimente JS
Widget-ul emite evenimente custom pe window pe care le poți asculta pentru integrări avansate (analytics, CRM, tracking).
// Widget deschis
window.addEventListener('ace:open', () => {
console.log('Widget deschis');
});
// Widget închis
window.addEventListener('ace:close', () => {
console.log('Widget închis');
});
// Mesaj trimis de user
window.addEventListener('ace:message', (e) => {
console.log('Întrebare:', e.detail.question);
});
// Răspuns primit de la AI
window.addEventListener('ace:response', (e) => {
console.log('Răspuns AI:', e.detail.answer);
});
// Eroare (licență invalidă, rată depășită etc.)
window.addEventListener('ace:error', (e) => {
console.error('Eroare AceEngine:', e.detail.message);
});
e.detail.question — textul întrebării trimise de user.e.detail.answer — răspunsul complet generat de AI.e.detail.message — mesajul de eroare. e.detail.code — codul HTTP (401, 429 etc.)Exemplu — Google Analytics 4
window.addEventListener('ace:message', (e) => {
gtag('event', 'ace_question', {
event_category: 'AceEngine',
event_label: e.detail.question.substring(0, 100)
});
});
🔧 Troubleshooting
https://site-ul-tau.com (fără slash final). Deschide Console în DevTools și caută erori cu prefixul [AceEngine].localhost pentru development sau folosește tag-ul <environment exclude="Development"> în ASP.NET / @unless(app()->isLocal()) în Laravel pentru a dezactiva pe local.robots.txt.script-src a CSP-ului tău:Content-Security-Policy: script-src 'self' ludoprogrammingaceengine-dwb8bdexfnbzdvd2.northeurope-01.azurewebsites.netif (!document.querySelector('[src*="ace.js"]')) { /* injectează */ }❓ FAQ
window.AceConfig descris în secțiunea de configurare.Nu ai găsit răspunsul?
Contactează-ne →