하나의 REST API와 10개 이상의 언어용 SDK로 댓글, 모더레이션, 소셜 피드를 구현하세요. 백엔드에서 데이터를 가져오고, 게시하고, 관리한 다음, WebSocket을 통해 새로운 활동을 모든 사용자에게 실시간으로 스트리밍하세요.
FastComments는 단순한 댓글 그 이상입니다. 동일한 API와 SDK 제품군으로 토론, 모더레이션, 소셜 피드를 구축하세요.
스레드형 댓글과 라이브 채팅. 조회, 게시, 투표, 고정, 답글, 검색을 지원하며 SSO와 실시간 업데이트가 기본 내장되어 있습니다.
40개 이상의 엔드포인트를 갖춘 전용 모더레이션 인터페이스. 자동 스팸 필터링을 기반으로 승인, 플래그, 차단, 밴, 잠금, 감사를 처리합니다.
게시물, 미디어, 반응, 팔로우로 활동 및 소셜 피드를 구축하고 새 게시물을 모든 클라이언트에 실시간으로 전송하세요.
Node, Python, PHP, Ruby, Go, Java, Rust, Swift, C++를 위한 cURL과 타입이 지정된 SDK를 제공합니다. 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'
직접 댓글 UI를 만들고 유지 관리할 필요가 없습니다. React Native, Android, iOS용 전용 관리형 SDK는 스레드형 댓글, 라이브 채팅, 피드를 위한 네이티브 UI 컴포넌트를 제공합니다. 뷰를 추가하고 설정만 전달하면 끝입니다.
npm: fastcomments-react-native-sdk
웹뷰 없는 네이티브 컴포넌트. FastCommentsLiveCommenting, FastCommentsLiveChat, FastCommentsFeed를 추가하고 설정만 전달하세요.
라이브 데모 보기com.fastcomments:sdk
네이티브 Android UI 컴포넌트. 레이아웃에 FastCommentsView를 추가하여 스레드형 댓글, 투표, 알림, 피드를 구현하세요. Android 8.0+.
GitHub에서 보기Swift Package: FastCommentsUI
스레드형 댓글, 소셜 피드, 라이브 채팅을 위한 네이티브 SwiftUI 라이브러리. iOS 16+ 및 macOS 14+.
GitHub에서 보기하나의 API 키, 하나의 기본 URL. 대시보드가 하는 모든 작업을 코드로도 할 수 있습니다.
Node, Python, PHP, Ruby, Go, Java, Rust, Swift, C++ 등을 위한 타입 지정 클라이언트를 제공하므로, 우리가 아닌 여러분의 스택에서 개발할 수 있습니다.
새 댓글이 게시되는 즉시 모든 사용자에게 전달되며, 새로고침도 폴링도 필요 없습니다. 사용자가 재연결하면 놓친 이벤트가 로그에서 재생됩니다.
싱글 사인온, 댓글 모더레이션, 스팸 필터링이 기본 내장되어 있어, 코드 한 줄 작성하기 전에 어려운 부분이 이미 처리되어 있습니다.
저장소와 실시간 인프라를 글로벌 네트워크 전반에서 운영합니다. 여러분은 API를 호출하고 출시하기만 하면 됩니다.
웹, 모바일, 서버 앱 전반에서 댓글 스레드, 채팅, 실시간 활동을 하나의 API 및 SDK 제품군으로 구현합니다.
접속자 수와 입력 상태를 함께 표시하며 채팅방의 모든 사용자에게 메시지를 실시간으로 스트리밍하세요.
몇 번의 API 호출만으로 기사, 상품, 게시물에 중첩된 투표 가능한 댓글 섹션을 추가하세요.
피드에 게시하고 새 항목과 반응이 도착하는 대로 연결된 클라이언트에 전송하세요.
질문, 답변, 투표, 투표 결과를 수집한 다음 순위를 매겨 실시간으로 표시하세요.
무료 체험을 시작하고 대시보드에서 테넌트 ID와 API 키를 받으세요.
사용하는 언어용 SDK를 추가하거나, cURL과 x-api-key 헤더로 REST API를 직접 호출하세요.
댓글을 불러오고, 백엔드에서 게시하고, 변경 사항을 구독하여 모든 사용자에게 업데이트를 스트리밍하세요.
FastComments는 자체 인프라 위에서 여러 리전에 걸쳐 운영됩니다. 쓰기 작업은 리전 간에 복제되고, 노드는 자동으로 페일오버되며, 사용자는 가장 가까운 위치에서 서비스를 제공받습니다.
쓰기 작업이 둘 이상의 리전에서 수락되고 리전 간에 복제되므로 단일 장애 지점이 없습니다.
댓글과 미디어는 자체 글로벌 CDN 및 DNS를 통해 제공되며, 사용자와 가장 가까운 위치에서 전달됩니다. 서드파티 CDN은 사용하지 않습니다.
중복 노드가 자체적으로 페일오버하므로 장애가 발생해도 트래픽이 계속 흐릅니다. 99.99% 가동 시간을 기반으로 합니다.
US 또는 EU 리전에서 실행하세요. eu.fastcomments.com의 EU 리전은 규정 준수를 위해 데이터를 리전 내에 보관합니다.
수많은 만족스러운 고객들이 탁월한 서비스, 신뢰성, 혁신적인 솔루션을 제공하는 저희를 믿고 찾아주셨습니다. 지금 바로 저희와 함께 성장하는 커뮤니티에 참여하여 차별화된 경험을 느껴보세요!
시작하기
아니요. 위젯은 선택 사항입니다. 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 엔드포인트를 폴링합니다. Node, React Native, Java, Swift, C++ SDK는 대신 네이티브 WebSocket 구독자를 포함합니다.
특히 댓글의 경우 FastComments는 최적의 로드 시간을 위해 모든 쓰기 작업마다 페이지네이션을 사전 계산하므로, 매우 큰 스레드도 빠르게 페이지네이션됩니다.
네. 신용카드 없이 API와 SDK에 대한 전체 액세스 권한으로 무료 체험을 시작하세요. 체험 종료 후에는 트래픽에 따라 확장되는 유료 요금제를 이용할 수 있습니다.
전체 REST API 및 SDK 레퍼런스는 docs.fastcomments.com에서 확인할 수 있으며, 모든 엔드포인트, 매개변수, 응답이 문서화되어 있습니다.
네. FastComments는 eu.fastcomments.com에서 EU 리전을 제공하며, SDK가 해당 리전으로의 라우팅을 지원합니다.
무료 체험을 시작하고 API 키를 받아 오늘 바로 앱에 실시간 토론을 추가하세요.