3.2. Orquestrador

Orquestrador

O ClickFlow Orchestrator é o serviço central de governança da esteira: guarda a definição estrutural do flow e o estado de cada execução, e decide qual é o próximo passo — sem executar nada e sem conhecer o canal de comunicação com o usuário final.

💾 Modelo de dados

A API é stateless e possui duas entidades:

  • Flow — a definição: nome + lista ordenada de steps.
  • Execution — uma instância de um flow publicado, em execução: passo atual, histórico de passos, status.

Status do Flow

StatusSignificado
draftEditável livremente via PUT.
publishedDisponível para iniciar execuções. Não pode ser editado — use unpublish antes.
unpublishedVoltou a ser editável; não aceita novas execuções até publicar de novo.
deletedRemovido (soft delete via DELETE).

Status da Execution

running · waiting · completed · failed · canceled — este último é definitivo (POST .../cancel é irreversível; /next passa a responder 409).

🧩 Tipos de step

Cada step do flow tem um type e um context cujo formato depende do tipo. O funcionamento de cada módulo está em Módulos.

typeMódulo acionadoO que o context carrega
acceptanceAceite via WhatsApptemplate_key, accept_replies (só essas respostas avançam a etapa). Outra resposta é ignorada e a etapa continua em andamento. Não há recusa que falhe a execução
consentMódulos de Aceite e de Notificaçãochannel_type (hoje whatsapp), template_id, channel_params.steps[].variables, expiration_time opcional em segundos (omitido, o prazo é de 2 horas) e metadata. A mensagem inicial sai no WhatsApp em qualquer canal do disparo e exige telefone. A mensagem de conclusão só sai no canal whatsapp
formMódulo de Coleta de Dados (ClickForm)version_key; opcional contact (atualiza dados do contato) e context_map_keys (pré-preenchimento a partir de respostas de steps anteriores ou de placeholders como {{person_name}}/{{phone_number}})
verifyMódulo de Autenticação (verify)authentication (liveness, biometric_behavior, identity_biometrics), result_policy (passthrough conclui a etapa na reprovação e a execução segue), provider_priority (ordem de fallback entre provedores), instructions (a tela de instruções aparece; só false explícito oculta), contact_fields_map
kycMódulo de KYC (kyc)type (business ou customer)
signatureMódulo de Assinatura — experiência padrãodocuments[] (kind: file, template ou runner_files), settings do envelope (deadline_at, folder_key, locale, remind_interval, auto_close, block_after_refusal, default_message, default_subject, name), signers[] opcional (signatários adicionais, com auths, roles, communicate_events; a identidade aceita {{chave}} do contact, do context do disparo ou de um form anterior — ver Injetar dados no flow) e signature_watchers[] opcional
embedded_signatureMódulo de Assinatura — experiência incorporadadocuments[] e settings, como em signature. Nesta versão o único signatário é o contato da execução; signers[] não é utilizado. signature_watchers[] ainda não está disponível. Ainda não está disponível no canal web; em breve, passa a funcionar nesse canal. A autenticação enviada à API da Clicksign é sempre embedded_signature, e auths informado no contexto é ignorado.

result_policy: "passthrough" cobre reprovação (resultado negativo válido): a etapa conclui, a execução segue e o veredito fica em verify_result_unjudged, no contexto da etapa, sem ser aplicado. Não cobre falha operacional do provedor do Módulo de Autenticação (sem resultado, ou resultado incompleto), que sempre falha o step e a execução, mesmo com passthrough declarado.

signature e embedded_signature definem a experiência do Módulo de Assinatura. O canal da execução continua sendo definido no disparo pelo Executor (whatsapp, api ou web). signers[] vale para signature. No embedded_signature, o único signatário é o contato da execução. embedded_signature ainda não está disponível no canal web; em breve, passa a funcionar nesse canal.

signature_watchers[] declara observadores do envelope e vale para signature. Em embedded_signature, ainda não está disponível. Um observador acompanha a formalização e pode receber avisos, mas não assina, não autentica e não entra na conclusão da etapa. email é obrigatório. kind vale all_steps (todo o processo) ou on_finished (só a conclusão). communicate_events escolhe os avisos, e attach_documents_enabled define se os documentos finalizados vão anexados. O significado de cada campo é o da criação de observador na API de Assinatura.

deadline_at, em settings, aceita um inteiro de 1 a 90 ou uma data em ISO 8601. Acima de 90, zero, negativo ou número quebrado, a publicação recusa. O inteiro vira a data de hoje em UTC mais esses dias, calculada na criação do envelope. Sem o campo, a Assinatura aplica o prazo padrão de 90 dias.

Exemplos completos de cada combinação estão nos exemplos do endpoint POST /flows na referência (aba Try It!).

Injetar dados no flow

Dá para declarar {{chave}} no flow e preencher o valor na execução. Na mesma chave, o contact vence o context, e o context vence a resposta do formulário. Chave sem valor vira string vazia.

O sistema já tem o dado. A identidade do cliente da esteira vai no contact do disparo: person_name, person_documentation, phone_number, person_birthday e person_email. Pedido, cônjuge e o restante vão no context. O body do disparo está em Contexto no disparo.

O dado é coletado ou confirmado num Form. A resposta segue para os passos seguintes pela key do campo, como {{nome-fiador}}. Um step form com contact faz outra coisa: a field key atualiza a identidade do cliente da esteira, e os passos seguintes passam a ler esse contact. O exemplo é Form — atualização de contato, na aba Try It! de Criar flow. Se um Form posterior deixa o campo editável, o passo que consome o valor aponta para a key desse Form de confirmação.

Onde o valor aparece. No Form, no envelope e no arquivo, na mensagem de consentimento e nos signatários. O detalhe de cada destino está em Onde funciona.

Signatário extra. É o caso que melhor mostra a injeção de ponta a ponta. A pessoa muda a cada execução e não é o cliente da jornada: cônjuge, fiador, avalista. A chave fica no item de signers[]. O valor vem do context do disparo, como {{spouse_name}}, ou da key de um campo de Form, como {{nome-fiador}}. Com signers[] preenchido, o Executor cria só quem está na lista, e o cliente da esteira entra nela com os placeholders do contact. Sem a lista, o único signatário é o contact.

{
  "name": "Proposta Crédito — signatário extra com variável do disparo",
  "steps": [
    {
      "type": "signature",
      "context": {
        "documents": [
          {
            "kind": "file",
            "s3_bucket": "bucket",
            "s3_key": "contrato.pdf",
            "filename": "Contrato_{{order_id}}_{{person_name}}.pdf"
          }
        ],
        "settings": {
          "name": "Envelope {{order_id}} — {{person_name}}",
          "default_subject": "Assine, {{person_name}}",
          "default_message": "Pedido {{order_id}}.",
          "deadline_at": 7
        },
        "signers": [
          {
            "name": "{{person_name}}",
            "documentation": "{{person_documentation}}",
            "phone_number": "{{phone_number}}",
            "birthday": "{{person_birthday}}"
          },
          {
            "name": "{{spouse_name}}",
            "documentation": "{{spouse_cpf}}",
            "phone_number": "{{spouse_phone}}",
            "email": "{{spouse_email}}"
          }
        ]
      }
    }
  ]
}

O disparo que preenche o cliente, order_id e spouse_* está em Contexto no disparo, no Executor. O mesmo flow é o exemplo Signature — signatário extra com variável do disparo, na aba Try It! de Criar flow. Se o signatário extra for coletado num Form, o exemplo é Signature — identidade do signatário vinda de form anterior.

Onde funciona

Cada nome abre Criar flow. Na aba Try It!, escolha o exemplo por esse nome.

📍 Endpoints

RecursoMétodoEndpointDescrição
FlowsGET/api/v1/flowsLista flows
FlowsPOST/api/v1/flowsCria flow (draft)
FlowsGET/api/v1/flows/{id}Obtém flow por ID
FlowsPUT/api/v1/flows/{id}Atualiza flow
FlowsDELETE/api/v1/flows/{id}Remove flow
FlowsPATCH/api/v1/flows/{id}/publishPublica flow
FlowsPATCH/api/v1/flows/{id}/unpublishDespublica flow
ExecutionsGET/api/v1/flows/{id}/executionsLista execuções de um flow
ExecutionsPOST/api/v1/flows/{id}/executionsInicia execução de um flow publicado
ExecutionsGET/api/v1/executions/{execution_id}Estado da execução
ExecutionsPOST/api/v1/executions/{execution_id}/nextAvança para o próximo passo
ExecutionsPOST/api/v1/executions/{execution_id}/cancelCancela execução em andamento

Referência completa, com Try It!: Orquestrador.

🔒 Autenticação

Header Authorization com o UUID do access_token (sem Bearer), validado por introspecção. Para obter o token, veja Access token.

Próximo passo ➡️

  • Executor — inicie a jornada e entregue cada etapa ao canal escolhido.
  • Módulos — entenda as capacidades que podem compor os steps do flow.
  • Collections — teste os endpoints do Orquestrador em Postman, Insomnia ou Bruno.
  • FAQ: dúvidas em ClickFlow — respostas curtas para as dúvidas mais comuns.



❓Precisa de ajuda? Entre em contato com o Suporte

💰Dúvida sobre planos e preços? Veja o comparativo

🔍Não sabe qual versão está usando? Descubra a sua versão

📚Respostas rápidas? Visite nosso FAQ


Did this page help you?