Unique Invitation to each participant

Hi there,

We want to conduct a survey in which the participants will be invited by postal letter. We will generate each letter individually, including an unique invitation code (different for each person).

Is it possible to implement a way of checking if the password provided by the user belongs to an object (defined within a “derived” or in an asset), and if yes, continue with the survey? Even better, is it possible to make sure that an used password is removed from the list (to avoid multiple people answering with the same password without the need of post-processing the dataset)? I checked the Tutorial 56 - Perl Tricks, but I think this does not directly work.

Thanks in advance!

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

  1. 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

  2. Think where to send people when they finish - you can either put a thank you message in the passbacks or a web address.

  3. 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).