Un percorso chiaro dal
messaggio alla decisione.
Collega il backend a Spamadin. Conserva la chiave API Spamadin sul server. Salva i messaggi nel tuo sistema prima di richiedere una classificazione.
Crea con il tuo assistente di programmazione
Fornisci al tuo assistente la guida di integrazione e la specifica OpenAPI per collegare il sito dal server.
Guida di integrazione · Specifica OpenAPI · Indice della documentazione per IA
Plugin WordPress
Installa Spamadin su WordPress e incolla la chiave API dell’account in Impostazioni → Spamadin. Usa la stessa chiave su tutti i siti del piano. Il collegamento aggiunge automaticamente il sito entro il limite del piano e conserva la chiave in modo sicuro sul server WordPress.
Commenti e moduli compatibili sono protetti per impostazione predefinita. Sono supportati Contact Form 7, WPForms, Gravity Forms, Fluent Forms ed Elementor Pro. Puoi modificare la protezione e i segnali facoltativi del browser nelle impostazioni del plugin.
I commenti spam restano nella coda spam di WordPress; i controlli incerti o non disponibili passano alla moderazione. I messaggi dei moduli trattenuti restano privati in Impostazioni → Spamadin per un massimo di 30 giorni. Esaminali e contatta direttamente i mittenti legittimi; le azioni del modulo non vengono rieseguite. Le correzioni condividono solo il riferimento del controllo e l’etichetta, mai il testo del messaggio.
Scollegare il plugin interrompe i controlli locali. Blocca il sito nella dashboard Spamadin per fermare le richieste API e liberare il posto. Ricollegarlo non lo sblocca. Sostituire la chiave dell’account richiede l’aggiornamento di tutte le integrazioni.
1. Crea un account e una chiave
Verifica l’e-mail, scegli un abbonamento nella dashboard, e crea una chiave API dell’account. Riutilizzala su tutti i siti. Ogni hostname consentito occupa un posto; example.com e www.example.com contano separatamente. Le chiavi vengono mostrate una sola volta e archiviate con Argon2id.
La chiave Spamadin autentica le richieste al servizio ed è distinta dalle nostre credenziali interne del fornitore IA. L’abbonamento include la classificazione; non serve un account o una chiave OpenRouter.
2. Controlla un messaggio
Descrivi il sito quando lo colleghi. Spamadin usa l’IA per classificarlo e includere il contesto nei controlli futuri. Disabilita un sito nella dashboard per bloccarne le richieste e liberare un posto. Passando a un piano inferiore, restano attivi i siti abilitati più vecchi entro il limite del piano; disabilitane uno per abilitarne un altro.
POST /api/v1/check · Corpo JSON · Authorization: Bearer YOUR_SERVER_KEY
curl https://spamadin.com/api/v1/check \
-H 'Authorization: Bearer YOUR_SERVER_KEY' \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: 45573012-1f18-4eaf-97a1-29702376ea21' \
-d '{
"type": "contact",
"siteUrl": "https://example.com",
"content": "Potete inviarci un preventivo per il nostro nuovo sito?",
"context": { "title": "Website design", "language": "en" },
"signals": { "elapsedMs": 8500, "honeypotFilled": false }
}'Controlli in blocco
Invia fino a 20 messaggi a POST /api/v1/check/bulk con la chiave API dell’account. Possono provenire da siti diversi dell’account. Ogni elemento richiede un ID UUID unico e un oggetto submission. Le risposte mantengono l’ordine e includono stato e risultato. Riprova con lo stesso ID e gli stessi dati. Limiti dei siti, blocchi e quota mensile condivisa valgono per ogni elemento.
{
"checks": [
{
"id": "45573012-1f18-4eaf-97a1-29702376ea21",
"submission": {
"type": "contact",
"siteUrl": "https://example.com",
"content": "Potete inviare un preventivo?"
}
}
]
}Contesto specifico del modulo
Crea un profilo del modulo nella dashboard usando scopo, etichette dei campi e testo pubblico pertinente. Controlla e salva il riepilogo suggerito, poi includi il formId nei controlli singoli o in blocco. Usa i profili reader_comment per i commenti e gli altri profili per i messaggi di contatto. I profili forniscono contesto, non un’autorizzazione automatica a inviare messaggi promozionali.
{
"formId": "d495b23a-cf83-4c3d-bd63-6973297ec401",
"type": "contact",
"siteUrl": "https://example.com",
"content": "Potete inviare un preventivo?"
}Usa un nuovo UUID Idempotency-Key per ogni messaggio. Dopo errori di rete, ripeti lo stesso contenuto con la stessa chiave. Un controllo già completato restituisce la decisione esistente senza un nuovo addebito di quota. Le chiavi restano nei metadati per 30 giorni; non riprovare messaggi più vecchi.
| Campo | Scopo | Limite |
|---|---|---|
| content | Testo originale del messaggio; obbligatorio | 1–12.000 caratteri |
| type | contact o comment; obbligatorio | Valore enumerato esatto |
| siteUrl | URL del sito obbligatorio. I nuovi siti vengono registrati automaticamente entro il limite del piano. | HTTP(S), 2.048 caratteri |
| context.title / description | Contesto pertinente della pagina fornito dal server | 200 / 1.000 caratteri |
| context.language / tags | Lingua del sito e fino a dieci tag tematici | 35 / 50 caratteri |
| signals.elapsedMs | Tempo tra visualizzazione e invio del modulo | 0–86.400.000 ms |
| signals.honeypotFilled | Indica se un campo nascosto è stato compilato | Booleano |
| signals.userAgent / userIp | Metadati facoltativi; non inviati ai modelli | 512 caratteri / IP valido |
Deriva contesto e comportamento sul server. Gli orari del browser possono essere falsificati. Per i futuri plugin CMS, firma il timestamp di visualizzazione e validalo all’invio, usa un honeypot accessibile e gli hook del ciclo di vita server di commenti e moduli. Non inoltrare cookie, intestazioni di autorizzazione, password, variabili d’ambiente complete o altri segreti.
3. Preserva i casi incerti
{
"id": "c18dd105-5d52-4939-a63e-0d52b2c0606d",
"verdict": "allow",
"score": 0,
"reasons": ["clear_legitimate_context"],
"degraded": false,
"latencyMs": 420,
"charged": true
}Questa risposta è illustrativa, non garantisce una latenza. Il punteggio è un indicatore ordinale di rischio: 0 (consenti), 50 (verifica) o 100 (forte accordo sullo spam). Non è una probabilità calibrata.
- allow: prosegui con la normale moderazione o consegna.
- review: conserva il messaggio nella coda di revisione. Non eliminarlo mai.
- spam: mettilo in quarantena, mantenendo un recupero per i falsi positivi.
- degraded: true: un fornitore ha fallito o restituito un risultato non valido. Conserva per revisione. Questo controllo non consuma quota.
La classificazione automatica parte in modalità osservazione finché l’operatore non abilita una politica di blocco valutata. Se la chiamata fallisce o restituisce uno stato diverso da 2xx, conserva il messaggio per revisione anziché eliminarlo o riprovare senza fine.
4. Segnala una correzione
POST /api/v1/feedback con la stessa chiave API Bearer e il JSON {"id":"CHECK_UUID","label":"legitimate"} oppure l’etichetta spam. Le correzioni riguardano solo i controlli creati da quella chiave. Registrano un dato per la valutazione, senza modificare l’addestramento condiviso o autorizzare subito un mittente.
Puoi anche registrare una correzione nella dashboard e contattare l’assistenza con il riferimento del controllo. Possiamo adattare contesto e cautela al tuo sito. Non inviare via email contenuti privati, password o chiavi API. I riferimenti restano disponibili per 30 giorni.
Limiti e gestione degli errori
- Corpo massimo: 32 KiB. Campi sconosciuti e JSON malformato vengono rifiutati.
- 120 richieste per chiave al minuto. Concorrenza limitata per processo; i controlli in eccesso restituiscono 503.
- 400 input non valido, 401 chiave non valida/revocata, 402 abbonamento inattivo, 409 tentativo in attesa o diverso, 413 corpo troppo grande, 429 limite di frequenza/quota, 503 capacità temporaneamente indisponibile.
- Ripeti gli errori transitori con attesa esponenziale limitata. Riutilizza Idempotency-Key e rispetta Retry-After quando presente.
- Le quote mensili sono condivise tra tutte le chiavi e si azzerano all’anniversario mensile dell’abbonamento, anche per i piani annuali. Nei mesi più corti si usa l’ultimo giorno. Nessun riporto o superamento automatico.
Segnala un errore di classificazione
Segnala un messaggio legittimo classificato come spam a POST /api/v1/reports/false-positive, oppure spam non rilevato a POST /api/v1/reports/missed-spam. Invia solo l’ID restituito con la chiave API dell’account. Non viene condiviso contenuto né consumato un controllo. Prevale l’ultima correzione; le segnalazioni non riaddestrano subito il modello.
{
"id": "c18dd105-5d52-4939-a63e-0d52b2c0606d"
}Privacy per impostazione predefinita
I controlli ordinari conservano metadati e un’impronta dell’input con chiave per 30 giorni, senza salvare il contenuto dei messaggi. I formati comuni di email e telefono vengono mascherati prima dell’elaborazione IA: è minimizzazione, non anonimizzazione completa. Gli esempi condivisi volontariamente sono conservati separatamente secondo l’informativa privacy.
Controlli invisibili facoltativi per i moduli
Chiama POST /api/v1/form-token dal tuo server con siteUrl, type e, facoltativamente, un formId salvato. I token scadono dopo 30 minuti. L’emissione non consuma un controllo antispam e richiede l’accesso attivo al sito.
Invia il token ricevuto in signals.formToken e usa l’idempotencyKey ricevuto come intestazione Idempotency-Key. Nei controlli in blocco, usalo come id dell’elemento. I tentativi successivi devono mantenere esattamente la richiesta originale. Usa un nuovo token per ogni nuovo invio.
Carica /spamadin-behavior.js sul tuo sito e collegalo al modulo. Il tuo endpoint dei token, della stessa origine, chiama Spamadin dal tuo server e restituisce solo la risposta pubblica del token del modulo. Non esporre mai la tua chiave API e non incorporare token condivisi nelle pagine memorizzate nella cache.
SpamadinBehavior.attach(document.querySelector("#contact-form"), {
tokenEndpoint: "/form-evidence/token"
});Lo script aggiunge un campo nascosto spamadin_evidence contenente token, idempotencyKey e i segnali del browser. Valida questo campo sul server, associa browser a signals.browser e inoltra token come signals.formToken. I segnali usano version 1, jsExecuted, focusCount, editCount, pasteCount, keyboardUsed, pointerUsed e, facoltativamente, firstInteractionMs. Il server può anche inviare honeypotFilled e l’indirizzo IP del visitatore.
Questi segnali aiutano la classificazione, ma da soli non identificano mai lo spam. Incollare, usare il completamento automatico, disabilitare JavaScript e utilizzare tecnologie assistive possono essere comportamenti legittimi. Il tempo misura l’intervallo dall’emissione del token, senza dimostrare un’attività umana. I token assenti o scaduti non causano il rifiuto automatico dei messaggi.
Lo script non registra testo digitato, contenuti degli appunti, movimenti del mouse o cookie. I token e i riepiloghi delle interazioni non sono conservati nella cronologia dei controlli né inviati come credenziali ai fornitori di IA. I controlli con segnali del browser eseguono sempre la classificazione senza riutilizzare un risultato in cache.
Riconoscimento delle ripetizioni
Il riconoscimento delle ripetizioni è separato per sito. Le impronte scadono dopo 24 ore e non contengono testo salvato. Formulazioni simili supportano la classificazione, ma non identificano spam da sole. Disattiva la funzione nelle impostazioni del sito per cancellare cronologia e segnali delle campagne approvate. Bloccare un sito o segnalare una correzione cancella anche la cronologia recente.
I controlli identici idonei possono riutilizzare un verdetto recente di messaggio autentico solo quando la funzione è stata valutata e attivata. Il riutilizzo è limitato a cinque minuti e richiede dati inviati, impostazioni di sito e modulo, configurazione dei modelli e criteri di rilevamento invariati. Le corrispondenze approssimative non saltano mai l’IA. Ogni controllo completato conta una volta nel limite, anche con un verdetto riutilizzato; gli errori del fornitore non vengono conteggiati.
Condividi un esempio corretto
Invia POST /api/v1/training con chiave originale, checkId, etichetta corretta, oggetto dell’invio originale invariato ed entrambe le conferme di condivisione su true. Il controllo deve essere completato e risalire a meno di 30 giorni. La condivisione è facoltativa, non consuma un controllo e non riaddestra subito un modello. Esegui la richiesta dal backend e fornisci le informative richieste e l’autorità legale prima di condividere contenuti dei visitatori.
{
"checkId": "c18dd105-5d52-4939-a63e-0d52b2c0606d",
"label": "legitimate",
"submission": {
"type": "contact",
"siteUrl": "https://example.com",
"content": "Potete inviare un preventivo?"
},
"consent": {
"authorizedToShare": true,
"useForSpamImprovement": true
}
}GET /api/v1/training elenca i riferimenti degli esempi condivisi dall’account. Usa ?after=EXAMPLE_UUID per la pagina successiva o ?id=EXAMPLE_UUID per recuperare un esempio ridotto. DELETE sullo stesso endpoint con l’ID dell’esempio lo rimuove. La dashboard permette di rimuovere esempi anche dopo la revoca della chiave.
Gli esempi scadono dopo 90 giorni. Limiti: 500 esempi o 2 MiB di dati cifrati per account, 16 KiB di testo originale per esempio e 24 KiB di contenuto e contesto minimizzati prima della compressione. Le richieste restano limitate a 32 KiB. Un account pieno restituisce 429; capacità temporaneamente indisponibile o assenza di cifratura restituiscono 503. Nessun esempio viene salvato se un limite rifiuta la richiesta. Non riprovare all’infinito e non inviare allegati privati. Il mascheramento è effettuato al meglio, non è anonimizzazione.
L’API non visita mai gli URL inviati. Gli IP facoltativi aiutano a rilevare picchi temporanei di invii per singolo sito; gli user agent non influiscono sulla classificazione. Nessuno viene inviato ai modelli. Usa il nostro plugin WordPress o collega altri CMS tramite l’API server.
Crea il tuo account ↗