API za komentare za diskusije uživo

Komentari, moderacija i društveni fidovi kroz jedan REST API i SDK-ove za 10+ jezika. Preuzimajte, objavljujte i moderirajte sa svog bekenda, a zatim strimujte novu aktivnost svakom čitaocu u realnom vremenu preko WebSockets-a.

Jedna platforma, tri API-ja

FastComments je više od komentara. Gradite diskusije, moderaciju i društvene fidove na istom skupu API-ja i SDK-ova.

API za komentare

Ulančani komentari i ćaskanje uživo. Preuzimajte, objavljujte, glasajte, zakačite, odgovarajte i pretražujte, uz ugrađeni SSO i ažuriranja u realnom vremenu.

API za moderaciju

Namenska površina za moderaciju sa 40+ krajnjih tačaka. Odobravajte, označavajte, blokirajte, banujte, zaključavajte i revidirajte, uz automatsko filtriranje spama.

API za društveni fid

Gradite fidove aktivnosti i društvene fidove sa objavama, medijima, reakcijama i praćenjima, a zatim gurajte nove objave svakom klijentu uživo.

Pozivajte API iz bilo kog steka

cURL i tipizirani SDK-ovi za Node, Python, PHP, Ruby, Go, Java, Rust, Swift i C++. Preko 200 krajnjih tačaka pokriva komentare, glasove, stranice, SSO korisnike, objave u fidu, moderaciju i obaveštenja, sve iza jednog API ključa.

Instalirajnpm 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'
Instalirajpip 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)
Instalirajcomposer 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;
}
Instalirajgem 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
Instalirajgo 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 fid uživo

Otvorite jednu vezu i primajte svaki novi komentar, izmenu, glas i ažuriranje prisustva u trenutku kada se dogodi. Nijedan događaj se ne propušta: pri ponovnom povezivanju, event log se ponovo preuzima da bi se reprodukovalo sve što je poslato dok je klijent bio van mreže. Nativni WebSocket pretplatnici dolaze za Node, React Native, Java, Swift i C++. Svaki drugi jezik ostaje u realnom vremenu anketiranjem event log-a.

Instalirajnpm 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();
Instalirajnpm 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();
Instalirajpip 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 izgradnju i održavanje sopstvenog korisničkog interfejsa za komentare. Naši namenski, održavani SDK-ovi za React Native, Android i iOS dolaze sa nativnim UI komponentama za ulančane komentare, ćaskanje uživo i fidove. Ubacite prikaz, prosledite konfiguraciju i gotovi ste.

React Native

npm: fastcomments-react-native-sdk

Nativne komponente, bez webview-a. Ubacite FastCommentsLiveCommenting, FastCommentsLiveChat ili FastCommentsFeed i prosledite konfiguraciju.

Pogledajte demo uživo

Android

com.fastcomments:sdk

Nativne Android UI komponente. Dodajte FastCommentsView u svoj raspored za ulančane komentare, glasanje, obaveštenja i fidove. Android 8.0+.

Pogledajte na GitHub-u

iOS

Swift Package: FastCommentsUI

Nativna SwiftUI biblioteka za ulančane komentare, društvene fidove i ćaskanje uživo. iOS 16+ i macOS 14+.

Pogledajte na GitHub-u

Delovi koje biste inače sami gradili

200+ REST krajnjih tačaka

Jedan API ključ, jedan osnovni URL. Sve što radi kontrolna tabla, može i vaš kod.

SDK-ovi za 10+ jezika

Tipizirani klijenti za Node, Python, PHP, Ruby, Go, Java, Rust, Swift, C++ i druge, tako da gradite u svom steku, a ne u našem.

Realno vreme preko WebSockets-a

Novi komentari stižu do svakog čitaoca u trenutku objavljivanja, bez osvežavanja i bez anketiranja. Ako se čitalac ponovo poveže, propušteni događaji se reprodukuju iz loga.

Moderacija, SSO i zaštita od spama

Jedinstvena prijava, moderacija komentara i filtriranje spama su ugrađeni, tako da su teški delovi rešeni pre nego što napišete ijednu liniju.

Hostovano i skalirano umesto vas

Mi upravljamo skladištem i infrastrukturom za realno vreme na globalnoj mreži. Vi pozivate API i isporučujete.

Šta možete da izgradite

Jedan skup API-ja i SDK-ova iza niti komentara, ćaskanja i aktivnosti uživo na veb, mobilnim i serverskim aplikacijama.

Sobe za ćaskanje uživo

Strimujte poruke svima u sobi u realnom vremenu, uz broj prisutnih i aktivnost kucanja.

Niti komentara

Dodajte ugneždene odeljke za komentare sa glasanjem člancima, proizvodima i objavama uz nekoliko API poziva.

Fidovi aktivnosti

Objavljujte u fid i gurajte nove stavke i reakcije povezanim klijentima čim stignu.

Pitanja i odgovori i 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č

Započnite besplatnu probu i preuzmite svoj tenant ID i API ključ sa kontrolne table.

2

Instalirajte SDK

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

3

Preuzmite, objavite i pustite uživo

Učitajte komentare, objavljujte sa svog bekenda i pretplatite se na promene da biste strimovali ažuriranja svakom čitaocu.

Globalno distribuirano i visoko dostupno

FastComments radi u više regiona na našoj sopstvenoj infrastrukturi. Upisi se repliciraju između regiona, čvorovi se automatski prebacuju na rezervne, a čitaoci se uslužuju sa lokacije koja im je najbliža.

Multi-master, više regiona

Upisi se prihvataju u više od jednog regiona i repliciraju između njih, tako da ne postoji jedinstvena tačka otkaza.

Naša sopstvena edge mreža

Komentari i mediji se uslužuju sa našeg sopstvenog globalnog CDN-a i DNS-a, isporučeni sa lokacije najbliže vašim korisnicima. Bez CDN-a treće strane.

Automatsko prebacivanje na rezervu

Redundantni čvorovi se sami prebacuju na rezervu, tako da saobraćaj nastavlja da teče tokom ispada. Podržano sa 99.99% vremena rada.

Regionalno čuvanje podataka

Radite u US ili EU regionu. EU region na eu.fastcomments.com čuva podatke u regionu radi usklađenosti.

Pridružite se našim zadovoljnim kupcima

Hiljade zadovoljnih kupaca nam veruju za našu izuzetnu uslugu, pouzdanost i inovativna rešenja. Pridružite se našoj rastućoj zajednici i doživite razliku danas!

Počnite

Često postavljana pitanja o API-ju za komentare

Da li moram da koristim FastComments vidžet?

Ne. Vidžet je opcioni. Možete izgraditi ceo doživljaj komentarisanja na REST API-ju i SDK-ovima i sve prikazati 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 takođe može direktno da pozove REST API.

Kako funkcioniše realno vreme?

Klijenti otvaraju WebSocket i primaju nove komentare, izmene, glasove i ažuriranja prisustva kao događaje, tako da nema osvežavanja ni anketiranja. Nijedan događaj se ne propušta: ako se klijent prekine, ponovo preuzima event log pri ponovnom povezivanju da bi reprodukovao sve što je poslato dok je bio van mreže.

Da li moram da pokrenem sopstveni WebSocket server?

Ne. FastComments hostuje infrastrukturu za realno vreme. Vaš klijent se pretplaćuje pomoću SDK-a, a mi isporučujemo događaje.

Kako jezici bez nativnog pretplatnika ostaju uživo?

Oni anketiraju krajnju tačku event log-a, koja vraća svaku promenu od određenog vremenskog žiga. Node, React Native, Java, Swift i C++ SDK-ovi umesto toga uključuju nativni WebSocket pretplatnik.

Kako funkcioniše paginacija?

Konkretno za komentare, FastComments unapred izračunava paginaciju pri svakom upisu radi optimalnog vremena učitavanja, tako da se čak i veoma velike niti brzo paginiraju.

Da li postoji besplatna proba?

Da. Započnite besplatnu probu sa punim pristupom API-ju i SDK-ovima, bez potrebe za kreditnom karticom. Posle probe, plaćeni planovi se skaliraju prema vašem saobraćaju.

Gde je API dokumentacija?

Kompletna referenca za REST API i SDK nalazi se na docs.fastcomments.com, gde su dokumentovane sve krajnje tačke, parametri i odgovori.

Da li mogu da čuvam podatke u EU?

Da. FastComments nudi EU region na eu.fastcomments.com, a SDK-ovi podržavaju usmeravanje ka njemu.

Počnite da gradite za nekoliko minuta

Započnite besplatnu probu, preuzmite svoj API ključ i dodajte diskusije uživo u svoju aplikaciju već danas.