Коментари, модерация и социални емисии чрез един REST API и SDK за 10+ езика. Извличайте, публикувайте и модерирайте от вашия бекенд, след което предавайте нова активност до всеки читател в реално време през WebSockets.
FastComments е нещо повече от коментари. Изградете дискусии, модерация и социални емисии върху един и същ набор от API и SDK.
Коментари в нишки и чат на живо. Извличане, публикуване, гласуване, закачване, отговаряне и търсене, с вградени SSO и обновявания в реално време.
Специализирана повърхност за модерация с 40+ крайни точки. Одобряване, маркиране, блокиране, забраняване, заключване и одит, подкрепени от автоматично филтриране на спам.
Изградете емисии с активност и социални емисии с публикации, медия, реакции и последвания, след което изпращайте нови публикации до всеки клиент на живо.
cURL и типизирани SDK за Node, Python, PHP, Ruby, Go, Java, Rust, Swift и C++. Над 200 крайни точки покриват коментари, гласове, страници, SSO потребители, публикации в емисии, модерация и известия, всичко зад един API ключ.
npm install fastcomments-sdkimport { 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 fastcommentsimport 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 fastcommentsrequire '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-gopackage 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-sdkimport { 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-sdkimport 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 fastcommentsimport 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 за React Native, Android и iOS предлагат нативни UI компоненти за коментари в нишки, чат на живо и емисии. Вградете изглед, подайте конфигурация и сте готови.
npm: fastcomments-react-native-sdk
Нативни компоненти, без webview. Вградете FastCommentsLiveCommenting, FastCommentsLiveChat или FastCommentsFeed и подайте конфигурация.
Вижте демото на живоcom.fastcomments:sdk
Нативни Android UI компоненти. Добавете FastCommentsView към вашето оформление за коментари в нишки, гласуване, известия и емисии. Android 8.0+.
Вижте в GitHubSwift Package: FastCommentsUI
Нативна SwiftUI библиотека за коментари в нишки, социални емисии и чат на живо. iOS 16+ и macOS 14+.
Вижте в GitHubЕдин API ключ, един базов URL. Всичко, което прави таблото за управление, може да прави и вашият код.
Типизирани клиенти за Node, Python, PHP, Ruby, Go, Java, Rust, Swift, C++ и други, за да разработвате във вашия стек вместо в нашия.
Новите коментари достигат до всеки читател в момента на публикуване, без опресняване и без опрос. Ако читател се свърже отново, пропуснатите събития се възпроизвеждат от лога.
Единично влизане, модерация на коментари и филтриране на спам са вградени, така че трудните части са решени, преди да напишете и ред.
Ние управляваме съхранението и инфраструктурата в реално време в глобална мрежа. Вие извиквате API и пускате в продукция.
Един набор от API и SDK зад нишки от коментари, чат и активност на живо в уеб, мобилни и сървърни приложения.
Предавайте съобщения до всички в стаята в реално време, с броячи на присъствие и активност при писане.
Добавете вложени секции с коментари с възможност за гласуване към статии, продукти и публикации с няколко API извиквания.
Публикувайте в емисия и изпращайте нови елементи и реакции към свързаните клиенти при пристигането им.
Събирайте въпроси, отговори, гласове и резултати от анкети, след което ги класирайте и показвайте на живо.
Стартирайте безплатен пробен период и вземете вашия tenant ID и API ключ от таблото за управление.
Добавете SDK за вашия език или извиквайте REST API директно с cURL и вашия x-api-key хедър.
Заредете коментари, публикувайте от вашия бекенд и се абонирайте за промени, за да предавате обновявания до всеки читател.
FastComments работи в няколко региона върху нашата собствена инфраструктура. Записите се репликират между регионите, възлите превключват автоматично при отказ, а читателите се обслужват от най-близкото до тях местоположение.
Записите се приемат в повече от един регион и се репликират между тях, така че няма единична точка на отказ.
Коментарите и медията се обслужват от нашия собствен глобален CDN и DNS, доставени от най-близкото до вашите потребители местоположение. Без CDN на трети страни.
Резервните възли превключват сами при отказ, така че трафикът продължава да тече по време на прекъсване. Подкрепено от 99.99% работоспособност.
Работете в US или EU. EU регионът на eu.fastcomments.com поддържа данните в региона за целите на съответствието.
Хиляди доволни клиенти ни се доверяват заради изключителното ни обслужване, надеждност и иновативни решения. Присъединете се към нашата нарастваща общност и изпитайте разликата още днес!
Започнете
Не. Джаджата е по избор. Можете да изградите цялото си изживяване с коментари върху REST API и SDK и да визуализирате всичко сами.
Node, Python, PHP, Ruby, Go, Java, Rust, Swift, C++ и Nim, плюс React Native SDK за мобилни устройства. Всеки език може също да извиква REST API директно.
Клиентите отварят WebSocket и получават нови коментари, редакции, гласове и обновявания на присъствие като събития, така че няма опресняване и няма опрос. Не се пропускат събития: ако клиент се разкачи, той извлича отново event log при повторно свързване, за да възпроизведе всичко изпратено, докато е бил офлайн.
Не. FastComments хоства инфраструктурата за реално време. Вашият клиент се абонира със SDK, а ние доставяме събитията.
Те опросват крайната точка на event log, която връща всяка промяна от даден момент. SDK за Node, React Native, Java, Swift и C++ вместо това включват нативен WebSocket абонат.
Конкретно за коментарите, FastComments предварително изчислява странирането при всеки запис за оптимални времена на зареждане, така че дори много големи нишки се странират бързо.
Да. Стартирайте безплатен пробен период с пълен достъп до API и SDK, без нужда от кредитна карта. След пробния период платените планове се мащабират спрямо вашия трафик.
Пълната справка за REST API и SDK се намира на docs.fastcomments.com, където всяка крайна точка, параметър и отговор е документиран.
Да. FastComments обслужва EU регион на eu.fastcomments.com, а SDK поддържат насочване към него.
Стартирайте безплатен пробен период, вземете своя API ключ и добавете дискусии на живо към вашето приложение днес.