Перейти к основному содержимому

Написание скриптов

Достаточно часто встречаются анкеты, логику работы которых невозможно реализовать простыми средствами, такими как действия или условия показа вопросов. Для этого в SURVEYSTUDIO есть поддержка скриптов на языке JavaScript, с помощью которых можно реализовать логику работы анкеты практически любой сложности. Более того, скриптами можно полностью создать анкету (вопросы и варианты ответов), не используя редактор вопросов анкеты.

Каждый скрипт представляет собой функцию, которая получает в качестве параметра вопрос, производит некую обработку и возвращает результат. Существуют глобальные для анкеты скрипты, в которые вопрос в качестве параметра не передается. Таким образом, используя синтаксис JavaScript, любой написанный в SURVEYSTUDIO скрипт в итоге выглядит примерно так:

function Q1_BeforeShow(Q) {
return skip;
}

При этом в SURVEYSTUDIO не нужно описывать саму функцию для скрипта — это выполняется системой, т.е. в этом примере только строка return skip; должна быть написана в окне редактирования скрипта.

Типы скриптов​

В анкете есть глобальные скрипты, не связанные с каким-то конкретным вопросом, а также скрипты для вопросов. Редактор глобальных скриптов можно открыть, выбрав необходимый пункт в меню в верхней правой части редактора вопросов анкеты:

Подготовка​

Этот скрипт вызывается в самом начале, один раз при подготовке анкеты для запуска, а также при каждой выгрузке массива. Используется для создания вопросов, изменения их порядка (рандомизация/ротация), установки флагов и т.д. То есть в этом скрипте можно только формировать макет анкеты. Нельзя выполнять действия, влияющие на логику. Например, скрывать/показывать или случайным образом добавлять варианты ответа, объявлять глобальные переменные, от которых будут зависеть переходы между вопросами – для всего этого нужно использовать другие скрипты.

Обработка​

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

Перед показом​

Глобальный скрипт перед показом вызывается для каждого вопроса перед его показом. Скрипт может вернуть результат, который заставит пропустить вопрос, перейти на какой-то другой вопрос, завершить интервью, или просто подготовить варианты ответа к показу (например скрыть не нужные, и т.д.). В качестве параметра этот скрипт получает переменную Q, которая указывает на вопрос, для которого запускается скрипт.

После ответа​

Глобальный скрипт после ответа вызывается для каждого вопроса после ответа на него (после проведения базовой проверки корректности ответа). Этот скрипт, так же как и скрипт перед показом, может вернуть результат, который заставит перейти на какой-то другой вопрос, завершить интервью или, проверив ответ, сообщить об ошибке. В качестве параметра этот скрипт получает переменную Q, которая указывает на вопрос, для которого запускается скрипт.

Функции​

Здесь прописываются глобальные функции, которые можно вызывать из любого скрипта анкеты (кроме Во время показа), чтобы избавиться от дублирования кода.

Во время показа​

Данный скрипт выполняется во время показа каждого вопроса в браузере, а не на сервере, и не имеет доступа к вопросам и API системы.

предупреждение

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

CSS стили​

Не имеют отношения к скриптам, но прописываются для всей анкеты в целом. Подробную информацию о них можно найти в этом разделе.

Глобальные скрипты перед показом, после ответа и во время показа выполняются перед такими же скриптами, указанными непосредственно в самом вопросе. В свойствах вопроса для редактирования скриптов используется кнопка:

Локальные скрипты аналогичны соответствующим глобальным скриптам, только выполняются для вопроса, в котором они написаны.

Результат выполнения скрипта​

Любой скрипт должен вернуть в качестве результата специальное значение. Предусмотрен набор вспомогательных функций и глобальных переменных, которые помогают сформировать результат в необходимом формате:

return ok;​

Возврат значения ok является обычным для любого скрипта и не подразумевает выполнение системой каких-то дополнительных действий. То же самое произойдет, если скрипт не вернет вообще никакого значения.

return skip;​

Возврат значения skip используется в скриптах перед показом вопроса и заставляет систему сбросить состояние текущего вопроса (аналогично методу reset()) и перейти к следующему по порядку.

return answered;​

Возврат значения answered так же используется в скриптах перед показом вопроса и помечает вопрос как отвеченный, без вывода на экран. Т.е. ответ на него должен быть сделан так же скриптом. Система проверит правильность ответа, так же как это происходит в обычном случае. Если ответ не пройдет проверку — вопрос будет показан с сообщением об ошибке. Если вопрос окажется без ответа — он будет выведен на экран.

return error('Текст сообщения об ошибке');​

Такой метод возврата результата используется в скриптах после ответа, когда необходимо показать вопрос заново с сообщением об ошибке. Если в функцию error() не передано сообщение, которое необходимо показать — будет показано стандартное.

return question(123);​

Возврат номера вопроса, на который необходимо совершить переход. Может использоваться как в скриптах перед показом (в этом случае текущий вопрос будет пропущен со сбросом состояния как при возврате skip), так и после ответа на вопрос.

return exitWithResult(InterviewResult.Completed, 'Текст прощального сообщения');​

Принудительное завершение интервью с проставлением результата. Если в функцию exitWithResult() не передан текст сообщения, который необходимо показать — будет показан стандартный.

return exit('Текст прощального сообщения');​

Так же выполняется завершение интервью, но всегда проставляется результат Завершено.

return exitWithResultAndRedirect(InterviewResult.Completed, 'http://www.rbc.ru/', 'Текст прощального сообщения');​

Так же выполняется завершение интервью с проставлением результата, но после его сохранения производится переход на указанный вторым параметром адрес.

return exitAndRedirect('Текст прощального сообщения', 'http://www.rbc.ru/');​

Так же выполняется завершение интервью с переходом, но всегда проставляется результат Завершено.

return exitAndRestart(InterviewResult.Completed);​

Завершает интервью с проставлением результата, а затем автоматически начинает новое.

return exitWithCallResult(InterviewResult.Completed, CallResult.Answered_Success, 'Текст прощального сообщения');​

Завершает интервью с проставлением результатов интервью и звонка в рабочем месте автодозвона. Если в проекте отключены расширенные результаты звонка, а скриптом устанавливается один из них, то он автоматически будет преобразован в стандартный результат. Например, мягкий отказ (Answered_Refused_Soft) станет просто отказом (Answered_Refused).

Если в функцию exitWithCallResult() не передан текст сообщения, который необходимо показать — будет показан стандартный.

return exitAndPostpone(new Date(Date.now() + 2 * 86400000).toISOString());​

Завершает интервью с проставлением результата Перенесено, и переносит звонок в рабочем месте автодозвона на указанное время (в примере на двое суток от текущего времени).