LimeSurvey: как проверить внешний ID на уникальность (без токенов, но с намёком)

LimeSurvey, внешний ID, ID без токенов, создать токен динамически, panel respondent, уникальность ID, повторный респондент LimeSurvey, panel respondent integration

LimeSurvey: внешний ID без токенов, как у людей

Задача стара как мир: панель шлёт респондентов без токенов, просто с ?id=1234 в URL. Lime вежливо молчит, как будто всё нормально. А потом у тебя в базе десятки дублей и вечный вопрос “А кто все эти люди и кто платит за банкет?”. Давай чинить.

Что нам нужно?

  • Проверить, что ID вообще передан
  • Если ID новый — создать токен
  • Если ID уже был — вернуть респондента в его анкету (незавершённую или завершённую)
  • Дальше — пусть Lime сам разруливает (screenout, overquota, complete..)

Почему не обычные токены?

Потому что их негде взять. Панель даёт только ID-шники, а остальное делай сам. Списков нет, токенов нет, а работать как-то надо. Lime говорит: “я без токена не пускаю”. Значит, будем делать вид, что токены у нас есть.

Правильный алгоритм

1. Делаем скрипт – проставку – токен проверяшку-добавляшку

  • Качай тут: index.zip
  • Настраивай конфиг в шапке скрипта под себя
  • Выкладывай куда-то за пределы директории с лаймом
  • Включи в лайме поддержку API и JSON (Общие настройки -> Интерфейсы)
  • Запусти свой опрос в режиме ограниченного доступа. Создай таблицу токенов. Пустую. Добавлять токены туда будет скрипт
  • Отдай панелям ссылку на опрос такого формата https://example.com/q/?q=666&r=[respondent id]
    • Где:

    • /q/– директория со криптом-проставкой
    • q=666 – номер твоего опроса в лайме
    • r=[respondent id] – номер респондента. Присваивает панель.
  • Забрать id респондента для обратных редиректов в панель можно так: {TOKEN:FIRSTNAME}.
  • Иди кури. Завари ромашковый чай.

2. Как работает скрипт-проставка

  • Читает из ссылки номер опроса и номер респондента.
  • Забирает по api все токены из твоего опроса и ищет респондента с таким номером.
  • Если не находит, создает новый токен и пишет номер респондента в поле firstname (один фиг, оно всегда пустое.. Зато внутри опроса ничего не надо создавать дополнительно).
  • Если респондент нашелся (повторный заход), тогда просто берем его токен.
  • Затем редирект в твой опрос по токену (новому или найденному).

3. Что дальше?

А дальше — маршрутизация стандартными средствами лайма. Если анкета не заполнена, значит – заполнить. Если заполнена, значит заполнена. Проблемы читеров шерифа не волнуют.

Почему это правильно?

  • Ты не ведёшь таблицу токенов
  • Ты не дерёшься с панелью за список
  • Ты не ломаешь логику Lime, а просто помогаешь ему вспомнить респондента
  • У тебя чистые данные без дублей (ну, почти). Не забудь в конце опроса сверить с панелью список панелистов.

Как это выглядит для респондента?

Никак. Для него ничего не меняется.

Ну всё, вроде бы ничего не забыл.

Если что, пиши комменты или стучись в личку..

LimeSurvey внешний ID, динамический токен, панельный респондент, создать токен без панели, ID validation LimeSurvey, уникальность ID, повторный респондент LimeSurvey, panel respondent integration

Leave a Comment

Ваш e-mail не будет опубликован. Обязательные поля помечены *