In this walkthrough we will make outbound calls using CALLMaster Out Dial functionality to play a reminder message with the date and time of the appointment as imported for each number and give caller the options to hear the message again or to transfer to agent to reschedule.
This Sample Application is available for download. Use link at the end of this walkthrough to download and install sample application.
Walkthrough Overview
In this walkthrough, you will:
During this walkthrough, you will learn to do the following:
Prerequisites and Assumptions
Set System Parameters
As we are using Out Dial, we need to make sure that the System Parameters
- Local Dialing Prefix, Long Distance Dialing Prefix, System's Area Code and
System's Phone Number have the correct values for your environment. We
also need to set the time that CALLMaster can 'Start Calling at' and needs to
'Stop Calling at'.
As we want CALLMaster to continuously attempt outbound
calls and reduce the sleep default time from 30 seconds to 3 seconds, we will
add flags 'OCNV' and 'OSST3 in the System Flags field.
As we want to leave a message if call receives an
answering machine connect, we need to adjust the Parameter Record Max Silence
(see Out Dial -
Human/Answering Machine/Fax Detection for details).
Open the CALLMaster Manager. Click on Parameters, then select System. Double click on each of the parameters to change their values as needed. See System Parameters for details.
For this walkthrough we will assume the following values:
Set Dialogic Parameters
As we are using Out Dial and want to detect Human, Answering Machine and Fax connect, we need to adjust the several Dialogic Parameters (see Out Dial - Human/Answering Machine/Fax Detection for details).
Open the CALLMaster Manager. Click on Parameters, then select Dialogic. Double click on each of the parameters to change their values as needed.
For this walkthrough we will assume the following values:
Verify Attendant Parameters.
To transfer calls for appointment reschedule option, you must know the requirements of your phone lines or PBX. In particular, you need to know the transfer string to initiate a transfer, and the pull back strings to drop a call in case of busy or no answer. Since the caller can enter a variable length extension ID, you need to set the Maximum Extension Length parameter.
Open the CALLMaster Manager. Click on Parameters, then select Attendant. Confirm values for all the parameters on the list. Double click on the parameter to change the value if required. For this walkthrough, we will assume the values below. Save and close the Attendant Parameters window after making any changes.
Attendant Parameters | ||||
Allow Any Transfer | Drop 'Busy' Call | Drop 'No Answer' Call | Max Extension Length | Transfer String |
No | &, | &, | 4 | &, |
Set-up Attendant Records
As one of the options offered to the caller is to reschedule appointment, we need to setup an Attendant record to transfer to an agent . We will create an Attendant record set the Time Of Day to All Day, and the Type of Transfer to Transfer.
Since the Type of Transfer is set to Transfer, the Failed Transfer Action fields do not apply. If you set the Type of Transfer to Supervised, requiring CALLMaster to monitor call transfer status, then you must set the Failed Transfer Action fields as desired.
See Managing Attendant for details.
Open the CALLMaster Manager. Click on Manage, then select Attendant. Let's add 4 records in this walkthrough as follows:
Attendant Records | ||||
Attendant ID | Time of Day | Type of Transfer | Number to Dial | Mailbox |
1 | All Day | Transfer | 9,1,2125551111 |
Create Audiotex Records and Associated Scripts
As all calls will be starting in Audiotex mode in this walkthrough, the Audiotex Modules will determine the call flow.
In the Audiotex set-up, the called party will be played a message and given
the option to "Press 1 to hear message again or 2 to reschedule".
NOTE: the Audiotex application will only get processing control
if the call results in a connect (i.e. $CR = 10). If the call does not
result in a connect, then the call is reset based on the busy/no answer/no
confirm retry values from the OutcallSchedule record.
We will need to create several Audiotex records as shown below. The Label field provides a brief description of each module.
Audiotex Records | |||||||||||||||||
Module ID | Label | Write Label to Log File |
Module Action |
Next Module ID | Fail Module ID | Response Length |
Script File to Run (Must include full path name) (c:\Program Files\CALLMaster\Scripts\SampleApp-ApptRem\) |
Touch Tone Table | |||||||||
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | ||||||||
100 | Start call and Initialize values | Yes | Next Module | 110 | 9900 | 0 | InitializeVal.bas | ||||||||||
110 | Perform call analysis to determine if it is a human, answering machine, or fax response. | Yes | Next Module | 9999 | 9900 | 0 | OD-CallAnalysis.bas | ||||||||||
200 | Human Connect Detected. Play Audiotex Module recording. | Yes | Next Module | 210 | 9900 | 0 | |||||||||||
210 | Say Appointment Date & Time | Yes | Next Module | 220 | 9900 | 0 | SayApptDateTime.bas | ||||||||||
220 | Provide options "1 to hear message again or 2 to reschedule" and get caller response | Yes | Touch Tone Table | 9920 | 9900 | 1 | 200 | 230 | 290 | 290 | 290 | 290 | 290 | 290 | 290 | 290 | |
230 | Transfer to Attendant ID 1 | Yes | Attendant ID | 9999 | 9900 | ReturnAttID.bas | |||||||||||
290 | Invalid input. | Yes | Next Module | 291 | 9900 | 0 | CheckTryCount.bas | ||||||||||
291 | Try again. | Yes | Next Module | 220 | 9900 | 0 | |||||||||||
300 | Answering Machine Connect Detected. Play Audiotex Module recording. | Yes | Next Module | 9999 | 9999 | ||||||||||||
310 | Say Appointment Date & Time | Yes | Next Module | 9999 | 9900 | 0 | SayApptDateTime.bas | ||||||||||
400 | Fax/Other Connect Detected. End Call | Yes | Next Module | 9999 | 9999 | ||||||||||||
9900 | Call Failure Detected | Yes | Next Module | 9999 | 9999 | 0 | SetCallFailure.bas | ||||||||||
9910 | Caller Hang-up Detected | Yes | Next Module | 9999 | 9999 | 0 | SetCallerHangup.bas | ||||||||||
9920 | Maximum tries attempted | Yes | Next Module | 9999 | 9999 | 0 | SetMaxAttempts.bas | ||||||||||
9999 | Last Module - End call | Yes | Last Module |
Audiotex Module Description
Based on the Audiotex modules shown above, we will need several scripts. Let's make a Scripts sub-folder (Program Files\CALLMaster\Scripts\SampleApp-ApptRem folder) to save the custom scripts.
Create the scripts first. Open Notepad and create scripts following code examples below. Remember to save them as .bas type files in the Program Files\CALLMaster\Scripts\SampleApp-ApptRem folder.
CALLBasic Script - InitializeVal.bas | Copy to Clipboard |
Program '************************************************************************************************************** ' Script: InitializeVal.bas ' Function: This script is used to initialize values '************************************************************************************************************** strYes = "Yes" strNo = "No" intYes = 1 intNo = 0 strCallFailure = strNo strCallerHangup = strNo strMaxAttempts = strNo intOne = 1 ' Set retry counter and maximum attempts allowed intTryCount = 1 intMaxAttemptsAllowed = 3 strRescheduleAttID = "1" ' Get value of OutcallSchedule system variables and assign to local variables. ' If variable is an integer then convert to string local variable OD-intOutDialID = $outdialID IntegerToString OD-strOutDialID $outdialID OD-intResult = $cr IntegerToString OD-strResult $cr OD-intConnection = $contype IntegerToString OD-strConnection $outdialID OD-strDialPrefix = $dialprefix OD-strAreaCode = $areacode OD-strPhoneNum = $phonenum OD-dteApptDateTime = $oduserdatetime ' Set the module to return to if caller hangs up lctrap = 9910 ' Convert system variable $channel from integer to string to be used in concatenated print statement. IntegerToString strchannel $channel pline = "***** For channel=" & strchannel pline = pline & " Started Out Dial for ID=" & OD-strOutDialID pline = pline & " with OD-strDialPrefix=" & OD-strDialPrefix pline = pline & "; OD-strAreaCode=" & OD-strAreaCode pline = pline & "; OD-strPhoneNum=" & OD-strPhoneNum PrintNL pline EndProgram |
|
CALLBasic Script - OD-CallAnalysis.bas | Copy to Clipboard |
Program '****************************************************************************************************************** ' Script: OD-CallAnalysis.bas ' Function: This script checks the call connection type and returns based on the system variable $contype. '****************************************************************************************************************** ' Set variables for recording if Answering Machine Connection intPmt = 0 intRecTime = 60 strT = "0" strA = "" ' If Call Result Connected If OD-intResult = 10 Then ' Human Voice Connection If OD-intConnection < 4 Then Return 200 Else 'Answering machine Record recfileid intPmt intRecTime strA strT e d FileIDToName destname recfileid FileDelete destname Return 300 EndIf Else ' Call Result Fax or other Return 400 EndIf EndProgram |
CALLBasic Script - SayApptDateTime.bas | Copy to Clipboard |
Program '********************************************************************************************************************** ' Script: SayApptDateTime.bas ' Function: This script says the Date and Time. '********************************************************************************************************************** SayDate OD-dteApptDateTime SayTime OD-dteApptDateTime EndProgram |
CALLBasic Script - CheckTryCount.bas | Copy to Clipboard |
Program '******************************************************************************************************************* ' Script: CheckTryCount.bas ' Function: This script checks the number of invalid input attempts. '******************************************************************************************************************* ' If the caller has reached the maximum attempts allowed then the call is routed to module 9920. ' If not then they are returned back to Next Module ID. If intTryCount > intMaxAttemptsAllowed Then Return 9920 Else intTryCount = intTryCount + 1 EndIf ' Convert system variable intTryCount from integer to string to be used in concatenated print statement. IntegerToString strTryCount intTryCount pline = "***** For channel=" & strchannel pline = pline & " TryCount = " pline = pline & strTryCount PrintNL pline EndProgram |
CALLBasic Script - ReturnAttID.bas | Copy to Clipboard |
Program '********************************************************************************************************************** ' Script: ReturnAttID.bas ' Function: This script uses the Return command with a variable. ' When used with an Audiotex Module Action 'Attendant ID', ' the caller will be forwarded to the Attendant whose value is in variable strRescheduleAttID. '*********************************************************************************************************************** Return strRescheduleAttID EndProgram |
CALLBasic Script - SetCallFailure.bas | Copy to Clipboard |
Program '**************************************************************************************************************** ' Script: SetCallFailure.bas ' Function: This script sets the strCallFailure variable to yes and prints information in the call log file. '**************************************************************************************************************** strCallFailure = strYes 'Print information to log file for reference and debugging pline = "***** For channel=" & strchannel pline = pline & "***** Call Failure. *****" PrintNL pline EndProgram |
CALLBasic Script - SetCallerHangup.bas | Copy to Clipboard |
Program '********************************************************************************************************************* ' Script: SetCallerHangup.bas ' Function: This script sets the strCallFailure variable to yes and prints information in the call log file. '********************************************************************************************************************* strCallerHangup = strYes 'Print information to log file for reference and debugging pline = "***** For channel=" & strchannel pline = pline & "***** Caller Hangup. *****" PrintNL pline EndProgram |
CALLBasic Script - SetMaxAttempts.bas | Copy to Clipboard |
Program '********************************************************************************************************************* ' Script: SetMaxAttempts.bas ' Function: This script sets the strMaxAttempts variable to yes and prints information in the call log file. '********************************************************************************************************************* strMaxAttempts = strYes 'Print information to log file for reference and debugging pline = "***** For channel=" & strchannel pline = pline & "***** Maximum Attempts reached to enter valid input *****" PrintNL pline EndProgram |
Now you can create the Audiotex modules and reference the scripts above. Open the CALLMaster Manager, click on Manage, then select Audiotex. Let's add the Audiotex records shown above.
Define IVR Application List Entry
We need to define the custom IVR in the IVR Application List and set it to Audiotex Start Module 100. Open CALLMaster Manager and select Manage | IVR Application List. Let's add a new record as follows:
IVR Application List | |
Audiotex Start Module | Application Name |
100 | Appointment Reminder w/ Reschedule Option Sample |
Set Ports
As a last step, we need set the port(s) to the new IVR Application entry created above. Make sure the Audiotex Start Module field (read only) correctly points to module 100.
Set the Port Greeting File IDs to the main greeting for all calls if you have recorded one. If you do not want a main greeting then set the Greeting File IDs to zero. Leave all other fields to the default values.
If you are working with a demo license or have only one line connected, then make sure the connected port is set as specified below. All other ports should be set to Application 'Disabled'.
Port Records | ||||
Port # | Application | Audiotex Start Module | Port Type Outbound |
Port Greeting File IDs (Morning, Afternoon, Evening, Closed, Holidays) |
1 | Appointment Reminder w/ Reschedule Option Sample | 100 | Yes | 0, 0, 0, 0, 0 |
2 | Appointment Reminder w/ Reschedule Option Sample | 100 | Yes | 0, 0, 0, 0, 0 |
3 | Appointment Reminder w/ Reschedule Option Sample | 100 | Yes | 0, 0, 0, 0, 0 |
4 | Appointment Reminder w/ Reschedule Option Sample | 100 | Yes | 0, 0, 0, 0, 0 |
Test the custom application
Save all your work.
Stop CALLMaster service.
Make Administrator Audiotex Recordings:
- Set Port 1 to Application Voice Mail.
- Start CALLMaster service.
- Make a call using Port 1.
- Log in as the Administrator using the Voice Mail Main Menu and make recordings for the Audiotex modules below.
Audiotex Module ID | Proposed Recording |
200 | Recording for Human Connection - e.g. Hi this is Dr. Joe's office calling to remind you of your appointment on... |
220 | Press 1 if you want to hear the message again or 2 to reschedule |
290 | Invalid option. |
291 | Please try again |
300 | Recording for Answering Machine Connection - e.g. Hi this is Dr. Joe's office calling to remind you of your appointment on... |
9900 | We are unable to process your call. Please contact the system administrator for further assistance. |
9920 | You have reached the maximum attempts allowed for a valid input. Please contact the system administrator for further assistance. |
Reset Port 1 to Application Audiotex. Set the Port Greeting File IDs to zeros.
Stop and Start CALLMaster service.
Make a phone call to test the application.
Tip: See Walkthrough: Change Application Without Restarting CALLMaster Service to set port to Voice Mail to make recording without stopping and restarting the CALLMaster service.
To download and install, see Sample Applications.