Yes, and what you suggest is a common technique, in this case you are acting like your own panel, rather than using anonymous links. Furthermore everything you want to do is possiblE including preventing re-entrant attempts. Here is a suggested workflow
1. Firstly create a master list of ID’s - don’t start at 1 and go incrementally this is too easy to guess.
Instead generate a hash from personal information in one cell - usually email address or name and postal address. In excel this is something like this
=TEXTJOIN(“”,TRUE,DEC2HEX(MOD(CODE(MID(A7,ROW(INDIRECT(“1:”&LEN(A7))),1))*37+91,256),2))
A hash like this means we can verify that the id came from us - but it’s not possible to reverse and get the personal information out.
This generates an id like E5F441FBEE63881FF4
Be sure to lock off and version this master list.
2. Create a Panel invitation - call it ‘mailouts’
Here you’ll
-
copy the link which will end in something like
…?extid=example_id
You’ll need to generate one link per postal invitation in the above example it would be …?extid=E5F441FBEE63881FF4
-
Think where to send people when they finish - you can either put a thank you message in the passbacks or a web address.
-
Ensure ‘allow reentrant ids’ is not checked. This will prevent multiple completions from the same id
**FIRST PROBLEM - the surveyengine links are too long
The surveyengine generated links are too long for a human to enter reliably. So consider using bitly or tinyurl
Copy the main invitation link but not the extid=E5F441FBEE63881FF4 bit
then you just add the ?extid=E5F441FBEE63881FF4 when generating the links
This is now enough to get started - but this will require post processing to check the id’s are valid.
3. Validating invitation ids
There are two ways - a loser flexible way and an a brittle but ironclad way.
The flexible way
make sure your id’s have a recognisable structure or hidden pattern like ‘mysurvey_12345’ then we put a simple check on the id using a pattern matcher.
We suggest firstly marking invalid ids in the data as dubious then later deciding whether to screen them out.
say the pattern is that all id’s start with mysurvey_ and have a 777 in the middle
then you would create a derived value ‘valid’ with the following expresison
$EXTID =~/^mysurvey_.*777.*$/
This returns true if the id starts with ‘mysurvey_’ (that’s the ^ bit) and has a 777 anywhere in it.
This is preferable as it allows you to create new id’s (with this structure) without changing the survey
the ironclad (but inflexible) way
create a derived value valled ‘valid_ids’
paste all your id’s in - = make sure to begin and end with a quote charater
e.g.
”111
222
333”
Then create an expression to test that valid_id’s have the id in question and are only surrounded by whitespace
$valid_ids =~/(?:^|\s)$id(?:\s|$)/
Looks complicated but is easy to understand This ‘says’:
valid_id’s must have some sequence in it that matches $id and may be surrounded by whitespace (‘\s’) the beginning of the string (‘^’) or the end of the string (‘$’).
This is not strictly necessary - but if you have a mix of small id sets it prevents false matches of (say) ‘abc’ with (xxxxabczzzzzz).