Flux de travail de clôture des pistes froides

Intermédiaire

Ceci est unContent Creation, Multimodal AIworkflow d'automatisation du domainecontenant 15 nœuds.Utilise principalement des nœuds comme Code, Gmail, Slack, Filter, Hubspot. Fermeture automatique des pistes froides HubSpot basée sur les retours Gmail et les notifications Slack

Prérequis
  • Compte Google et informations d'identification Gmail API
  • Token Bot Slack ou URL Webhook
  • Clé API HubSpot
  • Peut nécessiter les informations d'identification d'authentification de l'API cible
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": "INSTANCE_ID_PLACEHOLDER",
    "templateCredsSetupCompleted": false
  },
  "name": "Cold Deal Closure Workflow",
  "tags": [],
  "nodes": [
    {
      "id": "99a95283-6245-4d88-ae58-07aaef8ddf14",
      "name": "Déclencheur programmé",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        -304,
        -16
      ],
      "parameters": {
        "rule": {
          "interval": [
            {}
          ]
        }
      },
      "typeVersion": 1.1
    },
    {
      "id": "35be2b12-2b12-42ee-aa01-df7c49daf6d4",
      "name": "Obtenir les transactions HubSpot",
      "type": "n8n-nodes-base.hubspot",
      "position": [
        -80,
        -16
      ],
      "parameters": {
        "filters": {
          "propertiesCollection": {
            "propertiesValues": {
              "properties": [
                "dealname",
                "hs_lastmodifieddate",
                "notes_last_updated",
                "notes_last_contacted"
              ],
              "propertyMode": "valueOnly"
            }
          }
        },
        "resource": "deal",
        "operation": "getAll",
        "returnAll": true,
        "authentication": "appToken"
      },
      "credentials": {
        "hubspotAppToken": {
          "id": "YOUR_HUBSPOT_CREDENTIAL_ID",
          "name": "HubSpot account"
        }
      },
      "typeVersion": 2
    },
    {
      "id": "ff92028e-afa9-4ed2-b123-aa2619f612dd",
      "name": "Extraire les champs de transaction",
      "type": "n8n-nodes-base.code",
      "position": [
        144,
        -16
      ],
      "parameters": {
        "jsCode": "return items.map(item => {\n  const props = item.json.properties || {};\n\n  return {\n    json: {\n      dealId: item.json.dealId || '',\n      dealname: props.dealname?.value || '',\n      lastmodifieddate: props.hs_lastmodifieddate?.value || '',\n      notes_last_updated: props.notes_last_updated?.value || '',\n      notes_last_contacted: props.notes_last_contacted?.value || ''\n    }\n  };\n});"
      },
      "typeVersion": 2
    },
    {
      "id": "5f50f06b-dc6a-45eb-b8b5-17b3f092f7ce",
      "name": "Filtrer les prospects froids (21+ jours)",
      "type": "n8n-nodes-base.filter",
      "position": [
        368,
        -16
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 1,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "1",
              "operator": {
                "type": "number",
                "operation": "lt"
              },
              "leftValue": "={{ $json.lastmodifieddate.toNumber() }}",
              "rightValue": "={{ Date.now() - 21 * 24 * 60 * 60 * 1000 }}"
            }
          ]
        }
      },
      "typeVersion": 2
    },
    {
      "id": "f3e64724-432c-4354-a115-61185fb3d23e",
      "name": "Mettre à jour la transaction en 'Clôturé/perdu'",
      "type": "n8n-nodes-base.hubspot",
      "position": [
        592,
        -16
      ],
      "parameters": {
        "dealId": {
          "__rl": true,
          "mode": "id",
          "value": "={{ $json.dealId }}"
        },
        "resource": "deal",
        "operation": "update",
        "updateFields": {
          "stage": "closedlost"
        },
        "authentication": "appToken"
      },
      "credentials": {
        "hubspotAppToken": {
          "id": "YOUR_HUBSPOT_CREDENTIAL_ID",
          "name": "HubSpot account"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "4d51776d-1c40-435a-989f-660f4546b401",
      "name": "Récupérer les associations de transaction",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        800,
        -16
      ],
      "parameters": {
        "url": "=https://api.hubapi.com/crm/v3/objects/deals/{{ $json.dealId }}?associations=contacts",
        "options": {},
        "sendHeaders": true,
        "headerParameters": {
          "parameters": [
            {
              "name": "Authorization",
              "value": "Bearer YOUR_HUBSPOT_ACCESS_TOKEN"
            }
          ]
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "2d48cf93-9066-482b-9c7d-0b317ff99406",
      "name": "Extraire les IDs de contact",
      "type": "n8n-nodes-base.code",
      "position": [
        1008,
        -16
      ],
      "parameters": {
        "jsCode": "// Extract contact IDs from deals data\nconst dealsData = $input.all();\nconst contactIds = [];\n\ndealsData.forEach(item => {\n  const deal = item.json;\n  if (deal.associations && deal.associations.contacts && deal.associations.contacts.results) {\n    deal.associations.contacts.results.forEach(contact => {\n      contactIds.push({\n        contactId: contact.id,\n        dealId: deal.id,\n        dealName: deal.properties.dealname\n      });\n    });\n  }\n});\n\nreturn contactIds;"
      },
      "typeVersion": 2
    },
    {
      "id": "955cad66-4b5e-45b0-9c82-78f27ed78823",
      "name": "Obtenir les détails du contact",
      "type": "n8n-nodes-base.hubspot",
      "position": [
        1216,
        -16
      ],
      "parameters": {
        "contactId": {
          "__rl": true,
          "mode": "id",
          "value": "={{ $json.contactId }}"
        },
        "operation": "get",
        "authentication": "appToken",
        "additionalFields": {
          "propertiesCollection": {
            "propertiesValues": {
              "properties": [
                "email",
                "firstname",
                "lastname",
                "hs_full_name_or_email"
              ]
            }
          }
        }
      },
      "credentials": {
        "hubspotAppToken": {
          "id": "YOUR_HUBSPOT_CREDENTIAL_ID",
          "name": "HubSpot account"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "0ef1bd2f-8986-42eb-b09f-3e3c09ed3403",
      "name": "Extraire l'e-mail du contact",
      "type": "n8n-nodes-base.code",
      "position": [
        1424,
        -16
      ],
      "parameters": {
        "jsCode": "// Code Node (JavaScript)\n\nreturn items.map(item => {\n  let email = null;\n\n  // try to safely access the email field\n  if (item.json?.properties?.email?.value) {\n    email = item.json.properties.email.value;\n  }\n\n  return {\n    json: {\n      email\n    }\n  };\n});"
      },
      "typeVersion": 2
    },
    {
      "id": "ea48344a-33e0-442d-9b15-24708f6376f4",
      "name": "Envoyer la demande de retour Gmail",
      "type": "n8n-nodes-base.gmail",
      "position": [
        1648,
        -16
      ],
      "webhookId": "WEBHOOK_ID_PLACEHOLDER",
      "parameters": {
        "sendTo": "=your-email@example.com",
        "message": "=Hi {{ $('Get Contact Details').item.json.properties.firstname.value }},<br><br>\n\nI hope you're doing well.<br><br>\n\nThank you once again for considering [Your Company] for your project. While I understand you've decided to move in a different direction, I truly appreciate the time and effort you spent engaging with us.<br><br>\n\nWe'd Love Your Feedback<br>\nIf you're open to it, I'd be grateful for any thoughts you'd like to share about your decision—anything that could help us improve going forward.<br><br>\n\nOpen Door for the Future<br>\nShould your needs evolve in the future, I'd be happy to reconnect and support you in any way we can.<br><br>\n\nWishing you all the best with your project and continued success ahead.<br><br>\n\nWarm regards,<br><br>\n[Your Company]<br>\n",
        "options": {
          "appendAttribution": false
        },
        "subject": "=Thank You — We'd Value Your Feedback"
      },
      "credentials": {
        "gmailOAuth2": {
          "id": "YOUR_GMAIL_CREDENTIAL_ID",
          "name": "Gmail account"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "da6063b5-6c22-4312-960a-276b9a8a90dd",
      "name": "Envoyer la notification Slack",
      "type": "n8n-nodes-base.slack",
      "position": [
        1856,
        -16
      ],
      "webhookId": "WEBHOOK_ID_PLACEHOLDER",
      "parameters": {
        "text": "=Deals which are moved to Closed Lost: {{ $('Extract Contact IDs').item.json.dealId }}",
        "select": "channel",
        "channelId": {
          "__rl": true,
          "mode": "list",
          "value": "YOUR_SLACK_CHANNEL_ID",
          "cachedResultName": "general"
        },
        "otherOptions": {},
        "authentication": "oAuth2"
      },
      "credentials": {
        "slackOAuth2Api": {
          "id": "YOUR_SLACK_CREDENTIAL_ID",
          "name": "Slack account"
        }
      },
      "typeVersion": 2.3
    },
    {
      "id": "00280018-e849-44a3-a90a-e4b41e3d3fb4",
      "name": "Note adhésive",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -352,
        -336
      ],
      "parameters": {
        "color": 4,
        "width": 640,
        "height": 624,
        "content": "## Trigger & Deal Fetching\n\n*Schedule Trigger: Starts the workflow on a defined interval (e.g., daily, weekly).\n\nGet HubSpot Deals: Pulls all deals from HubSpot, retrieving key fields like dealname, hs_lastmodifieddate, notes_last_updated, and notes_last_contacted.\n\nExtract Deal Fields: Cleans up and restructures the deal data into a consistent format (dealId, dealname, timestamps).*"
      },
      "typeVersion": 1
    },
    {
      "id": "26416831-06bb-45ef-983a-44c74160ae87",
      "name": "Note adhésive 1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        304,
        -336
      ],
      "parameters": {
        "color": 2,
        "width": 432,
        "height": 624,
        "content": "## Lead Qualification (Cold Deals)\n\n*Filter Cold Leads (21+ days): Uses lastmodifieddate and compares it against Date.now() - 21 days.\n\nKeeps only deals untouched for 21+ days.\n\nUpdate Deal → Closed Lost: Automatically updates those stale deals in HubSpot, marking them as Closed Lost.*"
      },
      "typeVersion": 1
    },
    {
      "id": "9bf5bb30-24d1-4f31-a07b-dd781175e066",
      "name": "Note adhésive 2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        752,
        -336
      ],
      "parameters": {
        "color": 6,
        "width": 832,
        "height": 624,
        "content": "## Deal → Contact Mapping\n\n*Fetch Deal Associations: Calls HubSpot API to get contacts linked to the filtered deals.\n\nExtract Contact IDs: Parses the association response to pull out contactId, dealId, and dealName.\n\nGet Contact Details: Retrieves enriched details of each contact (e.g., email, firstname, lastname).\n\nExtract Contact Email: Simplifies the response, keeping only the email (and ensuring it's safely extracted).*"
      },
      "typeVersion": 1
    },
    {
      "id": "cedf1213-f134-4ddd-a96c-764d1320193e",
      "name": "Note adhésive 3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1600,
        -336
      ],
      "parameters": {
        "color": 3,
        "width": 384,
        "height": 624,
        "content": "## Follow-up & Notifications\n\n*Send Gmail Feedback Request:\n\nSends a polite follow-up email thanking the lead and asking for feedback.\n\nUses personalized fields like firstname in the message.\n\nSend Slack Notification:\n\nPosts a message to a Slack channel (e.g., #general) to alert the team of deals moved to Closed Lost.*"
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "pinData": {},
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "TEMPLATE_VERSION_ID",
  "connections": {
    "99a95283-6245-4d88-ae58-07aaef8ddf14": {
      "main": [
        [
          {
            "node": "35be2b12-2b12-42ee-aa01-df7c49daf6d4",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "35be2b12-2b12-42ee-aa01-df7c49daf6d4": {
      "main": [
        [
          {
            "node": "ff92028e-afa9-4ed2-b123-aa2619f612dd",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "2d48cf93-9066-482b-9c7d-0b317ff99406": {
      "main": [
        [
          {
            "node": "955cad66-4b5e-45b0-9c82-78f27ed78823",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "ff92028e-afa9-4ed2-b123-aa2619f612dd": {
      "main": [
        [
          {
            "node": "5f50f06b-dc6a-45eb-b8b5-17b3f092f7ce",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "955cad66-4b5e-45b0-9c82-78f27ed78823": {
      "main": [
        [
          {
            "node": "0ef1bd2f-8986-42eb-b09f-3e3c09ed3403",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "0ef1bd2f-8986-42eb-b09f-3e3c09ed3403": {
      "main": [
        [
          {
            "node": "ea48344a-33e0-442d-9b15-24708f6376f4",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "4d51776d-1c40-435a-989f-660f4546b401": {
      "main": [
        [
          {
            "node": "2d48cf93-9066-482b-9c7d-0b317ff99406",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "f3e64724-432c-4354-a115-61185fb3d23e": {
      "main": [
        [
          {
            "node": "4d51776d-1c40-435a-989f-660f4546b401",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "ea48344a-33e0-442d-9b15-24708f6376f4": {
      "main": [
        [
          {
            "node": "da6063b5-6c22-4312-960a-276b9a8a90dd",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "5f50f06b-dc6a-45eb-b8b5-17b3f092f7ce": {
      "main": [
        [
          {
            "node": "f3e64724-432c-4354-a115-61185fb3d23e",
            "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é ?

Intermédiaire - Création de contenu, 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é
Intermédiaire
Nombre de nœuds15
Catégorie2
Types de nœuds8
Description de la difficulté

Adapté aux utilisateurs expérimentés, avec des workflows de complexité moyenne contenant 6-15 nœuds

Auteur
Avkash Kakdiya

Avkash Kakdiya

@itechnotion

🚀 Founder of iTechNotion — we build custom AI-powered automation workflows for startups, agencies, and founders. 💡 Specializing in agentic AI systems, content automation, sales funnels, and digital workers. 🔧 14+ years in tech | Building scalable no-code/low-code solutions using n8n, OpenAI, and other API-first tools. 📬 Let’s automate what slows you down.

Liens externes
Voir sur n8n.io

Partager ce workflow

Catégories

Catégories: 34