API за коментаре за дискусије уживо

Коментари, модерација и друштвени фидови кроз један REST API и SDK-ове за 10+ језика. Преузимајте, објављујте и модерирајте са свог бекенда, а затим стримујте нову активност сваком читаоцу у реалном времену преко WebSockets-а.

Једна платформа, три API-ја

FastComments је више од коментара. Градите дискусије, модерацију и друштвене фидове на истом скупу API-ја и SDK-ова.

API за коментаре

Уланчани коментари и ћаскање уживо. Преузимајте, објављујте, гласајте, закачите, одговарајте и претражујте, уз уграђени SSO и ажурирања у реалном времену.

API за модерацију

Наменска површина за модерацију са 40+ крајњих тачака. Одобравајте, означавајте, блокирајте, банујте, закључавајте и ревидирајте, уз аутоматско филтрирање спама.

API за друштвени фид

Градите фидове активности и друштвене фидове са објавама, медијима, реакцијама и праћењима, а затим гурајте нове објаве сваком клијенту уживо.

Позивајте API из било ког стека

cURL и типизирани SDK-ови за Node, Python, PHP, Ruby, Go, Java, Rust, Swift и C++. Преко 200 крајњих тачака покрива коментаре, гласове, странице, SSO кориснике, објаве у фиду, модерацију и обавештења, све иза једног API кључа.

Инсталирајnpm 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'
Инсталирајpip 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)
Инсталирај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 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
Инсталирајgo 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();

Претплатите се на фид уживо

Отворите једну везу и примајте сваки нови коментар, измену, глас и ажурирање присуства у тренутку када се догоди. Ниједан догађај се не пропушта: при поновном повезивању, event log се поново преузима да би се репродуковало све што је послато док је клијент био ван мреже. Нативни WebSocket претплатници долазе за Node, React Native, Java, Swift и C++. Сваки други језик остаје у реалном времену анкетирањем event log-а.

Инсталирајnpm 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();
Инсталирајnpm 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();
Инсталирајpip 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'

Нативни мобилни SDK-ови, спремни за уградњу

Прескочите изградњу и одржавање сопственог корисничког интерфејса за коментаре. Наши наменски, одржавани SDK-ови за React Native, Android и iOS долазе са нативним UI компонентама за уланчане коментаре, ћаскање уживо и фидове. Убаците приказ, проследите конфигурацију и готови сте.

React Native

npm: fastcomments-react-native-sdk

Нативне компоненте, без webview-а. Убаците FastCommentsLiveCommenting, FastCommentsLiveChat или FastCommentsFeed и проследите конфигурацију.

Погледајте демо уживо

Android

com.fastcomments:sdk

Нативне Android UI компоненте. Додајте FastCommentsView у свој распоред за уланчане коментаре, гласање, обавештења и фидове. Android 8.0+.

Погледајте на GitHub-у

iOS

Swift Package: FastCommentsUI

Нативна SwiftUI библиотека за уланчане коментаре, друштвене фидове и ћаскање уживо. iOS 16+ и macOS 14+.

Погледајте на GitHub-у

Делови које бисте иначе сами градили

200+ REST крајњих тачака

Један API кључ, један основни URL. Све што ради контролна табла, може и ваш код.

SDK-ови за 10+ језика

Типизирани клијенти за Node, Python, PHP, Ruby, Go, Java, Rust, Swift, C++ и друге, тако да градите у свом стеку, а не у нашем.

Реално време преко WebSockets-а

Нови коментари стижу до сваког читаоца у тренутку објављивања, без освежавања и без анкетирања. Ако се читалац поново повеже, пропуштени догађаји се репродукују из лога.

Модерација, SSO и заштита од спама

Јединствена пријава, модерација коментара и филтрирање спама су уграђени, тако да су тешки делови решени пре него што напишете иједну линију.

Хостовано и скалирано уместо вас

Ми управљамо складиштем и инфраструктуром за реално време на глобалној мрежи. Ви позивате API и испоручујете.

Шта можете да изградите

Један скуп API-ја и SDK-ова иза нити коментара, ћаскања и активности уживо на веб, мобилним и серверским апликацијама.

Собе за ћаскање уживо

Стримујте поруке свима у соби у реалном времену, уз број присутних и активност куцања.

Нити коментара

Додајте угнеждене одељке за коментаре са гласањем чланцима, производима и објавама уз неколико API позива.

Фидови активности

Објављујте у фид и гурајте нове ставке и реакције повезаним клијентима чим стигну.

Питања и одговори и анкете

Прикупљајте питања, одговоре, гласове и резултате анкета, а затим их рангирајте и приказујте уживо.

Уживо у три корака

1

Набавите свој API кључ

Започните бесплатну пробу и преузмите свој tenant ID и API кључ са контролне табле.

2

Инсталирајте SDK

Додајте SDK за свој језик или позовите REST API директно помоћу cURL-а и свог x-api-key заглавља.

3

Преузмите, објавите и пустите уживо

Учитајте коментаре, објављујте са свог бекенда и претплатите се на промене да бисте стримовали ажурирања сваком читаоцу.

Глобално дистрибуирано и високо доступно

FastComments ради у више региона на нашој сопственој инфраструктури. Уписи се реплицирају између региона, чворови се аутоматски пребацују на резервне, а читаоци се услужују са локације која им је најближа.

Мулти-мастер, више региона

Уписи се прихватају у више од једног региона и реплицирају између њих, тако да не постоји јединствена тачка отказа.

Наша сопствена edge мрежа

Коментари и медији се услужују са нашег сопственог глобалног CDN-а и DNS-а, испоручени са локације најближе вашим корисницима. Без CDN-а треће стране.

Аутоматско пребацивање на резерву

Редундантни чворови се сами пребацују на резерву, тако да саобраћај наставља да тече током испада. Подржано са 99.99% времена рада.

Регионално чување података

Радите у US или EU региону. EU регион на eu.fastcomments.com чува податке у региону ради усклађености.

Придружите се нашим задовољним купцима

Хиљаде задовољних купаца нам верују због наше изузетне услуге, поузданости и иновативних решења. Придружите се нашој растућој заједници и искусите разлику већ данас!

Почните

Често постављана питања о API-ју за коментаре

Да ли морам да користим FastComments виџет?

Не. Виџет је опциони. Можете изградити цео доживљај коментарисања на REST API-ју и SDK-овима и све приказати сами.

Који језици имају SDK?

Node, Python, PHP, Ruby, Go, Java, Rust, Swift, C++ и Nim, уз React Native SDK за мобилне уређаје. Било који језик такође може директно да позове REST API.

Како функционише реално време?

Клијенти отварају WebSocket и примају нове коментаре, измене, гласове и ажурирања присуства као догађаје, тако да нема освежавања ни анкетирања. Ниједан догађај се не пропушта: ако се клијент прекине, поново преузима event log при поновном повезивању да би репродуковао све што је послато док је био ван мреже.

Да ли морам да покренем сопствени WebSocket сервер?

Не. FastComments хостује инфраструктуру за реално време. Ваш клијент се претплаћује помоћу SDK-а, а ми испоручујемо догађаје.

Како језици без нативног претплатника остају уживо?

Они анкетирају крајњу тачку event log-а, која враћа сваку промену од одређеног временског жига. Node, React Native, Java, Swift и C++ SDK-ови уместо тога укључују нативни WebSocket претплатник.

Како функционише пагинација?

Конкретно за коментаре, FastComments унапред израчунава пагинацију при сваком упису ради оптималног времена учитавања, тако да се чак и веома велике нити брзо пагинирају.

Да ли постоји бесплатна проба?

Да. Започните бесплатну пробу са пуним приступом API-ју и SDK-овима, без потребе за кредитном картицом. После пробе, плаћени планови се скалирају према вашем саобраћају.

Где је API документација?

Комплетна референца за REST API и SDK налази се на docs.fastcomments.com, где су документоване све крајње тачке, параметри и одговори.

Да ли могу да чувам податке у EU?

Да. FastComments нуди EU регион на eu.fastcomments.com, а SDK-ови подржавају усмеравање ка њему.

Почните да градите за неколико минута

Започните бесплатну пробу, преузмите свој API кључ и додајте дискусије уживо у своју апликацију већ данас.