Um segmento é um conjunto nomeado e vinculado ao projeto de condições de igualdade de atributo, definido uma vez e referenciado por id nas regras de targeting de qualquer flag. Este tutorial define um segmento para clientes do plano enterprise, aponta uma regra para ele e avalia contra ele.
1. Crie o segmento
POST /v1/projects/{project_id}/segments aceita de 1 a 20 condições combinadas com AND:
const res = await fetch(
`https://api.rollfuse.com/v1/projects/${projectId}/segments`,
{
method: "POST",
headers: {
Authorization: `Bearer ${token}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
name: "Enterprise plan customers",
conditions: [{ attribute: "plan", value: "enterprise" }],
}),
}
);
const segment = await res.json();
console.log(segment.id, segment.name);
Cada condição é uma checagem de igualdade sobre um atributo que suas chamadas de avaliação passam (aqui, plan). Como o segmento é um recurso independente, atualizá-lo depois com PATCH /v1/segments/{segment_id} muda o comportamento de toda regra que o referencia, em qualquer flag, sem tocar nessas flags individualmente.
2. Referencie o segmento numa regra de targeting
As regras de targeting ficam na configuração por ambiente da flag, definida com PUT /v1/environments/{environment_id}/feature-flags/{feature_flag_id}/config. O outcome de uma regra aponta para o id de uma variação, e sua condição é ou um par inline attribute/value, ou um segment_id, nunca os dois:
const enterpriseVariationId = flag.variations.find((v) => v.key === "on").id;
const defaultVariationId = flag.variations.find((v) => v.key === "off").id;
const configRes = await fetch(
`https://api.rollfuse.com/v1/environments/${environmentId}/feature-flags/${flag.id}/config`,
{
method: "PUT",
headers: {
Authorization: `Bearer ${token}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
enabled: true,
default_variation_id: defaultVariationId,
rules: [
{
segment_id: segment.id,
outcome: { variation_id: enterpriseVariationId },
},
],
}),
}
);
As regras são avaliadas em ordem, e qualquer subject que não bata com nenhuma regra cai no default_variation_id. Como essa configuração já carrega uma regra manual, não dá para anexar também um rollout percentual a ela: rollouts e regras manuais são mutuamente exclusivos na mesma configuração de ambiente.
3. Confirme o targeting pelo SDK
Avalie usando o mesmo atributo que o segmento checa. Um subject com plan: "enterprise" bate com o segmento e recebe o resultado da regra; qualquer outro cai no valor padrão:
import { RollfuseClient } from "@rollfuse/sdk-js";
const client = new RollfuseClient({
baseUrl: "https://api.rollfuse.com",
credential: process.env.ROLLFUSE_CREDENTIAL!, // set before running
});
await client.start();
const enterpriseResult = client.evaluate("user-42", "new-checkout-flow", {
attributes: { plan: "enterprise" },
fallback: false,
});
console.log(enterpriseResult.value, enterpriseResult.reason); // bateu com a regra do segmento
const otherResult = client.evaluate("user-99", "new-checkout-flow", {
attributes: { plan: "starter" },
fallback: false,
});
console.log(otherResult.value, otherResult.reason); // caiu no default_variation_id
Próximo passo
Segmentos compõem o mesmo conjunto de condições em qualquer flag que os referencie; se em vez disso você quer expandir a exposição gradualmente para todo mundo, e não só para um grupo fixo, veja o tutorial de rollout percentual.