contacts — quem recebe a mensagem. contacts.default[] são contatos fixos (estáticos); contacts.fields[] são contatos dinâmicos, resolvidos em tempo de execução a partir de um campo do card ou do formulário de entrada.
fields (nível raiz) — variáveis de template globais, injetadas no corpo da mensagem ({{1}}, {{2}}...) e compartilhadas por todos os canais das regras.
rules — as regras de disparo propriamente ditas, cada uma combinando canais (channels[]) com condições (conditions[]).
1.
Cadastrar o telefone do flow (POST .../phone-config), caso ainda não exista para a empresa.
2.
Criar a configuração de mensageria da fase (POST .../messaging-config), com os contatos e, se necessário, as variáveis de template.
3.
Adicionar ao menos uma regra de disparo (POST .../messaging-config/rules).
4.
Habilitar o módulo de mensageria como ação da fase correspondente.
Uma configuração de mensageria sem nenhuma regra em rules[] fica inerte — pelo menos uma regra é necessária para que uma mensagem seja efetivamente enviada.
Dentro de cada canal, o nome do canal vai na chave name, não type — por exemplo, {name: 'whatsapp', templateId: '...', setup: {phoneId: '...'}}.
O cadastro de telefone (phone-config) é vinculado à empresa (tenant), não a um flow individualmente, e a chamada é idempotente: se o telefone já existir, a API responde com sucesso indicando que o registro já existia.
contacts.default é obrigatório mesmo quando não há nenhum contato fixo — nesse caso, envie um array vazio.
Cada item de contacts.fields[] precisa de uma description não vazia — omiti-la ou enviá-la em branco retorna erro de validação.
O campo fields, no nível raiz da configuração, também é obrigatório mesmo vazio — envie um array vazio quando a mensagem não utilizar variáveis dinâmicas no corpo, como em notificações fixas de aprovação ou reprovação.
Na atualização (PUT da configuração), o campo type de contacts.fields[] aceita um conjunto mais restrito de valores do que na criação — utilize sempre 'default' para os contatos-padrão (nome, telefone, e-mail).
Na atualização, cada item de contacts.default[] precisa ter um telefone não vazio, mesmo para contatos que devem receber a mensagem apenas por e-mail; nesse caso, utilize um número de telefone fictício em formato válido.
Na atualização, cada item do fields[] raiz precisa do campo required informado explicitamente (true ou false).
Ao atualizar uma regra específica (PUT .../rules/{ruleId}), o identificador da regra vai apenas na URL — incluí-lo também no corpo da requisição retorna erro de validação.
O canal WhatsApp exige setup.phoneId apontando para um telefone previamente cadastrado; sua ausência retorna erro 404.