Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
This document provides a complete reference for all action types available in declarative workflows.
Overview
Actions are the building blocks of declarative workflows. Each action performs a specific operation, and actions are executed sequentially in the order they appear in the YAML file.
Action Structure
All actions share common properties:
- kind: ActionType # Required: The type of action
id: unique_id # Optional: Unique identifier for referencing
displayName: Name # Optional: Human-readable name for logging
# Action-specific properties...
Note
Documentation for declarative workflows in .NET is coming soon. Please check back for updates.
Variable Management Actions
SetVariable
Sets a variable to a specified value.
- kind: SetVariable
id: set_greeting
displayName: Set greeting message
variable: Local.greeting
value: Hello World
With an expression:
- kind: SetVariable
variable: Local.fullName
value: =Concat(Workflow.Inputs.firstName, " ", Workflow.Inputs.lastName)
Properties:
| Property | Required | Description |
|---|---|---|
variable |
Yes | Variable path (e.g., Local.name, Workflow.Outputs.result) |
value |
Yes | Value to set (literal or expression) |
SetMultipleVariables
Sets multiple variables in a single action.
- kind: SetMultipleVariables
id: initialize_vars
displayName: Initialize variables
variables:
Local.counter: 0
Local.status: pending
Local.message: =Concat("Processing order ", Workflow.Inputs.orderId)
Properties:
| Property | Required | Description |
|---|---|---|
variables |
Yes | Map of variable paths to values |
AppendValue
Appends a value to a list or concatenates to a string.
- kind: AppendValue
id: add_item
variable: Local.items
value: =Workflow.Inputs.newItem
Properties:
| Property | Required | Description |
|---|---|---|
variable |
Yes | Variable path to append to |
value |
Yes | Value to append |
ResetVariable
Clears a variable's value.
- kind: ResetVariable
id: clear_counter
variable: Local.counter
Properties:
| Property | Required | Description |
|---|---|---|
variable |
Yes | Variable path to reset |
Control Flow Actions
If
Executes actions conditionally based on a condition.
- kind: If
id: check_age
displayName: Check user age
condition: =Workflow.Inputs.age >= 18
then:
- kind: SendActivity
activity:
text: "Welcome, adult user!"
else:
- kind: SendActivity
activity:
text: "Welcome, young user!"
Nested conditions:
- kind: If
condition: =Workflow.Inputs.role = "admin"
then:
- kind: SendActivity
activity:
text: "Admin access granted"
else:
- kind: If
condition: =Workflow.Inputs.role = "user"
then:
- kind: SendActivity
activity:
text: "User access granted"
else:
- kind: SendActivity
activity:
text: "Access denied"
Properties:
| Property | Required | Description |
|---|---|---|
condition |
Yes | Expression that evaluates to true/false |
then |
Yes | Actions to execute if condition is true |
else |
No | Actions to execute if condition is false |
ConditionGroup
Evaluates multiple conditions like a switch/case statement.
- kind: ConditionGroup
id: route_by_category
displayName: Route based on category
conditions:
- condition: =Workflow.Inputs.category = "electronics"
id: electronics_branch
actions:
- kind: SetVariable
variable: Local.department
value: Electronics Team
- condition: =Workflow.Inputs.category = "clothing"
id: clothing_branch
actions:
- kind: SetVariable
variable: Local.department
value: Clothing Team
- condition: =Workflow.Inputs.category = "food"
id: food_branch
actions:
- kind: SetVariable
variable: Local.department
value: Food Team
elseActions:
- kind: SetVariable
variable: Local.department
value: General Support
Properties:
| Property | Required | Description |
|---|---|---|
conditions |
Yes | List of condition/actions pairs (first match wins) |
elseActions |
No | Actions if no condition matches |
Foreach
Iterates over a collection.
- kind: Foreach
id: process_items
displayName: Process each item
source: =Workflow.Inputs.items
itemName: item
indexName: index
actions:
- kind: SendActivity
activity:
text: =Concat("Processing item ", index, ": ", item)
Properties:
| Property | Required | Description |
|---|---|---|
source |
Yes | Expression returning a collection |
itemName |
No | Variable name for current item (default: item) |
indexName |
No | Variable name for current index (default: index) |
actions |
Yes | Actions to execute for each item |
RepeatUntil
Repeats actions until a condition becomes true.
- kind: SetVariable
variable: Local.counter
value: 0
- kind: RepeatUntil
id: count_loop
displayName: Count to 5
condition: =Local.counter >= 5
actions:
- kind: SetVariable
variable: Local.counter
value: =Local.counter + 1
- kind: SendActivity
activity:
text: =Concat("Counter: ", Local.counter)
Properties:
| Property | Required | Description |
|---|---|---|
condition |
Yes | Loop continues until this is true |
actions |
Yes | Actions to repeat |
BreakLoop
Exits the current loop immediately.
- kind: Foreach
source: =Workflow.Inputs.items
actions:
- kind: If
condition: =item = "stop"
then:
- kind: BreakLoop
- kind: SendActivity
activity:
text: =item
ContinueLoop
Skips to the next iteration of the loop.
- kind: Foreach
source: =Workflow.Inputs.numbers
actions:
- kind: If
condition: =item < 0
then:
- kind: ContinueLoop
- kind: SendActivity
activity:
text: =Concat("Positive number: ", item)
GotoAction
Jumps to a specific action by ID.
- kind: SetVariable
id: start_label
variable: Local.attempts
value: =Local.attempts + 1
- kind: SendActivity
activity:
text: =Concat("Attempt ", Local.attempts)
- kind: If
condition: =And(Local.attempts < 3, Not(Local.success))
then:
- kind: GotoAction
actionId: start_label
Properties:
| Property | Required | Description |
|---|---|---|
actionId |
Yes | ID of the action to jump to |
Output Actions
SendActivity
Sends a message to the user.
- kind: SendActivity
id: send_welcome
displayName: Send welcome message
activity:
text: "Welcome to our service!"
With an expression:
- kind: SendActivity
activity:
text: =Concat("Hello, ", Workflow.Inputs.name, "! How can I help you today?")
Properties:
| Property | Required | Description |
|---|---|---|
activity |
Yes | The activity to send |
activity.text |
Yes | Message text (literal or expression) |
EmitEvent
Emits a custom event.
- kind: EmitEvent
id: emit_status
displayName: Emit status event
eventType: order_status_changed
data:
orderId: =Workflow.Inputs.orderId
status: =Local.newStatus
Properties:
| Property | Required | Description |
|---|---|---|
eventType |
Yes | Type identifier for the event |
data |
No | Event payload data |
Agent Invocation Actions
InvokeAzureAgent
Invokes an Azure AI agent.
Basic invocation:
- kind: InvokeAzureAgent
id: call_assistant
displayName: Call assistant agent
agent:
name: AssistantAgent
conversationId: =System.ConversationId
With input and output configuration:
- kind: InvokeAzureAgent
id: call_analyst
displayName: Call analyst agent
agent:
name: AnalystAgent
conversationId: =System.ConversationId
input:
messages: =Local.userMessage
arguments:
topic: =Workflow.Inputs.topic
output:
responseObject: Local.AnalystResult
messages: Local.AnalystMessages
autoSend: true
With external loop (continues until condition is met):
- kind: InvokeAzureAgent
id: support_agent
agent:
name: SupportAgent
input:
externalLoop:
when: =Not(Local.IsResolved)
output:
responseObject: Local.SupportResult
Properties:
| Property | Required | Description |
|---|---|---|
agent.name |
Yes | Name of the registered agent |
conversationId |
No | Conversation context identifier |
input.messages |
No | Messages to send to the agent |
input.arguments |
No | Additional arguments for the agent |
input.externalLoop.when |
No | Condition to continue agent loop |
output.responseObject |
No | Path to store agent response |
output.messages |
No | Path to store conversation messages |
output.autoSend |
No | Automatically send response to user |
Human-in-the-Loop Actions
Question
Asks the user a question and stores the response.
- kind: Question
id: ask_name
displayName: Ask for user name
question:
text: "What is your name?"
variable: Local.userName
default: "Guest"
Properties:
| Property | Required | Description |
|---|---|---|
question.text |
Yes | The question to ask |
variable |
Yes | Path to store the response |
default |
No | Default value if no response |
Confirmation
Asks the user for a yes/no confirmation.
- kind: Confirmation
id: confirm_delete
displayName: Confirm deletion
question:
text: "Are you sure you want to delete this item?"
variable: Local.confirmed
Properties:
| Property | Required | Description |
|---|---|---|
question.text |
Yes | The confirmation question |
variable |
Yes | Path to store boolean result |
RequestExternalInput
Requests input from an external system or process.
- kind: RequestExternalInput
id: request_approval
displayName: Request manager approval
prompt:
text: "Please provide approval for this request."
variable: Local.approvalResult
default: "pending"
Properties:
| Property | Required | Description |
|---|---|---|
prompt.text |
Yes | Description of required input |
variable |
Yes | Path to store the input |
default |
No | Default value |
WaitForInput
Pauses the workflow and waits for external input.
- kind: WaitForInput
id: wait_for_response
variable: Local.externalResponse
Properties:
| Property | Required | Description |
|---|---|---|
variable |
Yes | Path to store the input when received |
Workflow Control Actions
EndWorkflow
Terminates the workflow execution.
- kind: EndWorkflow
id: finish
displayName: End workflow
EndConversation
Ends the current conversation.
- kind: EndConversation
id: end_chat
displayName: End conversation
CreateConversation
Creates a new conversation context.
- kind: CreateConversation
id: create_new_conv
displayName: Create new conversation
conversationId: Local.NewConversationId
Properties:
| Property | Required | Description |
|---|---|---|
conversationId |
Yes | Path to store the new conversation ID |
Quick Reference
| Action | Category | Description |
|---|---|---|
SetVariable |
Variable | Set a single variable |
SetMultipleVariables |
Variable | Set multiple variables |
AppendValue |
Variable | Append to list/string |
ResetVariable |
Variable | Clear a variable |
If |
Control Flow | Conditional branching |
ConditionGroup |
Control Flow | Multi-branch switch |
Foreach |
Control Flow | Iterate over collection |
RepeatUntil |
Control Flow | Loop until condition |
BreakLoop |
Control Flow | Exit current loop |
ContinueLoop |
Control Flow | Skip to next iteration |
GotoAction |
Control Flow | Jump to action by ID |
SendActivity |
Output | Send message to user |
EmitEvent |
Output | Emit custom event |
InvokeAzureAgent |
Agent | Call Azure AI agent |
Question |
Human-in-the-Loop | Ask user a question |
Confirmation |
Human-in-the-Loop | Yes/no confirmation |
RequestExternalInput |
Human-in-the-Loop | Request external input |
WaitForInput |
Human-in-the-Loop | Wait for input |
EndWorkflow |
Workflow Control | Terminate workflow |
EndConversation |
Workflow Control | End conversation |
CreateConversation |
Workflow Control | Create new conversation |
Next Steps
- Expressions and Variables - Learn the expression language
- Advanced Patterns - Multi-agent orchestration and complex scenarios