Envoyer automatiquement les comptes-rendus de réunions de Telegram vers Airtable, Slack et Gmail

Avancé

Ceci est unAI Summarization, Multimodal AIworkflow d'automatisation du domainecontenant 29 nœuds.Utilise principalement des nœuds comme If, Code, Wait, Gmail, Slack. Utiliser GPT-4.1 pour créer des procès-verbaux de réunions à partir de messages Telegram et les envoyer vers Airtable, Slack, Gmail

Prérequis
  • Compte Google et informations d'identification Gmail API
  • Token Bot Slack ou URL Webhook
  • Clé API Airtable
  • Token Bot Telegram
  • Clé API OpenAI
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
{
  "id": "VbaVgnhJ7phMHTY9",
  "meta": {
    "instanceId": "18b0d04ad5030054be4ab49562e84ea4a079ab4cb036003697394140227c7e76",
    "templateCredsSetupCompleted": true
  },
  "name": "Automatic meeting records sent from Telegram to Airtable, Slack and Gmail",
  "tags": [],
  "nodes": [
    {
      "id": "af08414c-6227-4af0-831a-5832d7a2833c",
      "name": "GPT-4 Modèle de générateur d'emails",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "position": [
        -560,
        1552
      ],
      "parameters": {
        "model": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4.1-mini"
        },
        "options": {}
      },
      "credentials": {
        "openAiApi": {
          "id": "UaZZMb9MgNQPJ0Sn",
          "name": "OpenAi account 2"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "98f24854-770a-45c7-b2b4-4be331d64ecc",
      "name": "Envoyer l'email",
      "type": "n8n-nodes-base.gmail",
      "position": [
        752,
        1456
      ],
      "webhookId": "e367edf9-5bc0-474c-9b96-d694a2660ee2",
      "parameters": {
        "sendTo": "={{ $('Create a record').item.json.fields.Email }}",
        "message": "={{ $('Create a record').item.json.fields.Report }}",
        "options": {},
        "subject": "={{ $('Create a record').item.json.fields.subject }}"
      },
      "credentials": {
        "gmailOAuth2": {
          "id": "h1ZY21K9DQNwgOhO",
          "name": "GMAIL BAPTISTE FORT"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "dfd67f2c-f977-4ef6-98c2-1433eca110dc",
      "name": "Si",
      "type": "n8n-nodes-base.if",
      "position": [
        -1888,
        1280
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "5c15ee72-c6b1-438e-aa5c-97d268cbb2cb",
              "operator": {
                "name": "filter.operator.equals",
                "type": "string",
                "operation": "equals"
              },
              "leftValue": "={{$json.type}}",
              "rightValue": "voice"
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "118fc989-2485-4e53-b2d3-17dfed0afe2a",
      "name": "Attendre",
      "type": "n8n-nodes-base.wait",
      "position": [
        -1472,
        1184
      ],
      "webhookId": "df3b70ed-d349-4901-af35-3e5b4525fa97",
      "parameters": {},
      "typeVersion": 1.1
    },
    {
      "id": "b1c2fa2b-2d71-40c4-a36f-a086cce865ff",
      "name": "Telegram Déclencheur",
      "type": "n8n-nodes-base.telegramTrigger",
      "position": [
        -2304,
        1280
      ],
      "webhookId": "8ad3fa54-7a0b-4af8-a781-bfa13addd189",
      "parameters": {
        "updates": [
          "message"
        ],
        "additionalFields": {}
      },
      "credentials": {
        "telegramApi": {
          "id": "hX6Qe2gkicVdj0xP",
          "name": "Telegram account 3"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "dbc0240b-13ef-49ba-8da4-4677a27b8a0a",
      "name": "Message vocal",
      "type": "n8n-nodes-base.telegram",
      "position": [
        -1696,
        1184
      ],
      "webhookId": "ed77be89-0c45-4e0c-9fb1-533baaa650a4",
      "parameters": {
        "fileId": "={{$json.file_id}}",
        "resource": "file",
        "additionalFields": {}
      },
      "credentials": {
        "telegramApi": {
          "id": "hX6Qe2gkicVdj0xP",
          "name": "Telegram account 3"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "5ba230a3-bebe-4ee8-b160-8d0108adb6a8",
      "name": "Téléchargement du message vocal",
      "type": "n8n-nodes-base.telegram",
      "position": [
        -1280,
        1184
      ],
      "webhookId": "bce6d473-545e-4411-bd00-4b62e75e2d40",
      "parameters": {
        "fileId": "={{$json.result.file_id}}",
        "resource": "file",
        "additionalFields": {}
      },
      "credentials": {
        "telegramApi": {
          "id": "hX6Qe2gkicVdj0xP",
          "name": "Telegram account 3"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "8cfbe3e0-aad3-4ca8-95cd-654b9ad29605",
      "name": "Transcription des messages vocaux en texte",
      "type": "@n8n/n8n-nodes-langchain.openAi",
      "position": [
        -1072,
        1184
      ],
      "parameters": {
        "options": {},
        "resource": "audio",
        "operation": "transcribe"
      },
      "credentials": {
        "openAiApi": {
          "id": "cfxaRAuEstHmL61i",
          "name": "OpenAi account"
        }
      },
      "typeVersion": 1.8
    },
    {
      "id": "0ec4455b-d8c7-433d-abb6-9767fdc0f0b4",
      "name": "ATTENTE",
      "type": "n8n-nodes-base.wait",
      "position": [
        -880,
        1184
      ],
      "webhookId": "4f6a1490-a64f-4176-a342-83ba6accaeb4",
      "parameters": {},
      "typeVersion": 1.1
    },
    {
      "id": "7b77efa8-1a8b-48f5-a821-e0e7a6d57a41",
      "name": "Contenu",
      "type": "n8n-nodes-base.code",
      "position": [
        -1696,
        1376
      ],
      "parameters": {
        "jsCode": "return [{ text: $json.content }]\n"
      },
      "typeVersion": 2
    },
    {
      "id": "9626d70e-4123-4f13-b77c-dadb936669e5",
      "name": "Message ou vocal ?",
      "type": "n8n-nodes-base.code",
      "position": [
        -2096,
        1280
      ],
      "parameters": {
        "jsCode": "const updates = $json;\n\nif (updates.message?.text) {\n\treturn [\n\t\t{\n\t\t\tjson: {\n\t\t\t\ttype: \"text\",\n\t\t\t\tcontent: updates.message.text\n\t\t\t}\n\t\t}\n\t];\n}\n\nif (updates.message?.voice) {\n\treturn [\n\t\t{\n\t\t\tjson: {\n\t\t\t\ttype: \"voice\",\n\t\t\t\tfile_id: updates.message.voice.file_id\n\t\t\t}\n\t\t}\n\t];\n}\n\nreturn [];\n"
      },
      "typeVersion": 2
    },
    {
      "id": "8cbf2f84-adfa-4877-b59d-31dad7a4a23d",
      "name": "Générer le message de réunion",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        -480,
        1264
      ],
      "parameters": {
        "text": "==You are an assistant specialized in writing **meeting minutes to be sent by email**.\n\nFrom the text provided below (coming from a voice note or message):  \n\n{{ $json.input.text }}\n\n**Goals:**\n1) **Detect the recipient's email address** in the text (or a similar form like \"send to firstname.lastname\").  \n   - If the address is incomplete, complete it with `@gmail.com`.  \n   - If no address is found, use `contact@gmail.com`.\n\n2) **Understand the meeting context** and extract structured elements:  \n   - **Title/Topic** (project, client, subject)  \n   - **Date** (if missing, use today’s date in Europe/Paris timezone)  \n   - **Participants** (names or roles if mentioned)  \n   - **Decisions made**  \n   - **Action items** (with owners + deadlines if available)  \n   - **Next steps**  \n   - **Risks / blockers** (if present)  \n   - **Open questions / follow-ups** (if present)\n\n3) **Generate a clear and informative email subject**, for example:  \n   - \"Meeting Minutes — {Topic} — {Date}\"  \n   - \"Summary {Project/Client} — {Date}\"\n\n4) **Write the email body in HTML**, professional and easy to read:  \n   - Greeting  \n   - Context reminder (date, topic, participants)  \n   - Sections with bold titles: Decisions, Action Items (with owners & deadlines), Next Steps, Risks/Blockers, Open Questions/Follow-up  \n   - Conclusion + invitation to reply if corrections are needed  \n   - Signature with \"Best regards,\" (do not sign with a specific name)\n\n**Output constraints:**  \n- No spelling or grammar mistakes.  \n- Always return the result in the **strict JSON format below**, without any text around it:\n\n```json\n{\n  \"email\": \"address@gmail.com\",\n  \"subject\": \"Email subject\",\n  \"body\": \"<p>Email body in HTML</p>\"\n}\n\n{{ $json.input.text }}",
        "options": {},
        "promptType": "define",
        "hasOutputParser": true
      },
      "typeVersion": 2.1
    },
    {
      "id": "70d6a4e6-3197-4f9b-9fd5-dea831e0dc21",
      "name": "Créer un enregistrement",
      "type": "n8n-nodes-base.airtable",
      "position": [
        256,
        1456
      ],
      "parameters": {
        "base": {
          "__rl": true,
          "mode": "list",
          "value": "app71jEl2tmr4VBrJ",
          "cachedResultUrl": "https://airtable.com/app71jEl2tmr4VBrJ",
          "cachedResultName": "Call report"
        },
        "table": {
          "__rl": true,
          "mode": "list",
          "value": "tblcHaHToALXG4qjH",
          "cachedResultUrl": "https://airtable.com/app71jEl2tmr4VBrJ/tblcHaHToALXG4qjH",
          "cachedResultName": "Table 1"
        },
        "columns": {
          "value": {
            "Email": "={{ $json.Email }}",
            "Report": "={{ $json.Report }}",
            "subject": "={{ $json.subject }}"
          },
          "schema": [
            {
              "id": "Email",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Email",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "subject",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "subject",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Report",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Report",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Date",
              "type": "dateTime",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Date",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "create"
      },
      "credentials": {
        "airtableTokenApi": {
          "id": "vKZ5Wl43rmNFe0My",
          "name": "Airtable Personal Access Token account 3"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "bb193e7c-6511-453f-a782-5ab19119d3b7",
      "name": "Code",
      "type": "n8n-nodes-base.code",
      "position": [
        16,
        1504
      ],
      "parameters": {
        "jsCode": "const src = $json.output ?? $json;\nconst email = String(src.email || \"contact@gmail.com\").trim();\nconst subject = String(src.subject || \"Compte rendu de réunion\").trim();\nconst body = String(src.body || \"\").trim();\n\n// Nettoyer le HTML et le transformer en texte lisible\nconst clean = body\n  .replace(/<br\\s*\\/?>/gi, \"\\n\")\n  .replace(/<\\/p>/gi, \"\\n\\n\")\n  .replace(/<\\/?[^>]+(>|$)/g, \"\")\n  .trim();\n\nreturn [{\n  Email: email,\n  subject: subject,\n  Report: clean\n}];\n"
      },
      "typeVersion": 2
    },
    {
      "id": "45d090e1-1ba9-4324-bf34-3f3fe1a1b0a3",
      "name": "Envoyer un message",
      "type": "n8n-nodes-base.slack",
      "position": [
        496,
        1424
      ],
      "webhookId": "3175a971-3530-4ab8-ab98-e91ea486676b",
      "parameters": {
        "text": "={{ $json.fields.subject}}\n\n{{ $json.fields.Report }}",
        "select": "channel",
        "channelId": {
          "__rl": true,
          "mode": "id",
          "value": "=YOUR CHANNEL"
        },
        "otherOptions": {},
        "authentication": "oAuth2"
      },
      "credentials": {
        "slackOAuth2Api": {
          "id": "ERqGlDjoRRcGe4Qj",
          "name": "Slack account 2"
        }
      },
      "typeVersion": 2.3
    },
    {
      "id": "830ff5e8-0dd7-4167-9878-b0c4826f5b56",
      "name": "Note adhésive",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -2368,
        896
      ],
      "parameters": {
        "width": 1792,
        "height": 864,
        "content": "## Message sent to Telegram as voice note or text?  "
      },
      "typeVersion": 1
    },
    {
      "id": "fbe9a6e9-f37f-4099-9795-320d96bea14d",
      "name": "Note adhésive 1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -2384,
        1504
      ],
      "parameters": {
        "width": 336,
        "height": 288,
        "content": "![Alt text](https://media.giphy.com/media/v1.Y2lkPTc5MGI3NjExaXpjaWY5ajhyN3Zvc3U2aDhqOGkzOWg4M3hvdjl1ZHRzMGxwYTVrNCZlcD12MV9naWZzX3NlYXJjaCZjdD1n/ya4eevXU490Iw/giphy.gif)\n"
      },
      "typeVersion": 1
    },
    {
      "id": "7aa66a3d-6731-4e4f-9145-2ca40b4240d1",
      "name": "Note adhésive 2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -592,
        1072
      ],
      "parameters": {
        "color": 2,
        "width": 544,
        "height": 688,
        "content": "## Generate meeting minutes\n- **Node**: Agent (“Generate Meeting Message”)  \n- **Prompt**: specialized for “meeting minutes”  \n- **Model**: GPT-4.1-mini  \n- **Output**: `{ email, subject, body }`  \n👉 GPT creates a clean and structured meeting report.  "
      },
      "typeVersion": 1
    },
    {
      "id": "dc3f7261-2467-403a-be7c-11c5b696f209",
      "name": "Note adhésive 3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -432,
        1504
      ],
      "parameters": {
        "width": 384,
        "height": 256,
        "content": "## Enforce clean JSON\n\n- **Node**: Output Parser Structured  \n- **JSON Example**:  \njson {\"email\": \"address@gmail.com\",\"subject\":\"Subject\",\"body\":Email\"}\n\n👉 Ensures the output is always valid JSON."
      },
      "typeVersion": 1
    },
    {
      "id": "3901f82e-b400-424a-9a51-bff0212e0a04",
      "name": "Appliquer le format email JSON",
      "type": "@n8n/n8n-nodes-langchain.outputParserStructured",
      "position": [
        -176,
        1536
      ],
      "parameters": {
        "jsonSchemaExample": "{\n  \"email\": \"address@gmail.com\",\n  \"subject\": \"Email subject\",\n  \"body\": \"<p>Email body in HTML</p>\"\n}"
      },
      "typeVersion": 1.3
    },
    {
      "id": "ab43f248-cef7-4591-8b15-37faa102f8bd",
      "name": "Note adhésive 4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -48,
        1216
      ],
      "parameters": {
        "color": 4,
        "height": 544,
        "content": "## Cleanup / Airtable mapping\n- **Node**: Code  \n- **Return**: `{ Email, subject, Report }`  \n👉 Prepares the correct fields aligned with your Airtable table.  "
      },
      "typeVersion": 1
    },
    {
      "id": "076f6b32-e788-4bb7-85c4-0afb0caff168",
      "name": "Note adhésive 5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        192,
        1136
      ],
      "parameters": {
        "color": 6,
        "height": 624,
        "content": "## Store in Airtable\n- **Node**: Airtable (Create Record)  \n- **Mapping**:  \n  - Email = `{{$json.Email}}`  \n  - subject = `{{$json.subject}}`  \n  - Report = `{{$json.Report}}`  \n👉 Archives each meeting report in your Airtable base.  "
      },
      "typeVersion": 1
    },
    {
      "id": "e8bd763c-58de-458a-961b-96d66536dff0",
      "name": "Note adhésive 6",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        432,
        1232
      ],
      "parameters": {
        "color": 7,
        "height": 528,
        "content": "## Notify in Slack\n- **Node**: Slack (Send Message)  \n- **Channel**: your team channel  \n- **Message**:  {{$json.fields.subject}}{{$json.fields.Report}}"
      },
      "typeVersion": 1
    },
    {
      "id": "3e97aa2f-e270-4896-842d-f0db6bdf713e",
      "name": "Note adhésive 7",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        672,
        1120
      ],
      "parameters": {
        "color": 5,
        "height": 640,
        "content": "## Send the email\n- **Node**: Gmail (Send Email)  \n- **sendTo**: `{{$('Create a record').item.json.fields.Email}}`  \n- **subject**: `{{$('Create a record').item.json.fields.subject}}`  \n- **message**: `{{$('Create a record').item.json.fields.Report}}`  \n👉 Sends the complete meeting minutes to the recipients.  "
      },
      "typeVersion": 1
    },
    {
      "id": "2d6d9fdf-9473-42ea-ab9e-4ac1993e9648",
      "name": "Note adhésive 8",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -592,
        912
      ],
      "parameters": {
        "color": 2,
        "width": 182,
        "content": "![Alt text](https://media1.tenor.com/m/y98Q1SkqLCAAAAAd/chat-gpt.gif)\n"
      },
      "typeVersion": 1
    },
    {
      "id": "46a6e02b-bc0e-43fa-925c-7165a0153d42",
      "name": "Note adhésive 9",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        192,
        1600
      ],
      "parameters": {
        "color": 5,
        "width": 246,
        "content": "![Alt text](https://media1.tenor.com/m/WW0Y9Urm5yoAAAAC/airtable-project-management.gif)\n"
      },
      "typeVersion": 1
    },
    {
      "id": "3a92f0d9-8221-4c53-931a-0745bd76eef7",
      "name": "Note adhésive 10",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        448,
        1600
      ],
      "parameters": {
        "color": 7,
        "width": 198,
        "height": 192,
        "content": "![Alt text](https://media.tenor.com/go-I8u5XWoAAAAAi/slack-slackhq.gif)\n"
      },
      "typeVersion": 1
    },
    {
      "id": "f934e87f-2486-4701-b3f3-38fd1fa37c2f",
      "name": "Note adhésive 11",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        736,
        1616
      ],
      "parameters": {
        "color": 7,
        "width": 150,
        "height": 144,
        "content": "![Alt text](https://media0.giphy.com/media/v1.Y2lkPTc5MGI3NjExOGk3YThucTEycGtvZ3piaWlheW41aXlwYWo0MTllMWpqaWs0c2tnbCZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw/aOften89vRbG/giphy.gif)\n"
      },
      "typeVersion": 1
    },
    {
      "id": "2f570729-0e5a-4b3a-aaff-4fd182ad5b2f",
      "name": "Structure du code",
      "type": "n8n-nodes-base.code",
      "position": [
        -768,
        1376
      ],
      "parameters": {
        "jsCode": "const text = String($json.text || \"\").trim();\nconst lower = text.toLowerCase();\n\n// 1) Direct email in message\nconst emailMatch = text.match(/[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,}/i);\nlet email = emailMatch ? emailMatch[0].toLowerCase() : null;\n\n// 2) Extract a domain hint from the message (fallback for building email)\nlet domainHint = null;\nconst domainRegex = /\\b([a-z0-9][a-z0-9-]{0,63}\\.)+[a-z]{2,}\\b/i;\nconst domainMatch = text.match(domainRegex);\nif (domainMatch) {\n  const parts = domainMatch[0].toLowerCase().split('.').filter(Boolean);\n  if (parts.length >= 2) {\n    domainHint = `${parts[parts.length - 2]}.${parts[parts.length - 1]}`;\n  }\n}\n\n// 3) If no direct email, try to build one from a \"send to / envoyer à\" style mention\nif (!email) {\n  // Capture after signals like \"envoyer à\", \"envoie à\", \"à envoyer à\", \"send to\", \"to\"\n  const toCue =\n    /(à envoyer à|envoyer à|envoie à|envois à|envoi à|send to|to)\\s+([^\\n,;:]+)/i;\n  const labelCue = /(mail|email|courriel|adresse)\\s*[:\\-]\\s*([^\\n,;:]+)/i;\n\n  let target = null;\n  const m1 = lower.match(toCue);\n  const m2 = lower.match(labelCue);\n  if (m1 && m1[2]) target = m1[2];\n  else if (m2 && m2[2]) target = m2[2];\n\n  if (target) {\n    target = target\n      .replace(/^[«\"'\\(\\[]+|[»\"'\\)\\]]+$/g, \"\") // trim quotes/brackets\n      .trim();\n\n    // If target already contains an email, use it\n    const tEmail = target.match(/[a-z0-9._%+-]+@[a-z0-9.-]+\\.[a-z]{2,}/i);\n    if (tEmail) {\n      email = tEmail[0].toLowerCase();\n    } else {\n      // If target looks like \"firstname.lastname\" or \"firstname lastname\", normalize it\n      // Remove common filler words\n      target = target\n        .replace(/\\b(chez|à|au|pour|de|du|la|le|l'|mr|mme|m\\.)\\b/g, \" \")\n        .replace(/\\s+/g, \" \")\n        .trim();\n\n      // Keep only letters, spaces, dots, hyphens, underscores\n      target = target.replace(/[^a-zàâäçéèêëîïôöùûüÿ\\s._-]/g, \"\");\n\n      // Build local part\n      const ascii = target\n        .normalize(\"NFD\")\n        .replace(/\\p{Diacritic}/gu, \"\")\n        .toLowerCase();\n\n      // Split by spaces, dots, underscores, hyphens\n      const tokens = ascii.split(/[\\s._-]+/).filter(Boolean);\n\n      let local = null;\n      if (tokens.length >= 2) {\n        local = `${tokens[0]}.${tokens[tokens.length - 1]}`;\n      } else if (tokens.length === 1) {\n        local = tokens[0];\n      }\n\n      if (local) {\n        // If target contains something like \".com\" we treat it as a domain hint\n        let domainFromTarget = null;\n        const tDomain = target.match(domainRegex);\n        if (tDomain) {\n          const p = tDomain[0].split(\".\").filter(Boolean);\n          if (p.length >= 2)\n            domainFromTarget = `${p[p.length - 2]}.${p[p.length - 1]}`.toLowerCase();\n        }\n\n        const finalDomain = domainFromTarget || domainHint || \"gmail.com\";\n        email = `${local}@${finalDomain}`.replace(/\\.{2,}/g, \".\");\n      }\n    }\n  }\n}\n\n// 4) Final fallback\nif (!email) {\n  email = \"contact@gmail.com\";\n}\n\n// Preserve your previous outputs too\nlet foundDomain = null;\nif (domainHint) foundDomain = domainHint;\n\nreturn [{\n  input: { text },\n  email,\n  domain: foundDomain,\n  domainUrl: foundDomain ? `https://${foundDomain}` : null\n}];\n"
      },
      "typeVersion": 2
    }
  ],
  "active": false,
  "pinData": {},
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "f3969a89-1668-4520-9ea6-9d66642ada23",
  "connections": {
    "dfd67f2c-f977-4ef6-98c2-1433eca110dc": {
      "main": [
        [
          {
            "node": "dbc0240b-13ef-49ba-8da4-4677a27b8a0a",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "7b77efa8-1a8b-48f5-a821-e0e7a6d57a41",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "bb193e7c-6511-453f-a782-5ab19119d3b7": {
      "main": [
        [
          {
            "node": "70d6a4e6-3197-4f9b-9fd5-dea831e0dc21",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "0ec4455b-d8c7-433d-abb6-9767fdc0f0b4": {
      "main": [
        [
          {
            "node": "2f570729-0e5a-4b3a-aaff-4fd182ad5b2f",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "118fc989-2485-4e53-b2d3-17dfed0afe2a": {
      "main": [
        [
          {
            "node": "5ba230a3-bebe-4ee8-b160-8d0108adb6a8",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "7b77efa8-1a8b-48f5-a821-e0e7a6d57a41": {
      "main": [
        [
          {
            "node": "2f570729-0e5a-4b3a-aaff-4fd182ad5b2f",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "dbc0240b-13ef-49ba-8da4-4677a27b8a0a": {
      "main": [
        [
          {
            "node": "118fc989-2485-4e53-b2d3-17dfed0afe2a",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "2f570729-0e5a-4b3a-aaff-4fd182ad5b2f": {
      "main": [
        [
          {
            "node": "8cbf2f84-adfa-4877-b59d-31dad7a4a23d",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "45d090e1-1ba9-4324-bf34-3f3fe1a1b0a3": {
      "main": [
        [
          {
            "node": "98f24854-770a-45c7-b2b4-4be331d64ecc",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "70d6a4e6-3197-4f9b-9fd5-dea831e0dc21": {
      "main": [
        [
          {
            "node": "45d090e1-1ba9-4324-bf34-3f3fe1a1b0a3",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "b1c2fa2b-2d71-40c4-a36f-a086cce865ff": {
      "main": [
        [
          {
            "node": "9626d70e-4123-4f13-b77c-dadb936669e5",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "3901f82e-b400-424a-9a51-bff0212e0a04": {
      "ai_outputParser": [
        [
          {
            "node": "8cbf2f84-adfa-4877-b59d-31dad7a4a23d",
            "type": "ai_outputParser",
            "index": 0
          }
        ]
      ]
    },
    "9626d70e-4123-4f13-b77c-dadb936669e5": {
      "main": [
        [
          {
            "node": "dfd67f2c-f977-4ef6-98c2-1433eca110dc",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "5ba230a3-bebe-4ee8-b160-8d0108adb6a8": {
      "main": [
        [
          {
            "node": "8cfbe3e0-aad3-4ca8-95cd-654b9ad29605",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "8cbf2f84-adfa-4877-b59d-31dad7a4a23d": {
      "main": [
        [
          {
            "node": "bb193e7c-6511-453f-a782-5ab19119d3b7",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "af08414c-6227-4af0-831a-5832d7a2833c": {
      "ai_languageModel": [
        [
          {
            "node": "8cbf2f84-adfa-4877-b59d-31dad7a4a23d",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "8cfbe3e0-aad3-4ca8-95cd-654b9ad29605": {
      "main": [
        [
          {
            "node": "0ec4455b-d8c7-433d-abb6-9767fdc0f0b4",
            "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é - Résumé IA, IA Multimodale

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.

Workflows recommandés

Générer automatiquement un e-mail à partir de messages vocaux Telegram
Utiliser Whisper, GPT-4 et Gmail pour convertir les messages vocaux Telegram en e-mails professionnels
Wait
Gmail
Telegram
+
Wait
Gmail
Telegram
11 NœudsBaptiste Fort
Productivité personnelle
Processus de vente B2B complet : Génération de prospects Apollo, externalisation avec Mailgun et gestion des réponses IA
Processus de vente B2B complet : Génération de prospects Apollo, prospection Mailgun et gestion des réponses AI
If
Set
Code
+
If
Set
Code
116 NœudsPaul
Création de contenu
🎧 Robot d'assistance vocale IT – Transformation de messages vocaux Telegram en tickets JIRA (avec OpenAI Whisper)
Transformer automatiquement les messages vocaux de Telegram en tickets JIRA avec Whisper et GPT-4.1 Mini
If
Set
Code
+
If
Set
Code
25 NœudsTrung Tran
Gestion des tickets
Workflow de froid e-mail piloté par GPT-4, comprenant 3 e-mails de suivi entièrement personnalisés
Automatiser des séquences de froid personnalisées via GPT-4, Mailgun et Supabase
If
Set
Code
+
If
Set
Code
100 NœudsPaul
Nurturing de leads
1. Configuration du robot pour les détails de la playlist
Créer des playlists de musique YouTube générées par l'IA avec Suno, GPT-4, Runway et Creatomate
If
Set
Code
+
If
Set
Code
203 NœudsJoseph
Création de contenu
💥 Créer des publicités virales avec NanoBanana et Seedance, les publier sur les médias sociaux via upload-post VIDE II
Créer des publicités multimédias virales avec l'IA : NanoBanana, Seedance et Suno pour les médias sociaux
If
Set
Code
+
If
Set
Code
45 NœudsDr. Firas
Divers
Informations sur le workflow
Niveau de difficulté
Avancé
Nombre de nœuds29
Catégorie2
Types de nœuds13
Description de la difficulté

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

Auteur
Baptiste Fort

Baptiste Fort

@baptistefort

Baptiste.fort.pro@gmail.com

Liens externes
Voir sur n8n.io

Partager ce workflow

Catégories

Catégories: 34