FastComments.com

A API do FastComments

FastComments fornece uma API para interagir com muitos recursos. Crie integrações com nossa plataforma, ou até construa seus próprios clientes!

Nesta documentação, você encontrará todos os recursos suportados pela API documentados com seus tipos de requisição e resposta.

Para clientes Enterprise, todo o acesso à API é registrado no Registro de Auditoria.

SDKs Gerados

O FastComments agora gera uma Especificação da API a partir do nosso código (isso ainda não está completo, mas inclui muitas APIs).

Também agora temos SDKs para linguagens populares:

Autenticação

A API é autenticada passando sua chave da API como um cabeçalho X-API-KEY ou parâmetro de consulta API_KEY. Você também precisará do seu tenantId para fazer chamadas à API. Isso pode ser recuperado na mesma página que sua chave da API.

Nota de Segurança

Essas rotas devem ser chamadas a partir de um servidor. NÃO as chame a partir de um navegador. Fazer isso expõe sua chave da API — isso fornecerá acesso total à sua conta para qualquer pessoa que possa ver o código-fonte de uma página!

Opção de Autenticação Um - Cabeçalhos

  • Header: X-API-KEY
  • Header: X-TENANT-ID

Opção de Autenticação Dois - Parâmetros de Consulta

  • Parâmetro de Consulta: API_KEY
  • Parâmetro de Consulta: tenantId

Estrutura de Log de Auditoria Internal Link

Um AuditLog é um objeto que representa um evento auditado para tenants que têm acesso a este recurso.

A estrutura do objeto AuditLog é a seguinte:

Estrutura do AuditLog
Copy Copy
1
2interface AuditLog {
3 id: string;
4 userId?: string;
5 username?: string;
6 resourceName: string;
7 crudType: 'c' | 'r' | 'u' | 'd' | 'login';
8 from: string;
9 url?: string;
10 ip?: string;
11 when: string;
12 description?: string;
13 serverStartDate: string;
14 objectDetails?: object;
15}
16

O registro de auditoria é imutável. Também não pode ser escrito manualmente. Somente a FastComments.com pode decidir quando gravar no registro de auditoria. No entanto, você pode lê-lo através desta API.

Os eventos no registro de auditoria expiram após dois anos.

Estrutura de Comentário Internal Link

A Comment object representa um comentário deixado por um usuário.

A relação entre comentários pai e filho é definida via parentId.

A estrutura do objeto Comment é a seguinte:

Estrutura do Comment
Copy Copy
1
2interface Comment {
3 /** SOMENTE LEITURA: Defina como true se o motor de spam determinou que o comentário era spam. **/
4 aiDeterminedSpam?: boolean
5 /** Se o comentário está aprovado para exibição. Defina como true ao salvar o comentário, caso contrário ficará oculto. **/
6 approved?: boolean
7 /** Avatar do usuário. **/
8 avatarSrc?: string
9 /** Comentários filhos. Nem sempre populado em todos os cenários. Usado quando asTree é definido como true via a API. **/
10 children: Comment[]
11 /** O comentário bruto do autor. **/
12 comment: string
13 /** SOMENTE LEITURA: O comentário do autor convertido para HTML. **/
14 commentHTML?: string
15 /** Email do autor. Obrigatório se comentários anônimos estiverem desativados. **/
16 commenterEmail?: string
17 /** Link do autor (por exemplo, seu blog). **/
18 commenterLink?: string
19 /** Nome do autor. Sempre exigido. Se não estiver disponível, defina algo como "Anônimo". **/
20 commenterName: string
21 /** A data em que o comentário foi feito, em epoch UTC. **/
22 date: number
23 /** O "rótulo de exibição" para o comentário - por exemplo "Admin", "Moderator", ou algo como "VIP User". **/
24 displayLabel?: string
25 /** O domínio onde o comentário foi postado. **/
26 domain?: string
27 /** SOMENTE LEITURA: O número de vezes que o comentário foi sinalizado. **/
28 flagCount?: number
29 /** As #hashtags escritas no comentário que foram parseadas com sucesso. Você também pode adicionar hashtags manualmente, para consulta, mas elas não serão exibidas automaticamente no texto do comentário. **/
30 hashTags?: CommentHashTag[]
31 /** SOMENTE LEITURA: O comentário contém imagens? **/
32 hasImages?: boolean
33 /** SOMENTE LEITURA: O comentário contém links? **/
34 hasLinks?: boolean
35 /** SOMENTE LEITURA: O id único do comentário. **/
36 id: string
37 /** Apenas na criação! Isso é hashado para armazenamento. **/
38 ip?: string
39 /** SOMENTE LEITURA: O usuário atual bloqueou o autor deste comentário? **/
40 isBlocked?: boolean
41 /** SOMENTE LEITURA: O comentário é de um admin? Definido automaticamente com base em userId. **/
42 isByAdmin?: boolean
43 /** SOMENTE LEITURA: O comentário é de um moderador? Definido automaticamente com base em userId. **/
44 isByModerator?: boolean
45 /** Defina como true se o comentário foi excluído de forma suave (um placeholder teve que ser mantido devido a alguma outra configuração). **/
46 isDeleted?: boolean
47 /** Defina como true se a conta do usuário foi excluída e o comentário precisou ser mantido. **/
48 isDeletedUser?: boolean
49 /** SOMENTE LEITURA: Foi sinalizado pelo usuário atualmente logado (contextUserId)? **/
50 isFlagged?: boolean
51 /** O comentário está fixado? **/
52 isPinned?: boolean
53 /** O comentário está bloqueado para novas respostas (moderadores ainda podem responder)? **/
54 isLocked?: boolean
55 /** O comentário é spam? **/
56 isSpam?: boolean
57 /** SOMENTE LEITURA: O comentário foi votado negativamente pelo usuário atual (contextUserId)? **/
58 isVotedDown?: boolean
59 /** SOMENTE LEITURA: O comentário foi votado positivamente pelo usuário atual (contextUserId)? **/
60 isVotedUp?: boolean
61 /** A localidade do comentário. Se não for fornecida, será derivada do cabeçalho HTTP Accept-Language. **/
62 locale?: 'de_de' | 'en_us' | 'es_es' | 'fr_fr' | 'it_it' | 'ja_jp' | 'ko_kr' | 'pl_pl' | 'pt_br' | 'ru_ru' | 'tr_tr' | 'zh_cn' | 'zh_tw'
63 /** SOMENTE LEITURA: As @menções escritas no comentário que foram parseadas com sucesso. **/
64 mentions?: CommentUserMention[]
65 /** Metadados opcionais associados ao comentário. **/
66 meta?: Record<string, string | number | boolean>
67 /** A lista opcional de ids de grupo de moderação associados a este comentário. **/
68 moderationGroupIds?: string[]|null
69 /** SOMENTE LEITURA: O id do objeto de voto que corresponde ao voto do usuário atual (contextUserId) neste comentário. **/
70 myVoteId?: string
71 /** Se notificações foram enviadas por este comentário para comentadores. Para evitar que notificações sejam enviadas em importações, defina isto como true. **/
72 notificationSentForParent?: boolean
73 /** Se notificações foram enviadas por este comentário para usuários do tenant. Para evitar envio de notificações em importações, defina isto como true. **/
74 notificationSentForParentTenant?: boolean
75 /** O título da página em que este comentário foi postado. **/
76 pageTitle?: string
77 /** Se estamos respondendo a um comentário, este é o ID ao qual estamos respondendo. **/
78 parentId?: string|null
79 /** Se o comentário está marcado como revisado. **/
80 reviewed: boolean
81 /** O id do tenant ao qual o comentário pertence. **/
82 tenantId: string
83 /** O usuário que escreveu o comentário. Criado automaticamente ao salvar um comentário com nome/email. **/
84 userId?: string|null
85 /** A URL do local em que este comentário é visível, como um post de blog. **/
86 url: string
87 /** Uma versão "limpa" do urlId que você nos passou. Ao salvar, você especifica este campo, mas ao buscar o comentário de volta ele será "limpo" e seu valor original movido para "urlIdRaw". **/
88 urlId: string
89 /** SOMENTE LEITURA: O urlId original que você nos passou. **/
90 urlIdRaw?: string
91 /** O usuário e este comentário são verificados? **/
92 verified: boolean
93 /** Número de votos positivos. **/
94 votesUp?: number
95 /** Número de votos negativos. **/
96 votesDown?: number
97 /** O "karma" do comentário (= votos positivos - votos negativos). **/
98 votes?: number
99}
100

Alguns destes campos estão marcados READONLY - estes são retornados pela API mas não podem ser definidos.

Estrutura do Texto do Comentário

Os comentários são escritos em uma variante de markdown do FastComments, que é apenas markdown mais tags no estilo bbcode para imagens, como [img]path[/img].

O texto é armazenado em dois campos. O texto que o usuário digitou é armazenado sem modificações no campo comment. Este é renderizado e armazenado no campo commentHTML.

As tags HTML permitidas são b, u, i, strike, pre, span, code, img, a, strong, ul, ol, li, and br.

É recomendado renderizar o HTML, já que é um subconjunto muito pequeno de HTML; construir um renderizador é bastante direto. Existem várias bibliotecas para React Native e Flutter, por exemplo, para ajudar com isso

Você pode optar por renderizar o valor não normalizado do campo comment. Um parser de exemplo está aqui..

O parser de exemplo também pode ser ajustado para trabalhar com HTML e transformar as tags HTML em elementos esperados para renderizar na sua plataforma.

Marcação

Quando usuários são marcados em um comentário, a informação é armazenada em uma lista chamada mentions. Cada objeto nessa lista tem a seguinte estrutura.

O objeto de menções do Comment
Copy CopyRun External Link
1
2interface CommentUserMention {
3 /** O id do usuário. Para usuários SSO, isso terá seu id do tenant prefixado. **/
4 id: string
5 /** O texto final da @menção, incluindo o símbolo @. **/
6 tag: string
7 /** O texto original da @menção, incluindo o símbolo @. **/
8 rawTag: string
9 /** Que tipo de usuário foi marcado. user = conta FastComments.com. sso = SSOUser. **/
10 type: 'user'|'sso'
11 /** Se o usuário optar por não receber notificações, isto ainda será definido como true. **/
12 sent: boolean
13}
14

HashTags

Quando hashtags são usadas e parseadas com sucesso, a informação é armazenada em uma lista chamada hashTags. Cada objeto nessa lista tem a seguinte estrutura. Hashtags também podem ser adicionadas manualmente ao array hashTags do comentário para consulta, se retain estiver definido.

O objeto de HashTag do Comment
Copy CopyRun External Link
1
2interface CommentHashTag {
3 /** O id da hashtag. **/
4 id: string
5 /** O texto final da #hashtag, incluindo o símbolo #. **/
6 tag: string
7 /** Se a hashtag estiver associada a uma URL personalizada, isto será definido. **/
8 url?: string
9 /** Se deveríamos reter a hashtag, mesmo que não exista no texto do comentário, quando o comentário for atualizado. Útil para marcar comentários sem alterar o texto do comentário. **/
10 retain?: boolean
11}
12

Estrutura de Modelo de E-mail Internal Link


Um objeto EmailTemplate representa a configuração para um modelo de e-mail personalizado, para um tenant.

O sistema selecionará o modelo de e-mail a ser usado via:

  • Seu identificador de tipo, chamamos isto de emailTemplateId. Estes são constantes.
  • O domain. Primeiro tentaremos encontrar um template para o domínio ao qual o objeto relacionado (como um Comment) está vinculado, e se não for encontrada uma correspondência então tentaremos encontrar um template onde domain seja null ou *.

A estrutura para o objeto EmailTemplate é a seguinte:

Estrutura do Modelo de Email
Copy Copy
1
2interface EmailTemplate {
3 id: string
4 tenantId: string
5 emailTemplateId: string
6 displayName: string
7 /** SOMENTE LEITURA **/
8 createdAt: string
9 /** SOMENTE LEITURA **/
10 updatedAt: string
11 /** SOMENTE LEITURA **/
12 updatedByUserId: string
13 /** O domínio ao qual o modelo deve estar associado. **/
14 domain?: string | '*' | null
15 /** O conteúdo do modelo de e-mail em sintaxe EJS. **/
16 ejs: string
17 /** Um mapa de chaves de tradução sobrescritas para valores, para cada localidade suportada. **/
18 translationOverridesByLocale: Record<string, Record<string, string>>
19 /** Um objeto que representa o contexto de renderização do modelo. **/
20 testData: object
21}
22

Notas

  • Você pode obter os valores válidos de emailTemplateId a partir do endpoint /definitions.
  • O endpoint /definitions também inclui as traduções padrão e os dados de teste.
  • Os modelos não serão salvos se a estrutura ou os dados de teste forem inválidos.

Estrutura de Hashtag Internal Link

A HashTag object represents a tag that can be left by a user. HashTags can be used to link to an external piece of content or to tie related comments together.

The structure for the HashTag object is as follows:

Estrutura do HashTag
Copy Copy
1
2interface HashTag {
3 /** Deve começar com "#" ou com o caractere desejado. **/
4 tag: string
5 /** Uma URL opcional para a qual a hashtag pode apontar. Em vez de filtrar comentários pela hashtag, a interface do usuário redirecionará para esta ao clicar. **/
6 url?: string
7 /** READONLY **/
8 createdAt: string
9}
10

Notes:

  • In some API endpoints you will see that the hashtag is used in the URL. Remember to URI-Encoded values. For example, # should instead be represented as %23.
  • Some of these fields are marked READONLY - these are returned by the API but cannot be set.

Estrutura de Contagem de Notificações Internal Link

Um NotificationCount object representa a contagem de notificações não lidas e os metadados de um usuário.

Se não houver notificações não lidas, não haverá um NotificationCount para o usuário.

Objetos NotificationCount são criados automaticamente e não podem ser criados via API. Eles também expiram após um ano.

Você pode limpar a contagem de notificações não lidas de um usuário excluindo o seu NotificationCount.

A estrutura do objeto NotificationCount é a seguinte:

Estrutura do NotificationCount
Copy Copy
1
2interface NotificationCount {
3 id: string // id do usuário
4 count: number
5 createdAt: string // string de data
6 expireAt: string // string de data
7}
8

Estrutura de Notificação Internal Link

Um objeto Notification representa uma notificação para um usuário.

Objetos Notification são criados automaticamente e não podem ser criados via API. Eles também expiram após um ano. Notificações não podem ser excluídas. Elas podem, no entanto, ser atualizadas para definir viewed como false, e você pode consultar por viewed.

Um usuário também pode optar por não receber notificações para um comentário específico configurando optedOut na notificação para true. Você pode optar por receber novamente definindo para false.

Existem diferentes tipos de notificação - verifique relatedObjectType e type.

As formas como notificações são criadas são bastante flexíveis e podem ser acionadas por muitos cenários (veja NotificationType).

Atualmente, a existência de uma Notification não implica necessariamente que um e-mail foi ou deve ser enviado. Em vez disso, as notificações são usadas para o feed de notificações e integrações relacionadas.

A estrutura do objeto Notification é a seguinte:

Estrutura de Notification
Copy Copy
1
2enum NotificationObjectType {
3 Comment = 0,
4 Profile = 1,
5 Tenant = 2
6}
7
8enum NotificationType {
9 /** Se alguém respondeu para você. **/
10 RepliedToMe = 0,
11 /** Se alguém respondeu em qualquer lugar de uma thread (até filhos de filhos) de uma thread na qual você comentou. **/
12 RepliedTransientChild = 1,
13 /** Se seu comentário foi votado positivamente. **/
14 VotedMyComment = 2,
15 /** Se um novo comentário for deixado na raiz de uma página à qual você está inscrito. **/
16 SubscriptionReplyRoot = 3,
17 /** Se alguém comentou no seu perfil. **/
18 CommentedOnProfile = 4,
19 /** Se você tiver uma mensagem direta (DM). **/
20 DirectMessage = 5,
21 /** TrialLimits é apenas para usuários do tenant. **/
22 TrialLimits = 6,
23 /** Se você foi mencionado com @. **/
24 Mentioned = 7
25}
26
27interface Notification {
28 id: string
29 tenantId: string
30 /** With SSO, the user id is in the format `<tenant id>:<user id>`. **/
31 userId?: string
32 /** Ao trabalhar com SSO, você só precisa se preocupar com `userId`. **/
33 anonUserId?: string
34 /** urlId quase sempre está definido. Ele é opcional apenas para notificações em nível de tenant, que são infrequentes. **/
35 urlId?: string
36 /** A URL é armazenada em cache para navegação rápida até a origem da notificação. **/
37 url?: string
38 /** O título da página é armazenado em cache para leitura rápida da origem da notificação. **/
39 pageTitle?: string
40 relatedObjectType: NotificationObjectType
41 /** Por exemplo, id do comentário. **/
42 relatedObjectId: string
43 viewed: boolean
44 createdAt: string // string de data
45 type: NotificationType
46 fromCommentId?: string
47 fromVoteId?: string
48 /** fromUserName e fromUserAvatarSrc são armazenados em cache aqui para exibição rápida da notificação. Eles são atualizados quando o usuário é atualizado. **/
49 fromUserName: string
50 fromUserId: string
51 fromUserAvatarSrc?: string
52 /** Defina isto como true para parar de receber notificações para este objeto. **/
53 optedOut?: boolean
54}
55

Estrutura de Página Internal Link

Um Page object representa a página à qual muitos comentários podem pertencer. Esse relacionamento é definido por urlId.

Um Page armazena informações como o título da página, a contagem de comentários e urlId.

A estrutura do objeto Page é a seguinte:

Estrutura da Página
Copy Copy
1
2interface Page {
3 id: string
4 urlId: string
5 url: string
6 title?: string
7 createdAt: string
8 commentCount: number
9 rootCommentCount: number
10 /** Definir isto como null significa que todos os usuários SSO podem ver a página. Uma lista vazia significa que está fechada para todos os usuários. **/
11 accessibleByGroupIds?: string[] | null
12 /** Esta página está fechada para novos comentários? **/
13 isClosed?: boolean
14}
15

Estrutura de Evento de Webhook Pendente Internal Link

Um objeto PendingWebhookEvent representa um evento de webhook enfileirado que está pendente.

Objetos PendingWebhookEvent são criados automaticamente e não podem ser criados manualmente via API. Eles também expiram após um ano. Eles podem ser excluídos, o que remove a tarefa da fila.

Existem diferentes tipos de evento - verifique eventType (OutboundSyncEventType) e type (OutboundSyncType).

Um caso de uso comum para esta API é implementar monitoramento personalizado. Você pode querer chamar periodicamente o endpoint /count para consultar a contagem pendente para filtros dados.

A estrutura do objeto PendingWebhookEvent é a seguinte:

Estrutura de PendingWebhookEvent
Copy Copy
1
2enum OutboundSyncEventType {
3 Create: 0,
4 Delete: 1,
5 Update: 2
6}
7
8enum OutboundSyncType {
9 /** Tarefa de sincronização específica do WordPress. **/
10 WP: 0,
11 Webhook: 1
12}
13
14interface PendingWebhookEvent {
15 id: string
16 /** O id do comentário associado ao evento. **/
17 commentId: string
18 /** O objeto de comentário para o evento no momento do evento. Começamos a adicioná-los em nov de 2023. **/
19 comment: Comment
20 /** Um id externo que pode estar associado ao comentário. **/
21 externalId: string | null
22 createdAt: Date
23 tenantId: string
24 attemptCount: number
25 /** Definido antes da primeira tentativa e após cada falha. **/
26 nextAttemptAt: Date
27 /** Se este é um evento de criação, exclusão ou atualização... **/
28 eventType: OutboundSyncEventType
29 /** O tipo de sincronização a ser executada (WordPress, chamada de API, etc). **/
30 type: OutboundSyncType
31 /** O domínio que correspondeu ao comentário. Usamos este domínio para escolher a chave de API. **/
32 domain: string
33 /** O último erro ocorrido. Este tipo não é tipado e é um "dump" do que aconteceu. Geralmente contém um objeto com statusCode, body, e um mapa de headers. **/
34 lastError: object | null
35}
36

Estrutura de Usuário SSO Internal Link

FastComments fornece uma solução SSO fácil de usar. Atualizar as informações de um usuário com a integração baseada em HMAC é tão simples quanto fazer o usuário carregar a página com um payload atualizado.

No entanto, pode ser desejável gerenciar um usuário fora desse fluxo, para melhorar a consistência da sua aplicação.

A SSO User API fornece uma maneira de fazer CRUD em objetos que chamamos de SSOUsers. Esses objetos são diferentes dos Users regulares e mantidos separados por segurança de tipos.

A estrutura do objeto SSOUser é a seguinte:

Estrutura do SSOUser
Copy Copy
1
2interface SSOUser {
3 id: string
4 username: string
5 email?: string
6 websiteUrl?: string
7 signUpDate: number
8 createdFromUrlId?: string
9 loginCount?: number
10 avatarSrc?: string
11 optedInNotifications?: boolean
12 optedInSubscriptionNotifications?: boolean
13 displayLabel?: string
14 displayName?: string
15 isAccountOwner?: boolean // Permissão de administrador - Usuários SSO com essa flag são cobrados como SSO Admins (separados dos usuários SSO regulares)
16 isAdminAdmin?: boolean // Permissão de administrador - Usuários SSO com essa flag são cobrados como SSO Admins (separados dos usuários SSO regulares)
17 isCommentModeratorAdmin?: boolean // Permissão de moderador - Usuários SSO com essa flag são cobrados como SSO Moderators (separados dos usuários SSO regulares)
18 /** Se null, o Controle de Acesso não será aplicado ao usuário. Se uma lista vazia, este usuário não poderá ver nenhuma página nem @mention outros usuários. **/
19 groupIds?: string[] | null
20 createdFromSimpleSSO?: boolean
21 /** Não permita que outros usuários vejam a atividade deste usuário, incluindo comentários, em seu perfil. O padrão é true para fornecer perfis seguros por padrão. **/
22 isProfileActivityPrivate?: boolean
23 /** Não permita que outros usuários deixem comentários no perfil do usuário, ou vejam comentários de perfil existentes. Padrão false. **/
24 isProfileCommentsPrivate?: boolean
25 /** Não permita que outros usuários enviem mensagens diretas para este usuário. Padrão false. **/
26 isProfileDMDisabled?: boolean
27 karma?: number
28 /** Configuração opcional para insígnias do usuário. **/
29 badgeConfig?: {
30 /** Array de IDs de insígnias para atribuir ao usuário. Limitado a 30 insígnias. A ordem é respeitada. **/
31 badgeIds: string[]
32 /** Se true, substitui todas as insígnias exibidas existentes pelas fornecidas. Se false, adiciona às insígnias existentes. **/
33 override?: boolean
34 /** Se true, atualiza as propriedades de exibição das insígnias a partir da configuração do tenant. **/
35 update?: boolean
36 }
37}
38

Cobrança para Usuários SSO

Usuários SSO são cobrados de forma diferente com base em suas flags de permissão:

  • Usuários SSO regulares: Usuários sem permissões de administrador ou moderador são cobrados como usuários SSO regulares
  • SSO Admins: Usuários com as flags isAccountOwner ou isAdminAdmin são cobrados separadamente como SSO Admins (mesma tarifa que administradores regulares do tenant)
  • SSO Moderators: Usuários com a flag isCommentModeratorAdmin são cobrados separadamente como SSO Moderators (mesma tarifa que moderadores regulares)

Importante: Para evitar dupla cobrança, o sistema deduplica automaticamente usuários SSO em relação aos usuários e moderadores regulares do tenant pelo endereço de email. Se um usuário SSO tiver o mesmo email que um usuário ou moderador regular do tenant, ele não será cobrado duas vezes.

Controle de Acesso

Usuários podem ser divididos em grupos. É para isso que serve o campo groupIds, e é opcional.

@Menções

Por padrão @mentions usará username para buscar outros usuários SSO quando o caractere @ for digitado. Se displayName for usado, então resultados que correspondam a username serão ignorados quando houver uma correspondência por displayName, e os resultados da busca de @mention usarão displayName.

Assinaturas

Com o FastComments, os usuários podem se inscrever em uma página clicando no ícone de sino no widget de comentários e clicando em Assinar.

Com um usuário regular, nós enviamos emails de notificação com base nas configurações de notificação dele.

Com Usuários SSO, dividimos isso por compatibilidade com versões anteriores. Os usuários só receberão esses emails adicionais de notificação de assinatura se você definir optedInSubscriptionNotifications como true.

Insígnias

Você pode atribuir insígnias a usuários SSO usando a propriedade badgeConfig. Insígnias são indicadores visuais que aparecem ao lado do nome do usuário nos comentários.

  • badgeIds - Um array de IDs de insígnias para atribuir ao usuário. Estes devem ser IDs de insígnias válidos criados na sua conta FastComments. Limitado a 30 insígnias.
  • override - Se true, substitui todas as insígnias existentes exibidas pelas fornecidas. Se false ou omitido, as insígnias fornecidas serão adicionadas às insígnias existentes.
  • update - Se true, as propriedades de exibição das insígnias serão atualizadas a partir da configuração do tenant sempre que o usuário fizer login.

Estrutura de Assinatura Internal Link

Um Subscription object representa uma assinatura para um usuário.

Subscription objects are created when a user clicks the notification bell in the comment widget and clicks "Inscrever-se nesta página".

Subscriptions can also be created via the API.

Ter um objeto Subscription faz com que Notification objects sejam gerados, e emails enviados, quando novos comentários são deixados na raiz da página associada à qual a Subscription se refere. O envio de emails depende do tipo de usuário. Para usuários comuns isso depende de optedInNotifications. Para usuários SSO isso depende de optedInSubscriptionNotifications. Observe que algumas aplicações podem não ter o conceito de uma página acessível pela web, caso em que basta definir urlId como o id do item ao qual você está se inscrevendo (mesmo valor para urlId que você passaria para o widget de comentários).

A estrutura para o Subscription object é a seguinte:

Estrutura de Subscription
Copy Copy
1
2interface Subscription {
3 id: string
4 tenantId: string
5 /** Com SSO, o id do usuário tem o formato `<tenant id>:<user id>`. **/
6 userId: string
7 anonUserId?: string
8 urlId: string
9 url?: string
10 pageTitle?: string
11 createdAt: string // string de data
12}
13

Estrutura de Uso Diário do Locatário Internal Link

Um objeto TenantDailyUsage representa o uso para um tenant em um determinado dia. Se não houve atividade para um tenant em um determinado dia, esse dia não terá um objeto TenantDailyUsage.

O objeto TenantDailyUsage é NÃO em tempo real e pode estar com atraso de alguns minutos em relação ao uso real.

A estrutura do objeto TenantDailyUsage é a seguinte:

Estrutura do TenantDailyUsage
Copy Copy
1
2export interface TenantDailyUsage {
3 yearNumber: number
4 monthNumber: number
5 dayNumber: number
6 commentFetchCount?: number
7 commentCreateCount?: number
8 conversationCreateCount?: number
9 voteCount?: number
10 accountCreatedCount?: number
11 userMentionSearch?: number
12 hashTagSearch?: number
13 gifSearchTrending?: number
14 gifSearch?: number
15 apiCreditsUsed?: number
16 createdAt: string
17 billed: boolean
18 /** Ignorado para faturamento. **/
19 ignored: boolean
20}
21

Estrutura de Locatário Internal Link

O Tenant define um cliente do FastComments.com. Eles podem ser criados via API por tenants com acesso a white labeling. Tenants white-labeled não podem criar outros tenants white-labeled (apenas um nível de aninhamento é permitido).

A estrutura para o objeto Tenant é a seguinte:

Estrutura do Tenant
Copy Copy
1
2export enum SiteType {
3 Unknown = 0,
4 WordPress = 1
5}
6
7/** Isso também pode ser tratado pela API DomainConfig. **/
8export interface TenantDomainConfig {
9 domain: string
10 emailFromName?: string
11 emailFromEmail?: string
12 createdAt?: string,
13 siteType?: FastCommentsSiteType, // provavelmente você quer Unknown
14 logoSrc?: string, // caminho bruto da imagem
15 logoSrc100px?: string, // redimensionado para miniaturas
16 footerUnsubscribeURL?: string,
17 emailHeaders?: Record<string, string>,
18 disableUnsubscribeLinks?: boolean,
19 dkim?: {
20 domainName: string,
21 keySelector: string,
22 privateKey: string
23 }
24}
25
26export interface TenantBillingInfo {
27 name: string
28 address: string
29 city: string
30 state: string
31 zip: string
32 country: string
33}
34
35export enum TenantPaymentFrequency {
36 Monthly = 0,
37 Annually = 1
38}
39
40export interface Tenant {
41 id: string
42 name: string
43 email?: string
44 signUpDate: number; // number por razões "legacy"
45 packageId?: string | null
46 paymentFrequency?: TenantPaymentFrequency
47 billingInfoValid?: boolean
48 billingHandledExternally?: boolean
49 createdBy?: string
50 isSetup?: boolean
51 domainConfiguration: FastCommentsAPITenantDomainConfig[]
52 billingInfo?: FastCommentsAPITenantBillingInfo
53 stripeCustomerId?: string
54 stripeSubscriptionId?: string
55 stripePlanId?: string
56 enableProfanityFilter?: boolean
57 enableSpamFilter?: boolean
58 lastBillingIssueReminderDate?: string
59 removeUnverifiedComments?: boolean
60 unverifiedCommentsTTLms?: number
61 commentsRequireApproval?: boolean
62 autoApproveCommentOnVerification?: boolean
63 sendProfaneToSpam?: boolean
64 /** @readonly - É calculado com base em packageId. **/
65 hasFlexPricing?: boolean
66 /** @readonly **/
67 flexLastBilledAmount?: number
68 /** @readonly - É calculado com base em packageId. **/
69 hasAuditing?: boolean
70 /** You can store a key value pair with the tenant which you can use to query. Keys cannot contain "." or "$", or be longer than 100 chars. Values may not be longer than 2k chars. **/
71 meta?: Record<string, string | null>
72}
73

Estrutura de Usuário Internal Link

User é um objeto que representa o denominador mais comum entre todos os usuários.

Lembre-se que na FastComments temos diversos casos de uso diferentes para usuários:

  • Secure SSO
  • Simple SSO
  • Tenant Users (For example: Administrators)
  • Commenters

Esta API é para Commenters e usuários criados via Simple SSO. Basicamente, qualquer usuário criado através do seu site pode ser acessado por esta API. Tenant Users também podem ser obtidos desta forma, mas você obterá mais informações ao interagir com a API /tenant-users/.

Para Secure SSO por favor use a API /sso-users/.

Você não pode atualizar esses tipos de usuários. Eles criaram sua conta através do seu site, então fornecemos um acesso básico somente leitura, mas você não pode fazer alterações. Se você quiser ter esse tipo de fluxo - você precisa configurar Secure SSO.

A estrutura do objeto User é a seguinte:

Estrutura do User
Copy Copy
1
2export interface User {
3 /** Este também é o id usado como userId em objetos de comentário. **/
4 id: string
5 username: string
6 /** Um link para o blog do comentarista, por exemplo. **/
7 websiteUrl?: string
8 email: string
9 signUpDate: number
10 createdFromUrlId: string
11 createdFromTenantId: string
12 avatarSrc?: string
13 locale: FastCommentsLocale
14 displayLabel?: string
15 karma?: number
16}
17

Estrutura de Voto Internal Link


Um objeto Vote representa um voto deixado por um usuário.

A relação entre comentários e Vote é definida via commentId.

A estrutura para o objeto Vote é a seguinte:

Estrutura do Vote
Copy Copy
1
2interface Vote {
3 id: string
4 urlId: string
5 commentId: string
6 userId: string
7 direction: 1 | -1
8 createdAt: string
9}
10

Estrutura de Configuração de Pergunta Internal Link

FastComments fornece uma maneira de construir perguntas e agregar seus resultados. Um exemplo de pergunta (doravante chamado QuestionConfig) pode ser uma avaliação por estrelas, um controle deslizante ou uma pergunta NPS (determinada via type).

Os dados das perguntas podem ser agregados individualmente, em conjunto, ao longo do tempo, no geral, por página, e assim por diante.

O framework possui todas as capacidades necessárias para construir widgets no lado do cliente (com seu servidor na frente desta API), painéis de administração e ferramentas de relatório.

First, we have to define a QuestionConfig. The structure is as follows:

Estrutura do QuestionConfig
Copy Copy
1
2type QuestionConfigType = 'nps' | 'slider' | 'star' | 'thumbs';
3
4interface QuestionConfig {
5 id: string
6 tenantId: string
7 name: string
8 question: string
9 helpText?: string
10 createdAt: string
11 createdBy: string
12 /** SOMENTE LEITURA - incrementado a cada nova resposta. **/
13 usedCount: number
14 /** Uma string de data para quando a configuração foi usada pela última vez (resposta enviada). **/
15 lastUsed?: string
16 type: QuestionConfigType
17 numStars?: number
18 min?: number
19 max?: number
20 defaultValue?: number
21 labelNegative?: string
22 labelPositive?: string
23 subQuestionIds?: string[]
24 alwaysShowSubQuestions?: boolean
25 reportingOrder: number
26}
27

Estrutura de Resultado de Pergunta Internal Link

Para salvar resultados de perguntas, você cria um QuestionResult. Você pode então agregar resultados de perguntas, e também vinculá-los a comentários para fins de relatório.

Estrutura de QuestionResult
Copy Copy
1
2interface QuestionResultMeta {
3 name: string
4 values: string[]
5}
6
7interface QuestionResult {
8 id: string
9 tenantId: string
10 urlId: string
11 anonUserId?: string
12 userId?: string
13 createdAt?: string
14 value: number
15 commentId?: string
16 questionId: string
17 meta?: QuestionResultMeta[]
18}
19

Estrutura de Insígnia do Usuário Internal Link

UserBadge é um objeto que representa um distintivo atribuído a um usuário no sistema FastComments.

Distintivos podem ser atribuídos a usuários automaticamente com base em sua atividade (como contagem de comentários, tempo de resposta, status de veterano) ou manualmente por administradores do site.

A estrutura do objeto UserBadge é a seguinte:

Estrutura do UserBadge
Copy Copy
1
2export interface UserBadge {
3 /** Identificador único para esta atribuição de distintivo do usuário */
4 id: string
5 /** ID do usuário a quem este distintivo está atribuído */
6 userId: string
7 /** ID da definição do distintivo no catálogo de distintivos do tenant */
8 badgeId: string
9 /** ID do tenant que criou/atribuiu este distintivo */
10 fromTenantId: string
11 /** Quando este distintivo foi criado (milissegundos desde a epoch) */
12 createdAt?: number
13 /** Quando este distintivo foi recebido pelo usuário (milissegundos desde a epoch) */
14 receivedAt?: number
15 /**
16 * O tipo do distintivo:
17 * 0=CommentCount, 1=CommentUpVotes, 2=CommentReplies, 3=CommentsPinned,
18 * 4=Veteran, 5=NightOwl, 6=FastReplyTime, 7=ModeratorCommentsDeleted,
19 * 8=ModeratorCommentsApproved, 9=ModeratorCommentsUnapproved, 10=ModeratorCommentsReviewed,
20 * 11=ModeratorCommentsMarkedSpam, 12=ModeratorCommentsMarkedNotSpam, 13=RepliedToSpecificPage,
21 * 14=Manual
22 */
23 type: number
24 /** Para distintivos baseados em limiar, o valor do limiar */
25 threshold?: number
26 /** O nome/etiqueta do distintivo */
27 name?: string
28 /** Descrição detalhada do distintivo */
29 description?: string
30 /** O texto exibido no distintivo */
31 displayLabel?: string
32 /** URL para uma imagem exibida no distintivo */
33 displaySrc?: string
34 /** Cor de fundo do distintivo (código hexadecimal) */
35 backgroundColor?: string
36 /** Cor da borda do distintivo (código hexadecimal) */
37 borderColor?: string
38 /** Cor do texto do distintivo (código hexadecimal) */
39 textColor?: string
40 /** Classe CSS adicional para estilização */
41 cssClass?: string
42 /** Para distintivos de veterano, o limite de tempo em milissegundos */
43 veteranUserThresholdMillis?: number
44 /** Indica se este distintivo é exibido nos comentários do usuário */
45 displayedOnComments: boolean
46 /** A ordem de exibição do distintivo */
47 order?: number
48}
49
---

Estrutura de Progresso de Insígnia do Usuário Internal Link

UserBadgeProgress é um objeto que representa o progresso de um usuário na conquista de várias insígnias no sistema FastComments.

Esse acompanhamento ajuda a determinar quando os usuários devem receber insígnias automáticas com base em sua atividade e participação na sua comunidade.

A estrutura do objeto UserBadgeProgress é a seguinte:

Estrutura UserBadgeProgress
Copy Copy
1
2export interface UserBadgeProgress {
3 /** Identificador único para este registro de progresso */
4 id: string
5 /** ID do locatário ao qual este registro de progresso pertence */
6 tenantId: string
7 /** ID do usuário que este registro de progresso rastreia */
8 userId: string
9 /** ID do primeiro comentário do usuário no sistema */
10 firstCommentId?: string
11 /** Data do primeiro comentário do usuário (milissegundos desde epoch) */
12 firstCommentDate?: number
13 /** Fator de confiança calculado automaticamente com base na atividade do usuário */
14 autoTrustFactor?: number
15 /** Fator de confiança definido manualmente pelos administradores */
16 manualTrustFactor?: number
17 /** Objeto de progresso detalhado com várias métricas, chaves correspondem ao enum BadgeType */
18 progress: {
19 /** 0: CommentCount - Contagem de comentários que o usuário fez */
20 '0'?: number
21 /** 1: CommentUpVotes - Contagem de votos positivos que o usuário recebeu */
22 '1'?: number
23 /** 2: CommentReplies - Contagem de respostas que o usuário fez */
24 '2'?: number
25 /** 3: CommentsPinned - Contagem de comentários fixados que o usuário possui */
26 '3'?: number
27 /** 4: Veteran - Idade da conta do usuário */
28 '4'?: number
29 /** 5: NightOwl - Quantas vezes o usuário postou durante horários noturnos */
30 '5'?: number
31 /** 6: FastReplyTime - Tempo médio de resposta em milissegundos */
32 '6'?: number
33 /** 7: ModeratorCommentsDeleted - Para insígnias de moderador, contagem de comentários excluídos */
34 '7'?: number
35 /** 8: ModeratorCommentsApproved - Para insígnias de moderador, contagem de comentários aprovados */
36 '8'?: number
37 /** 9: ModeratorCommentsUnapproved - Para insígnias de moderador, contagem de comentários não aprovados */
38 '9'?: number
39 /** 10: ModeratorCommentsReviewed - Para insígnias de moderador, contagem de comentários revisados */
40 '10'?: number
41 /** 11: ModeratorCommentsMarkedSpam - Para insígnias de moderador, contagem de comentários marcados como spam */
42 '11'?: number
43 /** 12: ModeratorCommentsMarkedNotSpam - Para insígnias de moderador, contagem de comentários marcados como não spam */
44 '12'?: number
45 /** 13: RepliedToSpecificPage - Para cada página, contagem de respostas */
46 '13'?: Record<string, number>
47 }
48}
49
---

Conclusão

Esperamos que você tenha achado nossa documentação da API completa e fácil de entender. Se encontrar alguma lacuna, avise-nos abaixo.