Desktop User Guides > Professional > Interview scripting > Sample management > Sample management facilities > Standard scripts > Scripts in the CATI folder > Multi-number dialing
 
Multi-number dialing
Multi-number dialing is used when more than one number should be tried for a respondent, for example, their home phone, mobile phone, work phone, and any other numbers. Each number is tried in turn, based on rules that are in the sample management script.
Multi-number dialing is also known as horizontal dialing.
Setting up multi-number dialing: Additional fields required
Multi-number dialing requires multiple copies of the fields that are used to contact a participant.
Extend the Participants table to contain additional sets of the relevant fields: the default fields are PhoneNumber, Queue, CallOutcome, and TryCount.
Put the first phone number to dial in the PhoneNumber field and in the PhoneNumber1 field. Put the other numbers in PhoneNumber2, PhoneNumber3, and so on. Additional fields are required for Queue, CallOutcome, and TryCount, resulting in:
PhoneNumber, PhoneNumber1, PhoneNumber2, PhoneNumber3, and so on
Queue, Queue1, Queue2, Queue3, and so on
CallOutcome, CallOutcome1, CallOutcome2, CallOutcome3, and so on
TryCount, TryCount1, TryCount2, TryCount3, and so on.
At least PhoneNumber and Queue must be replicated. In the sample management script, set HorizontalSampleFields to the list of fields that have been replicated for rotation.
Multi-number dialing also requires a field called CurrentHDialPosition: it holds the number for the rotation set that is currently in use.
Enabling multi-number dialing
After you have created and initialized the additional fields, enable the feature by setting ENABLE_HORIZONTAL_DIAL in multimode1_sample.mrs to True.
How multi-number dialing works
The ReturnSampleRec function of the script sets the base fields (without a number appended) as normal. It then copies the main set of fields into the associated rotation set: that is, on the first call, it copies the PhoneNumber, Queue, CallOutcome, and TryCount to the fields marked with 1 (PhoneNumber1, Queue1, CallOutcome1, TryCount1). Then it rotates the next set of fields into the main fields: that is, it copies PhoneNumber2 to PhoneNumber, and so on. This means that the record is ready to dial the next number when it is retrieved again.
When the record will be retrieved again can be specified by the initial settings of Queue or by updating the script. For example, if Queue2 and so on are initialized as “RECALL”, when the rotation occurs, the record continues to be in the RECALL queue and the RecallTime as set by the initial CallOutcome is used, resulting in the record being called again using the standard rules. If Queue2 is initialized as “FRESH”, it is likely that the record will be retrieved again immediately, causing all the numbers for a respondent to be called quickly in succession (unless you have set the option to prioritize recalls over fresh).
You could also add other fields to the set (for example, SortId, SortId2, SortId3, and so on) to support randomization when retrieving the number for the seconds and subsequent phone numbers.
The rules for when numbers are rotated are in the script and details for the default script are handled in the next section. Generally, any attempt that results in the record going into the RECALL queue causes rotation. Attempts that result in a contact do not cause rotation. When an appointment has been set, there is no more rotation.
Multi-number dialing implementation details
The dialing process is not affected by the multi-number dialing feature. The dialing process always uses the standard fields. In this example, rotation has occurred once and the standard fields match rotation set 2.
Standard phone
Number 1
Number 2
Number 3
PhoneNumber
Queue
CallOutcome
PhonNumber1
Queue1
CallOutcome1
PhoneNumber2
Queue2
CallOutcome2
PhoneNumber3
Queue3
CallOutcome3
456
FRESH
 
123
RECALL
NoAnswer
456
FRESH
 
789
FRESH
 
When the record is returned the standard fields are updated. The new HorizontalDial function is called. It checks that all requirements are met and exits with Error logs if not met. It then writes the history record so it will be written based on the standard fields that were used for the attempt.
Standard phone
Number 1
Number 2
Number 3
PhoneNumber
Queue
CallOutcome
PhonNumber1
Queue1
CallOutcome1
PhoneNumber2
Queue2
CallOutcome2
PhoneNumber3
Queue3
CallOutcome3
456
RECALL
NoAnswer
123
RECALL
NoAnswer
456
FRESH
 
789
FRESH
 
HorizontalDial uses the CopyHDialFields function to copy the standard fields back to their rotation set. The CurrentHDialPosition field tracks where to copy the standard fields.
Standard phone
Number 1
Number 2
Number 3
PhoneNumber
Queue
CallOutcome
PhonNumber1
Queue1
CallOutcome1
PhoneNumber2
Queue2
CallOutcome2
PhoneNumber3
Queue3
CallOutcome3
456
RECALL
NoAnswer
123
RECALL
NoAnswer
456
RECALL
NoAnswer
789
FRESH
 
Then HorizontalDial checks if rotation should be performed using the HDialRotate function. If necessary, it uses FindNextHDialSet to find the next valid rotation set (which could be rotation set 1 if the last set has been used) and then rotates the next rotation set is rotated into the standard fields using CopyHDialFields.
Standard Phone
No 1
No 2
No 3
PhoneNumber
Queue
CallOutcome
PhonNumber1
Queue1
CallOutcome1
PhoneNumber2
Queue2
CallOutcome2
PhoneNumber3
Queue3
CallOutcome3
789
FRESH
 
123
RECALL
NoAnswer
456
RECALL
NoAnswer
789
FRESH
 
HorizontalDial
Sets a new InterviewProperty WriteHistory to False to tell the system to not write the history record as it usually does. HorizontalDial has written the history record before rotation.
CopyHDialFields
Copies standard fields to and from rotation sets. It handles rotation set fields that are empty and require initialization.
HDialRotate
Contains the rules for when rotation occurs.
FindNextHDialSet
Searches the sample fields for the next valid rotation set. Valid rotation sets must:
have a PhoneNumber field that is initialized with a value
be in a queue that is valid for rotation. For example, the CHECK_NUMBER and UNUSABLE queues are not associated with valid rotation sets.
The search returns to 1 when the QueueN or PhoneNumberN field does not exist or when the PhoneNumberN field is empty. This supports a setup where some records have 5 valid phone numbers and some have only 3.
FindMatchingHDialSet and HorizontalDialForInboundCall
These functions implement rotation for inbound calls.
See also
Scripts in the CATI folder