Skip to main content
A API do quiz permite que o seu próprio JavaScript se comunique com um quiz enquanto o visitante o preenche. Você pode ler o que ele respondeu, alterar um bloco, pular para uma etapa ou enviar o quiz, tudo isso sem mexer no quiz no construtor. Você pode usá-la em qualquer lugar da página onde o JavaScript rode: no código personalizado do próprio quiz, em um bloco de script ou em um snippet de um gerenciador de tags.

Obtenha a API

A API é entregue a você pelo evento ll-quiz-init, em event.detail.llQuizApi. Guarde esse objeto e use-o sempre que precisar.
Seu script pode rodar antes ou depois de o quiz carregar. Se ele for registrado depois, o ll-quiz-init é reenviado a ele automaticamente, então esse padrão sempre funciona.
Todos os outros eventos do quiz trazem o mesmo llQuizApi, então você também pode reagir a uma etapa ou a uma resposta e agir ali mesmo. Veja Eventos do quiz.

Etapas e blocos pelo nome

Todas as funções que recebem uma etapa ou um bloco aceitam o nome ou o ID. Os nomes são o que você digitou no construtor, então é o que você normalmente vai usar. Os IDs são gerados automaticamente e têm o formato block-3f9c….
Dê um nome claro a cada bloco e etapa no construtor. Essa é a única configuração de que a API precisa.
Se dois blocos ou duas etapas tiverem o mesmo nome, será usado o primeiro na ordem do quiz.

Leia as respostas

getAnswers() retorna todas as respostas dadas até o momento, com uma entrada por bloco. getAnswersSimple() retorna as mesmas respostas em um objeto simples, usando o rótulo (label) como chave. Blocos ocultos e respostas vazias ficam de fora.
São exatamente os mesmos fields e fieldsSimple que os eventos trazem, então o código que trata um formato também trata o outro.

Saiba onde o visitante está

index começa em 0. isSubmitted passa a ser true assim que o quiz é enviado nesta visita.

Encontre blocos

As listas contêm apenas blocos que armazenam um valor. Títulos, parágrafos, imagens e afins nunca são listados. Além disso, getBlock() também encontra botões (Continue, Previous, Submit, Button), para que você possa alterar o texto deles ou desativá-los.
getBlock() nunca retorna undefined. Se nada corresponder, ou se o bloco não puder armazenar um valor, você recebe um bloco substituto: cada chamada nele registra um aviso e não faz nada, e getValue() retorna "". Seu código nunca quebra, mas confira o console se algo não tiver efeito.
Campos de entrada (text, email, phone, number, textarea, date, birth date, zip code, address, OTP), campos de escolha (multiple choice, image choice, select), checkbox, range slider, upload, signature e campos ocultos (hidden).Todo o resto é de exibição ou navegação: headline, paragraph, image, video, divider, list, loader, countdown, progress, accordion, links, custom code, tracking e os botões. Chamar getValue(), setValue(), reset() ou validate() em um desses blocos lança um erro. Os contêineres são transparentes: os blocos dentro deles são listados como qualquer outro bloco.

Leia e altere um bloco

Todo bloco retornado é o mesmo tipo de objeto, então os exemplos abaixo funcionam em qualquer bloco compatível com a chamada.

Valor

Definir um valor pela API dispara o ll-quiz-value-change com source: 'api', para que seus listeners consigam diferenciá-lo do que o visitante digita.
  • Checkbox: 'checked' ou 'unchecked'
  • Multiple choice, image choice, select: o valor da opção, por exemplo 'pro'
  • Multiple choice com várias seleções: os valores unidos pelo separador configurado no bloco
  • Todos os outros: o texto que o visitante digitou

Rótulo e placeholder

Os rótulos são texto simples, exceto no checkbox, que aceita HTML para incluir links para os termos. setLabel() e getLabel() lançam um erro em blocos que não têm rótulo.

Opções

Os blocos multiple choice, image choice e select expõem suas opções:
Chamar getOptions() em qualquer outro bloco lança um erro.

Erros e foco

Botões

enable() e disable() funcionam nos blocos Continue, Submit e Button e lançam um erro em qualquer outro.

Visibilidade

Um bloco oculto não é validado, não é enviado com o lead e não é exibido. undefined significa que você nunca alterou a visibilidade, então o bloco segue as próprias configurações.

Valide

A validação é assíncrona porque os campos de e-mail, telefone e OTP são verificados em um servidor. Blocos ocultos sempre passam.
Quando uma etapa não passa na validação, o quiz também dispara o ll-quiz-validation-error com cada bloco que falhou e a respectiva mensagem, marcado com source: 'api'. Assim, um único listener consegue tratar tanto as tentativas do visitante quanto as suas. Veja os detalhes na página de eventos.
goNext(), goToStep() e submit() validam primeiro a etapa exibida na tela. Se ela for inválida, eles não avançam, registram um aviso e disparam o ll-quiz-validation-error. goBack() nunca valida. submit() faz exatamente o que o botão Submit faz para o visitante: o lead é salvo, o ll-quiz-submit é disparado com a resposta do servidor, a proteção contra envios duplicados é aplicada e a ação pós-envio do botão Submit é executada. Em uma etapa sem botão Submit, o quiz é enviado e permanece na mesma etapa. A promise retornada é resolvida quando tudo isso termina.

Receitas

Todas as funções em resumo

As versões anteriores tinham uma função para cada tipo de busca. Elas continuam funcionando exatamente como antes, então nada do que você já escreveu precisa mudar. Em código novo, use as funções unificadas.