Aller au contenu

Prévia do público

POST/api/campaigns/{id}/audience-preview

Auth
Jeton requis
Clé d’API:
campaigns:write
X-CommunityId
X-CommunityId Envoyez le X-CommunityId de la communauté où l’opération a lieu.
Les descriptions des endpoints viennent directement de la spécification de l’API et sont en portugais pour l’instant. L’interface autour est traduite.

Owner, admin, moderador e financeiro. Conta quem receberia (união dos critérios, cada pessoa uma vez) e quantas ficaram de fora e por quê: `byRule` (regra `exclude` do público; o total antes dela vem em `candidatesBeforeRule`), `optedOut` (descadastrada), `hardBounce` (bounce permanente) e `complaint` (reclamação). Traz uma amostra de até 10 pessoas com o e-mail mascarado. Sem corpo, usa o público salvo; com `audience`, prevê o que ainda não foi salvo. Acima de `maxRecipients` (20.000) o envio é recusado (`tooLarge`).

Paramètres

NomEmplacementTypeDescription
idobligatoirepathstring (uuid)

En-têtes

NomTypeDescription
X-CommunityIdfacultatifstring (uuid)ID da comunidade em que a operação acontece. Obrigatório na maioria dos endpoints com escopo de comunidade.

Corps de la requête application/json

NomTypeDescription
audiencefacultatifobjectPúblico: a união de todos os critérios, cada pessoa uma vez, menos quem cai em qualquer item de `exclude`. Quem se descadastrou, teve bounce permanente ou reclamou nunca entra.
audience.allfacultatifbooleanToda a base da comunidade.
audience.groupIdsfacultatifstring (uuid)[]
audience.tagsfacultatifstring[]Nomes das tags.
audience.memberIdsfacultatifstring (uuid)[]Pessoas escolhidas na mão. Quem se descadastrou é recusado com erro no campo `audience.memberIds`.
audience.fieldsfacultatifobject[]Opcional. Condições por campo customizado: cada uma é mais uma parte da união, como um grupo ou uma tag (quem está no grupo X **ou** marcou Cloud). Até 10 condições somando as de `exclude.fields`. Só se aplicam no momento da prévia e de cada envio. Quem não tem valor no campo não entra.
audience.fields[].fieldIdfacultatifstring (uuid)Id do campo (`GET /api/member-fields`). Informe este ou `key`.
audience.fields[].keyfacultatifstringChave do campo (aceita também `campo_interesses`). Informe esta ou `fieldId`.
audience.fields[].operatorfacultatifoneOf | containsAny | containsAll | isTrue | isFalseSem operador: `oneOf` na escolha única e `containsAny` na múltipla; no sim/não é obrigatório.
audience.fields[].valuesfacultatifstring[]Valores (`value`) das opções; o rótulo também é aceito, sem diferenciar maiúsculas. Vazio no sim/não.
audience.excludefacultatifobjectOpcional. Quem está em qualquer um destes grupos, tem qualquer uma destas tags ou é uma destas pessoas sai do público, mesmo que também esteja num grupo ou tag incluído. Sozinho não escolhe ninguém: precisa de `all` ou de algum critério de inclusão. Grupos e pessoas precisam ser da comunidade (senão 422 em `audience.exclude.groupIds` ou `audience.exclude.memberIds`). Só aparece na resposta quando há alguma exclusão.
audience.exclude.groupIdsfacultatifstring (uuid)[]
audience.exclude.tagsfacultatifstring[]Nomes das tags.
audience.exclude.memberIdsfacultatifstring (uuid)[]
audience.exclude.fieldsfacultatifobject[]As mesmas condições de `fields`, para tirar do público ("menos quem marcou Linux").
audience.itemAccessfacultatifobjectOpcional. Modo "quem tem acesso a este conteúdo": o público é quem abre o conteúdo no app **no momento** da prévia e de cada envio (agendado ou recorrente, cada disparo recalcula): as regras do espaço (visibilidade, seção, grupos, produtos, planos, cadeado) e a visibilidade do conteúdo (`public`, `members`, `plan`; na comunidade paga, quem está sem plano só lê o que é `public`). A equipe (owner, admin, moderador, financeiro) sempre entra; o autor sem acesso, não. É um modo exclusivo, como `all`: com `all`, `groupIds`, `tags`, `memberIds` ou `fields` junto volta 422 em `audience.itemAccess`; `exclude` continua valendo. Só `type: content` por enquanto (outro tipo: 422 em `audience.itemAccess.type`). Conteúdo de outra comunidade ou apagado: 404; rascunho ou `private`: 422. Se o conteúdo for apagado ou fechado depois, o envio é recusado com 422. Não existe em workflows (422).
audience.itemAccess.typeobligatoirecontentTipo do item. `event` chega na fase 2.
audience.itemAccess.idobligatoirestring (uuid)Id do conteúdo (post ou artigo).

Réponses

StatutDescription
200Contagem e amostra.
400Requisição inválida — falha de validação.
401Token ausente, inválido ou expirado; token de outra comunidade (o `X-CommunityId` ou o `communityId` do corpo não é o do token); token antigo ou de uma sessão encerrada (troca de senha, convite aceito). Nesses casos a mensagem pede para entrar de novo (`auth.signInAgain`).
403Autenticado, mas sem permissão para esta operação.
404Campanha não encontrada, ou o conteúdo de `audience.itemAccess` não existe nesta comunidade.
422Grupo ou pessoa em `audience.exclude` que não é da comunidade; `audience.itemAccess` junto com outro critério de inclusão, de tipo não aceito, rascunho ou privado; condição de campo inválida (ver `CampaignFieldCondition`).
500Erro interno do servidor.

Exemple curl

curl -X POST "https://api.memberfy.net/api/campaigns/<id>/audience-preview" \
  -H "Authorization: Bearer $TOKEN" \
  -H "X-CommunityId: $COMMUNITY_ID" \
  -H "Content-Type: application/json" \
  -d '{}'