
Indice
Nuovo progetto, nuovo workflow
Per l’avvio di un nuovo progetto di sottotitolazione, abbiamo dovuto allestire un nuovo flusso di lavoro per:
- ricevere i video da sottotitolare;
- elaborare i video in un sistema di trascrizione automatica;
- creare i sottotitoli;
- sincronizzare i sottotitoli secondo le specifiche del cliente;
- e infine inviare il file SRT risultante alla persona che aveva mandato ciascun video.
Il tutto entro 48 ore al massimo.
Per tenere traccia dei vari incarichi man mano che arrivavano, oltre a inserire i dati nel nostro sistema di gestione, abbiamo creato anche un foglio di calcolo su Google Sheets, da condividere con le persone coinvolte, su cui segnare:
- la durata del video;
- la data di consegna;
- la persona a cui è assegnata la sottotitolazione.
Per tutte le comunicazioni con la squadra di collaboratori abbiamo usato, come sempre, la nostra chat interna basata su Mattermost, un’alternativa open source a Slack.
La principale limitazione imposta dal cliente era che chiunque del suo staff (formato da decine di video editor) doveva poter caricare i video da trascrivere su un server, senza il bisogno di registrarsi o avere un account specifico.
Se non fosse stato per questo requisito, la soluzione più immediata per noi sarebbe stata Google Drive. Tuttavia, un modulo di Google permette di caricare file solo a chi ha un account Google.
Come soluzione ci siamo appoggiati allora a una delle funzioni del nostro server di file Synology, sul quale abbiamo creato una “File request”. Il video editor visita una pagina apposita, con un form, da cui può caricare il video, che finisce sul server.
Da lì, mediante un altro strumento del sistema operativo DSM di Synology, chiamato CloudStation, le cartelle con i video vengono sincronizzate con Google Drive.
Per la notifica al project manager, abbiamo fatto scrivere dal nostro informatico uno script che confrontasse ogni 15 minuti il contenuto delle cartelle in questione e mandasse un’email con il percorso e il nome del file appena caricato.
Il project manager doveva poi importare il video nel sistema di trascrizione automatica che usiamo, Sonix.ai, che andava poi rivisto da uno dei collaboratori.
Sonix permette di raggruppare i video gerarchicamente, quindi abbiamo riprodotto la stessa struttura di cartelle presente su Google Drive: molto semplicemente, consiste di una cartella principale per ogni lingua e delle sottocartelle, una per ogni video editor, che a loro volta contengono i video.
Quale strumento di automatizzazione usare?
Fin dal primo momento mi è stato chiaro che il flusso di lavoro si prestava a essere automatizzato, sia per risparmiare tempo, sia per evitare possibili errori nella gestione manuale del progetto, che comportava la ripetizione di varie azioni meccaniche come il copia-incolla, dove il rischio di errore umano è sempre alto.
Il workflow da automatizzare all’arrivo di ciascun nuovo video era infatti il seguente:
- importare il video da Google Drive a Sonix;
- aggiungere i dati del video (data, mittente, nome del file, link su Google Drive e durata) nel Google Sheet della lingua del video;
- notificare i membri del progetto sull’apposito canale di Mattermost (un canale per ogni lingua).
Sembrava il progetto perfetto per provare alcune piattaforme no-code.
Nota: le piattaforme di sviluppo no-code permettono a chiunque di creare applicativi e integrazioni fra sistemi attraverso un’interfaccia grafica e configurando alcuni parametri, evitando la programmazione propriamente detta, cioè la scrittura di codice.
Ho eseguito le prime prove di automatizzazione con Zapier, con cui si può collegare direttamente Sonix a Google Drive grazie a una “recipe” già pronta: per ogni nuovo file caricato in Drive, Zapier trasmette l’informazione a Sonix, che recupera il file ed esegue la trascrizione automatica.
Questa integrazione è molto comoda e funziona alla perfezione, ma ha un grosso limite: l’API di Google Drive non consente di monitorare una cartella insieme a tutte le sue sottocartelle. Il monitoraggio non è dunque ricorsivo. Questo implica che bisogna creare uno “zap” per ogni cartella, invece di poter usare un solo zap su una cartella principale che monitora tutte le sottocartelle.
Nota: Zapier chiama “zap” una sequenza di integrazioni. Come specificato sul loro sito, “uno zap è un flusso di lavoro automatizzato che collega tra loro app e servizi. Ogni zap consiste in un evento di attivazione (trigger) e una o più azioni. Quando si attiva uno zap, esso eseguirà le varie azioni programmate ogni volta che si verifica l’evento di attivazione.”
Questo limite comporta tre svantaggi:
- il progetto coinvolge decine di video maker, per cui le sottocartelle sono decine: creare uno zap per ogni cartella comporta un lavoro manuale, che vanifica lo sforzo di automazione che stavamo facendo;
- i piani a pagamento di Zapier dipendono dal numero di zap. All’aumentare delle cartelle, avremmo presto superato i limiti dei piani più economici;
- inoltre non era chiaro se sarebbe stato possibile integrare facilmente con Zapier gli altri due sistemi coinvolti nella gestione, Google Sheets e Mattermost, altri ingredienti necessari per la nostra gestione.
Scartato Zapier, abbiamo valutato alcune alternative:
- n8n
- Integromat (che nel frattempo ha cambiato nome e si chiama Make e
- Pabbly Connect.
n8n è molto potente, ma è anche il più complicato dei tre. Dopo averlo installato sul nostro server, abbiamo iniziato a studiarlo, accorgendoci subito che era troppo macchinoso per i nostri scopi.
Integromat sembrava un buon candidato, ma l’abbiamo scartato perché abbiamo ricevuto una risposta abbastanza fredda (e tardiva) dal supporto quando abbiamo esposto le nostre esigenze.
Il supporto di Pabbly ha risposto invece in modo dettagliato, quindi mi sono registrato e ho iniziato i miei esperimenti, seguendo le indicazioni ricevute.
Nota: il primo passaggio di tutti gli automatismi è impostare un punto di partenza, l’evento di attivazione o trigger. Bisogna cioè rispondere alla domanda, “Quale evento deve avviare il workflow?”
Questa domanda si è rivelata una delle questioni più difficili da risolvere, perché dal trigger dipendono i dati iniziali che si possono ricavare e usare per i passaggi successivi.
Sviluppo dell’integrazione in Pabbly Connect
In Pabbly Connect i trigger disponibili con Google Drive si riducevano a sole due possibilità: quando un nuovo file viene caricato (in qualsiasi cartella), oppure trovare gli ultimi file aggiunti con una ricerca ricorsiva a intervalli di tempo prestabiliti, ma solo nelle cartelle che contengono i video.
Ho dovuto subito scartare l’opzione di monitorare i nuovi file caricati tra tutte le cartelle di Drive, cioè il primo elemento che compare nell’elenco “Recenti”, perché Pabbly Connect controlla i nuovi file ogni 5 minuti (impostazione non modificabile). Se fosse arrivato più di un file nell’arco di quei 5 minuti, avrebbe rilevato solo il più recente, ignorando quello immediatamente successivo.
La ricerca ricorsiva invece presupponeva di chiedere a Drive l’elenco di sottocartelle e di elencare il contenuto di ognuna. Dopodiché Pabbly doveva confrontare l’ora di caricamento con l’ora attuale e proseguire solo se trovava un file caricato negli ultimi 15 minuti.
Ripetendo il workflow ogni 15 minuti, il sistema sarebbe stato in grado di rilevare i file caricati appunto in quell’intervallo di tempo.
Avevo così la sicurezza di non perdere nessun file, anche se ne arrivavano vari nell’arco di 15 minuti. Tuttavia ho dovuto abbandonare anche questa strada perché aveva un impatto troppo forte sul numero di task consumate, che in Pabbly non sono illimitate. Anche riducendo la frequenza a ogni 30 minuti avremmo comunque rischiato di esaurire le task comprese nel nostro abbonamento mensile.
Poiché la ricerca ricorsiva era troppo dispendiosa di risorse, a questo punto ho dovuto valutare altre soluzioni.
Il nostro workflow si doveva avviare solo quando effettivamente arrivava un file e non aveva senso monitorare le cartelle di Drive 24 ore su 24 per una dozzina di file che arrivavano al giorno.
Se volevo prescindere da Google Drive dovevo usare come trigger l’arrivo dell’email di notifica indirizzata al project manager.
Qui però il problema era la necessità di separare le varie linee di testo della mail e ricavare da ciascuna i dati di cui avevamo bisogno:
- il nome del file,
- il nome della cartella in cui è stato caricato, che è a sua volta l’indirizzo email del destinatario dei sottotitoli,
- e infine la lingua del video, perché riceviamo video in italiano, in spagnolo e in portoghese.
Tutti questi dati si possono ricavare usando la funzione di Pabbly Connect che estrae il testo con un’espressione regolare. Infatti dovevo passare da questo:
< /volume1/video/Company_ES/enrique.blanco@company.com/@eaDir/video1.mp4/SYNOVIDEO_VIDEO_SCREENSHOT.jpg
< /volume1/video/Company_ES/enrique.blanco@company.com/video1.mp4
< /volume1/video/Company_IT/mario.rossi@company.com/@eaDir/video2.mp4/SYNOVIDEO_VIDEO_SCREENSHOT.jpg
< /volume1/video/Company_IT/mario.rossi@company.com/video2.mp4
< /volume1/video/Company_PT/joao.verdes@company.com/@eaDir/video3.mp4/SYNOVIDEO_VIDEO_SCREENSHOT.jpg
< /volume1/video/Company_PT/joao.verdes@company.com/video3.mp4
a questo:
ES
enrique.blanco@company.com
video1.mp4
IT
mario.rossi@company.com
video2.mp4
PT
joao.verdes@company.com
video3.mp4
In un primo momento la complessità della regex mi aveva addirittura fatto desistere dall’usare il trigger via email. Tuttavia, quando il percorso con Google Drive si è rivelato un vicolo cieco, mi sono rimboccato le maniche e con un po’ di pazienza e di tenacia sono riuscito a creare un’espressione regolare che andasse bene in tutti i casi.
Il resto del workflow era già abbastanza rodato e grazie all’opzione di reiterazione di Pabbly Connect (Iterator), i passaggi vengono ripetuti per ciascun input.
Ecco il workflow risultante in sintesi:
- Il sistema riceve l’email a un apposito indirizzo creato da Pabbly Connect e parte il workflow.
- Una regex separa il corpo della mail in tante righe quanti sono i video caricati e il sistema ripete i passaggi seguenti (da 3 a 10) per ciascun video.
- Con un’altra regex estrae i dati che mi interessano: lingua del video, indirizzo email del mittente e nome del file.
- Manda un’email automatica di conferma alla persona che ha caricato il video.
- Cerca il file su Google Drive usando come chiave di ricerca il nome del file.
- Drive mi restituisce gli altri dati del video che mi interessano, in particolare la data di caricamento.
- Chiede a Sonix, tramite la sua API, l’elenco delle cartelle esistenti:
- se la cartella del mittente non esiste ancora, la crea con lo stesso nome della cartella del video e procede con il passaggio successivo.
- altrimenti, se la cartella del mittente esiste già, procede con il passaggio successivo.
- Carica il video nell’apposita cartella su Sonix.
- Aggiunge una riga con i dati del video al Google Sheet condiviso della lingua del video.
- Manda un messaggio su Mattermost tramite un bot, per avvisare i collaboratori che c’è un nuovo video disponibile.
Conclusione
Per un po’ ho dovuto limare ulteriormente il workflow per adattarlo ad alcune eccezioni, che non sto qui a elencare. Dall’inizio alla fine questo automatismo sviluppato in no-code ha richiesto in tutto un paio di settimane di lavoro, che non è poco. In prospettiva però, se il progetto di trascrizione dura almeno per qualche mese, sono sicuro che ci farà risparmiare molto tempo e molti errori potenziali.
Quello degli errori umani è infatti un problema da non sottovalutare, perché un sbaglio nel digitare i dati o un copia-incolla maldestro possono significare grossi problemi.
Dopo questi primi esperimenti no-code, la conclusione è che questi strumenti sono molto potenti e flessibili, ma non sono ancora la soluzione “set it and forget it” che promettono.
I due colli di bottiglia che ho individuato io sono stati la decisione del trigger e la regex, che in generale non è affatto semplice e nel nostro caso era ulteriormente complicata, perché doveva considerare varie combinazioni di caratteri nell’indirizzo email, nel nome e nel percorso del file.
A tutto questo si aggiunge anche il fatto che ogni sistema presenta alcune limitazioni di design e non è neanche esente da bug interni, che per Pabbly Connect sono stati diversi. Il supporto però è sempre stato presente e reattivo sul forum ufficiale e ha risolto molti dei problemi segnalati abbastanza in fretta.
Il problema fondamentale è che i vari collegamenti dovrebbero funzionare sulla carta, ma è estremamente probabile che il tuo caso d’uso specifico non sia mai stato testato perché è totalmente nuovo. Questo significa che gli sviluppatori non si sono mai trovati di fronte a un certo bug, perché nessuno aveva mai usato il sistema in quel modo.
Per esempio nell’esperimento con la ricerca ricorsiva su Google Drive, mi sono accorto e ho segnalato al supporto che quando elencava il contenuto delle cartelle, Drive rilevava anche i file nel cestino come se fossero ancora nella cartella.
Le potenzialità comunque ci sono, perché ovviamente è un modo per avvicinare l’utente comune allo sviluppo di applicazioni, ma il risultato della mia esperienza è che il no-code non è ancora una soluzione alla portata di tutti.
Se vuoi esplorare le possibilità dell’automazione nel tuo lavoro quotidiano, ti possiamo dare una mano. Contattaci senza impegno.