Créer des brouillons d'e-mails professionnels avec GPT-4, Telegram et une base de contacts de messagerie

Avancé

Ceci est unMiscellaneous, AI RAG, Multimodal AIworkflow d'automatisation du domainecontenant 17 nœuds.Utilise principalement des nœuds comme Code, Gmail, Telegram, GoogleDocs, ManualTrigger. Créer des brouillons d'e-mails professionnels via GPT-4, Telegram et une base de contacts

Prérequis
  • Compte Google et informations d'identification Gmail API
  • Token Bot Telegram
  • Clé API OpenAI
  • Clé API Pinecone
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": "cf4d575edce4b7d398f7313598b706cceaba685fe3a0bb5bf06e3c97727abb23",
    "templateCredsSetupCompleted": true
  },
  "nodes": [
    {
      "id": "b662d7e0-efcf-4810-a14a-9fe24a9d3ce0",
      "name": "Lors du clic sur 'Exécuter le workflow'",
      "type": "n8n-nodes-base.manualTrigger",
      "disabled": true,
      "position": [
        -144,
        336
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "22e31736-6723-4e44-adc9-a5e5fb38a093",
      "name": "Pinecone Vector Store",
      "type": "@n8n/n8n-nodes-langchain.vectorStorePinecone",
      "position": [
        272,
        192
      ],
      "parameters": {
        "mode": "insert",
        "options": {
          "pineconeNamespace": "contacts"
        },
        "pineconeIndex": {
          "__rl": true,
          "mode": "list",
          "value": "gmailagent",
          "cachedResultName": "gmailagent"
        }
      },
      "credentials": {
        "pineconeApi": {
          "id": "VoL22Vm4vFVB0tEG",
          "name": "PineconeApi account"
        }
      },
      "typeVersion": 1.3
    },
    {
      "id": "9f412fb3-5fbf-4e85-ba54-1a990d12a7cc",
      "name": "Embeddings OpenAI",
      "type": "@n8n/n8n-nodes-langchain.embeddingsOpenAi",
      "position": [
        384,
        416
      ],
      "parameters": {
        "options": {
          "dimensions": 512
        }
      },
      "credentials": {
        "openAiApi": {
          "id": "2bHK8I9Y4KDhH8Qn",
          "name": "OpenAi account"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "ac2eaead-317c-4c66-a621-903074fdb137",
      "name": "Default Data Loader",
      "type": "@n8n/n8n-nodes-langchain.documentDefaultDataLoader",
      "position": [
        224,
        416
      ],
      "parameters": {
        "options": {}
      },
      "typeVersion": 1.1
    },
    {
      "id": "0f0a1c99-29a8-4fe3-bdc5-815fe53e55ea",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -208,
        96
      ],
      "parameters": {
        "color": 4,
        "width": 928,
        "height": 576,
        "content": "##  Send data to vector database \n**connect** the trigger node when you ready to push your contacts data to the database "
      },
      "typeVersion": 1
    },
    {
      "id": "5014fbe1-e8b4-48c7-9585-6452bd1b8dc1",
      "name": "AI Agent",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        160,
        944
      ],
      "parameters": {
        "text": "={{ $json.message.text }}",
        "options": {
          "systemMessage": "=You are an AI assistant that drafts professional emails.  \nYou **must always write formal emails**. \n\nYou have access to the tool \"Pinecone Vector Store1\", which retrieves user data (including email addresses).  \nIf the user specifies a name (e.g., \"Hoger\", \"Professor John\"), you **must call Pinecone Vector Store1** to fetch the correct email address.  \nNever leave the `sendTo` field empty — if Pinecone returns nothing, return `\"sendTo= \"`.  \n\n## Context\n- Input comes from a chat message.  \n- Always output in the required format below.  \n\n## Required Output Format\n[\n  {\n    \"query\": \"sendTo=<recipient email from Pinecone>&subject=<short subject line>&emailType=text&message=<formal email body>&bccList=<comma separated emails if any>&ccList=<comma separated emails if any>&senderName=<name of sender>\"\n  }\n]\n\n## Rules\n- `sendTo` must come from Pinecone if not explicitly given.  \n- `emailType=text` unless explicitly told otherwise.  \n- If Pinecone fails, put `\"sendTo= \"`.  \n- Always keep email language formal (university tone).  \n- Output must be strict JSON, no markdown, no extra text.  \nalywya set the sender name as Abbas Alaa"
        },
        "promptType": "define"
      },
      "typeVersion": 2.2
    },
    {
      "id": "038e2d41-65bf-4abd-85e2-cd525c000644",
      "name": "Pinecone Vector Store1",
      "type": "@n8n/n8n-nodes-langchain.vectorStorePinecone",
      "position": [
        208,
        1184
      ],
      "parameters": {
        "mode": "retrieve-as-tool",
        "options": {
          "pineconeNamespace": "contacts"
        },
        "pineconeIndex": {
          "__rl": true,
          "mode": "list",
          "value": "gmailagent",
          "cachedResultName": "gmailagent"
        },
        "toolDescription": "Call this to retrieve information about contacts like email address."
      },
      "credentials": {
        "pineconeApi": {
          "id": "VoL22Vm4vFVB0tEG",
          "name": "PineconeApi account"
        }
      },
      "typeVersion": 1.3
    },
    {
      "id": "471b39e4-48b2-4766-b8c2-de422cf20211",
      "name": "Embeddings OpenAI1",
      "type": "@n8n/n8n-nodes-langchain.embeddingsOpenAi",
      "position": [
        320,
        1360
      ],
      "parameters": {
        "options": {
          "dimensions": 512
        }
      },
      "credentials": {
        "openAiApi": {
          "id": "2bHK8I9Y4KDhH8Qn",
          "name": "OpenAi account"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "3a9e5c26-76dc-48f3-bfa8-fa337ba98e44",
      "name": "Code",
      "type": "n8n-nodes-base.code",
      "position": [
        544,
        1136
      ],
      "parameters": {
        "jsCode": "// Get model output from previous node\nconst rawOutput =$input.first().json.output ;\n\n// 1. Remove code fences if present\nlet cleaned = rawOutput.replace(/```json|```/g, \"\").trim();\n\n// 2. Parse into JSON\nlet parsed;\ntry {\n  parsed = JSON.parse(cleaned);\n} catch (e) {\n  throw new Error(\"Failed to parse model output: \" + e.message);\n}\n\n// 3. Extract query string\nconst queryString = parsed[0].query;\n\n// 4. Convert query string into key-value pairs\nconst params = {};\nqueryString.split(\"&\").forEach(pair => {\n  const [key, value] = pair.split(\"=\");\n  params[key] = decodeURIComponent(value || \"\");\n});\n\n// Return usable fields for Gmail node\nreturn [\n  {\n    json: {\n      sendTo: params.sendTo,\n      subject: params.subject,\n      message: params.message,\n      bccList: params.bccList,\n      ccList: params.ccList,\n      senderName: params.senderName,\n      emailType: params.emailType\n    }\n  }\n];\n"
      },
      "typeVersion": 2
    },
    {
      "id": "66cc9bc2-71eb-4fa0-b9a1-c61c7a497676",
      "name": "Créer une ébauche",
      "type": "n8n-nodes-base.gmail",
      "position": [
        800,
        1136
      ],
      "webhookId": "0c76b19c-09cf-45b9-86a5-03581d8cd40e",
      "parameters": {
        "message": "={{ $json.message }}",
        "options": {
          "ccList": "={{ $json.ccList }}",
          "sendTo": "={{ $json.sendTo }}",
          "bccList": "={{ $json.bccList }}"
        },
        "subject": "={{ $json.subject }}",
        "resource": "draft"
      },
      "credentials": {
        "gmailOAuth2": {
          "id": "JwEaiUptSaLJovzC",
          "name": "Gmail account"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "9f71e612-ac1d-4c16-9b95-fe454dfae55b",
      "name": "Obtenir un document",
      "type": "n8n-nodes-base.googleDocs",
      "position": [
        32,
        192
      ],
      "parameters": {
        "operation": "get",
        "documentURL": "19DYlWxxKJanvRwMnQp0tyxt2Z5H7AheKA3WEegR9YDI"
      },
      "credentials": {
        "googleDocsOAuth2Api": {
          "id": "C25e8r7V7i2AN6GO",
          "name": "Google Docs account"
        }
      },
      "typeVersion": 2
    },
    {
      "id": "c88bbd3a-6d96-49a5-a54c-58f66f826a06",
      "name": "Envoyer un autocollant",
      "type": "n8n-nodes-base.telegram",
      "position": [
        1248,
        1136
      ],
      "webhookId": "8e63d08c-6b04-41ae-b79f-cac04782e978",
      "parameters": {
        "file": "CAACAgIAAxkBAANEaL7Y0gABEcXooA-abKgPERguErxVAAIHRwAC839wS2T25-Ght_GiNgQ",
        "chatId": "={{ $('Telegram Trigger').item.json.message.chat.id }}",
        "operation": "sendSticker",
        "additionalFields": {}
      },
      "credentials": {
        "telegramApi": {
          "id": "K26HYeLzDiVqdMpZ",
          "name": "Telegram account"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "dd1ae099-477d-49be-b443-d3b76147f65a",
      "name": "Telegram Trigger",
      "type": "n8n-nodes-base.telegramTrigger",
      "position": [
        -240,
        1088
      ],
      "webhookId": "dc3fa5b7-b65d-4151-89d5-b4229379dc4b",
      "parameters": {
        "updates": [
          "message"
        ],
        "additionalFields": {}
      },
      "credentials": {
        "telegramApi": {
          "id": "K26HYeLzDiVqdMpZ",
          "name": "Telegram account"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "f1ce527e-329d-4272-81b1-a90985ce111e",
      "name": "Envoyer un message texte",
      "type": "n8n-nodes-base.telegram",
      "position": [
        1024,
        1136
      ],
      "webhookId": "8e63d08c-6b04-41ae-b79f-cac04782e978",
      "parameters": {
        "text": "تم تآمر آمر",
        "chatId": "={{ $('Telegram Trigger').item.json.message.chat.id }}",
        "additionalFields": {
          "appendAttribution": false
        }
      },
      "credentials": {
        "telegramApi": {
          "id": "K26HYeLzDiVqdMpZ",
          "name": "Telegram account"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "11908db3-323d-4dca-90be-f4eac9b33927",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -48,
        848
      ],
      "parameters": {
        "color": 5,
        "width": 768,
        "height": 688,
        "content": "## RAG AI agent to get the \"send to\" emails and format the emails\n"
      },
      "typeVersion": 1
    },
    {
      "id": "cf6788a3-bd84-4ab6-ac42-6a677fe8e787",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        736,
        864
      ],
      "parameters": {
        "color": 2,
        "width": 768,
        "height": 576,
        "content": "## Draft the email and send the completion message with a funny sticker.\n"
      },
      "typeVersion": 1
    },
    {
      "id": "95bf59f9-5bfe-4e66-8474-b4aa30f2c1d0",
      "name": "OpenAI Chat Model",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "position": [
        32,
        1152
      ],
      "parameters": {
        "model": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4.1-mini"
        },
        "options": {}
      },
      "credentials": {
        "openAiApi": {
          "id": "2bHK8I9Y4KDhH8Qn",
          "name": "OpenAi account"
        }
      },
      "typeVersion": 1.2
    }
  ],
  "pinData": {},
  "connections": {
    "3a9e5c26-76dc-48f3-bfa8-fa337ba98e44": {
      "main": [
        [
          {
            "node": "66cc9bc2-71eb-4fa0-b9a1-c61c7a497676",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "5014fbe1-e8b4-48c7-9585-6452bd1b8dc1": {
      "main": [
        [
          {
            "node": "3a9e5c26-76dc-48f3-bfa8-fa337ba98e44",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "66cc9bc2-71eb-4fa0-b9a1-c61c7a497676": {
      "main": [
        [
          {
            "node": "f1ce527e-329d-4272-81b1-a90985ce111e",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "9f71e612-ac1d-4c16-9b95-fe454dfae55b": {
      "main": [
        [
          {
            "node": "22e31736-6723-4e44-adc9-a5e5fb38a093",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "dd1ae099-477d-49be-b443-d3b76147f65a": {
      "main": [
        [
          {
            "node": "5014fbe1-e8b4-48c7-9585-6452bd1b8dc1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "9f412fb3-5fbf-4e85-ba54-1a990d12a7cc": {
      "ai_embedding": [
        [
          {
            "node": "22e31736-6723-4e44-adc9-a5e5fb38a093",
            "type": "ai_embedding",
            "index": 0
          }
        ]
      ]
    },
    "95bf59f9-5bfe-4e66-8474-b4aa30f2c1d0": {
      "ai_languageModel": [
        [
          {
            "node": "5014fbe1-e8b4-48c7-9585-6452bd1b8dc1",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "471b39e4-48b2-4766-b8c2-de422cf20211": {
      "ai_embedding": [
        [
          {
            "node": "038e2d41-65bf-4abd-85e2-cd525c000644",
            "type": "ai_embedding",
            "index": 0
          }
        ]
      ]
    },
    "ac2eaead-317c-4c66-a621-903074fdb137": {
      "ai_document": [
        [
          {
            "node": "22e31736-6723-4e44-adc9-a5e5fb38a093",
            "type": "ai_document",
            "index": 0
          }
        ]
      ]
    },
    "f1ce527e-329d-4272-81b1-a90985ce111e": {
      "main": [
        [
          {
            "node": "c88bbd3a-6d96-49a5-a54c-58f66f826a06",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "038e2d41-65bf-4abd-85e2-cd525c000644": {
      "ai_tool": [
        [
          {
            "node": "5014fbe1-e8b4-48c7-9585-6452bd1b8dc1",
            "type": "ai_tool",
            "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é - Divers, RAG 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.

Informations sur le workflow
Niveau de difficulté
Avancé
Nombre de nœuds17
Catégorie3
Types de nœuds12
Description de la difficulté

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

Liens externes
Voir sur n8n.io

Partager ce workflow

Catégories

Catégories: 34