flow-generation
Flow Designer Flow Generation
Overview
This skill covers generating ServiceNow Flow Designer flows from natural language descriptions:
- Creating flows with appropriate triggers (record-based, scheduled, application-based)
- Adding actions: approvals, notifications, record operations, scripted steps
- Building conditional logic with if/else branches and decision tables
- Creating subflows for reusable automation components
- Generating approval flows with parallel/sequential approval patterns
- Building notification flows with dynamic content
- Data manipulation flows for record transformations and bulk operations
When to use: When automating business processes, generating approval workflows, building notification logic, or creating data manipulation pipelines in Flow Designer.
Prerequisites
- Roles:
flow_designeroradmin - Plugins:
com.glide.hub.flow_designer(Flow Designer),com.glide.hub.action_type(Action Designer) - Access: sys_hub_flow, sys_hub_action_type_definition, sys_flow tables
- Knowledge: Basic understanding of Flow Designer concepts (triggers, actions, flow logic)
- Related Skills:
genai/playbook-generationfor Process Automation,genai/spoke-generationfor integrations
Procedure
Step 1: Analyze the Natural Language Description
Parse the user's request to identify:
- Trigger type: What starts the flow (record create/update, schedule, inbound email, REST)
- Target table: Which table the flow operates on
- Actions: What the flow should do (create records, send notifications, request approvals)
- Conditions: Any branching logic or filters
- Outputs: Expected results or return values
Step 2: Query Existing Flows for Patterns
MCP Approach:
Use SN-Query-Table on sys_hub_flow:
- query: active=true^trigger_type=RECORD_CREATED^table=incident
- fields: sys_id,name,description,trigger_type,table,status
- limit: 10
REST Approach:
GET /api/now/table/sys_hub_flow
?sysparm_query=active=true^trigger_type=RECORD_CREATED^table=incident
&sysparm_fields=sys_id,name,description,trigger_type,table,status
&sysparm_limit=10
Step 3: Create the Flow Record
MCP Approach:
Use SN-Create-Record on sys_hub_flow:
- name: "Auto-Assign Priority Incidents"
- description: "Automatically assigns high-priority incidents to the on-call team"
- trigger_type: "RECORD_CREATED"
- table: "incident"
- status: "draft"
- run_as: "system"
- scope: "global"
REST Approach:
POST /api/now/table/sys_hub_flow
Body: {
"name": "Auto-Assign Priority Incidents",
"description": "Automatically assigns high-priority incidents to the on-call team",
"trigger_type": "RECORD_CREATED",
"table": "incident",
"status": "draft",
"run_as": "system",
"scope": "global"
}
Step 4: Configure the Trigger
Key trigger types and their configurations:
| Trigger Type | Value | Configuration Fields |
|---|---|---|
| Record Created | RECORD_CREATED | table, conditions |
| Record Updated | RECORD_UPDATED | table, conditions, fields_to_monitor |
| Record Deleted | RECORD_DELETED | table, conditions |
| Scheduled | SCHEDULED | schedule, time_zone, repeat_interval |
| Inbound Email | INBOUND_EMAIL | target_table, conditions |
| REST API | REST | endpoint_path, http_method |
| Service Catalog | SC_REQ_ITEM | catalog_item, conditions |
MCP Approach:
Use SN-Create-Record on sys_hub_trigger_instance:
- flow: "<flow_sys_id>"
- trigger_type: "RECORD_UPDATED"
- table: "incident"
- condition: "priority=1^state!=6"
- fields_to_monitor: "priority,assignment_group"
REST Approach:
POST /api/now/table/sys_hub_trigger_instance
Body: {
"flow": "<flow_sys_id>",
"trigger_type": "RECORD_UPDATED",
"table": "incident",
"condition": "priority=1^state!=6",
"fields_to_monitor": "priority,assignment_group"
}
Step 5: Add Flow Actions
Common action types and their sys_hub_action_type_definition references:
| Action | Type Definition | Key Inputs |
|---|---|---|
| Create Record | sn_fd.create_record | table, field_values |
| Update Record | sn_fd.update_record | record, field_values |
| Delete Record | sn_fd.delete_record | record |
| Look Up Record | sn_fd.look_up_record | table, conditions |
| Ask for Approval | sn_fd.ask_for_approval | record, approvers, approval_type |
| Send Email | sn_fd.send_email | to, subject, body |
| Send Notification | sn_fd.send_notification | notification, recipients |
| Log Message | sn_fd.log | message, level |
| Run Script | sn_fd.run_script | script |
| Wait for Condition | sn_fd.wait_for_condition | table, condition, timeout |
MCP Approach:
Use SN-Create-Record on sys_hub_action_instance:
- flow: "<flow_sys_id>"
- action_type: "<action_type_sys_id>"
- order: 100
- name: "Look Up Assignment Group"
- inputs: {
"table": "sys_user_group",
"conditions": "name=Network Operations"
}
Step 6: Add Conditional Logic
Build if/else branches using flow logic steps:
MCP Approach:
Use SN-Create-Record on sys_hub_action_instance:
- flow: "<flow_sys_id>"
- action_type: "sn_fd.if"
- order: 200
- name: "Check Priority Level"
- inputs: {
"condition": "trigger.current.priority == 1"
}
For nested conditions, use the parent field to link child actions to the if/else block.
Step 7: Build Approval Flows
Sequential Approval Pattern:
Use SN-Create-Record on sys_hub_action_instance:
- flow: "<flow_sys_id>"
- action_type: "sn_fd.ask_for_approval"
- order: 300
- name: "Manager Approval"
- inputs: {
"record": "trigger.current",
"approval_type": "approve_reject",
"approvers": "trigger.current.opened_by.manager",
"due_date_interval": "3 days"
}
Parallel Approval Pattern: Add multiple approval actions inside a parallel block:
Use SN-Create-Record on sys_hub_action_instance:
- flow: "<flow_sys_id>"
- action_type: "sn_fd.parallel"
- order: 300
- name: "Parallel Approvals"
Then add child approval actions with parent referencing the parallel block.
Step 8: Create Subflows for Reusability
MCP Approach:
Use SN-Create-Record on sys_hub_sub_flow:
- name: "Send Escalation Notification"
- description: "Reusable subflow for sending escalation notifications"
- status: "draft"
- inputs: "record,escalation_level,notify_group"
- access: "public"
REST Approach:
POST /api/now/table/sys_hub_sub_flow
Body: {
"name": "Send Escalation Notification",
"description": "Reusable subflow for sending escalation notifications",
"status": "draft",
"access": "public"
}
Step 9: Define Flow Inputs and Outputs
MCP Approach:
Use SN-Create-Record on sys_hub_flow_input:
- flow: "<flow_sys_id>"
- name: "assignment_group"
- label: "Assignment Group"
- type: "reference"
- reference_table: "sys_user_group"
- mandatory: true
Use SN-Create-Record on sys_hub_flow_output:
- flow: "<flow_sys_id>"
- name: "approval_status"
- label: "Approval Status"
- type: "string"
Step 10: Activate and Test the Flow
MCP Approach:
Use SN-Update-Record on sys_hub_flow:
- sys_id: "<flow_sys_id>"
- status: "published"
Verify the flow is active:
Use SN-Query-Table on sys_hub_flow:
- query: sys_id=<flow_sys_id>
- fields: sys_id,name,status,active
Tool Usage
| Tool | Purpose | When to Use |
|---|---|---|
| SN-Query-Table | Find existing flows and action types | Pattern discovery and validation |
| SN-Create-Record | Create flows, triggers, actions | Building new flow components |
| SN-Update-Record | Modify flow settings, activate flows | Editing and publishing |
| SN-Get-Table-Schema | Discover flow table fields | Understanding available configurations |
Best Practices
- Always create flows in draft status first -- never publish untested flows directly
- Use descriptive names for flows and actions that reflect business purpose
- Set run_as appropriately -- use "system" for background automation, "initiating_user" for user-triggered flows
- Add error handling -- include try/catch blocks and log actions for debugging
- Limit trigger conditions -- overly broad triggers cause performance issues
- Use subflows for repeated logic across multiple flows
- Monitor flow execution via sys_flow_context for runtime analysis
- Set appropriate timeouts on Wait for Condition actions to prevent indefinite hangs
- Test with restricted data before activating against production tables
- Document flow purpose in the description field for maintainability
Troubleshooting
| Issue | Cause | Resolution |
|---|---|---|
| Flow not triggering | Trigger conditions too restrictive or flow inactive | Check sys_hub_flow.active and trigger conditions |
| Action fails with permission error | Run-as user lacks table access | Change run_as or grant roles to flow user |
| Flow executes multiple times | Trigger lacks update-field filter | Add fields_to_monitor to limit re-triggers |
| Subflow not found | Subflow is in draft or wrong scope | Publish subflow and check access setting |
| Approval stuck in pending | No approvers matched | Verify approver reference resolves to active users |
| Flow context shows error | Script action has runtime exception | Check sys_flow_context.error_message for details |
Examples
Example 1: Incident Auto-Assignment Flow
Generate a flow that automatically assigns P1 incidents to the Network Operations team and sends a notification:
- Trigger: Record Created on
incidentwherepriority=1 - Action 1: Look Up Record on
sys_user_groupwherename=Network Operations - Action 2: Update Record on trigger record setting
assignment_groupto lookup result - Action 3: Send Notification to assignment group members
Example 2: Change Request Approval Flow
Generate a multi-level approval flow for change requests:
- Trigger: Record Updated on
change_requestwherestate=assess - Action 1: If
risk=high, request CAB approval (parallel) - Action 2: If
risk=moderate, request manager approval (sequential) - Action 3: On approval, update state to
authorize - Action 4: On rejection, update state to
closedwith rejection notes
Example 3: Scheduled Data Cleanup Flow
Generate a scheduled flow to archive old resolved incidents:
- Trigger: Scheduled, daily at 02:00 UTC
- Action 1: Look Up Records on
incidentwherestate=6^resolved_at<javascript:gs.daysAgo(90) - Action 2: For each record, create archive record in
u_incident_archive - Action 3: Delete original record
- Action 4: Log summary of archived count
Related Skills
genai/playbook-generation- Process Automation Designer playbooksgenai/spoke-generation- Integration Hub spoke creationcatalog/approval-workflows- Catalog-specific approval configurationitsm/incident-management- Incident table structure and fields
More from happy-technologies-llc/happy-platform-skills
happy-platform-skills
Reusable development patterns and automation recipes for enterprise platforms - 180+ skills across 23 categories
17scheduled-jobs
Comprehensive guide to creating and managing ServiceNow scheduled jobs - run frequencies, conditional execution, performance optimization, error handling, and debugging
4application-scope
Manage scoped application development including setting application context and update set alignment
4scripted-rest-apis
Comprehensive guide to creating, securing, and testing Scripted REST APIs in ServiceNow for custom integrations and external system connectivity
4automated-testing
Comprehensive Automated Test Framework (ATF) guide for creating, managing, and executing automated tests in ServiceNow
4analytics-generation
Generate analytics dashboards and visualizations from natural language descriptions covering PA indicators, data collectors, and widgets
4