Moduli di contatto e messaggi
Contact Form e Contact Messages sono funzionalità di prima classe di WebBlocks CMS. Utilizzate il blocco nativo contact_form per le pagine di contatto invece di Trusted HTML, markup di form grezzo o soluzioni di ripiego con mailto:.
Questa guida consolida il comportamento di Contact Form e Contact Messages rivolto all'utente, documentato nei contratti dei blocchi, nei contratti di rendering pubblico, nella documentazione della Internal Content API e nel README. Non definisce nuovi comportamenti di runtime.
Panoramica
Il blocco Contact Form esegue il rendering di un vero form pubblico e memorizza nel CMS i messaggi accettati. Contact Messages offre agli amministratori una schermata di revisione di questi invii, che include stato, segnali di revisione dello spam, stato della notifica e dettagli sicuri sugli errori di consegna.
Il CMS tratta l'archiviazione e la notifica via e-mail come aspetti distinti:
- gli invii reali accettati vengono memorizzati prima che venga tentata la notifica
- la notifica può riuscire, fallire o essere saltata senza modificare il fatto che il CMS ha accettato l'invio pubblico
- i visitatori pubblici devono vedere un riscontro generico di successo o di validazione, non il punteggio di spam o i dettagli interni della consegna
Aggiungere un blocco Contact Form
Aggiungete il blocco dal selettore di blocchi del Page Builder. L'handle nativo del blocco è:
contact_form
Il blocco Contact Form non è un contenitore di blocchi figli. Possiede la superficie pubblica del form e non accetta blocchi di contenuto annidati come normale modello di composizione.
Una tipica pagina di contatto utilizza contenuto strutturato attorno al form nativo:
main slot
section
container
content_header or hero
contact_form
Gli strumenti IA/operatore devono costruire lo stesso tipo di struttura dopo che la discovery in tempo reale ha confermato gli handle disponibili. Non devono creare form con Trusted HTML, markup <form> grezzo o link mailto: quando contact_form esiste nell'installazione CMS di destinazione.
Campi del blocco Contact Form
Il testo visibile è traducibile:
titleo intestazionecontento testo introduttivosubmit_labelsuccess_message
Le impostazioni operative condivise si trovano nelle impostazioni del blocco:
recipient_emailsend_email_notificationstore_submissions
Mantenete separati il testo editoriale e l'instradamento operativo. Il testo del form può variare in base alla lingua (locale), mentre le impostazioni di destinatario e notifica restano condivise per il blocco.
Comportamento dell'invio pubblico
Il renderer pubblico genera un form nativo del browser che invia i dati a:
POST /contact-messages
Il form è protetto da CSRF e valida i normali campi del visitatore.
Campi obbligatori:
nameemailmessage
Campo opzionale:
subject
Campo di controllo antispam generato dal renderer:
_form_check_namemetadati firmatiform_check_{token}campo di controllo generato
Il renderer crea questi campi automaticamente. Non createli manualmente nel contenuto, in HTML grezzo o nei payload dell'API. Il campo di controllo non fa parte del normale input del visitatore e il vecchio campo website non è più il contratto pubblico di Contact Form.
Gli invii con il campo di controllo compilato ricevono lo stesso comportamento generico di successo di un normale invio accettato, ma non vengono memorizzati e non attivano la notifica. Gli invii automatizzati molto rapidi vengono gestiti allo stesso modo. I visitatori pubblici non devono ricevere diagnostica su spam o consegna.
Archiviazione e amministrazione di Contact Messages
Gli invii reali accettati vengono memorizzati prima che venga tentata la notifica via e-mail.
Percorso di amministrazione:
/webadmin/contact-messages
Contact Messages è una schermata di revisione per amministratori. Non è un elenco pubblico né un'API pubblica di consegna.
La schermata di amministrazione consente agli utenti del CMS di rivedere gli invii a livello di guida utente:
- lo stato del messaggio, ad esempio nuovo, letto, con risposta, archiviato o spam
- il contesto della pagina di origine, quando disponibile
- il punteggio di spam e le etichette del motivo dello spam per la revisione
- se la notifica è stata saltata, inviata, è fallita o è in attesa
- dettagli sicuri sull'errore quando la consegna della notifica fallisce
Lo stato della notifica via e-mail riguarda esclusivamente il comportamento della notifica:
Sentsignifica che il CMS ha consegnato il messaggio al trasporto di posta configurato senza eccezioni. Non garantisce la consegna nella casella di posta.Failedsignifica che è stato tentato un invio reale della notifica e Laravel ha segnalato un'eccezione. Il dettaglio salvato è sanificato e non deve includere password, token, il file.envgrezzo o stack trace.Skippedsignifica che la notifica non è stata tentata, di solito perché il blocco l'ha disattivata.Not configuredsignifica che la notifica non è stata tentata perché non era disponibile alcun destinatario, il mailer èlog,arrayonull, oppure le impostazioni SMTP sono incomplete al punto da rendere impossibile la consegna in uscita.Pendingè riservato ai record per i quali non si è ancora verificato un tentativo di notifica o una risoluzione.
I messaggi salvati meno recenti possono avere lo stato di notifica dedotto dai vecchi campi di invio/errore. Il CMS non riscrive automaticamente questi record storici.
Contact Messages segue inoltre il comportamento condiviso degli elenchi di amministrazione per l'eliminazione in blocco degli elementi selezionati, dove disponibile. Considerate l'eliminazione come un'azione di pulizia amministrativa, non come parte della normale gestione del form pubblico.
Gestione dello spam
La gestione dello spam ha due livelli.
Il livello del campo di controllo generato dal renderer prevede lo scarto immediato:
- il campo nascosto generato
form_check_{token}deve restare vuoto per i visitatori normali - gli invii con il campo di controllo compilato ricevono un successo generico
- gli invii con il campo di controllo compilato non vengono memorizzati
- gli invii con il campo di controllo compilato non attivano la notifica
Gli invii che superano il campo di controllo generato possono comunque ricevere un punteggio prudenziale. Esempi attuali di segnali di punteggio:
- densità elevata di link o link multipli
- linguaggio di contatto commerciale
- combinazioni generiche di oggetto e messaggio in stile vendita
- invii ripetuti dallo stesso indirizzo IP
Lo spam con punteggio viene volutamente conservato con stato di spam per la revisione da parte dell'amministratore. Non descrivete l'eliminazione automatica dello spam come comportamento attuale. Una soglia configurabile di scarto automatico è solo una possibile direzione futura, dopo l'osservazione dei dati di produzione.
Catena di fallback della notifica via e-mail
La notifica di Contact Form utilizza questo ordine di destinatari:
recipient_emaila livello di blocco- Il destinatario Contact predefinito del sito corrente, da
Edit Site -> Contact CONTACT_RECIPIENT_EMAILMAIL_FROM_ADDRESScome ultimo fallback sicuro
Il successo dell'archiviazione è distinto dal successo della notifica. Una risposta pubblica di successo indica che il CMS ha accettato il flusso del messaggio, non necessariamente che la consegna dell'e-mail sia riuscita. Gli amministratori devono controllare Contact Messages per lo stato della notifica e i dettagli sicuri sugli errori.
Configurazione dell'e-mail
Le notifiche di Contact Form utilizzano la consegna della posta di Laravel. Le impostazioni SMTP tipiche in .env sono:
MAIL_MAILER=smtp
MAIL_HOST=smtp.example.com
MAIL_PORT=587
MAIL_USERNAME=
MAIL_PASSWORD=
MAIL_ENCRYPTION=tls
MAIL_FROM_ADDRESS=no-reply@example.com
MAIL_FROM_NAME="Site Name"
CONTACT_RECIPIENT_EMAIL=contact@example.com
MAIL_* controlla il trasporto di posta di Laravel. MAIL_FROM_ADDRESS è l'indirizzo mittente sicuro di ripiego e l'ultimo fallback sicuro per il destinatario. CONTACT_RECIPIENT_EMAIL è opzionale e viene utilizzato solo quando i destinatari del blocco e del sito sono vuoti. Per il normale instradamento del sito, preferite il destinatario Contact a livello di sito in Site -> Edit -> Contact.
Per le notifiche in produzione utilizzate un mailer in uscita reale, come SMTP. MAIL_MAILER=log, MAIL_MAILER=array e MAIL_MAILER=null sono utili per lo sviluppo o i test, ma Contact Messages li mostra come non configurati anziché inviati, perché non è stato tentato alcun invio reale in uscita.
Dopo aver modificato le impostazioni di posta in .env su un'installazione di produzione o da pacchetto, svuotate la configurazione memorizzata nella cache quando il caching della configurazione potrebbe essere attivo:
php artisan optimize:clear
Risoluzione dei problemi e diagnostica
Per lo sviluppo locale, utilizzate un catcher SMTP locale o un account SMTP di test affidabile. Evitate di testare la consegna dei contatti su caselle personali o di produzione, a meno che l'operatore non abbia configurato intenzionalmente quell'ambiente.
Il comando di diagnostica è:
php artisan contact:mail-diagnose
Utilizzate l'ID di uno specifico blocco Contact Form per esaminare il fallback dei destinatari di quel blocco:
php artisan contact:mail-diagnose --block=ID
Utilizzate una verifica di invio SMTP controllata solo quando l'indirizzo di test di destinazione è intenzionale:
php artisan contact:mail-diagnose --send-test=address@example.com
La diagnostica non deve stampare password, token, segreti di posta o configurazioni sensibili grezze. I dettagli delle notifiche fallite, saltate e non configurate possono essere esaminati da Contact Messages. Considerate Contact Messages come la fonte di verità per gli invii memorizzati e il loro stato di notifica.
Checklist di preparazione alla pubblicazione
Prima di pubblicare o annunciare una pagina di contatto pubblica:
- Verificate che il login amministratore funzioni.
- Verificate che l'identità del sito e le impostazioni del dominio siano corrette.
- Configurate la consegna
MAIL_*o le impostazioni di posta di sistema approvate. - Configurate il destinatario Contact, preferibilmente in
Site -> Edit -> Contact. - Eseguite
php artisan contact:mail-diagnose. - Visualizzate in anteprima o pubblicate una pagina che contiene il blocco nativo
contact_form. - Inviate un messaggio di prova con nome, e-mail, oggetto e messaggio.
- Verificate che
/webadmin/contact-messagesmostri il messaggio memorizzato. - Esaminate lo stato della notifica ed eventuali dettagli sicuri sugli errori.
Se la notifica fallisce ma il messaggio viene memorizzato, trattatelo come un problema di consegna della posta, non come un invio fallito del form pubblico.
Internal Content API e supporto per operatori IA
La Internal Content API è destinata a strumenti IA/operatore affidabili. Non è un'API pubblica di consegna né un'integrazione con un fornitore di IA.
Gli strumenti IA/operatore devono iniziare con la discovery in tempo reale:
GET /webadmin/api
Utilizzate poi i link individuati per i contratti correnti:
GET /webadmin/api/content-contract
GET /webadmin/api/block-types
GET /webadmin/api/examples/contact-page
GET /webadmin/api/examples/contact-page mostra l'uso nativo di contact_form. Gli strumenti IA/operatore non devono indovinare gli handle né creare moduli di contatto con Trusted HTML, markup di form grezzo o link mailto: quando il blocco nativo Contact Form è disponibile.
L'applicazione dei contenuti resta orientata alla bozza e non pubblica per impostazione predefinita. Gli operatori devono validare i piani, applicarli solo dopo un'approvazione esplicita, visualizzare in anteprima la pagina in bozza e lasciare la pubblicazione a una persona o a un flusso di lavoro approvato esplicitamente.