feat(n8n-expert): add migrate-workflow workflow
- Add workflow.yaml with configuration for platform migration - Add instructions.md with platform analysis and mapping workflow - Add checklist.md for migration validation - Supports migration from Zapier, Make, HubSpot, Power Automate
This commit is contained in:
parent
83c0a59887
commit
74240cf842
|
|
@ -0,0 +1,110 @@
|
|||
# Migrate Workflow to n8n - Validation Checklist
|
||||
|
||||
## Source Analysis
|
||||
|
||||
- [ ] Source platform was identified
|
||||
- [ ] Source workflow details were gathered
|
||||
- [ ] Trigger type was identified
|
||||
- [ ] All integrations were identified
|
||||
- [ ] Workflow complexity was assessed
|
||||
|
||||
## Platform Mapping
|
||||
|
||||
- [ ] Platform mappings were loaded
|
||||
- [ ] Source trigger was mapped to n8n trigger
|
||||
- [ ] All source actions were mapped to n8n nodes
|
||||
- [ ] Conditional logic was mapped correctly
|
||||
- [ ] Loops/iterations were mapped correctly
|
||||
- [ ] Data transformations were identified
|
||||
|
||||
## Workflow Structure
|
||||
|
||||
- [ ] n8n workflow has valid JSON structure
|
||||
- [ ] Workflow name is set
|
||||
- [ ] Migration tag is added (migrated-from-[platform])
|
||||
- [ ] All nodes have unique IDs
|
||||
- [ ] All nodes have unique names
|
||||
- [ ] Trigger node is properly configured
|
||||
|
||||
## Node Configuration
|
||||
|
||||
- [ ] All mapped nodes are created
|
||||
- [ ] Node types are valid n8n types
|
||||
- [ ] Node parameters are configured
|
||||
- [ ] Credentials placeholders are set
|
||||
- [ ] Node positions are calculated correctly
|
||||
- [ ] No overlapping nodes
|
||||
|
||||
## Data Mappings
|
||||
|
||||
- [ ] Field mappings from source to n8n are correct
|
||||
- [ ] Data type conversions are handled
|
||||
- [ ] Date/time format differences are addressed
|
||||
- [ ] Expressions use correct n8n syntax (={{ }})
|
||||
- [ ] Set nodes are used for simple transformations
|
||||
- [ ] Code nodes are used for complex transformations
|
||||
|
||||
## Conditional Logic
|
||||
|
||||
- [ ] IF nodes are created for conditional branches
|
||||
- [ ] Switch nodes are created for multiple conditions
|
||||
- [ ] Conditions are properly configured
|
||||
- [ ] True/false branches are correct (index 0/1)
|
||||
- [ ] All branches are connected
|
||||
|
||||
## Connections
|
||||
|
||||
- [ ] All nodes are connected properly
|
||||
- [ ] Trigger connects to first action
|
||||
- [ ] Actions are connected in sequence
|
||||
- [ ] Conditional branches are connected
|
||||
- [ ] Merge points are connected
|
||||
- [ ] All connections reference existing nodes
|
||||
- [ ] No orphaned nodes (except trigger)
|
||||
|
||||
## Error Handling
|
||||
|
||||
- [ ] Error handling strategy is defined
|
||||
- [ ] Critical nodes have retry logic if needed
|
||||
- [ ] continueOnFail is set appropriately
|
||||
- [ ] Error handling matches or improves on source
|
||||
|
||||
## Migration Notes
|
||||
|
||||
- [ ] Source platform is documented
|
||||
- [ ] Migration date is recorded
|
||||
- [ ] Credentials needed are listed
|
||||
- [ ] Platform-specific differences are noted
|
||||
- [ ] Testing considerations are documented
|
||||
|
||||
## Validation
|
||||
|
||||
- [ ] Workflow passes JSON validation
|
||||
- [ ] All required parameters are set
|
||||
- [ ] Workflow structure is logical
|
||||
- [ ] Migration matches source workflow functionality
|
||||
|
||||
## Credentials & Authentication
|
||||
|
||||
- [ ] All services requiring credentials are identified
|
||||
- [ ] Credential types are correct for n8n
|
||||
- [ ] OAuth requirements are noted
|
||||
- [ ] API key requirements are noted
|
||||
- [ ] Authentication differences from source are documented
|
||||
|
||||
## Testing Readiness
|
||||
|
||||
- [ ] Workflow can be imported into n8n
|
||||
- [ ] Test data requirements are clear
|
||||
- [ ] Expected outputs are defined
|
||||
- [ ] Comparison approach with source is defined
|
||||
- [ ] Initial monitoring plan is suggested
|
||||
|
||||
## Documentation
|
||||
|
||||
- [ ] User has import instructions
|
||||
- [ ] Credential setup guidance provided
|
||||
- [ ] Data mapping explanations provided
|
||||
- [ ] Testing approach explained
|
||||
- [ ] Platform differences highlighted
|
||||
- [ ] Post-migration checklist provided
|
||||
|
|
@ -0,0 +1,350 @@
|
|||
# Migrate Workflow to n8n - Workflow Instructions
|
||||
|
||||
```xml
|
||||
<critical>The workflow execution engine is governed by: {project_root}/{bmad_folder}/core/tasks/workflow.xml</critical>
|
||||
<critical>You MUST have already loaded and processed: {installed_path}/workflow.yaml</critical>
|
||||
<critical>This workflow migrates automation workflows from other platforms to n8n.</critical>
|
||||
|
||||
<workflow>
|
||||
|
||||
<step n="0" goal="Contextual Analysis (Smart Elicitation)">
|
||||
<critical>Before asking any questions, analyze what the user has already told you</critical>
|
||||
|
||||
<action>Review the user's initial request and conversation history</action>
|
||||
<action>Extract any mentioned: source platform, workflow details, integrations, file paths</action>
|
||||
|
||||
<check if="ALL requirements are clear from context">
|
||||
<action>Summarize your understanding</action>
|
||||
<action>Skip directly to Step 2 (Check Context7 MCP)</action>
|
||||
</check>
|
||||
|
||||
<check if="SOME requirements are clear">
|
||||
<action>Note what you already know</action>
|
||||
<action>Only ask about missing information in Step 1</action>
|
||||
</check>
|
||||
|
||||
<check if="requirements are unclear or minimal">
|
||||
<action>Proceed with full elicitation in Step 1</action>
|
||||
</check>
|
||||
</step>
|
||||
|
||||
<step n="1" goal="Gather Migration Requirements" elicit="true">
|
||||
<action>Ask Question 1: "Which platform are you migrating from?"</action>
|
||||
<action>Present numbered options:
|
||||
1. Zapier - Migrate Zapier Zaps to n8n
|
||||
2. Make (Integromat) - Migrate Make scenarios to n8n
|
||||
3. HubSpot Workflows - Migrate HubSpot workflows to n8n
|
||||
4. Microsoft Power Automate - Migrate Power Automate flows to n8n
|
||||
5. IFTTT - Migrate IFTTT applets to n8n
|
||||
6. Other - Specify another automation platform
|
||||
</action>
|
||||
<action>WAIT for user selection (1-6)</action>
|
||||
<action>Store selection in {{source_platform}}</action>
|
||||
|
||||
<check if="selection is 6 (Other)">
|
||||
<action>Ask: "Please specify the platform you're migrating from"</action>
|
||||
<action>WAIT for user input</action>
|
||||
<action>Store in {{source_platform}}</action>
|
||||
</check>
|
||||
|
||||
<action>Ask Question 2: "How will you provide the workflow to migrate?"</action>
|
||||
<action>Present numbered options:
|
||||
1. Describe it - Explain what the workflow does
|
||||
2. Provide export file - Upload/paste workflow export file
|
||||
3. Provide screenshots - Share workflow screenshots
|
||||
4. Provide documentation - Share workflow documentation
|
||||
</action>
|
||||
<action>WAIT for user selection (1-4)</action>
|
||||
|
||||
<check if="selection is 1">
|
||||
<action>Ask: "Please describe what the workflow does (trigger, actions, logic)"</action>
|
||||
<action>WAIT for user input</action>
|
||||
<action>Store in {{workflow_description}}</action>
|
||||
</check>
|
||||
|
||||
<check if="selection is 2">
|
||||
<action>Ask: "Please provide the workflow export file path or paste the content"</action>
|
||||
<action>WAIT for user input</action>
|
||||
<action>Store in {{workflow_file}} or {{workflow_content}}</action>
|
||||
</check>
|
||||
|
||||
<check if="selection is 3">
|
||||
<action>Ask: "Please share the workflow screenshots and describe the flow"</action>
|
||||
<action>WAIT for user input</action>
|
||||
<action>Store in {{workflow_description}}</action>
|
||||
</check>
|
||||
|
||||
<check if="selection is 4">
|
||||
<action>Ask: "Please provide the workflow documentation"</action>
|
||||
<action>WAIT for user input</action>
|
||||
<action>Store in {{workflow_description}}</action>
|
||||
</check>
|
||||
|
||||
<action>Ask Question 3: "What is the trigger for this workflow?"</action>
|
||||
<action>Present numbered options:
|
||||
1. Webhook/HTTP Request - Triggered by incoming HTTP requests
|
||||
2. Schedule/Cron - Runs on a schedule
|
||||
3. Form Submission - Triggered by form submissions
|
||||
4. Database Change - Triggered by database events
|
||||
5. Email - Triggered by incoming emails
|
||||
6. Service Event - Triggered by external service (Slack, Google Sheets, etc.)
|
||||
7. Not sure - Will determine from workflow details
|
||||
</action>
|
||||
<action>WAIT for user selection (1-7)</action>
|
||||
<action>Store selection in {{trigger_type}}</action>
|
||||
|
||||
<action>Ask Question 4: "What integrations/services does this workflow use?"</action>
|
||||
<action>Ask: "Please list all services (e.g., Slack, Google Sheets, HubSpot, etc.)"</action>
|
||||
<action>WAIT for user input</action>
|
||||
<action>Store in {{integrations_used}}</action>
|
||||
|
||||
<action>Ask Question 5: "How complex is the workflow?"</action>
|
||||
<action>Present numbered options:
|
||||
1. Simple - Linear flow with 3-5 steps
|
||||
2. Medium - Some conditional logic, 6-10 steps
|
||||
3. Complex - Multiple branches, loops, 11-20 steps
|
||||
4. Very Complex - Advanced logic, 20+ steps
|
||||
</action>
|
||||
<action>WAIT for user selection (1-4)</action>
|
||||
<action>Store selection in {{complexity}}</action>
|
||||
|
||||
<action>Ask Question 6: "What should the migrated workflow be named?"</action>
|
||||
<action>WAIT for user input</action>
|
||||
<action>Store in {{workflow_name}}</action>
|
||||
|
||||
<action>Ask Question 7: "Where should the n8n workflow file be saved?"</action>
|
||||
<action>Present numbered options:
|
||||
1. Default location - workflows/[workflow-name].json
|
||||
2. Custom path - Specify your own file path
|
||||
3. Project root - Save in main project directory
|
||||
</action>
|
||||
<action>WAIT for user selection (1-3)</action>
|
||||
<check if="selection is 2">
|
||||
<action>Ask for specific path</action>
|
||||
<action>WAIT for user input</action>
|
||||
</check>
|
||||
<action>Store final path in {{save_location}}</action>
|
||||
</step>
|
||||
|
||||
<step n="2" goal="Check Context7 MCP Availability">
|
||||
<action>Check if Context7 MCP server is configured</action>
|
||||
<action>Try to list available MCP tools</action>
|
||||
|
||||
<check if="Context7 MCP is available">
|
||||
<action>Store true in {{context7_available}}</action>
|
||||
<action>Proceed to Step 3</action>
|
||||
</check>
|
||||
|
||||
<check if="Context7 MCP is NOT available">
|
||||
<action>Store false in {{context7_available}}</action>
|
||||
<action>Inform user: "Context7 MCP not configured. Proceeding with built-in n8n knowledge."</action>
|
||||
<action>Proceed to Step 4</action>
|
||||
</check>
|
||||
</step>
|
||||
|
||||
<step n="3" goal="Query Context7 for n8n Documentation">
|
||||
<check if="{{context7_available}} is true">
|
||||
<action>Resolve n8n library ID using Context7</action>
|
||||
<action>Query Context7 for relevant n8n documentation based on:</action>
|
||||
<action>- Integrations used: {{integrations_used}}</action>
|
||||
<action>- Trigger type: {{trigger_type}}</action>
|
||||
<action>- Source platform: {{source_platform}}</action>
|
||||
<action>Store relevant documentation snippets for reference</action>
|
||||
</check>
|
||||
</step>
|
||||
|
||||
<step n="4" goal="Load Platform Mappings">
|
||||
<action>Load {{platform_mappings}} file</action>
|
||||
<action>Extract mappings for {{source_platform}}</action>
|
||||
<action>Identify equivalent n8n nodes for source platform components</action>
|
||||
</step>
|
||||
|
||||
<step n="5" goal="Analyze Source Workflow">
|
||||
<check if="{{workflow_file}} or {{workflow_content}} provided">
|
||||
<action>Parse source workflow file/content</action>
|
||||
<action>Extract workflow structure</action>
|
||||
</check>
|
||||
|
||||
<action>Analyze workflow based on description and details:</action>
|
||||
<action>1. Identify trigger type and configuration</action>
|
||||
<action>2. List all actions/steps in order</action>
|
||||
<action>3. Identify conditional logic (if/then branches)</action>
|
||||
<action>4. Identify loops or iterations</action>
|
||||
<action>5. Identify data transformations</action>
|
||||
<action>6. Identify error handling</action>
|
||||
<action>7. Map integrations to n8n nodes</action>
|
||||
|
||||
<action>Present analysis to user:</action>
|
||||
<action>- Source trigger: [platform-specific trigger]</action>
|
||||
<action>- n8n trigger: [mapped n8n node]</action>
|
||||
<action>- Source actions: [list with platform names]</action>
|
||||
<action>- n8n actions: [list with n8n node types]</action>
|
||||
<action>- Logic: [conditional branches, loops]</action>
|
||||
<action>- Transformations: [data mapping needs]</action>
|
||||
</step>
|
||||
|
||||
<step n="6" goal="Plan n8n Workflow Structure">
|
||||
<action>Load {{helpers}} for node creation guidelines</action>
|
||||
<action>Load {{templates}} for reference</action>
|
||||
|
||||
<action>Design n8n workflow structure:</action>
|
||||
<action>1. Map source trigger to n8n trigger node</action>
|
||||
<action>2. Map each source action to n8n node(s)</action>
|
||||
<action>3. Convert conditional logic to IF/Switch nodes</action>
|
||||
<action>4. Convert loops to Split In Batches nodes</action>
|
||||
<action>5. Add Set/Code nodes for data transformations</action>
|
||||
<action>6. Plan node connections</action>
|
||||
<action>7. Add error handling where needed</action>
|
||||
|
||||
<action>Present migration plan to user:</action>
|
||||
<action>- n8n Trigger: [node type and configuration]</action>
|
||||
<action>- n8n Nodes: [list with descriptions]</action>
|
||||
<action>- Connections: [flow diagram]</action>
|
||||
<action>- Data Mappings: [field mappings]</action>
|
||||
<action>- Credentials Needed: [list of integrations requiring auth]</action>
|
||||
|
||||
<action>Ask: "Does this migration plan look correct?"</action>
|
||||
<action>Present numbered options:
|
||||
1. Yes - Proceed with migration
|
||||
2. No - Adjust the plan
|
||||
3. Add more details - Provide additional information
|
||||
</action>
|
||||
<action>WAIT for user selection (1-3)</action>
|
||||
|
||||
<check if="selection is 2 or 3">
|
||||
<action>Ask: "What changes or additions are needed?"</action>
|
||||
<action>WAIT for user input</action>
|
||||
<action>Adjust plan based on feedback</action>
|
||||
<action>Repeat this step</action>
|
||||
</check>
|
||||
</step>
|
||||
|
||||
<step n="7" goal="Build n8n Workflow">
|
||||
<critical>Follow guidelines from {{helpers}} for proper node creation</critical>
|
||||
|
||||
<action>Initialize workflow structure:</action>
|
||||
<substep>
|
||||
{
|
||||
"name": "{{workflow_name}}",
|
||||
"nodes": [],
|
||||
"connections": {},
|
||||
"active": false,
|
||||
"settings": {
|
||||
"executionOrder": "v1"
|
||||
},
|
||||
"tags": [
|
||||
{
|
||||
"name": "migrated-from-{{source_platform}}"
|
||||
}
|
||||
]
|
||||
}
|
||||
</substep>
|
||||
|
||||
<action>Build nodes ONE at a time:</action>
|
||||
|
||||
<substep>For Each Mapped Node:
|
||||
1. Generate unique node ID
|
||||
2. Set node name (descriptive, unique)
|
||||
3. Set node type from platform mappings
|
||||
4. Set typeVersion (usually 1)
|
||||
5. Calculate position (220px spacing)
|
||||
6. Configure parameters based on source workflow
|
||||
7. Map data fields from source to n8n format
|
||||
8. Add credentials placeholder if needed
|
||||
9. Set error handling if required
|
||||
</substep>
|
||||
|
||||
<substep>For Data Transformations:
|
||||
1. Identify field mappings needed
|
||||
2. Create Set nodes for simple mappings
|
||||
3. Create Code nodes for complex transformations
|
||||
4. Use n8n expressions: ={{ $json.fieldName }}
|
||||
5. Handle data type conversions
|
||||
6. Handle date/time format differences
|
||||
</substep>
|
||||
|
||||
<substep>For Conditional Logic:
|
||||
1. Create IF nodes for if/then branches
|
||||
2. Create Switch nodes for multiple conditions
|
||||
3. Map source conditions to n8n condition format
|
||||
4. Set up true/false branches (index 0/1)
|
||||
</substep>
|
||||
|
||||
<substep>For Connections:
|
||||
1. Connect trigger to first action
|
||||
2. Connect actions in sequence
|
||||
3. Connect conditional branches
|
||||
4. Connect merge points
|
||||
5. Validate all connections
|
||||
</substep>
|
||||
|
||||
<action>Add migration notes as workflow tags</action>
|
||||
<action>Validate all node IDs are unique</action>
|
||||
<action>Validate all connections reference existing nodes</action>
|
||||
</step>
|
||||
|
||||
<step n="8" goal="Add Migration Notes">
|
||||
<action>Add comment nodes or documentation:</action>
|
||||
<action>- Source platform: {{source_platform}}</action>
|
||||
<action>- Migration date: {timestamp}</action>
|
||||
<action>- Credentials to configure: [list]</action>
|
||||
<action>- Testing notes: [important considerations]</action>
|
||||
<action>- Platform-specific differences: [notes]</action>
|
||||
</step>
|
||||
|
||||
<step n="9" goal="Save Migrated Workflow">
|
||||
<action>Save workflow to {{save_location}}</action>
|
||||
</step>
|
||||
|
||||
<step n="10" goal="Validate JSON Syntax">
|
||||
<critical>NEVER delete the file if validation fails - always fix syntax errors</critical>
|
||||
|
||||
<action>Run: node -e "JSON.parse(require('fs').readFileSync('{{save_location}}', 'utf8')); console.log('✓ Valid JSON')"</action>
|
||||
|
||||
<check if="validation fails (exit code 1)">
|
||||
<action>Read the error message carefully - it shows the syntax error and position</action>
|
||||
<action>Open the file and navigate to the error location</action>
|
||||
<action>Fix the syntax error (add missing comma, bracket, or quote as indicated)</action>
|
||||
<action>Save the file</action>
|
||||
<action>Re-run validation with the same command</action>
|
||||
<action>Repeat until validation passes</action>
|
||||
</check>
|
||||
|
||||
<action>Once validation passes, confirm with user: "Workflow migrated successfully to {{save_location}}"</action>
|
||||
</step>
|
||||
|
||||
<step n="11" goal="Provide Migration Guidance">
|
||||
<action>Provide post-migration instructions:</action>
|
||||
<action>1. Import the JSON file into n8n</action>
|
||||
<action>2. Configure credentials for these services: [list]</action>
|
||||
<action>3. Review and update these data mappings: [list]</action>
|
||||
<action>4. Test with sample data before activating</action>
|
||||
<action>5. Compare outputs with original platform</action>
|
||||
<action>6. Monitor initial executions closely</action>
|
||||
|
||||
<action>Highlight platform-specific differences:</action>
|
||||
<action>- Authentication: [differences]</action>
|
||||
<action>- Data formats: [differences]</action>
|
||||
<action>- Scheduling: [differences]</action>
|
||||
<action>- Error handling: [differences]</action>
|
||||
|
||||
<action>Ask: "Would you like help with any specific part of the migration?"</action>
|
||||
<action>Present numbered options:
|
||||
1. No - I'm ready to test
|
||||
2. Yes - Explain credential setup
|
||||
3. Yes - Explain data mappings
|
||||
4. Yes - Explain testing approach
|
||||
</action>
|
||||
<action>WAIT for user selection (1-4)</action>
|
||||
|
||||
<check if="selection is 2, 3, or 4">
|
||||
<action>Provide requested explanation</action>
|
||||
</check>
|
||||
</step>
|
||||
|
||||
<step n="12" goal="Validate Content">
|
||||
<invoke-task>Validate against checklist at {{validation}} using {{bmad_folder}}/core/tasks/validate-workflow.xml</invoke-task>
|
||||
</step>
|
||||
|
||||
</workflow>
|
||||
```
|
||||
|
|
@ -0,0 +1,32 @@
|
|||
name: migrate-workflow
|
||||
description: "Migrate workflows from other platforms (Zapier, Make, HubSpot, etc.) to n8n"
|
||||
author: "Saif"
|
||||
|
||||
# Workflow components
|
||||
installed_path: "{project-root}/{bmad_folder}/bmm/workflows/n8n-expert/migrate-workflow"
|
||||
shared_path: "{project-root}/{bmad_folder}/bmm/workflows/n8n-expert/_shared"
|
||||
instructions: "{installed_path}/instructions.md"
|
||||
validation: "{installed_path}/checklist.md"
|
||||
|
||||
# Shared resources
|
||||
helpers: "{shared_path}/n8n-helpers.md"
|
||||
templates: "{shared_path}/n8n-templates.yaml"
|
||||
platform_mappings: "{shared_path}/platform-mappings.yaml"
|
||||
|
||||
# Variables
|
||||
variables:
|
||||
source_platform: "" # Will be elicited
|
||||
workflow_description: "" # Will be elicited
|
||||
workflow_file: "" # Will be elicited (optional)
|
||||
workflow_content: "" # Will be elicited (optional)
|
||||
integrations_used: [] # Will be elicited
|
||||
trigger_type: "" # Will be elicited
|
||||
complexity: "" # Will be elicited
|
||||
save_location: "" # Will be elicited
|
||||
workflow_name: "" # Will be elicited
|
||||
context7_available: false # Will be checked
|
||||
|
||||
default_output_file: "{project-root}/workflows/migrated-workflow-{timestamp}.json"
|
||||
|
||||
standalone: true
|
||||
web_bundle: false
|
||||
Loading…
Reference in New Issue