使用Bright Data MCP和AIAgents搜索和分析社交媒体资料
高级
这是一个Lead Generation, AI Summarization领域的自动化工作流,包含 50 个节点。主要使用 Set, Code, Form, Merge, Switch 等节点。 使用AI生成360度社交媒体报告 - Bright Data MCP
前置要求
- •Google Drive API 凭证
- •OpenAI API Key
使用的节点 (50)
工作流预览
可视化展示节点连接关系,支持缩放和平移
导出工作流
复制以下 JSON 配置到 n8n 导入,即可使用此工作流
{
"id": "B3qMasLQ1QMkxzGW",
"meta": {
"instanceId": "6665c2c703a55cd73d6f4e745f63a64420cb51f425e68de42882f34d312a7e40",
"templateCredsSetupCompleted": true
},
"name": "使用 Bright Data MCP 和 AIAgents 搜索和分析社交媒体资料",
"tags": [],
"nodes": [
{
"id": "19fda137-b8be-43b0-8828-0880db36deee",
"name": "社交媒体研究表单",
"type": "n8n-nodes-base.formTrigger",
"position": [
352,
336
],
"webhookId": "a333c108-e2d5-4f37-9c75-5b0b10f3e8fb",
"parameters": {
"options": {},
"formTitle": "Social Media Presence Researcher",
"formFields": {
"values": [
{
"fieldLabel": "Full Name",
"placeholder": "e.g., John Smith",
"requiredField": true
},
{
"fieldLabel": "Email Address",
"placeholder": "e.g., john.smith@company.com"
},
{
"fieldLabel": "Company/Organization",
"placeholder": "e.g., TechCorp Inc"
},
{
"fieldLabel": "Location",
"placeholder": "e.g., San Francisco, CA"
},
{
"fieldType": "textarea",
"fieldLabel": "Known Social Handles",
"placeholder": "Optional: List any known social media handles\nLinkedIn: john-smith\nTwitter: @jsmith\nGitHub: jsmith-dev"
},
{
"fieldType": "dropdown",
"fieldLabel": "Search Depth",
"fieldOptions": {
"values": [
{
"option": "Basic - Quick scan"
},
{
"option": "Comprehensive - Full analysis"
},
{
"option": "Deep - Maximum detail"
}
]
},
"requiredField": true
},
{
"fieldType": "checkbox",
"fieldLabel": "Platforms to Search",
"fieldOptions": {
"values": [
{
"option": "LinkedIn"
},
{
"option": "X/Twitter"
},
{
"option": "Instagram"
},
{
"option": "GitHub"
},
{
"option": "YouTube"
},
{
"option": "TikTok"
},
{
"option": "Facebook"
},
{
"option": "Reddit"
},
{
"option": "Pinterest"
},
{
"option": "Snapchat"
}
]
}
}
]
},
"formDescription": "Enter person details to discover and analyze their complete social media presence across all major platforms"
},
"typeVersion": 2.3
},
{
"id": "e24ffee7-7895-4572-8de1-273baf764b8c",
"name": "输入验证器",
"type": "n8n-nodes-base.code",
"position": [
576,
336
],
"parameters": {
"mode": "runOnceForEachItem",
"jsCode": "// Get form data - handle both form and webhook inputs\nconst rawData = $input.item.json;\nconst formData = rawData.body || rawData; // Use body if it exists (webhook), otherwise use raw data (form)\n\n// Helper function to extract handles from text\nfunction parseKnownHandles(text) {\n if (!text) return {};\n \n const handles = {};\n const lines = text.split('\\n');\n \n lines.forEach(line => {\n // Check for LinkedIn URLs or mentions\n if (line.toLowerCase().includes('linkedin')) {\n const urlMatch = line.match(/linkedin\\.com\\/in\\/([^/\\s?]+)/);\n const textMatch = line.match(/linkedin:\\s*([A-Za-z0-9-]+)/i);\n if (urlMatch) handles.linkedin = urlMatch[1];\n else if (textMatch) handles.linkedin = textMatch[1];\n }\n \n // Check for Twitter/X handles\n if (line.toLowerCase().includes('twitter') || line.toLowerCase().includes('x:') || line.includes('@')) {\n const match = line.match(/@([A-Za-z0-9_]+)|twitter:\\s*([A-Za-z0-9_]+)|x:\\s*([A-Za-z0-9_]+)/i);\n if (match) handles.twitter = match[1] || match[2] || match[3];\n }\n \n // Check for GitHub\n if (line.toLowerCase().includes('github')) {\n const urlMatch = line.match(/github\\.com\\/([A-Za-z0-9-]+)/);\n const textMatch = line.match(/github:\\s*([A-Za-z0-9_-]+)/i);\n if (urlMatch) handles.github = urlMatch[1];\n else if (textMatch) handles.github = textMatch[1];\n }\n \n // Check for Instagram\n if (line.toLowerCase().includes('instagram')) {\n const urlMatch = line.match(/instagram\\.com\\/@?([A-Za-z0-9_.]+)/);\n const textMatch = line.match(/instagram:\\s*@?([A-Za-z0-9_.]+)/i);\n if (urlMatch) handles.instagram = urlMatch[1];\n else if (textMatch) handles.instagram = textMatch[1];\n }\n \n // Check for YouTube\n if (line.toLowerCase().includes('youtube')) {\n const channelMatch = line.match(/youtube\\.com\\/(?:c\\/|@)([A-Za-z0-9_-]+)/);\n const textMatch = line.match(/youtube:\\s*@?([A-Za-z0-9_-]+)/i);\n if (channelMatch) handles.youtube = channelMatch[1];\n else if (textMatch) handles.youtube = textMatch[1];\n }\n \n // Check for Facebook\n if (line.toLowerCase().includes('facebook')) {\n const urlMatch = line.match(/facebook\\.com\\/([A-Za-z0-9.]+)/);\n const textMatch = line.match(/facebook:\\s*([A-Za-z0-9.]+)/i);\n if (urlMatch) handles.facebook = urlMatch[1];\n else if (textMatch) handles.facebook = textMatch[1];\n }\n \n // Check for TikTok\n if (line.toLowerCase().includes('tiktok')) {\n const urlMatch = line.match(/tiktok\\.com\\/@([A-Za-z0-9_.]+)/);\n const textMatch = line.match(/tiktok:\\s*@?([A-Za-z0-9_.]+)/i);\n if (urlMatch) handles.tiktok = urlMatch[1];\n else if (textMatch) handles.tiktok = textMatch[1];\n }\n });\n \n return handles;\n}\n\n// Generate name variations for searching\nfunction generateNameVariations(fullName) {\n if (!fullName) return [];\n \n const cleanName = fullName.trim();\n const parts = cleanName.split(' ').filter(p => p); // Remove empty parts\n const variations = new Set([cleanName]);\n \n if (parts.length === 1) {\n // Single name - just return it\n variations.add(parts[0]);\n } else if (parts.length === 2) {\n const [first, last] = parts;\n variations.add(`${first} ${last}`);\n variations.add(`${first}.${last}`);\n variations.add(`${first}${last}`);\n variations.add(`${first[0]}. ${last}`);\n variations.add(`${first} ${last[0]}.`);\n variations.add(`${last} ${first}`);\n variations.add(`${last}, ${first}`);\n } else if (parts.length === 3) {\n const [first, middle, last] = parts;\n variations.add(`${first} ${middle} ${last}`);\n variations.add(`${first} ${last}`);\n variations.add(`${first} ${middle[0]}. ${last}`);\n variations.add(`${first[0]}. ${middle[0]}. ${last}`);\n variations.add(`${last}, ${first} ${middle}`);\n variations.add(`${last}, ${first}`);\n } else if (parts.length >= 4) {\n // Handle longer names (like Jean-Claude Van Damme Jr.)\n // Take first and last parts as primary\n const first = parts[0];\n const last = parts[parts.length - 1];\n const middle = parts.slice(1, -1).join(' ');\n \n variations.add(cleanName); // Full name\n variations.add(`${first} ${last}`);\n variations.add(`${last}, ${first}`);\n if (middle) {\n variations.add(`${first} ${middle[0]}. ${last}`);\n variations.add(`${last}, ${first} ${middle}`);\n }\n }\n \n // Return as array\n return Array.from(variations);\n}\n\n// Build search queries for each platform\nfunction buildSearchQueries(name, company, location, platform) {\n const queries = [];\n const baseQuery = `\"${name}\"`;\n \n switch(platform.toLowerCase()) {\n case 'linkedin':\n queries.push(`${baseQuery} site:linkedin.com/in`);\n if (company) queries.push(`${baseQuery} \"${company}\" site:linkedin.com`);\n if (location) queries.push(`${baseQuery} \"${location}\" site:linkedin.com`);\n break;\n \n case 'x/twitter':\n queries.push(`${baseQuery} site:twitter.com`);\n queries.push(`${baseQuery} site:x.com`);\n if (company) queries.push(`${baseQuery} \"${company}\" twitter`);\n break;\n \n case 'github':\n queries.push(`${baseQuery} site:github.com`);\n if (company) queries.push(`${baseQuery} \"${company}\" github`);\n break;\n \n case 'instagram':\n queries.push(`${baseQuery} site:instagram.com`);\n if (location) queries.push(`${baseQuery} \"${location}\" instagram`);\n break;\n \n case 'youtube':\n queries.push(`${baseQuery} site:youtube.com/@`);\n queries.push(`${baseQuery} site:youtube.com/c/`);\n if (company) queries.push(`${baseQuery} YouTube channel`);\n break;\n \n case 'tiktok':\n queries.push(`${baseQuery} site:tiktok.com/@`);\n queries.push(`${baseQuery} TikTok`);\n break;\n \n case 'facebook':\n queries.push(`${baseQuery} site:facebook.com`);\n if (location) queries.push(`${baseQuery} \"${location}\" facebook`);\n break;\n \n case 'reddit':\n queries.push(`${baseQuery} site:reddit.com/user`);\n queries.push(`${baseQuery} reddit user`);\n break;\n \n case 'pinterest':\n queries.push(`${baseQuery} site:pinterest.com`);\n break;\n \n case 'snapchat':\n queries.push(`${baseQuery} snapchat`);\n queries.push(`${baseQuery} \"snapcode\"`);\n break;\n }\n \n return queries;\n}\n\n// Validate required fields\nconst errors = [];\nif (!formData['Full Name']?.trim()) {\n errors.push('Full Name is required');\n}\nif (!formData['Search Depth']) {\n errors.push('Search Depth is required');\n}\nif (!formData['Platforms to Search'] || formData['Platforms to Search'].length === 0) {\n errors.push('At least one platform must be selected');\n}\n\n// Process the form data\nconst validatedData = {\n // Original inputs\n fullName: formData['Full Name']?.trim() || '',\n email: formData['Email Address']?.trim() || '',\n company: formData['Company/Organization']?.trim() || '',\n location: formData['Location']?.trim() || '',\n searchDepth: formData['Search Depth'] || 'Comprehensive - Full analysis',\n platformsToSearch: formData['Platforms to Search'] || [],\n \n // Parsed and generated data\n knownHandles: parseKnownHandles(formData['Known Social Handles']),\n nameVariations: generateNameVariations(formData['Full Name']),\n \n // Search configuration\n searchConfig: {\n depth: formData['Search Depth']?.includes('Basic') ? 'basic' : \n formData['Search Depth']?.includes('Deep') ? 'deep' : 'comprehensive',\n maxResultsPerPlatform: formData['Search Depth']?.includes('Basic') ? 5 : \n formData['Search Depth']?.includes('Deep') ? 20 : 10\n },\n \n // Validation\n isValid: errors.length === 0,\n validationErrors: errors,\n \n // Timestamp\n processedAt: new Date().toISOString()\n};\n\n// Build search queries for each selected platform\nvalidatedData.searchQueries = {};\nconst platforms = formData['Platforms to Search'] || [];\n\nif (validatedData.isValid) {\n platforms.forEach(platform => {\n validatedData.searchQueries[platform] = [];\n \n // Add queries for each name variation\n validatedData.nameVariations.forEach(nameVar => {\n const queries = buildSearchQueries(nameVar, formData['Company/Organization'], formData['Location'], platform);\n validatedData.searchQueries[platform].push(...queries);\n });\n \n // Remove duplicates\n validatedData.searchQueries[platform] = [...new Set(validatedData.searchQueries[platform])];\n });\n}\n\n// Add summary\nvalidatedData.summary = {\n totalPlatforms: platforms.length,\n hasKnownHandles: Object.keys(validatedData.knownHandles).length > 0,\n nameVariationCount: validatedData.nameVariations.length,\n totalSearchQueries: Object.values(validatedData.searchQueries).flat().length\n};\n\nreturn validatedData;"
},
"typeVersion": 2
},
{
"id": "3b4ecc52-8cd6-43ee-8c14-33246c2b796e",
"name": "Bright Data MCP",
"type": "@n8n/n8n-nodes-langchain.mcpClientTool",
"position": [
2016,
1456
],
"parameters": {
"options": {},
"endpointUrl": "https://mcp.brightdata.com/mcp?token=YOUR_BRIGHT_DATA_TOKEN_HERE&unlocker=UNLOCKER_CODE_HERE&pro=1",
"serverTransport": "httpStreamable"
},
"typeVersion": 1.1
},
{
"id": "ac0cb825-f1a0-48db-9395-4f307f326c38",
"name": "发现代理",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
864,
336
],
"parameters": {
"text": "=You have been given information about {{ $json.fullName }} to find and verify their social media profiles.\n\n## Your Task:\nFind and verify social media profiles for this person across the platforms they selected.\n\n## Input Data:\n- Full Name: {{ $json.fullName }}\n- Company: {{ $json.company || \"Not provided\" }}\n- Location: {{ $json.location || \"Not provided\" }}\n- Email: {{ $json.email || \"Not provided\" }}\n- Known Handles: {{ JSON.stringify($json.knownHandles) }}\n- Platforms to Search: {{ JSON.stringify($json.platformsToSearch) }}\n- Search Depth: {{ $json.searchConfig.depth }}\n- Max Results Per Platform: {{ $json.searchConfig.maxResultsPerPlatform }}\n\n## Search Queries Available:\n{{ JSON.stringify($json.searchQueries, null, 2) }}\n\n## Instructions:\n\n1. **Search Phase**: For each platform in platformsToSearch:\n - Use the search_engine tool with the provided queries\n - Start with the first 2-3 queries per platform\n - Look for profile URLs that match the person\n\n2. **Verification Phase**: For each potential profile found:\n - Check if the profile name matches our target person\n - Look for matching company, location, or other details\n - Cross-reference with known handles if available\n - Note any bio links that connect to other profiles\n\n3. **Confidence Scoring**: Assign confidence scores (0.0 to 1.0):\n - 0.9-1.0: Perfect match (name, company, location all match)\n - 0.7-0.9: Strong match (name matches, plus 1-2 other factors)\n - 0.5-0.7: Possible match (name matches, some uncertainty)\n - Below 0.5: Unlikely match (include only if no better options)\n\n4. **Evidence Collection**: For each profile, note:\n - URL of the profile\n - Handle/username\n - Matching factors (what confirmed this is the right person)\n - Any bio description or tagline\n - Follower/connection count if visible\n\n## Important Guidelines:\n\n- If you find a profile with HIGH confidence on one platform, use that information to improve searches on other platforms\n- If known handles are provided, verify them first before searching\n- Use scrape_as_markdown if you need to get more details from a specific profile page\n- Limit your search to {{ $json.searchConfig.maxResultsPerPlatform }} results per platform\n- Focus on quality over quantity - better to have 3 verified profiles than 10 uncertain ones\n\n## Required Output Format:\nReturn your findings in the structured format defined by the output parser.",
"options": {
"systemMessage": "You are a Social Media Discovery Agent specialized in finding and verifying people's social media profiles across multiple platforms. You are thorough, analytical, and skilled at cross-referencing information to ensure accurate profile matching. You use search engines effectively and can identify the same person across different platforms by analyzing profile details, photos, bios, and cross-platform links."
},
"promptType": "define"
},
"retryOnFail": true,
"typeVersion": 2.2
},
{
"id": "cc09048c-a755-4725-93e9-6840dd176920",
"name": "OpenAI 聊天模型",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"position": [
800,
560
],
"parameters": {
"model": {
"__rl": true,
"mode": "list",
"value": "gpt-4.1-mini",
"cachedResultName": "gpt-4.1-mini"
},
"options": {}
},
"credentials": {
"openAiApi": {
"id": "3lTEzvz4p0zyelIS",
"name": "OpenAi Romuald private"
}
},
"typeVersion": 1.2
},
{
"id": "c97b1714-0285-4d9c-8161-7f9619df1f3f",
"name": "输出验证器",
"type": "n8n-nodes-base.code",
"position": [
1264,
336
],
"parameters": {
"jsCode": "// Get the AI agent's output\nconst agentOutput = $input.item.json;\n\n// Helper function to normalize platform names\nfunction normalizePlatformName(platform) {\n const mapping = {\n 'LinkedIn': 'linkedin',\n 'X/Twitter': 'twitter',\n 'Twitter': 'twitter',\n 'X': 'twitter',\n 'Instagram': 'instagram',\n 'GitHub': 'github',\n 'Youtube': 'youtube',\n 'YouTube': 'youtube',\n 'TikTok': 'tiktok',\n 'Facebook': 'facebook',\n 'Reddit': 'reddit',\n 'Pinterest': 'pinterest',\n 'Snapchat': 'snapchat'\n };\n \n return mapping[platform] || platform.toLowerCase();\n}\n\n// Parse the agent's output\nlet discoveredProfiles = {};\nlet metadata = {\n searchQueriesUsed: 0,\n platformsChecked: 0,\n profilesFound: 0,\n highConfidenceProfiles: 0,\n timeTakenSeconds: 0,\n searchStartTime: new Date().toISOString(),\n searchEndTime: new Date().toISOString()\n};\n\n// Parse the agent output\nlet parsedData = null;\ntry {\n if (agentOutput.output && typeof agentOutput.output === 'string') {\n // Parse the JSON string in the output field\n parsedData = JSON.parse(agentOutput.output);\n } else if (agentOutput.output && typeof agentOutput.output === 'object') {\n parsedData = agentOutput.output;\n } else if (agentOutput.profiles) {\n parsedData = { profiles: agentOutput.profiles };\n }\n} catch (e) {\n console.error('Error parsing agent output:', e);\n}\n\n// Process the profiles OBJECT format (not array!)\nif (parsedData && parsedData.profiles && typeof parsedData.profiles === 'object') {\n // Iterate over the platforms (object keys)\n Object.entries(parsedData.profiles).forEach(([platform, profilesArray]) => {\n const normalizedPlatform = normalizePlatformName(platform);\n \n // Check if this platform has any profiles found\n if (profilesArray && Array.isArray(profilesArray) && profilesArray.length > 0) {\n // Take the first (most confident) profile for each platform\n const profile = profilesArray[0];\n \n discoveredProfiles[normalizedPlatform] = {\n handle: profile.handle || profile.username || '',\n url: profile.url || '',\n confidence: profile.confidence_score || profile.confidence || 0.5,\n markers: profile.matching_factors || [],\n profileData: {\n name: profile.name || '',\n bio: profile.bio_description || profile.bio || '',\n followers: profile.follower_count || profile.followers_connections || profile.followers || '',\n company: profile.company || '',\n location: profile.location || '',\n notes: profile.notes || ''\n }\n };\n \n metadata.profilesFound++;\n metadata.platformsChecked++;\n \n if (profile.confidence_score > 0.8 || profile.confidence > 0.8) {\n metadata.highConfidenceProfiles++;\n }\n } else {\n // Platform was checked but no profiles found\n metadata.platformsChecked++;\n }\n });\n} else if (parsedData && parsedData.profilesDiscovered) {\n // Handle the expected format if the agent returns it\n discoveredProfiles = parsedData.profilesDiscovered;\n if (parsedData.discoveryMetadata) {\n metadata = { ...metadata, ...parsedData.discoveryMetadata };\n }\n}\n\n// If still no profiles, try to extract from raw text\nif (Object.keys(discoveredProfiles).length === 0) {\n const text = JSON.stringify(agentOutput);\n \n // Extract URLs using regex\n const urlPatterns = {\n linkedin: /linkedin\\.com\\/in\\/([a-zA-Z0-9-]+)/gi,\n twitter: /(?:twitter|x)\\.com\\/([a-zA-Z0-9_]+)/gi,\n github: /github\\.com\\/([a-zA-Z0-9-]+)/gi,\n instagram: /instagram\\.com\\/@?([a-zA-Z0-9_.]+)/gi,\n youtube: /youtube\\.com\\/(?:channel\\/|@)?([a-zA-Z0-9_-]+)/gi,\n tiktok: /tiktok\\.com\\/@([a-zA-Z0-9_.]+)/gi\n };\n \n for (const [platform, pattern] of Object.entries(urlPatterns)) {\n const matches = text.matchAll(pattern);\n for (const match of matches) {\n if (!discoveredProfiles[platform]) {\n discoveredProfiles[platform] = {\n handle: match[1],\n url: `https://${match[0]}`,\n confidence: 0.5,\n markers: [\"Found in search results\"],\n profileData: {}\n };\n metadata.profilesFound++;\n }\n }\n }\n}\n\n// Update platform count\nmetadata.platformsChecked = Object.keys(discoveredProfiles).length;\n\n// Build final output in the structure expected by the next nodes\nconst formattedOutput = {\n profilesDiscovered: discoveredProfiles,\n discoveryMetadata: metadata,\n verificationDetails: {\n crossPlatformLinks: [],\n commonIdentifiers: {},\n consistentData: {}\n },\n recommendedPrimaryProfiles: {},\n searchErrors: [],\n // Keep original input data for reference\n originalInput: {\n fullName: agentOutput.fullName || '',\n company: agentOutput.company || '',\n location: agentOutput.location || '',\n email: agentOutput.email || ''\n }\n};\n\n// Add verification details if we have multiple profiles\nif (Object.keys(discoveredProfiles).length > 1) {\n // Extract common data across profiles\n const allNames = new Set();\n const allCompanies = new Set();\n const allLocations = new Set();\n \n Object.values(discoveredProfiles).forEach(profile => {\n if (profile.profileData) {\n if (profile.profileData.name) allNames.add(profile.profileData.name);\n if (profile.profileData.company) allCompanies.add(profile.profileData.company);\n if (profile.profileData.location) allLocations.add(profile.profileData.location);\n }\n });\n \n formattedOutput.verificationDetails.consistentData = {\n name: allNames.size === 1 ? Array.from(allNames)[0] : '',\n company: allCompanies.size === 1 ? Array.from(allCompanies)[0] : '',\n location: allLocations.size === 1 ? Array.from(allLocations)[0] : '',\n profilePhoto: false // Would need actual photo comparison\n };\n}\n\n// Add recommended profiles based on what was found\nif (discoveredProfiles.linkedin) {\n formattedOutput.recommendedPrimaryProfiles.professional = {\n platform: 'linkedin',\n url: discoveredProfiles.linkedin.url,\n reason: 'Primary professional network profile'\n };\n}\n\nif (discoveredProfiles.twitter) {\n formattedOutput.recommendedPrimaryProfiles.social = {\n platform: 'twitter',\n url: discoveredProfiles.twitter.url,\n reason: 'Primary social media presence'\n };\n}\n\nif (discoveredProfiles.github) {\n formattedOutput.recommendedPrimaryProfiles.technical = {\n platform: 'github',\n url: discoveredProfiles.github.url,\n reason: 'Primary technical/developer profile'\n };\n}\n\nif (discoveredProfiles.youtube) {\n formattedOutput.recommendedPrimaryProfiles.content = {\n platform: 'youtube',\n url: discoveredProfiles.youtube.url,\n reason: 'Content creation and thought leadership'\n };\n}\n\n// Add summary statistics\nformattedOutput.summary = {\n totalProfilesFound: metadata.profilesFound,\n highConfidenceMatches: metadata.highConfidenceProfiles,\n platformsCovered: Object.keys(discoveredProfiles),\n primaryProfile: formattedOutput.recommendedPrimaryProfiles.professional || \n formattedOutput.recommendedPrimaryProfiles.social || \n formattedOutput.recommendedPrimaryProfiles.technical ||\n null\n};\n\nreturn formattedOutput;"
},
"typeVersion": 2
},
{
"id": "282c09b4-db66-4524-a4a8-67cb4433e1b6",
"name": "资料验证器",
"type": "n8n-nodes-base.code",
"position": [
1488,
336
],
"parameters": {
"jsCode": "// Get discovered profiles from previous node\nconst discoveryOutput = $input.item.json;\nconst profiles = discoveryOutput.profilesDiscovered || {};\n\n// Initialize validation results\nconst validationResults = {\n profilesValidated: {},\n crossPlatformVerification: {\n nameConsistency: 0,\n locationConsistency: 0,\n companyConsistency: 0,\n overallConsistency: 0\n },\n confidenceScores: {},\n verificationMatrix: {},\n primaryIdentity: {\n name: '',\n company: '',\n location: '',\n email: '',\n primaryPlatform: ''\n },\n validationFlags: [],\n suggestedActions: []\n};\n\n// Extract all unique values across profiles\nconst names = new Set();\nconst companies = new Set();\nconst locations = new Set();\nconst bios = [];\nconst highestConfidenceProfile = { confidence: 0, platform: '' };\n\n// Analyze each profile\nObject.entries(profiles).forEach(([platform, profile]) => {\n if (!profile || !profile.url) return;\n \n // Track confidence scores\n validationResults.confidenceScores[platform] = profile.confidence || 0.5;\n \n // Track highest confidence profile\n if (profile.confidence > highestConfidenceProfile.confidence) {\n highestConfidenceProfile.confidence = profile.confidence;\n highestConfidenceProfile.platform = platform;\n }\n \n // Extract identity markers\n if (profile.profileData) {\n if (profile.profileData.name) names.add(profile.profileData.name);\n if (profile.profileData.company) companies.add(profile.profileData.company);\n if (profile.profileData.location) locations.add(profile.profileData.location);\n if (profile.profileData.bio) bios.push({ platform, bio: profile.profileData.bio });\n }\n \n // Build validated profile entry\n validationResults.profilesValidated[platform] = {\n ...profile,\n validationStatus: profile.confidence >= 0.7 ? 'verified' : \n profile.confidence >= 0.5 ? 'probable' : 'uncertain',\n validationNotes: []\n };\n});\n\n// Calculate consistency scores\nvalidationResults.crossPlatformVerification.nameConsistency = \n names.size <= 1 ? 1.0 : 0.5 / names.size;\nvalidationResults.crossPlatformVerification.companyConsistency = \n companies.size <= 1 ? 1.0 : 0.5 / companies.size;\nvalidationResults.crossPlatformVerification.locationConsistency = \n locations.size <= 1 ? 1.0 : 0.5 / locations.size;\n\n// Overall consistency score\nvalidationResults.crossPlatformVerification.overallConsistency = \n (validationResults.crossPlatformVerification.nameConsistency + \n validationResults.crossPlatformVerification.companyConsistency + \n validationResults.crossPlatformVerification.locationConsistency) / 3;\n\n// Determine primary identity based on highest confidence profile\nif (highestConfidenceProfile.platform && profiles[highestConfidenceProfile.platform]) {\n const primaryProfile = profiles[highestConfidenceProfile.platform];\n validationResults.primaryIdentity = {\n name: Array.from(names)[0] || discoveryOutput.originalInput?.fullName || '',\n company: Array.from(companies)[0] || discoveryOutput.originalInput?.company || '',\n location: Array.from(locations)[0] || discoveryOutput.originalInput?.location || '',\n email: discoveryOutput.originalInput?.email || '',\n primaryPlatform: highestConfidenceProfile.platform\n };\n}\n\n// Create verification matrix (which platforms link to each other)\nObject.entries(profiles).forEach(([platform1, profile1]) => {\n validationResults.verificationMatrix[platform1] = {};\n \n Object.entries(profiles).forEach(([platform2, profile2]) => {\n if (platform1 === platform2) {\n validationResults.verificationMatrix[platform1][platform2] = 1.0;\n } else {\n // Check for cross-references in bios or markers\n let linkScore = 0;\n \n // Check if bio mentions other platform\n if (profile1.profileData?.bio && \n profile1.profileData.bio.toLowerCase().includes(platform2.toLowerCase())) {\n linkScore += 0.5;\n }\n \n // Check if markers mention cross-platform links\n if (profile1.markers) {\n profile1.markers.forEach(marker => {\n if (marker.toLowerCase().includes(platform2.toLowerCase())) {\n linkScore += 0.3;\n }\n });\n }\n \n validationResults.verificationMatrix[platform1][platform2] = Math.min(linkScore, 1.0);\n }\n });\n});\n\n// Add validation flags based on findings\nif (validationResults.crossPlatformVerification.overallConsistency < 0.7) {\n validationResults.validationFlags.push({\n type: 'warning',\n message: 'Inconsistent information across profiles - manual review recommended',\n severity: 'medium'\n });\n}\n\nif (names.size > 1) {\n validationResults.validationFlags.push({\n type: 'info',\n message: `Multiple name variations found: ${Array.from(names).join(', ')}`,\n severity: 'low'\n });\n}\n\nif (Object.keys(profiles).length < 2) {\n validationResults.validationFlags.push({\n type: 'info',\n message: 'Limited profiles found for cross-verification',\n severity: 'low'\n });\n}\n\n// Suggest actions for improving validation\nif (Object.keys(profiles).length < 3) {\n validationResults.suggestedActions.push('Search additional platforms for better cross-verification');\n}\n\nObject.entries(validationResults.confidenceScores).forEach(([platform, score]) => {\n if (score < 0.7) {\n validationResults.suggestedActions.push(`Manual verification recommended for ${platform} profile`);\n \n // Add specific validation notes\n if (validationResults.profilesValidated[platform]) {\n validationResults.profilesValidated[platform].validationNotes.push(\n 'Low confidence score - additional verification needed'\n );\n }\n }\n});\n\n// Calculate trust score for the entire profile set\nconst avgConfidence = Object.values(validationResults.confidenceScores)\n .reduce((sum, score) => sum + score, 0) / Object.keys(validationResults.confidenceScores).length;\n\nvalidationResults.overallTrustScore = \n (avgConfidence * 0.5) + \n (validationResults.crossPlatformVerification.overallConsistency * 0.3) +\n (Object.keys(profiles).length / 10 * 0.2); // More platforms = higher trust\n\n// Add metadata\nvalidationResults.validationMetadata = {\n timestamp: new Date().toISOString(),\n profilesAnalyzed: Object.keys(profiles).length,\n highConfidenceProfiles: Object.values(validationResults.confidenceScores)\n .filter(score => score >= 0.8).length,\n validationMethod: 'cross-platform-analysis',\n trustLevel: validationResults.overallTrustScore >= 0.8 ? 'high' :\n validationResults.overallTrustScore >= 0.6 ? 'medium' : 'low'\n};\n\n// Pass through all original data plus validation results\nreturn {\n ...discoveryOutput,\n validationResults,\n profilesValidated: validationResults.profilesValidated,\n primaryIdentity: validationResults.primaryIdentity,\n trustScore: validationResults.overallTrustScore,\n proceedToAnalysis: validationResults.overallTrustScore >= 0.5 // Only proceed if trust is sufficient\n};"
},
"typeVersion": 2
},
{
"id": "b279af3a-8f2b-49e8-9218-1d9ec409103c",
"name": "将平台拆分为项目",
"type": "n8n-nodes-base.code",
"position": [
1712,
336
],
"parameters": {
"jsCode": "// Get the validated profiles from previous node\nconst validatedData = $input.item.json;\nconst profiles = validatedData.profilesDiscovered || {};\n\n// Create an array to hold separate items for each platform\nconst platformItems = [];\n\n// Process each discovered platform\nObject.entries(profiles).forEach(([platform, profileData]) => {\n if (!profileData || !profileData.url) return;\n \n // Create an item for each platform\n platformItems.push({\n json: {\n platform: platform.toLowerCase(),\n profileUrl: profileData.url,\n handle: profileData.handle,\n confidence: profileData.confidence,\n markers: profileData.markers,\n profileData: profileData.profileData,\n searchDepth: validatedData.searchConfig?.depth || 'comprehensive',\n analysisDepth: validatedData.searchConfig?.depth || 'comprehensive',\n originalInput: validatedData.originalInput || {},\n primaryIdentity: validatedData.primaryIdentity || {},\n trustScore: validatedData.trustScore || 0.5\n }\n });\n});\n\n// Return all platform items for processing\nreturn platformItems;"
},
"typeVersion": 2
},
{
"id": "90b1798a-b321-4fab-90f0-8a24862b7941",
"name": "LinkedIn 提示构建器",
"type": "n8n-nodes-base.set",
"position": [
2160,
-144
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "1",
"name": "platform",
"type": "string",
"value": "={{ $json.platform }}"
},
{
"id": "2",
"name": "profileUrl",
"type": "string",
"value": "={{ $json.profileUrl }}"
},
{
"id": "3",
"name": "analysisDepth",
"type": "string",
"value": "={{ $json.analysisDepth }}"
},
{
"id": "4",
"name": "systemPrompt",
"type": "string",
"value": "You are a LinkedIn profile analyst specializing in professional insights. You focus on career progression, skills assessment, network quality, thought leadership, and professional achievements. You use Bright Data MCP PRO tools to extract detailed LinkedIn data."
},
{
"id": "5",
"name": "userPrompt",
"type": "string",
"value": "=Analyze this LinkedIn profile in detail:\n\nProfile URL: {{ $json.profileUrl }}\nAnalysis Depth: {{ $json.analysisDepth }}\n\nFocus areas:\n1. Professional title and current position\n2. Career progression and trajectory\n3. Skills and endorsements\n4. Network size and quality\n5. Recent activity and posts\n6. Education and certifications\n7. Recommendations received\n8. Industry influence and thought leadership\n\nUse web_data_linkedin_person_profile to get full profile data.\nUse web_data_linkedin_posts to analyze recent activity.\n\nProvide structured insights about their professional standing."
},
{
"id": "6",
"name": "proTools",
"type": "array",
"value": "=[\"web_data_linkedin_person_profile\", \"web_data_linkedin_posts\"]"
},
{
"id": "7",
"name": "analysisFields",
"type": "array",
"value": "=[\"professionalTitle\", \"company\", \"skills\", \"connections\", \"recentActivity\", \"education\", \"certifications\"]"
},
{
"id": "8",
"name": "handle",
"type": "string",
"value": "={{ $json.handle }}"
},
{
"id": "9",
"name": "confidence",
"type": "number",
"value": "={{ $json.confidence }}"
},
{
"id": "10",
"name": "profileData",
"type": "object",
"value": "={{ $json.profileData }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "ae097d74-0d6e-4d7e-8037-f78a420c8ddf",
"name": "Twitter/X 提示构建器",
"type": "n8n-nodes-base.set",
"position": [
2160,
48
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "1",
"name": "platform",
"type": "string",
"value": "={{ $json.platform }}"
},
{
"id": "2",
"name": "profileUrl",
"type": "string",
"value": "={{ $json.profileUrl }}"
},
{
"id": "3",
"name": "analysisDepth",
"type": "string",
"value": "={{ $json.analysisDepth }}"
},
{
"id": "4",
"name": "systemPrompt",
"type": "string",
"value": "You are a Twitter/X analyst specializing in social media engagement and influence. You analyze tweet patterns, engagement metrics, topics of interest, and social influence. You use Bright Data MCP PRO tools to extract Twitter/X data."
},
{
"id": "5",
"name": "userPrompt",
"type": "string",
"value": "=Analyze this Twitter/X profile in detail:\n\nProfile URL: {{ $json.profileUrl }}\nAnalysis Depth: {{ $json.analysisDepth }}\n\nFocus areas:\n1. Tweet frequency and posting patterns\n2. Main topics and themes discussed\n3. Engagement rates (likes, retweets, replies)\n4. Follower count and growth\n5. Influence and reach metrics\n6. Sentiment of tweets\n7. Key hashtags used\n8. Interactions with other users\n\nUse web_data_x_posts to analyze tweets and engagement.\nUse search_engine for additional context if needed.\n\nProvide insights about their social media presence and influence."
},
{
"id": "6",
"name": "proTools",
"type": "array",
"value": "=[\"web_data_x_posts\", \"search_engine\"]"
},
{
"id": "7",
"name": "analysisFields",
"type": "array",
"value": "=[\"tweetFrequency\", \"topTopics\", \"engagement\", \"followers\", \"sentiment\", \"hashtags\"]"
},
{
"id": "8",
"name": "handle",
"type": "string",
"value": "={{ $json.handle }}"
},
{
"id": "9",
"name": "confidence",
"type": "number",
"value": "={{ $json.confidence }}"
},
{
"id": "10",
"name": "profileData",
"type": "object",
"value": "={{ $json.profileData }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "6ed900d1-2485-4a06-8c04-7063807ca605",
"name": "Instagram 提示构建器",
"type": "n8n-nodes-base.set",
"position": [
2160,
240
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "1",
"name": "platform",
"type": "string",
"value": "={{ $json.platform }}"
},
{
"id": "2",
"name": "profileUrl",
"type": "string",
"value": "={{ $json.profileUrl }}"
},
{
"id": "3",
"name": "analysisDepth",
"type": "string",
"value": "={{ $json.analysisDepth }}"
},
{
"id": "4",
"name": "systemPrompt",
"type": "string",
"value": "You are an Instagram analyst specializing in visual content analysis and engagement metrics. You analyze content themes, posting patterns, visual aesthetics, and audience engagement. You use Bright Data MCP PRO tools for Instagram data extraction."
},
{
"id": "5",
"name": "userPrompt",
"type": "string",
"value": "=Analyze this Instagram profile in detail:\n\nProfile URL: {{ $json.profileUrl }}\nAnalysis Depth: {{ $json.analysisDepth }}\n\nFocus areas:\n1. Content themes and categories\n2. Posting frequency and schedule\n3. Engagement rate per post\n4. Follower demographics insights\n5. Hashtag strategy and reach\n6. Visual style and branding\n7. Stories and Reels performance\n8. Brand collaborations or sponsorships\n\nUse web_data_instagram_profiles for profile metrics.\nUse web_data_instagram_posts for content analysis.\nUse web_data_instagram_reels for video content.\n\nProvide insights about their content strategy and audience engagement."
},
{
"id": "6",
"name": "proTools",
"type": "array",
"value": "=[\"web_data_instagram_profiles\", \"web_data_instagram_posts\", \"web_data_instagram_reels\"]"
},
{
"id": "7",
"name": "analysisFields",
"type": "array",
"value": "=[\"contentThemes\", \"postingFrequency\", \"engagementRate\", \"hashtags\", \"visualStyle\", \"reelsPerformance\"]"
},
{
"id": "8",
"name": "handle",
"type": "string",
"value": "={{ $json.handle }}"
},
{
"id": "9",
"name": "confidence",
"type": "number",
"value": "={{ $json.confidence }}"
},
{
"id": "10",
"name": "profileData",
"type": "object",
"value": "={{ $json.profileData }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "5167b40f-5645-4cac-bd77-2cb7094ee59b",
"name": "YouTube 提示构建器",
"type": "n8n-nodes-base.set",
"position": [
2160,
432
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "1",
"name": "platform",
"type": "string",
"value": "={{ $json.platform }}"
},
{
"id": "2",
"name": "profileUrl",
"type": "string",
"value": "={{ $json.profileUrl }}"
},
{
"id": "3",
"name": "analysisDepth",
"type": "string",
"value": "={{ $json.analysisDepth }}"
},
{
"id": "4",
"name": "systemPrompt",
"type": "string",
"value": "You are a YouTube channel analyst specializing in content strategy and audience engagement. You analyze video content, upload patterns, viewer metrics, and channel growth. You use Bright Data MCP PRO tools for YouTube data extraction."
},
{
"id": "5",
"name": "userPrompt",
"type": "string",
"value": "=Analyze this YouTube channel in detail:\n\nProfile URL: {{ $json.profileUrl }}\nAnalysis Depth: {{ $json.analysisDepth }}\n\nFocus areas:\n1. Channel focus and content categories\n2. Upload schedule and consistency\n3. View counts and watch time metrics\n4. Subscriber count and growth rate\n5. Video production quality\n6. Audience engagement (likes, comments)\n7. Most popular videos and topics\n8. Monetization indicators\n\nUse web_data_youtube_profiles for channel statistics.\nUse web_data_youtube_videos for video analytics.\n\nProvide insights about their content strategy and channel performance."
},
{
"id": "6",
"name": "proTools",
"type": "array",
"value": "=[\"web_data_youtube_profiles\", \"web_data_youtube_videos\"]"
},
{
"id": "7",
"name": "analysisFields",
"type": "array",
"value": "=[\"channelFocus\", \"uploadSchedule\", \"viewMetrics\", \"subscribers\", \"topVideos\", \"engagement\"]"
},
{
"id": "8",
"name": "handle",
"type": "string",
"value": "={{ $json.handle }}"
},
{
"id": "9",
"name": "confidence",
"type": "number",
"value": "={{ $json.confidence }}"
},
{
"id": "10",
"name": "profileData",
"type": "object",
"value": "={{ $json.profileData }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "e62bfe80-f36c-4f69-91f5-995e9b478dca",
"name": "GitHub 提示构建器",
"type": "n8n-nodes-base.set",
"position": [
2160,
624
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "1",
"name": "platform",
"type": "string",
"value": "={{ $json.platform }}"
},
{
"id": "2",
"name": "profileUrl",
"type": "string",
"value": "={{ $json.profileUrl }}"
},
{
"id": "3",
"name": "analysisDepth",
"type": "string",
"value": "={{ $json.analysisDepth }}"
},
{
"id": "4",
"name": "systemPrompt",
"type": "string",
"value": "You are a GitHub analyst specializing in technical expertise assessment and open-source contributions. You analyze repositories, coding patterns, collaboration, and technical skills. You use Bright Data MCP PRO tools for GitHub data extraction."
},
{
"id": "5",
"name": "userPrompt",
"type": "string",
"value": "=Analyze this GitHub profile in detail:\n\nProfile URL: {{ $json.profileUrl }}\nAnalysis Depth: {{ $json.analysisDepth }}\n\nFocus areas:\n1. Repository count and types\n2. Primary programming languages\n3. Contribution frequency and patterns\n4. Popular/starred repositories\n5. Collaboration and pull requests\n6. Code quality indicators\n7. Open source involvement\n8. Technical expertise areas\n\nUse web_data_github_repository_file for repository analysis.\nUse search_engine for additional context about projects.\n\nProvide insights about their technical skills and collaboration patterns."
},
{
"id": "6",
"name": "proTools",
"type": "array",
"value": "=[\"web_data_github_repository_file\", \"search_engine\"]"
},
{
"id": "7",
"name": "analysisFields",
"type": "array",
"value": "=[\"repositories\", \"languages\", \"contributions\", \"popularProjects\", \"collaboration\", \"expertise\"]"
},
{
"id": "8",
"name": "handle",
"type": "string",
"value": "={{ $json.handle }}"
},
{
"id": "9",
"name": "confidence",
"type": "number",
"value": "={{ $json.confidence }}"
},
{
"id": "10",
"name": "profileData",
"type": "object",
"value": "={{ $json.profileData }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "34cf7453-c52c-44c2-8b81-6903b15565cc",
"name": "TikTok 提示构建器",
"type": "n8n-nodes-base.set",
"position": [
2160,
816
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "1",
"name": "platform",
"type": "string",
"value": "={{ $json.platform }}"
},
{
"id": "2",
"name": "profileUrl",
"type": "string",
"value": "={{ $json.profileUrl }}"
},
{
"id": "3",
"name": "analysisDepth",
"type": "string",
"value": "={{ $json.analysisDepth }}"
},
{
"id": "4",
"name": "systemPrompt",
"type": "string",
"value": "You are a TikTok analyst specializing in viral content and creator metrics. You analyze video performance, trend participation, audience engagement, and content strategy. You use Bright Data MCP PRO tools for TikTok data extraction."
},
{
"id": "5",
"name": "userPrompt",
"type": "string",
"value": "=Analyze this TikTok profile in detail:\n\nProfile URL: {{ $json.profileUrl }}\nAnalysis Depth: {{ $json.analysisDepth }}\n\nFocus areas:\n1. Content themes and niches\n2. Viral videos and reach\n3. Posting frequency\n4. Follower count and growth\n5. Engagement metrics (likes, comments, shares)\n6. Trend participation\n7. Audio and hashtag usage\n8. Creator fund eligibility indicators\n\nUse web_data_tiktok_profiles for creator statistics.\nUse web_data_tiktok_posts for video metrics.\n\nProvide insights about their content strategy and viral potential."
},
{
"id": "6",
"name": "proTools",
"type": "array",
"value": "=[\"web_data_tiktok_profiles\", \"web_data_tiktok_posts\"]"
},
{
"id": "7",
"name": "analysisFields",
"type": "array",
"value": "=[\"contentThemes\", \"viralVideos\", \"postingFrequency\", \"followers\", \"engagement\", \"trends\"]"
},
{
"id": "8",
"name": "handle",
"type": "string",
"value": "={{ $json.handle }}"
},
{
"id": "9",
"name": "confidence",
"type": "number",
"value": "={{ $json.confidence }}"
},
{
"id": "10",
"name": "profileData",
"type": "object",
"value": "={{ $json.profileData }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "0b84e3a7-08f2-4428-b5be-2ace65b48b48",
"name": "分支",
"type": "n8n-nodes-base.switch",
"position": [
1936,
272
],
"parameters": {
"rules": {
"values": [
{
"outputKey": "LinkedIn",
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"operator": {
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $json.platform }}",
"rightValue": "linkedin"
}
]
},
"renameOutput": true
},
{
"outputKey": "Twitter",
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"operator": {
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $json.platform }}",
"rightValue": "twitter"
}
]
},
"renameOutput": true
},
{
"outputKey": "Instagram",
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"operator": {
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $json.platform }}",
"rightValue": "instagram"
}
]
},
"renameOutput": true
},
{
"outputKey": "YouTube",
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"operator": {
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $json.platform }}",
"rightValue": "youtube"
}
]
},
"renameOutput": true
},
{
"outputKey": "GitHub",
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"operator": {
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $json.platform }}",
"rightValue": "github"
}
]
},
"renameOutput": true
},
{
"outputKey": "TikTok",
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"operator": {
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $json.platform }}",
"rightValue": "tiktok"
}
]
},
"renameOutput": true
}
]
},
"options": {}
},
"typeVersion": 3.2
},
{
"id": "96782079-6878-4168-b4ac-43305b175dc4",
"name": "研究 Agent",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
2672,
464
],
"parameters": {
"text": "={{ $json.userPrompt }}",
"options": {
"systemMessage": "={{ $json.systemPrompt }}"
},
"promptType": "define"
},
"retryOnFail": true,
"typeVersion": 2.2
},
{
"id": "f38a6156-f044-41b4-b919-67325b274b43",
"name": "合并",
"type": "n8n-nodes-base.merge",
"position": [
2384,
272
],
"parameters": {
"numberInputs": 6
},
"typeVersion": 3.2
},
{
"id": "5effc409-e30d-44cf-b648-f35be74b390e",
"name": "OpenAI 聊天模型1",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"position": [
2608,
688
],
"parameters": {
"model": {
"__rl": true,
"mode": "list",
"value": "gpt-4.1-mini",
"cachedResultName": "gpt-4.1-mini"
},
"options": {}
},
"credentials": {
"openAiApi": {
"id": "3lTEzvz4p0zyelIS",
"name": "OpenAi Romuald private"
}
},
"typeVersion": 1.2
},
{
"id": "c41d9b89-f376-4f8f-bd58-b1ae819db71a",
"name": "OpenAI 聊天模型2",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"position": [
3824,
560
],
"parameters": {
"model": {
"__rl": true,
"mode": "list",
"value": "gpt-4.1",
"cachedResultName": "gpt-4.1"
},
"options": {}
},
"credentials": {
"openAiApi": {
"id": "3lTEzvz4p0zyelIS",
"name": "OpenAi Romuald private"
}
},
"typeVersion": 1.2
},
{
"id": "2235b8ab-ec5a-4294-ace7-4f01e302c27f",
"name": "聚合分析",
"type": "n8n-nodes-base.aggregate",
"position": [
3520,
336
],
"parameters": {
"options": {},
"aggregate": "aggregateAllItemData",
"destinationFieldName": "platforms"
},
"typeVersion": 1
},
{
"id": "e1bd36e1-90ec-4a77-8e7e-54c6b01271a9",
"name": "合并1",
"type": "n8n-nodes-base.merge",
"position": [
3072,
336
],
"parameters": {
"mode": "combine",
"options": {},
"combineBy": "combineByPosition"
},
"typeVersion": 3.2
},
{
"id": "1a830e97-d111-4a6c-8ca9-2cfc00e20763",
"name": "编辑字段",
"type": "n8n-nodes-base.set",
"position": [
3296,
336
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "d8df7c36-f9ae-4b63-a734-7bc7ab29a0a4",
"name": "platform",
"type": "string",
"value": "={{ $json.platform }}"
},
{
"id": "3b2bf0a7-da33-497a-9bbe-d7e8229c1755",
"name": "profileUrl",
"type": "string",
"value": "={{ $json.profileUrl }}"
},
{
"id": "75c498e7-17fe-4f1f-bce7-5597dcca12fe",
"name": "profileData",
"type": "object",
"value": "={{ $json.profileData }}"
},
{
"id": "5da9fb30-9d87-4406-8e13-9f11f96f61d2",
"name": "research_result",
"type": "string",
"value": "={{ $json.output }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "a4e5d89d-8929-49a9-97fa-87536e819b15",
"name": "基础 LLM 链",
"type": "@n8n/n8n-nodes-langchain.chainLlm",
"position": [
3744,
336
],
"parameters": {
"text": "=## Social Media Intelligence Request\n\nAnalyze the following social media data and create a comprehensive intelligence report.\n\n## Platform Data:\n\n{{ $json.platforms.map((item, index) => {\n const platform = item.platform;\n const url = item.profileUrl;\n const profileData = item.profileData;\n const research = item.research_result;\n \n return `### Platform ${index + 1}: ${platform.toUpperCase()}\n- **URL**: ${url}\n- **Handle**: ${profileData.handle || 'N/A'}\n- **Bio**: ${profileData.bio || 'N/A'}\n- **Followers**: ${profileData.followers || 'N/A'}\n- **Confidence Score**: ${item.confidence || 'N/A'}\n\n**Research Analysis**:\n${research}\n`;\n}).join('\\n---\\n') }}\n\n## Request:\nPlease analyze this data and provide a comprehensive intelligence report following your standard analysis framework.",
"batching": {},
"messages": {
"messageValues": [
{
"message": "You are an Elite Social Media Intelligence Analyst specializing in creating actionable digital presence reports from multi-platform data. You excel at pattern recognition, behavioral analysis, and strategic assessment. ## Core Competencies: - Multi-platform data synthesis and analysis - Professional profiling and behavioral assessment - Digital influence measurement and network analysis - Content strategy evaluation and optimization insights - Risk assessment and due diligence - Strategic recommendation formulation ## Report Structure Requirements: Create a comprehensive intelligence report with the following sections: ### 1. **Executive Summary** (2-3 paragraphs) - Synthesize who this person is professionally - Identify their digital presence strategy - Highlight their key areas of expertise and influence - Provide a high-level assessment of their professional standing ### 2. **Platform-by-Platform Breakdown** For each platform analyzed, provide: - Platform name and profile URL - Key metrics (followers, engagement, activity level) - 3-5 bullet points of platform-specific insights - Unique value this platform adds to their digital presence ### 3. **Cross-Platform Analysis** - Identify consistent themes across all platforms - Note any interesting variations or platform-specific personas - Assess overall digital brand coherence - Evaluate the strategic use of each platform ### 4. **Professional Profile Assessment** - Current role(s) and responsibilities - Industry influence and thought leadership indicators - Technical skills and demonstrated expertise - Professional network strength and quality - Career trajectory insights ### 5. **Content Strategy Evaluation** - Content creation frequency and patterns - Topic consistency across platforms - Audience engagement metrics and quality - Content production value and professionalism - Strategic content distribution approach ### 6. **Digital Influence Metrics** - Total reach across all platforms - Engagement quality assessment - Growth trajectory and potential - Influence sphere and impact areas - Comparison to industry standards (if applicable) ### 7. **Personality and Communication Analysis** - Communication style and tone - Professional vs. personal content balance - Values and interests demonstrated - Expertise areas consistently highlighted - Audience interaction patterns ### 8. **Strategic Recommendations** **For Professional Engagement:** - Best platforms for initial contact - Optimal messaging approach - Topics likely to resonate - Timing recommendations **For Partnership/Collaboration:** - Collaboration opportunities - Mutual benefit areas - Potential synergies - Risk considerations ### 9. **Risk Assessment** - Any controversial positions or statements - Reputation concerns - Inconsistencies between platforms - Potential red flags - Verification confidence levels ### 10. **Contact Intelligence** - Preferred communication channels - Best times for engagement (based on activity patterns) - Response likelihood assessment - Professional contact protocols ## Data Processing Framework: **Input Data Structure:** - `platforms`: An array containing all platform data - Each element in the array has: - `platform`: The platform name - `profileUrl`: The URL of the profile - `profileData`: Object with profile information - `research_result`: The detailed analysis from the Research Agent **Analysis Approach:** 1. Parse aggregated platform data from the platforms array 2. Extract patterns across multiple data points 3. Cross-reference information for verification 4. Identify consistent behaviors across platforms 5. Detect anomalies or inconsistencies 6. Recognize strategic platform usage 7. Assess content distribution patterns 8. Evaluate professional positioning 9. Assess market influence and reach 10. Identify collaboration opportunities ## Output Standards: **Quality Requirements:** - Structure your response with clear headers for each section - Use specific data points and examples from the analyses - Provide actionable insights, not just observations - Maintain professional tone while being thorough - Include confidence levels where appropriate - Focus on business-relevant intelligence - Base all conclusions on provided data - Distinguish between facts and inferences - Provide evidence for assessments **Professional Standards:** - Maintain objectivity and balance - Respect privacy and ethical boundaries - Focus on publicly available information - Clear, structured presentation - Specific examples and data points - Professional yet accessible language - Comprehensive but concise coverage ## Key Principles: 1. **Accuracy First:** Never fabricate or assume data not provided 2. **Context Matters:** Consider platform-specific norms and expectations 3. **Business Focus:** Prioritize insights relevant to professional engagement 4. **Ethical Analysis:** Respect personal boundaries and privacy 5. **Actionable Output:** Every insight should lead to potential action 6. **Data-Driven:** Process ALL platforms in the array, not just selected ones 7. **Pattern Recognition:** Look for patterns across all platforms in the array 8. **Verification:** Pay special attention to confidence scores for reliability ## Important Notes: - Extract metrics from the research_result text when specific numbers aren't in profileData - Create a professional intelligence product that will inform important business decisions - Make every section count with specific, actionable insights backed by data from all analyzed platforms - Remember that this report may be used for business development, recruitment, or partnership evaluation purposes"
}
]
},
"promptType": "define"
},
"retryOnFail": true,
"typeVersion": 1.7
},
{
"id": "f1748dac-778d-46b5-9e69-555dc0e8256f",
"name": "设置内容",
"type": "n8n-nodes-base.set",
"position": [
4576,
368
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "1",
"name": "markdown",
"type": "string",
"value": "={{ $json.text }}"
},
{
"id": "2",
"name": "fileName",
"type": "string",
"value": "=Document {{ $now.format('yyyy-MM-dd HH:mm') }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "e2e77c09-bfec-4456-b9de-fa8cc5f9f31a",
"name": "Markdown 转 HTML",
"type": "n8n-nodes-base.markdown",
"position": [
4752,
272
],
"parameters": {
"mode": "markdownToHtml",
"options": {
"emoji": true,
"tables": true
},
"markdown": "={{ $json.markdown }}"
},
"typeVersion": 1
},
{
"id": "df76c7cd-5511-45bb-b1ac-940fbd70aec2",
"name": "创建空 Google 文档",
"type": "n8n-nodes-base.googleDrive",
"position": [
5200,
656
],
"parameters": {
"name": "={{ $('Set Content').item.json.fileName }}",
"content": "Temporary content",
"driveId": {
"__rl": true,
"mode": "list",
"value": "My Drive"
},
"options": {
"convertToGoogleDocument": true
},
"folderId": {
"__rl": true,
"mode": "list",
"value": "1Mu8ux5MKPyGsX7Nn98JC5tw5eXYpyoun",
"cachedResultUrl": "https://drive.google.com/drive/folders/1Mu8ux5MKPyGsX7Nn98JC5tw5eXYpyoun",
"cachedResultName": "researcher_output"
},
"operation": "createFromText"
},
"credentials": {
"googleDriveOAuth2Api": {
"id": "BdRD0hG0tuE54hnO",
"name": "AiAdvisors google drive"
}
},
"retryOnFail": true,
"typeVersion": 3
},
{
"id": "2e1519e8-c33f-45d6-8afb-6271e8cc129e",
"name": "将 HTML 转换为文件",
"type": "n8n-nodes-base.convertToFile",
"position": [
4976,
272
],
"parameters": {
"options": {
"fileName": "content.html"
},
"operation": "toText",
"sourceProperty": "data",
"binaryPropertyName": "file"
},
"typeVersion": 1.1
},
{
"id": "5a1705f8-0cb4-42ed-abbf-9933e3874ac4",
"name": "将 MIME 类型设置为 HTML",
"type": "n8n-nodes-base.code",
"position": [
5200,
272
],
"parameters": {
"mode": "runOnceForEachItem",
"jsCode": "const item = $input.item;\n\nif (item.binary && item.binary.file) {\n item.binary.file.mimeType = 'text/html';\n}\n\nreturn item;"
},
"typeVersion": 2
},
{
"id": "1f8d0d75-2d6b-4663-a42f-ed50e07dd027",
"name": "使用 HTML 更新文档",
"type": "n8n-nodes-base.googleDrive",
"position": [
5648,
368
],
"parameters": {
"fileId": {
"__rl": true,
"mode": "id",
"value": "={{ $json.id }}"
},
"options": {
"fields": [
"webViewLink"
]
},
"operation": "update",
"changeFileContent": true,
"inputDataFieldName": "file"
},
"credentials": {
"googleDriveOAuth2Api": {
"id": "BdRD0hG0tuE54hnO",
"name": "AiAdvisors google drive"
}
},
"retryOnFail": true,
"typeVersion": 3
},
{
"id": "7019826a-0ec8-49f6-a681-e1bfa814d982",
"name": "表单",
"type": "n8n-nodes-base.form",
"position": [
5872,
368
],
"webhookId": "89719a84-54d4-4143-9564-454603c1c5d7",
"parameters": {
"options": {},
"operation": "completion",
"redirectUrl": "={{ $json.webViewLink }}",
"respondWith": "redirect"
},
"typeVersion": 2.3
},
{
"id": "a2471cbf-298d-462f-a403-a24330ba2a9f",
"name": "合并2",
"type": "n8n-nodes-base.merge",
"position": [
5424,
368
],
"parameters": {
"mode": "combine",
"options": {},
"combineBy": "combineByPosition"
},
"typeVersion": 3
},
{
"id": "20e11916-479e-4012-9ea2-01fb158fec86",
"name": "概述",
"type": "n8n-nodes-base.stickyNote",
"position": [
-576,
-480
],
"parameters": {
"color": 4,
"width": 500,
"height": 1416,
"content": "## 使用 Bright Data 和 OpenAI 的社交媒体情报工作流"
},
"typeVersion": 1
},
{
"id": "e256c0cf-e6e8-4c67-9d7f-ac1fa51dbd98",
"name": "输入部分",
"type": "n8n-nodes-base.stickyNote",
"position": [
304,
-16
],
"parameters": {
"color": 7,
"width": 380,
"height": 740,
"content": "## 1. 数据输入与验证"
},
"typeVersion": 1
},
{
"id": "de224bd7-9078-4c64-aed9-5a5b5787431b",
"name": "发现阶段",
"type": "n8n-nodes-base.stickyNote",
"position": [
704,
-16
],
"parameters": {
"color": 7,
"width": 492,
"height": 736,
"content": "## 2. 资料发现阶段"
},
"typeVersion": 1
},
{
"id": "7ce7cf02-8c6e-4e7f-8e13-f288dbcf9f66",
"name": "验证",
"type": "n8n-nodes-base.stickyNote",
"position": [
1216,
-16
],
"parameters": {
"color": 7,
"width": 428,
"height": 728,
"content": "## 3. 跨平台验证"
},
"typeVersion": 1
},
{
"id": "fcc642a5-ed8a-43fc-84a5-a2981c62b068",
"name": "平台分析",
"type": "n8n-nodes-base.stickyNote",
"position": [
2512,
-32
],
"parameters": {
"color": 7,
"width": 512,
"height": 916,
"content": "## 4. 特定平台深度分析"
},
"typeVersion": 1
},
{
"id": "034673db-9d24-4882-9c57-00a9047f0f09",
"name": "报告生成",
"type": "n8n-nodes-base.stickyNote",
"position": [
3632,
-48
],
"parameters": {
"color": 7,
"width": 444,
"height": 832,
"content": "## 5. 情报报告生成"
},
"typeVersion": 1
},
{
"id": "07e4685e-70ca-4648-8e4a-f2e3dfe695a5",
"name": "自定义指南",
"type": "n8n-nodes-base.stickyNote",
"position": [
1856,
-384
],
"parameters": {
"color": 5,
"width": 640,
"content": "💚 如何自定义:"
},
"typeVersion": 1
},
{
"id": "cfd8fbeb-42ee-45c4-bc4a-ee1718fe1763",
"name": "报告交付",
"type": "n8n-nodes-base.stickyNote",
"position": [
4096,
-48
],
"parameters": {
"color": 7,
"width": 1972,
"height": 836,
"content": "## 6. 报告交付到 Google Drive"
},
"typeVersion": 1
},
{
"id": "template-attribution",
"name": "模板归属",
"type": "n8n-nodes-base.stickyNote",
"position": [
-64,
-480
],
"parameters": {
"color": 3,
"width": 348,
"height": 336,
"content": "## 📝 模板信息"
},
"typeVersion": 1
},
{
"id": "testing-guide",
"name": "测试指南",
"type": "n8n-nodes-base.stickyNote",
"position": [
304,
-352
],
"parameters": {
"color": 7,
"width": 380,
"height": 280,
"content": "## 🧪 测试您的工作流"
},
"typeVersion": 1
},
{
"id": "platform-routing-note",
"name": "平台路由逻辑",
"type": "n8n-nodes-base.stickyNote",
"position": [
1856,
-192
],
"parameters": {
"color": 7,
"width": 644,
"height": 1188,
"content": "⚡ 智能路由:"
},
"typeVersion": 1
},
{
"id": "bright-data-tools",
"name": "Bright Data 工具",
"type": "n8n-nodes-base.stickyNote",
"position": [
2512,
-320
],
"parameters": {
"color": 6,
"width": 512,
"height": 264,
"content": "## 🔧 Bright Data MCP 工具"
},
"typeVersion": 1
},
{
"id": "output-formats",
"name": "输出格式",
"type": "n8n-nodes-base.stickyNote",
"position": [
4096,
816
],
"parameters": {
"color": 7,
"width": 416,
"height": 296,
"content": "## 📄 报告格式"
},
"typeVersion": 1
},
{
"id": "success-metrics",
"name": "成功指标",
"type": "n8n-nodes-base.stickyNote",
"position": [
1232,
-240
],
"parameters": {
"color": 4,
"width": 424,
"height": 200,
"content": "## 📈 成功指标"
},
"typeVersion": 1
},
{
"id": "2b44e531-dc0b-4b95-9984-d440650a45da",
"name": "便签",
"type": "n8n-nodes-base.stickyNote",
"position": [
-592,
960
],
"parameters": {
"width": 864,
"height": 496,
"content": "## 使用 [n8n-mcp](https://www.n8n-mcp.com/) 构建"
},
"typeVersion": 1
},
{
"id": "5143af1d-9f82-4d09-a65d-2309fd72a0a5",
"name": "便签1",
"type": "n8n-nodes-base.stickyNote",
"position": [
1888,
1072
],
"parameters": {
"color": 3,
"width": 320,
"height": 512,
"content": "## ⚠️ 需要设置 (1/3)"
},
"typeVersion": 1
},
{
"id": "688043b3-4be7-4691-a9f8-25d5ad3b97f0",
"name": "便签3",
"type": "n8n-nodes-base.stickyNote",
"position": [
5088,
448
],
"parameters": {
"color": 3,
"width": 288,
"height": 416,
"content": "## ⚠️ 需要设置 (3/3)"
},
"typeVersion": 1
},
{
"id": "87218683-7f0f-4797-b5f0-6d52d8f4d201",
"name": "简单记忆",
"type": "@n8n/n8n-nodes-langchain.memoryBufferWindow",
"position": [
928,
592
],
"parameters": {
"sessionKey": "={{ $execution.id }}_discovery",
"sessionIdType": "customKey"
},
"typeVersion": 1.3
},
{
"id": "9a5f34b6-5c77-41c8-936f-b8956522af62",
"name": "简单记忆1",
"type": "@n8n/n8n-nodes-langchain.memoryBufferWindow",
"position": [
2736,
688
],
"parameters": {
"sessionKey": "={{ $execution.id }}_{{ $json.platform }}",
"sessionIdType": "customKey"
},
"typeVersion": 1.3
}
],
"active": true,
"pinData": {},
"settings": {
"executionOrder": "v1"
},
"versionId": "556838fa-e909-474a-819c-a35e0433bcc9",
"connections": {
"Merge": {
"main": [
[
{
"node": "Research Agent",
"type": "main",
"index": 0
},
{
"node": "Merge1",
"type": "main",
"index": 0
}
]
]
},
"Merge1": {
"main": [
[
{
"node": "Edit Fields",
"type": "main",
"index": 0
}
]
]
},
"Merge2": {
"main": [
[
{
"node": "Update Doc with HTML",
"type": "main",
"index": 0
}
]
]
},
"Switch": {
"main": [
[
{
"node": "LinkedIn Prompt Builder",
"type": "main",
"index": 0
}
],
[
{
"node": "Twitter/X Prompt Builder",
"type": "main",
"index": 0
}
],
[
{
"node": "Instagram Prompt Builder",
"type": "main",
"index": 0
}
],
[
{
"node": "YouTube Prompt Builder",
"type": "main",
"index": 0
}
],
[
{
"node": "GitHub Prompt Builder",
"type": "main",
"index": 0
}
],
[
{
"node": "TikTok Prompt Builder",
"type": "main",
"index": 0
}
]
]
},
"Edit Fields": {
"main": [
[
{
"node": "Aggregate analyses",
"type": "main",
"index": 0
}
]
]
},
"Set Content": {
"main": [
[
{
"node": "Markdown to HTML",
"type": "main",
"index": 0
},
{
"node": "Create Empty Google Doc",
"type": "main",
"index": 0
}
]
]
},
"Simple Memory": {
"ai_memory": [
[
{
"node": "discovery agent",
"type": "ai_memory",
"index": 0
}
]
]
},
"Research Agent": {
"main": [
[
{
"node": "Merge1",
"type": "main",
"index": 1
}
]
]
},
"Simple Memory1": {
"ai_memory": [
[
{
"node": "Research Agent",
"type": "ai_memory",
"index": 0
}
]
]
},
"Basic LLM Chain": {
"main": [
[
{
"node": "Set Content",
"type": "main",
"index": 0
}
]
]
},
"Bright Data MCP": {
"ai_tool": [
[
{
"node": "discovery agent",
"type": "ai_tool",
"index": 0
},
{
"node": "Research Agent",
"type": "ai_tool",
"index": 0
}
]
]
},
"Input Validator": {
"main": [
[
{
"node": "discovery agent",
"type": "main",
"index": 0
}
]
]
},
"discovery agent": {
"main": [
[
{
"node": "Output validator",
"type": "main",
"index": 0
}
]
]
},
"Markdown to HTML": {
"main": [
[
{
"node": "Convert HTML to File",
"type": "main",
"index": 0
}
]
]
},
"Output validator": {
"main": [
[
{
"node": "Profiles validator",
"type": "main",
"index": 0
}
]
]
},
"OpenAI Chat Model": {
"ai_languageModel": [
[
{
"node": "discovery agent",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Aggregate analyses": {
"main": [
[
{
"node": "Basic LLM Chain",
"type": "main",
"index": 0
}
]
]
},
"OpenAI Chat Model1": {
"ai_languageModel": [
[
{
"node": "Research Agent",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"OpenAI Chat Model2": {
"ai_languageModel": [
[
{
"node": "Basic LLM Chain",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Profiles validator": {
"main": [
[
{
"node": "Split Platforms into Items",
"type": "main",
"index": 0
}
]
]
},
"Convert HTML to File": {
"main": [
[
{
"node": "Set MIME Type to HTML",
"type": "main",
"index": 0
}
]
]
},
"Update Doc with HTML": {
"main": [
[
{
"node": "Form",
"type": "main",
"index": 0
}
]
]
},
"GitHub Prompt Builder": {
"main": [
[
{
"node": "Merge",
"type": "main",
"index": 4
}
]
]
},
"Set MIME Type to HTML": {
"main": [
[
{
"node": "Merge2",
"type": "main",
"index": 0
}
]
]
},
"TikTok Prompt Builder": {
"main": [
[
{
"node": "Merge",
"type": "main",
"index": 5
}
]
]
},
"YouTube Prompt Builder": {
"main": [
[
{
"node": "Merge",
"type": "main",
"index": 3
}
]
]
},
"Create Empty Google Doc": {
"main": [
[
{
"node": "Merge2",
"type": "main",
"index": 1
}
]
]
},
"LinkedIn Prompt Builder": {
"main": [
[
{
"node": "Merge",
"type": "main",
"index": 0
}
]
]
},
"Instagram Prompt Builder": {
"main": [
[
{
"node": "Merge",
"type": "main",
"index": 2
}
]
]
},
"Twitter/X Prompt Builder": {
"main": [
[
{
"node": "Merge",
"type": "main",
"index": 1
}
]
]
},
"Social Media Research Form": {
"main": [
[
{
"node": "Input Validator",
"type": "main",
"index": 0
}
]
]
},
"Split Platforms into Items": {
"main": [
[
{
"node": "Switch",
"type": "main",
"index": 0
}
]
]
}
}
}常见问题
如何使用这个工作流?
复制上方的 JSON 配置代码,在您的 n8n 实例中创建新工作流并选择「从 JSON 导入」,粘贴配置后根据需要修改凭证设置即可。
这个工作流适合什么场景?
高级 - 潜在客户开发, AI 摘要总结
需要付费吗?
本工作流完全免费,您可以直接导入使用。但请注意,工作流中使用的第三方服务(如 OpenAI API)可能需要您自行付费。
相关工作流推荐
WordPress博客自动化专业版(深度研究)v2.1市场
使用GPT-4o、Perplexity AI和多语言支持自动化SEO优化的博客创建
If
Set
Xml
+27
125 节点Daniel Ng
内容创作
在可视化参考库中探索n8n节点
在可视化参考库中探索n8n节点
If
Ftp
Set
+93
113 节点I versus AI
其他
(Duc)深度研究市场模板
集成PerplexityAI研究和OpenAI内容的多层级WordPress博客生成器
If
Set
Xml
+28
132 节点Daniel Ng
人工智能
AIAuto - 带深度研究的终极人机回环内容v2
WordPress博客自动化,集成Airtable界面、人工审核和AI研究v2
If
Set
Xml
+23
228 节点Daniel Ng
内容创作
[astro/nextjs] 为文章/帖子分配类别/标签
使用OpenAI GPT-4、GitHub和Google Sheets为Astro/Next.js博客文章自动分类
Code
Form
Merge
+11
29 节点Piotr Sikora
内容创作
潜在客户开发与邮件工作流
使用Google Maps、SendGrid和AI自动化B2B潜在客户开发与邮件营销
If
Set
Code
+21
141 节点Ezema Kingsley Chibuzo
潜在客户开发