Rapport d'équipe hebdomadaire automatisé pour les groupes WhatsApp avec résumé par Gemini AI

Avancé

Ceci est unProject Management, AI Summarizationworkflow d'automatisation du domainecontenant 47 nœuds.Utilise principalement des nœuds comme If, Set, Code, Filter, Switch. Rapport hebdomadaire automatisé d'équipe pour les groupes WhatsApp avec un résumé Gemini AI

Prérequis
  • Point de terminaison HTTP Webhook (généré automatiquement par n8n)
  • Clé API Google Gemini
Aperçu du workflow
Visualisation des connexions entre les nœuds, avec support du zoom et du déplacement
Exporter le workflow
Copiez la configuration JSON suivante dans n8n pour importer et utiliser ce workflow
{
  "meta": {
    "instanceId": "e42ff03bc515cd7f9edc081a89072ca1985132e0d4a1cdabe6c26855a252768f",
    "templateId": "3969"
  },
  "nodes": [
    {
      "id": "f0e89c19-ee1f-4a4d-8176-c222c18e0514",
      "name": "Simplifier le message",
      "type": "n8n-nodes-base.set",
      "position": [
        2220,
        2000
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "547e8934-e6f2-47f0-b8a0-c60bd9d8a0c3",
              "name": "ts",
              "type": "string",
              "value": "={{ $json.ts }}"
            },
            {
              "id": "22473b44-b1d9-4b85-b0d9-1a54c5511ff4",
              "name": "userId",
              "type": "string",
              "value": "={{ $('Get User').first().json.id }}"
            },
            {
              "id": "2059b147-8b12-42c9-bee8-488dc11a0bf7",
              "name": "userName",
              "type": "string",
              "value": "={{ $('Get User').first().json.name }}"
            },
            {
              "id": "34440ea6-ee99-4cd4-9e1c-cf561d335180",
              "name": "type",
              "type": "string",
              "value": "={{ $json.type }}"
            },
            {
              "id": "ff1155c5-43e1-4e0e-82a8-9e013a7f1db1",
              "name": "text",
              "type": "string",
              "value": "={{ $json.text.replace(/(<@[^>]+>)/ig, '').trim() }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "1293a7cf-1467-432f-b7ed-606146618808",
      "name": "Grouper par utilisateur",
      "type": "n8n-nodes-base.code",
      "position": [
        1540,
        1460
      ],
      "parameters": {
        "jsCode": "const keyByUser = $input.all()\n  .map(item => item.json)\n  .reduce((acc, message) => {\n    return {\n      ...acc,\n      [message.user]: Array.isArray(acc[message.user])\n        ?  acc[message.user].concat(message)\n        : [message]\n    }\n  }, {});\n\nreturn {\n  data: Object\n    .keys(keyByUser)\n    .map(key => keyByUser[key])\n};"
      },
      "typeVersion": 2
    },
    {
      "id": "681a2368-9688-4ebd-bb88-f48c7ccb3e54",
      "name": "Séparer",
      "type": "n8n-nodes-base.splitOut",
      "position": [
        1740,
        1460
      ],
      "parameters": {
        "options": {},
        "fieldToSplitOut": "data"
      },
      "typeVersion": 1
    },
    {
      "id": "38a5e6b0-ba4a-4aaa-93f2-ec2a73e5e1af",
      "name": "Messages en éléments",
      "type": "n8n-nodes-base.code",
      "position": [
        2000,
        2000
      ],
      "parameters": {
        "jsCode": "return Object.values($('Switch').first().json.data)"
      },
      "typeVersion": 2
    },
    {
      "id": "c5d0b4d1-94eb-4e14-9985-85d384d6d96f",
      "name": "Agréger",
      "type": "n8n-nodes-base.aggregate",
      "position": [
        2440,
        2000
      ],
      "parameters": {
        "options": {},
        "aggregate": "aggregateAllItemData",
        "destinationFieldName": "messages"
      },
      "typeVersion": 1
    },
    {
      "id": "47537a27-90d9-4edc-b9f4-66205bc4a4c2",
      "name": "Séparer1",
      "type": "n8n-nodes-base.splitOut",
      "position": [
        1780,
        2400
      ],
      "parameters": {
        "options": {},
        "fieldToSplitOut": "data.messages"
      },
      "typeVersion": 1
    },
    {
      "id": "0fc6664f-9076-4525-acaa-0f5009de2611",
      "name": "Agréger1",
      "type": "n8n-nodes-base.aggregate",
      "position": [
        3320,
        2480
      ],
      "parameters": {
        "options": {},
        "aggregate": "aggregateAllItemData",
        "destinationFieldName": "replies"
      },
      "typeVersion": 1
    },
    {
      "id": "caf963e5-3d5b-42d8-88ce-1fb5bf03a528",
      "name": "Simplifier les commentaires de fil",
      "type": "n8n-nodes-base.set",
      "position": [
        3100,
        2400
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "82bc8cbe-c606-4717-b29d-2d8acc149271",
              "name": "ts",
              "type": "string",
              "value": "={{ $json.ts }}"
            },
            {
              "id": "8fcc957d-aa9f-47df-99e8-560228fde30f",
              "name": "userId",
              "type": "string",
              "value": "={{ $json.user }}"
            },
            {
              "id": "e6c6deb3-c3ba-4452-be7c-1a0c42c5dc2c",
              "name": "userName",
              "type": "string",
              "value": ""
            },
            {
              "id": "31d1206d-ecbd-48d3-a00a-845fd53d1cfa",
              "name": "type",
              "type": "string",
              "value": "={{ $json.type }}"
            },
            {
              "id": "da126e6c-8dfc-41aa-991a-231b3cb3004b",
              "name": "text",
              "type": "string",
              "value": "={{ $json.text }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "aab0ae1c-50da-49e5-a373-c32b39108041",
      "name": "Filtrer",
      "type": "n8n-nodes-base.filter",
      "position": [
        2880,
        2400
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "a6d43072-380e-40f2-985b-faeffdaffdce",
              "operator": {
                "type": "string",
                "operation": "notEquals"
              },
              "leftValue": "={{ $('Split Out1').item.json.ts }}",
              "rightValue": "={{ $json.ts }}"
            }
          ]
        }
      },
      "typeVersion": 2.2,
      "alwaysOutputData": true
    },
    {
      "id": "35cdb470-a9eb-4544-999c-5360dda0f1a3",
      "name": "Référence du message",
      "type": "n8n-nodes-base.noOp",
      "position": [
        2220,
        2400
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "95500787-7965-4951-a729-615feb636021",
      "name": "Séparer2",
      "type": "n8n-nodes-base.splitOut",
      "position": [
        2220,
        2700
      ],
      "parameters": {
        "options": {},
        "fieldToSplitOut": "replyUsers"
      },
      "typeVersion": 1
    },
    {
      "id": "250d61cc-120d-4c0c-8220-f9a68a90b667",
      "name": "Mapper les ID utilisateur de réponse",
      "type": "n8n-nodes-base.set",
      "position": [
        1780,
        2780
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "dda6e3d8-0097-4621-9619-07cf39e93018",
              "name": "replyUsers",
              "type": "array",
              "value": "={{\n$json.data.messages\n  .flatMap(item => item.replies.flatMap(reply => reply.userId))\n  .compact()\n  .unique()\n}}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "e98acd0f-f1e3-47f4-ae9c-7259462cf231",
      "name": "Google Gemini Chat Model",
      "type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini",
      "position": [
        3640,
        3000
      ],
      "parameters": {
        "options": {},
        "modelName": "models/gemini-2.0-flash"
      },
      "typeVersion": 1
    },
    {
      "id": "0ffb9b87-43db-4417-8c37-384a33cbb830",
      "name": "Synthétiser les fils",
      "type": "@n8n/n8n-nodes-langchain.chainLlm",
      "position": [
        3540,
        2780
      ],
      "parameters": {
        "text": "=## Message\n{{ $json.userName }} (<@{{ $json.userId }}>) says at {{ new DateTime(parseFloat($json.ts)*1000).format('d MMM HH:mma') }}:\n> {{ $json.text }}\n\n## {{ ($json.replies ?? []).compact().length }} Replies\n{{\n($json.replies ?? [])\n  .compact()\n    .map(reply => ({\n      ...reply,\n      userName: $('Reply Users').item.json.data\n        .find(user => user.id === reply.userId)?.name\n    }))\n    .map(reply =>\n      `* ${new DateTime(parseFloat($json.ts)*1000).format('d MMM HH:mma')}, ${reply.userName} (<@${reply.userId}>) replies: ${reply.text}`\n)\n    .join('\\n')\n  \n}}",
        "messages": {
          "messageValues": [
            {
              "message": "=Summarize the topic of the slack message and the resulting conversation from the replies (if any). Highlight any achievements, accomplishments, attempts or challenges mentioned."
            }
          ]
        },
        "promptType": "define"
      },
      "typeVersion": 1.6
    },
    {
      "id": "678a48ec-acb1-4c42-b8c9-d4cd762e4a2a",
      "name": "Agréger2",
      "type": "n8n-nodes-base.aggregate",
      "position": [
        3920,
        2780
      ],
      "parameters": {
        "options": {},
        "aggregate": "aggregateAllItemData"
      },
      "typeVersion": 1
    },
    {
      "id": "ab39b117-e1bd-495f-a92d-fb79973b3601",
      "name": "Agréger les utilisateurs ayant répondu",
      "type": "n8n-nodes-base.aggregate",
      "position": [
        2880,
        2700
      ],
      "parameters": {
        "options": {},
        "aggregate": "aggregateAllItemData"
      },
      "typeVersion": 1
    },
    {
      "id": "c71b7ca6-8245-4262-b2f1-abea511390d6",
      "name": "Utilisateurs ayant répondu",
      "type": "n8n-nodes-base.set",
      "position": [
        3100,
        2780
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "9f721cde-2d36-40ee-b7d8-a920695157a9",
              "name": "data",
              "type": "array",
              "value": "={{ $json.data ?? [] }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "4b2c452b-4e68-4536-aa58-a85fd586c606",
      "name": "Google Gemini Chat Model1",
      "type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini",
      "position": [
        3080,
        1620
      ],
      "parameters": {
        "options": {},
        "modelName": "models/gemini-2.0-flash"
      },
      "typeVersion": 1
    },
    {
      "id": "d65b4f27-52ab-4c29-8692-ee2835fddd17",
      "name": "Boucler sur les éléments",
      "type": "n8n-nodes-base.splitInBatches",
      "position": [
        2000,
        2400
      ],
      "parameters": {
        "options": {}
      },
      "typeVersion": 3
    },
    {
      "id": "cfb55c7f-a89d-4ce4-8709-31e5e119c6ee",
      "name": "Agréger3",
      "type": "n8n-nodes-base.set",
      "position": [
        2440,
        2200
      ],
      "parameters": {
        "mode": "raw",
        "options": {},
        "jsonOutput": "={{\n{\n  ...$('Split Out1').item.json,\n  replies: $json.replies.filter(reply => reply.ts)\n}\n}}\n"
      },
      "typeVersion": 3.4
    },
    {
      "id": "8b70e30c-99d5-4086-85aa-e6cfcc7f14e7",
      "name": "Agréger4",
      "type": "n8n-nodes-base.aggregate",
      "position": [
        2660,
        2200
      ],
      "parameters": {
        "options": {},
        "aggregate": "aggregateAllItemData"
      },
      "typeVersion": 1
    },
    {
      "id": "1cef5853-d301-49cb-9f58-c1a9128b8b33",
      "name": "Lorsqu'exécuté par un autre workflow",
      "type": "n8n-nodes-base.executeWorkflowTrigger",
      "position": [
        1120,
        2400
      ],
      "parameters": {
        "workflowInputs": {
          "values": [
            {
              "name": "action"
            },
            {
              "name": "data",
              "type": "object"
            }
          ]
        }
      },
      "typeVersion": 1.1
    },
    {
      "id": "b30c2433-3bfe-480f-a4bd-8c41900802a2",
      "name": "Commutateur",
      "type": "n8n-nodes-base.switch",
      "position": [
        1340,
        2400
      ],
      "parameters": {
        "rules": {
          "values": [
            {
              "outputKey": "users",
              "conditions": {
                "options": {
                  "version": 2,
                  "leftValue": "",
                  "caseSensitive": true,
                  "typeValidation": "strict"
                },
                "combinator": "and",
                "conditions": [
                  {
                    "id": "fa924990-9f6e-40c4-aaec-50d4f5927414",
                    "operator": {
                      "type": "string",
                      "operation": "equals"
                    },
                    "leftValue": "={{ $json.action }}",
                    "rightValue": "users"
                  }
                ]
              },
              "renameOutput": true
            },
            {
              "outputKey": "message_replies",
              "conditions": {
                "options": {
                  "version": 2,
                  "leftValue": "",
                  "caseSensitive": true,
                  "typeValidation": "strict"
                },
                "combinator": "and",
                "conditions": [
                  {
                    "id": "26ce01b2-9e5b-43e8-926d-9d726c9ca74d",
                    "operator": {
                      "name": "filter.operator.equals",
                      "type": "string",
                      "operation": "equals"
                    },
                    "leftValue": "={{ $json.action }}",
                    "rightValue": "message_replies"
                  }
                ]
              },
              "renameOutput": true
            },
            {
              "outputKey": "message_summarize",
              "conditions": {
                "options": {
                  "version": 2,
                  "leftValue": "",
                  "caseSensitive": true,
                  "typeValidation": "strict"
                },
                "combinator": "and",
                "conditions": [
                  {
                    "id": "45fd7264-6ac3-4bbd-8a91-c4cfb33b4545",
                    "operator": {
                      "name": "filter.operator.equals",
                      "type": "string",
                      "operation": "equals"
                    },
                    "leftValue": "={{ $json.action }}",
                    "rightValue": "message_summarize"
                  }
                ]
              },
              "renameOutput": true
            }
          ]
        },
        "options": {}
      },
      "typeVersion": 3.2
    },
    {
      "id": "b05735c3-4beb-4a80-8297-85e952e81270",
      "name": "Mapper les utilisateurs aux messages",
      "type": "n8n-nodes-base.executeWorkflow",
      "position": [
        2020,
        1460
      ],
      "parameters": {
        "mode": "each",
        "options": {},
        "workflowId": {
          "__rl": true,
          "mode": "id",
          "value": "={{ $workflow.id }}"
        },
        "workflowInputs": {
          "value": {
            "data": "={{ $json }}",
            "action": "users"
          },
          "schema": [
            {
              "id": "action",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "action",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "data",
              "type": "object",
              "display": true,
              "required": false,
              "displayName": "data",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [],
          "attemptToConvertTypes": false,
          "convertFieldsToString": true
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "28ed52b2-b0c3-4f19-b394-347c8ff9e323",
      "name": "Obtenir les infos utilisateur",
      "type": "n8n-nodes-base.set",
      "position": [
        2660,
        2000
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "17344879-1e10-4738-8db0-6e0daddea920",
              "name": "user",
              "type": "object",
              "value": "={{\n{\n  id: $('Get User').item.json.id,\n  team_id: $('Get User').item.json.team_id,\n  name: $('Get User').item.json.name,\n  is_bot: $('Get User').item.json.is_bot\n}\n}}"
            }
          ]
        },
        "includeOtherFields": true
      },
      "typeVersion": 3.4
    },
    {
      "id": "bbd7c77e-2405-4e63-ae38-f064beafab9c",
      "name": "Récupérer les réponses aux messages",
      "type": "n8n-nodes-base.executeWorkflow",
      "position": [
        2240,
        1460
      ],
      "parameters": {
        "mode": "each",
        "options": {},
        "workflowId": {
          "__rl": true,
          "mode": "id",
          "value": "={{ $workflow.id }}"
        },
        "workflowInputs": {
          "value": {
            "data": "={{ $json }}",
            "action": "message_replies"
          },
          "schema": [
            {
              "id": "action",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "action",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "data",
              "type": "object",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "data",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [],
          "attemptToConvertTypes": false,
          "convertFieldsToString": true
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "edf34e72-04b4-4fed-a3af-42dec1c7ed17",
      "name": "A des ReplyUsers ?",
      "type": "n8n-nodes-base.if",
      "position": [
        2000,
        2780
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "813d9fea-9de0-4151-aa45-d38a42f808b8",
              "operator": {
                "type": "array",
                "operation": "notEmpty",
                "singleValue": true
              },
              "leftValue": "={{ $json.replyUsers }}",
              "rightValue": ""
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "dc9c6cf0-c627-4311-9160-62204e9b67e0",
      "name": "Messages en éléments1",
      "type": "n8n-nodes-base.code",
      "position": [
        3320,
        2780
      ],
      "parameters": {
        "jsCode": "return $('Switch').first().json.data.messages"
      },
      "typeVersion": 2
    },
    {
      "id": "0b830a49-c77e-41f3-8d70-47a26bfe0a0e",
      "name": "Agréger les résultats",
      "type": "n8n-nodes-base.set",
      "position": [
        2780,
        1460
      ],
      "parameters": {
        "mode": "raw",
        "options": {},
        "jsonOutput": "={{\n{\n  ...$('Map Users to Messages').item.json,\n  messages: $('Fetch Message Replies').item.json.data\n  .map((message,idx) => ({\n    ...message,\n    summary: $json.data[idx].text,\n  }))\n}\n}}"
      },
      "typeVersion": 3.4
    },
    {
      "id": "b0c66c7f-0fed-465c-8933-7b803c9b3b64",
      "name": "Agent de rapport hebdomadaire par membre",
      "type": "@n8n/n8n-nodes-langchain.chainLlm",
      "position": [
        2980,
        1460
      ],
      "parameters": {
        "text": "={{\n$json.messages\n  .map((message,idx) =>\n    `${message.userName} (<@${message.userId}>) posted on ${new Date(parseFloat(message.ts) * 1000).format('d MMM')}:\\n> \\\"${message.text}\\\".\\nThe summary of this thread is as follows:\\n${message.summary.replaceAll('\\n', ' ')}`\n  )\n  .join('\\n---\\n')\n}}",
        "messages": {
          "messageValues": [
            {
              "message": "=Your are energetic assistant who produces weekly mini-reports on team members by analysing their slack messages from last week and posts these reports on the following Monday.\nThere has already been some work done to collect and summarise each thread made by the user within the last week.\nYour task is to summarize all the threads by this user and any interactions with other users involved and produce a mini report to share with other team members.\nFocus on wins and challenges.\nAim to motivate and call out any outstanding concerns where appropriate.\nWelcome any new team members who may have joined and say good bye to those who may have left."
            }
          ]
        },
        "promptType": "define"
      },
      "typeVersion": 1.6
    },
    {
      "id": "e4a487ae-8d71-4fe6-a760-7a0fb95a8fac",
      "name": "Fusionner avec les résultats",
      "type": "n8n-nodes-base.set",
      "position": [
        3480,
        1460
      ],
      "parameters": {
        "mode": "raw",
        "options": {},
        "jsonOutput": "={{\n{\n  ...$('Aggregate Results').item.json,\n  report: $json.text,\n}\n}}"
      },
      "typeVersion": 3.4
    },
    {
      "id": "06736a5c-7450-406a-ad3a-08a368d1addf",
      "name": "Agent de rapport hebdomadaire d'équipe",
      "type": "@n8n/n8n-nodes-langchain.chainLlm",
      "position": [
        3700,
        1460
      ],
      "parameters": {
        "text": "={{\n$input.all()\n  .map(item => item.json)\n  .map(item =>\n`user: ${item.user.name} <@${item.user.id}>\nmessage count: ${item.messages.length}\nreport: ${item.report.replaceAll('\\n', ' ')}`\n  ).join('\\n---\\n')\n}}",
        "messages": {
          "messageValues": [
            {
              "message": "=Your are energetic assistant who produces a team-wide weekly report from all activity of all team members in the prior last week and posts this single report on the following Monday.\nThere has already been some work done to collect individual reports from team members.\nYour task is generate a report covering the team to prepare and motivate them for the upcoming week.\nFocus on wins and challenges if available.\nLook out for similar activities between members and make a connection if possible.\nAim to motivate and call out any outstanding concerns where appropriate.\nWelcome any new team members who may have joined and say good bye to those who may have left."
            }
          ]
        },
        "promptType": "define"
      },
      "executeOnce": true,
      "typeVersion": 1.6
    },
    {
      "id": "eef36957-9bf0-4be3-95a8-73bbefdc0c85",
      "name": "Google Gemini Chat Model2",
      "type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini",
      "position": [
        3780,
        1620
      ],
      "parameters": {
        "options": {},
        "modelName": "models/gemini-2.0-flash"
      },
      "typeVersion": 1
    },
    {
      "id": "b9a11c72-de41-4a45-85a0-672cf54ef152",
      "name": "Note adhésive",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        860,
        1180
      ],
      "parameters": {
        "color": 7,
        "width": 820,
        "height": 520,
        "content": "## 1. Fetch All Activity from Last Week\n[Learn more about the WhapAround.pro node]\n\nWe'll start by fetching all activity in our whatsapp broupsl over the last 7 days and group them  by the message author. We can do this using the whapAround.pro configured with Webhook with a DateTime filter. This will give us the raw data to pick apart and analyse for reporting purposes."
      },
      "typeVersion": 1
    },
    {
      "id": "8afc048f-ce06-46c3-916f-cbcf14bcfe2b",
      "name": "Note adhésive1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1700,
        1180
      ],
      "parameters": {
        "color": 7,
        "width": 760,
        "height": 520,
        "content": "## 2. Summarise Messages Threads & Conversations\n[Learn more about the Execute Workflow node](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.executeworkflow)\n\nWe'll do some more data mining by fetching all replies for each of these top level channel messages. By doing so, we get the full context of the conversation and can hopefully pick up some decisions, discoveries or concerns to add to our report. This data mining does require juggling a lot of \"items\" which becomes hard to manage so we'll use subworkflows to simplify this work.\n\nOnce the data mining is complete, we can summarize each thread with AI and ensure we're capturing only the significant events which are report-worthy."
      },
      "typeVersion": 1
    },
    {
      "id": "c9a7358c-fbe7-435a-b435-d7b07599bdc6",
      "name": "Note adhésive2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2480,
        1180
      ],
      "parameters": {
        "color": 7,
        "width": 660,
        "height": 620,
        "content": "## 3. Generate Activity Reports for Each Team Member\n[Learn more about the Basic LLM node](https://docs.n8n.io/integrations/builtin/cluster-nodes/root-nodes/n8n-nodes-langchain.chainllm)\n\nWith our summarized threads which are grouped per user, we can aggregate them and give them to the AI again to generate a weekly report for the team member. This could include their wins, challenges, learnings or decisions - it really is up to you as to what the report looks like.\n\nA fun part of this output is getting to decide the tone of voice and delivery of the report. Don't be a bore and consider adding some personality and flair!"
      },
      "typeVersion": 1
    },
    {
      "id": "add32ef0-b515-44e6-a234-0a0fa77f4e84",
      "name": "Synthétiser les fils de messages",
      "type": "n8n-nodes-base.executeWorkflow",
      "position": [
        2460,
        1460
      ],
      "parameters": {
        "mode": "each",
        "options": {},
        "workflowId": {
          "__rl": true,
          "mode": "id",
          "value": "={{ $workflow.id }}"
        },
        "workflowInputs": {
          "value": {
            "data": "={{\n{\n  ...$('Map Users to Messages').item.json,\n  messages: $json.data\n}\n}}",
            "action": "message_summarize"
          },
          "schema": [
            {
              "id": "action",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "action",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "data",
              "type": "object",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "data",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [],
          "attemptToConvertTypes": false,
          "convertFieldsToString": true
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "17f2f45e-2c95-4b3c-b6db-a2881ae88964",
      "name": "Note adhésive3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        3160,
        1180
      ],
      "parameters": {
        "color": 7,
        "width": 680,
        "height": 620,
        "content": "## 4. Generate Final Report for Whole Team\n[Learn more about the Basic LLM node](https://docs.n8n.io/integrations/builtin/cluster-nodes/root-nodes/n8n-nodes-langchain.chainllm)\n\nIn this step, we go one level higher and aggregate all individual team member reports together into a big team report. In this way, the overview can group similar activities and generalise activities in a broader sense. The message output will also be shorter which some may find easier to digest."
      },
      "typeVersion": 1
    },
    {
      "id": "18cc7fa7-603c-4165-97c6-80d72fd4a9a6",
      "name": "Note adhésive4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        3860,
        1180
      ],
      "parameters": {
        "color": 7,
        "width": 680,
        "height": 620,
        "content": "## 5. Post Report on Team Channel (on Monday Morning!)\n[Learn more about the Slack node](https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.slack)\n\nFinally, we can post the weekly report in the team channel. This is a great way to automate quick recaps for the team after the weekend break, get others back on track if they've been away or update client team who may pop in now and again to collaborate."
      },
      "typeVersion": 1
    },
    {
      "id": "9cd8bdd6-5fc7-4e44-bcd0-058bc5d11335",
      "name": "Note adhésive5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        860,
        1980
      ],
      "parameters": {
        "color": 7,
        "width": 560,
        "height": 340,
        "content": "## 5. SubWorkflows\n[Read more about Execute Workflow Trigger](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.executeworkflowtrigger)\n\nIncorporating Subworkflows into your main workflow is an advanced technique and sometimes necessary if you're working with a lot of nested items or loops.\n\nIn this scenario, we perform quite a few lookups to get the data we need; users, messages and replies, which in template terms would require many loop nodes to string together. However, when you nest loops nodes within loop nodes, item reference becomes difficult to keep track of.\n\nUsing subworkflows, we can break down each loop into a separate execution which handles items and item references in a simpler, linear way. The result is predictable data flow throughout our template. "
      },
      "typeVersion": 1
    },
    {
      "id": "6f6fc730-5fc8-4dcc-b86d-e3b2f0e792a0",
      "name": "Lundi à 6h",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        920,
        1460
      ],
      "parameters": {
        "rule": {
          "interval": [
            {
              "field": "cronExpression",
              "expression": "0 6 * * 1"
            }
          ]
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "ab94557c-debb-425c-ac83-62e39e43d28b",
      "name": "Note adhésive6",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        380,
        240
      ],
      "parameters": {
        "width": 420,
        "height": 1460,
        "content": "## Try It Out!\n# WhatsApp Weekly Summary Template\n\nThis n8n template automatically creates weekly summaries of your WhatsApp group activity and sends a report to keep your team in sync.\n\n## The Problem\nWhatsApp conversations move fast. Important ideas, decisions, and information get buried in endless message threads and are forgotten by Monday morning.\n\n## The Solution\nAI automatically reviews your group's past week of messages every Monday morning and creates a focused summary report to start the week right.\n\n## How It Works\n1. **Monday 6am**: Automatically collects all group messages from the past week\n2. **Groups messages**: Organizes conversations by user and identifies key discussions\n3. **AI analysis**: Extracts important highlights and observations from the raw messages\n4. **Individual summaries**: Creates focused reports for each team member's contributions\n5. **Team overview**: Combines individual reports into one weekly team summary\n6. **Delivery**: Posts the summary to your WhatsApp group first thing Monday morning\n\n## Best Use Cases\n- Project teams using WhatsApp as their main communication channel\n- Groups where most work discussions happen in one chat\n- Teams that need weekly alignment without endless scroll-back\n\n## Setup Tips\n- Filter for specific team members if you want focused updates\n- Customize the report tone (casual vs formal) based on your audience\n- Works best with active groups that have regular weekly activity\n\n## Requirements\n- WhapAround.pro\n- Gemini AI"
      },
      "typeVersion": 1
    },
    {
      "id": "f31ae57f-50c8-47bc-bebb-d5ad51b63f16",
      "name": "WhapAround.pro",
      "type": "n8n-nodes-base.respondToWebhook",
      "position": [
        1200,
        1460
      ],
      "parameters": {
        "options": {}
      },
      "typeVersion": 1.2
    },
    {
      "id": "2b423e5a-c7ed-4ea2-b4f8-c49a1be26587",
      "name": "Répondre à Webhook",
      "type": "n8n-nodes-base.respondToWebhook",
      "position": [
        4240,
        1460
      ],
      "parameters": {
        "options": {}
      },
      "typeVersion": 1.2
    },
    {
      "id": "0b4af0d1-0d92-421c-b5c8-2847311204d2",
      "name": "whapAround.pro",
      "type": "n8n-nodes-base.respondToWebhook",
      "position": [
        1720,
        2100
      ],
      "parameters": {
        "options": {}
      },
      "typeVersion": 1.2
    },
    {
      "id": "9cc9571b-a8c7-4f5b-8886-aa9f95e2788d",
      "name": "whapAround.pro-2",
      "type": "n8n-nodes-base.respondToWebhook",
      "position": [
        2580,
        2700
      ],
      "parameters": {
        "options": {}
      },
      "typeVersion": 1.2
    },
    {
      "id": "d8d541b2-eee9-46f8-882c-835ace7c259d",
      "name": "whapAround.pro-1",
      "type": "n8n-nodes-base.respondToWebhook",
      "position": [
        2560,
        2400
      ],
      "parameters": {
        "options": {}
      },
      "typeVersion": 1.2
    }
  ],
  "pinData": {},
  "connections": {
    "aab0ae1c-50da-49e5-a373-c32b39108041": {
      "main": [
        [
          {
            "node": "caf963e5-3d5b-42d8-88ce-1fb5bf03a528",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "b30c2433-3bfe-480f-a4bd-8c41900802a2": {
      "main": [
        [
          {
            "node": "0b4af0d1-0d92-421c-b5c8-2847311204d2",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "47537a27-90d9-4edc-b9f4-66205bc4a4c2",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "250d61cc-120d-4c0c-8220-f9a68a90b667",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "c5d0b4d1-94eb-4e14-9985-85d384d6d96f": {
      "main": [
        [
          {
            "node": "28ed52b2-b0c3-4f19-b394-347c8ff9e323",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "681a2368-9688-4ebd-bb88-f48c7ccb3e54": {
      "main": [
        [
          {
            "node": "b05735c3-4beb-4a80-8297-85e952e81270",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "0fc6664f-9076-4525-acaa-0f5009de2611": {
      "main": [
        [
          {
            "node": "d65b4f27-52ab-4c29-8692-ee2835fddd17",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "678a48ec-acb1-4c42-b8c9-d4cd762e4a2a": {
      "main": [
        []
      ]
    },
    "cfb55c7f-a89d-4ce4-8709-31e5e119c6ee": {
      "main": [
        [
          {
            "node": "8b70e30c-99d5-4086-85aa-e6cfcc7f14e7",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "8b70e30c-99d5-4086-85aa-e6cfcc7f14e7": {
      "main": [
        []
      ]
    },
    "47537a27-90d9-4edc-b9f4-66205bc4a4c2": {
      "main": [
        [
          {
            "node": "d65b4f27-52ab-4c29-8692-ee2835fddd17",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "95500787-7965-4951-a729-615feb636021": {
      "main": [
        [
          {
            "node": "9cc9571b-a8c7-4f5b-8886-aa9f95e2788d",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "35cdb470-a9eb-4544-999c-5360dda0f1a3": {
      "main": [
        [
          {
            "node": "d8d541b2-eee9-46f8-882c-835ace7c259d",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "c71b7ca6-8245-4262-b2f1-abea511390d6": {
      "main": [
        [
          {
            "node": "dc9c6cf0-c627-4311-9160-62204e9b67e0",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "6f6fc730-5fc8-4dcc-b86d-e3b2f0e792a0": {
      "main": [
        [
          {
            "node": "f31ae57f-50c8-47bc-bebb-d5ad51b63f16",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "1293a7cf-1467-432f-b7ed-606146618808": {
      "main": [
        [
          {
            "node": "681a2368-9688-4ebd-bb88-f48c7ccb3e54",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "f31ae57f-50c8-47bc-bebb-d5ad51b63f16": {
      "main": [
        [
          {
            "node": "1293a7cf-1467-432f-b7ed-606146618808",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "0b4af0d1-0d92-421c-b5c8-2847311204d2": {
      "main": [
        [
          {
            "node": "38a5e6b0-ba4a-4aaa-93f2-ec2a73e5e1af",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "edf34e72-04b4-4fed-a3af-42dec1c7ed17": {
      "main": [
        [
          {
            "node": "95500787-7965-4951-a729-615feb636021",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "c71b7ca6-8245-4262-b2f1-abea511390d6",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "d65b4f27-52ab-4c29-8692-ee2835fddd17": {
      "main": [
        [
          {
            "node": "cfb55c7f-a89d-4ce4-8709-31e5e119c6ee",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "35cdb470-a9eb-4544-999c-5360dda0f1a3",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "f0e89c19-ee1f-4a4d-8176-c222c18e0514": {
      "main": [
        [
          {
            "node": "c5d0b4d1-94eb-4e14-9985-85d384d6d96f",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "d8d541b2-eee9-46f8-882c-835ace7c259d": {
      "main": [
        [
          {
            "node": "aab0ae1c-50da-49e5-a373-c32b39108041",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "9cc9571b-a8c7-4f5b-8886-aa9f95e2788d": {
      "main": [
        [
          {
            "node": "ab39b117-e1bd-495f-a92d-fb79973b3601",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "0b830a49-c77e-41f3-8d70-47a26bfe0a0e": {
      "main": [
        [
          {
            "node": "b0c66c7f-0fed-465c-8933-7b803c9b3b64",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "250d61cc-120d-4c0c-8220-f9a68a90b667": {
      "main": [
        [
          {
            "node": "edf34e72-04b4-4fed-a3af-42dec1c7ed17",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "38a5e6b0-ba4a-4aaa-93f2-ec2a73e5e1af": {
      "main": [
        [
          {
            "node": "f0e89c19-ee1f-4a4d-8176-c222c18e0514",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "0ffb9b87-43db-4417-8c37-384a33cbb830": {
      "main": [
        [
          {
            "node": "678a48ec-acb1-4c42-b8c9-d4cd762e4a2a",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "e4a487ae-8d71-4fe6-a760-7a0fb95a8fac": {
      "main": [
        [
          {
            "node": "06736a5c-7450-406a-ad3a-08a368d1addf",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "dc9c6cf0-c627-4311-9160-62204e9b67e0": {
      "main": [
        [
          {
            "node": "0ffb9b87-43db-4417-8c37-384a33cbb830",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "ab39b117-e1bd-495f-a92d-fb79973b3601": {
      "main": [
        [
          {
            "node": "c71b7ca6-8245-4262-b2f1-abea511390d6",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "bbd7c77e-2405-4e63-ae38-f064beafab9c": {
      "main": [
        [
          {
            "node": "add32ef0-b515-44e6-a234-0a0fa77f4e84",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "b05735c3-4beb-4a80-8297-85e952e81270": {
      "main": [
        [
          {
            "node": "bbd7c77e-2405-4e63-ae38-f064beafab9c",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "e98acd0f-f1e3-47f4-ae9c-7259462cf231": {
      "ai_languageModel": [
        [
          {
            "node": "0ffb9b87-43db-4417-8c37-384a33cbb830",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "caf963e5-3d5b-42d8-88ce-1fb5bf03a528": {
      "main": [
        [
          {
            "node": "0fc6664f-9076-4525-acaa-0f5009de2611",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "06736a5c-7450-406a-ad3a-08a368d1addf": {
      "main": [
        [
          {
            "node": "2b423e5a-c7ed-4ea2-b4f8-c49a1be26587",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "4b2c452b-4e68-4536-aa58-a85fd586c606": {
      "ai_languageModel": [
        [
          {
            "node": "b0c66c7f-0fed-465c-8933-7b803c9b3b64",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "eef36957-9bf0-4be3-95a8-73bbefdc0c85": {
      "ai_languageModel": [
        [
          {
            "node": "06736a5c-7450-406a-ad3a-08a368d1addf",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "add32ef0-b515-44e6-a234-0a0fa77f4e84": {
      "main": [
        [
          {
            "node": "0b830a49-c77e-41f3-8d70-47a26bfe0a0e",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "b0c66c7f-0fed-465c-8933-7b803c9b3b64": {
      "main": [
        [
          {
            "node": "e4a487ae-8d71-4fe6-a760-7a0fb95a8fac",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "1cef5853-d301-49cb-9f58-c1a9128b8b33": {
      "main": [
        [
          {
            "node": "b30c2433-3bfe-480f-a4bd-8c41900802a2",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}
Foire aux questions

Comment utiliser ce workflow ?

Copiez le code de configuration JSON ci-dessus, créez un nouveau workflow dans votre instance n8n et sélectionnez "Importer depuis le JSON", collez la configuration et modifiez les paramètres d'authentification selon vos besoins.

Dans quelles scénarios ce workflow est-il adapté ?

Avancé - Gestion de projet, Résumé IA

Est-ce payant ?

Ce workflow est entièrement gratuit et peut être utilisé directement. Veuillez noter que les services tiers utilisés dans le workflow (comme l'API OpenAI) peuvent nécessiter un paiement de votre part.

Informations sur le workflow
Niveau de difficulté
Avancé
Nombre de nœuds47
Catégorie2
Types de nœuds16
Description de la difficulté

Adapté aux utilisateurs avancés, avec des workflows complexes contenant 16+ nœuds

Auteur
Jamot

Jamot

@jamot

Elevating Human Well-being Through Accessible AI Technologies.

Liens externes
Voir sur n8n.io

Partager ce workflow

Catégories

Catégories: 34