Nonprofit Membership Workflow Beta
Installazione
Una guida completa, fase per fase, per portare il workflow sul dominio della tua associazione: dagli account alle web app, dai pagamenti ai libri sociali, fino al collaudo finale.
Prima di iniziare
Una guida completa, fase per fase
Il percorso è diviso in fasi sequenziali. Le fasi A–C preparano account, foglio e risorse su Drive; la fase D genera i file con il Configuratore; le fasi E–G installano il codice, pubblicano le web app e attivano le automazioni; la fase H mette in regola i libri sociali; le fasi I–J aggiungono i componenti opzionali e collaudano tutto. Pagamenti, Microsoft 365, app mobile, liberatorie e registro eventi sono opzionali: il sistema degrada in modo pulito senza di loro.
{{TOKEN}}. Dopo la configurazione, il tuo 0_Secrets.gs conterrà chiavi reali: non condividerlo, non caricarlo su repository pubbliche e, se esposto, ruota subito le chiavi. In alternativa puoi conservare i valori nelle Script Properties del progetto.
Deploy › Manage deployments › Edit › New version): salvare nell'editor non aggiorna ciò che risponde all'URL /exec. È la causa più comune di «ho corretto il codice ma non cambia niente».
Fase A · Account e strumenti
Account e strumenti
Prepara gli account e i permessi. Sono operazioni che si fanno una volta sola, prima di toccare il codice.
-
Google Workspace con un Super Admin
Attiva un piano Google Workspace sul dominio dell'associazione. Lo script va eseguito da un utente con ruolo Super Admin:
✓ Fatto quando disponi di un accountAdmin Console › Utenti › [utente] › Ruoli e privilegi amministratore. Serve perché lo script crea utenze, gestisce i gruppi di dominio e verifica chi può accedere al pannello della Presidenza.@tuodominio.itcon ruolo Super Admin. -
Verifica il dominio e l'email
In
Admin Console › Account › Dominiverifica la proprietà del dominio e configura i record DNS per la deliverability.- MX verso Google Workspace
- SPF:
v=spf1 include:_spf.google.com ~all - DKIM attivato da
Apps › Google Workspace › Gmail › Autentica email
-
Crea i tre Google Groups
In
Admin Console › Gruppicrea un gruppo per la Presidenza, uno per i soci e uno per i volontari o i musicisti (es.presidenza@,soci@,musicisti@). Le chiavi diWORKSPACE_GROUPSdovranno corrispondere esattamente ai valori usati nella colonnaGruppodel foglio.- L'appartenenza al gruppo della Presidenza è ciò che autorizza l'accesso al pannello: non è una formalità.
-
Account Stripe (opzionale)
Solo se incassi le quote online: registra un account su
dashboard.stripe.come completa l'attivazione dell'ente. Se preferisci incassare fuori dal sistema, salta questo punto: la Presidenza segnerà la quota come regolare dal pannello. -
Account Cloudflare (se usi Stripe)
Serve per pubblicare un piccolo Worker che fa da tramite fra Stripe e Apps Script. Il piano gratuito è sufficiente. Il perché è spiegato nella Fase F: senza, i pagamenti non aggiornano il foglio.
- Installa anche
wrangler, la riga di comando di Cloudflare.
- Installa anche
-
Tenant Microsoft 365 / Entra ID (opzionale)
Solo se assegni anche utenze Office: predisponi un tenant Microsoft 365 con un amministratore globale, necessario per registrare l'applicazione.
-
Progetto Supabase (opzionale)
Solo se vuoi alimentare un'app mobile con i dati dei soci. È una sincronizzazione che non può mai far fallire un'ammissione o un pagamento: se non la configuri, viene semplicemente saltata.
Fase B · Il foglio dati
Il foglio dati
Il foglio Google è il database operativo: ogni domanda diventa una riga, e le colonne gestionali sono ciò che i trigger sorvegliano.
-
Crea il foglio dati
Apri il foglio template e fai
✓ Fatto quando hai una copia del foglio sul Drive dell'organizzazione.File › Crea una copiasul Drive dell'organizzazione. Le colonne del richiedente sono già predisposte; quelle gestionali le creerà lo script nella Fase G. -
Annota l'ID del foglio
Dall'URL del foglio copia l'ID compreso tra
/d/e/edit: lo inserirai nel Configuratore comeSHEET_ID. -
Nessun servizio di moduli esterno
Il modulo di iscrizione non è un servizio di terze parti da collegare: è una web app che fa parte del pacchetto (
ModuloIscrizioneHTML.html) e che pubblicherai tu nella Fase F. È quella pagina a scrivere direttamente sul foglio.- Vantaggio pratico: i consensi, la firma e gli allegati restano sul Drive dell'ente, senza passare da nessun altro.
Fase C · Risorse Drive e tessera
Risorse Drive e tessera
Il sistema salva allegati e genera documenti su Drive. Qui prepari le cartelle e il template della tessera.
-
Crea la cartella delle tessere
Su Google Drive:
✓ Fatto quando hai una cartella dedicata e ne conosci l'ID.Nuovo › Cartella(es. "Tessere associative"). Aprila e copia l'ID dall'URL (la parte dopo/folders/): saràTESSERE_FOLDER_ID. -
Crea la cartella degli allegati
Una seconda cartella riceverà i documenti d'identità e le immagini delle firme caricati dal modulo. Trattala come un archivio riservato: i file ereditano i permessi della cartella e nient'altro, quindi chi ha accesso alla cartella ha accesso ai documenti.
- Rivedi periodicamente l'elenco degli autorizzati e non lasciarci account di prova.
- Non condividere mai la cartella con un link pubblico.
-
Scarica il template tessera (pronto)
Scarica il template della tessera (.pptx), caricalo su Google Drive, poi clic destro ›
Apri con › Presentazioni Google: Drive lo converte in Slides. Personalizza logo, nome e colori, infine copia l'ID dall'URL: saràSLIDES_TEMPLATE_ID.- È già in formato orizzontale, con gli otto segnaposto e lo spazio per il QR al posto giusto.
- Non rinominare i segnaposto (
{{NOME}},{{COGNOME}}, ...): lo script li sostituisce con i dati del socio.
-
In alternativa: crea il template da zero
Preferisci partire da una tua grafica? Crea una presentazione Slides in formato orizzontale e inserisci caselle di testo con esattamente questi segnaposto, lasciando libero lo spazio in basso a destra per il QR:
{{NOME}}·{{COGNOME}}{{DATA_NASCITA}}·{{CODICE_FISCALE}}{{TIPO}}(Socio Ordinario / Volontario){{ID_PRATICA}}{{DATA_AMMISSIONE}}·{{DATA_SCADENZA}}
-
Cartelle per ricevute e liberatorie (opzionali)
Se incassi le quote, servono una cartella per le ricevute PDF e un template del documento; se raccogli liberatorie per foto e video, una cartella per i PDF firmati e il relativo template. Gli ID si inseriscono nel Configuratore.
-
Cartella guide PDF (opzionale)
Se vuoi allegare guide ai nuovi membri, crea una cartella Drive con i PDF e copiane l'URL: sarà
DRIVE_GUIDE_URL.
Fase D · Genera i file
Genera i file
Invece di compilare i file a mano, usa il Configuratore: inserisci i dati raccolti finora e scarichi tutti i file già personalizzati. I dati restano nel tuo browser.
0_Secrets.gs e 1_CONFIG_V8.gs — insieme alle pagine delle web app, al manifest, alla licenza e al template della tessera. Nessun dato viene inviato ai nostri server.
Fase E · Apps Script
Apps Script
Porta il codice dentro al foglio. È fondamentale aprire l'editor dal foglio, non dal sito di Apps Script.
-
Apri l'editor dal foglio
Nel foglio:
✓ Fatto quando il progetto Apps Script risulta associato al tuo foglio.Estensioni › Apps Script. Apri sempre da qui (non da script.google.com): solo così i triggeronChange/onEditriconoscono il foglio. -
Crea i file del progetto principale
Per ciascun modulo usa
+ › Scripte incollane il contenuto mantenendo lo stesso nome. Nel progetto principale vanno i moduli da 0 a 8 e da 10 a 22.- Il modulo
9_MembroPortal.gsè una web app separata: lo userai nella fase Componenti opzionali, non qui. - Mantieni l'ordine numerico: aiuta a ritrovarli.
- Il modulo
-
Crea le quattro pagine HTML
Con
+ › HTMLaggiungi le pagine delle web app, mantenendo esattamente questi nomi:ModuloIscrizioneHTML— il modulo di iscrizione (Fase 1)ModuloPagamentoHTML— il modulo di pagamento (Fase 2)PresidenzaAdminHTML— l'interfaccia del pannelloLiberatoriaHTML— la pagina della liberatoria immagini
-
Imposta fuso orario
In
Impostazioni progettoimposta il fuso suEurope/Rome, così date e trigger giornalieri scattano all'ora corretta. -
Manifest (appsscript.json)
In
Impostazioni progettoattiva Mostra il file manifest "appsscript.json", poi sostituisci il contenuto con il fileappsscript.jsonincluso nel pacchetto.- Pre-dichiara i servizi avanzati (Admin SDK, People, Calendar): così nella fase successiva non devi aggiungerli a mano.
- Imposta la web app come endpoint pubblico.
Fase F · Servizi, web app e pagamenti
Servizi, web app e pagamenti
Configura le integrazioni esterne e pubblica le web app. Se hai sostituito il manifest con quello del pacchetto, i tre servizi avanzati sono già dichiarati: in tal caso salta i primi tre punti.
-
Admin SDK Directory API
Se non usi il manifest del pacchetto: nell'editor
Servizi (+) › Admin SDK API. Necessario per creare le utenze, gestire i gruppi e verificare chi accede al pannello della Presidenza. -
People API
Aggiungi
People API(Google Contacts): aggiorna il telefono nella Directory e fornisce il link del profilo per il QR della tessera. -
Calendar API
Aggiungi
Calendar: serve per i link Meet nelle notifiche e, se lo attivi, per la storicizzazione dei calendari nel registro degli eventi. -
Pubblica la web app (il router unico)
Esegui
Deploy › New deployment › Web appcon Esegui come: me e Accesso: chiunque. L'URL/execche ottieni è l'indirizzo di tutte le pagine del sistema: modulo di iscrizione, modulo di pagamento, pannello della Presidenza e liberatoria si distinguono per parametro.- Il modulo di iscrizione è l'URL nudo: è il link da pubblicare sul sito dell'ente.
- Il pannello è lo stesso URL con
?pagina=presidenza: è protetto dall'appartenenza al gruppo, non dall'indirizzo.
/execcompare il modulo di iscrizione. -
Il tramite per i pagamenti Stripe (obbligatorio se usi Stripe)
Qui c'è un ostacolo della piattaforma che va aggirato, non una preferenza: le web app di Apps Script rispondono a ogni richiesta POST con un redirect 302 prima di restituire il contenuto vero, e Stripe non segue i redirect — segna la consegna come fallita e il foglio non si aggiorna mai. Per questo l'endpoint da registrare su Stripe non è l'URL di Apps Script, ma un piccolo Cloudflare Worker incluso nel progetto, che sta in mezzo.
- Il Worker verifica la firma crittografica di Stripe con la Web Crypto API, rifiuta le richieste con un timestamp più vecchio di cinque minuti e, se la firma non torna, non inoltra nulla.
- Poi richiama la web app seguendo lui il redirect e restituisce a Stripe una risposta diretta.
- Configura
APPS_SCRIPT_URLcon il tuo URL/exec, imposta il segreto del webhook come secret del Worker, poiwrangler deploy. - In Stripe registra come endpoint l'URL del Worker. Rimane stabile: se in futuro cambia l'URL di Apps Script, aggiorni il Worker e non tocchi Stripe.
-
Gli eventi Stripe da ascoltare
Sull'endpoint del Worker sottoscrivi sei eventi. Non serve invece creare a mano un prodotto o un prezzo ricorrente: l'abbonamento viene creato al volo dal sistema al primo pagamento, a partire dall'importo della quota che hai indicato nel Configuratore.
checkout.session.completed— collega cliente e abbonamento alla praticainvoice.payment_succeeded— quota regolare, ricevuta, e al primo pagamento avvia l'onboardinginvoice.paid— per gli importi a zero, che non generano l'evento precedenteinvoice.payment_failed— avvisa il socio e sblocca un nuovo tentativocustomer.subscription.deleted— avvia l'annullamentocustomer.subscription.updated— annulla solo se è stata chiesta la disdetta a fine periodo
-
App Microsoft 365 (opzionale)
Registra un'applicazione nel tenant e assegna i permessi Microsoft Graph con consenso amministratore.
- Permessi tipici:
User.ReadWrite.All,Directory.ReadWrite.All,Organization.Read.All. - Crea un client secret e annota Tenant ID, Client ID, Secret e License SKU.
- Un errore su Microsoft 365 non blocca il resto dell'onboarding: viene annotato sulla pratica e il socio nasce lo stesso.
- Permessi tipici:
-
Service Account firma Gmail (opzionale)
In Google Cloud Console crea un Service Account con chiave JSON, poi in
Admin Console › Sicurezza › Controllo API › Delega a livello di dominioautorizza il suo Client ID con lo scopehttps://www.googleapis.com/auth/gmail.settings.basic.
Fase G · Inizializzazione
Inizializzazione
Prepara il foglio e attiva le automazioni. Si esegue una volta sola, dall'editor di Apps Script.
-
Inizializza le colonne
Seleziona ed esegui
✓ Fatto quando il foglio mostra le colonne gestionali e la scheda Storico.inizializzaColonneAggiuntive()una sola volta: crea le colonne gestionali fino allaBVe la schedaStorico. Il foglio arriva così a circa settanta colonne. -
Concedi le autorizzazioni
Al primo avvio Google chiede l'accesso a Gmail, Sheets, Drive, Slides e Admin SDK: accetta tutto con l'account Super Admin (schermata
Avanzate › Vai al progetto). -
Installa i trigger
Esegui
installaTriggers()una volta: crea il triggeronChangesulle nuove righe, i treonEditsulle colonne sorvegliate e i giornalieri.- I tre trigger dei lavori differiti non compaiono qui: il sistema li crea e li distrugge da sé quando servono.
- Se rilanci la funzione, i lavori ancora in coda vengono protetti e non cancellati.
Fase H · Libri sociali e registri
Libri sociali e registri
Questa fase non è facoltativa per un ente del Terzo Settore: il libro degli associati e il registro dei volontari sono obbligatori per legge, e il sistema li genera dal foglio delle domande.
-
Censisci la polizza dei volontari
Compila
CONFIG.ASSICURAZIONE_VOLONTARIcon gli estremi della copertura assicurativa dei volontari. Se la lasci vuota il registro si genera comunque, ma riportaDA DOCUMENTAREal posto degli estremi.- Se iscrivi volontari, l'assicurazione va stipulata prima di aprire le iscrizioni.
-
Genera i libri sociali
Esegui
✓ Fatto quando le due schede compaiono nel foglio e sono popolate.generaRegistroVolontari()egeneraLibroAssociati(). Il libro degli associati non coincide con il foglio delle domande: contiene solo chi è effettivamente diventato membro, compresi i cessati, in ordine di ammissione e con numero d'iscrizione. -
Attiva il diario di bordo (consigliato)
Esegui
✓ Fatto quando lo spreadsheet di log esiste e riceve le prime righe.inizializzaTracciamentoLive(): crea uno spreadsheet separato dove il sistema annota ciò che fa, riga per riga, mascherando da sé chiavi e segreti. È separato di proposito — scrivere i log nel foglio operativo farebbe scattare i trigger.
Fase I · Componenti opzionali
Componenti opzionali
Attiva ciò che serve al tuo ente. Ognuno di questi componenti si può aggiungere anche in un secondo momento.
-
Portale Membri
Crea un progetto Apps Script separato, incolla
9_MembroPortal.gs, poiDeploy › New deployment › Web app(Esegui come: me; Accesso: chiunque con account Google). Copia l'URL ottenuto inMEMBER_PORTAL_URLe rigenera il pacchetto.- Il portale è autonomo: tieni allineati a mano
SHEET_IDeLOGO_URLcon il progetto principale.
- Il portale è autonomo: tieni allineati a mano
-
Liberatorie per foto e video
Se pubblichi immagini dei soci, attiva la pagina della liberatoria: è raggiungibile sullo stesso URL
/execcon il parametro dedicato e richiede il template e la cartella preparati nella Fase C.- Il consenso si chiede canale per canale, è facoltativo e si può revocare in qualsiasi momento.
-
Registro degli eventi
Se vuoi conservare la storia dei calendari dell'ente, crea lo spreadsheet del registro e indica i calendari da seguire. Il registro è in sola aggiunta e ogni riga porta l'impronta della precedente.
-
Sincronizzazione con l'app mobile
Se alimenti un'app mobile, configura l'indirizzo e il segreto della funzione di sincronizzazione. Per i soci ammessi prima di attivarla esiste una funzione di allineamento da eseguire una volta sola.
- La sincronizzazione non può mai far fallire un'ammissione o un pagamento: se non risponde, viene saltata.
-
Firma Gmail
Con il Service Account della Fase F configurato, la firma istituzionale viene impostata automaticamente durante l'onboarding. La verifichi nel collaudo.
Fase J · Collaudo
Collaudo
Prova l'intero flusso end-to-end con dati di test prima di aprire le iscrizioni vere.
-
Invio di prova
Apri l'URL
✓ Fatto quando compare una nuova riga sul foglio, arriva l'email di conferma con l'ID Pratica e la notifica allo staff./exece compila il modulo come farebbe un aspirante socio. -
Tessera di prova
Dall'editor esegui
✓ Fatto quando ricevi un PDF con i dati al posto giusto e il QR leggibile.testGeneraTessera(): genera la tessera per l'ultima riga ammessa e la invia all'amministratore. Serve a verificare template, segnaposto e QR prima di andare in produzione. -
Ammissione dal pannello
Apri
/exec?pagina=presidenza, trova la pratica di prova e usa Ammetti: il pannello chiede il gruppo e agisce subito, senza attese.- Se preferisci provare la strada del foglio, imposta lo stato a mano e attendi cinque minuti: l'attesa serve a darti il tempo di compilare data, gruppo e stato del pagamento.
-
Pagamento di prova
Se usi Stripe, esegui un pagamento in modalità test e segui il giro completo: Stripe, Worker, foglio.
- Nella dashboard Stripe l'evento deve risultare consegnato, non fallito.
- Sul foglio devono aggiornarsi lo stato del pagamento e la scadenza della quota.
- Al socio deve arrivare la ricevuta in PDF.
-
Verifica account e libri
Controlla la creazione dell'utente in Admin Console (e in Microsoft 365 se attivo), poi rigenera i libri sociali e verifica che il socio di prova compaia nel libro degli associati con il suo numero d'iscrizione.
Pronto a generare i tuoi file?
Apri il Configuratore per creare il pacchetto su misura, oppure approfondisci l'architettura dei moduli.