Sto riscontrando un problema con un’automazione che dovrebbe attivarsi all’inizio del mese; tuttavia, anche se è abilitata, non viene attivata automaticamente. Non riesco a trovare alcun registro o un modo per eseguire il debug del motivo per cui non viene eseguita autonomamente quando dovrebbe. Qualcuno di voi sa come risolvere questo problema, per favore?
Come potete vedere di seguito, l’automazione dovrebbe ‘Programmare una riunione con i risultati di Data Explorer’ automaticamente ogni mese. Se faccio clic su “Attiva ora”, funziona come previsto: gli utenti aggiunti all’elenco ricevono il risultato di Data Explorer nonché un file CSV; tuttavia, l’attivazione automatica non viene eseguita.
Hai effettuato dei test per assicurarti che tutti i criteri siano soddisfatti in modo naturale (a parte trigger now)?
Cioè, imposta l’orario per accadere ogni giorno e vai a un gruppo fittizio. Se funziona correttamente, passa poi a mensile per il tuo gruppo effettivo.
Inoltre, credo che il tuo pubblico di destinazione debba avere la query dell’esploratore di dati condivisa con loro.
Sì.. ma il problema non è che non viene eseguito alla data/ora prevista, il problema è che non viene eseguito affatto.
Dove posso trovare questo pulsante, per favore?
Dovrebbe inviare un messaggio privato diretto a due utenti. Gli utenti hanno la query condivisa con loro. Grazie per il suggerimento di testare provando orari diversi. Proverò a sperimentare anche usando un gruppo di prova.
Penso che inizierei configurando una nuova automazione con le stesse impostazioni e verificando se, dopo averla abilitata, venga visualizzata una “data di prossima attivazione”.
Utilizzo esattamente questo script di automazione in più punti senza problemi. Ecco la mia configurazione in uno di essi: ho modificato la ricorrenza in 5 minuti invece di una settimana per questo test, ma viene attivato settimanalmente come previsto quando è impostato così:
Forse prova a rimuovere l’emoji delle manopole di controllo dal nome dello script e dal titolo della query dell’esploratore dati. Potrebbe essere quello a rompere il payload (anche se penso che dovrebbero essere ok).
Grazie per l’aiuto! Temo che il mistero non sia ancora risolto… ecco perché:
Prima della ‘data di attivazione’, era esattamente così che appariva, con il messaggio ‘La prossima automazione si attiverà alle: [data/ora]’; tuttavia, dopo che quella data/ora è passata senza che venisse eseguita con successo, il messaggio non viene più mostrato. Durante i test, ho modificato l’orario in 1 minuto e il messaggio di attivazione è ricomparso. In un mese precedente, quando non si è attivata, ho aggiornato il timer e ha mostrato il messaggio che si sarebbe attivata alla prima ora del mese successivo (ma non è successo).
In realtà ha funzionato ed è stato attivato in alcuni mesi, mentre in altri no, quindi non è chiaro il motivo, ma ora sembra non attivarsi più automaticamente. Che versione di Discourse state utilizzando? La mia è 2026.5.0-latest…
Purtroppo, anche quando attivo manualmente, non appare nulla in /logs. (Ho selezionato tutte le opzioni).
Non credo sia questo il problema perché ho modificato l’attivazione a 1 minuto ed è stata inviata:
Ok, l’ho impostata su mensile, l’ho attivata e ha funzionato. Ma aspettare un mese per fare i test non è molto utile in questo caso. Tra pochi minuti proverò a impostare la data di inizio.
modifica: sembra che l’impostazione mensile funzioni per me
Ok, quindi oggi Moin e io stavamo parlando di questo caso, e lei ha sollevato il possibile problema di un bug legato all’uso di “mensile”, dato che la durata di un mese varia? Ovviamente aveva ragione… in un certo senso…
Comunque, ho fatto un po’ di ricerche
Non sono riuscito a trovare lo script di automazione per schedule pm with data-explorer results nella cartella plugins/automation/lib/discourse_automation/scripts di core, quindi deve essere nascosto da qualche altra parte.
Tuttavia, ho esaminato la logica qui per le ricorrenze (presumibilmente quello script la utilizza) in plugins/automation/lib/discourse_automation/triggers/recurring.rb:
Penso che il codice sottostante per le automazioni mensili ricorrenti stia calcolando il N-esimo giorno della settimana invece della data effettiva del calendario, e che ci sia un disallineamento logico con Calendar day - che, iniettando BYDAY=#{count}#{byday} nell’RRule, l’automazione forza un allineamento basato sul giorno della settimana, mentre dovrebbe usare BYMONTHDAY invece di BYDAY.
Quindi, se imposti un’automazione per iniziare il 15 aprile (che casualmente è il mercoledì 3° di aprile), il sistema interpreta la regola come: esegui il 3° mercoledì di ogni mese.
Quando arriva maggio, il 3° mercoledì è il 20 maggio, il che fa sì che la programmazione si sposti di 5 giorni.
Inoltre, se imposti un’automazione il 30 o il 31 di un mese (ad esempio, il “5° martedì”), il sistema cercherà il 5° martedì nel mese successivo. Se quel mese ha solo 4 martedì, l’automazione non riuscirà completamente a trovare una data valida e salterà silenziosamente l’intero mese.
Ho una correzione testata e sto creando una PR se il team vuole darci un’occhiata. Cambia la logica dal N-esimo giorno della settimana alla data esatta del calendario.
Ecco alcuni screenshot dai miei test e debug:
2 istanze, una senza correzione e l’altra con la mia correzione logica
Crea la stessa automazione in entrambe (la versione corretta è a destra):
Guarda le differenze nei banner che dicono “La prossima automazione si attiverà alle:” con uno scostamento di 5 giorni - la versione non corretta si sposta verso il mercoledì 3° (20 maggio), invece del 15 maggio.
Ad esempio, i mesi potrebbero essere completamente saltati se si cercasse il 4° giovedì invece di una data effettiva.
Puoi anche verificare lo stesso risultato nella console di rails
Edit: il bug sembra colpire qualsiasi script di automazione che utilizza il trigger recurring impostato per essere eseguito ogni mese.
Posso riprodurre anche il banner vuoto a volte, ad esempio se si imposta la data di inizio per il 29 aprile 2026, allora non riesce a trovare il 5° mercoledì per maggio perché non esiste - l’automazione fallirà qui: (non corretto a sinistra, corretto a destra)
Sembra che il bug lanci un NoMethodError in rails quando non riesce a trovare il N-esimo giorno della settimana come sopra; da qui il banner vuoto per la prossima attivazione e l’esecuzione fallita:
Voglio solo notare che, durante il debug, mi è venuto in mente che il comportamento esistente potrebbe essere intenzionale (considerando che i test di specifica erano configurati con giorni scorrevoli). Tuttavia, sostengo che gli amministratori che configurano questa automazione si aspettano probabilmente di lavorare con il mese del calendario e non con l’N-esimo giorno del mese. Inoltre, il salto di mesi per un’automazione quando non riesce a trovare l’N-esimo giorno del mese è problematico.
Modifica: ho appena aggiunto una correzione per un caso limite e i test di specifica per quando non è possibile trovare una corrispondenza esatta della data per il mese successivo; in tal caso, si passa all’ultimo giorno del mese (ad esempio: 31 gennaio → 28 febbraio). Ho anche considerato gli anni bisestili.
Grazie mille per esserti occupata di questa questione. Non so se la tua correzione sia stata unita al codice principale e se risolverà il problema relativo alle date dei mesi. Tuttavia, suppongo che, se aggiorno l’attivatore per ogni mese, dovrebbe funzionare, giusto?
In altre parole, dovrei aggiornare specificamente l’attivatore per quel giorno specifico di ogni mese e poi si attiverà. Se ho capito bene, il problema si presentava quando il sistema cercava di scegliere il giorno in autonomia. Speriamo che la tua correzione risolva il problema… ho visto che il bot batch ti ha creato qualche difficoltà, ma spero che tutto vada per il meglio. Grazie ancora per il tuo aiuto!
Mi dispiace, la mia pull request non è ancora stata unita ed è in attesa di una revisione finale da parte di un membro del team. Per ora, puoi provare ad aggiornare il trigger con una data diversa; assicurati solo che, quando lo configuri, il messaggio «prossimo trigger» che appare indichi correttamente la data di esecuzione mensile successiva.