Google Analytics API: l’utente non dispone di autorizzazioni sufficienti

Uno tra i messaggi di errore più frequenti quando si lavora con le API di Google Analytics è quello che informa che l’utente non dispone di autorizzazioni sufficienti per accedere ai dati, sia che si tratti di API di Reporting che di Management per gestire la configurazione.
Un esempio di messaggio integrale, nel caso specifico ottenuto nel tentativo di richiamare un rapporto non campionato da una vista di Google Analytics, è il seguente:

Chiamata API a analytics.management.unsampledReports.get non riuscita con errore: User does not have sufficient permissions for this unsampled report.

Per quanto l’errore sia autoesplicativo, e risulti a prima vista banale, non è infrequente trovare in rete richieste di aiuto da parte degli utenti che lamentano di ricevere questo tipo di messaggio nonostante siano certi di disporre delle corrette autorizzazioni.

Questo capita, per lo più, per un’ambiguità nella comunicazione fornita dal contenuto del messaggio di tale errore. Mi riferisco al fatto che, nella maggior parte dei casi (escludendo quelli dove effettivamente non si dispone delle autorizzazioni), si tratta di un inserimento errato di valori nei parametri della chiamata alle API. Può essere dovuto, ad esempio, ad aver invertito l’ID della Proprietà con quello della Vista o che questi valori sono stati inseriti con un refuso. In tutti i casi l’errore sarà sempre lo stesso (autorizzazioni insufficienti).

Sarebbe stato molto più semplice se venisse specificato che quella Proprietà o quella Vista non esiste anziché comunicare che non se ne ha l’accesso. Il fatto è che probabilmente quell’identificativo scritto in modo erroneo, in chissà quale account sparo per il mondo, può esistere davvero. Google non può sapere se abbiamo sbagliato a scrivere un ID o se tentavamo di accedere a quella particolare Vista, per questo motivo verifica se abbiamo i permessi e in effetti, se quel valore non rientra tra gli identificativi accessibili associati al proprio Account, non ce li abbiamo.

La soluzione al problema pertanto, risiede quasi sempre nel valore dei parametri passati alla chiamata piuttosto che all’effettiva mancanza di accessi ai dati che si intende interrogare o gestire.

Curiosità

L’idea di questo articolo nasce in realtà da una situazione che mi è capitata personalmente lavorando con il componente aggiuntivo di mia creazione GA360 Unsampled Spreadsheet Add-on.

In uno Spreadsheet, che avevo utilizzato l’ultima volta 3 mesi fa per altre richieste di report non campionati, ho aggiunto una nuova colonna a quelle già presenti, relative a vecchi report con status COMPLETED, Fig. 1.

Fig. 1 – GA360 Unsampled Spreadsheet Add-on con richieste complete effettuate a Luglio 2020 e una nuova effettuata a Ottobre 2020

Il componente aggiuntivo, una volta eseguito, processa tutte le colonne dello Spreadsheet, anche quelle che risultano COMPLETED, poiché se l’utente ha ad esempio eliminato il foglio, lo script recupera di nuovo da Google Analytics 360 il rapporto e lo inserisce in una nuova tab del file.

Quello che invece è successo è che l’applicazione è andata in stallo. A bloccare l’esecuzione è stato proprio l’errore indicato a inizio articolo, quello dei permessi, restituito nel momento dell’esecuzione della chiamata get:

Analytics.Management.UnsampledReports.get(accountId, propetyId, viewId, reportId);

Ho controllato di aver accesso agli Analytics desiderati e di aver inserito correttamente i valori di Account, Proprietà e Vista e che l’ID del report venisse effettivamente recuperato in modo autonomo dallo script dalla relativa riga nel Foglio di Google (Fig. 1).

All’apparenza non c’era niente di sbagliato, fortunatamente mi sono ricordato di un passaggio fondamentale dei rapporti non campionati. Mi riferisco al fatto che, nonostante una volta creati risiedono sempre su Google Drive, vengono rimossi dall’interfaccia di Google Analytics 60 giorni dopo la data di creazione! Arcano svelato, stavo passando un reportId che non esiste più e, secondo Google (ma per certi versi è così nonostante sarebbe stato più facile ricevere l’errore di file non trovato), non ho le autorizzazioni per accederci.
Eliminando le vecchie colonne dal file tutto è ripartito correttamente.

Nel mio libro, Google Apps Script nella Digital Analytics, ho dedicato una sezione apposita alle API dei rapporti non campionati, non a caso sono stati proprio questi a farmi avvicinare anni fa al mondo di Google Apps Script.

Per il resto, il componente aggiuntivo è stato adeguato in modo da evitare grattacapi a chi potesse incappare nell’inconveniente descritto.