Pular para o conteúdo
Como criar um segmento no painel: JSON, regras e bons exemplos

Painel2026-04-11 · 9 min

Como criar um segmento no painel: JSON, regras e bons exemplos

Segmentos são filtros salvos sobre sua base. Entenda o formato v1, regras por tag, property (com valueMatch e ignoreCase), marketing, Preview e campanhas — alinhado à doc oficial.

Um segmento responde: “quem do meu workspace entra nesse público?”. No produto, ele é um filtro reutilizável: você salva a lógica uma vez, prevê quantas pessoas entram e escolhe esse segmento ao montar uma campanha—sem refazer planilha a cada envio.

O guia técnico completo (validação, erros e fluxo da tela) está na documentação: https://docs.notifique.dev/segmento-introducao

No painel, o caminho é Audience & campaigns → aba Segments → New segment. Você informa um nome e uma definição em JSON. O backend não aceita texto solto: ele valida uma DSL pequena e segura, hoje na versão 1, e traduz isso em consulta aos contatos do workspace (sempre isolado por workspace).

O formato obrigatório tem três partes: version, match (all ou any) e rules como lista. O limite é até 32 regras por segmento. Abaixo, o esqueleto que você cola no campo Definition JSON:

JSON
{
"version": 1,
"match": "all",
"rules": []
}

Com match all, todas as regras precisam ser verdadeiras (AND). Com any, basta uma (OR). Se rules for um array vazio, o segmento inclui todos os contatos daquele workspace—útil para testar pipeline, mas perigoso em campanha se você esquecer de apertar o filtro depois.

Há só três tipos de regra. (1) Tag — o contato precisa ter essa tag. O tagId é o identificador da tag no workspace, não o nome amigável. No modal de criação, o painel costuma listar tags carregadas com nome e início do ID para você copiar sem erro.

JSON
{
"type": "tag",
"tagId": "<uuid>"
}

(2) Propriedade customizada — o key é a chave da definição da propriedade no workspace (a mesma que você usa na API de contatos). O value na DSL precisa ser string. Se você não informar nada além disso, o comportamento continua o de sempre: igualdade exata (case-sensitive) com o valor JSON armazenado no contato.

Ainda na versão 1 da DSL, a regra property aceita campos opcionais: valueMatch pode ser exact (padrão quando omitido) ou contains — neste caso o valor no contato precisa conter o texto da regra. ignoreCase, quando true, faz a comparação ignorar maiúsculas e minúsculas (padrão false quando omitido). Validação: com contains, value não pode ser vazio. contains e ignoreCase se aplicam de forma consistente quando a propriedade está gravada como string no JSON do contato; número, booleano ou data armazenados de outro modo não entram nesse mesmo critério de “contém texto”.

JSON
{
"type": "property",
"key": "nome_do_campo",
"value": "texto"
}

Exemplo: cidade salva como “Cachoeiro de Itapemirim” e você quer quem tenha “cachoeiro” no meio do texto, sem diferenciar maiúsculas:

JSON
{
"type": "property",
"key": "cidade",
"value": "cachoeiro",
"valueMatch": "contains",
"ignoreCase": true
}

(3) Marketing geral — filtra quem aceita ou não comunicação de marketing no cadastro do contato. Combine com tags ou propriedades para respeitar consentimento e ainda ser específico no recorte.

JSON
{
"type": "receiveMarketing",
"value": true
}

Exemplo: só quem aceita marketing (definição completa):

JSON
{
"version": 1,
"match": "all",
"rules": [
{ "type": "receiveMarketing", "value": true }
]
}

Exemplo: VIP que aceita marketing — tag e opt-in ao mesmo tempo (AND):

JSON
{
"version": 1,
"match": "all",
"rules": [
{ "type": "tag", "tagId": "SEU_UUID_DA_TAG_VIP" },
{ "type": "receiveMarketing", "value": true }
]
}

Exemplo: contatos em SP ou RJ (qualquer um dos dois — OR), usando a mesma propriedade uf com valores diferentes:

JSON
{
"version": 1,
"match": "any",
"rules": [
{ "type": "property", "key": "uf", "value": "SP" },
{ "type": "property", "key": "uf", "value": "RJ" }
]
}

Para “SP e plano premium”, use match all com uma regra de uf e outra de propriedade plano cujo value seja exatamente o que você grava nos contatos.

Depois de salvar, use Preview na listagem: o backend recalcula o filtro, devolve total e uma página de contatos (nome, telefone, e-mail) para validar se o JSON reflete a intenção. Se o total for zero quando você esperava muitos contatos, revise tagId, key/value, valueMatch, ignoreCase ou o match.

Em campanhas, ao escolher audiência por segmento, o sistema reutiliza a mesma definição na hora de montar o público—o mesmo motor de segmentação do preview, incluindo contains e ignoreCase quando usados nas regras. Envios de marketing continuam sujeitos a consentimento (tópicos, quando aplicável); segmento não substitui política interna nem opt-out.

Erros frequentes: UUID de tag de outro workspace ou copiado incompleto; key diferente do cadastro da propriedade; valor string na regra mas número (ou outro tipo) no contato quando você esperava match de texto; contains com value vazio; match errado (any quando queria all). Quando possível, padronize propriedades e tags com quem integra via API para o painel e o código falarem a mesma língua.

Resumo: segmento no painel é JSON na versão 1 com regras tag, property (opcionalmente com valueMatch e ignoreCase) e receiveMarketing, AND/OR explícitos, validação no servidor e preview antes de disparar. Dominar esse formato deixa campanhas previsíveis e a base auditável.