IVR Programming Techniques

  • Must use question types only suitable for IVR interviewing
  • Every data question must have a label
  • Questions that can be answered by pushing the 12 buttons on a standard touch-tone phone are allowed
    • 0-9, #, * buttons
  • All post question checks must be inside of the IVRBLOCK/ENDIVRBLOCK statements
    • Incrementing Quotas
    • End Dates
    • Timers
    • Any other “shell” bottom stuff
  • Allowable question types:
    • FIELD questions with the responses limited to 0-9
    • NUMERIC questions without decimal places
    • DISPLAY questions
      • Used to play a recording but cannot be disrupted
      • They are best used for intros
      • Used to ensure that a question is read in its entirety
      • Can be used to split a question into 2 parts
        • Display for the question itself so no disruption
        • FIELD/NUMERIC for the answer which once answered will be disrupted
      • Subtype NOWAIT is required (!DISPLAY, NOWAIT)
        • Will play a file named the question label and then will automatically continue onto the next question
    • VARIABLE, NUMERIC_ONLY (This is the only allowed subtype)
    • Any other VARIABLE subtypes and TEXT questions are NOT allowed in the IVRBLOCK and will produce a compile error
      • Open-ended questions can be captured as a recording using a SOUND,RECORD command after playing the instructions
      • The respondent can then give the response and press # to continue
  • Studytype= is required as a study header option
    • IVRINBOUND – Can call IN only
    • IVROUTBOUND – Dials OUT only
    • BLENDED – Accepts incoming calls and can send to an agent
  • The {!IVR_BLOCK}/{!END_IVR_BLOCK} statement is required
  • The {!IVR_RESPONSE} is used to setup the parameters (See below for more explanation)
    • This block can be set up as many times as needed
  • Blended and Inbound IVR studies use 2 required Hidden NUMERIC questions
    • ANI which will be filled in with the number that the respondent is calling from
    • DNIS which will be filled in with the number that the respondent called
  • Blended IVR studies use three PHONE statements.
    • SAVE_HELD_IN: This function puts the respondent from the inbound IVR on hold for an Agent to pick up.
    • FREE_HELD_IN: This function releases the respondent from the inbound IVR Queue, allowing you to move the respondent back into the IVR or clear them from the Agent Queue.
    • GET_HELD_IN: Checks for a waiting call and connects that call to an interviewer, the status returned is 800
  • Checking if Agents are available for Blended Studies
    • You can use a new XF function to get the number of interviewers that are logged into the study. XF(Survent_Count(CATI_INTERVIEWERS): This allows you to do logic for inbound blended studies and route inbound calls based on if you have agents available or not.
  • The QFF must be named <studycode>.qff or <studycode>_ivr.qff (Console)
  • Inbound IVR studies use an empty fone file
    • You can also use a PHONE,GET_SPECIFIC statement to get a number
  • Outbound and Blended IVR studies use real sample

IVR_Response Options

The IVR_RESPONSE block is intended to simplify the Survent coding that is needed to field an IVR survey. This is to augment the coding of FIELD and NUMERIC questions in the survey, substantially reducing the extra coding needed for each question.

IVR_RESPONSE is a run time option meaning that if the block is skipped during execution of the interview it will not go into effect. This aligns with how all the HTML commands work in web studies.

Time_Out

The TIME_OUT option defines what the timeout is and what to do when it is encountered. TIME_OUT includes the following five sub-options:

  1. length – Length of timeout in seconds (values can be 2-600) [Default: 120]
    1. The timer starts when the outbound sound file finishes
  2. repeat – Number of times to ask the question (values are 1 to 99) [Default: 3]
    1. Set it to 1 to only ask the question once
  3. result – What to finally do if the number of repeated items is met. [Default: TERM]
    1. Values can be one of the codes from the response list or keywords TERM or LAST
      1. TERM causes the program to skip to the terminate block
      2. LAST chooses the last response on a FIELD question or the last alternate answer on a NUMERIC question
        1. This allows users to have different codes on the list (9 on some 99 on others without having to specify again this command)
  4. result_message – Name of sound file to play before the result is executed [No Default]
  5. error_message – Name of a sound file to play. [No Default]

Pound_Sign_Only

The POUND_SIGN_ONLY option defines what to do when the respondent just hits the pound sign with no data before it. POUND_SIGN_ONLY includes the following 4 sub-options:

  1. repeat – Number of times to ask the question (values are 1 to 99) [Default: 3]
    1. Set it to 1 to only ask the question once
  2. result – What to finally do if the number of repeated items is met. [Default: TERM]
    1. Values can be one of the codes from the response list or keywords TERM or LAST
      1. TERM causes program to skip to the terminate block
      2. LAST chooses the last response on a FIELD question or the last alternate answer on a NUMERIC question
        1. This allows users to have different codes on the list (9 on some 99 on others without having to specify again this command)
  3. result_message – Name of sound file to play before the result is executed [No Default]
  4. error_message – Name of a sound file to play before repeat [No Default]
    1. Does not play if hit maximum number of repeats

Invalid_Entry

The INVALID_ENTRY option defines what to do when an invalid entry is received. INVALID_ENTRY includes the following 4 sub-options:

  1. repeat – Number of times to ask the question (values are 1 to 99) [Default: 3]
    1. Set it to 1 to only ask the question once.
  2. result – What to finally do if the number of repeated items is met. [Default: TERM]
    1. Values can be one of the codes from the response list or keywords TERM or LAST
      1. TERM causes program to skip to the terminate block
      2. LAST chooses the last response on a FIELD question or the last alternate answer on a NUMERIC question
        1. This allows users to have different codes on the list (9 on some 99 on others without having to specify again this command)
  3. result_message – Name of sound file to play before the result is executed [No Default]
  4. error_message – Name of a sound file to play [No Default]

Allow_Interrupt

The ALLOW_INTERRUPT option defines whether data entry is accepted while the sound file is playing. ALLOW_INTERRUPT has the following three options – [Default: No]

  1. Yes – Allows a respondent to enter data while out going sound file is playing
  2. No – Does not allow date entry until the out going sound file has finished playing
  3. After_First – This option allows interrupt on repeat of the question.

Star

The STAR option defines what to do when the Star key is entered. STAR has the following two options:

  1. error_message – Name of another sound file to play. [No Default]
  2. result– What to do when the star is entered [Default: REPEAT_QUESTION]
    1. Keywords are:
      1. REPEAT_QUESTION – Replays the question
      2. TERMINATE – Skips to the terminate block
      3. BACKUP – Goes back one question
      4. LAST – Chooses the last response on a FIELD question or the last alternate answer on a NUMERIC question
        1. Can also be one of the valid items on the list

Play_Beep_Before_Record

The PLAY_BEEP_BEFORE_RECORD option defines whether or not to play a beep before the system starts to record on a SOUND,RECORD statement. PLAY_BEEP_BEFORE_RECORD has the following two options: [Default: YES]

  1. Yes – Will play a beep before recording starts
  2. No – Does not play a beep before recording starts

Hangup

The Hangup option defines what to do on hangup and is required in every ivr_response block. [No Default – REQUIRED TO BE SET]

  1. TERM – Proceed to Terminate block.
  2. GOTO(label) – Goto the specified label and execute the code.

Auto_Accept_Unique_Number

The Auto_Accept_Unique_Number allows you to use a net promoter type question. For example if you have a question that you want a scale from 0 to 10 but allow the system to quickly move on and add the 0 to make the data fill both data locations. If you press 1 it will wait for a second for an additional number because you have 10 as a response.  If you entered 0 or 2-9 it would move on immediately.

Recording (Open End Settings)

This sets the options for how long a recording can be and how long it will wait for silence before moving on.

  1. Maximum_Time – This is the maximum length of the recording before it moves on.
  2. Silence_Timeout – Amount of silence before moving on.

Example:

{!IVR_RESPONSE=
HANGUP=TERM,
TIME_OUT=(length=10, repeat=2, result=term error_message=areyouthere result_message=goodbye),
POUND_SIGN_ONLY=(repeat=5 result=NA error_message=tryagain),
INVALID_ENTRY=(repeat=3 result=term error_message=invalidresponse),
ALLOW_INTERRUPT=no,
STAR=(result=repeat_question, message=ratingscale),
Auto_Accept_Unique_Number=(Net_Promoter_Score,Include_Zero),
Play_Beep_Before_Record=Yes,
Recording= (Maximum_Time=60, Silence_Timeout=5)
 }
  • Above says if return was after 10 seconds, play the sound file “areyouthere” and then repeat the original question, and if again returns after 10 seconds, play the sound file goodbye and then go to the terminate block.
  • If return # is before timeout, play the sound file “tryagain” and then repeat the question. Ask it up to 5 times total and if still have no answer, take NA as the code for this question.
  • If they enter a value that does not exist on the list or within the range, then play the sound file “invalidresponse”.  Do this 3 times and if they get an error 3 times in a row, go to the terminate block.
  • Do not let them enter any data while the sound file for the question is playing.
  • If they enter a *, then play the sound file rating scale to remind them what the scale is, and then repeat the question.
  • On field question 0-10 use net promoter and add 0 to single digit punches.
  • If the respondent hangs up the phone it will goto terminate block.

Error checking:

  • If result=term is used, there MUST be a terminate block.
  • If result=code is used, then the compiler should check that all subsequent questions that need a response and have that as a valid response otherwise error.

IVR Testing

Inbound IVR Studies

  • Dial the DID number to check that you can enter the survey
  • Go through the survey several times
    • Ensure that skip patterns are working correctly
    • Ensure that Terminate points are terminating properly
    • Ensure that Recordings are worded correctly and the sound is good
  • Check the data for accuracy
  • Check that all quotas are incrementing properly
  • Check the fone file for accurate statuses and number of completes
  • Do your normal quality control checks before going live

Outbound IVR Studies

  • Switch the mode to Inbound
  • Perform all of the Inbound IVR study checks above
  • When finished, switch the mode back to Outbound
  • Dial yourself to ensure that the dialer is working properly

Multiple Languages

IVR Studies can be programmed in multiple languages.

  • We recommend that each language be their own study.
  • All recording files will need to be translated for each language.
  • For one study spec that contains multiple languages, a sub-directory for each language is necessary to upload the recordings into.
    • For Example: If you have a Spanish version using SP as the language code, then there should be a <study>/sp directory to upload the Spanish translated recordings to.
  • For separate study codes per each language, then the recordings are uploaded as usual.