How To: Callbacks Flow

A step-by-step guide to understanding and implementing the template callbacks flow

Written By Edward Cheng (Administrator)

Updated at January 30th, 2026

Overview

Callbacks give callers an easy way to request a callback using an API call. They can either be called back at the number they’re calling from or provide another 10-digit number. This article references a template Callback flow Callbacks_Template_2026.

Prerequisites

  • Callbacks_Template_2026 Template
  • Admin access to CX Hub
 


IMPORTANT

  • Do NOT modify the Callbacks_Template_2026 template directly in the account. Always create a copy of that template and build off of that. 
 



Overview

Callbacks give callers an easy way to request a callback using an API call. They can either be called back at the number they’re calling from or provide another 10-digit number. This article references a template Callback flow Callbacks_Template_2026.


What This Workflow Does

  • Plays a message offering a callback option
  • Reads back the caller’s number (Caller ID) and lets them confirm it
  • Optionally collects a different 10-digit callback number
  • Submits the callback request via API and confirms success/failure to the caller
  • Uses Trackpoints to allow admins and agents easier reporting on IVR journey (NOTE: Trackpoints are built into the template, but are completely optional. For the purposes of this article, these will not be covered)

IVR Flow Architecture

High-Level Flow Layout
 

Initial Segment

  • CallbackMessage: Play node that informs the caller that they can get a callback.
     
  • Strip+1: Function node that strips the +1 from the callers CID when it is played back to the caller in the initial menu message of ConfirmNumber.
     
  • ConfirmNumber: Menu node that allows the caller to hear the number that they are calling from, and determine if they want to have a callback on that number or select a different number.
     

Strip+1 Function Node (How It Works)

This function removes the leading +1 from the caller ID so it can be read back as a clean 10-digit number. The template uses a call variable (commonly named something like updatedcid) to store the result.

  • The first box uses a call variable named updatecid which stores the value we want here (in this case, the callers number with the +1 stripped from the front of it). This needs to be created prior when building a new flow, but for the purposes of this template it is already built so no other action is required. This is important as it will be used in the next portion of the flow.
     
  • The substr is the actual function that we want to happen, in this case removing the +1 so that it can be read off on the ConfirmNumber menu.
     
  • The second box with call:cid in it means the function is pulling the data from the callers number (cid being short for caller ID)
     
  • The last two boxes indicates what digits on that callers number is being removed/kept. Ozonetel's system uses zero-based indexing, which means it counts the digits starting at 0 

Example: If the caller ID is +17778889999, stripping indexes 0 and 1 removes “+1”, leaving 7778889999.

 

ConfirmNumber Menu (How it uses the Strip+1 Function)

Here is the configuration for the ConfirmNumber menu. We are specifically looking at how we can get the system to tell the caller what number the callback will be left on.

  • After inserting the initial text, we add another text message, but instead of putting just text, we will use the built-in function so that we can use the call variable updatedcid from the Functions 
     
  • The Digits-{EG: one two three four} ensures that the caller id is read off correctly as individual numbers. (7778889999 will be read off as Seven, seven, seven,  eight, eight, eight, nine, nine, nine, nine instead of seven hundred seventy-seven, eight hundred eighty-eight, nine thousand nine hundred ninety-nine)
     

Callback Number Selection
 

  • This portion of the flow determines what number the callback option is left on. Once in the ConfirmNumber Menu node, the caller will be read back their caller ID (the caller's own number).
     
  • If this is NOT the number the user wants the callback on, they can press 1, which routes to the ChangeNumber Menu node which will allow them to enter in a 10 digit number.
     
  • The call then is routed to the ValidateNumber Menu node which reads back the 10 digit number inputted from the previous menu. The caller may then press 1 to confirm the number is correct, or press 2 to return back to the ChangeNumber menu and try again.
     
  • Pressing 1 on the ValidateNumber menu (indicating the 10 digit number entered is correct and where the callback should go) then sends to the callback_changenumber API, which sends the data (the 10 digit number entered) to the Outbound Campaign so that it can be queued for a callback. 
     
  • The APICallStatus Condition Node checks the JSON output to confirm if it was successful (looks for the SUCCESS in the API response). If it succeeds (IFTrue routing on condition) it will go to the Success Play node to let the call know the callback has been placed before disconnecting the call. If the API is unable to place the callback (IFFalse routing on condition), it will play a different message before looping back to the ChangeNumber menu to the give the caller another chance to leave a callback.
     
  • If the caller presses 2 on the ValidateNumber Menu it loops back to the ChangeNumber menu so that they can start over. 
     

Procedure

Step 1: Create Variable and connect Flows

Before we can use the callback, we need to prep the originating flow so that it can pass on the correct variable and information to the Callbacks flow.

  • Open up the IVR flow which will eventually send to the callbacks flow.
  • Click on the ivr-start- node. This will open up a menu pane on the right side.
  • Under the Variable section, scroll down and in the .add new variable text box, add a variable name and then click the ADD NEW PARAMETER button. For this example, we will use assignedskill as the variable. This variable will allow the system to know which skill to send to for callbacks once fully configured. Click Update Tag in the top right once complete.

Note! 

After adding a variable into the flow, you MUST save, exit, then reopen the flow to be able to use the variable in the nodes.

 
  • Next, attach a Functions node to the Transfer node that you want to send for callback. In this example, we are doing this for a Skill called General. Attached it to the failed section of the Transfer Node. 
  • Double click on the Functions node and on the drop down select assign
  • In the first dropdown, select the variable we created earlier. This option will be call:assignedskill on the dropdown.
  • In the textbox, input the name of the skill. In this example, it is General. Select Update Tag
     
  • Next, grab a Redirect node and connect it to the Functions node.
  • Double click on the Redirect node. We will now need to fill in the URL and Parameters/Values.
  • The URL will be: http://10.244.11.225/DDParser/v1/index.php?tag_id=start
  • Populate Parameter by clicking the + sign under Value. You will need to add three Parameters.
  • Populate the following parameters: flow_id, assignedskill, and campaign_id
  • For the flow_id Value, this will be the Flow Id of your Callback IVR flow. 
  • For the assignedskill Value, click the checkmark box and select call:assignedskill
  • For the campaign_id Value, click the checkmark box and select call:campaign_id
  • Once all fields have been filled out, click Update Tag in the top right, then click save. 
  • We can now start configuring the callbacks IVR flow. 

Step 2: Copy the Template

  • Navigate to AdminConfigurationIVR Flows.
  • Locate the callback template flow (for example, Callbacks_Template_2026).
  • Click the vertical dots () and select Save Copy.
  • Rename this copy and click Design to edit.

Step 3: Configure Required API Fields

The template includes the API configuration but must be populated with the target account’s required values.

  • Open the copied IVR flow in the IVR designer.
  • Click an empty area on the canvas to open flow-level properties.
  • In the top bar, select HTTP.
  • Use the top-right dropdown to select the API profile (for example, Callback).

Required Data Fields (Auto-Populated)

  • phoneNumber: should already be set to call:cid
  • skill: should already be set to call:assignedskill

If these do not match in the copied flow, update them before saving.

Step 3: Configure API Response Fields (JSON Params)

Under the API Response section, add the required JSON field names exactly as expected by the template. Add each key by entering it into Json field names and clicking the + button. For this flow, we only need the status JSON response (this template has this auto-populated)

Save the flow after completing all steps.

Step 4: Configure Outbound Campaign

The final step involves configuring the Outbound campaign. This receives the Callbacks requests and distributes them. 

  • In the CX Hub portal, go to Campaigns → Outbound → Create Campaign 
  • Under the Basic Settings section, populate the following fields: Campaign Name, Campaign Type, DID, Dial Method
  • Campaign Type should be set to Progressive
  • Dial Method should be set to Skillwise
  • Under the General Information section, populate the following fields: 
  1. Dispositions: Select all desired Dispositions
  2. Wrapup Time (In Seconds): Set to 30 Seconds
  3. Number of Tries: Set to 1 (click the Checkmark box for Advanced rules to set up additional custom retry rules)
  4. Daily Outbound Limit Per Number: Set to 1 (This determines how many times per day it attempts to callback)
  5. Run Time: Set to 00:00
  6. End Time Set to 23:59:59
  7. Priority: Set to 1
  8. Dial Interval: Set to 5 (this determines how many seconds between calls) 
  9. Customer Ring Time: Set to 60 
  10. Mapping Name: See below
  11. Upload File: See below

Setting up Mapping Name and Upload Field

To set up mapping name, click Download Sample.

  • Open up the file. It will have several rows.
  • Remove all fields except PhoneNumber and Skill. Save the file and close it.
  • Under the Mapping Name, click the dropdown and enter in a Map Name, and the Mapping file modified earlier. If done correctly, the system will generate a Success message.
  • Under the Mapping Name field, click the dropdown again and select the new Map that was created. 
  • If done correctly, a new section will appear called Mapping Columns and will show the two rows that we created earlier. 
  • Go over to the Upload File and click the Download Sample Button and open the generated sheet.
  • This sheet will show example data and is what we will need to upload into the Upload File section. 
  • Delete the information in row 2, and delete any other data that was not selected from the Mapping Name Mapping Columns. In this case, we want to keep column A (PhoneNumber) and column D (Skill) data, and delete everything else. Save the sheet and close it. 

    NOTE: Since this is sample data, the number in Column A should be set to a DID that the team can recognize for the initial test that will occur later (example: cell phone number). This will be deleted after the creation of Campaign.
  • Upload the file and then click Next in the bottom right.
  • Under the Skills section, add all Skills that callbacks will be sent to. Once all Skills have been added, click Next in the bottom right
  • Under the Script section, click Save in the bottom right. 
  • Now that it is has been created, we need to go into the Campaign and clear out the test data we created in the Upload File section. 
  • Click on the newly created Callbacks Outbound Campaign and switch to the Data tab. The sample data we uploaded will be under the List of Calls section
  • To clear the data, go back to Campaigns → Outbound Campaign → click the vertical dots () → select Force Complete. The system may generate an error message while doing this. In order to proceed and see the new change, refresh the Browser.
  • click the vertical dots () again and select Reset Campaign

 

 

  • In the Reset Campaign window, add a Skill and then click Preview Data. Since we are just trying to clear out the sample data, the Skill selected is not important.
  • Click Delete in the bottom left corner, then click on Cancel in the bottom right to exit.
  • The Outbound Campaign is now ready to go.

    Note!

    The Callbacks Outbound Campaign is off by default. The campaign will automatically start when callbacks are queued, and return to an off state when completed. 

     


 


Need More Help?

If you need additional assistance, please contact Crexendo Support at 855-211-2255 or email us at support@crexendo.com — our team is happy to help!