Basic Workflow
Copy
import { createWorkflow, Agent, openai } from '@runflow-ai/sdk';
import { z } from 'zod';
// Define input/output schemas
const inputSchema = z.object({
customerEmail: z.string().email(),
issueDescription: z.string(),
});
const outputSchema = z.object({
ticketId: z.string(),
response: z.string(),
emailSent: z.boolean(),
});
// Create agents
const analyzerAgent = new Agent({
name: 'Issue Analyzer',
instructions: 'Analyze customer issues and categorize them.',
model: openai('gpt-4o'),
});
const responderAgent = new Agent({
name: 'Responder',
instructions: 'Write helpful responses to customers.',
model: openai('gpt-4o'),
});
// Create workflow
const workflow = createWorkflow({
id: 'support-workflow',
name: 'Support Ticket Workflow',
inputSchema,
outputSchema,
})
.agent('analyze', analyzerAgent, {
promptTemplate: 'Analyze this issue: {{input.issueDescription}}',
})
.connector('create-ticket', 'hubspot', 'tickets', 'create', {
subject: '{{analyze.text}}',
content: '{{input.issueDescription}}',
priority: 'medium',
})
.agent('respond', responderAgent, {
promptTemplate: 'Write a response for: {{input.issueDescription}}',
})
.connector('send-email', 'email', 'messages', 'send', {
to: '{{input.customerEmail}}',
subject: 'Your Support Request',
body: '{{respond.text}}',
})
.build();
// Execute workflow
const result = await workflow.execute({
customerEmail: 'customer@example.com',
issueDescription: 'My order has not arrived',
});
console.log(result);
Workflow with Parallel Steps
Copy
const workflow = createWorkflow({
id: 'parallel-workflow',
inputSchema: z.object({ query: z.string() }),
outputSchema: z.any(),
})
.parallel([
createAgentStep('agent1', agent1),
createAgentStep('agent2', agent2),
createAgentStep('agent3', agent3),
], {
waitForAll: true, // Wait for all to complete
})
.function('merge', async (input, context) => {
// Merge results
return {
combined: Object.values(context.stepResults.get('parallel')),
};
})
.build();
Workflow with Conditional Steps
Copy
const workflow = createWorkflow({
id: 'conditional-workflow',
inputSchema: z.object({ priority: z.string() }),
outputSchema: z.any(),
})
.condition(
'check-priority',
(context) => context.input.priority === 'high',
// True path
[
createAgentStep('urgent-agent', urgentAgent),
createConnectorStep('notify-slack', 'slack', 'messages', 'send', {
channel: '#urgent',
message: 'High priority issue!',
}),
],
// False path
[
createAgentStep('normal-agent', normalAgent),
]
)
.build();
Workflow with Retry
Copy
const workflow = createWorkflow({
id: 'retry-workflow',
inputSchema: z.object({ data: z.any() }),
outputSchema: z.any(),
})
.then({
id: 'api-call',
type: 'connector',
config: {
connector: 'external-api',
resource: 'data',
action: 'fetch',
parameters: {},
},
retryConfig: {
maxAttempts: 3,
backoff: 'exponential', // 'fixed', 'exponential', 'linear'
delay: 1000,
retryableErrors: ['timeout', 'network'],
},
})
.build();
Workflow Step Types
Copy
import {
createAgentStep,
createFunctionStep,
createConnectorStep
} from '@runflow-ai/sdk';
// Agent step
const agentStep = createAgentStep('step-id', agent, {
promptTemplate: 'Process: {{input.data}}',
});
// Function step
const functionStep = createFunctionStep('step-id', async (input, context) => {
// Custom logic
return { result: 'processed' };
});
// Connector step
const connectorStep = createConnectorStep(
'step-id',
'hubspot',
'contacts',
'create',
{ email: '{{input.email}}' }
);