[FEAT] Standardizzazione lead form — allineamento a TRPG Agile

MktgLeadController.php:
- Endpoint POST /api/mktg-lead/submit (standard condiviso TRPG/NIS2)
- Proxy a mktg.agile.software/api/webhook/leads con X-Webhook-Key server-side
- Payload standard: name, email, phone, company, product_interest, source, notes
- source: "nis2-landing" per tracciamento CRM
- Fallback email a info@agile.software se webhook non raggiungibile
- Rate limit 3/10min per IP, supporto campi IT e EN

index.html — form allineato a TRPG:
- Aggiunto: telefono (opzionale)
- Aggiunto: tipo utilizzo (select 6 opzioni)
- N° dipendenti: fasce standardizzate (<50/50-249/250-999/1000+)
- Aggiunto: interesse (info/demo/accesso/integrazione B2B)
- Endpoint aggiornato a /api/mktg-lead/submit
- Payload mappato su campi standard EN + source: "nis2-landing"

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
DevEnv nis2-agile
2026-03-09 12:14:42 +01:00
co-authored by Claude Sonnet 4.6
parent c4c34aeed1
commit b1dcd4cbd7
3 changed files with 242 additions and 24 deletions
+39 -22
View File
@@ -972,26 +972,40 @@
<input type="text" name="azienda" placeholder="Nome azienda o studio" required>
</div>
<div class="form-group">
<label>Ruolo <span>*</span></label>
<select name="ruolo" required>
<option value="">Seleziona il tuo ruolo...</option>
<option value="Responsabile Compliance / CISO">Responsabile Compliance / CISO</option>
<option value="IT Manager / Responsabile Sicurezza">IT Manager / Responsabile Sicurezza</option>
<option value="Consulente Cybersecurity / MSSP">Consulente Cybersecurity / MSSP</option>
<label>Telefono</label>
<input type="tel" name="telefono" placeholder="+39 02 123456">
</div>
<div class="form-group">
<label>Tipo di utilizzo <span>*</span></label>
<select name="tipo" required>
<option value="">Seleziona...</option>
<option value="Azienda soggetta NIS2">Azienda soggetta NIS2</option>
<option value="Consulente / CISO esterno">Consulente / CISO esterno</option>
<option value="MSSP / Managed Security Provider">MSSP / Managed Security Provider</option>
<option value="IT Manager / Responsabile sicurezza">IT Manager / Responsabile sicurezza</option>
<option value="DPO / Legale / Compliance">DPO / Legale / Compliance</option>
<option value="Direzione / CEO / CTO">Direzione / CEO / CTO</option>
<option value="DPO / Legale">DPO / Legale</option>
<option value="Altra figura">Altra figura</option>
</select>
</div>
<div class="form-group">
<label>N° dipendenti</label>
<select name="n_dipendenti">
<option value="">Seleziona...</option>
<option value="<50">&lt;50</option>
<option value="50-249">50–249</option>
<option value="250-999">250–999</option>
<option value="1000+">1000+</option>
<option value="Studio multi-cliente">Studio multi-cliente</option>
</select>
</div>
<div class="form-group full">
<label>Dimensioni azienda</label>
<select name="dimensioni">
<label>Cosa ti interessa? <span>*</span></label>
<select name="interesse" required>
<option value="">Seleziona...</option>
<option value="Micro (&lt;10 dipendenti)">Micro (&lt;10 dipendenti)</option>
<option value="Piccola (10-49 dipendenti)">Piccola (10–49 dipendenti)</option>
<option value="Media (50-249 dipendenti)">Media (50–249 dipendenti)</option>
<option value="Grande (250+ dipendenti)">Grande (250+ dipendenti)</option>
<option value="Studio / Consulente multi-cliente">Studio / Consulente multi-cliente</option>
<option value="Informazioni generali">Informazioni generali sul prodotto</option>
<option value="Demo guidata">Demo guidata con un consulente</option>
<option value="Accesso immediato">Accesso immediato alla piattaforma</option>
<option value="Integrazione B2B">Integrazione B2B / API per il mio sistema</option>
</select>
</div>
<div class="form-group full">
@@ -1073,16 +1087,19 @@ document.getElementById('inviteForm').addEventListener('submit', async function(
btn.innerHTML = '<i class="fa-solid fa-spinner fa-spin"></i> Invio in corso...';
const data = {
nome: form.nome.value.trim(),
email: form.email.value.trim(),
azienda: form.azienda.value.trim(),
ruolo: form.ruolo.value,
dimensioni: form.dimensioni.value,
messaggio: form.messaggio.value.trim()
name: form.nome.value.trim(),
email: form.email.value.trim(),
phone: form.telefono.value.trim(),
company: form.azienda.value.trim(),
tipo: form.tipo.value,
size: form.n_dipendenti.value,
product_interest: form.interesse.value,
source: 'nis2-landing',
notes: form.messaggio.value.trim()
};
try {
const res = await fetch('/api/contact/request-invite', {
const res = await fetch('/api/mktg-lead/submit', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify(data)