Sauvegarder des documents dans un cloud - Automatisation n8n : Grist + Nextcloud

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 :

  • 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 docs dans 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