Представьте обычную внутреннюю рассылку. HR отправила персональные приглашения на опрос об удобстве рабочих процессов. Кто-то из отдела переслал свою ссылку в общий чат с подписью «вот она, заполняйте». Один коллега уже ответил по своему приглашению, второй открыл ту же ссылку следом. Что увидит второй человек: пустую анкету, чужой ответ, сообщение об ошибке? И главное, что вообще означает эта ссылка: «этому человеку можно отвечать», «это его ответ» или «этот человек может читать результаты»?

Путаница начинается с того, что в разговоре всё это называют одним словом: «доступ». На деле в LimeSurvey с персональными приглашениями есть три разных вопроса. Кто может открыть анкету. Можно ли ответить повторно и что тогда произойдёт с записью. И кто имеет право смотреть ответы и выгружать их. Токен отвечает только на первый вопрос и частично влияет на второй. Третий решается совсем другим механизмом. Разберём их по порядку.

Три права, которые легко принять за одно

Начнём с участника. В руководстве по таблице участников LimeSurvey описано, что в опрос можно импортировать контакты, сгенерировать для них токены приглашений и следить за участием. Токен здесь — это ключ к анкете закрытого опроса. Опрос в режиме closed-access требует подходящий токен, а значит, случайный посетитель без него анкету не заполнит.

Но ключ от двери не говорит ничего о том, что происходит в комнате. Он не определяет, будет ли ваш ответ связан с вашим именем в таблице. Он не решает, можно ли вам зайти второй раз. И уж тем более он не открывает вам панель результатов. Удобно держать в голове короткую схему:

  • Участник — запись в таблице участников: контакт, токен, отметка об участии.
  • Запись ответа — то, что хранится в результатах: ответы на вопросы, технические поля, и, в зависимости от режима, связь с участником.
  • Статистика и выгрузка — то, что видит человек с правами на опрос, а не участник по токену.

Последний пункт подтверждается и документацией по правам: в описании разрешений на опрос токен участника и административные права на опрос названы разными механизмами. Человек, получивший приглашение, не становится от этого читателем результатов. Обратное тоже верно: у администратора опроса может не быть токена, и без него в закрытую анкету он не попадёт как участник.

Что происходит с одним приглашением от первого клика до второго

Проследим судьбу приглашения Ивана. Ему приходит письмо с персональной ссылкой, внутри которой зашит его токен. В таблице участников есть строка с его контактом и этим токеном. Иван открывает ссылку, анкета показывается, он отвечает. Дальше всё зависит от двух настроек, которые описаны в разделе о настройках участников: анонимизации ответов и возможности повторных ответов.

Начнём с анонимизации. Параметр Anonymized responses определяет, сохраняется ли связь между ответом и данными из таблицы участников. По умолчанию опрос не анонимный: ответ привязан к участнику. Это значит, что в результатах рядом с ответами можно увидеть, чьё это приглашение, а сам Иван при необходимости может вернуться к своей анкете.

Возврат к анкете — тема отдельной настройки. Token-based persistence в неанонимном опросе позволяет продолжить заполнение по той же ссылке. Иван начал отвечать, отвлёкся на совещание, закрыл вкладку и открыл письмо снова. Система узнаёт его по токену и возвращает к тому, что он уже ввёл. Здесь токен работает как память: «этот человек уже начинал».

Теперь допустим, что Иван дошёл до конца и нажал «Отправить». Что будет, если он или кто-то с его ссылкой откроет её ещё раз? Вот тут вступает параметр Allow multiple responses или update responses. Он меняет смысл повторного перехода по ссылке. В зависимости от того, анонимен ли опрос и включена ли token-based persistence, система может создать новый ответ либо дать доступ к уже существующему. Это принципиальная разница, и её удобно разложить в таблице.

Что может означать повторное открытие ссылки (по логике настроек)
Вопрос к себеЕсли «да»Практическое следствие
Нужно, чтобы человек мог исправить свой ответ?Опрос неанонимный, нужна персистентность и режим обновленияПовторный переход ведёт к существующей записи
Допустимо, чтобы один участник дал несколько независимых ответов?Разрешены множественные ответыПоявляются новые записи; при подсчёте придётся решать, что считать «ответом человека»
Нужен ровно один ответ на приглашение?Повторное участие ограничено настройкамиВторой заход по той же ссылке не создаёт новую запись

Обратите внимание: ни в одной строке нет слова «защита от дублей» в абсолютном смысле. Ограничение повторного участия — это поведение конкретной ссылки с конкретным токеном. Оно не мешает человеку, у которого есть два разных приглашения на разные адреса, воспользоваться обоими. И оно ничего не знает о том, что один и тот же сотрудник мог получить приглашения в двух рассылках. Токен защищает от повтора по одному ключу, а не от повторного появления того же человека в таблице.

Что меняется, когда ссылку переслали

Вернёмся к чату из начала. Ссылка с токеном Ивана оказалась на виду у отдела. Что может случиться дальше, зависит от режима.

Самый простой случай: Иван уже ответил, опрос настроен так, что повторное участие ограничено. Тогда второй человек, открывший ссылку, не получит новую анкету. Для него это выглядит как сообщение о том, что токен использован, или как отказ в доступе. Но обратите внимание на тонкость: система отреагировала на токен, а не на человека. Она не знает, что на другом конце уже не Иван.

Случай посложнее: Иван ещё не отвечал, а его ссылку открыл коллега. Токен подходит, анкета открывается. Коллега заполняет её, и ответ записывается как ответ владельца приглашения. В неанонимном опросе он окажется рядом с именем Ивана. Иван при этом может получить сообщение, что его токен уже использован. Это не взлом и не ошибка системы: она сработала ровно так, как задумано. Токен подтверждает только одно: у предъявителя есть ссылка, выданная системой для этой записи участника.

Если включена token-based persistence, к этому добавляется ещё один эффект. Тот, кто открыл чужую ссылку, может продолжить чужой незавершённый ответ и увидеть уже введённое. Для опроса о настроении в команде это нежелательно, для опроса о выборе даты корпоратива — вполне терпимо. Вывод тут не технический, а организационный: насколько чувствительны ответы и чем грозит ситуация, когда ссылка попала не тому человеку.

Поэтому в тексте письма стоит прямо написать, что ссылка персональная и пересылать её не нужно. Это не защита, а договорённость, но она уменьшает вероятность описанных сценариев. Технически помогает и то, что у участника в таблице видно состояние: отвечал или нет. Если кто-то пожаловался, что его токен «уже использован», вы увидите отметку о завершении и сможете разобраться с конкретным человеком, а не гадать.

Открытая регистрация как незаметная вторая дверь

Отдельный нюанс связан с публичной регистрацией. По описанию в руководстве по участникам, если она разрешена, система может выдавать токены новым участникам. Для закрытого опроса это значит, что «закрытость» определяется не только списком, который вы импортировали. Если на странице опроса оставлена возможность зарегистрироваться самому, круг участников шире, чем таблица, подготовленная HR. Прежде чем рассылать персональные приглашения, проверьте, действительно ли вам нужна эта дверь. В опросе для заранее известного состава сотрудников она чаще всего лишняя.

Нужен сервер под эту задачу?

Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации Россия, США, Франция и Великобритания. Оплата картой РФ и по СБП.

АРЕНДОВАТЬ СЕРВЕР

Идентифицируемый опрос или анонимные результаты

Теперь главный развилочный вопрос. Допустим, вы хотите и персональные приглашения, и анонимные ответы. Это не абсурд: приглашения нужны, чтобы знать, кому напоминать и кто уже ответил, а анонимность нужна, чтобы люди писали честнее. Но здесь легко пообещать больше, чем реально даёт настройка.

Включённый параметр анонимизации разрывает штатную связь между участником и ответом. После этого в результатах нет прямого указания, чья именно это запись. При этом таблица участников по-прежнему показывает, кто завершил опрос. Получается два отдельных списка: «кто ответил» и «что ответили», которые система не склеивает. Это полезное свойство: напоминать можно только тем, кто не завершил, а читать ответы можно без имён.

Но разрыв связи на уровне системы не равен абсолютной анонимности. Документация прямо оговаривает, что свободный текст и внешние журналы нужно оценивать отдельно. На практике это означает несколько вещей:

  • Свободный текст. Если человек пишет «как руководитель отдела из двух человек, я считаю…», переключатель анонимности ему не поможет. Узнаваемость создаёт содержание, а не техническое поле.
  • Малые группы. Если в разрезе по подразделению отвечает три человека, анонимность на уровне записи превращается в формальность. Это вывод из логики статистики, а не из документации, но он важен при планировании отчётов.
  • Время и сетевые следы. Время заполнения, адреса и журналы веб-сервера или почтового сервиса могут сопоставляться с рассылкой. Если вы храните такие данные, то оценивать нужно и их.
  • Порядок ответов. Если вы одновременно видите, кто завершил опрос и в каком порядке приходили записи, при малой выборке связь можно угадать. Поэтому отметки времени и порядок лучше не публиковать вместе.

Теперь обратная сторона. Анонимизация лишает вас некоторых удобств. Если человек не сможет вернуться к своему ответу, то и исправить его он не сможет. Режим, где участник может обновлять свою запись, по своей сути требует, чтобы система помнила, какая запись чья. Нельзя одновременно сказать «мы не храним связь» и «система узнаёт вас, чтобы вернуть вам ваш ответ». Поэтому в брифе опроса стоит честно выбрать, что важнее. Идентифицируемый опрос удобен для обратной связи, уточнений, исправлений и контроля. Анонимный удобен там, где откровенность важнее возможности спросить автора.

Две короткие схемы выбора

Опрос удовлетворённости с последующими разговорами. Цель — найти людей, у которых проблема, и поговорить с ними. Здесь анонимность противоречит замыслу: вы собираетесь узнавать автора. Тогда нужен неанонимный опрос, и участников нужно заранее предупредить, что ответы связаны с их именами.

Опрос о климате в команде. Цель — получить честную картину. Тут анонимность поддерживает замысел. Включайте анонимизацию, избегайте обязательного свободного текста с личными подробностями и подумайте, с какой минимальной группой вы будете показывать срезы. Участникам стоит сказать, что именно хранится, а что нет, и не обещать больше, чем даёт система.

Если вы колеблетесь, значит, цель опроса сформулирована не до конца. Это нормально, но выбирать режим стоит после ответа на вопрос, а не до.

Кто читает результаты: исследователь и администратор

Остаётся третий слой — права на сами данные. Мы уже выяснили, что токен участника и административные права на опрос — разные механизмы. Теперь посмотрим, как из этого вытекает практическое распределение ролей.

В LimeSurvey, согласно документации, есть права для отдельного опроса помимо глобальных. Руководство приводит пример переводчика, у которого доступ только к назначенному опросу. Смысл примера шире: вы можете выдать человеку права на один опрос, не делая его администратором всей системы. Для нашей темы это значит, что у исследователя может быть доступ к ответам конкретного опроса, а у системного администратора — к серверу и учётным записям, но не обязательно к содержимому этого опроса. Какие конкретно разрешения есть в вашей версии и как они называются, нужно смотреть в интерфейсе: набор может отличаться.

Разберём типичную раскладку для опроса с именами:

Пример распределения ролей (условный, для проектирования)
РольЧто ей нужноЧего ей не нужно
ИсследовательЧитать и выгружать ответы, строить статистику по опросуГлобальные права на всю установку
Координатор рассылкиТаблица участников, напоминания, отметки об участииСодержимое ответов, если опрос анонимный
Администратор системыОбновления, учётные записи, работа сервераПостоянный доступ к выгрузкам конкретных опросов

Эта таблица — авторская схема проектирования, а не описание настроек по умолчанию. Но идея из неё прямо следует из того, что права на опрос отделены от токена. Раз можно ограничить человека одним опросом, можно и разделить обязанности: тот, кто рассылает приглашения, не обязан видеть ответы, а тот, кто анализирует ответы, не обязан иметь доступ к рассылке.

Отдельное внимание стоит уделить выгрузкам. Файл с ответами и именами живёт дальше, чем интерфейс: он оказывается в почте, в общей папке, в ноутбуке аналитика. Права внутри LimeSurvey такой файл не охраняют. Поэтому в неанонимном опросе имеет смысл заранее решить, кто вправе делать выгрузку, куда её кладут и когда удаляют. В анонимном опросе вопрос проще, но не исчезает: выгрузка со свободным текстом сама может выдать автора.

Где всё это живёт: немного про сервер

Если вы разворачиваете LimeSurvey у себя, вопрос о том, кто видит данные, касается не только интерфейса. Тот, у кого есть доступ к серверу и базе, технически способен увидеть записи в обход прав опроса. Поэтому для опросов с персональными данными полезно продумать, кто имеет root-доступ к машине и какие учётные записи есть в базе. На VPS MAATRIX вы получаете root-доступ, то есть сами определяете, кто и как заходит на сервер. Это даёт гибкость, но и возлагает ответственность: набор пользователей и правил администрирования остаётся вашим решением. Порядок самой установки подробно описан в материале про установку и настройку LimeSurvey на VPS.

Для небольшого опроса сотрудников нагрузка обычно скромная, и начального тарифа вроде Ba (1 vCPU, 2 ГБ RAM, 40 ГБ NVMe) может хватить для знакомства с системой. Но это ресурсы конфигурации, а не обещание ёмкости: при крупной рассылке с одновременными ответами стоит самим проверить поведение под вашей нагрузкой и при необходимости выбрать более крупный тариф, например Uab или Heka. Оплата картой РФ и через СБП, а также создание VPS в течение пары минут после оплаты указаны в публичном предложении на странице аренды VPS. Какие локации и образы доступны в момент заказа, лучше смотреть прямо в форме.

Прогон одного приглашения до запуска

Прежде чем отправлять рассылку всем, пройдите путь одного токена на тестовых данных. Заведите двух тестовых участников со своими адресами и проверьте последовательность, которая сразу покажет, как ведёт себя ваша настройка:

  1. Откройте ссылку первого участника, начните отвечать, закройте вкладку и откройте ссылку снова. Вернули ли вас к введённому? Это проверка персистентности.
  2. Завершите анкету и откройте ту же ссылку ещё раз. Появилась ли пустая анкета, доступ к прежнему ответу или отказ? Это проверка режима повторных ответов.
  3. В окне другого браузера откройте ссылку второго участника, не авторизуясь в администраторской части. Убедитесь, что без токена открыть анкету нельзя.
  4. В разделе результатов посмотрите, видно ли имя рядом с ответом. Совпадает ли это с тем, что вы обещаете участникам в письме?
  5. Проверьте таблицу участников: отмечены ли завершившие. Это и есть ваш инструмент для напоминаний.

Пять минут такой проверки избавят от неприятного разговора, когда выяснится, что «анонимный» опрос показывает имена, или что повторный переход затирает чужие данные. Заодно проверьте, закрыта ли публичная регистрация, если вы не хотели, чтобы токены получали посторонние.

С какого вопроса начинать

Если сжать всё сказанное до одного шага, он такой: прежде чем нажимать что-либо в настройках, спросите себя, нужно ли вам узнавать автора ответа. Не «удобно ли», не «а вдруг пригодится», а действительно нужно ли вам будет по результатам обратиться к конкретному человеку.

Если да, выбирайте идентифицируемый опрос, включайте персистентность и режим обновления там, где участникам нужно править ответы, и честно говорите им, что ответ связан с именем. Если нет, включайте анонимизацию, не просите лишних подробностей в свободном тексте, договаривайтесь о минимальном размере групп для отчётов и не обещайте того, чего настройка сама по себе не гарантирует. А права на чтение результатов раздавайте отдельно, на уровне опроса: токен пускает человека в анкету, но не в чужие ответы.