rollfuse
← Voltar aos tutoriais

Direcionar clientes enterprise com um segmento reutilizável

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.