Comentários, moderação e feeds sociais através de uma única API REST e SDKs para mais de 10 linguagens. Busque, publique e modere pelo seu backend e, em seguida, transmita cada nova atividade para todos os leitores em tempo real via WebSockets.
O FastComments é muito mais do que comentários. Crie discussões, moderação e feeds sociais sobre o mesmo conjunto de API e SDKs.
Comentários encadeados e chat ao vivo. Busque, publique, vote, fixe, responda e pesquise, com SSO e atualizações em tempo real já integrados.
Uma superfície de moderação dedicada com mais de 40 endpoints. Aprove, sinalize, bloqueie, bana, trave e audite, com filtragem automática de spam por trás.
Crie feeds de atividades e sociais com posts, mídia, reações e seguidores e, em seguida, envie novos posts para cada cliente ao vivo.
cURL e SDKs tipados para Node, Python, PHP, Ruby, Go, Java, Rust, Swift e C++. Mais de 200 endpoints cobrem comentários, votos, páginas, usuários SSO, posts de feed, moderação e notificações, todos protegidos por uma única chave de API.
npm install fastcomments-sdkimport { createFastCommentsSDK } from 'fastcomments-sdk/server';
const sdk = createFastCommentsSDK({
apiKey: 'your-api-key', // server-side only
basePath: 'https://fastcomments.com' // optional (default)
});
// Fetch comments for a page
const { comments } = await sdk.publicApi.getCommentsPublic({
tenantId: 'your-tenant-id',
urlId: 'page-url-id'
});
// Post a comment
await sdk.publicApi.createCommentPublic({
tenantId: 'your-tenant-id',
broadcastId: crypto.randomUUID(),
createComment: {
urlId: 'page-url-id',
url: 'https://example.com/post',
comment: 'Hello from the API!',
commenterName: 'Alice'
}
});
# Fetch comments for a page curl -s 'https://fastcomments.com/api/v1/comments?tenantId=your-tenant-id&urlId=page-url-id' \ -H 'x-api-key: YOUR_API_KEY'
pip install fastcommentsimport client
from client.api.public_api import GetCommentsPublicOptions
configuration = client.Configuration(host="https://fastcomments.com")
with client.ApiClient(configuration) as api_client:
api = client.PublicApi(api_client)
response = api.get_comments_public(
"your-tenant-id",
"page-url-id",
GetCommentsPublicOptions(page=0, limit=30),
)
for comment in response.comments:
print(comment.commenter_name, comment.comment)
composer require fastcomments/fastcomments-php<?php
require_once(__DIR__ . '/vendor/autoload.php');
$api = new FastComments\Client\Api\PublicApi(new GuzzleHttp\Client());
$result = $api->getCommentsPublic('your-tenant-id', 'page-url-id', [
'page' => 0,
'limit' => 30,
]);
foreach ($result->getComments() as $comment) {
echo $comment->getCommenterName() . ': ' . $comment->getComment() . PHP_EOL;
}
gem install fastcommentsrequire 'fastcomments-client'
api = FastCommentsClient::PublicApi.new
result = api.get_comments_public('your-tenant-id', 'page-url-id', { page: 0, limit: 30 })
result.comments.each do |comment|
puts "#{comment.commenter_name}: #{comment.comment}"
end
go get github.com/fastcomments/fastcomments-gopackage main
import (
"context"
"fmt"
openapiclient "github.com/fastcomments/fastcomments-go/client"
)
func main() {
client := openapiclient.NewAPIClient(openapiclient.NewConfiguration())
resp, _, err := client.PublicAPI.
GetCommentsPublic(context.Background(), "your-tenant-id").
UrlId("page-url-id").Page(0).Limit(30).Execute()
if err != nil {
panic(err)
}
for _, c := range resp.Comments {
fmt.Printf("%s: %s\n", c.GetCommenterName(), c.GetComment())
}
}
import com.fastcomments.invoker.ApiClient;
import com.fastcomments.invoker.Configuration;
import com.fastcomments.api.PublicApi;
ApiClient client = Configuration.getDefaultApiClient();
client.setBasePath("https://fastcomments.com");
PublicApi api = new PublicApi(client);
var result = api.getCommentsPublic("your-tenant-id", "page-url-id")
.page(0)
.limit(30)
.execute();
System.out.println(result.getComments());
use fastcomments_sdk::client::apis::configuration::Configuration;
use fastcomments_sdk::client::apis::public_api::{get_comments_public, GetCommentsPublicParams};
let config = Configuration::new();
let params = GetCommentsPublicParams {
tenant_id: "your-tenant-id".to_string(),
url_id: "page-url-id".to_string(),
page: Some(0),
limit: Some(30),
..Default::default()
};
let result = get_comments_public(&config, params).await.unwrap();
for comment in result.comments {
println!("{:?}: {:?}", comment.commenter_name, comment.comment);
}
import FastCommentsSwift
var options = PublicAPI.GetCommentsPublicOptions()
options.page = 0
options.limit = 30
let result = try await PublicAPI.getCommentsPublic(
tenantId: "your-tenant-id",
urlId: "page-url-id",
options: options
)
print(result.comments ?? [])
#include "FastCommentsClient/api/PublicApi.h"
#include "FastCommentsClient/ApiClient.h"
#include "FastCommentsClient/ApiConfiguration.h"
using namespace org::openapitools::client::api;
auto config = std::make_shared<ApiConfiguration>();
config->setBaseUrl(utility::conversions::to_string_t("https://fastcomments.com"));
PublicApi publicApi(std::make_shared<ApiClient>(config));
auto resp = publicApi.getCommentsPublic(
utility::conversions::to_string_t("your-tenant-id"),
utility::conversions::to_string_t("page-url-id")
).get();
Abra uma única conexão e receba cada novo comentário, edição, voto e atualização de presença no momento em que acontece. Nenhum evento é perdido: ao reconectar, o event log é buscado novamente para reproduzir tudo o que foi enviado enquanto o cliente estava offline. Os assinantes nativos de WebSocket estão disponíveis para Node, React Native, Java, Swift e C++. Todas as outras linguagens permanecem em tempo real fazendo polling no event log.
npm install fastcomments-sdkimport { subscribeToChanges, LiveEventType } from 'fastcomments-sdk/browser';
const config = { tenantId: 'your-tenant-id', urlId: 'page-url-id' };
const subscription = subscribeToChanges(
config,
'your-tenant-id', // tenantIdWS
'page-url-id', // urlIdWS
'user-session-id', // userIdWS (from the getComments response)
(event) => {
if (event.type === LiveEventType.new_comment) {
console.log('New comment:', event.comment?.comment);
}
return true; // event handled
},
(isConnected) => console.log(isConnected ? 'connected' : 'disconnected')
);
// later: subscription.close();
npm install fastcomments-react-native-sdkimport React, { useState } from 'react';
import { FastCommentsLiveCommenting } from 'fastcomments-react-native-sdk';
import { FastCommentsCommentWidgetConfig } from 'fastcomments-typescript';
export default function Comments() {
// <FastCommentsLiveCommenting> subscribes to the live feed automatically.
const [config] = useState<FastCommentsCommentWidgetConfig>({
tenantId: 'your-tenant-id',
urlId: 'page-url-id',
showLiveRightAway: true,
countAll: true,
});
return <FastCommentsLiveCommenting config={config} />;
}
import com.fastcomments.pubsub.LiveEventSubscriber;
import com.fastcomments.pubsub.SubscribeToChangesResult;
import com.fastcomments.core.CommentWidgetConfig;
import com.fastcomments.model.LiveEventType;
CommentWidgetConfig config = new CommentWidgetConfig();
config.tenant = "your-tenant-id";
config.urlId = "page-url-id";
LiveEventSubscriber subscriber = new LiveEventSubscriber();
SubscribeToChangesResult result = subscriber.subscribeToChanges(
config,
"your-tenant-id", // tenantIdWS
"page-url-id", // urlId
"page-url-id", // urlIdWS
"my-presence-id", // userIdWS
null, // canSeeCommentsCallback (optional)
(event) -> {
if (event.getType() == LiveEventType.NEW_COMMENT) {
System.out.println("New comment: " + event.getComment().getId());
}
}
);
// later: result.close();
import FastCommentsSwift
let config = LiveEventConfig(
tenantId: "your-tenant-id",
urlId: "page-url-id",
urlIdWS: "page-url-id", // URL-safe id for the WS server
userIdWS: "my-presence-id"
)
let subscriber = LiveEventSubscriber()
let result = subscriber.subscribeToChanges(config: config) { event in
if event.type == .newComment, let comment = event.comment {
print("New comment: \(comment.id ?? "")")
}
}
// later: result?.close()
#include <fastcomments/live/live_stream.hpp>
#include <iostream>
using namespace fastcomments::live;
LiveStreamConfig cfg;
cfg.wsBaseUrl = "wss://fastcomments.com"; // no trailing slash
LiveStream stream(cfg);
stream.onEvent([](const LiveEvent& ev) {
if (ev.type == EventType::NewComment) {
std::cout << "New comment at " << ev.timestamp << std::endl;
}
});
stream.subscribe("your-tenant-id", "page-url-id", "my-presence-id").wait();
// later: stream.close().wait();
pip install fastcommentsimport time
import client
configuration = client.Configuration(host="https://fastcomments.com")
with client.ApiClient(configuration) as api_client:
api = client.PublicApi(api_client)
start_time = int(time.time() * 1000) # ms epoch
while True:
result = api.get_event_log(
"your-tenant-id", "page-url-id", "my-user-id", start_time
)
for event in result.events:
print("event:", event.data)
start_time = int(event.created_at.timestamp() * 1000) + 1
time.sleep(2)
# startTime = epoch millis to replay from; advance it past the last event you saw curl -s 'https://fastcomments.com/api/v1/event-log/your-tenant-id?urlId=page-url-id&userIdWS=my-user-id&startTime=1720560000000' \ -H 'x-api-key: YOUR_API_KEY'
Deixe de criar e manter sua própria interface de comentários. Nossos SDKs dedicados e mantidos para React Native, Android e iOS trazem componentes de UI nativos para comentários encadeados, chat ao vivo e feeds. Insira uma view, passe uma configuração e pronto.
npm: fastcomments-react-native-sdk
Componentes nativos, sem webview. Insira FastCommentsLiveCommenting, FastCommentsLiveChat ou FastCommentsFeed e passe uma configuração.
Ver a demonstração ao vivocom.fastcomments:sdk
Componentes de UI nativos para Android. Adicione FastCommentsView ao seu layout para comentários encadeados, votação, notificações e feeds. Android 8.0+.
Ver no GitHubSwift Package: FastCommentsUI
Uma biblioteca SwiftUI nativa para comentários encadeados, feeds sociais e chat ao vivo. iOS 16+ e macOS 14+.
Ver no GitHubUma chave de API, uma URL base. Tudo o que o painel faz, o seu código também pode fazer.
Clientes tipados para Node, Python, PHP, Ruby, Go, Java, Rust, Swift, C++ e mais, para que você construa na sua stack em vez da nossa.
Novos comentários chegam a cada leitor no momento em que são publicados, sem atualizar a página e sem polling. Se um leitor reconecta, os eventos perdidos são reproduzidos a partir do log.
Single sign-on, moderação de comentários e filtragem de spam já vêm integrados, então as partes difíceis estão resolvidas antes de você escrever uma linha.
Nós operamos o armazenamento e a infraestrutura de tempo real em uma rede global. Você chama a API e coloca em produção.
Um único conjunto de API e SDKs por trás de threads de comentários, chat e atividade ao vivo em aplicativos web, mobile e de servidor.
Transmita mensagens para todos na sala em tempo real, com contagem de presença e atividade de digitação.
Adicione seções de comentários aninhadas e votáveis a artigos, produtos e posts com algumas chamadas de API.
Publique em um feed e envie novos itens e reações aos clientes conectados à medida que chegam.
Colete perguntas, respostas, votos e resultados de enquetes e, em seguida, ordene e exiba tudo ao vivo.
Inicie um teste gratuito e pegue o ID do seu tenant e a chave de API no painel.
Adicione o SDK da sua linguagem ou chame a API REST diretamente com cURL e seu cabeçalho x-api-key.
Carregue comentários, publique pelo seu backend e assine as mudanças para transmitir atualizações a cada leitor.
O FastComments opera em várias regiões na nossa própria infraestrutura. As escritas replicam entre regiões, os nós fazem failover automaticamente e os leitores são atendidos a partir do local mais próximo deles.
As escritas são aceitas em mais de uma região e replicadas entre elas, de modo que não há um único ponto de falha.
Comentários e mídia são servidos a partir da nossa própria CDN e DNS globais, entregues a partir do local mais próximo dos seus usuários. Sem CDN de terceiros.
Nós redundantes fazem failover por conta própria, então o tráfego continua fluindo durante uma indisponibilidade. Com 99.99% de uptime.
Opere nos EUA ou na UE. A região da UE em eu.fastcomments.com mantém os dados na região para fins de conformidade.
Milhares de clientes satisfeitos confiam em nós pelo nosso serviço excepcional, confiabilidade e soluções inovadoras. Junte-se à nossa crescente comunidade e experimente a diferença hoje mesmo!
Começar
Não. O widget é opcional. Você pode construir toda a sua experiência de comentários sobre a API REST e os SDKs e renderizar tudo por conta própria.
Node, Python, PHP, Ruby, Go, Java, Rust, Swift, C++ e Nim, além de um SDK React Native para mobile. Qualquer linguagem também pode chamar a API REST diretamente.
Os clientes abrem um WebSocket e recebem novos comentários, edições, votos e atualizações de presença como eventos, sem atualizar a página e sem polling. Nenhum evento é perdido: se um cliente se desconecta, ele busca novamente o event log ao reconectar para reproduzir tudo o que foi enviado enquanto estava offline.
Não. O FastComments hospeda a infraestrutura de tempo real. Seu cliente se inscreve com o SDK e nós entregamos os eventos.
Elas fazem polling no endpoint do event log, que retorna cada mudança desde um timestamp. Os SDKs de Node, React Native, Java, Swift e C++ incluem, em vez disso, um assinante WebSocket nativo.
Para comentários especificamente, o FastComments pré-calcula a paginação a cada escrita para tempos de carregamento ideais, de modo que até mesmo threads muito grandes paginam rapidamente.
Sim. Inicie um teste gratuito com acesso completo à API e aos SDKs, sem necessidade de cartão de crédito. Após o teste, os planos pagos escalam conforme o seu tráfego.
A referência completa da API REST e dos SDKs fica em docs.fastcomments.com, onde cada endpoint, parâmetro e resposta está documentado.
Sim. O FastComments oferece uma região na UE em eu.fastcomments.com, e os SDKs suportam o roteamento para ela.
Inicie um teste gratuito, pegue sua chave de API e adicione discussões ao vivo ao seu aplicativo hoje mesmo.