Komentarze, moderacja i kanały społecznościowe przez jedno REST API oraz SDK dla ponad 10 języków. Pobieraj, publikuj i moderuj z poziomu swojego backendu, a następnie przesyłaj nową aktywność do każdego czytelnika w czasie rzeczywistym przez WebSockets.
FastComments to coś więcej niż komentarze. Buduj dyskusje, moderację i kanały społecznościowe na tym samym API i zestawie SDK.
Wątkowe komentarze i czat na żywo. Pobieraj, publikuj, głosuj, przypinaj, odpowiadaj i wyszukuj, z wbudowanym SSO i aktualizacjami w czasie rzeczywistym.
Dedykowana warstwa moderacji z ponad 40 endpointami. Zatwierdzaj, oznaczaj, blokuj, banuj, zamykaj i audytuj, z automatycznym filtrowaniem spamu.
Twórz kanały aktywności i społecznościowe z postami, mediami, reakcjami i obserwowaniem, a następnie przesyłaj nowe posty do każdego klienta na żywo.
cURL i typowane SDK dla Node, Python, PHP, Ruby, Go, Java, Rust, Swift i C++. Ponad 200 endpointów obejmuje komentarze, głosy, strony, użytkowników SSO, posty w kanale, moderację i powiadomienia, wszystko za jednym kluczem 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();
Otwórz jedno połączenie i odbieraj każdy nowy komentarz, edycję, głos i aktualizację obecności w momencie, gdy się pojawia. Żadne zdarzenie nie zostaje pominięte: po ponownym połączeniu event log jest pobierany na nowo, aby odtworzyć wszystko, co zostało wysłane, gdy klient był offline. Natywni subskrybenci WebSocket są dostępni dla Node, React Native, Java, Swift i C++. Każdy inny język pozostaje w czasie rzeczywistym dzięki odpytywaniu 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'
Nie musisz budować i utrzymywać własnego interfejsu komentarzy. Nasze dedykowane, aktualizowane SDK dla React Native, Androida i iOS dostarczają natywne komponenty UI do wątkowych komentarzy, czatu na żywo i kanałów. Wstaw widok, przekaż konfigurację i gotowe.
npm: fastcomments-react-native-sdk
Natywne komponenty, bez webview. Wstaw FastCommentsLiveCommenting, FastCommentsLiveChat lub FastCommentsFeed i przekaż konfigurację.
Zobacz demo na żywocom.fastcomments:sdk
Natywne komponenty UI dla Androida. Dodaj FastCommentsView do swojego układu, aby uzyskać wątkowe komentarze, głosowanie, powiadomienia i kanały. Android 8.0+.
Zobacz na GitHubieSwift Package: FastCommentsUI
Natywna biblioteka SwiftUI do wątkowych komentarzy, kanałów społecznościowych i czatu na żywo. iOS 16+ i macOS 14+.
Zobacz na GitHubieJeden klucz API, jeden bazowy URL. Wszystko, co robi panel, może też robić Twój kod.
Typowane klienty dla Node, Python, PHP, Ruby, Go, Java, Rust, Swift, C++ i innych, dzięki czemu budujesz w swoim stosie technologicznym, a nie w naszym.
Nowe komentarze docierają do każdego czytelnika w momencie publikacji, bez odświeżania i bez odpytywania. Gdy czytelnik połączy się ponownie, pominięte zdarzenia są odtwarzane z logu.
Logowanie jednokrotne, moderacja komentarzy i filtrowanie spamu są wbudowane, więc najtrudniejsze części są obsłużone, zanim napiszesz choćby jedną linię kodu.
Prowadzimy magazyn danych i infrastrukturę czasu rzeczywistego w globalnej sieci. Ty wywołujesz API i wdrażasz.
Jedno API i zestaw SDK za wątkami komentarzy, czatem i aktywnością na żywo w aplikacjach webowych, mobilnych i serwerowych.
Przesyłaj wiadomości do wszystkich w pokoju w czasie rzeczywistym, z licznikami obecności i informacją o pisaniu.
Dodaj zagnieżdżone sekcje komentarzy z głosowaniem do artykułów, produktów i postów za pomocą kilku wywołań API.
Publikuj w kanale i przesyłaj nowe elementy oraz reakcje do połączonych klientów w miarę ich napływania.
Zbieraj pytania, odpowiedzi, głosy i wyniki ankiet, a następnie porządkuj je i wyświetlaj na żywo.
Rozpocznij bezpłatny okres próbny i pobierz swój identyfikator tenanta oraz klucz API z panelu.
Dodaj SDK dla swojego języka lub wywołuj REST API bezpośrednio za pomocą cURL i swojego nagłówka x-api-key.
Wczytaj komentarze, publikuj z poziomu backendu i subskrybuj zmiany, aby przesyłać aktualizacje do każdego czytelnika.
FastComments działa w wielu regionach na naszej własnej infrastrukturze. Zapisy replikują się między regionami, węzły przełączają się automatycznie w razie awarii, a czytelnicy są obsługiwani z najbliższej im lokalizacji.
Zapisy są przyjmowane w więcej niż jednym regionie i replikowane między nimi, więc nie ma pojedynczego punktu awarii.
Komentarze i media są obsługiwane z naszego własnego globalnego CDN i DNS, dostarczane z najbliższej Twoim użytkownikom lokalizacji. Bez zewnętrznego CDN.
Nadmiarowe węzły przełączają się samodzielnie, więc ruch płynie dalej podczas awarii. Poparte 99.99% dostępności.
Działaj w regionie US lub EU. Region EU pod adresem eu.fastcomments.com przechowuje dane w regionie zgodnie z wymogami zgodności.
Tysiące zadowolonych klientów ufa nam za wyjątkową obsługę, niezawodność i innowacyjne rozwiązania. Dołącz do naszej rosnącej społeczności i poczuj różnicę już dziś!
Rozpocznij
Nie. Widżet jest opcjonalny. Całe środowisko komentarzy możesz zbudować na REST API i SDK oraz renderować wszystko samodzielnie.
Node, Python, PHP, Ruby, Go, Java, Rust, Swift, C++ i Nim, a także SDK dla React Native na urządzenia mobilne. Każdy język może też wywoływać REST API bezpośrednio.
Klienty otwierają WebSocket i odbierają nowe komentarze, edycje, głosy i aktualizacje obecności jako zdarzenia, więc nie ma odświeżania ani odpytywania. Żadne zdarzenie nie zostaje pominięte: jeśli klient się rozłączy, po ponownym połączeniu pobiera event log na nowo, aby odtworzyć wszystko, co zostało wysłane, gdy był offline.
Nie. FastComments hostuje infrastrukturę czasu rzeczywistego. Twój klient subskrybuje za pomocą SDK, a my dostarczamy zdarzenia.
Odpytują endpoint event log, który zwraca każdą zmianę od danego znacznika czasu. SDK dla Node, React Native, Java, Swift i C++ zawierają zamiast tego natywny subskrybent WebSocket.
W przypadku komentarzy FastComments wstępnie oblicza paginację przy każdym zapisie, aby uzyskać optymalny czas ładowania, dzięki czemu nawet bardzo duże wątki paginują się szybko.
Tak. Rozpocznij bezpłatny okres próbny z pełnym dostępem do API i SDK, bez karty kredytowej. Po okresie próbnym płatne plany skalują się wraz z Twoim ruchem.
Pełna dokumentacja REST API i SDK znajduje się pod adresem docs.fastcomments.com, gdzie udokumentowany jest każdy endpoint, parametr i odpowiedź.
Tak. FastComments udostępnia region EU pod adresem eu.fastcomments.com, a SDK obsługują kierowanie ruchu do niego.
Rozpocznij bezpłatny okres próbny, zdobądź swój klucz API i już dziś dodaj dyskusje na żywo do swojej aplikacji.