This article provides general information on how to avoid looping in the voice application.
Known voice application designs that will cause looping in the voice application -
1. Any Goto block that points somewhere up above in the voice application flowchart. This design can cause a loop if there is a condition where the flow returns back to the original Goto and again the flow is repeated thus causing a loop. To avoid the loop, the IPCM admin (designer) should consider either A) a method where the call can break outside the loop or B) remove the Goto.
2. The Route to Agent > Conditional Exit blocks. The conditional exits were designed to provide an alternative flow in the voice application when a certain condition exists, such as no available agents, no logged agents, no matching agents. These conditional exits can cause a loop where again there is a Goto pointing above in the flowchart and the call flows back down to the original conditional exit > Goto block. In some cases, this loop is needed. For example, when there are no matching agents but there is a need to perform some action (in this sub block) then return the call back into the queue (Route To Agent block). When using Gotos in Route To Agent exits, use caution and thoroughly test for infinite loops.
3. Like the Route To Agent block, the Connect Call block contains conditional exits such as no answer, busy, target disconnected, etc. As in item 2 above, when using Goto blocks in these conditional exits, use caution and thoroughly test for infinite loops.
4. The Exception Handler block contains a Try-Catch sub blocks. When there is an error in the Try, the subsequent Catch will be executed. There is not a documented list of what constitutes as an error, as there may be many conditions or results unique for each use of the handler. In some cases, IPCM will interpret or identify an error in the Try even though all blocks successfully execute. Again as in the items above, when a Goto block is used in the Catch that points back up to a block that resides within the Exception Handler, the same error occurs and causes a Try-Catch infinite loop. This loop may persist long after a call has been terminated. When using a Goto in the Catch block (that points back to a block within the handler), use caution and thoroughly test for infinite loops.