API do komentarzy dla dyskusji na żywo

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.

Jedna platforma, trzy API

FastComments to coś więcej niż komentarze. Buduj dyskusje, moderację i kanały społecznościowe na tym samym API i zestawie SDK.

API komentarzy

Wątkowe komentarze i czat na żywo. Pobieraj, publikuj, głosuj, przypinaj, odpowiadaj i wyszukuj, z wbudowanym SSO i aktualizacjami w czasie rzeczywistym.

API moderacji

Dedykowana warstwa moderacji z ponad 40 endpointami. Zatwierdzaj, oznaczaj, blokuj, banuj, zamykaj i audytuj, z automatycznym filtrowaniem spamu.

API kanału społecznościowego

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.

Wywołuj API z dowolnego stosu technologicznego

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.

Instalacjanpm 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'
Instalacjapip 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)
Instalacjacomposer 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;
}
Instalacjagem 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
Instalacjago 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();

Subskrybuj kanał na żywo

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.

Instalacjanpm 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();
Instalacjanpm 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();
Instalacjapip 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'

Natywne mobilne SDK, gotowe do wdrożenia

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.

React Native

npm: fastcomments-react-native-sdk

Natywne komponenty, bez webview. Wstaw FastCommentsLiveCommenting, FastCommentsLiveChat lub FastCommentsFeed i przekaż konfigurację.

Zobacz demo na żywo

Android

com.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 GitHubie

iOS

Swift 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 GitHubie

Elementy, które w innym razie musiałbyś zbudować sam

Ponad 200 endpointów REST

Jeden klucz API, jeden bazowy URL. Wszystko, co robi panel, może też robić Twój kod.

SDK dla ponad 10 języków

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.

Czas rzeczywisty przez WebSockets

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.

Moderacja, SSO i ochrona przed spamem

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.

Hostowane i skalowane za Ciebie

Prowadzimy magazyn danych i infrastrukturę czasu rzeczywistego w globalnej sieci. Ty wywołujesz API i wdrażasz.

Co możesz zbudować

Jedno API i zestaw SDK za wątkami komentarzy, czatem i aktywnością na żywo w aplikacjach webowych, mobilnych i serwerowych.

Pokoje czatu na żywo

Przesyłaj wiadomości do wszystkich w pokoju w czasie rzeczywistym, z licznikami obecności i informacją o pisaniu.

Wątki komentarzy

Dodaj zagnieżdżone sekcje komentarzy z głosowaniem do artykułów, produktów i postów za pomocą kilku wywołań API.

Kanały aktywności

Publikuj w kanale i przesyłaj nowe elementy oraz reakcje do połączonych klientów w miarę ich napływania.

Pytania i odpowiedzi oraz ankiety

Zbieraj pytania, odpowiedzi, głosy i wyniki ankiet, a następnie porządkuj je i wyświetlaj na żywo.

Na żywo w trzech krokach

1

Zdobądź swój klucz API

Rozpocznij bezpłatny okres próbny i pobierz swój identyfikator tenanta oraz klucz API z panelu.

2

Zainstaluj SDK

Dodaj SDK dla swojego języka lub wywołuj REST API bezpośrednio za pomocą cURL i swojego nagłówka x-api-key.

3

Pobieraj, publikuj i działaj na żywo

Wczytaj komentarze, publikuj z poziomu backendu i subskrybuj zmiany, aby przesyłać aktualizacje do każdego czytelnika.

Globalnie rozproszone i wysoce dostępne

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.

Multi-master, wieloregionowo

Zapisy są przyjmowane w więcej niż jednym regionie i replikowane między nimi, więc nie ma pojedynczego punktu awarii.

Nasza własna sieć brzegowa

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.

Automatyczne przełączanie awaryjne

Nadmiarowe węzły przełączają się samodzielnie, więc ruch płynie dalej podczas awarii. Poparte 99.99% dostępności.

Regionalne przechowywanie danych

Działaj w regionie US lub EU. Region EU pod adresem eu.fastcomments.com przechowuje dane w regionie zgodnie z wymogami zgodności.

Dołącz do naszych zadowolonych klientów

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

FAQ dotyczące API komentarzy

Czy muszę używać widżetu FastComments?

Nie. Widżet jest opcjonalny. Całe środowisko komentarzy możesz zbudować na REST API i SDK oraz renderować wszystko samodzielnie.

Które języki mają SDK?

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.

Jak działa czas rzeczywisty?

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.

Czy muszę uruchamiać własny serwer WebSocket?

Nie. FastComments hostuje infrastrukturę czasu rzeczywistego. Twój klient subskrybuje za pomocą SDK, a my dostarczamy zdarzenia.

Jak języki bez natywnego subskrybenta pozostają na żywo?

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.

Jak działa paginacja?

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.

Czy jest bezpłatny okres próbny?

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.

Gdzie jest dokumentacja API?

Pełna dokumentacja REST API i SDK znajduje się pod adresem docs.fastcomments.com, gdzie udokumentowany jest każdy endpoint, parametr i odpowiedź.

Czy mogę przechowywać dane w UE?

Tak. FastComments udostępnia region EU pod adresem eu.fastcomments.com, a SDK obsługują kierowanie ruchu do niego.

Zacznij budować w kilka minut

Rozpocznij bezpłatny okres próbny, zdobądź swój klucz API i już dziś dodaj dyskusje na żywo do swojej aplikacji.