# Workflow

> Automazioni per attivatore. Quando succede qualcosa (qualcuno entra, compra, completa un corso o passa N giorni senza accedere), ogni persona segue un percorso di attese, condizioni, e-mail della libreria, messaggi, commenti, reazioni, tag, gruppi e post su Slack, con i suoi tempi. Editor su canvas, variabili tra i blocchi, fine con successo o errore, tasso di successo, invio rimandato dalla quota, simulazione, cronologia, limiti, chi firma e i 9 modelli. Anche Chiama webhook con Variabili e chiavi, le azioni della piattaforma, Chiama workflow e con quale ruolo agiscono i passi. Anche i blocchi IA Claude e ChatGPT, con la chiave API della community stessa, i Limiti IA e le azioni di post, certificato, riconoscimento, chat, 1:1 e piano di sviluppo.

Un **workflow** è un'automazione per attivatore: quando succede qualcosa a una persona (entra nella community, compra, completa un corso, passa 30 giorni senza accedere), entra in un percorso che disegni tu, con attese, condizioni e azioni, e lo segue con i suoi tempi. È la serie di benvenuto, il promemoria per chi è sparito, i complimenti per il corso, senza che nessuno del team prema niente.

Memberfy aiuta l'HR a mantenere tutti coinvolti: gli stessi workflow ricordano una valutazione in sospeso, un 1:1 non registrato o un obiettivo senza check-in.

**Dove si trova:** **Amministrazione › Workflow**. Il proprietario e l'amministratore creano, modificano, attivano e mettono in pausa; il moderatore e la finanza vedono, simulano e seguono la cronologia; il membro non vede l'area.

## Come funziona

### L'attivatore

Ogni workflow inizia da **un solo attivatore**, un blocco del disegno trascinato dalla categoria **Attivatori**. Ogni famiglia ha il suo blocco (**Membri**, **Acquisti**, **Abbonamenti**, **Eventi**, **Corsi**, **Certificati**, **Badge**, **Livelli e punti**, **Moduli**, **Sondaggi**, **Call for papers**, **Post e commenti**, **Votazioni**, **Download**, **Spazi**, **Messaggi**, quelli dell'HR, **Tempo**, **Manuale** e **Webhook**), in ordine dai più usati, e l'evento si sceglie nel pannello del blocco, in **Si attiva quando**; cambiare l'evento non cambia il blocco. Cercare un evento (*"abbonamento annullato"*) trova il suo blocco e crea già il blocco su quell'evento. Nel disegno, il blocco mostra la famiglia sopra e l'evento sotto. Con un attivatore nel disegno, la categoria **Attivatori** sparisce dal selettore; per un altro tipo di attivatore, cambia il blocco.

**Quando succede qualcosa**, per esempio:

| Ambito | Attivatori |
|---|---|
| Membri | **Nuovo membro della community** (registrazione, invito accettato, acquisto, team, azienda o importazione, con l'**Origine**; non è il login), qualcuno esce, cambia ruolo, riceve o perde un tag, entra o esce da un gruppo, cambia un campo del profilo; **Qualcuno torna dopo N giorni senza accedere** (con **Assente per almeno** 7 giorni o più; vale l'accesso dall'app o dall'assistente) |
| Acquisti e abbonamenti | Un acquisto viene completato (con il filtro **Solo il primo acquisto**: il primo acquisto della persona, di qualsiasi prodotto, gratuiti inclusi) o rimborsato; qualcuno inizia un acquisto, abbandona il carrello, o un carrello viene recuperato; un abbonamento inizia, viene rinnovato, cambia piano, è in ritardo, ha la prova gratuita che sta finendo, viene annullato o termina |
| Contenuti e spazi | Qualcuno pubblica, commenta o reagisce; visita uno spazio per la prima volta; riceve l'accesso a uno spazio; il ciclo di vita di post, spazi e download (vedi [Eventi del ciclo di vita](#eventi-del-ciclo-di-vita)) |
| Corsi ed eventi | Iscrizione, lezione o corso completato, quiz superato o non superato, certificato emesso; iscrizione, biglietto ricevuto, iscrizione annullata, posto dalla lista d'attesa, check-in fatto o annullato |
| Livelli e punti | **È salito di livello**, **È sceso di livello** (con il **Motivo**) e **Ha raggiunto N punti**. Vedi [Livelli e punti](#livelli-e-punti) |
| Altri moduli | Modulo, sondaggio e proposta con risposta o decisi, argomento di votazione, file scaricato, entrata e uscita nel registro presenze, prenotazioni, riconoscimento e feedback ricevuti, e il [DM ricevuto](#dm-ricevuto). L'evento di riconoscimento ricevuto porta il tipo del riconoscimento (`type`: `APPRECIATION`, `WELCOME`…). |
| Persone (HR) | Si apre un ciclo di valutazione, qualcuno invia una valutazione, viene pubblicato un risultato; viene registrato un 1:1; un risultato chiave riceve un check-in o è a rischio; un piano di sviluppo viene approvato; si apre un round di sondaggio |

L'**Origine** di **Nuovo membro della community** include **Da approvazione**, per chi è entrato con la [registrazione con approvazione](/membros/cadastro-e-entrada#registrazione-con-approvazione) (`member.joined` con `source: approval`). È la "registrazione approvata": un workflow di benvenuto con questo filtro parte quando il team approva la richiesta, non quando la persona la invia. La richiesta in sé, e il rifiuto, non fanno partire né workflow né webhook.

Ogni attivatore accetta il suo filtro: il prodotto, il corso, l'evento, lo spazio, il gruppo, il tag, il campo, il ciclo o il sondaggio (vuoto: qualsiasi). Il pannello dell'attivatore (**Ingresso nel workflow**) riunisce il filtro, [quante volte la persona entra](#quante-volte-la-persona-entra), il **Limite di frequenza** e la descrizione.

**Tempo (ogni giorno, per data)**: un passaggio al giorno, dalle 9:00 nel fuso orario della community, per chi soddisfa la regola quel giorno: *Qualcuno non accede da N giorni*, *Ogni giorno, per tutti*, *Valutazione in sospeso da N giorni*, *Valutazione in scadenza tra N giorni*, *1:1 tra N giorni*, *1:1 non registrato da N giorni*, *Accordo di 1:1 in ritardo da N giorni*, *Risultato chiave senza check-in da N giorni*, *Il ciclo di obiettivi termina tra N giorni*, *Azione del piano di sviluppo in ritardo da N giorni* e *Sondaggio senza risposta da N giorni*. Ogni persona entra una volta per lo stesso fatto. Nell'attivatore *Qualcuno non accede da N giorni*, alla prima attivazione del workflow, **Includi chi non entra già da più di N giorni** fa entrare anche chi ha già superato quella soglia: la finestra mostra quante persone sono e chiede la conferma, ed entrano una volta ciascuna, al ritmo del limite giornaliero.

**Manuale (persone scelte):** il team avvia il workflow per chi sceglie. Con il workflow attivo, **Esegui ora** chiede le **Persone** o un **Pubblico** (come quello delle campagne), mostra prima quante entrano, chi resta fuori (disiscritte, con e-mail non valida o che hanno segnalato) e in quanti giorni partono le e-mail con il limite giornaliero, e chiede la conferma (*"Capisco che N persone riceveranno ora i passi di questo workflow"*). Confermare due volte non avvia due volte. Fino a 20 mila persone alla volta, a lotti.

**Programmato:** ogni giorno, ogni settimana (nei **Giorni della settimana**) o ogni mese (nel **Giorno del mese**, da 1 a 28), all'**Orario** scelto nel fuso orario della community, **Per chi** decidi tu. L'attivazione chiede la stessa conferma degli attivatori per data, e un giorno con l'invio della community [sospeso](/notificacoes/reputacao-de-envio) viene saltato.

**Webhook ricevuto:** un altro sistema chiama l'indirizzo dell'attivatore e avvia il workflow per la persona indicata nel corpo della chiamata. Vedi [Webhook in entrata](/integracoes/webhook-de-entrada).

**Chiamato da un altro workflow:** il workflow parte quando un altro lo chiama con il passo **Chiama workflow**, per la stessa persona. Vedi [Azioni della piattaforma e altri workflow](#azioni-della-piattaforma-e-altri-workflow).

### I passi

| Passo | Cosa fa |
|---|---|
| **Attendi** | Da 5 minuti a 365 giorni |
| **Condizione (se / altrimenti)** | Divide il percorso in **Sì** e **No** secondo regole, lette al momento del passo: tag (più tag insieme, con *ha almeno uno dei tag*, *ha tutti i tag* o *non ha nessuno dei tag*), gruppo, campo del profilo, ultimo accesso, corso completato o in corso, prodotto acquistato, carrello abbandonato, accesso e visita a uno spazio, iscrizione e presenza a un evento, livello e punti (gruppo **Coinvolgimento**) e la regola [Variabile](#condizione-variabile). **Tutte le regole valgono** o **Almeno una regola vale**. Le regole compaiono come frasi, per esempio *"Se la persona ha il tag VIP e non entra da più di 30 giorni"* |
| **Invia e-mail** | Un'e-mail della [libreria](/notificacoes/campanhas-de-email#e-mail-e-invii); ogni persona riceve la versione nella sua lingua, altrimenti la principale |
| **Invia messaggio (DM)** | Un messaggio in [chat](/membros/mensagens) a nome di qualcuno del team (vedi [A nome di chi](#a-nome-di-chi)) |
| **Commenta l'elemento** e **Reagisci all'elemento** | A nome di qualcuno del team, sull'elemento dell'attivatore: il post, il commento, la reazione o l'iscrizione della persona |
| **Aggiungi o togli tag** e **Aggiungi a un gruppo** | Organizza la persona |
| **Pubblica su Slack** | Un messaggio nel canale dell'installazione [Slack](/integracoes/slack) della community |
| **Invia SMS** e **Invia WhatsApp** | Un avviso sul cellulare della persona, nella categoria **Messaggi**: negli SMS, un testo fino a 300 caratteri; su WhatsApp, un modello approvato con i campi compilati (vedi [Invia SMS e Invia WhatsApp](#invia-sms-e-invia-whatsapp)) |
| **Chiama webhook** | Una chiamata HTTPS a un altro sistema (un CRM, un foglio di calcolo, n8n), con le chiavi salvate in **Variabili e chiavi** (vedi [Chiama webhook](#chiama-webhook)) |
| **Claude** e **ChatGPT** | Chiedono all'IA un testo o un JSON, con la chiave API della community stessa, nella categoria **IA** (vedi [Blocchi IA](#blocchi-ia-claude-e-chatgpt)) |
| **Azioni della piattaforma** | Cambiare ruolo, regolare i punti, assegnare o rimuovere un badge, pubblicare un post, emettere un certificato, riconoscere, bloccare nella chat, pianificare un 1:1, aggiungere un'azione al PDI, iscrivere a un evento o a un corso, dare un accesso omaggio, inviare un avviso nell'app; ogni azione è un blocco, in **Persone**, **Contenuti** o **Messaggi** (vedi [Azioni della piattaforma e altri workflow](#azioni-della-piattaforma-e-altri-workflow)) |
| **Chiama workflow** | Esegue un altro workflow per la stessa persona e aspetta che finisca, nella categoria **Flusso** |
| **Finché (ripeti)** | Ripete un tratto finché le regole valgono, fino a un massimo da 1 a 10 volte (predefinito 3). Ogni percorso del tratto richiede un'attesa di almeno 1 giorno |
| **Registra log** | Annota una riga nell'esecuzione (vedi [Registra log](#registra-log)) |
| **Fine: successo** e **Fine: errore** | Dove finisce ogni percorso (vedi [Come finisce un workflow](#come-finisce-un-workflow)) |

Ogni blocco ha un **Nome del blocco**, per riconoscerlo nel disegno e trovarne le variabili in **Inserisci variabile**. I testi accettano le [variabili](#variabili) dell'attivatore e dei passi precedenti. Ciò che fa un workflow non avvia mai un altro workflow. L'unico modo perché un workflow ne avvii un altro è il passo **Chiama workflow**.

### L'editor

Il **Disegno** occupa tutta l'altezza dello schermo:

- **La barra di icone** a sinistra apre i blocchi per categoria (**Attivatori**, **Flusso**, **Messaggi**, **Persone**, **Contenuti**, **Integrazioni**, **IA** e **Fine**), con la ricerca (**Cerca blocco…**, scorciatoia `/`); ogni categoria ha il suo colore. Le categorie si aprono e si chiudono come una fisarmonica (clic, `Invio` o barra spaziatrice), mostrano quanti blocchi hanno quando sono chiuse, e il browser ricorda quali hai lasciato chiuse; una ricerca apre quelle che hanno risultati. Trascina un blocco nel disegno o fai clic per aggiungerlo dopo il blocco selezionato.
- **Barre laterali trascinabili:** trascina il bordo della barra dei blocchi o del pannello del blocco per cambiare la larghezza, e un doppio clic torna al valore predefinito. La larghezza resta salvata nel browser.
- **Il "+" sui due lati di ogni blocco** è il punto di collegamento. **Un clic** apre il selettore di blocchi (dopo l'uscita, o prima dell'entrata); **trascinare** tira un filo; **rilasciare** un blocco del disegno, un blocco della barra o la punta di un filo su un **+** collega. Il **+** in mezzo a un collegamento inserisce un passo in mezzo.
- **Un collegamento rifiutato dice perché**, in un avviso nel disegno: *"L'attivatore non riceve collegamenti: è sempre l'inizio."*, *"Un blocco non può portare a sé stesso."* e *"Si creerebbe un ciclo. Per ripetere dei passi, usa il blocco "Finché (ripeti)"."*
- **Un clic su un blocco** apre il suo pannello, con il **Nome del blocco**, i campi e le scelte reali della community (e-mail, tag, gruppi, corsi, prodotti, spazi ed eventi, con ricerca). Un passo fuori da qualsiasi percorso viene segnato come **Isolato**, e un passo con errore, in rosso.
- **Menu contestuale** (tasto destro): **Apri**, **Duplica**, **Elimina**, **Aggiungi blocco dopo**, **Scollega**, **Incolla**.
- **Barra degli strumenti e minimappa:** **Ingrandisci**, **Riduci**, **Vedi tutto**, **Riordina**, **Annulla**, **Ripeti** e una minimappa dell'intero disegno.
- **Scorciatoie da tastiera:** eliminare la selezione, annullare e ripetere, copiare, incollare e duplicare blocchi, selezionare tutto, `Esc` per chiudere il pannello, salvare, `Shift` + clic per selezionare più elementi, trascinare sullo sfondo per selezionare per area e `Ctrl/⌘` + scorrere per lo zoom. **Scorciatoie da tastiera** mostra l'elenco.

Salvare un workflow attivo crea una nuova versione: vale per chi entra da ora in poi, e chi è già a metà finisce nella versione in cui ha iniziato.

### Simulare, provare e stimare

- **Simula con una persona** percorre il disegno con i dati attuali di quella persona (anche ciò che non è ancora salvato) ed evidenzia il percorso: *Seguirebbe il "sì"*, *Attenderebbe 3 giorni*, *Invierebbe "…"*. Non viene inviato nulla.
- **Inviami una prova**, in un passo e-mail, invia l'e-mail solo a chi ha effettuato l'accesso.
- **Simula e inviami le e-mail** fa la stessa simulazione e invia le e-mail che la persona riceverebbe, con lo stesso testo e le stesse variabili, **solo a te**, con *[Test]* nell'oggetto. Non contano come invio (né nei limiti, né nella reputazione di invio, né nella cronologia) e non portano i link di disiscrizione della persona. Fino a 10 e-mail per simulazione (su un percorso con di più, partono le prime 10) e 10 simulazioni con invio all'ora. Il pulsante compare quando il disegno ha un passo **Invia e-mail**, per chi può simulare, moderatore e finanza compresi.
- **All'attivazione**, la finestra mostra quante persone hanno attivato l'attivatore nell'ultimo giorno, in 7 e in 30 giorni, per dare un'idea del volume; con un attivatore per data, quante entrerebbero oggi. Entrano solo i prossimi eventi: chi è passato dall'attivatore prima non entra.

La simulazione mostra il testo finale di ogni passo, con le variabili compilate dall'ultima volta in cui l'attivatore è avvenuto per quella persona negli ultimi 30 giorni (*"Testi compilati con l'occorrenza del 20/10 di questa persona."*), o con i dati di esempio, e dice come finisce il percorso: *Finirebbe con successo* o *Finirebbe in errore*.

In un blocco IA, la simulazione mostra il prompt compilato e *"Chiederebbe al modello … (la simulazione non chiama l'IA)"*: non consuma token.

### Cronologia

La scheda **Cronologia** ha l'elenco delle esecuzioni a sinistra e il dettaglio di quella scelta a destra (*"Scegli un’esecuzione a sinistra per vederne i passi."*). Sopra l'elenco, la barra dei filtri: la ricerca per persona (per nome o e-mail), il pulsante **Periodo** (**7 giorni**, **30 giorni** o **Tutto**) e il risultato a pillole (**Tutte**, **Successo**, **Errore**…), su una sola riga. I filtri restano nell'indirizzo della pagina.

Il dettaglio mostra l'**Inizio**, la **Fine** e la **Durata**, i **Dati dell’attivatore** e, per ogni passo, gli **Input** e gli **Output** di quando è stato eseguito: il testo inviato nel DM, nel commento o su Slack; l'oggetto e la consegna dell'e-mail; in una condizione, cosa aveva la persona (*"Ha: VIP"*, *"Ultimo accesso: …"*); in una chiamata webhook, lo stato, la durata, la dimensione, i tentativi, le chiavi usate (solo il nome) e da dove è partita la chiamata (**IP fisso** o **IP variabile**). Ogni esecuzione mostra il disegno della versione con cui è stata eseguita, e un passo uscito dal disegno compare come *"Passo non più nel disegno"*. **Copia ID** copia il codice dell'esecuzione, **Vedi nel disegno** mostra dove si trova la persona, e **Ferma esecuzione** (o **Termina esecuzione**) toglie la persona dal workflow. Nel profilo di ogni membro, **Automazioni** elenca i workflow per cui è passata.

In un passo IA, il dettaglio mostra il **Modello**, i **Token** (in entrata e in uscita) e la durata; mai la chiave, il prompt né la risposta.

Ogni esecuzione compare come **Successo**, **Errore**, **Annullata**, **Saltata** o **In corso**, con il blocco di fine e il motivo, e il filtro **Risultato** le separa. I passi possono restare come **Errore** e **In attesa di quota** (*"In attesa di quota: rimandato fino al 27/10, 9:00 per limite giornaliero di invii della community"*). La scheda **Come finiscono le esecuzioni** sta in alto: vedi [Tasso di successo e avviso di errori](#tasso-di-successo-e-avviso-di-errori).

**Elimina esecuzione e Svuota storico.** Il proprietario e l'amministratore tolgono le esecuzioni terminate dalla cronologia: **Elimina esecuzione**, nel menu **Altre azioni** dell'esecuzione (disattivato mentre è in corso: *"Prima ferma l’esecuzione."*), oppure **Svuota storico**, con **Tutte le esecuzioni terminate** o **Quelle iniziate prima di una data**. La finestra mostra prima quante ne escono e chiede la conferma; quelle in corso restano. Escono dall'elenco, dai numeri e dal tasso di successo, ma continuano a contare per [quante volte la persona entra](#quante-volte-la-persona-entra) (chi è già passato da un workflow **Una sola volta** non rientra) e per i limiti. Resta la traccia nei [Log](/membros/registros-de-atividades). Con l'assistente: `delete_workflow_run` e `clear_workflow_runs`.

## L'elenco dei workflow

Sopra l'elenco, il pulsante **Periodo** (**7 giorni**, **30 giorni** o **Sempre**) e lo stato a pillole: **Tutti**, **Attivo**, **In pausa** e **Bozza**. Ogni riga mostra lo stato e l'attivatore del workflow e i numeri del periodo scelto:

![Amministrazione › Workflow](/screens/workflows.png "Il pulsante Periodo, lo stato a pillole e ogni workflow con i numeri del periodo.")

| Numero | Cosa conta |
|---|---|
| **Entrati** | Esecuzioni iniziate nel periodo |
| **In corso** | Persone che sono nel percorso adesso (contano sempre, qualunque sia il periodo) |
| **Terminati** | Esecuzioni arrivate alla fine |
| **Errori** | Esecuzioni finite in errore |
| **Successo** | Successo ÷ (successo + errore), in percentuale, con il colore della fascia; accanto, la data dell'ultima esecuzione |

Le azioni stanno nella riga stessa (icone sul computer, un foglio di opzioni sul cellulare):

- **Attiva** (o **Riprendi**, in un workflow in pausa): chiede la conferma del consenso quando l'attivatore è per data o programmato; se manca qualcosa nel disegno, l'elenco dice cosa e apre il workflow per risolvere.
- **Metti in pausa**: nessuno di nuovo entra e ogni persona **si ferma** al passo in cui è, anche in un'attesa; **Riprendi** continua da dove si era fermata.
- **Ferma**: nessuno di nuovo entra e le esecuzioni in corso vengono **annullate** (*"Nessuno di nuovo entra e 12 esecuzioni in corso verranno annullate."*). Il workflow resta in pausa e si può riattivare; chi è stato annullato non torna.
- **Esecuzioni**: apre la cronologia del workflow, con ogni persona, lo stato e dove si trova o si è fermata.

**Mettere in pausa o fermare?** Metti in pausa per correggere qualcosa e continuare con le stesse persone; ferma quando ciò che è nel percorso non deve più partire.

**Workflow attivi per piano.** Sopra l'elenco, *"3 di 10 workflow attivi"* (o *"3 workflow attivi"*, quando il piano non ha limite). Il piano definisce quanti workflow restano attivi contemporaneamente: **3** nello Starter, **10** nel Growth, **30** nel Business e **senza limite** nello Scale (vedi [Piano ed estensioni](/configuracoes/plano#workflow-attivi)). Con il limite raggiunto, attivarne o riprenderne un altro mostra *"Il tuo piano consente 10 workflow attivi contemporaneamente, e 10 sono già attivi. Metti in pausa o ferma un altro, oppure cambia piano."*, con **Vedi i piani**. Mettere in pausa o fermarne uno libera il posto. Il SuperAdmin può concedere un'eccezione a una community, e il nuovo limite vale subito.

## Quante volte la persona entra

Il campo **Quante volte la persona entra** ha **Una sola volta**, **Di nuovo dopo qualche giorno** e **Ogni volta che succede l'evento**, e compare solo quando l'attivatore può succedere di nuovo per la stessa persona. Ogni attivatore ha la sua natura:

| L'attivatore avviene… | Esempi | Il campo |
|---|---|---|
| **Una volta per ingresso nella community** | *Nuovo membro della community*; *Un acquisto viene completato* con **Solo il primo acquisto** | Sparisce. La schermata dice *"Questo attivatore avviene una volta per ingresso nella community. Chi esce e rientra entra di nuovo."* (o *"Solo il primo acquisto: questo attivatore avviene una volta per persona."*) |
| **Una volta per persona ed elemento** | Iscrizione e completamento di un corso, lezione completata, quiz superato, certificato emesso, prima visita e accesso a uno spazio, sondaggio con risposta, risultato di valutazione, piano di sviluppo approvato, elemento pubblicato o eliminato | Sparisce quando il filtro sceglie **un** elemento (un corso, uno spazio, un sondaggio, un ciclo): *"Questo attivatore avviene una volta per persona per l'elemento scelto."* Con **qualsiasi** elemento, compare |
| **Può ripetersi** | Acquisto, abbonamento, iscrizione e check-in a un evento, commento, reazione, post, tag, gruppo, campo del profilo, carrello, DM ricevuto, *Qualcuno torna dopo N giorni senza accedere* | Compare |
| **Per tempo o esecuzione** | Gli attivatori per data, **Programmato**, **Manuale** e **Webhook ricevuto** | Compare |

Quando il campo sparisce, vale **Una sola volta** all'interno dello stesso ingresso nella community: chi esce e rientra nella community entra di nuovo.

**Mai due esecuzioni insieme** continua a valere per ogni attivatore: un evento che arriva con la persona a metà di un'esecuzione non ne apre un'altra e compare nella cronologia come **Saltata**, con il motivo *"era già in corso"*.

## Come finisce un workflow

Ogni workflow ha **un'entrata e una fine esplicita**, così sai se ogni esecuzione è andata bene e cosa fare quando no.

- **Un solo attivatore.** Il disegno accetta un attivatore; l'API rifiuta il secondo.
- **Fine: successo** e **Fine: errore**, nella categoria **Fine** dei blocchi. Ogni percorso finisce in uno dei due: un percorso senza fine viene segnato (*"Questo percorso deve finire in Fine: successo o Fine: errore."*) e il workflow non si salva. Una fine va solo dove non c'è nulla dopo. Un workflow già esistente si apre con **Fine: successo** disegnato sulle estremità libere e continua a funzionare come prima.
- **Uscite "ok" ed "errore" in ogni azione** (invia e-mail, invia messaggio, commenta, reagisci, tag, gruppo e Slack). L'uscita "ok" segue il percorso; **Collega l'uscita di errore** porta il fallimento a un altro blocco, come un DM per il team o **Fine: errore**. Senza l'uscita di errore collegata, un fallimento termina l'esecuzione in errore, con il motivo. **Attendi**, **Condizione**, **Finché** e **Registra log** non hanno uscita di errore.
- **Riepilogo e avviso:** vedi [Tasso di successo e avviso di errori](#tasso-di-successo-e-avviso-di-errori).

**Cos'è un errore.** Solo ciò che fallisce davvero al momento del passo: l'e-mail eliminata dalla libreria o che non è entrata nella coda di invio, l'elemento dell'attivatore o il gruppo che non esiste più, il messaggio che non è stato possibile creare, Slack non installato, senza il canale o non disponibile, e l'attesa della quota che ha superato il limite (vedi [Quando l'invio viene rimandato](#quando-l-invio-viene-rimandato)). Nell'e-mail conta solo il fallimento nel metterla in coda: un rimbalzo o un errore del provider dopo non cambia il percorso.

**Cosa non è un errore.** Un passo **saltato** per una regola che non cambia con il tempo (disiscrizione, rimbalzo, messaggi disattivati, blocco) e un passo **rimandato** dalla quota proseguono dall'uscita "ok". Entrambi compaiono nella cronologia, ma non contano mai come errore.

Ogni passo lascia il risultato ai successivi: `{{steps.<blocco>.result}}` (`done`, `skipped` o `failed`), `{{steps.<blocco>.reason}}` e, solo nel percorso di errore di quel passo, `{{steps.<blocco>.error}}`, il motivo del fallimento. Vedi [Variabili](#variabili).

### Tasso di successo e avviso di errori

Nella **Cronologia**, la scheda **Come finiscono le esecuzioni** mostra:

- **Successo in 7 giorni** e **Successo in 30 giorni**, in percentuale (*"18 di 20 esecuzioni"*); successo ed errore contano dal blocco di fine;
- **Passi saltati (7 giorni)**, **Log di errore (7 giorni)**, **In attesa di quota** (ora) e **Già in corso** (eventi in 30 giorni);
- **Ultimi errori**: le ultime 10 esecuzioni finite in errore, con il blocco e il motivo.

Passi saltati, rimandati e log non contano come errore. Il moderatore e la finanza vedono la scheda in sola lettura.

**Avviso di tasso di errore.** Quando più del 20% delle esecuzioni delle ultime 24 ore finisce in errore (con almeno 20 esecuzioni nel periodo), il proprietario e gli amministratori ricevono un avviso nella campanella e per e-mail (*"Il workflow "Benvenuto" ha il 35% di errori nelle ultime 24 h (7 di 20 esecuzioni). Guarda cosa è fallito."*), al massimo uno al giorno per ogni workflow.

## Variabili

Ogni attivatore consegna i dati di ciò che è successo ai blocchi successivi: il nome del corso nei complimenti, il prodotto e il valore nel grazie per l'acquisto, la data nel promemoria dell'evento. Le variabili hanno nomi in inglese, con il punto, come `{{course.name}}` e `{{purchase.product}}`, e valgono nei testi del **messaggio (DM)**, del **commento**, di **Slack**, di **Registra log** e nell'**e-mail** (oggetto e corpo).

**Inserisci variabile.** Il pulsante sta in ogni campo di testo. Il menu raggruppa le variabili per blocco che le ha generate, con il nome che hai dato al blocco e la sua icona (*"Trigger · Corsi"*, *"Persona"*, *"Community"*), nell'ordine del flusso, e mostra solo i blocchi che vengono **prima** del blocco in modifica. Ogni variabile riporta il nome leggibile, il codice e un esempio: *"Corso · `{{course.name}}` · es.: Corso di Leadership"*. La ricerca (*"Cerca variabile o blocco"*) trova per nome della variabile o del blocco. Per questo conviene dare un **Nome del blocco** a ogni passo.

**Nell'e-mail.** **Modifica e-mail**, nel passo **Invia e-mail**, apre l'e-mail della libreria con **Inserisci variabile** di quel punto del flusso.

**Cosa vede la persona.** Sotto ogni testo con variabili, l'anteprima mostra il testo compilato con dati di esempio (Maria Souza, maria@memberfy.net). La simulazione mostra i testi con i dati reali della persona (vedi [Simulare, provare e stimare](#simulare-provare-e-stimare)).

**Valore di riserva.** Per chi non ha il dato, scrivi un testo dopo la barra: `{{purchase.discount|nessuno sconto}}`. Una variabile senza valore esce vuota, o con il valore di riserva, e l'invio non fallisce.

**Le variabili:**

| Da dove | Variabili |
| Blocchi IA | `steps.<blocco>.output` (il testo o il JSON), `steps.<blocco>.output.<campo>` (ogni campo del JSON), `steps.<blocco>.tokens` e `steps.<blocco>.model` |
|---|---|
| **Persona** (ogni workflow) | `member.first_name`, `member.name`, `member.email`, `member.phone`, `member.role`, `member.language`, `member.member_since`, `member.last_seen_at`, `member.tags`, `member.groups` e `member.field.<chiave>` (i campi del profilo) |
| **Community** (ogni workflow) | `community.name`, `community.language` |
| Acquisti | `purchase.product`, `purchase.product_type`, `purchase.amount`, `purchase.discount`, `purchase.payment_method`, `purchase.installments`, `purchase.free`, `purchase.first`, `purchase.tickets`, `purchase.ticket_type`, `purchase.batch`; nel rimborso, `refund.product`, `refund.amount`, `refund.partial`; nel carrello, `cart.product` |
| Abbonamenti | `subscription.product`, `subscription.plan`, `subscription.interval`, `subscription.amount`, `subscription.period_end`, `subscription.ends_at`, `subscription.canceled_by`, `subscription.previous_plan`, `subscription.trial_ends_at` (secondo l'attivatore) |
| Eventi | `event.title`, `event.date`, `event.time`, `event.type`, `event.ticket_type`, `event.check_in_method`, `event.previous_date` (nell'evento riprogrammato) |
| Corsi | `course.name`, `course.completed_at`, `lesson.title`; `certificate.title`, `certificate.source` |
| Spazi, post e commenti | `space.name`, `target.type` (dove è stato il commento o la reazione), `target.reaction` |
| Tag, gruppi e campi | `tag.name`, `group.name`, `field.name` |
| Download | `download.title`, `download.folder` (la categoria), `download.previous_folder`, `download.file_name`, `download.file_type`, `download.size`, `download.version` |
| Moduli, sondaggi e call | `form.name`, `survey.title`, `call.name`, `proposal.status` |
| Livelli e punti | `level.name` (il nome del livello), `level.previous_name`, `level.number`, `level.direction` (**Salito** o **Sceso**), `level.cause` (**Punti** o **Attività della settimana**), `points.total`, `points.previous` |
| Prenotazioni | `booking.resource`, `booking.starts_at`, `booking.ends_at` |
| Valutazioni (HR) | `cycle.name`, `cycle.due_at` |
| Accesso | `absence.days` (giorni senza accedere), in *Qualcuno torna dopo N giorni senza accedere* e *Qualcuno non accede da N giorni* |
| Chi ha fatto l'azione | `actor.name`, negli [eventi del ciclo di vita](#eventi-del-ciclo-di-vita) |
| DM ricevuto | `dm.from.name`, `dm.from.email`, `dm.to.name`, `dm.conversation_url` e, con una regola propria, `dm.text` (vedi [DM ricevuto](#dm-ricevuto)) |
| Webhook ricevuto | `trigger.<nome>`, i valori che hai definito nell'attivatore |
| Passi precedenti | `steps.<blocco>.result`, `steps.<blocco>.skipped`, `steps.<blocco>.reason` e, nel percorso di errore, `steps.<blocco>.error` |

**I formati.** I valori in denaro escono nella valuta e nella lingua della persona (*R$ 197,00*); le date, nel fuso orario della community e nella lingua della persona. `member.language` e `community.language` escono come codice della lingua (`it-IT`).

**Regole:**

- I dati dell'attivatore vengono salvati quando la persona entra: un'attesa di 3 giorni non cambia il prodotto né il valore, anche se il prodotto viene rinominato nel frattempo.
- Una variabile che non arriva al blocco (di un passo che viene dopo, o di un altro attivatore) impedisce di salvare, e il blocco resta segnato con il suo nome.
- I valori entrano come testo: l'HTML esce con escape nell'e-mail e nel commento, senza `<>` nel DM e senza menzioni né link su Slack; nell'oggetto, senza a capo. Nessuna variabile entra nell'indirizzo di un link, e `trigger.*` non entra nell'oggetto.
- La risposta di un blocco IA e quella di un **Chiama webhook** vengono da fuori: escono con escape dove arrivano e non vanno mai nell'oggetto di un'e-mail.
- Nessuna variabile riporta ciò che un membro ha scritto (post, commento, risposta, titolo di una votazione o di un annuncio), tariffe, documenti o contenuti di valutazioni HR oltre al nome e alla scadenza del ciclo. L'e-mail e il telefono della persona possono andare nel post su Slack.
- I nomi vecchi continuano a funzionare (`{{nome}}`, `{{comunidade}}`, `{{campo_<chiave>}}`, `{{gatilho_<chiave>}}`), ma non compaiono in **Inserisci variabile**.

**Nelle campagne.** Un'e-mail della libreria che usa variabili di workflow mostra *"Usa variabili di workflow"*. In una [campagna](/notificacoes/campanhas-de-email) queste variabili escono vuote, e **Nuovo invio** avvisa: *"Questa email usa variabili di workflow (…). In una campagna escono vuote: sostituiscile con variabili della persona o della community, oppure usa valori di riserva."*

## Condizione "Variabile"

La regola **Variabile**, nel gruppo **Variabili del flusso** della **Condizione**, confronta un dato del flusso: scegli la variabile (nello stesso menu di **Inserisci variabile**) e l'operatore, che dipende dal tipo:

| Tipo | Operatori |
|---|---|
| Testo | è uguale a, non è uguale a, contiene, non contiene, inizia con, finisce con, è vuoto, non è vuoto. Non distingue maiuscole né accenti (*"perche"* corrisponde a *"Perché"*) |
| Numero e denaro | è uguale a (=), è diverso da (≠), è maggiore di (>), è maggiore o uguale a (≥), è minore di (<), è minore o uguale a (≤), è vuoto. Denaro nella valuta della community, nel suo formato |
| Data | è prima del, è dopo il, è tra, è stato più di N giorni fa, è stato meno di N giorni fa, è nei prossimi N giorni |
| Elenco (tag, gruppi, campo a scelta multipla) | contiene, non contiene, contiene uno qualsiasi di, contiene tutti di |
| Sì/no | è vero, è falso |

Esempi: *"Valore è maggiore o uguale a 100,00"*, *"Formato è uguale a In presenza"*, *"Corso contiene Avanzato"*, *"Data è nei prossimi 7 giorni"*.

Le altre regole usano gli stessi operatori: **Ha il tag** ed **È nel gruppo** con contiene, non contiene, uno qualsiasi di e tutti di (e più gruppi insieme); **Campo del profilo** con gli operatori del tipo del campo (in un campo a [scelta multipla](/membros/campos-customizados#scelta-multipla), *contiene uno qualsiasi di*, *contiene tutti di* e *non contiene*, con le opzioni; la variabile `{{member.field.<chiave>}}` porta le opzioni scelte), sempre con il valore attuale del campo. La regola viene letta al momento del passo.

## Registra log

Il blocco **Registra log** annota una riga nell'esecuzione: scegli il **Livello** (**Info**, **Avviso** o **Errore**) e scrivi il messaggio, che accetta variabili (*"{{member.first_name}} è arrivato alla fine del benvenuto"*).

- Solo testo: l'HTML esce come testo, e il messaggio viene tagliato a 1.000 caratteri dopo la compilazione.
- Fino a **20 log per esecuzione**; il 21° viene scartato (*"limite di log dell'esecuzione"*).
- L'uscita è sempre "ok". Un log di livello **Errore** non cambia il risultato dell'esecuzione né conta nell'avviso di tasso di errore; il riepilogo mostra quanti ce ne sono stati.
- Il log compare nella cronologia dell'esecuzione e in **Amministrazione › Log**, tipo **Workflow**, con filtro per workflow e per livello. Vedi [Log](/membros/registros-de-atividades#workflow).
- **Il messaggio è visibile solo al proprietario e all'amministratore**, perché può contenere qualsiasi variabile. Il moderatore e la finanza vedono nella cronologia che c'è stato un log, con *"Messaggio visibile solo a owner e admin."* al posto del testo.

## Chiama webhook

Il blocco **Chiama webhook**, nella categoria **Integrazioni**, invia una chiamata HTTPS a un altro sistema a metà del percorso: avvisare il CRM di un acquisto, scrivere una riga in un foglio di calcolo, chiamare un flusso di n8n.

- **Metodo** e **Indirizzo (URL)**: solo `https://`, porta 443 e un host fisso. Le variabili possono stare nel percorso, mai nell'host, e le chiavi della cassaforte non entrano nell'indirizzo.
- **Intestazioni** e **Corpo (JSON)**: accettano variabili e le chiavi della cassaforte (`{{env.CRM_TOKEN}}`), solo verso gli indirizzi della chiave, quando ne ha. Il corpo parte con `memberfy.memberLanguage` e `memberfy.communityLanguage` aggiunti.
- **Tempo massimo di risposta**: da 2 a 15 secondi (predefinito 10).
- **Cosa possono usare i blocchi successivi:** `{{steps.<blocco>.status}}`, `{{steps.<blocco>.duration}}` (ms), `{{steps.<blocco>.size}}` (byte) e i campi della risposta JSON, fino a 16 KB (`{{steps.<blocco>.body.<campo>}}`). I valori che arrivano da fuori non entrano mai nell'oggetto di un'e-mail.

| Risposta | Cosa succede |
|---|---|
| 2xx | Prosegue per il percorso "ok" |
| 3xx (il reindirizzamento non viene seguito), 4xx, indirizzo bloccato, risposta oltre 64 KB, corpo non valido, chiave fuori dai suoi indirizzi | Va per il percorso di errore, subito |
| 5xx, attesa oltre il tempo massimo o errore di rete | Riprova dopo 1, 5 e 15 minuti; senza successo, va per il percorso di errore |

**Limiti:** 60 chiamate al minuto e 2.000 al giorno per workflow; 300 al minuto e 20.000 al giorno nella community. Ciò che supera aspetta il proprio turno invece di fallire. Una destinazione che fallisce più volte di fila resta in attesa per qualche minuto.

### IP fissi

Nei piani **Business** e **Scale**, le chiamate partono da **IP fissi**, gli stessi delle consegne webhook (vedi [IP fissi](/api/ips-fixos)), da autorizzare nel firewall della destinazione. Il pannello del blocco mostra gli IP, con **Copia IP**, e quante chiamate del mese sono già partite da lì.

- Il limite è di **10.000 chiamate da IP fisso al mese**. Oltre, le altre partono da IP che cambiano fino al cambio del mese, e il proprietario riceve un avviso nella campanella, che apre le automazioni. Il mese è quello del calendario nel fuso della community: il conteggio riparte a mezzanotte del giorno 1 e non si accumula nel piano annuale.
- Negli altri piani, le chiamate partono da IP che cambiano.
- La cronologia mostra, per ogni chiamata, da dove è partita: **IP fisso**, **IP variabile** o *"IP variabile (limite mensile di IP fisso raggiunto)"*.

## Variabili e chiavi

**Variabili e chiavi**, in alto in **Amministrazione › Workflow**, è la cassaforte della community: i token e le chiavi che **Chiama webhook** usa nelle intestazioni e nel corpo. Solo il proprietario e l'amministratore la vedono e la modificano.

1. Prima della prima chiave, leggi l'avviso **Prima di iniziare: un avviso sui dati personali** e fai clic su **Ho letto e accetto**: i dati delle persone inviati via webhook escono da Memberfy verso il sistema che indichi, e la community è titolare di quei dati. Si accetta una volta sola, per tutta la community; dopo, la schermata mostra quando è stato accettato.
2. **Nuova chiave** apre una finestra con tre campi:
   - **Nome**: il nome con cui richiami la chiave nel workflow. Si sistema mentre scrivi (maiuscole, numeri e `_`; spazi e accenti diventano `_`), e subito sotto compare come scriverla nel blocco: *"Nel blocco "Chiama webhook", scrivi"* `{{env.CRM_TOKEN}}`.
   - **Valore**: incolla il token o la password. L'icona dell'occhio mostra o nasconde quello che hai incollato (**Mostra il valore** / **Nascondi il valore**), solo finché la finestra è aperta.
   - **Può essere inviata solo a** (facoltativo): gli indirizzi verso cui la chiave può andare, come `api.tuocrm.it` (Invio o **Aggiungi**; se incolli un URL intero, resta solo il dominio). **Vuoto, la chiave può essere usata con qualsiasi indirizzo**; con degli indirizzi, parte solo verso di essi. Per una chiave legata a un solo sistema, come il token del CRM, compilalo: è più sicuro.
3. Nel blocco, usa `{{env.CRM_TOKEN}}`.

- **Il valore non torna mai sullo schermo.** È salvato cifrato, e l'elenco mostra solo la parte finale (*"…a1b2"*), dove può andare (o *"Qualsiasi indirizzo"*) e quando è stata usata. Per cambiarlo, **Sostituisci**.
- **Elimina** cancella subito il valore; i workflow che usano la chiave passano al percorso di errore.
- La cronologia mostra il nome delle chiavi usate in una chiamata, mai il valore.

### Limiti IA

La scheda **Limiti IA**, in **Variabili e chiavi**, contiene la spesa dei [blocchi Claude e ChatGPT](#blocchi-ia-claude-e-chatgpt), che è della community. Solo il proprietario e l'amministratore la vedono e la modificano, e ogni modifica viene registrata.

**Cos'è un token.** L'IA legge e scrive il testo in token, pezzi di parola: 1.000 token sono circa 750 parole. Contano l'entrata (le istruzioni e il prompt) e l'uscita (la risposta). Niente di questo usa la quota IA di Memberfy.

| Tetto | Predefinito | Quando si supera |
|---|---|---|
| **Per chiamata** | 4.000 token | Il massimo che il modello scrive in una risposta: un blocco che chiede di più resta con questo numero |
| **Per esecuzione** | 20.000 token | Il totale di una persona che passa per il workflow. Superato, il blocco segue l'uscita di errore (*"Raggiunto il tetto di token IA per esecuzione."*) |
| **Al giorno** | 200.000 token | Il totale della community nel giorno, nel fuso orario della community. Superato, i blocchi aspettano il giorno dopo e partono quando inizia |

Per chiamata deve essere minore o uguale a per esecuzione, e per esecuzione minore o uguale al giorno. La scheda mostra quanto è stato usato oggi (*"Oggi: 12.400 di 200.000 token usati."*); **Salva limiti** salva e **Torna al predefinito** torna ai numeri della tabella.

## Blocchi IA (Claude e ChatGPT)

I blocchi **Claude** e **ChatGPT**, nella categoria **IA**, chiedono all'IA un testo o un JSON a metà percorso: scrivere un benvenuto personale, classificare un ticket di supporto, riassumere la risposta a un modulo. La chiamata usa **la chiave API della community stessa**, creata su Anthropic (Claude) o su OpenAI (ChatGPT): l'uso lo paga la community, direttamente al fornitore.

**Prima del primo blocco:**

1. In [Variabili e chiavi](#variabili-e-chiavi), accetta l'avviso sui dati personali e crea una chiave con la chiave API del fornitore. In **Può essere inviata solo a**, metti `api.anthropic.com` (Claude) o `api.openai.com` (ChatGPT). Una chiave senza indirizzo compare anche nel blocco, ma limitarla è più sicuro; una chiave con altri indirizzi, no.
2. Controlla i [Limiti IA](#limiti-ia).

**Il pannello del blocco:**

| Campo | Cos'è |
|---|---|
| **Modello** | La famiglia del modello, descritta per uso: *il più capace, per compiti difficili* (più lento e più caro), *equilibrio tra qualità, velocità e costo*, o *il più veloce ed economico, per compiti semplici*. L'elenco segue i modelli attuali di ogni fornitore |
| **Chiave API** | Solo le chiavi di Variabili e chiavi che possono andare al fornitore; **Crea una chiave in Variabili e chiavi** porta alla cassaforte. La chiave non entra mai nel prompt né nella cronologia |
| **Istruzioni di sistema** (facoltative) | Come si comporta il modello in ogni chiamata: ruolo, tono, regole |
| **Prompt** | La richiesta, con le [variabili](#variabili) (*"Scrivi un messaggio di benvenuto per {{member.first_name}}, che è appena entrato nella community."*). Le chiavi della cassaforte (`{{env.*}}`) non entrano |
| **Formato della risposta** | **Testo** o **JSON**. Con JSON, uno **Schema JSON** facoltativo, e ogni campo della risposta diventa una variabile |
| **Massimo di token** | La lunghezza massima della risposta, da 16 a 8.000 token (predefinito 1.024); il tetto per chiamata della community può abbassarlo |
| **Tempo di attesa** | Quanto aspettare la risposta, da 5 a 60 secondi (predefinito 30) |

Le variabili entrano nel prompt come dati, mai come ordini al modello, insieme alla lingua della persona e a quella della community. Metti nel prompt solo ciò che serve al compito.

**Cosa possono usare i blocchi successivi:** `{{steps.<blocco>.output}}` (il testo o il JSON), `{{steps.<blocco>.output.<campo>}}` (ogni campo del JSON, anche in una [Condizione "Variabile"](#condizione-variabile)), `{{steps.<blocco>.tokens}}` e `{{steps.<blocco>.model}}`, con **Inserisci variabile**. La risposta viene conservata fino a 16 KB. È un valore esterno, come quello di un webhook: esce con escape dove arriva e **non va mai nell'oggetto di un'e-mail**.

**Come si comporta il blocco:**

| Risposta | Cosa succede |
|---|---|
| Risposta ricevuta | Segue il percorso "ok", con la risposta nelle variabili |
| Chiave o richiesta rifiutata, il modello si rifiuta, risposta vuota o tagliata dal massimo di token, JSON non valido per lo schema | Va subito sul percorso di errore |
| Tempo scaduto, fornitore non disponibile o limite del fornitore | Riprova dopo 1, 5 e 15 minuti; senza successo, va sul percorso di errore |
| Tetto per esecuzione dei Limiti IA | Va sul percorso di errore |
| Tetto giornaliero dei Limiti IA | Il passo aspetta il giorno dopo, nel fuso orario della community |

La simulazione mostra il prompt compilato senza chiamare l'IA, e la cronologia mostra il modello, i token e la durata di ogni chiamata, mai la chiave, il prompt né la risposta (vedi [Cronologia](#cronologia)).

## Invia SMS e Invia WhatsApp

I blocchi **Invia SMS** e **Invia WhatsApp**, nella categoria **Messaggi**, inviano un avviso di servizio al cellulare della persona dell'esecuzione, con le regole di [Avvisi via SMS e WhatsApp](/notificacoes/avisos-por-sms-e-whatsapp): il canale attivo in **E-mail e notifiche**, cellulare confermato (o indicato dal team nel dichiarare il consenso), consenso di servizio per quel canale e la categoria **Automazioni** attiva in **Il mio account › Avvisi**.

- **Testo (SMS):** fino a 300 caratteri, con le [variabili](#variabili) (*"Ciao {{member.first_name}}, il tuo evento inizia tra 1 ora."*). Le variabili entrano come testo semplice. All'invio, Memberfy mette davanti il nome della community (*"[Club di Corsa] …"*) e, nell'SMS, il link per uscire in fondo.
- **Parti (SMS):** il pannello conta le parti del testo da solo e **così come parte** (con *[Community]* davanti e il link per uscire). Una parte contiene 160 caratteri, o 153 quando il messaggio si divide; un accento come ã, õ o ç, o un'emoji, fa contenere a ogni parte 70 caratteri (67 quando si divide). Le variabili contano come digitate.
- **Modello (WhatsApp):** WhatsApp non accetta testo libero. Scegli il **Modello** (*Biglietto confermato*, *Pagamento rifiutato*, *Avviso della community*…), compila i **Campi del modello** (fino a 300 caratteri ciascuno, con variabili; nome della persona e nome della community li compila Memberfy) e, se vuoi, la **Pagina che apre il pulsante** (un percorso della community, come `/eventos`; vuoto, la home). Per un messaggio senza un modello proprio, usa **Avviso della community**, il cui campo è il tuo testo. **Come arriva** mostra il messaggio composto. Un modello di marketing arriva solo a chi ha accettato le novità su WhatsApp. Non ripetere in un workflow un [messaggio che la piattaforma invia già](/notificacoes/avisos-por-sms-e-whatsapp#messaggi-della-piattaforma-su-whatsapp), come il pagamento confermato o il promemoria dell'evento.
- **Modelli che un workflow può usare (WhatsApp):** *Avviso della community* (anche nella versione *servizio*), *Biglietto confermato*, *Pagamento confermato*, *Pagamento rifiutato*, *Acquisto non concluso*, *Evento domani* ed *Evento in partenza* (con le versioni in presenza, che portano la mappa), *Evento in diretta*, *Risposta al post*, *Menzione*, *Messaggio diretto*, *Nuovo contenuto*, *Proposta decisa*, *1:1*, *Feedback ricevuto* (anche nella versione *servizio*), *Attività HR*, *Promemoria prenotazione*, *Abbonamento in rinnovo*, *Rimborso*, *Posto dalla lista d'attesa* e *Certificato emesso*. Restano fuori quelli che nessun trigger può compilare (*Visitatore alla reception*, *Pacco ricevuto*, *Carta in scadenza*, *Risposta alla richiesta di assistenza* e *Iscrizione approvata*): partono solo come [messaggio della piattaforma](/notificacoes/avisos-por-sms-e-whatsapp#messaggi-della-piattaforma-su-whatsapp).
- **Modelli di marketing (WhatsApp):** WhatsApp classifica come marketing *Avviso della community* e *Feedback ricevuto* (entrambe le versioni di ciascuno), *Acquisto non concluso*, *Menzione* e *Nuovo contenuto*. Chi non ha accettato le novità su WhatsApp non li riceve: il passo viene **saltato** (*"nessun consenso per WhatsApp"*) e prosegue sul percorso "ok". Perché tutti ricevano il messaggio, metti dopo il blocco una [condizione "Variabile"](#condizione-variabile) con `{{steps.<blocco>.result}}` uguale a `skipped` che porti a un **Invia e-mail**. Vedi [Modelli di marketing](/notificacoes/avisos-por-sms-e-whatsapp#modelli-di-marketing).

**Come si comporta il blocco:**

| Situazione | Cosa succede |
|---|---|
| Inviato | Prosegue per "ok". Lo storico mostra il testo e, negli SMS, le **Parti di SMS** |
| La persona non può ricevere: canale disattivato nella community, ha lasciato la community, nessun cellulare, cellulare non confermato (né indicato dal team nel dichiarare il consenso), paese non servito, nessun consenso, ha fermato gli avvisi di questa community o ha risposto STOP, ha disattivato la categoria **Automazioni**, testo vuoto. Su WhatsApp, anche il modello non ancora approvato e il modello di marketing per chi non ha accettato le novità | **Saltato**, con il motivo, e prosegue per "ok" |
| Orario di silenzio (dalle 21 alle 8, nel fuso di chi riceve), tetto giornaliero della community o quota del mese | **Attende la quota** e parte quando si libera, come in [Quando l'invio viene rimandato](#quando-l-invio-viene-rimandato) |
| La persona ha già ricevuto il **limite per persona** del giorno (5 di default, nella scheda SMS) | Passa al giorno dopo alle 8 |
| L'invio è stato rifiutato | Va per il percorso di errore, con il **Codice del rifiuto** nello storico |
| Errore temporaneo | Riprova dopo 1, 5 e 15 minuti |

Con l'invio della community sospeso, i due blocchi aspettano, come gli altri messaggi. Né il saltato né il rimandato contano come errore.

### Promemoria che partono anche via SMS

Con gli SMS attivi nella community, tre promemoria della piattaforma partono anche via SMS, senza workflow, per chi può riceverli: il **promemoria dell'evento**, 1 ora prima; i **promemoria del ciclo di PDI** (inviare e approvare il PDI); e il **promemoria dell'1:1**. La schermata di ciascuno lo indica (*"Il promemoria di 1 ora prima esce anche via SMS a chi ha dato il consenso."*). Un promemoria che l'orario di silenzio o il tetto giornaliero ritarderebbero viene saltato negli SMS; l'e-mail parte come sempre. Con gli SMS disattivati, non cambia nulla.

## Azioni della piattaforma e altri workflow

Ogni **azione della piattaforma** è un blocco della barra, con il nome dell'azione, nella categoria di ciò che tocca (**Persone**, **Contenuti** o **Messaggi**). Fa per la persona dell'esecuzione ciò che il team fa sullo schermo; il pannello del blocco chiede i campi dell'azione (il corso, l'evento, il piano o prodotto e il gruppo con la ricerca, il **Campo del profilo**, il **Nuovo ruolo**, i **Punti** e il **Motivo**, date e testi, con variabili) e dice quale ruolo richiede:

| Azione | Cosa fa | Ruolo minimo di chi attiva |
|---|---|---|
| **Cambia ruolo** | Cambia il ruolo della persona, anche in amministratore (mai in owner, né il ruolo di un owner o il proprio) | Admin |
| **Rimuovi dal gruppo** e **Compila un campo del profilo** | Toglie la persona da un gruppo; scrive un valore in un campo del profilo | Admin |
| **Regola i punti** | Aggiunge o toglie punti della [classifica](/membros/gamificacao), con il motivo nella cronologia | Admin |
| **Assegna badge** e **Rimuovi badge** | Assegna un [badge](/membros/engajamento#badge) del catalogo, con il **Motivo** facoltativo (chi l'ha già viene saltato), con l'avviso nella campanella e l'e-mail di **Traguardi**; oppure lo toglie, senza avvisare (chi non l'ha viene saltato) | Admin |
| **Dai accesso omaggio** e **Termina l'omaggio** | Dà un piano in omaggio fino a una data di fine, o termina l'omaggio (un abbonamento pagato non viene mai toccato) | Admin |
| **Dai un biglietto omaggio** | Un biglietto omaggio per l'evento | Admin |
| **Pianifica un 1:1** | Crea un [1:1](/espacos/1-1) ricorrente tra la persona e il suo responsabile diretto, con la **Frequenza** (settimanale, ogni due settimane o mensile), il **Giorno della settimana**, l'**Orario** e la **Durata (minuti)**. Senza responsabile diretto, o con un 1:1 ricorrente già fissato, il passo viene saltato | Admin |
| **Aggiungi un'azione al PDI** | Aggiunge un'azione, con la **Scadenza (giorni)**, al [PDI](/espacos/pdi) attivo della persona; senza PDI attivo, crea una bozza con essa. Nel PDI, l'azione mostra *"Creato dal workflow …"* | Admin |
| **Pubblica un post** | Pubblica un post (in Markdown, con variabili) in uno spazio feed o contenuti, a nome di chi ha attivato il workflow, con la regola di chi può creare dello spazio e senza avviso via e-mail | Moderatore |
| **Emetti un certificato** | Emette un [certificato](/espacos/certificados) da un modello attivo per la persona, con l'e-mail di avviso se **Invia il certificato via e-mail** è selezionato; chi lo ha già viene saltato | Moderatore |
| **Riconosci** | Chi ha attivato il workflow pubblica un [riconoscimento](/espacos/reconhecimento) per la persona, con il messaggio e, se vuole, un valore della community | Moderatore |
| **Blocca nella chat** | Chi ha attivato il workflow blocca la persona nella [chat](/membros/mensagens), senza avvisare nessuno; l'azione non ha campi | Moderatore |
| **Iscrivi all'evento** e **Iscrivi al corso** | Solo eventi e corsi gratuiti | Moderatore |
| **Invia un avviso nell'app** | Un avviso nella campanella della persona, con titolo e testo. L'avviso arriva anche come [notifica nel browser e sul cellulare](/conceitos/notificacoes-no-navegador), nella categoria **Avvisi del team**; toccarla apre la campanella | Moderatore |

Ciò che muove denaro o cancella in modo definitivo non viene mai eseguito in un workflow.

**Chiama workflow** esegue, per la stessa persona, un workflow che inizia con **Chiamato da un altro workflow**. Nell'attivatore di quel workflow, **Valori che questo workflow riceve** dichiara ciò che si aspetta (nomi con minuscole, numeri e `_`), usati nei blocchi come `{{trigger.<nome>}}`; in **Fine: successo**, **Valori restituiti** dice cosa torna a chi ha chiamato. Nel blocco **Chiama workflow**, scegli il **Workflow chiamato**, compila i **Valori inviati** e guarda **Cosa restituisce**, che i blocchi successivi usano come `{{steps.<blocco>.output.<nome>}}`. Il workflow che chiama aspetta che l'altro finisca e prosegue per "ok" o per errore. Un workflow non chiama se stesso né chi lo chiama, e la catena arriva fino a 3 workflow. Così un benvenuto comune vive in un solo workflow, chiamato da molti.

### Con quale ruolo agiscono i passi

Un workflow non fa mai più della persona che l'ha messo in moto:

- I passi agiscono con il ruolo di **chi ha salvato, attivato, ripreso o eseguito** il workflow. Un'azione sopra il ruolo di chi modifica viene segnalata nel pannello (*"Questa azione richiede proprietario: non puoi salvare il workflow con essa."*) e il workflow non viene salvato.
- Il ruolo viene riletto a ogni passo: se la persona ha perso il ruolo, l'azione viene saltata; se ha lasciato la community, il passo fallisce.
- **L'amministratore agisce come il proprietario.** Salva, attiva ed esegue workflow con qualsiasi azione della piattaforma, anche rendere qualcuno amministratore. Solo un'azione segnata come esclusiva del proprietario resterebbe sopra di lui (il workflow si aprirebbe in sola lettura: *"Questo workflow ha azioni che solo proprietario può modificare."*), e oggi nessuna lo è: la titolarità della community e il piano non sono azioni di workflow.
- **Il moderatore e la finanza hanno dei limiti:** vedono, simulano e seguono la cronologia, ma non salvano, attivano né eseguono workflow, e un workflow non dà mai loro un potere che non hanno.
- Un workflow chiamato da un altro agisce con il ruolo più basso della catena.

## Eventi del ciclo di vita

29 attivatori con il ciclo di vita di ogni modulo, ognuno nel blocco della sua famiglia e anche nei [webhook](/api/eventos-de-webhook).

| Famiglia | Attivatori |
|---|---|
| Download | Un file viene pubblicato, modificato, cambia categoria o viene eliminato; un allegato viene aggiunto, sostituito con una nuova versione o rimosso; viene creata una categoria di download |
| Post e commenti | Un post viene modificato, cambia spazio o viene eliminato; un commento viene eliminato; qualcuno ritira una reazione |
| Eventi | Un evento viene creato, modificato, riprogrammato o eliminato; inizia la diretta; viene pubblicata la registrazione |
| Corsi | Un corso viene pubblicato o modificato; viene pubblicata una lezione; qualcuno lascia un corso |
| Spazi | Uno spazio viene creato, modificato o eliminato |
| Moduli | Un modulo viene pubblicato, chiuso o riaperto |

- **Si attivano solo gli elementi pubblicati:** una bozza modificata o eliminata non avvia nulla.
- **Eliminare un evento è il modo in cui oggi si annulla un evento**, e l'attivatore lo dice: *"Un evento viene eliminato (è così che si annulla)"*.
- La persona dell'esecuzione è **chi ha fatto l'azione** (`{{actor.name}}`). Quando è il team a pubblicare (un evento, una lezione), l'attivatore serve per avvisare su Slack o riconoscere l'autore; per avvisare tutti i membri di un contenuto nuovo, usa gli [avvisi per e-mail](/notificacoes/emails-desta-comunidade) o un workflow **Programmato** o **Manuale** con pubblico.

## Livelli e punti

Il blocco di attivatore **Livelli e punti** (*"Una persona sale o scende di livello, o raggiunge un totale di punti"*) segue i [livelli](/membros/gamificacao#livelli) della community:

| Trigger | Quando si attiva | Filtri |
|---|---|---|
| **È salito di livello** | Nel momento in cui la persona arriva a un livello più alto, per punti (azione, correzione del team o di un workflow) o soddisfacendo il requisito della settimana che mancava. Saltare due livelli lo attiva una volta | **Livello**: il livello raggiunto (**Qualsiasi livello**, vuoto) |
| **È sceso di livello** | Il lunedì alle 00:00, nel fuso orario della community, per chi non ha soddisfatto i requisiti della settimana precedente, e nel momento in cui una correzione negativa porta la persona sotto il minimo del livello | **Livello** (quello in cui la persona è finita) e **Motivo**: *"Non ha completato l'attività della settimana (il lunedì)"* e *"Ha perso punti (correzione del team o di un workflow)"*, entrambi selezionati per impostazione predefinita (*"Almeno un motivo resta selezionato."*) |
| **Ha raggiunto N punti** | *"Si attiva quando il totale supera questo numero verso l'alto. Chi scende e lo supera di nuovo lo riattiva."* | **Punti** (obbligatorio) |

Nessuno dei tre si attiva con un ricalcolo dei punti, un'importazione, quando la community cambia i livelli o con la gamification disattivata.

**Condizioni.** Nella **Condizione**, il gruppo **Coinvolgimento** ha le regole **Livello** (*"è al livello Kernel o superiore"*, oppure *"è sotto il livello Kernel"*) e **Punti** (*"ha almeno 500 punti"*, oppure *"ha meno di 500 punti"*), lette al momento del passo.

**Esempi:** *"Salito a Kernel → assegnare il badge Kernel"*; *"Sceso da Kernel, motivo attività della settimana → togliere dal gruppo Kernel"*; *"Raggiunti 1.000 punti → inviare un DM di congratulazioni"*.

## DM ricevuto

Il blocco di attivatore **Messaggi** ha l'attivatore **Un membro invia un DM al team**: si attiva quando un membro invia un [messaggio](/membros/mensagens) a qualcuno del team. La persona dell'esecuzione è chi ha inviato il DM. Un DM tra membri, o da qualcuno del team, non lo avvia.

**Filtri:**

- **Chi lo riceve**: una o più persone del team (obbligatorio).
- **Chi invia ha il tag** e **Chi invia è nel gruppo** (vuoto: qualsiasi membro).
- **Solo il primo messaggio di una nuova conversazione**. Se non selezionato, ogni messaggio lo avvia, con la regola di [Quante volte la persona entra](#quante-volte-la-persona-entra).

**Variabili:** `{{dm.from.name}}` e `{{dm.from.email}}` (chi ha inviato), `{{dm.to.name}}` (chi ha ricevuto) e `{{dm.conversation_url}}` (il link della conversazione).

**Il testo del DM (`{{dm.text}}`)** segue la regola dei messaggi: il team non legge le conversazioni degli altri. Per questo è disponibile solo quando il workflow appartiene **a chi ha ricevuto il messaggio**:

- il filtro **Chi lo riceve** contiene esattamente quella persona, e solo lei salva e attiva il workflow;
- il testo può andare solo in un DM firmato da quella persona, nel corpo di un'e-mail o in una condizione. In qualsiasi altro punto (oggetto, Slack, commento, log, DM a nome di un'altra persona), o in un workflow salvato o attivato da un'altra persona, il blocco viene segnato con un errore nel disegno e il workflow non viene salvato.

L'evento arriva anche ai [webhook](/api/eventos-de-webhook) come `message.received`, **senza il testo** del messaggio.

## Limiti

- **Limite di frequenza**, facoltativo, in ogni workflow: al massimo N e-mail ogni tante ore o giorni alla stessa persona; ciò che supera il limite resta [in attesa di quota](#quando-l-invio-viene-rimandato).
- **Limite giornaliero della community**: le e-mail dei workflow al giorno del piano (40 nello Starter, 80 nel Growth, 200 nel Business e 350 nello Scale; vedi [Piano ed estensioni](/configuracoes/plano#le-quote-del-piano)); ciò che supera il limite aspetta il giorno dopo. Le e-mail transazionali non contano mai in questo limite.
- **SMS e WhatsApp per persona**: al massimo 5 messaggi di workflow per persona al giorno in ogni canale, di default (da 1 a 20, nella scheda SMS); ciò che supera parte il giorno dopo alle 8.
- **Messaggi:** al massimo 1 messaggio di workflow per persona al giorno; chi ha disattivato i messaggi o ha bloccato chi firma non lo riceve.
- **Webhook ricevuto:** al massimo 5 esecuzioni per persona al giorno in ogni workflow.
- Chi si è disiscritto da **Automazioni**, gli indirizzi con rimbalzo o segnalazione e la [reputazione di invio](/notificacoes/reputacao-de-envio) della community trattengono anche le e-mail.
- **Chiama webhook:** vedi i [limiti delle chiamate](#chiama-webhook).
- Con l'invio della community sospeso, **Esegui ora** e il **Programmato** non avviano nessuno, e i messaggi, i commenti, le reazioni e i post su Slack di chi è già nel percorso aspettano la fine della sospensione (i tag e i gruppi continuano).

### Quando l'invio viene rimandato

Quando un limite che si libera con il tempo trattiene il passo, questo **resta in attesa di quota** e parte appena si libera, invece di essere saltato:

| Limite | Fino a quando aspetta |
|---|---|
| **Limite di frequenza** del workflow | Fino alla fine della finestra del limite (la finestra arriva a 90 giorni) |
| **Limite giornaliero della community** | Fino a 7 giorni |
| **Reputazione di invio** in avviso o in pausa | Fino a 7 giorni |
| **Invio della community sospeso** | Fino a 48 ore |
| **1 messaggio di workflow per persona al giorno** | Fino a 7 giorni |

- La cronologia mostra *"In attesa di quota: rimandato fino al 28/10, 9:00 per limite di frequenza del workflow"*.
- Quando la quota si libera, i passi partono distribuiti nell'arco di un'ora; dopo una sospensione, a un ritmo controllato, e non tutti insieme.
- Dopo la partenza, il passo prosegue dall'uscita "ok". Superato il tempo massimo, l'esecuzione prosegue dall'uscita "errore" con il motivo *"ha atteso la quota oltre il limite"*.
- **Mettere in pausa** il workflow congela l'attesa; **Riprendi** fa ripartire il conteggio; **Termina esecuzione** o **Ferma** annulla, e non viene inviato nulla.
- Un nuovo evento della stessa persona durante l'attesa non apre un'altra esecuzione (*"era già in corso"*).

**Un impedimento permanente conta come saltato.** Disiscrizione da **Automazioni**, e-mail con rimbalzo o segnalazione, persona senza e-mail, messaggi disattivati, blocco di chi firma e chi firma fuori dalle persone consentite non si liberano con il tempo: il passo viene **saltato**, con il motivo, e il percorso prosegue dall'uscita "ok" (`{{steps.<blocco>.result}}` è `skipped`).

**Né il rimandato né il saltato contano come errore**: non cambiano il risultato dell'esecuzione né l'avviso di tasso di errore.

## Consenso e chi firma

**Attivatore per data e Programmato:** all'attivazione, la finestra chiede una volta la conferma che queste persone, già nella community, possono ricevere queste e-mail.

### A nome di chi

Chi può firmare i messaggi dei workflow è una scelta della community:

- In **Amministrazione › Impostazioni › E-mail e notifiche**, la scheda **Messaggi dei workflow a nome di** (la stessa compare in alto in **Amministrazione › Workflow**) dice a nome di chi i workflow possono inviare DM, commentare e reagire: **Tutto il team** (il predefinito: proprietario, amministratori, moderatori e finanza) o **Solo l’owner**. Solo il proprietario e l'amministratore la vedono e la cambiano.
- Il campo **A nome di chi** di ogni blocco di DM, commento e reazione elenca le persone che l'impostazione consente. Nessuno deve accettare né approvare testi.
- Con **Solo l’owner**, i passi disegnati a nome di un'altra persona vengono **saltati**, con il motivo *"chi firma non è tra le persone consentite"*, e l'editor segna quei blocchi (*"Questa persona non può più firmare: con "Solo l’owner", questo passo viene saltato finché non cambi chi firma."*).
- **Resta la traccia:** ogni versione conserva chi l'ha attivata o pubblicata e i testi che partono a nome di ogni persona. Quando un'altra persona del team attiva un workflow che parla a tuo nome, ricevi un avviso nella campanella, che apre il workflow (*"Ana ha attivato il workflow "Benvenuto", che parla a tuo nome. Guarda i testi."*).

## Modelli

**Modelli** crea una bozza a partire da uno dei 9 modelli, con le e-mail già nella libreria, nella lingua della community. Non viene inviato nulla finché non lo attivi.

| Famiglia | Modello | Cosa fa |
|---|---|---|
| Coinvolgimento | **Serie di benvenuto** | Tre e-mail nella prima settimana di chi entra |
| Coinvolgimento | **Spinta a iniziare** | Entrato e nessun corso iniziato in 3 giorni: una piccola spinta |
| Coinvolgimento | **Riconquista** | Nessun accesso da 30 giorni: un invito a tornare |
| Coinvolgimento | **Complimenti per il corso** | Un'e-mail quando la persona completa un corso |
| Coinvolgimento | **Prima iscrizione a un evento** | Benvenuto alla prima iscrizione a un evento |
| Coinvolgimento | **Grazie per la presenza** | Un giorno dopo il check-in, un grazie |
| Persone (HR) | **Promemoria valutazione in sospeso** | Valutazione non inviata da 3 giorni nel ciclo aperto |
| Persone (HR) | **1:1 non registrato** | Il 1:1 è passato e non è ancora registrato |
| Persone (HR) | **Obiettivi senza check-in** | Risultato chiave senza check-in da 14 giorni |

Aprire un modello mostra i passi e gli oggetti delle e-mail prima di usarlo (*"Crea N e-mail nella libreria"*).

## E-mail e disiscrizione

Le e-mail dei workflow partono nella categoria **Automazioni** di [E-mail di questa community](/notificacoes/emails-desta-comunidade), attiva per impostazione predefinita, con il link per disattivarla nel piè di pagina.

## Passo dopo passo

Un esempio: i complimenti con il nome del corso.

1. In **Amministrazione › Workflow**, fai clic su **Nuovo workflow** (o su **Modelli**, per partire da un modello).
2. Trascina il blocco **Corsi** dalla categoria **Attivatori** e, in **Si attiva quando**, scegli *Qualcuno completa un corso*. Scegli il corso: il campo **Quante volte la persona entra** sparisce, perché ogni persona completa quel corso una volta.
3. Fai clic sul **+** dopo l'attivatore e scegli **Invia e-mail**. Dai il **Nome del blocco** *Complimenti* e scegli l'e-mail. In **Modifica e-mail**, usa **Inserisci variabile** › **Trigger · Corsi** › **Corso** per mettere `{{course.name}}` nell'oggetto.
4. Collega l'uscita "ok" a **Fine: successo**. Se vuoi, collega l'uscita "errore" a un **Invia messaggio (DM)** per te, con `{{steps.<blocco>.error}}` nel testo, e poi a **Fine: errore**.
5. **Salva** e **Simula con una persona**, con una studentessa che ha completato il corso: la simulazione mostra l'oggetto con il nome del corso e *Finirebbe con successo*. In un passo e-mail, **Inviami una prova** invia l'e-mail solo a te. **Simula e inviami le e-mail** ti invia l'e-mail così come la riceverebbe la studentessa.
6. **Attiva** e conferma. Nell'elenco, segui **Entrati**, **Terminati** e **Successo**.

## Con l'assistente (MCP)

Il proprietario e l'amministratore creano, modificano, attivano, mettono in pausa e riprendono i workflow con l'assistente, anche a partire dai modelli; attivare e riprendere mostrano prima l'attivatore, le e-mail e la stima. Il team consulta, simula e segue la cronologia. Anche con l'assistente: `run_workflow` (esegui ora), `stop_workflow` (fermare, con il conteggio delle esecuzioni annullate prima della conferma), `get_workflow_summary` (il tasso di successo e gli ultimi errori), `list_workflow_variables` e `preview_workflow_text` (le variabili di un blocco e il testo compilato), `get_workflow_settings` e `update_workflow_settings` (a nome di chi) e l'indirizzo del [webhook in entrata](/integracoes/webhook-de-entrada). Vedi le [ricette](/mcp/receitas#93-ferma-un-workflow-o-mettilo-solo-in-pausa) e [Strumenti · Community e struttura](/mcp/ferramentas-comunidade#workflow).

L'assistente impara anche ad automatizzare: la **guida ai workflow** (`get_workflow_guide` e la ricetta **Automatizza una regola con un workflow**) spiega attivatori, blocchi, regole e variabili e porta ricette pronte; `suggest_workflow` trasforma una regola a parole (*"chi compra il corso riceve 7 giorni di accesso al mentoring"*) in una bozza, senza salvare nulla; e, dopo aver inviato una campagna, emesso certificati o invitato persone, l'assistente suggerisce il workflow che lo automatizza. Con l'assistente anche: le chiavi della cassaforte (`list_env`, `set_env`, `delete_env`, senza mai mostrare il valore), i blocchi delle azioni della piattaforma e **Chiama workflow**, e togliere esecuzioni dalla cronologia (`delete_workflow_run`, `clear_workflow_runs`, con conferma).

Per l'IA e le nuove azioni: la guida ha il blocco `ai` (con i modelli e i limiti del blocco) e 48 ricette, tra cui *DM di benvenuto scritto dall'IA*, *Smistamento dei ticket di supporto con IA*, *Riepilogo di una risposta a un modulo con IA*, *Certificato al check-in* e *1:1 ricorrente per chi entra in un team*. `get_ai_limits` e `update_ai_limits` leggono e modificano i [Limiti IA](#limiti-ia), `adjust_member_points` regola i punti di qualcuno senza workflow, e `simulate_workflow` con `send_emails_to_me` invia le e-mail della simulazione solo a te. Nessuna delle quattro chiede conferma.

Per SMS e WhatsApp: la guida descrive i blocchi `sendSms` e `sendWhatsapp` (il limite, la regola delle 24 ore e i motivi di salto e di attesa, letti da `list_workflow_triggers`), e le ricette salgono a 56, con *Benvenuto via SMS*, *Iscrizione all'evento confermata via SMS*, *Evento riprogrammato via SMS*, *Pagamento scaduto via SMS*, *1:1 domani via SMS*, *Iscrizione all'evento confermata via WhatsApp*, *Pagamento scaduto via WhatsApp* e *Posto dalla lista d'attesa via WhatsApp*. Vedi [Avvisi via SMS e WhatsApp](/notificacoes/avisos-por-sms-e-whatsapp#con-l-assistente-mcp). Su WhatsApp, la guida costruisce il blocco con il modello, i campi e la pagina del pulsante, mai con testo libero, e le ricette usano *Biglietto confermato*, *Pagamento rifiutato* e *Avviso della community*.

Per i campi a scelta multipla e i badge, le ricette passano a 61: *Benvenuto per interesse* e *Tag per interesse* (con *contiene uno qualsiasi di* nella condizione **Campo del profilo**), *Badge al completamento di un corso*, *Gruppo per chi riceve un badge* e *Badge al check-in dell'evento*.

Per i livelli: la guida descrive i trigger **È salito di livello**, **È sceso di livello** e **Ha raggiunto N punti** e le regole `levelAtLeast` e `pointsAtLeast`, con tre ricette nuove: *Salito di livello, riceve un badge*, *Sceso di livello, esce da un gruppo* e *Raggiunto N punti, riceve un badge*. I livelli veri e propri sono in `get_ranking_levels` e `update_ranking_levels`.

## Nell'API

Le rotte sono in `/api/workflows`: attivatori, elenco, creare, modificare, eliminare, attivare, mettere in pausa, riprendere, fermare, stima, simulazione, prova, esecuzioni, cronologia per membro, modelli ed esegui ora (`POST /api/workflows/{id}/run`). Vedi il [Riferimento dell'API](/api/referencia). Anche `POST /api/workflows/{id}/stop`, `GET /api/workflows/{id}/summary`, `GET /api/workflows/{id}/variables` e `POST /api/workflows/variables` (le variabili di un disegno non ancora salvato), `GET` e `PUT /api/workflows/settings` (a nome di chi), `occurs` e `variables` in ogni attivatore di `GET /api/workflows/triggers`, `activeCount` e `maxActive` nell'elenco, e il tipo `workflows` in `GET /api/logs`. Un disegno rifiutato torna con 422 e il blocco: `singleTriggerOnly`, `pathWithoutEnd`, `variableUnavailable`. Anche `actionAboveRole` e `subWorkflowAboveRole` (un'azione sopra il ruolo di chi salva), `subWorkflowCycle`, `httpTimeoutInvalid`, `externalInSubject`; Esegui ora o l'indirizzo webhook di un workflow con azioni sopra il tuo ruolo: 403 `workflows.actionsAboveRole`. E `DELETE /api/workflows/runs/{runId}`, `POST /api/workflows/{id}/runs/clear`, i blocchi `http`, `platformAction` e `runWorkflow`, l'attivatore `workflow.called`, `platformActions` e `subWorkflow` in `GET /api/workflows/triggers`, e la cassaforte in `/api/vault` (il valore di una chiave non torna mai).

I blocchi IA sono il blocco `ai` (`provider` `anthropic` o `openai`, `model`, `keyEnv`, `system`, `prompt`, `outputFormat` `text` o `json`, `jsonSchema`, `maxOutputTokens`, `timeoutSeconds`, `next` ed `error`), con i modelli e i limiti del blocco in `aiProviders` e `aiNode` di `GET /api/workflows/triggers`; i tetti stanno in `GET` e `PUT /api/vault/ai-limits` (proprietario e amministratore). Le nuove azioni sono in `platformActions` (`content.post.create`, `certificate.issue`, `recognition.give`, `chat.block`, `oneOnOne.schedule`, `developmentPlan.action.add`), con il campo facoltativo `ownerOnly`, e `POST /api/gamification/points` regola i punti fuori da un workflow. `POST /api/workflows/{id}/simulate` accetta `sendEmailsToMe: true` e restituisce `emailsToMe`; più di 10 simulazioni con invio in un'ora: `429`; account senza e-mail: `422`.

I blocchi di SMS e WhatsApp sono `sendSms` (`text`, fino a 300 caratteri, `next` ed `error`) e `sendWhatsapp` (`template`, `variables`, fino a 300 caratteri ciascuna, `link`, `next` ed `error`; i modelli e i loro campi arrivano in `whatsappNode.templates`), descritti in `smsNode` e `whatsappNode` di `GET /api/workflows/triggers`. I motivi restano sul passo: saltato (`smsNoPhone`, `smsPhoneUnverified`, `smsNoConsent`, `smsOptedOut`, `smsOptedOutAll`, `smsCategoryOff`, `smsCountryUnsupported`, `smsChannelDisabled`, `smsMemberGone`, `smsTextEmpty` e i corrispondenti `whatsapp*`, più `whatsappNotOnPlan`, `whatsappTemplateNotApproved`, `whatsappNoConsent`), rimandato (`smsQuietHours`, `smsDailyCapReached`, `smsMonthlyQuotaReached`, `smsPersonDailyCapReached` e quelli di WhatsApp) ed errore (`smsSendFailed`, `whatsappSendFailed`). Il contatore di parti è `POST /api/sms/segments`.

Le azioni dei badge sono `badge.award` (con `badgeId` e `reason`, che accetta variabili) e `badge.revoke`, in `platformActions`; gli attivatori sono `badge.awarded` (filtri `badgeId` e `sources`) e `badge.revoked`, con la variabile `{{badge.name}}`. I trigger di livello e punti sono `member.level_changed` (filtri `direction`, `up` per impostazione predefinita o `down`, `levelId` e, nella discesa, `causes`: `points` e `activity`) e `member.points_changed` (filtro `points`, obbligatorio: si attiva quando `from < N <= to`); le regole sono `levelAtLeast` (`levelId`) e `pointsAtLeast` (`points`), con `not`. In un campo a scelta multipla, la regola `fieldEquals` accetta `op` `containsAny`, `containsAll`, `notContains` e `contains`, con `values`.

## Correlati

- [Campagne e-mail](/notificacoes/campanhas-de-email)
- [Reputazione di invio](/notificacoes/reputacao-de-envio)
- [Messaggi](/membros/mensagens)
- [Log](/membros/registros-de-atividades)
- [Slack](/integracoes/slack)
- [IP fissi](/api/ips-fixos)
