I have also developed this functionality. I created a custom field on the External Contact called LastSurvey. In the Survey Invite Flow, I'm checking that field and seeing if it is within the defined time range. Like Colin, we are retrieving the date limit from a data table that the customer is able to define.

In the survey flow, we are getting the external contact information, checking the survey frequency limit (the date limit as I mentioned above), checking whether or not the customer has the Opt Out flag on their external contact, then checking the Custom LastSurvey field. I'm not using any custom data actions, just the Fetch External Contact, and Put External Contact APIs.
Of course, this requires you to be using external contacts and agents to collect the email of the customers and save the external contact before they hang up the call.
------------------------------
Peter Stoltenberg
Avtex Solutions, LLC
------------------------------