Call Flows

Heedify supports inbound voice call routing via a visual designer with IVR (configurable digit count and timeout), separate transfer-to-user, transfer-to-queue and transfer-to-phone nodes, day/time/regex/variable checks, holidays and open hours, post-call surveys (numerical, yes/no, rating) and workflow event triggers, integrated with Microsoft Teams resource accounts, Teams Phone and Azure Blob recording (with optional transcription). A call flow is the visual routing tree applied to inbound voice calls on a Microsoft Teams resource account. It defines what plays, what branches, and where the call lands — from greeting to queue, IVR, transfer or disconnect — and pairs that with holidays, open hours, recording, post-call survey and workflow triggers.

Creating a call flow

  1. Open Call Flows from the sidebar.
  2. Click +Add.
  3. On the Resources tab, pick the Teams resource account (Graph search), then fill in the metadata.
  4. Walk the other tabs to add greetings, hours, routing, recording, survey and workflow triggers.
  5. Click Save.

Set up the Teams resource account (Unify model)

In the Unify model the Teams resource account is created and linked to Heedify’s Azure Communication Services (ACS) resource with PowerShell, before you bind it on the Resources tab. Run the commands in Teams PowerShell.

Connect to Teams PowerShell:

Connect-MicrosoftTeams

Create the resource account (use the Unify application id 13dc7c3d-b71b-4568-a68e-ac31df943617):

New-CsOnlineApplicationInstance -UserPrincipalName "acme_desk@acme.com" -DisplayName "ACME Desk" -ApplicationId 13dc7c3d-b71b-4568-a68e-ac31df943617

In the Microsoft 365 admin center assign a Microsoft Teams Phone Resource Account licence (free) to the new account.

Associate the ACS resource that matches your region — it must correspond to the region of the agents handling this flow:

Region AcsResourceId
Europe (EU) 3e7944ef-8a11-4125-8f92-8ff40adf1272
America (AMER) 6bfbd5b3-013b-443f-ac56-75d75d730dd6
Asia-Pacific (APAC) 261317e9-8295-4b2f-8541-4f22e00fe879
Set-CsOnlineApplicationInstance -Identity "acme_desk@acme.com" -ApplicationId 13dc7c3d-b71b-4568-a68e-ac31df943617 -AcsResourceId <AcsResourceId-for-your-region>

Assign a phone number — for Microsoft Calling Plans:

Set-CsPhoneNumberAssignment -Identity "acme_desk@acme.com" -PhoneNumber "+33189385357" -PhoneNumberType CallingPlan

…or for Direct Routing:

Set-CsPhoneNumberAssignment -Identity "acme_desk@acme.com" -PhoneNumber "+33189385357" -PhoneNumberType DirectRouting

Then create the call flow and, on the Resources tab, select the Teams Phone Extensibility option for the Unify model.

The application id, ACS resource and phone number are configured once per resource account. After that, manage the flow entirely in the portal.

Resources

The Resources tab binds the call flow to a Teams resource account and sets tenant-level metadata. The resource account itself is selected with a Microsoft Graph search — type a name, pick the account in the dropdown (you do not type the GUID by hand).

Field Description
Resource The Teams resource account (Graph search). Required at creation; locked afterwards.
Time Zone IANA time zone used for Holidays and Open Hours. Default Europe/Paris.
Language Default language for generated audio. Default en-US.
Data Location Where the call data is stored.
Entity Entity the call flow belongs to. Required and locked after creation.
Region Service region (for example EU). Locked after creation.
Teams Phone Extensibility Toggle (isTPE) for resource accounts that publish through Teams Phone Extensibility. Locked after creation.

Greeting

Up to four greeting messages can be enabled, each with its own audio (uploaded file or text-to-speech) and language:

Message Purpose
Welcome Message The standard hello played at call start. Enabled by default.
Emergency Message One-shot announcement (for example, a service outage).
Flash Message Short notice played in addition to the welcome.
Custom Message A free-purpose extra message.

Each message can be toggled on/off independently. The welcome message is the only one enabled by default. Enabled messages are played in this order — Emergency → Welcome → Flash → Custom — and disabled messages are skipped.

Holidays & Open Hours

This tab is split into two collapsible sections.

Holidays

Field Description
Holiday message Audio played to callers during a holiday or weekend day.
Holidays (days off) List of date ranges. Click + to add a range; each row carries Start date and End date in dd/mm/yyyy.
Weekend Multi-select of weekdays that are always treated as days off. Default Saturday + Sunday.
Holidays fallback The action when the call lands during a holiday — Disconnect, Transfer to user, Transfer to phone or Queue.

Open Hours

Field Description
Out of business hours message Audio played outside open hours.
Per-day schedule Each weekday is a collapsible section. Inside, add one or more time ranges (Start time + End time). A day with no range is closed.
Open hours fallback The action when the call lands outside open hours — Disconnect, Transfer to user, Transfer to phone or Queue.

Routing (visual designer)

The Routing tab is the drag-and-drop tree. The left palette groups nodes into three categories.

General

Node Purpose
Greeting Message Plays a greeting audio. Only one greeting node is allowed per flow.
Holidays Branches into the holiday calendar. Only one allowed per flow.
Open Hours Branches on the weekly schedule. Only one allowed per flow.
Survey Triggers the post-call survey on this branch.

Routing

Node Purpose
IVR Plays a prompt and reads DTMF digits to branch (see below).
Transfer to User Transfer the call to a specific Teams user.
Queue (Transfer to Queue) Hand the call to a Heedify queue.
Transfer to Phone Transfer to a PSTN phone number.
Disconnect End the call.
Prompt Play an audio message (TTS or file).
Check Variable Branch on a formula evaluated against the call’s variables — If matched routes one way, If not matched another.
Check Days Branch based on the current day.
Check Time Branch based on the current time.
Check Regex Branch based on a regex match against an input (typically caller number).

Trigger (workflow events)

These nodes attach a workflow to a lifecycle event:

Node Fires when
Agent Connected An agent picks up the call.
Customer Abandoned The caller hangs up before being answered.
Call Connected The call reaches Heedify.
Call Ended The call terminates.
Agent Declined The alerted agent declined the offer.

Drag a node from the palette onto the canvas, then click the node to open its edit panel.

IVR node fields

An IVR node plays a menu prompt and reads the caller’s DTMF digits, then routes each digit to its own action. Use it for self-service menus such as “press 1 for sales, 2 for support”.

Field Description
IVR name Display name for the node.
Wait until customer enters # When on, the IVR waits for the # last tone instead of timing out automatically (lastTone).
Expected digits number How many digits to collect. Default 1.
Message The prompt audio (TTS or file).
IVR dial map A table of key → action. For each row pick the digit, the action (Queue, Transfer to user, Transfer to phone, Disconnect, Routing) and the target.

The full node also stores a timeout (seconds to wait for input) and the options map (digit → next node).

Routing steps and chaining

Click Add New Routing to create a named routing step (no spaces in the name). Start is the flow’s entry point. Any node action can be set to Routing to jump to another step, so you can build multi-step trees — for example Start → Check Days → Check Time → Queue.

Branch actions

The Check nodes branch into If matched / If not matched. For each branch — and for an IVR digit or a Prompt’s next step — you pick an action:

Action Goes to
Queue a Heedify queue
Transfer to user a Microsoft Teams user (Graph search)
Transfer to phone a PSTN phone number
Disconnect ends the call
Routing another routing step (chaining)

Check Variable

A Check Variable node evaluates a formula against the call’s variables and branches on the result. Use it to route on data captured or fetched during the call — for example, send a VIP customer to a dedicated queue.

Field Description
Formula A free-text expression evaluated against the call’s variables.
If matched / If not matched The branch action when the formula is true / false.

Check Time

A Check Time node compares the call’s current time against a time range. Use it to route differently inside vs outside a window — for example a lunch-break or after-hours path, without touching the Open Hours schedule.

Field Description
Start time / End time A time range in HH:mm (24-hour).
If matched / If not matched The branch when the call time is inside / outside the range.

Honours the flow’s Time Zone.

Check Days

A Check Days node checks whether the current day is one of the selected weekdays. Use it to branch weekdays vs weekend, or to single out specific days.

Field Description
Select days One or more weekdays (Monday–Sunday).
If matched / If not matched The branch when the current day is / isn’t selected.

Check Regex

A Check Regex node tests an input — usually the caller’s number — against a regular expression. Use it to branch by number pattern, for example route French numbers (^\+33…) one way and everything else another.

Field Description
RegExp pattern A regular expression matched against the input (typically the caller number), e.g. ^\+33\d{9}$.
Test value / Test Type a sample value and click Test to preview Matched / Not matched.
If matched / If not matched The branch on the regex result.

Prompt

A Prompt node plays an audio message and then moves on to a single next action — it does not collect any caller input. Use it for announcements before routing onward (unlike IVR, which reads digits).

Field Description
Prompt name Display name for the node.
Message The audio to play (text-to-speech or uploaded file).
Next step The action after the audio — Queue, Transfer to user/phone, Disconnect or Routing.

Recording

Field Description
Enable recording Master switch (callRecordingEnabled). When on, calls passing through this flow are recorded.
Enable Transcription Separate switch (AudioTranscribe). When on, recordings are transcribed automatically. Only visible when recording is on.
Recording readers The list of users granted playback access (callRecordingReaders[]). Add a user via Graph search; remove with the trash icon.

Survey

The Survey tab configures a post-call questionnaire. Enable it with Activate the survey, then build the question set.

Field Description
Activate the survey Master switch.
Timeout Seconds to wait for the caller’s input on a question.
Questions Ordered list. Each question has a name, a Type, a Question text, an Order and an Announcement audio.
Goodbye message Audio played at the end of the survey.

Available question types (code key in parentheses):

  • Yes or No (YES_OR_NO) — DTMF question with a yesDigit setting that picks which digit (default 1) is interpreted as “yes”.
  • Rating (RATING) — Single-digit rating, typically 1-5.
  • Numerical (NUMERICAL) — Free numeric input.

Workflows

The workflow events surfaced in the routing palette (Agent Connected, Customer Abandoned, Call Connected, Call Ended, Agent Declined) attach a workflow to a lifecycle event for this flow. Build the workflows themselves under Customer data > Workflows. Workflows fire asynchronously and may call external webhooks.

Editing and deleting

Open a call flow from the list to edit. The Entity, Region and Teams Phone Extensibility are locked after creation.

Deleting a call flow releases its Teams resource account.

FAQ

What is the maximum digit count a Heedify IVR can collect?

The IVR node’s Expected digits number field defines how many DTMF digits are collected (default 1). Turning Wait until customer enters # on switches the IVR from a fixed digit count to a lastTone trigger so the caller signals end of input.

How do I route to different paths based on time of day in Heedify?

Use the Check Time node in the Routing tab to branch on the current time, or attach an Open Hours node to apply the per-day schedule defined in the Holidays & Open Hours tab. Both honour the call flow’s IANA Time Zone.

Where do I add the workflow that fires when a Heedify caller abandons?

Drag a Customer Abandoned trigger node onto the routing canvas and attach a workflow built under Customer data > Workflows. The workflow fires asynchronously when the caller hangs up before being answered.

Are Heedify call recordings transcribed automatically?

Only when Enable Transcription is on. It is a separate switch from Enable recording and is only visible when recording is on. Transcription runs on the recorded audio stored in the call flow’s Data Location.

Can a Heedify call flow play different greetings to different callers?

Up to four greeting messages are configurable per flow: Welcome Message, Emergency Message, Flash Message and Custom Message. Each has its own audio (text-to-speech or uploaded file) and language, and each toggles independently.

Works with: Microsoft Teams, Teams Phone, Microsoft Graph (resource account search), Teams Phone Extensibility, Azure Blob recording, Workflows, Queues.