Коментарі, модерація та соціальні стрічки через один 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
Нативні UI-компоненти Android. Додайте 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.
Публікуйте у стрічку та передавайте нові елементи й реакції підключеним клієнтам у міру їхнього надходження.
Збирайте питання, відповіді, голоси та результати опитувань, а потім ранжуйте й показуйте їх у реальному часі.
Розпочніть безкоштовний пробний період і візьміть ідентифікатор орендаря та ключ 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, а також SDK для React Native на мобільних. Будь-яка мова також може викликати 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 та додайте живі обговорення до вашого застосунку вже сьогодні.