{
  "id": "VbaVgnhJ7phMHTY9",
  "meta": {
    "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 Email Generator Model",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "position": [
        -560,
        1552
      ],
      "parameters": {
        "model": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4.1-mini"
        },
        "options": {}
      },
      "credentials": {
        "openAiApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "98f24854-770a-45c7-b2b4-4be331d64ecc",
      "name": "Send Email",
      "type": "n8n-nodes-base.gmail",
      "position": [
        752,
        1456
      ],
      "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": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "dfd67f2c-f977-4ef6-98c2-1433eca110dc",
      "name": "If",
      "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": "Wait",
      "type": "n8n-nodes-base.wait",
      "position": [
        -1472,
        1184
      ],
      "parameters": {},
      "typeVersion": 1.1
    },
    {
      "id": "b1c2fa2b-2d71-40c4-a36f-a086cce865ff",
      "name": "Telegram Trigger",
      "type": "n8n-nodes-base.telegramTrigger",
      "position": [
        -2304,
        1280
      ],
      "parameters": {
        "updates": [
          "message"
        ],
        "additionalFields": {}
      },
      "credentials": {
        "telegramApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "dbc0240b-13ef-49ba-8da4-4677a27b8a0a",
      "name": "Voice note",
      "type": "n8n-nodes-base.telegram",
      "position": [
        -1696,
        1184
      ],
      "parameters": {
        "fileId": "={{$json.file_id}}",
        "resource": "file",
        "additionalFields": {}
      },
      "credentials": {
        "telegramApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "5ba230a3-bebe-4ee8-b160-8d0108adb6a8",
      "name": "Voice note download",
      "type": "n8n-nodes-base.telegram",
      "position": [
        -1280,
        1184
      ],
      "parameters": {
        "fileId": "={{$json.result.file_id}}",
        "resource": "file",
        "additionalFields": {}
      },
      "credentials": {
        "telegramApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "8cfbe3e0-aad3-4ca8-95cd-654b9ad29605",
      "name": "Transcription of voice notes to text",
      "type": "@n8n/n8n-nodes-langchain.openAi",
      "position": [
        -1072,
        1184
      ],
      "parameters": {
        "options": {},
        "resource": "audio",
        "operation": "transcribe"
      },
      "credentials": {
        "openAiApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.8
    },
    {
      "id": "0ec4455b-d8c7-433d-abb6-9767fdc0f0b4",
      "name": "WAIT",
      "type": "n8n-nodes-base.wait",
      "position": [
        -880,
        1184
      ],
      "parameters": {},
      "typeVersion": 1.1
    },
    {
      "id": "7b77efa8-1a8b-48f5-a821-e0e7a6d57a41",
      "name": "Content",
      "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 or Voice ?",
      "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": "Generate Meeting Message",
      "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\u2019s 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 \u2014 {Topic} \u2014 {Date}\"  \n   - \"Summary {Project/Client} \u2014 {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": "Create a record",
      "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": {
          "name": "<your credential>"
        }
      },
      "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 || \"user@example.com\").trim();\nconst subject = String(src.subject || \"Compte rendu de r\u00e9union\").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": "Send a message",
      "type": "n8n-nodes-base.slack",
      "position": [
        496,
        1424
      ],
      "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": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.3
    },
    {
      "id": "830ff5e8-0dd7-4167-9878-b0c4826f5b56",
      "name": "Sticky Note",
      "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": "Sticky Note1",
      "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": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -592,
        1072
      ],
      "parameters": {
        "color": 2,
        "width": 544,
        "height": 688,
        "content": "## Generate meeting minutes\n- **Node**: Agent (\u201cGenerate Meeting Message\u201d)  \n- **Prompt**: specialized for \u201cmeeting minutes\u201d  \n- **Model**: GPT-4.1-mini  \n- **Output**: `{ email, subject, body }`  \n\ud83d\udc49 GPT creates a clean and structured meeting report.  "
      },
      "typeVersion": 1
    },
    {
      "id": "dc3f7261-2467-403a-be7c-11c5b696f209",
      "name": "Sticky Note3",
      "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\ud83d\udc49 Ensures the output is always valid JSON."
      },
      "typeVersion": 1
    },
    {
      "id": "3901f82e-b400-424a-9a51-bff0212e0a04",
      "name": "Enforce Email JSON",
      "type": "@n8n/n8n-nodes-langchain.outputParserStructured",
      "position": [
        -176,
        1536
      ],
      "parameters": {
        "jsonSchemaExample": "{\n  \"email\": \"user@example.com\",\n  \"subject\": \"Email subject\",\n  \"body\": \"<p>Email body in HTML</p>\"\n}"
      },
      "typeVersion": 1.3
    },
    {
      "id": "ab43f248-cef7-4591-8b15-37faa102f8bd",
      "name": "Sticky Note4",
      "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\ud83d\udc49 Prepares the correct fields aligned with your Airtable table.  "
      },
      "typeVersion": 1
    },
    {
      "id": "076f6b32-e788-4bb7-85c4-0afb0caff168",
      "name": "Sticky Note5",
      "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\ud83d\udc49 Archives each meeting report in your Airtable base.  "
      },
      "typeVersion": 1
    },
    {
      "id": "e8bd763c-58de-458a-961b-96d66536dff0",
      "name": "Sticky Note6",
      "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": "Sticky Note7",
      "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\ud83d\udc49 Sends the complete meeting minutes to the recipients.  "
      },
      "typeVersion": 1
    },
    {
      "id": "2d6d9fdf-9473-42ea-ab9e-4ac1993e9648",
      "name": "Sticky Note8",
      "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": "Sticky Note9",
      "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": "Sticky Note10",
      "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": "Sticky Note11",
      "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": "Code structure",
      "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 \u00e0\" style mention\nif (!email) {\n  // Capture after signals like \"envoyer \u00e0\", \"envoie \u00e0\", \"\u00e0 envoyer \u00e0\", \"send to\", \"to\"\n  const toCue =\n    /(\u00e0 envoyer \u00e0|envoyer \u00e0|envoie \u00e0|envois \u00e0|envoi \u00e0|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(/^[\u00ab\"'\\(\\[]+|[\u00bb\"'\\)\\]]+$/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|\u00e0|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\u00e0\u00e2\u00e4\u00e7\u00e9\u00e8\u00ea\u00eb\u00ee\u00ef\u00f4\u00f6\u00f9\u00fb\u00fc\u00ff\\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 = \"user@example.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,
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "f3969a89-1668-4520-9ea6-9d66642ada23",
  "connections": {
    "If": {
      "main": [
        [
          {
            "node": "Voice note",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Content",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Code": {
      "main": [
        [
          {
            "node": "Create a record",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "WAIT": {
      "main": [
        [
          {
            "node": "Code structure",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Wait": {
      "main": [
        [
          {
            "node": "Voice note download",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Content": {
      "main": [
        [
          {
            "node": "Code structure",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Voice note": {
      "main": [
        [
          {
            "node": "Wait",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Code structure": {
      "main": [
        [
          {
            "node": "Generate Meeting Message",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Send a message": {
      "main": [
        [
          {
            "node": "Send Email",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Create a record": {
      "main": [
        [
          {
            "node": "Send a message",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Telegram Trigger": {
      "main": [
        [
          {
            "node": "Message or Voice ?",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Enforce Email JSON": {
      "ai_outputParser": [
        [
          {
            "node": "Generate Meeting Message",
            "type": "ai_outputParser",
            "index": 0
          }
        ]
      ]
    },
    "Message or Voice ?": {
      "main": [
        [
          {
            "node": "If",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Voice note download": {
      "main": [
        [
          {
            "node": "Transcription of voice notes to text",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Generate Meeting Message": {
      "main": [
        [
          {
            "node": "Code",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "GPT-4 Email Generator Model": {
      "ai_languageModel": [
        [
          {
            "node": "Generate Meeting Message",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Transcription of voice notes to text": {
      "main": [
        [
          {
            "node": "WAIT",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}