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 работи в няколко региона върху нашата собствена инфраструктура. Записите се репликират между регионите, възлите превключват автоматично при отказ, а читателите се обслужват от най-близкото до тях местоположение.

Multi-master, много региони

Записите се приемат в повече от един регион и се репликират между тях, така че няма единична точка на отказ.

Нашата собствена 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, която връща всяка промяна от даден момент. SDK за Node, React Native, Java, Swift и C++ вместо това включват нативен WebSocket абонат.

Как работи странирането?

Конкретно за коментарите, FastComments предварително изчислява странирането при всеки запис за оптимални времена на зареждане, така че дори много големи нишки се странират бързо.

Има ли безплатен пробен период?

Да. Стартирайте безплатен пробен период с пълен достъп до API и SDK, без нужда от кредитна карта. След пробния период платените планове се мащабират спрямо вашия трафик.

Къде е документацията на API?

Пълната справка за REST API и SDK се намира на docs.fastcomments.com, където всяка крайна точка, параметър и отговор е документиран.

Мога ли да пазя данните в EU?

Да. FastComments обслужва EU регион на eu.fastcomments.com, а SDK поддържат насочване към него.

Започнете да разработвате за минути

Стартирайте безплатен пробен период, вземете своя API ключ и добавете дискусии на живо към вашето приложение днес.