---
title: 'Call flows'
summary: 'An ordered set of steps that defines what happens to a call: ring this user, send to a queue, play an IVR, drop to voicemail. The building block of inbound and outbound routing.'
section: features
tags:
  - crud
  - telephony
  - routing
  - ivr
updated: '2026-08-12'
related_forms:
  - call_flow_steps
---

> A **call flow** defines what happens to a call as an ordered set of steps: ring this user, then this group, then play an announcement, then send to voicemail. It is the building block of call routing.

## Overview

A call flow is an ordered list of **steps**, each doing one thing. You reach for one the moment you want more than "ring one person": IVR menus, hold queues, schedule gates, announcements, and recording all compose from the same building blocks. The flow's **Enabled** toggle controls whether the flow is in use. When it is off, the flow is bypassed and its calls follow the PBX-wide default instead.

## What it does

The actual call-time behavior, which step a call lands on and what happens when one step does not connect, is carried out by the telephony platform, not decided inside Cockpit. Cockpit stores the list, the order, and each step's configuration.

![The call flow step editor, with each step's type, options, and on or off toggle](call_flows-images/step-editor.png)

A typical inbound flow chains several attempts, for example:

1. Ring User A.
2. Ring Group "Sales".
3. Enter a queue.
4. Play "Sorry, leave a message" then hang up.

Some step types do not connect a caller to anyone - they perform a side effect or play audio (start recording, change ringtone, send an email, play an announcement). These are commonly placed before a ring attempt so the side effect or audio happens first.

A step can be gated by a [schedule](schedules.md), which is how business-hours routing is built:

![A call flow whose first step jumps to the after-hours flow, gated by the Business hours schedule](call_flows-images/gated-step.png)

| Outline | Field | What it does |
|---|---|---|
| <span style="color:#0a84ff">Blue</span> | Schedule | Limits the step to the times the schedule matches. Empty means the step always applies. |

Steps fall into four families:

| Family | What you configure | Example types |
|---|---|---|
| **Answering** | Connect the caller to a destination. | Dial, Enter queue, External number, Conference room, AI Assistant |
| **Navigation** | Send the call to another routing destination. | Call flow (jump), IVR, IVR extension |
| **Audio** | Play something to the caller. | Announcement, Text to speech, Answer |
| **Side-effect** | Perform an action without rerouting. | Start recording, Change ringtone and label, Send to email, Webhook, Multicast, Hang up |

Some step types are terminal - the editor does not allow another step after them (for example IVR, Conference room, Multicast, Hang up). For the full per-type field reference, see [Call flow steps](call_flow_steps.md).

## See also

- [Extensions](extensions.md) - how to attach a call flow to an extension's internal or external incoming path.
- [Queues](queues.md) - the queue model that *Enter queue* steps reference.
- [Phone numbers](phone_numbers.md) - the inbound DIDs you assign call flows to.
- [Schedules](schedules.md) - time-based gating for *Call flow* steps.
- [IVRs](ivrs.md) - the menus an *IVR* step routes through.

```yaml fields
enabled:
  label: Enabled
  api: enabled
  tab: General
  hint: 'When off, the flow is bypassed and calls assigned to it follow the PBX-wide default instead.'
name:
  label: Name
  api: name
  tab: General
  hint: 'Identifies this call flow in dropdowns and lists. Pick a name that survives a year: "Main inbound", "Sales after hours".'
description:
  label: Comment
  api: description
  tab: General
  hint: "Optional note about this call flow's purpose or change history."
callFlowSteps:
  label: 'Call flow steps'
  tab: General
  hint: 'The ordered list of steps that define what happens when a call enters this flow. Each step has a type and type-specific options, and can be toggled on or off individually.'
```
