Nous avons créé une automatisation n8n pour une collectivité qui souhaitait automatiser une sauvegarde quotidienne des documents Grist sur son Nextcloud auto-hébergé. Le même principe peut être appliqué pour faire des sauvegardes automatiques sur un autre cloud.
Tutoriel :
- depuis la console API de grist, créer un compte de service pour générer une clé API : cf Comptes de services : une clé API limitée à certains documents/dossiers/organisations
- ajouter ce compte de service comme propriétaire de l’espace d’équipe qui contient les documents à sauvegarder sur Nextcloud
-
dans n8n, ajouter un "New credential > Header Auth
Name:Authorization
Value:Bearer CLE_API_DU_COMPTE_DE_SERVICE
-
créer un nouveau workflow
-
ajouter un premier noeud « Schedule trigger », qui va permettre à l’automatisation de se déclencher à intervalles réguliers (ici, tous les jours à 8pm)
- ajouter un noeud HTTP pour faire l’appel API Grist de récupération de tous les ids des documents de l’organisation
Method: GET
url https://grist.incubateur.anct.gouv.fr/api/orgs/NOM_ESPACE_EQUIPE/workspaces
Authentication: Generic credential type
Generic Auth Type: header auth
Header auth: choisissez le credential créé précédemment
- ajouter un noeud javascript, qui va prendre les données imbriquées (les tableaux
docsdans chaque item) et les « aplatir » pour ressortir une liste de documents non imbriquée, avec un document par item.
Code :
const items = $input.all();
let allDocs = [];
for (const item of items) {
if (item.json.docs && Array.isArray(item.json.docs)) {
allDocs.push(...item.json.docs);
}
}
let docList = allDocs.map(doc => ({ json: doc }))
// Retourner chaque doc comme un item séparé
return docList;
- ajouter un noeud HTTP pour faire l’appel API Grist de téléchargement des documents
Method: GET
url: https://grist.incubateur.anct.gouv.fr/api/docs/{{ $json.id }}/download
Authentication: Generic credential type
Generic Auth Type: header auth
Header auth: choisissez le credential du compte de service
Send headers: activé
Header parameters:
Name: accept
Value: application/x-sqlite3
Options > response
Response format: file
Put output in field: data
-
Ajoutez un noeud « Wait » avec un temps de 10s par exemple, pour vous assurer que tous les téléchargements sont faits avant de charger dans le cloud
-
Ajouter un noeud HTTP pour l’appel API Nextcloud
Method:PUT
url:https://monnextcloud.fr/nextcloud/remote.php/dav/files/CHEMIN_DU_DOSSIER/{{ $json.name }}.grist
Authentication: Generic credential type
Generic Auth Type: basic auth
Basic auth: choisir le credential de votre Nextcloud (créer une Basic Auth avec nom d’utilisateur et mdp que vous utilisez dans Nextcloud)
Send body: activé
Body content type: n8n Binary file
Input data field name: data











