Komentari, moderacija i društveni feedovi kroz jedan REST API i SDK-ove za više od 10 jezika. Dohvaćajte, objavljujte i moderirajte iz svog backenda, a zatim prenosite novu aktivnost svakom čitatelju u stvarnom vremenu preko WebSocketa.
FastComments je više od komentara. Izradite rasprave, moderaciju i društvene feedove na istom skupu API-ja i SDK-ova.
Ugniježđeni komentari i chat uživo. Dohvaćajte, objavljujte, glasujte, prikvačite, odgovarajte i pretražujte, uz ugrađeni SSO i ažuriranja u stvarnom vremenu.
Namjenska površina za moderaciju s više od 40 endpointa. Odobravajte, označavajte, blokirajte, banirajte, zaključavajte i pratite promjene, uz automatsko filtriranje neželjenog sadržaja.
Izradite feedove aktivnosti i društvene feedove s objavama, medijskim sadržajem, reakcijama i praćenjima, a zatim prenosite nove objave svakom klijentu uživo.
cURL i tipizirani SDK-ovi za Node, Python, PHP, Ruby, Go, Java, Rust, Swift i C++. Više od 200 endpointa pokriva komentare, glasove, stranice, SSO korisnike, objave u feedu, moderaciju i obavijesti, sve iza jednog API ključa.
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();
Otvorite jednu vezu i primajte svaki novi komentar, uređivanje, glas i ažuriranje prisutnosti u trenutku kad se dogodi. Nijedan događaj se ne propušta: pri ponovnom povezivanju event log se ponovno dohvaća kako bi se reproduciralo sve što je poslano dok je klijent bio izvan mreže. Nativni WebSocket pretplatnici dostupni su za Node, React Native, Java, Swift i C++. Svaki drugi jezik ostaje u stvarnom vremenu ispitivanjem event loga.
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'
Preskočite izradu i održavanje vlastitog sučelja za komentare. Naši namjenski, održavani SDK-ovi za React Native, Android i iOS donose nativne UI komponente za ugniježđene komentare, chat uživo i feedove. Ubacite prikaz, proslijedite konfiguraciju i gotovi ste.
npm: fastcomments-react-native-sdk
Nativne komponente, bez webviewa. Ubacite FastCommentsLiveCommenting, FastCommentsLiveChat ili FastCommentsFeed i proslijedite konfiguraciju.
Pogledajte demo uživocom.fastcomments:sdk
Nativne Android UI komponente. Dodajte FastCommentsView u svoj raspored za ugniježđene komentare, glasovanje, obavijesti i feedove. Android 8.0+.
Pogledajte na GitHubuSwift Package: FastCommentsUI
Nativna SwiftUI biblioteka za ugniježđene komentare, društvene feedove i chat uživo. iOS 16+ i macOS 14+.
Pogledajte na GitHubuJedan API ključ, jedan osnovni URL. Sve što radi nadzorna ploča, može i vaš kod.
Tipizirani klijenti za Node, Python, PHP, Ruby, Go, Java, Rust, Swift, C++ i druge, tako da razvijate u svom tehnološkom skupu umjesto u našem.
Novi komentari stižu do svakog čitatelja u trenutku objave, bez osvježavanja i bez ispitivanja. Ako se čitatelj ponovno poveže, propušteni događaji reproduciraju se iz loga.
Jedinstvena prijava, moderacija komentara i filtriranje neželjenog sadržaja ugrađeni su, pa su teški dijelovi riješeni prije nego što napišete i jedan redak.
Mi vodimo pohranu i infrastrukturu za stvarno vrijeme preko globalne mreže. Vi pozivate API i objavljujete.
Jedan skup API-ja i SDK-ova iza niti komentara, chata i aktivnosti uživo na webu, mobitelu i poslužiteljskim aplikacijama.
Prenosite poruke svima u sobi u stvarnom vremenu, uz brojanje prisutnih i aktivnost tipkanja.
Dodajte ugniježđene odjeljke komentara s mogućnošću glasovanja na članke, proizvode i objave uz nekoliko API poziva.
Objavljujte u feed i prenosite nove stavke i reakcije povezanim klijentima čim stignu.
Prikupljajte pitanja, odgovore, glasove i rezultate anketa, a zatim ih rangirajte i prikazujte uživo.
Pokrenite besplatno probno razdoblje i preuzmite ID najmoprimca i API ključ s nadzorne ploče.
Dodajte SDK za svoj jezik ili pozivajte REST API izravno pomoću cURL-a i svog x-api-key zaglavlja.
Učitajte komentare, objavljujte iz svog backenda i pretplatite se na promjene kako biste prenosili ažuriranja svakom čitatelju.
FastComments radi u više regija na vlastitoj infrastrukturi. Zapisi se repliciraju između regija, čvorovi se automatski prebacuju u slučaju kvara, a čitatelji se poslužuju s lokacije koja im je najbliža.
Zapisi se prihvaćaju u više od jedne regije i repliciraju između njih, tako da nema pojedinačne točke kvara.
Komentari i medijski sadržaj poslužuju se s naše vlastite globalne CDN i DNS mreže, isporučeni s lokacije najbliže vašim korisnicima. Bez CDN-a treće strane.
Redundantni čvorovi sami se prebacuju u slučaju kvara, tako da promet nastavlja teći tijekom ispada. Uz 99.99% dostupnosti.
Radite u SAD-u ili EU. EU regija na eu.fastcomments.com čuva podatke unutar regije radi usklađenosti.
Tisuće zadovoljnih kupaca vjeruju nam zbog naše iznimne usluge, pouzdanosti i inovativnih rješenja. Pridružite se našoj rastućoj zajednici i osjetite razliku već danas!
Započnite
Ne. Widget je opcionalan. Cijelo iskustvo komentiranja možete izraditi na REST API-ju i SDK-ovima i sve prikazivati sami.
Node, Python, PHP, Ruby, Go, Java, Rust, Swift, C++ i Nim, uz React Native SDK za mobilne uređaje. Bilo koji jezik može i izravno pozivati REST API.
Klijenti otvaraju WebSocket i primaju nove komentare, uređivanja, glasove i ažuriranja prisutnosti kao događaje, tako da nema osvježavanja ni ispitivanja. Nijedan događaj se ne propušta: ako se klijent odspoji, pri ponovnom povezivanju ponovno dohvaća event log kako bi reproducirao sve što je poslano dok je bio izvan mreže.
Ne. FastComments hostira infrastrukturu za stvarno vrijeme. Vaš klijent se pretplaćuje putem SDK-a, a mi isporučujemo događaje.
Ispituju endpoint event loga, koji vraća svaku promjenu od nekog vremenskog žiga. SDK-ovi za Node, React Native, Java, Swift i C++ umjesto toga uključuju nativni WebSocket pretplatnik.
Konkretno za komentare, FastComments unaprijed izračunava straničenje pri svakom zapisu radi optimalnog vremena učitavanja, tako da se čak i vrlo velike niti brzo straniče.
Da. Pokrenite besplatno probno razdoblje s punim pristupom API-ju i SDK-ovima, bez potrebe za kreditnom karticom. Nakon probnog razdoblja, plaćeni planovi skaliraju se s vašim prometom.
Potpuna referenca REST API-ja i SDK-ova nalazi se na docs.fastcomments.com, gdje su dokumentirani svaki endpoint, parametar i odgovor.
Da. FastComments poslužuje EU regiju na eu.fastcomments.com, a SDK-ovi podržavaju usmjeravanje na nju.
Pokrenite besplatno probno razdoblje, preuzmite svoj API ključ i danas dodajte rasprave uživo u svoju aplikaciju.