1,400,000,000+ استدعاءات API التي خدمناها خلال آخر 12 شهرًا
التعليقات والإشراف والموجزات الاجتماعية عبر REST API واحد وحزم SDK لأكثر من 10 لغات. اجلب التعليقات وانشرها وأشرف عليها من الخادم الخلفي، ثم بُثّ النشاط الجديد إلى كل قارئ فورًا عبر WebSockets.
FastComments أكثر من مجرد تعليقات. ابنِ النقاشات والإشراف والموجزات الاجتماعية على مجموعة API وSDK نفسها.
التعليقات المتسلسلة والدردشة المباشرة. الجلب والنشر والتصويت والتثبيت والرد والبحث، مع SSO والتحديثات الفورية مدمجة.
واجهة إشراف مخصصة تضم أكثر من 40 نقطة نهاية. الاعتماد والإبلاغ والحجب والحظر والقفل والتدقيق، مدعومة بتصفية تلقائية للرسائل المزعجة.
ابنِ موجزات الأنشطة والموجزات الاجتماعية بالمنشورات والوسائط والتفاعلات والمتابعات، ثم ادفع المنشورات الجديدة إلى كل عميل مباشرة.
cURL وحزم SDK محددة الأنواع (typed) لـ 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
});
// 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
with client.ApiClient() 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.api.PublicApi;
PublicApi api = new PublicApi();
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();
افتح اتصالًا واحدًا واستقبل كل تعليق جديد وتعديل وتصويت وتحديث لحالة التواجد لحظة حدوثه. لا تفوتك أي أحداث: عند إعادة الاتصال يُعاد جلب سجل الأحداث لاستعادة كل ما أُرسل أثناء انقطاع العميل. تتوفر مشتركات WebSocket أصلية لـ Node وReact Native وJava وSwift وC++. أما بقية اللغات فتبقى محدّثة فوريًا عبر الاستعلام الدوري لسجل الأحداث.
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
with client.ApiClient() 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 مكونات واجهة أصلية للتعليقات المتسلسلة والدردشة المباشرة والموجزات. أضف عرضًا (view)، ومرّر الإعدادات، وانتهى الأمر.
npm: fastcomments-react-native-sdk
مكونات أصلية، بدون webview. أضف FastCommentsLiveCommenting أو FastCommentsLiveChat أو FastCommentsFeed ومرّر الإعدادات.
شاهد العرض التوضيحي المباشرcom.fastcomments:sdk
مكونات واجهة أصلية لنظام Android. أضف FastCommentsView إلى التخطيط (layout) لعرض التعليقات المتسلسلة والتصويت والإشعارات والموجزات. يتطلب Android 8.0 أو أحدث.
عرض على GitHubحزمة Swift: 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%.
شغّل خدمتك في الولايات المتحدة أو الاتحاد الأوروبي. تحتفظ منطقة الاتحاد الأوروبي على eu.fastcomments.com بالبيانات داخل المنطقة لأغراض الامتثال.
يثق بنا آلاف العملاء الراضين لما نقدمه من خدمة استثنائية وموثوقية عالية وحلول مبتكرة. انضم إلى مجتمعنا المتنامي واكتشف الفرق اليوم!
ابدأ الآن
لا، الأداة اختيارية. يمكنك بناء تجربة التعليقات بالكامل على REST API وحزم SDK وعرض كل شيء بنفسك.
Node وPython وPHP وRuby وGo وJava وRust وSwift وC++ وNim، إضافة إلى SDK لـ React Native للجوال. ويمكن لأي لغة أيضًا استدعاء REST API مباشرة.
يفتح العملاء اتصال WebSocket ويتلقون التعليقات والتعديلات والتصويتات وتحديثات حالة التواجد الجديدة كأحداث، فلا حاجة إلى تحديث الصفحة أو الاستعلام الدوري. لا تضيع أي أحداث: إذا انقطع اتصال العميل، فإنه يعيد جلب سجل الأحداث عند إعادة الاتصال لاستعادة كل ما أُرسل أثناء انقطاعه.
لا. يستضيف FastComments البنية التحتية الفورية. يشترك عميلك باستخدام SDK، ونتولى نحن توصيل الأحداث.
تستعلم دوريًا من نقطة نهاية سجل الأحداث، التي تعيد كل تغيير منذ طابع زمني محدد. أما حزم SDK الخاصة بـ Node وReact Native وJava وSwift وC++ فتتضمن مشترك WebSocket أصليًا بدلًا من ذلك.
بالنسبة للتعليقات تحديدًا، يقوم FastComments بحساب تقسيم الصفحات مسبقًا عند كل عملية كتابة لتحقيق أفضل أوقات تحميل، لذا حتى السلاسل الكبيرة جدًا تُقسَّم إلى صفحات بسرعة.
نعم. ابدأ فترة تجريبية مجانية مع وصول كامل إلى API وحزم SDK، دون الحاجة إلى بطاقة ائتمان. بعد الفترة التجريبية، تتدرج الباقات المدفوعة مع حجم حركة المرور لديك.
يوجد المرجع الكامل لـ REST API وSDK على docs.fastcomments.com، حيث وُثّقت كل نقطة نهاية ومعامل واستجابة.
نعم. يوفر FastComments منطقة للاتحاد الأوروبي على eu.fastcomments.com، وتدعم حزم SDK التوجيه إليها.
ابدأ تجربة مجانية، واحصل على مفتاح API الخاص بك، وأضف مناقشات مباشرة إلى تطبيقك اليوم.