Upgrade to Pro — share decks privately, control downloads, hide ads and more …

O sistema genérico de perguntas do Nubank (TDC ...

Avatar for Luiz Dubas Luiz Dubas
April 18, 2018
19

O sistema genérico de perguntas do Nubank (TDC Florianópolis 2018)

Palestra apresentada no TDC de Florianópolis que mostra um pouco de como foi desenvolvido o framework de perguntas genérico utilizado em diversas partes dos aplicativos mobile do Nubank.

Avatar for Luiz Dubas

Luiz Dubas

April 18, 2018

Transcript

  1. Acquisition “Nu Minimal Keynote Template” © Nu Bank - 05.01.2014

    • Porta de entrada para o Nubank • Captura de documentos e informações do cliente
  2. Acquisition • CPF • Senha • Aviso de conta criada

    • RG • Emissor do RG • Estado civil • Celular • Permissão de localização • CEP • Endereço • Bairro • Cidade • Estado • Permissão de câmera • Docs Front • Docs Back • Selfie • Renda • Limte • Vencimento • PIN • Assinatura • Contrato • Data de nascimento
  3. Acquisition • CPF • Senha • Aviso de conta criada

    • RG • Emissor do RG • Estado civil • Celular • Permissão de localização • CEP • Endereço • Bairro • Cidade • Estado • Permissão de câmera • Docs Front • Docs Back • Selfie • Renda • Limite • Vencimento • PIN • Assinatura • Contrato • Data de nascimento O que eles tem em comum?
  4. Acquisition • CPF • Senha • Aviso de conta criada

    • RG • Emissor do RG • Estado civil • Celular • Permissão de localização • CEP • Endereço • Bairro • Cidade • Estado • Permissão de câmera • Docs Front • Docs Back • Selfie • Renda • Limite • Vencimento • PIN • Assinatura • Contrato • Data de nascimento Todas são telas de pergunta e resposta
  5. Acquisition • CPF • Senha • Aviso de conta criada

    • RG • Emissor do RG • Estado civil • Celular • Permissão de localização • CEP • Endereço • Bairro • Cidade • Estado • Permissão de câmera • Docs Front • Docs Back • Selfie • Renda • Limite • Vencimento • PIN • Assinatura • Contrato • Data de nascimento E se não precisássemos mais de todas essas perguntas?
  6. Acquisition • CPF • Senha • RG • Emissor do

    RG • Estado civil • Celular • CEP • Endereço • Bairro • Cidade • Estado • Docs Front • Docs Back • Selfie • Limite • Vencimento • PIN • Contrato • Data de nascimento E se não precisássemos mais de todas essas perguntas?
  7. Acquisition • CPF • Senha • RG • Emissor do

    RG • Estado civil • Celular • CEP • Endereço • Bairro • Cidade • Estado • Docs Front • Docs Back • Selfie • Limite • Vencimento • PIN • Contrato • Data de nascimento Qualquer mudança tem que gerar uma nova versão do app
  8. Solução desejada • Lógica centralizada • Não precisaria atualizar o

    app a cada mudança • Fácil de adicionar/remover perguntas • Mais fácil de se fazer testes A/B e personalizar por cliente
  9. Novo Acquisition • O que é um step • Como

    que ele vai navegar entre steps e mandar as informações • O que acontece se o app não conhecer um step
  10. Step • Representa um pedaço do fluxo • Pode ser

    uma pergunta ou um anúncio • Pode ter uma resposta
  11. Tipos de Step • Somente leitura • Texto • Escolha

    única • Não tem resposta • Normalmente usado para avisos
  12. Tipos de Step • Somente leitura • Texto • Escolha

    única • Pode ser usado para fazer bifurcações • Não tem resposta • Normalmente usado para avisos
  13. Tipos de Step • Somente leitura • Texto • Escolha

    única • Pode conformar com diferentes máscaras
  14. Tipos de Step • Somente leitura • Texto • Escolha

    única • Pode conformar com diferentes máscaras 
 • Pode ter mais de um texto na tela
  15. Tipos de Step • Somente leitura • Texto • Escolha

    única • Pode conformar com diferentes máscaras 
 • Pode ter mais de um texto na tela 
 
 • Tem diferentes validações
  16. Tipos de Step • Somente leitura • Texto • Escolha

    única • Pode ser usado para fazer bifurcações
  17. Tipos de Step • Somente leitura • Texto • Escolha

    única • Pode ser usado para fazer bifurcações 
 • Pode ser apresentado como uma matriz
  18. Step • Representa um pedaço do fluxo • Pode ser

    uma pergunta ou um anúncio • Pode ter uma resposta • É representado por um JSON
  19. Step { 
 
 
 } "title": "<p>Para começar vamos

    precisar do seu <em><strong>RG</strong></em>. Ok?</p>", "input_configurations": [ { "input_type": "text", "hint": "<small><detail>Caso você não tenha um RG, insira o número do seu RNE.</detail></small>", "id": "document", "required": true, "validation_message": "<small><b>RG inválido. \nDigite novamente.</b></small>" } ], "forward_action": { "redirect": { "id": "document->document-uf", "type": "step", "value": "acq-flow.steps/document-uf" } }, "required": true "type": "input", "id": "acq-flow.steps/document",
  20. Step { 
 
 
 } "title": "<p>Para começar vamos

    precisar do seu <em><strong>RG</strong></em>. Ok?</p>", "input_configurations": [ { "input_type": "text", "hint": "<small><detail>Caso você não tenha um RG, insira o número do seu RNE.</detail></small>", "id": "document", "required": true, "validation_message": "<small><b>RG inválido. \nDigite novamente.</b></small>" } ], "forward_action": { "redirect": { "id": "document->document-uf", "type": "step", "value": "acq-flow.steps/document-uf" } }, "required": true "type": "input", "id": "acq-flow.steps/document",
  21. Step { 
 
 
 } "title": "<p>Para começar vamos

    precisar do seu <em><strong>RG</strong></em>. Ok?</p>", "input_configurations": [ { "input_type": "text", "hint": "<small><detail>Caso você não tenha um RG, insira o número do seu RNE.</detail></small>", "id": "document", "required": true, "validation_message": "<small><b>RG inválido. \nDigite novamente.</b></small>" } ], "forward_action": { "redirect": { "id": "document->document-uf", "type": "step", "value": "acq-flow.steps/document-uf" } }, "required": true "type": "input", "id": "acq-flow.steps/document",
  22. Step { 
 
 
 } "title": "<p>Para começar vamos

    precisar do seu <em><strong>RG</strong></em>. Ok?</p>", "input_configurations": [ { "input_type": "text", "hint": "<small><detail>Caso você não tenha um RG, insira o número do seu RNE.</detail></small>", "id": "document", "required": true, "validation_message": "<small><b>RG inválido. \nDigite novamente.</b></small>" } ], "forward_action": { "redirect": { "id": "document->document-uf", "type": "step", "value": "acq-flow.steps/document-uf" } }, "required": true "type": "input", "id": "acq-flow.steps/document",
  23. Step { 
 
 
 } "title": "<p>Para começar vamos

    precisar do seu <em><strong>RG</strong></em>. Ok?</p>", "input_configurations": [ { "input_type": "text", "hint": "<small><detail>Caso você não tenha um RG, insira o número do seu RNE.</detail></small>", "id": "document", "required": true, "validation_message": "<small><b>RG inválido. \nDigite novamente.</b></small>" } ], "forward_action": { "redirect": { "id": "document->document-uf", "type": "step", "value": "acq-flow.steps/document-uf" } }, "required": true "type": "input", "id": "acq-flow.steps/document",
  24. Step { 
 
 
 } "title": "<p>Para começar vamos

    precisar do seu <em><strong>RG</strong></em>. Ok?</p>", "input_configurations": [ { "input_type": "text", "hint": "<small><detail>Caso você não tenha um RG, insira o número do seu RNE.</detail></small>", "id": "document", "required": true, "validation_message": "<small><b>RG inválido. \nDigite novamente.</b></small>" } ], "forward_action": { "redirect": { "id": "document->document-uf", "type": "step", "value": "acq-flow.steps/document-uf" } }, "required": true "type": "input", "id": "acq-flow.steps/document",
  25. Step { 
 
 
 } "title": "<p>Para começar vamos

    precisar do seu <em><strong>RG</strong></em>. Ok?</p>", "input_configurations": [ { "input_type": "text", "hint": "<small><detail>Caso você não tenha um RG, insira o número do seu RNE.</detail></small>", "id": "document", "required": true, "validation_message": "<small><b>RG inválido. \nDigite novamente.</b></small>" } ], "forward_action": { "redirect": { "id": "document->document-uf", "type": "step", "value": "acq-flow.steps/document-uf" } }, "required": true "type": "input", "id": "acq-flow.steps/document",
  26. Step { 
 
 
 } "title": "<p>Para começar vamos

    precisar do seu <em><strong>RG</strong></em>. Ok?</p>", "input_configurations": [ { "input_type": "text", "hint": "<small><detail>Caso você não tenha um RG, insira o número do seu RNE.</detail></small>", "id": "document", "required": true, "validation_message": "<small><b>RG inválido. \nDigite novamente.</b></small>" } ], "forward_action": { "redirect": { "id": "document->document-uf", "type": "step", "value": "acq-flow.steps/document-uf" } }, "required": true "type": "input", "id": "acq-flow.steps/document", Scroll
  27. Step { 
 
 
 } "title": "<p>Para começar vamos

    precisar do seu <em><strong>RG</strong></em>. Ok?</p>", "input_configurations": [ { "input_type": "text", "hint": "<small><detail>Caso você não tenha um RG, insira o número do seu RNE.</detail></small>", "id": "document", "required": true, "validation_message": "<small><b>RG inválido. \nDigite novamente.</b></small>" } ], "forward_action": { "redirect": { "id": "document->document-uf", "type": "step", "value": "acq-flow.steps/document-uf" } }, "required": true "type": "input", "id": "acq-flow.steps/document", Stack
  28. Step { 
 
 
 } "title": "<p>Para começar vamos

    precisar do seu <em><strong>RG</strong></em>. Ok?</p>", "input_configurations": [ { "input_type": "text", "hint": "<small><detail>Caso você não tenha um RG, insira o número do seu RNE.</detail></small>", "id": "document", "required": true, "validation_message": "<small><b>RG inválido. \nDigite novamente.</b></small>" } ], "forward_action": { "redirect": { "id": "document->document-uf", "type": "step", "value": "acq-flow.steps/document-uf" } }, "required": true "type": "input", "id": "acq-flow.steps/document", Label
  29. Step { 
 
 
 } "title": "<p>Para começar vamos

    precisar do seu <em><strong>RG</strong></em>. Ok?</p>", "input_configurations": [ { "input_type": "text", "hint": "<small><detail>Caso você não tenha um RG, insira o número do seu RNE.</detail></small>", "id": "document", "required": true, "validation_message": "<small><b>RG inválido. \nDigite novamente.</b></small>" } ], "forward_action": { "redirect": { "id": "document->document-uf", "type": "step", "value": "acq-flow.steps/document-uf" } }, "required": true "type": "input", "id": "acq-flow.steps/document",
  30. Step { 
 
 
 } "title": "<p>Para começar vamos

    precisar do seu <em><strong>RG</strong></em>. Ok?</p>", "input_configurations": [ { "input_type": "text", "hint": "<small><detail>Caso você não tenha um RG, insira o número do seu RNE.</ detail></small>", "id": "document", "required": true, "validation_message": "<small><b>RG inválido.\nDigite novamente.</b></small>" } ], "forward_action": { "redirect": { "id": "document->document-uf", "type": "step", "value": "acq-flow.steps/document-uf" } }, "required": true "type": "input", "id": "acq-flow.steps/document",
  31. Step { 
 
 
 } "title": "<p>Para começar vamos

    precisar do seu <em><strong>RG</strong></em>. Ok?</p>", "input_configurations": [ { "input_type": "text", "hint": "<small><detail>Caso você não tenha um RG, insira o número do seu RNE.</ detail></small>", "id": "document", "required": true, "validation_message": "<small><b>RG inválido.\nDigite novamente.</b></small>" } ], "forward_action": { "redirect": { "id": "document->document-uf", "type": "step", "value": "acq-flow.steps/document-uf" } }, "required": true "type": "input", "id": "acq-flow.steps/document", Stack (Content)
  32. Step { 
 
 
 } "title": "<p>Para começar vamos

    precisar do seu <em><strong>RG</strong></em>. Ok?</p>", "input_configurations": [ { "input_type": "text", "hint": "<small><detail>Caso você não tenha um RG, insira o número do seu RNE.</ detail></small>", "id": "document", "required": true, "validation_message": "<small><b>RG inválido.\nDigite novamente.</b></small>" } ], "forward_action": { "redirect": { "id": "document->document-uf", "type": "step", "value": "acq-flow.steps/document-uf" } }, "required": true "type": "input", "id": "acq-flow.steps/document", TextField
  33. Step { 
 
 
 } "title": "<p>Para começar vamos

    precisar do seu <em><strong>RG</strong></em>. Ok?</p>", "input_configurations": [ { "input_type": "text", "hint": "<small><detail>Caso você não tenha um RG, insira o número do seu RNE.</ detail></small>", "id": "document", "required": true, "validation_message": "<small><b>RG inválido.\nDigite novamente.</b></small>" } ], "forward_action": { "redirect": { "id": "document->document-uf", "type": "step", "value": "acq-flow.steps/document-uf" } }, "required": true "type": "input", "id": "acq-flow.steps/document", Label
  34. Step { 
 
 
 } "title": "<p>Para começar vamos

    precisar do seu <em><strong>RG</strong></em>. Ok?</p>", "input_configurations": [ { "input_type": "text", "hint": "<small><detail>Caso você não tenha um RG, insira o número do seu RNE.</ detail></small>", "id": "document", "required": true, "validation_message": "<small><b>RG inválido.\nDigite novamente.</b></small>" } ], "forward_action": { "redirect": { "id": "document->document-uf", "type": "step", "value": "acq-flow.steps/document-uf" } }, "required": true "type": "input", "id": "acq-flow.steps/document",
  35. Step { 
 
 
 } "title": "<p>Para começar vamos

    precisar do seu <em><strong>RG</strong></em>. Ok?</p>", "input_configurations": [ { "input_type": "text", "hint": "<small><detail>Caso você não tenha um RG, insira o número do seu RNE.</detail></small>", "id": "document", "required": true, "validation_message": "<small><b>RG inválido. \nDigite novamente.</b></small>" } ], "forward_action": { "redirect": { "id": "document->document-uf", "type": "step", "value": "acq-flow.steps/document-uf" } }, "required": true "type": "input", "id": "acq-flow.steps/document", Stack
  36. Step { 
 
 
 } "title": "<p>Para começar vamos

    precisar do seu <em><strong>RG</strong></em>. Ok?</p>", "input_configurations": [ { "input_type": "text", "hint": "<small><detail>Caso você não tenha um RG, insira o número do seu RNE.</detail></small>", "id": "document", "required": true, "validation_message": "<small><b>RG inválido. \nDigite novamente.</b></small>" } ], "forward_action": { "redirect": { "id": "document->document-uf", "type": "step", "value": "acq-flow.steps/document-uf" } }, "required": true "type": "input", "id": "acq-flow.steps/document", Button
  37. Step { 
 
 
 } "title": "<p>Para começar vamos

    precisar do seu <em><strong>RG</strong></em>. Ok?</p>", "input_configurations": [ { "input_type": "text", "hint": "<small><detail>Caso você não tenha um RG, insira o número do seu RNE.</detail></small>", "id": "document", "required": true, "validation_message": "<small><b>RG inválido. \nDigite novamente.</b></small>" } ], "forward_action": { "redirect": { "id": "document->document-uf", "type": "step", "value": "acq-flow.steps/document-uf" } }, "required": true "type": "input", "id": "acq-flow.steps/document",
  38. Step { 
 
 
 } "title": "<p>Para começar vamos

    precisar do seu <em><strong>RG</strong></em>. Ok?</p>", "input_configurations": [ { "input_type": "text", "hint": "<small><detail>Caso você não tenha um RG, insira o número do seu RNE.</detail></small>", "id": "document", "required": true, "validation_message": "<small><b>RG inválido. \nDigite novamente.</b></small>" } ], "forward_action": { "redirect": { "id": "document->document-uf", "type": "step", "value": "acq-flow.steps/document-uf" } }, "required": true "type": "input", "id": "acq-flow.steps/document",
  39. Step { 
 
 
 } "title": "<p>Para começar vamos

    precisar do seu <em><strong>RG</strong></em>. Ok?</p>", "input_configurations": [ { "input_type": "text", "hint": "<small><detail>Caso você não tenha um RG, insira o número do seu RNE.</detail></small>", "id": "document", "required": true, "validation_message": "<small><b>RG inválido. \nDigite novamente.</b></small>" } ], "forward_action": { "redirect": { "id": "document->document-uf", "type": "step", "value": "acq-flow.steps/document-uf" } }, "required": true "type": "input", "id": "acq-flow.steps/document",
  40. Step { "id": "acq-flow.steps/credentials-created", "type": "read_only", "title": "<h2><em><strong>Luiz, sua conta

    está criada!</strong></ em>\nAgora vamos continuar com o pedido do cartão.</h2>", "hint": "<small>Vamos precisar dos seus dados e de fotos do seu documento, então tenha em mãos seu RG, CNG ou RNE. Infelizmente não podemos aceitar passaportes ou carteiras de trabalho.</small>", "actions": [ { "button_type": "primary", "text": "<label><em>VAMOS LÁ</em></label>", "redirect": { "id": "credentials-created->document", "type": "step", "value": "acq-flow.steps/document" }, "type": "button" }, { "button_type": "text", "text": "<small><em>Prefere ser chamado de <a>outro nome?</a></ em></small>", "redirect": { "id": "credentials-created->preferred-name", "type": "step", "value": "acq-flow.steps/preferred-name" }, "type": "button" } ] }
  41. Step { "id": "acq-flow.steps/credentials-created", "type": "read_only", "title": "<h2><em><strong>Luiz, sua conta

    está criada!</strong></ em>\nAgora vamos continuar com o pedido do cartão.</h2>", "hint": "<small>Vamos precisar dos seus dados e de fotos do seu documento, então tenha em mãos seu RG, CNG ou RNE. Infelizmente não podemos aceitar passaportes ou carteiras de trabalho.</small>", "actions": [ { "button_type": "primary", "text": "<label><em>VAMOS LÁ</em></label>", "redirect": { "id": "credentials-created->document", "type": "step", "value": "acq-flow.steps/document" }, "type": "button" }, { "button_type": "text", "text": "<small><em>Prefere ser chamado de <a>outro nome?</a></ em></small>", "redirect": { "id": "credentials-created->preferred-name", "type": "step", "value": "acq-flow.steps/preferred-name" }, "type": "button" } ] } Title Hint
  42. Step { "id": "acq-flow.steps/credentials-created", "type": "read_only", "title": "<h2><em><strong>Luiz, sua conta

    está criada!</strong></ em>\nAgora vamos continuar com o pedido do cartão.</h2>", "hint": "<small>Vamos precisar dos seus dados e de fotos do seu documento, então tenha em mãos seu RG, CNG ou RNE. Infelizmente não podemos aceitar passaportes ou carteiras de trabalho.</small>", "actions": [ { "button_type": "primary", "text": "<label><em>VAMOS LÁ</em></label>", "redirect": { "id": "credentials-created->document", "type": "step", "value": "acq-flow.steps/document" }, "type": "button" }, { "button_type": "text", "text": "<small><em>Prefere ser chamado de <a>outro nome?</a></ em></small>", "redirect": { "id": "credentials-created->preferred-name", "type": "step", "value": "acq-flow.steps/preferred-name" }, "type": "button" } ] }
  43. Step { "id": "acq-flow.steps/credentials-created", "type": "read_only", "title": "<h2><em><strong>Luiz, sua conta

    está criada!</strong></ em>\nAgora vamos continuar com o pedido do cartão.</h2>", "hint": "<small>Vamos precisar dos seus dados e de fotos do seu documento, então tenha em mãos seu RG, CNG ou RNE. Infelizmente não podemos aceitar passaportes ou carteiras de trabalho.</small>", "actions": [ { "button_type": "primary", "text": "<label><em>VAMOS LÁ</em></label>", "redirect": { "id": "credentials-created->document", "type": "step", "value": "acq-flow.steps/document" }, "type": "button" }, { "button_type": "text", "text": "<small><em>Prefere ser chamado de <a>outro nome?</a></ em></small>", "redirect": { "id": "credentials-created->preferred-name", "type": "step", "value": "acq-flow.steps/preferred-name" }, "type": "button" } ] } Button
  44. Step Button { "id": "acq-flow.steps/credentials-created", "type": "read_only", "title": "<h2><em><strong>Luiz, sua

    conta está criada!</strong></ em>\nAgora vamos continuar com o pedido do cartão.</h2>", "hint": "<small>Vamos precisar dos seus dados e de fotos do seu documento, então tenha em mãos seu RG, CNG ou RNE. Infelizmente não podemos aceitar passaportes ou carteiras de trabalho.</small>", "actions": [ { "button_type": "primary", "text": "<label><em>VAMOS LÁ</em></label>", "redirect": { "id": "credentials-created->document", "type": "step", "value": "acq-flow.steps/document" }, "type": "button" }, { "button_type": "text", "text": "<small><em>Prefere ser chamado de <a>outro nome?</a></ em></small>", "redirect": { "id": "credentials-created->preferred-name", "type": "step", "value": "acq-flow.steps/preferred-name" }, "type": "button" } ] }
  45. Novo Acquisition • O que é um step • Como

    que ele vai navegar entre steps e mandar as informações • O que acontece se o app não conhecer um step
  46. Redirect • São eventos que podem ser enviados pelo servidor

    ou executados durante o fluxo • Podem ser eventos síncronos ou assíncronos
  47. Tipos de Redirect • Mudar de step (step) • Criar

    chunk (chunk) * • Mandar respostas (submit_response) * • Terminar fluxo (end_flow)
  48. Lifecycle Coordinator { "type": "input", "title": "<p>Para começar vamos precisar

    do seu <em><strong>RG</strong></em>. Ok?</p>", "id": "acq-flow.steps/document", "input_configurations": [ { "input_type": "text", "hint": "<small><detail>Caso você não tenha um RG, insira o número do seu RNE.</detail></small>", "id": "document", "required": true, "validation_message": "<small><b>RG inválido.\nDigite novamente.</b></ small>" } ], "forward_action": { "redirect": { "id": "document->document-uf", "type": "step", "value": "acq-flow.steps/document-uf" } }, "required": true }
  49. Lifecycle Coordinator { "type": "input", "title": "<p>Para começar vamos precisar

    do seu <em><strong>RG</strong></em>. Ok?</p>", "id": "acq-flow.steps/document", "input_configurations": [ { "input_type": "text", "hint": "<small><detail>Caso você não tenha um RG, insira o número do seu RNE.</detail></small>", "id": "document", "required": true, "validation_message": "<small><b>RG inválido.\nDigite novamente.</b></ small>" } ], "forward_action": { "redirect": { "id": "document->document-uf", "type": "step", "value": "acq-flow.steps/document-uf" } }, "required": true } QuestionController Step
  50. Lifecycle Coordinator QuestionController Step { "type": "input", "title": "<p>Para começar

    vamos precisar do seu <em><strong>RG</strong></em>. Ok?</p>", "id": "acq-flow.steps/document", "input_configurations": [ { "input_type": "text", "hint": "<small><detail>Caso você não tenha um RG, insira o número do seu RNE.</detail></small>", "id": "document", "required": true, "validation_message": "<small><b>RG inválido.\nDigite novamente.</b></ small>" } ], "forward_action": { "redirect": { "id": "document->document-uf", "type": "step", "value": "acq-flow.steps/document-uf" } }, "required": true }
  51. Lifecycle Coordinator QuestionController Step { "type": "input", "title": "<p>Para começar

    vamos precisar do seu <em><strong>RG</strong></em>. Ok?</p>", "id": "acq-flow.steps/document", "input_configurations": [ { "input_type": "text", "hint": "<small><detail>Caso você não tenha um RG, insira o número do seu RNE.</detail></small>", "id": "document", "required": true, "validation_message": "<small><b>RG inválido.\nDigite novamente.</b></ small>" } ], "forward_action": { "redirect": { "id": "document->document-uf", "type": "step", "value": "acq-flow.steps/document-uf" } }, "required": true }
  52. Lifecycle Coordinator QuestionController Step { "type": "input", "title": "<p>Para começar

    vamos precisar do seu <em><strong>RG</strong></em>. Ok?</p>", "id": "acq-flow.steps/document", "input_configurations": [ { "input_type": "text", "hint": "<small><detail>Caso você não tenha um RG, insira o número do seu RNE.</detail></small>", "id": "document", "required": true, "validation_message": "<small><b>RG inválido.\nDigite novamente.</b></ small>" } ], "forward_action": { "redirect": { "id": "document->document-uf", "type": "step", "value": "acq-flow.steps/document-uf" } }, "required": true } Redirect and response
  53. Lifecycle Coordinator QuestionController Step { "type": "input", "title": "<p>Para começar

    vamos precisar do seu <em><strong>RG</strong></em>. Ok?</p>", "id": "acq-flow.steps/document", "input_configurations": [ { "input_type": "text", "hint": "<small><detail>Caso você não tenha um RG, insira o número do seu RNE.</detail></small>", "id": "document", "required": true, "validation_message": "<small><b>RG inválido.\nDigite novamente.</b></ small>" } ], "forward_action": { "redirect": { "id": "document->document-uf", "type": "step", "value": "acq-flow.steps/document-uf" } }, "required": true } [
 { 
 “id”: “acq-flow.steps/document”,
 “response”: “12345678900”
 }
 ] Redirect and response
  54. Lifecycle Coordinator QuestionController Step { "id": "acq-flow.steps/document-uf", "title": "<p>E qual

    o <strong><em>estado</em></strong> de emissão do seu RG?</p>", "type": "list_choice", "forward_action": { "redirect": { "id": "sync-with-backend", "type": "submit_response", "value": "https://submit_response" } }, "values": [ ... ], "required": true }
  55. Lifecycle Coordinator QuestionController Step Redirect and response { "id": "acq-flow.steps/document-uf",

    "title": "<p>E qual o <strong><em>estado</em></strong> de emissão do seu RG?</p>", "type": "list_choice", "forward_action": { "redirect": { "id": "sync-with-backend", "type": "submit_response", "value": "https://submit_response" } }, "values": [ ... ], "required": true }
  56. Lifecycle Coordinator QuestionController Step [
 { 
 “id”: “acq-flow.steps/document”,
 “response”:

    “12345678900”
 },
 {
 “id”: “acq-flow.steps/document-uf”,
 “response”: “SP”
 }
 ] { "id": "acq-flow.steps/document-uf", "title": "<p>E qual o <strong><em>estado</em></strong> de emissão do seu RG?</p>", "type": "list_choice", "forward_action": { "redirect": { "id": "sync-with-backend", "type": "submit_response", "value": "https://submit_response" } }, "values": [ ... ], "required": true } Redirect and response
  57. Lifecycle Coordinator QuestionController Step POST Answers { "id": "acq-flow.steps/document-uf", "title":

    "<p>E qual o <strong><em>estado</em></strong> de emissão do seu RG?</p>", "type": "list_choice", "forward_action": { "redirect": { "id": "sync-with-backend", "type": "submit_response", "value": "https://submit_response" } }, "values": [ ... ], "required": true } Redirect and response
  58. Novo Acquisition • O que é um step • Como

    que ele vai navegar entre steps e mandar as informações • O que acontece se o app não conhecer um step
  59. Lifecycle Coordinator POST { "instant_redirect": { "id": "create-chunk", "type": "chunk",

    "value": "https://create-chunk" } } [ “input”, “read_only“ ]
  60. Novo Acquisition • O servidor é responsável por garantir a

    retrocompatibilidade • Sempre que criarem um novo tipo de step temos que gerar um nova versão
  61. Novo Acquisition • O que é um step • Como

    que ele vai navegar entre steps e mandar as informações • O que acontece se o app não conhecer um step