Workflow n8n

Automatisation Email avec n8n : création de rapports Markdown

Ce workflow n8n est conçu pour automatiser la création et l'envoi de rapports par email, facilitant ainsi la gestion des informations et la communication au sein des équipes. Dans un contexte professionnel où le partage d'informations est crucial, ce workflow s'avère particulièrement utile pour les équipes de gestion de projet, les responsables de département ou toute organisation cherchant à optimiser ses processus de reporting. En utilisant ce workflow, vous pourrez générer des rapports Markdown à partir de données triées et les envoyer automatiquement par email, réduisant ainsi le temps consacré à ces tâches répétitives.

  • Étape 1 : Le déclencheur 'On clicking execute' initie le processus manuellement.
  • Étape 2 : Le nœud 'SortElements' trie les éléments selon les critères définis.
  • Étape 3 : Le nœud 'Markdown' transforme ces éléments en un format Markdown.
  • Étape 4 : Le nœud 'CreateMDReport' génère le rapport final.
  • Étape 5 : Le nœud 'Send Email' envoie le rapport par email aux destinataires spécifiés. Ce workflow utilise également des nœuds pour récupérer des images et gérer des données binaires, garantissant ainsi que tous les éléments nécessaires sont inclus dans le rapport. Les bénéfices de cette automatisation n8n incluent une réduction significative des erreurs humaines, une augmentation de la productivité et une meilleure communication au sein des équipes, permettant ainsi de se concentrer sur des tâches à plus forte valeur ajoutée.
Tags clés :automatisationemail marketingreportingn8nproductivité
Catégorie: Manual · Tags: automatisation, email marketing, reporting, n8n, productivité0

Workflow n8n email marketing, reporting, productivité : vue d'ensemble

Schéma des nœuds et connexions de ce workflow n8n, généré à partir du JSON n8n.

Workflow n8n email marketing, reporting, productivité : détail des nœuds

  • On clicking 'execute'

    Déclenche le workflow manuellement lorsque l'utilisateur clique sur 'exécuter'.

  • SortElements

    Trie les éléments d'une liste selon les critères spécifiés.

  • Markdown

    Transforme le texte en Markdown selon les options définies.

  • CreateMDReport

    Crée un rapport au format Markdown en exécutant le code de fonction fourni.

  • Send Email

    Envoie un email avec les options, le sujet et les pièces jointes spécifiés.

  • GetImg

    Récupère des éléments en comparant les données selon les critères définis.

  • ImgBinary

    Effectue une requête HTTP pour obtenir une image à partir de l'URL fournie.

  • Merge2

    Fusionne les données de deux flux selon le mode et le type de jointure spécifiés.

  • Move Binary Data1

    Déplace les données binaires selon les options et le mode choisis.

  • GetTimesheetRecords

    Récupère les enregistrements de feuille de temps en exécutant le code de fonction donné.

Inscris-toi pour voir l'intégralité du workflow

Inscription gratuite

S'inscrire gratuitementBesoin d'aide ?
{
  "nodes": [
    {
      "name": "On clicking 'execute'",
      "type": "n8n-nodes-base.manualTrigger",
      "position": [
        120,
        560
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "name": "SortElements",
      "type": "n8n-nodes-base.itemLists",
      "position": [
        480,
        560
      ],
      "parameters": {
        "options": {},
        "operation": "sort",
        "sortFieldsUi": {
          "sortField": [
            {
              "fieldName": "UserName"
            },
            {
              "fieldName": "TaskTitle"
            },
            {
              "fieldName": "date"
            }
          ]
        }
      },
      "typeVersion": 1
    },
    {
      "name": "Markdown",
      "type": "n8n-nodes-base.markdown",
      "position": [
        1340,
        580
      ],
      "parameters": {
        "mode": "markdownToHtml",
        "options": {
          "tables": true,
          "noHeaderId": true,
          "rawHeaderId": false,
          "simpleLineBreaks": true,
          "customizedHeaderId": false,
          "completeHTMLDocument": true
        },
        "markdown": "={{$json[\"mdreport\"]}}"
      },
      "typeVersion": 1
    },
    {
      "name": "CreateMDReport",
      "type": "n8n-nodes-base.function",
      "position": [
        1160,
        580
      ],
      "parameters": {
        "functionCode": "// created report header and custom table style\nvar md_reporthead=\"#Timesheet report\\n\";\nvar md_style =  (`\n<style> table {border: 0.5px solid; border-spacing: 0px;}\n        table th {border-bottom: 0.5px solid;}\n        table thead {background: #D0E4F5;}\n        table tr:nth-child(even) { background: #D8D8D8;}\n</style>\\n\\n`);\n\nvar md_reportbody=md_style+md_reporthead;\n\n//declare several variables that are used for report generation\nvar tablehead = \"| Date | Hours | Task Description |\\n|:---|:---:|---|\\n\";\n\nvar cur_user=\"\";\nvar cur_usernum=0;\n\nvar cur_task=\"\";\nvar cur_tasktotal=0;\n\n\nfor (item of items) {\n  \n  // Check if new user\n  if (item.json.UserName != cur_user) {\n    // Close previous user's task\n    md_reportbody += (cur_tasktotal) ? \"\\n*\"+cur_tasktotal.toFixed(2)+\" - Total hours for this task*\\n\" : \"\";\n    cur_tasktotal = 0; cur_task=\"\";\n\n    // add new user and embed avatar as base64 image\n    cur_user = item.json.UserName;\n    md_reportbody += `\\n##![img](data:image/png;base64,${items[cur_usernum].binary.data.data}) ${cur_user}\\n`;\n    cur_usernum   += 1;\n  } // Check for new user - ENDIF\n\n\n  // Check if new task\n  if (item.json.TaskTitle != cur_task) {\n\n    // if not empty task - add total amount of hours for *previous* task\n    md_reportbody += (cur_tasktotal) ? `\\n*${cur_tasktotal.toFixed(2)} - Total hours for this task*\\n` : \"\";\n\n    // Add new task header and reset total hours counter\n    cur_task = item.json.TaskTitle;\n    md_reportbody += `\\n###${cur_task}\\n${tablehead}`;\n    cur_tasktotal = 0;\n  } // Check for new task - ENDIF\n\n  // Add current task + update total hours\n   md_reportbody += `| ${item.json.date.split('T',1)} | ${item.json.hours.toFixed(2)} | ${item.json.note} |\\n`;\n   cur_tasktotal += item.json.hours;\n}\n\n// Let's not forget the last task's total hours:\nmd_reportbody += (cur_tasktotal) ? `\\n*${cur_tasktotal.toFixed(2)} - Total hours for this task*\\n` : \"\";\n\n// Finalise the report\nmd_reportbody += `\\n*Timesheet report generated on: ${$now.toISODate()}*`;\nmd_reporthead += \"\\n\";\n\nreturn [{mdreport: md_reportbody}];"
      },
      "typeVersion": 1
    },
    {
      "name": "Send Email",
      "type": "n8n-nodes-base.emailSend",
      "disabled": true,
      "position": [
        1760,
        580
      ],
      "parameters": {
        "options": {
          "allowUnauthorizedCerts": false
        },
        "subject": "TimeSheet report",
        "attachments": "data"
      },
      "credentials": {
        "smtp": {
          "id": "2",
          "name": "info@stats.consult"
        }
      },
      "typeVersion": 1
    },
    {
      "name": "GetImg",
      "type": "n8n-nodes-base.itemLists",
      "position": [
        640,
        760
      ],
      "parameters": {
        "compare": "selectedFields",
        "options": {
          "removeOtherFields": true
        },
        "operation": "removeDuplicates",
        "fieldsToCompare": {
          "fields": [
            {
              "fieldName": "UserAvatar"
            }
          ]
        }
      },
      "typeVersion": 1
    },
    {
      "name": "ImgBinary",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        820,
        760
      ],
      "parameters": {
        "url": "={{$json[\"UserAvatar\"]}}",
        "options": {},
        "responseFormat": "file"
      },
      "typeVersion": 2
    },
    {
      "name": "Merge2",
      "type": "n8n-nodes-base.merge",
      "position": [
        980,
        580
      ],
      "parameters": {
        "join": "outer",
        "mode": "mergeByIndex"
      },
      "typeVersion": 1
    },
    {
      "name": "Move Binary Data1",
      "type": "n8n-nodes-base.moveBinaryData",
      "position": [
        1520,
        580
      ],
      "parameters": {
        "mode": "jsonToBinary",
        "options": {
          "fileName": "report.html",
          "mimeType": "text/html",
          "useRawData": true
        },
        "convertAllData": false
      },
      "typeVersion": 1
    },
    {
      "name": "GetTimesheetRecords",
      "type": "n8n-nodes-base.function",
      "position": [
        300,
        560
      ],
      "parameters": {
        "functionCode": "return [{UserName: \"User 1 - Lead Programmer\",\n         UserAvatar: \"https://www.gravatar.com/avatar/?d=robohash&s=32\",\n         TaskTitle: \"Admin\",\n         date: \"2022-05-31T00:00:00.0000000+02:00\",\n         note: \"Creating invoices and submitting timesheets\",\n         hours: 0.5},\n         {UserName: \"User 1 - Lead Programmer\",\n         UserAvatar: \"https://www.gravatar.com/avatar/?d=robohash&s=32\",\n         TaskTitle: \"Admin\",\n         date: \"2022-05-02T00:00:00.0000000+02:00\",\n         note: \"Reporting last month's activity\",\n         hours: 0.5},\n         {UserName: \"User 2 - Designer\",\n         UserAvatar: \"https://www.gravatar.com/avatar/?d=identicon&s=32\",\n         TaskTitle: \"Admin\",\n         date: \"2022-05-30T00:00:00.0000000+02:00\",\n         note: \"Filling timesheets\",\n         hours: 0.5},\n         {UserName: \"User 2 - Designer\",\n         UserAvatar: \"https://www.gravatar.com/avatar/?d=identicon&s=32\",\n         TaskTitle: \"Admin\",\n         date: \"2022-05-03T00:00:00.0000000+02:00\",\n         note: \"Monthly retro meeting\",\n         hours: 0.5},\n         {UserName: \"User 1 - Lead Programmer\",\n         UserAvatar: \"https://www.gravatar.com/avatar/?d=robohash&s=32\",\n         TaskTitle: \"Client 1\",\n         date: \"2022-05-26T00:00:00.0000000+02:00\",\n         note: \"Weekly meeting\",\n         hours: 0.5},\n         {UserName: \"User 1 - Lead Programmer\",\n         UserAvatar: \"https://www.gravatar.com/avatar/?d=robohash&s=32\",\n         TaskTitle: \"Client 1\",\n         date: \"2022-05-05T00:00:00.0000000+02:00\",\n         note: \"Weekly meeting\",\n         hours: 0.5},\n         {UserName: \"User 1 - Lead Programmer\",\n         UserAvatar: \"https://www.gravatar.com/avatar/?d=robohash&s=32\",\n         TaskTitle: \"Client 1\",\n         date: \"2022-05-19T00:00:00.0000000+02:00\",\n         note: \"Weekly meeting\",\n         hours: 0.5},\n         {UserName: \"User 1 - Lead Programmer\",\n         UserAvatar: \"https://www.gravatar.com/avatar/?d=robohash&s=32\",\n         TaskTitle: \"Client 1\",\n         date: \"2022-05-12T00:00:00.0000000+02:00\",\n         note: \"Weekly meeting\",\n         hours: 0.5},\n         {UserName: \"User 1 - Lead Programmer\",\n         UserAvatar: \"https://www.gravatar.com/avatar/?d=robohash&s=32\",\n         TaskTitle: \"Client 1\",\n         date: \"2022-05-12T00:00:00.0000000+02:00\",\n         note: \"Programmed new feature\",\n         hours: 4.5},\n         {UserName: \"User 1 - Lead Programmer\",\n         UserAvatar: \"https://www.gravatar.com/avatar/?d=robohash&s=32\",\n         TaskTitle: \"Client 1\",\n         date: \"2022-05-02T00:00:00.0000000+02:00\",\n         note: \"Updated this and that\",\n         hours: 2.75},\n         {UserName: \"User 2 - Designer\",\n         UserAvatar: \"https://www.gravatar.com/avatar/?d=identicon&s=32\",\n         TaskTitle: \"Client 2\",\n         date: \"2022-05-13T00:00:00.0000000+02:00\",\n         note: \"Designed a new report template\",\n         hours: 6.5},\n         {UserName: \"User 2 - Designer\",\n         UserAvatar: \"https://www.gravatar.com/avatar/?d=identicon&s=32\",\n         TaskTitle: \"Client 2\",\n         date: \"2022-05-23T00:00:00.0000000+02:00\",\n         note: \"Presented the results\",\n         hours: 1.5}\n         ];"
      },
      "typeVersion": 1
    }
  ],
  "connections": {
    "GetImg": {
      "main": [
        [
          {
            "node": "ImgBinary",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Merge2": {
      "main": [
        [
          {
            "node": "CreateMDReport",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Markdown": {
      "main": [
        [
          {
            "node": "Move Binary Data1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "ImgBinary": {
      "main": [
        [
          {
            "node": "Merge2",
            "type": "main",
            "index": 1
          }
        ]
      ]
    },
    "SortElements": {
      "main": [
        [
          {
            "node": "GetImg",
            "type": "main",
            "index": 0
          },
          {
            "node": "Merge2",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "CreateMDReport": {
      "main": [
        [
          {
            "node": "Markdown",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Move Binary Data1": {
      "main": [
        [
          {
            "node": "Send Email",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "GetTimesheetRecords": {
      "main": [
        [
          {
            "node": "SortElements",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "On clicking 'execute'": {
      "main": [
        [
          {
            "node": "GetTimesheetRecords",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}

Workflow n8n email marketing, reporting, productivité : pour qui est ce workflow ?

Ce workflow s'adresse aux équipes de gestion de projet, aux responsables de département et aux entreprises souhaitant automatiser leurs processus de reporting. Il est idéal pour les organisations de taille moyenne à grande qui cherchent à améliorer leur efficacité opérationnelle sans nécessiter de compétences techniques avancées.

Workflow n8n email marketing, reporting, productivité : problème résolu

Ce workflow résout le problème de la création manuelle de rapports, qui peut être chronophage et sujet à des erreurs. En automatisant ce processus, les utilisateurs éliminent les frustrations liées à la compilation des données et à l'envoi des rapports, tout en garantissant que les informations sont toujours à jour et correctement formatées. Le résultat est un gain de temps considérable et une communication plus fluide au sein des équipes.

Workflow n8n email marketing, reporting, productivité : étapes du workflow

Étape 1 : Le processus commence par le déclencheur manuel 'On clicking execute'.

  • Étape 1 : Les données sont triées à l'aide du nœud 'SortElements'.
  • Étape 2 : Ces données triées sont ensuite converties en format Markdown par le nœud 'Markdown'.
  • Étape 3 : Le nœud 'CreateMDReport' génère le rapport final à partir des données formatées.
  • Étape 4 : Le nœud 'Send Email' envoie le rapport par email aux destinataires définis.
  • Étape 5 : Des nœuds supplémentaires comme 'GetImg' et 'ImgBinary' permettent d'intégrer des images dans le rapport, tandis que 'Move Binary Data1' assure la gestion des données binaires.

Workflow n8n email marketing, reporting, productivité : guide de personnalisation

Pour personnaliser ce workflow, vous pouvez modifier les paramètres du nœud 'SortElements' pour ajuster les critères de tri selon vos besoins. Dans le nœud 'Markdown', vous pouvez adapter le contenu du rapport en fonction des informations que vous souhaitez inclure. Assurez-vous également de configurer correctement le nœud 'Send Email' en spécifiant les adresses des destinataires et le sujet de l'email. Si vous souhaitez intégrer d'autres outils, vous pouvez ajouter des nœuds supplémentaires pour récupérer des données externes ou envoyer des notifications via d'autres plateformes. Enfin, pour sécuriser le flux, pensez à mettre en place des vérifications d'erreurs et des logs pour suivre le bon déroulement des opérations.