Skip to main content
Quiz API позволяет вашему JavaScript взаимодействовать с квизом, пока посетитель его заполняет. Вы можете прочитать ответы, изменить блок, перейти на нужный шаг или отправить квиз — не открывая сам квиз в конструкторе. API можно использовать везде, где на странице выполняется JavaScript: в собственном коде квиза, в скрипт-блоке или в сниппете менеджера тегов.

Как получить API

API передаётся вам в событии ll-quiz-init как event.detail.llQuizApi. Сохраните этот объект и используйте его, когда нужно.
Ваш скрипт может выполниться до или после загрузки квиза. Если он зарегистрируется поздно, событие ll-quiz-init автоматически отправится ему повторно, поэтому такой подход работает всегда.
Каждое другое событие квиза тоже содержит llQuizApi, поэтому вы можете реагировать на шаг или ответ и действовать прямо в обработчике. См. События квиза.

Шаги и блоки по имени

Каждая функция, принимающая шаг или блок, принимает его имя или ID. Имя — это то, что вы ввели в конструкторе, поэтому обычно используют его. ID генерируются автоматически и выглядят как block-3f9c….
Дайте каждому блоку и шагу понятное имя в конструкторе. Это единственная настройка, которая нужна для работы с API.
Если у двух блоков или двух шагов одинаковое имя, используется первый по порядку в квизе.

Чтение ответов

getAnswers() возвращает все данные на данный момент ответы — по одной записи на блок. getAnswersSimple() возвращает те же ответы в виде простого объекта, ключами которого служат метки (label). Скрытые блоки и пустые ответы не включаются.
Это в точности те же fields и fieldsSimple, которые передают события, поэтому код, обрабатывающий одно, подойдёт и для другого.

Где находится посетитель

index начинается с 0. isSubmitted становится true, когда в этом визите квиз был отправлен.

Поиск блоков

В списки попадают только блоки, которые хранят значение. Заголовки, абзацы, изображения и подобные блоки в списки не входят. getBlock() дополнительно находит кнопки (Continue, Previous, Submit, Button), чтобы вы могли менять их текст или отключать их.
getBlock() никогда не возвращает undefined. Если ничего не найдено или блок не может хранить значение, вы получите блок-заглушку: каждый вызов на ней пишет предупреждение в консоль и ничего не делает, а getValue() возвращает "". Код не упадёт, но если что-то не срабатывает, проверьте консоль.
Поля ввода (текст, email, телефон, число, textarea, дата, дата рождения, почтовый индекс, адрес, OTP), блоки выбора (multiple choice, image choice, select), checkbox, range slider, upload, signature и скрытые поля.Всё остальное — блоки отображения или навигации: заголовок, абзац, изображение, видео, разделитель, список, loader, countdown, progress, accordion, ссылки, custom code, tracking и кнопки. Вызов getValue(), setValue(), reset() или validate() на таких блоках вызывает ошибку. Контейнеры прозрачны: блоки внутри них перечисляются так же, как любые другие.

Чтение и изменение блока

Каждый блок, который вы получаете, — объект одного и того же типа, поэтому примеры ниже работают с любым блоком, который поддерживает вызов.

Значение

Установка значения через API вызывает событие ll-quiz-value-change с source: 'api', поэтому ваши обработчики могут отличить его от ввода посетителя.
  • Checkbox: 'checked' или 'unchecked'
  • Multiple choice, image choice, select: значение варианта, например 'pro'
  • Multiple choice с несколькими вариантами: значения, соединённые разделителем, заданным в блоке
  • Все остальные: текст, который ввёл посетитель

Метка и плейсхолдер

Метки — это обычный текст, кроме checkbox, где разрешён HTML для ссылок на условия. setLabel() и getLabel() вызывают ошибку на блоках, у которых нет метки.

Варианты ответов

Блоки multiple choice, image choice и select предоставляют свои варианты:
Вызов getOptions() на любом другом блоке вызывает ошибку.

Ошибки и фокус

Кнопки

enable() и disable() работают с блоками Continue, Submit и Button; на остальных вызывают ошибку.

Видимость

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

Валидация

Валидация асинхронная, потому что поля email, телефона и OTP проверяются на сервере. Скрытые блоки всегда проходят проверку.
Если шаг не проходит проверку, квиз также вызывает ll-quiz-validation-error со всеми непрошедшими блоками и сообщениями об ошибках, помеченное source: 'api'. Поэтому один обработчик может обрабатывать и попытки посетителя, и ваши. Подробнее — на странице событий.

Навигация и отправка

goNext(), goToStep() и submit() сначала валидируют шаг на экране. Если он невалиден, они остаются на месте, пишут предупреждение и вызывают ll-quiz-validation-error. goBack() никогда не валидирует. submit() делает ровно то же, что кнопка Submit у посетителя: лид сохраняется, срабатывает ll-quiz-submit с ответом сервера, действует защита от повторной отправки и выполняется действие кнопки Submit после отправки. На шаге без кнопки Submit квиз отправляется и остаётся на месте. Возвращаемый promise завершается, когда всё это выполнено.

Примеры

Все функции кратко

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