실시간 토론을 위한 댓글 API, 라이브 디스커션

하나의 REST API와 10개 이상의 언어용 SDK로 댓글, 모더레이션, 소셜 피드를 구현하세요. 백엔드에서 데이터를 가져오고, 게시하고, 관리한 다음, WebSocket을 통해 새로운 활동을 모든 사용자에게 실시간으로 스트리밍하세요.

하나의 플랫폼, 세 가지 API

FastComments는 단순한 댓글 그 이상입니다. 동일한 API와 SDK 제품군으로 토론, 모더레이션, 소셜 피드를 구축하세요.

댓글 API

스레드형 댓글과 라이브 채팅. 조회, 게시, 투표, 고정, 답글, 검색을 지원하며 SSO와 실시간 업데이트가 기본 내장되어 있습니다.

모더레이션 API

40개 이상의 엔드포인트를 갖춘 전용 모더레이션 인터페이스. 자동 스팸 필터링을 기반으로 승인, 플래그, 차단, 밴, 잠금, 감사를 처리합니다.

소셜 피드 API

게시물, 미디어, 반응, 팔로우로 활동 및 소셜 피드를 구축하고 새 게시물을 모든 클라이언트에 실시간으로 전송하세요.

어떤 스택에서든 API를 호출하세요

Node, Python, PHP, Ruby, Go, Java, Rust, Swift, C++를 위한 cURL과 타입이 지정된 SDK를 제공합니다. 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

직접 댓글 UI를 만들고 유지 관리할 필요가 없습니다. React Native, Android, iOS용 전용 관리형 SDK는 스레드형 댓글, 라이브 채팅, 피드를 위한 네이티브 UI 컴포넌트를 제공합니다. 뷰를 추가하고 설정만 전달하면 끝입니다.

React Native

npm: fastcomments-react-native-sdk

웹뷰 없는 네이티브 컴포넌트. 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. 대시보드가 하는 모든 작업을 코드로도 할 수 있습니다.

10개 이상의 언어용 SDK

Node, Python, PHP, Ruby, Go, Java, Rust, Swift, C++ 등을 위한 타입 지정 클라이언트를 제공하므로, 우리가 아닌 여러분의 스택에서 개발할 수 있습니다.

WebSocket 기반 실시간

새 댓글이 게시되는 즉시 모든 사용자에게 전달되며, 새로고침도 폴링도 필요 없습니다. 사용자가 재연결하면 놓친 이벤트가 로그에서 재생됩니다.

모더레이션, SSO, 스팸 방지

싱글 사인온, 댓글 모더레이션, 스팸 필터링이 기본 내장되어 있어, 코드 한 줄 작성하기 전에 어려운 부분이 이미 처리되어 있습니다.

호스팅과 확장을 대신 처리

저장소와 실시간 인프라를 글로벌 네트워크 전반에서 운영합니다. 여러분은 API를 호출하고 출시하기만 하면 됩니다.

무엇을 만들 수 있나요

웹, 모바일, 서버 앱 전반에서 댓글 스레드, 채팅, 실시간 활동을 하나의 API 및 SDK 제품군으로 구현합니다.

라이브 채팅방

접속자 수와 입력 상태를 함께 표시하며 채팅방의 모든 사용자에게 메시지를 실시간으로 스트리밍하세요.

댓글 스레드

몇 번의 API 호출만으로 기사, 상품, 게시물에 중첩된 투표 가능한 댓글 섹션을 추가하세요.

활동 피드

피드에 게시하고 새 항목과 반응이 도착하는 대로 연결된 클라이언트에 전송하세요.

Q&A 및 투표

질문, 답변, 투표, 투표 결과를 수집한 다음 순위를 매겨 실시간으로 표시하세요.

세 단계로 시작하기

1

API 키 발급받기

무료 체험을 시작하고 대시보드에서 테넌트 ID와 API 키를 받으세요.

2

SDK 설치하기

사용하는 언어용 SDK를 추가하거나, cURL과 x-api-key 헤더로 REST API를 직접 호출하세요.

3

조회, 게시, 실시간 전환

댓글을 불러오고, 백엔드에서 게시하고, 변경 사항을 구독하여 모든 사용자에게 업데이트를 스트리밍하세요.

글로벌 분산 배포와 높은 가용성

FastComments는 자체 인프라 위에서 여러 리전에 걸쳐 운영됩니다. 쓰기 작업은 리전 간에 복제되고, 노드는 자동으로 페일오버되며, 사용자는 가장 가까운 위치에서 서비스를 제공받습니다.

멀티 마스터, 멀티 리전

쓰기 작업이 둘 이상의 리전에서 수락되고 리전 간에 복제되므로 단일 장애 지점이 없습니다.

자체 엣지 네트워크

댓글과 미디어는 자체 글로벌 CDN 및 DNS를 통해 제공되며, 사용자와 가장 가까운 위치에서 전달됩니다. 서드파티 CDN은 사용하지 않습니다.

자동 페일오버

중복 노드가 자체적으로 페일오버하므로 장애가 발생해도 트래픽이 계속 흐릅니다. 99.99% 가동 시간을 기반으로 합니다.

리전별 데이터 레지던시

US 또는 EU 리전에서 실행하세요. eu.fastcomments.com의 EU 리전은 규정 준수를 위해 데이터를 리전 내에 보관합니다.

저희 만족스러운 고객 대열 에 합류하세요!

수많은 만족스러운 고객들이 탁월한 서비스, 신뢰성, 혁신적인 솔루션을 제공하는 저희를 믿고 찾아주셨습니다. 지금 바로 저희와 함께 성장하는 커뮤니티에 참여하여 차별화된 경험을 느껴보세요!

시작하기

댓글 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.fastcomments.com에서 EU 리전을 제공하며, SDK가 해당 리전으로의 라우팅을 지원합니다.

몇 분 만에 개발을 시작하세요

무료 체험을 시작하고 API 키를 받아 오늘 바로 앱에 실시간 토론을 추가하세요.