There are three basic types of input: menus, yes/no questions, and collections. Menus and yes/no questions are self-explanatory. Collections are made up of responses that vary in length (credit card number, zip code, PIN, confirmation number, etc.). Instead of having the caller either choose a menu option provided by the IVR or give a yes/no response, the IVR is collecting a piece of information from the caller. The key for having a successful collection is in the grammar. If the IVR is capturing a 4 digit PIN, the grammar only recognizes 4 digits. If the IVR is capturing a 16 digit credit card number, the grammar only recognizes 16 digits. Building rules in the grammar prevents the code from having to make sure what was recognized is the proper length, and reprompting if not. Instead, if the utterance isn't the correct length, it's rejected in-state and a retry prompt is played.

It's sometimes helpful to include the length of whatever the IVR is trying to collect in the prompt, especially if the piece of information isn't familiar to the caller. Let's say you're asking for a confirmation number. Asking the caller for the "9 character confirmation number" may help her locate it.

Having a library of reusable components (get SSN, get zip code, etc.) is also helpful. Prompts may have to be slightly tweaked depending on the application, but the states aren't built from scratch over and over again.