API za komentiranje za rasprave uživo

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.

Jedna platforma, tri API-ja

FastComments je više od komentara. Izradite rasprave, moderaciju i društvene feedove na istom skupu API-ja i SDK-ova.

API za komentare

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.

API za moderaciju

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.

API za društveni feed

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.

Pozivajte API iz bilo kojeg tehnološkog skupa

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.

Instalacijanpm install fastcomments-sdk
import { 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'
Instalacijapip install fastcomments
import 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)
Instalacijacomposer 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;
}
Instalacijagem install fastcomments
require '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
Instalacijago get github.com/fastcomments/fastcomments-go
package 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();

Pretplatite se na feed uživo

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.

Instalacijanpm install fastcomments-sdk
import { 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();
Instalacijanpm install fastcomments-react-native-sdk
import 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();
Instalacijapip install fastcomments
import 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'

Nativni mobilni SDK-ovi, spremni za ugradnju

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.

React Native

npm: fastcomments-react-native-sdk

Nativne komponente, bez webviewa. Ubacite FastCommentsLiveCommenting, FastCommentsLiveChat ili FastCommentsFeed i proslijedite konfiguraciju.

Pogledajte demo uživo

Android

com.fastcomments:sdk

Nativne Android UI komponente. Dodajte FastCommentsView u svoj raspored za ugniježđene komentare, glasovanje, obavijesti i feedove. Android 8.0+.

Pogledajte na GitHubu

iOS

Swift Package: FastCommentsUI

Nativna SwiftUI biblioteka za ugniježđene komentare, društvene feedove i chat uživo. iOS 16+ i macOS 14+.

Pogledajte na GitHubu

Dijelovi koje biste inače morali sami izraditi

Više od 200 REST endpointa

Jedan API ključ, jedan osnovni URL. Sve što radi nadzorna ploča, može i vaš kod.

SDK-ovi za više od 10 jezika

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.

Stvarno vrijeme preko WebSocketa

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.

Moderacija, SSO i zaštita od neželjenog sadržaja

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.

Hostano i skalirano umjesto vas

Mi vodimo pohranu i infrastrukturu za stvarno vrijeme preko globalne mreže. Vi pozivate API i objavljujete.

Što možete izraditi

Jedan skup API-ja i SDK-ova iza niti komentara, chata i aktivnosti uživo na webu, mobitelu i poslužiteljskim aplikacijama.

Sobe za chat uživo

Prenosite poruke svima u sobi u stvarnom vremenu, uz brojanje prisutnih i aktivnost tipkanja.

Niti komentara

Dodajte ugniježđene odjeljke komentara s mogućnošću glasovanja na članke, proizvode i objave uz nekoliko API poziva.

Feedovi aktivnosti

Objavljujte u feed i prenosite nove stavke i reakcije povezanim klijentima čim stignu.

Pitanja i odgovori te ankete

Prikupljajte pitanja, odgovore, glasove i rezultate anketa, a zatim ih rangirajte i prikazujte uživo.

Uživo u tri koraka

1

Nabavite svoj API ključ

Pokrenite besplatno probno razdoblje i preuzmite ID najmoprimca i API ključ s nadzorne ploče.

2

Instalirajte SDK

Dodajte SDK za svoj jezik ili pozivajte REST API izravno pomoću cURL-a i svog x-api-key zaglavlja.

3

Dohvatite, objavite i krenite uživo

Učitajte komentare, objavljujte iz svog backenda i pretplatite se na promjene kako biste prenosili ažuriranja svakom čitatelju.

Globalno distribuirano i visoko dostupno

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.

Multi-master, multi-regija

Zapisi se prihvaćaju u više od jedne regije i repliciraju između njih, tako da nema pojedinačne točke kvara.

Naša vlastita rubna mreža

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.

Automatsko prebacivanje u slučaju kvara

Redundantni čvorovi sami se prebacuju u slučaju kvara, tako da promet nastavlja teći tijekom ispada. Uz 99.99% dostupnosti.

Regionalna rezidentnost podataka

Radite u SAD-u ili EU. EU regija na eu.fastcomments.com čuva podatke unutar regije radi usklađenosti.

Pridružite se našim zadovoljnim kupcima

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

Česta pitanja o API-ju za komentiranje

Moram li koristiti FastComments widget?

Ne. Widget je opcionalan. Cijelo iskustvo komentiranja možete izraditi na REST API-ju i SDK-ovima i sve prikazivati sami.

Koji jezici imaju SDK?

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.

Kako funkcionira stvarno vrijeme?

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.

Trebam li pokretati vlastiti WebSocket poslužitelj?

Ne. FastComments hostira infrastrukturu za stvarno vrijeme. Vaš klijent se pretplaćuje putem SDK-a, a mi isporučujemo događaje.

Kako jezici bez nativnog pretplatnika ostaju uživo?

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.

Kako funkcionira straničenje?

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.

Postoji li besplatno probno razdoblje?

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.

Gdje je API dokumentacija?

Potpuna referenca REST API-ja i SDK-ova nalazi se na docs.fastcomments.com, gdje su dokumentirani svaki endpoint, parametar i odgovor.

Mogu li čuvati podatke u EU?

Da. FastComments poslužuje EU regiju na eu.fastcomments.com, a SDK-ovi podržavaju usmjeravanje na nju.

Počnite graditi u nekoliko minuta

Pokrenite besplatno probno razdoblje, preuzmite svoj API ključ i danas dodajte rasprave uživo u svoju aplikaciju.