Plantilla de copia de seguridad para Clockify

Avanzado

Este es unOther, HRflujo de automatización del dominio deautomatización que contiene 21 nodos.Utiliza principalmente nodos como If, Set, Filter, Github, Clockify. Respaldar Clockify en Github basado en informes mensuales

Requisitos previos
  • Personal Access Token de GitHub
  • Pueden requerirse credenciales de autenticación para la API de destino
Vista previa del flujo de trabajo
Visualización de las conexiones entre nodos, con soporte para zoom y panorámica
Exportar flujo de trabajo
Copie la siguiente configuración JSON en n8n para importar y usar este flujo de trabajo
{
  "id": "k22TSNIZXHaQ9rGr",
  "meta": {
    "instanceId": "fb8bc2e315f7f03c97140b30aa454a27bc7883a19000fa1da6e6b571bf56ad6d",
    "templateCredsSetupCompleted": true
  },
  "name": "Clockify Backup Template",
  "tags": [
    {
      "id": "RKga6I6NviNI12bx",
      "name": "template",
      "createdAt": "2024-09-19T19:09:21.997Z",
      "updatedAt": "2024-09-19T19:09:21.997Z"
    }
  ],
  "nodes": [
    {
      "id": "24115363-9a03-4f8a-aa6e-2a9d4247f035",
      "name": "Extraer desde archivo",
      "type": "n8n-nodes-base.extractFromFile",
      "position": [
        660,
        400
      ],
      "parameters": {
        "options": {},
        "operation": "fromJson"
      },
      "typeVersion": 1
    },
    {
      "id": "11aa4b51-98f9-4df8-b2d2-6757fe686894",
      "name": "Comparar conjuntos de datos",
      "type": "n8n-nodes-base.compareDatasets",
      "position": [
        880,
        280
      ],
      "parameters": {
        "options": {},
        "mergeByFields": {
          "values": [
            {
              "field1": "data",
              "field2": "data"
            }
          ]
        }
      },
      "typeVersion": 2.3
    },
    {
      "id": "831ad368-6a46-4dd4-bb6c-8ea46200cdf0",
      "name": "Detener y error",
      "type": "n8n-nodes-base.stopAndError",
      "position": [
        880,
        700
      ],
      "parameters": {
        "errorMessage": "={{ $json.error }}"
      },
      "typeVersion": 1
    },
    {
      "id": "2f838fc8-96bf-4111-aaba-743e0c88b688",
      "name": "Globales",
      "type": "n8n-nodes-base.set",
      "position": [
        -660,
        480
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "6bd5904d-0218-4075-a767-d4b659def9b0",
              "name": "workspace_id",
              "type": "string",
              "value": "={{ $json.id }}"
            },
            {
              "id": "63fa6231-6c5b-414f-b813-18f7dd5c33e9",
              "name": "github_repo.owner",
              "type": "string",
              "value": ""
            },
            {
              "id": "be2530d7-b2b5-41c5-af19-ab8d27f18e2e",
              "name": "github_repo.name",
              "type": "string",
              "value": ""
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "bea9590e-355e-410a-bc4b-ae777efb9f15",
      "name": "Establecer índices de mes",
      "type": "n8n-nodes-base.set",
      "position": [
        -440,
        480
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "ad278249-5320-4ffa-8d75-e47194c83e58",
              "name": "monthIndex",
              "type": "array",
              "value": "=[0, 1, 2]"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "f541d535-80d9-439d-8543-9c3cb156a5ff",
      "name": "Separar índices",
      "type": "n8n-nodes-base.splitOut",
      "position": [
        -220,
        480
      ],
      "parameters": {
        "options": {},
        "fieldToSplitOut": "monthIndex"
      },
      "typeVersion": 1
    },
    {
      "id": "76c74727-d338-4a61-9bf2-e97893721995",
      "name": "Establecer intervalos",
      "type": "n8n-nodes-base.set",
      "position": [
        0,
        480
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "7f5ff2ee-b93c-4121-b3dc-ce592513db88",
              "name": "reportName",
              "type": "string",
              "value": "=detailed_report_{{ $now.minus($json.monthIndex, 'month').format('yyyy-MM') }}"
            },
            {
              "id": "ea571bdb-8f51-4852-9fda-55ff1a929d1f",
              "name": "startDate",
              "type": "string",
              "value": "={{ $now.minus($json.monthIndex, 'month').startOf('month').format('yyyy-MM-dd') }}"
            },
            {
              "id": "e88726c4-1eb8-4f29-9805-7b0a5ee484a4",
              "name": "endDate",
              "type": "string",
              "value": "={{ $now.minus($json.monthIndex, 'month').endOf('month').format('yyyy-MM-dd') }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "6d5e917e-68ac-4dbd-98be-4c8ad97fa54a",
      "name": "Omitir informes vacíos",
      "type": "n8n-nodes-base.filter",
      "position": [
        880,
        500
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "f6c69f9b-9e78-4a1e-af33-a1197f35e970",
              "operator": {
                "type": "array",
                "operation": "notEmpty",
                "singleValue": true
              },
              "leftValue": "={{ $json.timeentries }}",
              "rightValue": ""
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "60c7a408-74d3-4c6c-ac78-1ed1071e873e",
      "name": "Obtener primer espacio de trabajo",
      "type": "n8n-nodes-base.clockify",
      "position": [
        -880,
        480
      ],
      "parameters": {
        "limit": 1,
        "resource": "workspace"
      },
      "credentials": {
        "clockifyApi": {
          "id": "CMJ0LAYOs143GAXw",
          "name": "Clockify (octionictest)"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "824bf2c6-9159-40ec-83f3-3f0b8d87c208",
      "name": "Obtener informe mensual detallado",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        220,
        480
      ],
      "parameters": {
        "url": "=https://reports.api.clockify.me/v1/workspaces/{{ $('Globals').item.json.workspace_id }}/reports/detailed",
        "method": "POST",
        "options": {},
        "jsonBody": "={\n  \"dateRangeStart\": \"{{ $json.startDate }}T00:00:00Z\",\n  \"dateRangeEnd\": \"{{ $json.endDate }}T23:59:59.999Z\",\n  \"detailedFilter\": {\n    \"page\": 1,\n    \"pageSize\": 50\n  },\n  \"exportType\": \"json\"\n}",
        "sendBody": true,
        "specifyBody": "json",
        "authentication": "predefinedCredentialType",
        "nodeCredentialType": "clockifyApi"
      },
      "credentials": {
        "clockifyApi": {
          "id": "CMJ0LAYOs143GAXw",
          "name": "Clockify (octionictest)"
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "f9323c68-c70f-4f22-ae18-916d5fc1b264",
      "name": "Verificar si archivo existe en GitHub",
      "type": "n8n-nodes-base.github",
      "onError": "continueErrorOutput",
      "position": [
        440,
        480
      ],
      "parameters": {
        "owner": {
          "__rl": true,
          "mode": "name",
          "value": "={{ $('Globals').first().json.github_repo.owner }}"
        },
        "filePath": "=reports/{{ $('Set intervals').item.json.reportName }}",
        "resource": "file",
        "operation": "get",
        "repository": {
          "__rl": true,
          "mode": "name",
          "value": "={{ $('Globals').first().json.github_repo.name }}"
        },
        "additionalParameters": {}
      },
      "credentials": {
        "githubApi": {
          "id": "Eb9yCfVJGJvXD05z",
          "name": "GitHub (n8n-test-01)"
        }
      },
      "retryOnFail": false,
      "typeVersion": 1
    },
    {
      "id": "41877a6a-ba5b-43bd-8ca3-f8402793685f",
      "name": "Apuntar a nuevos datos",
      "type": "n8n-nodes-base.set",
      "position": [
        660,
        200
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "00d2885f-451e-436e-8852-b9ad086d231b",
              "name": "data",
              "type": "array",
              "value": "={{ $('Get detailed monthly report').item.json.timeentries }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "9f448921-5b9d-4937-a7d9-00a62b1fba99",
      "name": "Verificar mensaje de error 404",
      "type": "n8n-nodes-base.if",
      "position": [
        660,
        600
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "6b34c09d-0136-433c-856d-b29a0c3aac34",
              "operator": {
                "type": "string",
                "operation": "contains"
              },
              "leftValue": "={{ $json.error }}",
              "rightValue": "could not be found"
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "900905ed-cff6-4ebb-b0da-67db9f02b301",
      "name": "Actualizar archivo en GitHub",
      "type": "n8n-nodes-base.github",
      "position": [
        1100,
        180
      ],
      "parameters": {
        "owner": {
          "__rl": true,
          "mode": "name",
          "value": "={{ $('Globals').first().json.github_repo.owner }}"
        },
        "filePath": "=reports/{{ $('Set intervals').item.json.reportName }}",
        "resource": "file",
        "operation": "edit",
        "repository": {
          "__rl": true,
          "mode": "name",
          "value": "={{ $('Globals').first().json.github_repo.name }}"
        },
        "fileContent": "={{ JSON.stringify($json.data, null, 2) }}",
        "commitMessage": "Update report"
      },
      "credentials": {
        "githubApi": {
          "id": "Eb9yCfVJGJvXD05z",
          "name": "GitHub (n8n-test-01)"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "b928cdb2-b21a-45ff-9bc6-9be483891c4c",
      "name": "Crear archivo en GitHub",
      "type": "n8n-nodes-base.github",
      "position": [
        1100,
        500
      ],
      "parameters": {
        "owner": {
          "__rl": true,
          "mode": "name",
          "value": "={{ $('Globals').first().json.github_repo.owner }}"
        },
        "filePath": "=reports/{{ $('Set intervals').item.json.reportName }}",
        "resource": "file",
        "repository": {
          "__rl": true,
          "mode": "name",
          "value": "={{ $('Globals').first().json.github_repo.name }}"
        },
        "fileContent": "={{ JSON.stringify($json.timeentries, null, 2) }}",
        "commitMessage": "Create report"
      },
      "credentials": {
        "githubApi": {
          "id": "Eb9yCfVJGJvXD05z",
          "name": "GitHub (n8n-test-01)"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "04a5b42d-ea1f-4b32-98b5-953e22b26819",
      "name": "Activador programado",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        -1100,
        480
      ],
      "parameters": {
        "rule": {
          "interval": [
            {
              "triggerAtHour": 5
            }
          ]
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "4728f389-df04-4f8d-a436-ac06508d28ba",
      "name": "Nota adhesiva3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -720,
        260
      ],
      "parameters": {
        "width": 220,
        "height": 380,
        "content": "## Set Globals\n- Define the repository owner (username / organization) and repository name\n- By default the fist available Clockify workspace ID is set. This can be overridden here."
      },
      "typeVersion": 1
    },
    {
      "id": "2e31df0a-1e67-4a9a-8dc1-42360b4da978",
      "name": "Nota adhesiva4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1160,
        360
      ],
      "parameters": {
        "width": 220,
        "height": 280,
        "content": "## Set trigger\nBy default this workflow runs once a day."
      },
      "typeVersion": 1
    },
    {
      "id": "696721c6-25fc-48f9-b0f5-53d1b6462183",
      "name": "Nota adhesiva",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -500,
        300
      ],
      "parameters": {
        "width": 220,
        "height": 340,
        "content": "## Set Scope (optional)\nBy default the last three moths are being backed up.\n_0 = current month, 1 = last month, etc._"
      },
      "typeVersion": 1
    },
    {
      "id": "a0ebb845-7472-40ec-b2b5-abc2f118b0e1",
      "name": "Nota adhesiva1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        160,
        360
      ],
      "parameters": {
        "color": 7,
        "width": 220,
        "height": 280,
        "content": "A detailed report is being retrieved for every month across all entries in the workspace."
      },
      "typeVersion": 1
    },
    {
      "id": "feb9f194-4c9d-41c8-9b46-3759dcdae9d5",
      "name": "Nota adhesiva2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        380,
        100
      ],
      "parameters": {
        "color": 7,
        "width": 920,
        "height": 780,
        "content": "The reports are created or updated in GitHub.\n**It is essential to back up previous months as well, as values like tags may still change over time.**"
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "pinData": {},
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "34ab93f2-a965-42ac-bd44-478c19a0f7d6",
  "connections": {
    "2f838fc8-96bf-4111-aaba-743e0c88b688": {
      "main": [
        [
          {
            "node": "bea9590e-355e-410a-bc4b-ae777efb9f15",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "76c74727-d338-4a61-9bf2-e97893721995": {
      "main": [
        [
          {
            "node": "824bf2c6-9159-40ec-83f3-3f0b8d87c208",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "11aa4b51-98f9-4df8-b2d2-6757fe686894": {
      "main": [
        [
          {
            "node": "900905ed-cff6-4ebb-b0da-67db9f02b301",
            "type": "main",
            "index": 0
          }
        ],
        [],
        []
      ]
    },
    "04a5b42d-ea1f-4b32-98b5-953e22b26819": {
      "main": [
        [
          {
            "node": "60c7a408-74d3-4c6c-ac78-1ed1071e873e",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "24115363-9a03-4f8a-aa6e-2a9d4247f035": {
      "main": [
        [
          {
            "node": "11aa4b51-98f9-4df8-b2d2-6757fe686894",
            "type": "main",
            "index": 1
          }
        ]
      ]
    },
    "41877a6a-ba5b-43bd-8ca3-f8402793685f": {
      "main": [
        [
          {
            "node": "11aa4b51-98f9-4df8-b2d2-6757fe686894",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "bea9590e-355e-410a-bc4b-ae777efb9f15": {
      "main": [
        [
          {
            "node": "f541d535-80d9-439d-8543-9c3cb156a5ff",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "f541d535-80d9-439d-8543-9c3cb156a5ff": {
      "main": [
        [
          {
            "node": "76c74727-d338-4a61-9bf2-e97893721995",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "6d5e917e-68ac-4dbd-98be-4c8ad97fa54a": {
      "main": [
        [
          {
            "node": "b928cdb2-b21a-45ff-9bc6-9be483891c4c",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "60c7a408-74d3-4c6c-ac78-1ed1071e873e": {
      "main": [
        [
          {
            "node": "2f838fc8-96bf-4111-aaba-743e0c88b688",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "9f448921-5b9d-4937-a7d9-00a62b1fba99": {
      "main": [
        [
          {
            "node": "6d5e917e-68ac-4dbd-98be-4c8ad97fa54a",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "831ad368-6a46-4dd4-bb6c-8ea46200cdf0",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "824bf2c6-9159-40ec-83f3-3f0b8d87c208": {
      "main": [
        [
          {
            "node": "f9323c68-c70f-4f22-ae18-916d5fc1b264",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "f9323c68-c70f-4f22-ae18-916d5fc1b264": {
      "main": [
        [
          {
            "node": "41877a6a-ba5b-43bd-8ca3-f8402793685f",
            "type": "main",
            "index": 0
          },
          {
            "node": "24115363-9a03-4f8a-aa6e-2a9d4247f035",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "9f448921-5b9d-4937-a7d9-00a62b1fba99",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}
Preguntas frecuentes

¿Cómo usar este flujo de trabajo?

Copie el código de configuración JSON de arriba, cree un nuevo flujo de trabajo en su instancia de n8n y seleccione "Importar desde JSON", pegue la configuración y luego modifique la configuración de credenciales según sea necesario.

¿En qué escenarios es adecuado este flujo de trabajo?

Avanzado - Otros, Recursos Humanos

¿Es de pago?

Este flujo de trabajo es completamente gratuito, puede importarlo y usarlo directamente. Sin embargo, tenga en cuenta que los servicios de terceros utilizados en el flujo de trabajo (como la API de OpenAI) pueden requerir un pago por su cuenta.

Información del flujo de trabajo
Nivel de dificultad
Avanzado
Número de nodos21
Categoría2
Tipos de nodos12
Descripción de la dificultad

Adecuado para usuarios avanzados, flujos de trabajo complejos con 16+ nodos

Autor

Workflow Optimization Expert | Software Architect. Use my link to book an initial consultation for custom built workflows using n8n.

Enlaces externos
Ver en n8n.io

Compartir este flujo de trabajo

Categorías

Categorías: 34