Créer des brouillons d'e-mails professionnels avec GPT-4, Telegram et une base de contacts de messagerie
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
- •Compte Google et informations d'identification Gmail API
- •Token Bot Telegram
- •Clé API OpenAI
- •Clé API Pinecone
Nœuds utilisés (17)
Catégorie
{
"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
}
]
]
}
}
}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.
Workflows recommandés
Ninja - Abbas
@abbas-ghaziPartager ce workflow