IVR - Best Practices and Performance Considerations

Expand / Collapse

IVR - Best Practices and Performance Considerations

Article ID: 52050 - Last Review: April 2, 2020


For a general Best Practices guide for the entire Contact Center Solution, please see this article .

IVR Best Practices

  • Utilize subroutines wherever possible to reduce path count (see IVR Performance below for more detail on this)
  • Provision alternate answer points for IVR ports in the event of outages
  • Ensure failure branches account for unexpected issues
    • Create a failure handling subroutine which can be used
  • Ensure system names for activities follow a pre-determined pattern and are easy to read to aid in troubleshooting
      • Example, collect digits would be cdGetAccountNumber
    • Branches should indicate they are a branch of this activity
      • brcdGetAccountNumberSUCCESS
    • This creates easier trailing in logs
  • When leveraging IVR reporting, ensure the Name (friendly name) of the activity is descriptive and reflective of the activity
  • YourSite Explorer reserves memory for every workflow open, so have as few workflows open at a time as possible.
  • Close unnecessary tabs in YourSite Explorer to save memory, especially before exiting in order to avoid pre-loading them all again when you re-launch.
  • Close YourSite Explorer when done working, as .NET may not release the memory that had been used while the application is still open.


There are multiple factors that can affect performance of your IVR system.

Path count and workflow compilation times

When referring to Path Count, we are looking at how many different paths a call might take inside of one call flow.  Each condition, or menu can split the number of paths a call can take.  More paths present in a call flow will decrease the calls-per-hour capacity of IVR.  When a new call is answered by an IVR Port, the IVR Inbound service compiles the call flow in memory to be executed.  More possible paths in the call flow mean that there is more data on every call that needs to be compiled.  However, the system does not compile Subroutines until the call hits them.  By creating subroutines where possible you can minimize the size of the .XOML files being cached, and improve the calls-per-hour capacity.

You can see the size of the file being loaded by navigating to the [InstallDir]\CCM\Ivr\Workflow\Compiled\ folder.  The call flow elements are each filed in a folder by GUID, so it is often best to sort by Date Modified to find the one you have recently saved changes to.  Once you open the folder, it will show the .XOML files, which are the element itself.  Each .XOML file's name includes the date it was saved so the most recent file is the one you are interested in.  The .XOML files should remain as small as possible, in order to minimize the performance impact.  By creating using subroutines, you can keep each individual element smaller and maintain your performance.

NOTE: You must keep your .XOML files under 250KB each in order to avoid overloading your IVR ports.

In particular, you need to create subroutines if:

  • The same section of the call flow repeats itself
  • A section of the call flow is very complex
  • A path in the call flow won't be reached on the majority of calls
  • The .XOML files for the call flow, or other call flow elements are growing beyond a safe size.

IVR Server Considerations

More ports on an IVR server will increase the resources needed for MiAUDIO, MiTAI, and logic processing.  Our engineering guidelines recommend a maximum of 120 ports per IVR server.

Co-locating other services and applications on the IVR server will reduce the resources available to the IVR system.  You should avoid resource heavy services and applications such as SQL Server, Exchange, or CCM software being installed on the same server as your IVR.

The minimum system specifications noted in our System Engineering guide are just that: Minimum.  For better performance on your IVR server we recommend exceeding these specifications where possible.  Monitor the system to ensure that it is keeping up with the resource demand.  Note that the resources needed will increase along with the traffic being processed through IVR.

If you have enough ports to warrant multiple IVR servers, you can use the YourSite Explorer Hunt Group Configuration to interleave the ports.  This will load balance the incoming traffic across multiple servers.

Security Considerations

With new features being introduced in our software, we always recommend consulting our Client and Server Port Requirement knowledge base article to ensure that the ports used by our software are not blocked by firewalls.

Telephone System Considerations

Ensure that MiTAI is only enabled on required Classes of Service.  By default a Mitel 3300 enables MiTAI.  Disabling MiTAI on Classes of Service that don't require it can grant an immediate performance increase from the PBX

Mitel engineering guidelines recommend a maximum of 60 IVR ports per PBX. 


IVR 6.0.X.X and newer

Keywords: IVR best practices performance

Rate this Article:

Add Your Comments

Name: *
Email Address:
Web Address:
Verification Code:

Last Modified:Thursday, April 02, 2020
Last Modified By: montpetit.a
Type: INFO
Article not rated yet.
Article has been viewed 14,150 times.