FastComments.com

FastComments JavaScript/TypeScript SDK


这是 FastComments 的官方 JavaScript/TypeScript SDK。

FastComments API 的官方 JavaScript/TypeScript SDK

仓库

在 GitHub 上查看


安装 Internal Link

npm install fastcomments-sdk

API 文档 Internal Link


完整的 API 参考: docs/api/README.md

浏览器与服务器兼容性 Internal Link


此 SDK 使用 双入口点 以确保最佳兼容性并防止运行时错误:

  • fastcomments-sdk/browser - 浏览器安全版本,使用原生 fetch
  • fastcomments-sdk/server - 完整的 Node.js 版本,支持 SSO
  • fastcomments-sdk (默认) - 仅类型,可在任何地方安全导入

公共与安全 API Internal Link

The SDK provides three main API classes:

  • DefaultApi - 受保护的端点,要求使用 API 密钥进行身份验证。用于服务器端操作。
  • PublicApi - 公共端点,可在无需 API 密钥的情况下访问。可以直接从浏览器/移动设备等调用。
  • HiddenApi - 用于高级用例的内部/管理端点。

Example: Using Public API (browser-safe)

import { PublicApi } from 'fastcomments-sdk/browser';

const publicApi = new PublicApi();

// 获取页面的评论(不需要 API 密钥)
const response = await publicApi.getCommentsPublic({
  tenantId: 'your-tenant-id',
  urlId: 'page-url-id'
});

Example: Using Default API (server-side only)

import { DefaultApi, Configuration } from 'fastcomments-sdk/server';

const config = new Configuration({
  apiKey: 'your-api-key' // 请保密!
});
const defaultApi = new DefaultApi(config);

// 使用完整的管理员访问权限获取评论
const response = await defaultApi.getComments({
  tenantId: 'your-tenant-id',
  urlId: 'page-url-id'
});

SSO(单点登录)集成 Internal Link

FastComments 支持 SSO,以与您现有的用户认证系统集成。 SSO 功能仅在服务器导出中可用,因为它需要 Node.js crypto 功能。

简单 SSO(仅服务器端)

简单 SSO 应在服务器端生成并发送到客户端:

// 服务器端代码(Node.js/后端)
import { FastCommentsSSO, PublicApi } from 'fastcomments-sdk/server';

// 使用内置辅助创建简单 SSO  
const userData = {
  username: 'john_doe',
  email: 'john@example.com',
  displayName: 'John Doe',
  avatar: 'https://example.com/avatar.jpg'
};

const sso = FastCommentsSSO.createSimple(userData, {
  loginURL: '/login',
  logoutURL: '/logout'
});

const ssoToken = sso.createToken();

// 将 ssoToken 发送到您的客户端代码
// 客户端代码然后可以使用该令牌与浏览器 SDK 一起使用

安全 SSO(服务器端,推荐)

安全 SSO 应在服务器端实现,并提供更好的安全性:

// 服务器端代码(Node.js/后端)
import { FastCommentsSSO, PublicApi } from 'fastcomments-sdk/server';

// 使用内置辅助创建安全 SSO
const userData = {
  id: 'user-123',
  email: 'john@example.com',
  username: 'john_doe',
  displayName: 'John Doe',
  avatar: 'https://example.com/avatar.jpg',
  isAdmin: false,
  isModerator: false
};

const sso = FastCommentsSSO.createSecure('your-api-key', userData, {
  loginURL: '/login',
  logoutURL: '/logout'
});

const ssoConfig = sso.prepareToSend();

// 在服务器上与 API 调用一起使用
const publicApi = new PublicApi();
const response = await publicApi.getCommentsPublic({
  tenantId: 'your-tenant-id',
  urlId: 'page-url-id',
  sso: JSON.stringify(ssoConfig)
});

// 或将 ssoConfig 发送到客户端以供浏览器使用

在浏览器中使用 SSO(使用服务器生成的令牌)

// 客户端代码(浏览器)
import { PublicApi } from 'fastcomments-sdk/browser';

// 从您的服务器端点获取 SSO 令牌
const ssoToken = await fetch('/api/sso-token').then(r => r.json());

const publicApi = new PublicApi();
const response = await publicApi.getCommentsPublic({
  tenantId: 'your-tenant-id',
  urlId: 'page-url-id',
  sso: ssoToken // Use the server-generated SSO token
});

带评论创建的 SSO

// 服务器端:创建 SSO 和评论
import { FastCommentsSSO, PublicApi } from 'fastcomments-sdk/server';

const sso = FastCommentsSSO.createSecure('your-api-key', userData);
const ssoConfig = sso.prepareToSend();

const response = await publicApi.createCommentPublic({
  tenantId: 'your-tenant-id',
  urlId: 'page-url-id',
  broadcastId: 'unique-broadcast-id',
  commentData: {
    comment: 'This is my comment',
    date: Date.now(),
    commenterName: 'John Doe',
    url: 'https://example.com/page',
    urlId: 'page-url-id'
  },
  sso: JSON.stringify(ssoConfig)
});

常见用例 Internal Link

获取页面的评论

const comments = await sdk.publicApi.getCommentsPublic({
  tenantId: 'your-tenant-id',
  urlId: 'article-123'
});

创建评论

const newComment = await sdk.publicApi.createCommentPublic({
  createCommentParams: {
    tenantId: 'your-tenant-id',
    urlId: 'article-123',
    comment: 'Great article!',
    commenterName: 'John Doe',
    commenterEmail: 'john@example.com'
  }
});

对评论投票

const voteResponse = await sdk.publicApi.voteComment({
  voteBodyParams: {
    commentId: 'comment-id',
    direction: 1 // 1 表示赞成,-1 表示反对
  }
});

用户管理(需要 API 密钥)

// 搜索用户(需要 DefaultApi)
const users = await sdk.defaultApi.searchUsers({
  tenantId: 'your-tenant-id',
  urlId: 'page-id',
  usernameStartsWith: 'john'
});

实时事件(实时更新) Internal Link

订阅实时事件以获取有关评论、投票和其他活动的实时更新。

页面级事件

监听特定页面的实时事件(评论、投票等):

import { subscribeToChanges, LiveEvent, LiveEventType } from 'fastcomments-sdk/browser';

const config = {
  tenantId: 'your-tenant-id',
  urlId: 'page-url-id',
};

// Subscribe to live events for a page
const subscription = subscribeToChanges(
  config,
  'your-tenant-id', // tenantIdWS
  'page-url-id',    // urlIdWS  
  'user-session-id', // userIdWS (get this from getComments response)
  (event: LiveEvent) => {
    console.log('Live event received:', event);

    switch (event.type) {
      case LiveEventType.new_comment:
        console.log('New comment:', event.comment);
        // Update your UI with the new comment
        break;
      case LiveEventType.new_vote:
        console.log('New vote:', event.vote);
        // Update vote counts in your UI
        break;
      case LiveEventType.updated_comment:
        console.log('Comment updated:', event.comment);
        break;
      default:
        console.log('Other event type:', event.type);
    }

    return true; // Return true if event was handled
  },
  (isConnected: boolean) => {
    console.log('Connection status:', isConnected ? 'Connected' : 'Disconnected');
  }
);

// Close the subscription when done
subscription.close();

订阅用户事件

监听特定于用户的事件(通知、提及等):

import { subscribeToUserFeed, LiveEvent, LiveEventType } from 'fastcomments-sdk/browser';

const userConfig = {
  userIdWS: 'user-session-id', // Get this from getComments response
};

// Subscribe to user's personal feed
const userSubscription = subscribeToUserFeed(
  userConfig,
  (event: LiveEvent) => {
    console.log('User event received:', event);

    switch (event.type) {
      case LiveEventType.notification:
        console.log('New notification:', event.notification);
        // Show notification in your UI
        break;
      case LiveEventType.notification_update:
        console.log('Notification updated:', event.notification);
        break;
      default:
        console.log('Other user event:', event.type);
    }

    return true;
  },
  (isConnected: boolean) => {
    console.log('User feed connection:', isConnected ? 'Connected' : 'Disconnected');
  }
);

// Close when done
userSubscription.close();

获取 userIdWS

The userIdWS parameter is required for live events and can be obtained from API responses:

const response = await sdk.publicApi.getCommentsPublic({
  tenantId: 'your-tenant-id',
  urlId: 'page-id'
});

// Extract userIdWS from the response
const userIdWS = response.data?.userSessionInfo?.userIdWS;

if (userIdWS) {
  // Now you can subscribe to live events
  const subscription = subscribeToChanges(config, tenantIdWS, urlIdWS, userIdWS, handleEvent);
}

广播 ID Internal Link


您会看到在某些 API 调用中需要传递 broadcastId。当您接收事件时,会拿回这个 ID,这样如果您计划在客户端乐观地应用更改(您可能会想这样做,因为它提供了最佳体验),就可以知道是否忽略该事件。在这里传入一个 UUID。该 ID 应足够唯一,以避免在同一浏览器会话中出现两次。

import { v4 as uuidv4 } from 'uuid';

const response = await sdk.publicApi.createCommentPublic({
  createCommentParams: {
    tenantId: 'your-tenant-id',
    urlId: 'page-id',
    comment: 'My comment',
    broadcastId: uuidv4() // 此操作的唯一 ID
  }
});

错误处理 Internal Link

try {
  const comments = await sdk.publicApi.getCommentsPublic({
    tenantId: 'your-tenant-id',
    urlId: 'page-id'
  });
} catch (error) {
  if (error.response?.status === 404) {
    console.log('Page not found');
  } else {
    console.error('API Error:', error.message);
  }
}

聚合 Internal Link

通过对文档进行分组(如果提供了 groupBy)并应用多个操作来聚合文档。支持不同的操作(例如 sum、countDistinct、avg 等)。

参数

名称 类型 必填 描述
tenantId string
aggregationRequest AggregationRequest
parentTenantId string
includeStats boolean

响应

返回:AggregationResponse


获取审计日志 Internal Link

参数

名称 类型 必需 描述
tenantId string
limit number
skip number
order SORTDIR
after number
before number

响应

返回: GetAuditLogs200Response


公开评论封锁 Internal Link


参数

名称 类型 必需 描述
tenantId string
commentId string
publicBlockFromCommentParams PublicBlockFromCommentParams
sso string

响应

返回: BlockFromCommentPublic200Response


取消公开评论封锁 Internal Link

参数

名称 类型 必需 描述
tenantId string
commentId string
publicBlockFromCommentParams PublicBlockFromCommentParams
sso string

响应

返回: UnBlockCommentPublic200Response


检查被封评论 Internal Link


参数

名称 类型 必需 描述
tenantId string
commentIds string
sso string

响应

返回: CheckedCommentsForBlocked200Response


封锁用户(评论) Internal Link

参数

名称 类型 必需 描述
tenantId string
id string
blockFromCommentParams BlockFromCommentParams
userId string
anonUserId string

响应

返回: BlockFromCommentPublic200Response


创建公开评论 Internal Link

参数

名称 类型 必填 描述
tenantId string
urlId string
broadcastId string
commentData CommentData
sessionId string
sso string

响应

返回:CreateCommentPublic200Response


删除评论 Internal Link

参数

名称 类型 必需 描述
tenantId string
id string
contextUserId string
isLive boolean

响应

返回: DeleteComment200Response


删除公开评论 Internal Link


参数

名称 类型 必需 描述
tenantId string
commentId string
broadcastId string
editKey string
sso string

响应

返回: DeleteCommentPublic200Response


删除评论投票 Internal Link


参数

名称 类型 必需 描述
tenantId string
commentId string
voteId string
urlId string
broadcastId string
editKey string
sso string

响应

返回: DeleteCommentVote200Response


标记评论 Internal Link


参数

名称 类型 必需 描述
tenantId string
id string
userId string
anonUserId string

响应

返回:FlagComment200Response


获取评论 Internal Link

参数

名称 类型 必需 描述
tenantId string
id string

响应

返回: GetComment200Response


获取评论列表 Internal Link

参数

名称 类型 必需 描述
tenantId string
page number
limit number
skip number
asTree boolean
skipChildren number
limitChildren number
maxTreeDepth number
urlId string
userId string
anonUserId string
contextUserId string
hashTag string
parentId string
direction SortDirections

响应

返回: GetComments200Response


获取公开评论 Internal Link

req tenantId urlId

参数

名称 类型 必需 描述
tenantId string
urlId string
page number
direction SortDirections
sso string
skip number
skipChildren number
limit number
limitChildren number
countChildren boolean
fetchPageForCommentId string
includeConfig boolean
countAll boolean
includei10n boolean
locale string
modules string
isCrawler boolean
includeNotificationCount boolean
asTree boolean
maxTreeDepth number
useFullTranslationIds boolean
parentId string
searchText string
hashTags Array
userId string
customConfigStr string
afterCommentId string
beforeCommentId string

响应

返回: GetCommentsPublic200Response


获取评论文本 Internal Link

参数

名称 类型 必需 说明
tenantId string
commentId string
editKey string
sso string

响应

返回:GetCommentText200Response


获取评论投票用户名 Internal Link


参数

名称 类型 必需 描述
tenantId string
commentId string
dir number
sso string

响应

返回: GetCommentVoteUserNames200Response


锁定评论 Internal Link


参数

名称 类型 必填 描述
tenantId string
commentId string
broadcastId string
sso string

响应

返回:LockComment200Response


置顶评论 Internal Link

参数

名称 类型 必需 描述
tenantId string
commentId string
broadcastId string
sso string

响应

返回:PinComment200Response


保存评论 Internal Link


参数

名称 类型 必需 描述
tenantId string
createCommentParams CreateCommentParams
isLive boolean
doSpamCheck boolean
sendEmails boolean
populateNotifications boolean

响应

返回: SaveComment200Response


批量保存评论 Internal Link


参数

名称 类型 必需 描述
tenantId string
createCommentParams Array
isLive boolean
doSpamCheck boolean
sendEmails boolean
populateNotifications boolean

响应

返回: Array<SaveComment200Response


设置评论文本 Internal Link


参数

名称 类型 必需 描述
tenantId string
commentId string
broadcastId string
commentTextUpdateRequest CommentTextUpdateRequest
editKey string
sso string

响应

返回:SetCommentText200Response


解除用户评论封锁 Internal Link


参数

名称 类型 必需 描述
tenantId string
id string
unBlockFromCommentParams UnBlockFromCommentParams
userId string
anonUserId string

响应

返回: UnBlockCommentPublic200Response


取消标记评论 Internal Link


参数

Name Type Required Description
tenantId string
id string
userId string
anonUserId string

响应

返回: FlagComment200Response


解锁评论 Internal Link

参数

名称 类型 必需 描述
tenantId string
commentId string
broadcastId string
sso string

响应

返回: LockComment200Response


取消置顶评论 Internal Link


参数

名称 类型 必填 描述
tenantId string
commentId string
broadcastId string
sso string

响应

返回:PinComment200Response


更新评论 Internal Link

参数

名称 类型 必需 描述
tenantId string
id string
body PickAPICommentUpdatableCommentFields
contextUserId string
doSpamCheck boolean
isLive boolean

响应

返回: FlagCommentPublic200Response


投票评论 Internal Link

参数

名称 类型 必需 描述
tenantId string
commentId string
urlId string
broadcastId string
voteBodyParams VoteBodyParams
sessionId string
sso string

响应

返回: VoteComment200Response


添加域配置 Internal Link


参数

名称 类型 必需 说明
tenantId string
addDomainConfigParams AddDomainConfigParams

响应

返回: AddDomainConfig200Response


删除域配置 Internal Link

参数

名称 类型 必填 描述
tenantId string
domain string

响应

返回: DeleteDomainConfig200Response


获取域配置 Internal Link

参数

名称 类型 必填 描述
tenantId string
domain string

响应

返回: GetDomainConfig200Response


获取域配置列表 Internal Link


参数

名称 类型 必需 描述
tenantId string

响应

返回: GetDomainConfigs200Response


部分更新域配置 Internal Link

参数

名称 类型 必需 描述
tenantId string
domainToUpdate string
patchDomainConfigParams PatchDomainConfigParams

响应

返回: GetDomainConfig200Response


替换域配置 Internal Link


参数

名称 类型 必填 描述
tenantId string
domainToUpdate string
updateDomainConfigParams UpdateDomainConfigParams

响应

返回: GetDomainConfig200Response


创建邮件模板 Internal Link

参数

名称 类型 必需 描述
tenantId string
createEmailTemplateBody CreateEmailTemplateBody

响应

返回: CreateEmailTemplate200Response

示例

createEmailTemplate 示例
Copy Copy
1
2const tenantId: string = "tenant_7a9f2b3d";
3
4const createEmailTemplateBody: CreateEmailTemplateBody = {
5 name: "Comment Notification",
6 subject: "New comment on your article: ",
7 htmlBody: "<p> left a comment:</p><blockquote></blockquote>",
8 enabled: true,
9 defaultLocale: "en-US",
10 metadata: { createdBy: "admin@example.com", purpose: "notify_comment" } // 可选的额外数据
11};
12
13const result: CreateEmailTemplate200Response = await createEmailTemplate(tenantId, createEmailTemplateBody);
14

删除邮件模板 Internal Link

参数

名称 类型 必填 描述
tenantId string
id string

响应

返回: FlagCommentPublic200Response

示例

deleteEmailTemplate 示例
Copy Copy
1
2const tenantId: string = "tenant_4b2f6a-4b2f6a2d";
3const templateId: string = "email_template_9f8b7c3e";
4const result: FlagCommentPublic200Response = await deleteEmailTemplate(tenantId, templateId);
5const status: APIStatus | undefined = result?.status
6

删除邮件模板渲染错误 Internal Link

参数

名称 类型 必需 描述
tenantId string
id string
errorId string

响应

返回:FlagCommentPublic200Response

示例

deleteEmailTemplateRenderError 示例
Copy Copy
1
2const tenantId: string = "tenant_8f3b2a9c";
3const id: string = "template_4a1c9f7e";
4const errorId: string = "err_20260112_abc123";
5const result: FlagCommentPublic200Response = await deleteEmailTemplateRenderError(tenantId, id, errorId);
6

获取邮件模板 Internal Link

参数

名称 类型 必填 描述
tenantId string
id string

响应

返回: GetEmailTemplate200Response

示例

getEmailTemplate 示例
Copy Copy
1
2(async () => {
3 const tenantId: string = 'acme-enterprises-123';
4 const id: string = 'welcome-email-template-v2';
5 const locale: string | undefined = 'en-US'; // 可选参数示例
6 const template: GetEmailTemplate200Response = await getEmailTemplate(tenantId, id);
7 console.log(template, locale);
8})();
9

获取邮件模板定义 Internal Link

参数

名称 类型 必填 描述
tenantId string

响应

返回: GetEmailTemplateDefinitions200Response

示例

getEmailTemplateDefinitions 示例
Copy Copy
1
2const tenantId: string = 'acme-enterprises-78f2';
3const emailTemplates: GetEmailTemplateDefinitions200Response = await getEmailTemplateDefinitions(tenantId);
4

获取邮件模板渲染错误 Internal Link

参数

名称 类型 必需 描述
tenantId string
id string
skip number

响应

返回:GetEmailTemplateRenderErrors200Response

示例

getEmailTemplateRenderErrors 示例
Copy Copy
1
2const tenantId: string = "tenant_7b3f2a9c";
3const id: string = "tmpl_4f1b2c9e";
4const skip: number = 25;
5const result: GetEmailTemplateRenderErrors200Response = await getEmailTemplateRenderErrors(tenantId, id, skip);
6

获取邮件模板列表 Internal Link

参数

名称 类型 是否必需 描述
tenantId string
skip number

响应

返回: GetEmailTemplates200Response

示例

getEmailTemplates 示例
Copy Copy
1
2const tenantId: string = 'tenant_8f4d2b7c';
3const responseWithoutSkip: GetEmailTemplates200Response = await getEmailTemplates(tenantId);
4const skip: number = 20;
5const responseWithSkip: GetEmailTemplates200Response = await getEmailTemplates(tenantId, skip);
6

渲染邮件模板 Internal Link

参数

名称 类型 必需 描述
tenantId string
renderEmailTemplateBody RenderEmailTemplateBody
locale string

响应

返回: RenderEmailTemplate200Response

示例

renderEmailTemplate 示例
Copy Copy
1
2const tenantId: string = 'acme-corp-7f3';
3const renderEmailTemplateBody: RenderEmailTemplateBody = {
4 templateId: 'new-comment-notification',
5 recipientEmail: 'jane.doe@acme.com',
6 variables: {
7 commenterName: 'Samir Patel',
8 commentText: 'I found this article really helpful — thanks for sharing!',
9 threadUrl: 'https://acme.com/blog/123#comments'
10 },
11 includeUnsubscribeLink: true
12};
13const locale: string = 'en-US';
14const response: RenderEmailTemplate200Response = await renderEmailTemplate(tenantId, renderEmailTemplateBody, locale);
15

更新邮件模板 Internal Link

参数

名称 类型 必填 描述
tenantId string
id string
updateEmailTemplateBody UpdateEmailTemplateBody

响应

返回: FlagCommentPublic200Response

示例

updateEmailTemplate 示例
Copy Copy
1
2const tenantId: string = 'acme-corp-tenant-01';
3const id: string = 'email_tpl_42b7a9';
4const updateEmailTemplateBody: UpdateEmailTemplateBody = {
5 name: 'Comment Flag Notification',
6 subject: 'A comment was flagged on acme.com',
7 html: '<p>A comment by was flagged. Review at </p>',
8 replyTo: 'noreply@acme.com', // 可选字段示例
9 enabled: true,
10 customConfig: { priority: 'high' } // 可选的自定义参数
11};
12const response: FlagCommentPublic200Response = await updateEmailTemplate(tenantId, id, updateEmailTemplateBody);
13

获取事件日志 Internal Link


req tenantId urlId userIdWS

参数

名称 类型 必需 描述
tenantId string
urlId string
userIdWS string
startTime number
endTime number

响应

返回:GetEventLog200Response


获取全局事件日志 Internal Link

req tenantId urlId userIdWS

参数

名称 类型 是否必需 描述
tenantId string
urlId string
userIdWS string
startTime number
endTime number

响应

返回: GetEventLog200Response


创建动态 Internal Link


参数

名称 类型 必填 描述
tenantId string
createFeedPostParams CreateFeedPostParams
broadcastId string
isLive boolean
doSpamCheck boolean
skipDupCheck boolean

响应

返回:CreateFeedPost200Response


创建公开动态 Internal Link


参数

名称 类型 必需 描述
tenantId string
createFeedPostParams CreateFeedPostParams
broadcastId string
sso string

响应

返回: CreateFeedPostPublic200Response


删除公开动态 Internal Link


参数

Name Type Required Description
tenantId string
postId string
broadcastId string
sso string

响应

返回: DeleteFeedPostPublic200Response


获取动态 Internal Link

req tenantId afterId

参数

名称 类型 必填 描述
tenantId string
afterId string
limit number
tags Array

响应

返回: GetFeedPosts200Response

获取公开动态 Internal Link

req tenantId afterId

参数

Name Type Required Description
tenantId string
afterId string
limit number
tags Array
sso string
isCrawler boolean
includeUserInfo boolean

响应

返回: GetFeedPostsPublic200Response


获取动态统计 Internal Link


参数

名称 类型 必需 描述
tenantId string
postIds Array
sso string

响应

返回:GetFeedPostsStats200Response


获取用户公开反应 Internal Link

参数

名称 类型 必需 描述
tenantId string
postIds Array
sso string

响应

返回: GetUserReactsPublic200Response


对公开动态反应 Internal Link


参数

名称 类型 必需 描述
tenantId string
postId string
reactBodyParams ReactBodyParams
isUndo boolean
broadcastId string
sso string

响应

返回: ReactFeedPostPublic200Response


更新动态 Internal Link


参数

名称 类型 必需 描述
tenantId string
id string
feedPost FeedPost

响应

返回: FlagCommentPublic200Response


更新公开动态 Internal Link

参数

名称 类型 必需 描述
tenantId string
postId string
updateFeedPostParams UpdateFeedPostParams
broadcastId string
sso string

响应

返回: CreateFeedPostPublic200Response


公开标记评论 Internal Link


参数

名称 类型 必需 描述
tenantId string
commentId string
isFlagged boolean
sso string

响应

返回: FlagCommentPublic200Response


添加话题标签 Internal Link

参数

Name Type Required Description
tenantId string
createHashTagBody CreateHashTagBody

响应

返回:AddHashTag200Response

示例

addHashTag 示例
Copy Copy
1
2const tenantId: string = 'tenant_7b2f6c2b';
3const createBody: CreateHashTagBody = {
4 tag: 'feature-request',
5 label: 'Feature Request',
6 description: 'Requests for new functionality in the web client',
7 isActive: true,
8 visibility: 'public',
9 allowedDomains: ['example.com', 'internal.example.com']
10};
11const result: AddHashTag200Response = await addHashTag(tenantId, createBody);
12const resultWithoutTenant: AddHashTag200Response = await addHashTag(undefined, {
13 tag: 'bug',
14 label: 'Bug',
15 description: 'Use for reproducible bugs reported by users',
16 isActive: true,
17 visibility: 'public'
18});
19

批量添加话题标签 Internal Link

参数

名称 类型 必填 描述
tenantId string
bulkCreateHashTagsBody BulkCreateHashTagsBody

响应

返回: AddHashTagsBulk200Response

示例

addHashTagsBulk 示例
Copy Copy
1
2(async () => {
3 const tenantId: string = 'tenant_3f2b9a';
4 const bulkCreateHashTagsBody: BulkCreateHashTagsBody = {
5 tags: [
6 { name: 'performance', description: 'Comments about site performance', visibleToModeratorsOnly: false },
7 { name: 'feature-request', description: 'Requests for new features', visibleToModeratorsOnly: true }
8 ]
9 };
10 const result: AddHashTagsBulk200Response = await addHashTagsBulk(tenantId, bulkCreateHashTagsBody);
11 const resultWithNoTenant: AddHashTagsBulk200Response = await addHashTagsBulk(undefined, bulkCreateHashTagsBody);
12 console.log(result, resultWithNoTenant);
13})();
14

删除话题标签 Internal Link

参数

名称 类型 必填 描述
tag string
tenantId string
deleteHashTagRequest DeleteHashTagRequest

响应

返回:FlagCommentPublic200Response

示例

deleteHashTag 示例
Copy Copy
1
2const tag: string = 'breaking-news';
3const tenantId: string = 'tenant_42';
4const deleteReq: DeleteHashTagRequest = { removedBy: 'moderator_jane', reason: 'off-topic for this community', deleteAssociatedComments: true } as DeleteHashTagRequest;
5const result: FlagCommentPublic200Response = await deleteHashTag(tag, tenantId, deleteReq);
6

获取话题标签 Internal Link

参数

名称 类型 必需 描述
tenantId string
page number

响应

返回: GetHashTags200Response

示例

getHashTags 示例
Copy Copy
1
2(async () => {
3 const tenantId: string = "acme-corp-7a9f";
4 const tagsPage1: GetHashTags200Response = await getHashTags(tenantId);
5 const tagsPage2: GetHashTags200Response = await getHashTags(tenantId, 2);
6 console.log(tagsPage1, tagsPage2);
7})();
8

部分更新话题标签 Internal Link

参数

名称 类型 必需 描述
tag string
tenantId string
updateHashTagBody UpdateHashTagBody

响应

返回: PatchHashTag200Response

示例

patchHashTag 示例
Copy Copy
1
2const tag: string = 'release-2026';
3const tenantId: string = 'tenant_42';
4const updateHashTagBody: UpdateHashTagBody = {
5 displayName: 'Release 2026',
6 description: 'Discussions and notes for the 2026 product release',
7 isActive: true
8};
9const result: PatchHashTag200Response = await patchHashTag(tag, tenantId, updateHashTagBody);
10

创建版主 Internal Link

参数

Name Type Required Description
tenantId string
createModeratorBody CreateModeratorBody

响应

返回: CreateModerator200Response

示例

createModerator 示例
Copy Copy
1
2const tenantId: string = "tenant_prod_us-east_01";
3const createModeratorBody: CreateModeratorBody = {
4 email: "maria.lopez+mod@fastcompany.com",
5 username: "mlopez_mod",
6 displayName: "Maria Lopez",
7 roles: ["content_moderator"],
8 notifyOnReports: true,
9 metadata: { region: "us-east", team: "community" }
10};
11const result: CreateModerator200Response = await createModerator(tenantId, createModeratorBody);
12

删除版主 Internal Link

参数

名称 类型 必填 描述
tenantId string
id string
sendEmail string

响应

返回: FlagCommentPublic200Response

示例

deleteModerator 示例
Copy Copy
1
2const tenantId: string = 'acme-tenant-987';
3const moderatorId: string = 'mod-78b2c9a4-3f1e-4d6a';
4const sendEmail: string = 'true';
5const result: FlagCommentPublic200Response = await deleteModerator(tenantId, moderatorId, sendEmail);
6

获取版主 Internal Link

参数

名称 类型 必需 描述
tenantId string
id string

响应

返回:GetModerator200Response

示例

getModerator 示例
Copy Copy
1
2const tenantId: string = "tenant_eu_4f8d2b9e";
3const maybeModeratorId: string | undefined = "mod_91c3b7a2"; // optional source (could be undefined)
4const moderator: GetModerator200Response = await getModerator(tenantId, maybeModeratorId!);
5

获取版主列表 Internal Link

参数

名称 类型 必需 描述
tenantId string
skip number

响应

返回: GetModerators200Response

示例

getModerators 示例
Copy Copy
1
2const tenantId: string = "tenant_corp_7f9b2a";
3const moderatorsPage1: GetModerators200Response = await getModerators(tenantId);
4const skip: number = 50;
5const moderatorsPage2: GetModerators200Response = await getModerators(tenantId, skip);
6

发送邀请 Internal Link

参数

Name Type Required Description
tenantId string
id string
fromName string

响应

返回: FlagCommentPublic200Response

示例

sendInvite 示例
Copy Copy
1
2const tenantId: string = 'acme-tenant-004';
3const id: string = 'comment_9b7f3a2c';
4const fromName: string = 'María Hernández';
5const response: FlagCommentPublic200Response = await sendInvite(tenantId, id, fromName);
6

更新版主 Internal Link

参数

名称 类型 必需 描述
tenantId string
id string
updateModeratorBody UpdateModeratorBody

响应

返回:FlagCommentPublic200Response

示例

updateModerator 示例
Copy Copy
1
2const tenantId: string = '4f8a9c2e-3b6d-4d9e-8c2f-1a2b3c4d5e6f';
3const id: string = 'mod_92a7c4';
4const updateModeratorBodyMinimal: UpdateModeratorBody = { displayName: 'Sophia Patel' };
5const updateModeratorBodyWithOptional: UpdateModeratorBody = {
6 displayName: 'Sophia Patel',
7 email: 'sophia.patel@newsroom.example',
8 permissions: ['remove_comments', 'ban_user'],
9 notifyOnFlag: true // 可选参数示例
10};
11const result: FlagCommentPublic200Response = await updateModerator(tenantId, id, updateModeratorBodyWithOptional);
12

删除通知计数 Internal Link

参数

名称 类型 必需 描述
tenantId string
id string

响应

返回:FlagCommentPublic200Response

示例

deleteNotificationCount 示例
Copy Copy
1
2const tenantId: string = 'tenant_7f3a1b2c4d9e';
3const notificationId: string = 'notif_8c9d0a1b2f3e4b7';
4const result: FlagCommentPublic200Response = await deleteNotificationCount(tenantId, notificationId);
5

获取缓存的通知计数 Internal Link

参数

Name Type Required Description
tenantId string
id string

响应

返回:GetCachedNotificationCount200Response

示例

getCachedNotificationCount 示例
Copy Copy
1
2const tenantId: string = 'acme-tenant-01';
3const baseNotificationId: string = 'notif-000123';
4const idSuffix: string | undefined = undefined; // 可选参数示例
5const notificationId: string = idSuffix ? `${baseNotificationId}-${idSuffix}` : baseNotificationId;
6const result: GetCachedNotificationCount200Response = await getCachedNotificationCount(tenantId, notificationId);
7console.log(result);
8

获取通知计数 Internal Link

参数

名称 类型 必需 描述
tenantId string
userId string
urlId string
fromCommentId string
viewed boolean
type string

响应

返回:GetNotificationCount200Response

示例

getNotificationCount 示例
Copy Copy
1
2const tenantId: string = 'tenant_8a9b7c';
3const userId: string = 'user_42b3c';
4const urlId: string = 'https://blog.example.com/posts/introducing-new-editor';
5const fromCommentId: string | undefined = undefined;
6const viewed: boolean = false;
7const type: string = 'mention';
8const result: GetNotificationCount200Response = await getNotificationCount(tenantId, userId, urlId, fromCommentId, viewed, type);
9

获取通知 Internal Link

参数

名称 类型 必需 描述
tenantId string
userId string
urlId string
fromCommentId string
viewed boolean
type string
skip number

响应

返回: GetNotifications200Response

示例

getNotifications 示例
Copy Copy
1
2(async () => {
3 const tenantId: string = 'tenant_8f3b1a2c';
4 const userId: string = 'user_42';
5 const urlId: string = 'https://news.example.com/articles/2026/01/11/comment-thread';
6 const fromCommentId: string = 'cmt_9a7b';
7 const viewed: boolean = false;
8 const type: string = 'mention';
9 const skip: number = 0;
10 const response: GetNotifications200Response = await getNotifications(tenantId, userId, urlId, fromCommentId, viewed, type, skip);
11 console.log(response);
12})();
13

更新通知 Internal Link

参数

名称 类型 必填 描述
tenantId string
id string
updateNotificationBody UpdateNotificationBody
userId string

响应

返回: FlagCommentPublic200Response

示例

updateNotification 示例
Copy Copy
1
2const tenantId: string = "tenant_86a7b3";
3const id: string = "notif_20260112_01";
4const userId: string = "moderator_42";
5const updateNotificationBody: UpdateNotificationBody = {
6 name: "Flagged comment alert",
7 enabled: true,
8 channels: ["email"],
9 recipients: ["mod-team@news-site.com"],
10 threshold: 1
11};
12
13(async () => {
14 const result: FlagCommentPublic200Response = await updateNotification(tenantId, id, updateNotificationBody, userId);
15 console.log(result);
16})();
17

添加页面 Internal Link


参数

名称 类型 必填 描述
tenantId string
createAPIPageData CreateAPIPageData

响应

返回: AddPageAPIResponse


删除页面 Internal Link


参数

名称 类型 必需 描述
tenantId string
id string

响应

返回: DeletePageAPIResponse


通过 URL ID 获取页面 Internal Link

参数

名称 类型 必需 描述
tenantId string
urlId string

响应

返回:GetPageByURLIdAPIResponse


获取页面列表 Internal Link

参数

名称 类型 必填 描述
tenantId string

响应

返回: GetPagesAPIResponse


部分更新页面 Internal Link


参数

名称 类型 必需 描述
tenantId string
id string
updateAPIPageData UpdateAPIPageData

响应

返回: PatchPageAPIResponse


删除待处理的 Webhook 事件 Internal Link

参数

名称 类型 必需 描述
tenantId string
id string

响应

返回: FlagCommentPublic200Response

示例

deletePendingWebhookEvent 示例
Copy Copy
1
2const tenantId: string = 'tenant_7f4e2b';
3const pendingEventId: string = '9f7b6a8c-3b2a-4c0d-a8e5-1234567890ab';
4const result: FlagCommentPublic200Response = await deletePendingWebhookEvent(tenantId, pendingEventId);
5console.log(result);
6

获取待处理 Webhook 事件计数 Internal Link

参数

名称 类型 必需 描述
tenantId string
commentId string
externalId string
eventType string
type string
domain string
attemptCountGT number

响应

返回: GetPendingWebhookEventCount200Response

示例

getPendingWebhookEventCount 示例
Copy Copy
1
2(async () => {
3 const tenantId: string = 'tenant_9c3b2b';
4 const commentId: string = 'cmt_f4a1b2';
5 const externalId: string = 'ext-789';
6 const eventType: string = 'comment.created';
7 const type: string = 'delivery';
8 const domain: string = 'app.example.com';
9 const attemptCountGT: number = 2;
10
11 const result: GetPendingWebhookEventCount200Response = await getPendingWebhookEventCount(
12 tenantId,
13 commentId,
14 externalId,
15 eventType,
16 type,
17 domain,
18 attemptCountGT
19 );
20
21 console.log(result);
22})();
23

获取待处理的 Webhook 事件 Internal Link

参数

名称 类型 必填 描述
tenantId string
commentId string
externalId string
eventType string
type string
domain string
attemptCountGT number
skip number

响应

返回:GetPendingWebhookEvents200Response

示例

getPendingWebhookEvents 示例
Copy Copy
1
2const tenantId: string = "tenant_78b2f1";
3const commentId: string = "cmt_0042";
4const eventType: string = "comment.created";
5const domain: string = "blog.example.com";
6const attemptCountGT: number = 1;
7const skip: number = 0;
8
9const pending: GetPendingWebhookEvents200Response = await getPendingWebhookEvents(
10 tenantId,
11 commentId,
12 undefined, // externalId
13 eventType,
14 undefined, // type
15 domain,
16 attemptCountGT,
17 skip
18);
19

创建问卷配置 Internal Link

参数

名称 类型 必需 描述
tenantId string
createQuestionConfigBody CreateQuestionConfigBody

响应

返回: CreateQuestionConfig200Response

示例

createQuestionConfig 示例
Copy Copy
1
2const tenantId: string = "tenant_live_7f8b3c2a";
3const customOptions: QuestionConfigCustomOptionsInner[] = [
4 { value: "under18", label: "Under 18" },
5 { value: "18-24", label: "18-24" },
6 { value: "25-34", label: "25-34", defaultSelected: true }
7];
8const createQuestionConfigBody: CreateQuestionConfigBody = {
9 key: "age_range",
10 label: "What is your age range?",
11 required: false, // 可选:演示省略与包含可选字段
12 renderingType: QuestionRenderingType.Dropdown,
13 options: customOptions,
14 whenSave: QuestionWhenSave.Always
15};
16const result: CreateQuestionConfig200Response = await createQuestionConfig(tenantId, createQuestionConfigBody);
17

删除问卷配置 Internal Link

参数

名称 类型 必需 描述
tenantId string
id string

响应

返回: FlagCommentPublic200Response

示例

deleteQuestionConfig 示例
Copy Copy
1
2async function deleteIfPresent(tenantId: string, id?: string): Promise<FlagCommentPublic200Response | null> {
3 if (!id) return null;
4 const result: FlagCommentPublic200Response = await deleteQuestionConfig(tenantId, id);
5 return result;
6}
7const tenantId: string = 'tenant_acme_001';
8const optionalConfigId: string | undefined = 'qcfg_20260112_01';
9(async (): Promise<void> => {
10 const deleted: FlagCommentPublic200Response | null = await deleteIfPresent(tenantId, optionalConfigId);
11 void deleted;
12})();
13

获取问卷配置 Internal Link

参数

名称 类型 必需 描述
tenantId string
id string

响应

返回: GetQuestionConfig200Response

示例

getQuestionConfig 示例
Copy Copy
1
2const tenantId: string = 'acme-corp-47';
3const questionId: string = 'q-2026-01-12-01';
4const result: GetQuestionConfig200Response = await getQuestionConfig(tenantId, questionId);
5function summarizeConfig(cfg: GetQuestionConfig200Response, includeMetadata?: boolean): QuestionConfig | undefined {
6 // includeMetadata 是可选的;为简洁起见省略实现
7 return undefined;
8}
9const summarizedWithMeta: QuestionConfig | undefined = summarizeConfig(result, true);
10const summarizedDefault: QuestionConfig | undefined = summarizeConfig(result);
11

获取问卷配置列表 Internal Link

参数

名称 类型 必需 描述
tenantId string
skip number

响应

返回: GetQuestionConfigs200Response

示例

getQuestionConfigs 示例
Copy Copy
1
2const tenantId: string = 'tenant-42a7b9';
3const firstPage: GetQuestionConfigs200Response = await getQuestionConfigs(tenantId);
4const secondPage: GetQuestionConfigs200Response = await getQuestionConfigs(tenantId, 50);
5

更新问卷配置 Internal Link

参数

名称 类型 必需 描述
tenantId string
id string
updateQuestionConfigBody UpdateQuestionConfigBody

响应

返回:FlagCommentPublic200Response

示例

updateQuestionConfig 示例
Copy Copy
1
2const tenantId: string = 'tenant-82b3a';
3const id: string = 'qst-20260112';
4const updateQuestionConfigBody: UpdateQuestionConfigBody = { label: 'Age verification', required: true, renderingType: 'singleChoice', customOptions: [{ value: '18-24', label: '18–24' }] } as UpdateQuestionConfigBody;
5const result: FlagCommentPublic200Response = await updateQuestionConfig(tenantId, id, updateQuestionConfigBody);
6

创建问卷结果 Internal Link


参数

名称 类型 必需 说明
tenantId string
createQuestionResultBody CreateQuestionResultBody

响应

返回: CreateQuestionResult200Response

示例

createQuestionResult 示例
Copy Copy
1
2const tenantId: string = "fc_tenant_7a3c_us-east-1";
3const metaItem: MetaItem = { key: "referrer", value: "/blog/how-to-comment" };
4const createQuestionResultBody: CreateQuestionResultBody = {
5 questionId: "q_42",
6 commenterId: "user_1984",
7 answer: "yes",
8 score: 4,
9 meta: [metaItem] // 可选的元数据示例
10} as CreateQuestionResultBody;
11const result: CreateQuestionResult200Response = await createQuestionResult(tenantId, createQuestionResultBody);
12

删除问卷结果 Internal Link


参数

名称 类型 必需 描述
tenantId string
id string

响应

返回:FlagCommentPublic200Response

示例

deleteQuestionResult 示例
Copy Copy
1
2const tenantId: string = 'acme-tenant-01';
3const questionResultId: string = '6f1a2b3c-4d5e-6789-abcd-ef0123456789';
4const deletedResult: FlagCommentPublic200Response = await deleteQuestionResult(tenantId, questionResultId);
5console.log(deletedResult);
6

获取问卷结果 Internal Link

参数

名称 类型 必填 描述
tenantId string
id string

响应

返回:GetQuestionResult200Response

示例

getQuestionResult 示例
Copy Copy
1
2const tenantId: string = "3fa85f64-5717-4562-b3fc-2c963f66afa6";
3const questionId: string = "question_72f1b9c3a4";
4const result: GetQuestionResult200Response = await getQuestionResult(tenantId, questionId);
5console.log(result);
6

获取问卷结果列表 Internal Link

参数

名称 类型 必需 描述
tenantId string
urlId string
userId string
startDate string
questionId string
questionIds string
skip number

响应

返回: GetQuestionResults200Response

示例

getQuestionResults 示例
Copy Copy
1
2const tenantId: string = 'tenant_42';
3const urlId: string = 'news/2025/fastcomments-release';
4const userId: string = 'user_8b7f3c';
5const startDate: string = '2025-01-01T00:00:00Z';
6const questionIds: string = 'q123,q124';
7const skip: number = 20;
8const result: GetQuestionResults200Response = await getQuestionResults(tenantId, urlId, userId, startDate, undefined, questionIds, skip);
9

更新问卷结果 Internal Link

参数

名称 类型 必需 描述
tenantId string
id string
updateQuestionResultBody UpdateQuestionResultBody

响应

返回: FlagCommentPublic200Response

示例

updateQuestionResult 示例
Copy Copy
1
2const tenantId: string = 'tenant_84f2b9';
3const id: string = 'question_3a7c1d';
4const updateQuestionResultBody: UpdateQuestionResultBody = {
5 result: { verdict: 'helpful', confidence: 0.92 },
6 reviewer: { id: 'mod_102', name: 'Aisha Rahman' },
7 notifyUser: true // 包含可选参数
8};
9const response: FlagCommentPublic200Response = await updateQuestionResult(tenantId, id, updateQuestionResultBody);
10

聚合问卷结果 Internal Link

参数

名称 类型 必需 描述
tenantId string
questionId string
questionIds Array
urlId string
timeBucket AggregateTimeBucket
startDate Date
forceRecalculate boolean

响应

返回: AggregateQuestionResults200Response


批量聚合问卷结果 Internal Link


参数

Name Type Required Description
tenantId string
bulkAggregateQuestionResultsRequest BulkAggregateQuestionResultsRequest
forceRecalculate boolean

响应

返回: BulkAggregateQuestionResults200Response


将评论与问卷结果合并 Internal Link

参数

名称 类型 必需 描述
tenantId string
questionId string
questionIds Array
urlId string
startDate Date
forceRecalculate boolean
minValue number
maxValue number
limit number

响应

返回: CombineCommentsWithQuestionResults200Response


添加单点登录用户 Internal Link

参数

名称 类型 必需 描述
tenantId string
createAPISSOUserData CreateAPISSOUserData

响应

返回: AddSSOUserAPIResponse

删除单点登录用户 Internal Link

参数

Name Type Required Description
tenantId string
id string
deleteComments boolean
commentDeleteMode string

响应

返回: DeleteSSOUserAPIResponse


通过电子邮件获取单点登录用户 Internal Link


参数

名称 类型 必需 描述
tenantId string
email string

响应

返回: GetSSOUserByEmailAPIResponse


通过 ID 获取单点登录用户 Internal Link

参数

名称 类型 必填 描述
tenantId string
id string

响应

返回: GetSSOUserByIdAPIResponse


获取单点登录用户列表 Internal Link

参数

名称 类型 必填 描述
tenantId string
skip number

响应

返回: GetSSOUsers200Response


部分更新单点登录用户 Internal Link


参数

名称 类型 必填 描述
tenantId string
id string
updateAPISSOUserData UpdateAPISSOUserData
updateComments boolean

响应

返回:PatchSSOUserAPIResponse


替换单点登录用户 Internal Link

参数

名称 类型 是否必需 描述
tenantId string
id string
updateAPISSOUserData UpdateAPISSOUserData
updateComments boolean

响应

返回: PutSSOUserAPIResponse

创建订阅 Internal Link

参数

Name Type Required Description
tenantId string
createAPIUserSubscriptionData CreateAPIUserSubscriptionData

响应

返回: CreateSubscriptionAPIResponse


删除订阅 Internal Link

参数

Name Type Required Description
tenantId string
id string
userId string

响应

返回: DeleteSubscriptionAPIResponse


获取订阅列表 Internal Link

参数

名称 类型 必需 描述
tenantId string
userId string

响应

返回: GetSubscriptionsAPIResponse


获取租户每日使用情况 Internal Link

参数

名称 类型 必需 描述
tenantId string
yearNumber number
monthNumber number
dayNumber number
skip number

响应

返回: GetTenantDailyUsages200Response

示例

getTenantDailyUsages 示例
Copy Copy
1
2const tenantId: string = "tenant_89f3c2-prod";
3const yearNumber: number = 2026;
4const monthNumber: number = 1;
5const skip: number = 0;
6const usages: GetTenantDailyUsages200Response = await getTenantDailyUsages(tenantId, yearNumber, monthNumber, undefined, skip);
7

创建租户套餐 Internal Link

参数

名称 类型 必填 描述
tenantId string
createTenantPackageBody CreateTenantPackageBody

响应

返回: CreateTenantPackage200Response

示例

createTenantPackage 示例
Copy Copy
1
2const tenantId: string = "tenant_7f3b1a9c";
3const tenantPackage: TenantPackage = { id: "pkg_001", name: "Premium Plan", seats: 100 };
4const customConfig: CustomConfigParameters = { enableImages: true, maxImageSizeMb: 10 };
5const createTenantPackageBody: CreateTenantPackageBody = {
6 packageName: "Premium Plus",
7 tenantPackage,
8 customConfig,
9 notes: "Enable advanced moderation and image uploads" // 可选参数示例
10};
11const result: CreateTenantPackage200Response = await createTenantPackage(tenantId, createTenantPackageBody);
12

删除租户套餐 Internal Link

参数

名称 类型 必填 描述
tenantId string
id string

响应

返回: FlagCommentPublic200Response

示例

deleteTenantPackage 示例
Copy Copy
1
2const tenantId: string = 'fc-tenant-8a9c2b';
3const packageId: string = 'pkg-47f3c9';
4const result: FlagCommentPublic200Response = await deleteTenantPackage(tenantId, packageId);
5

获取租户套餐 Internal Link

参数

Name Type Required Description
tenantId string
id string

响应

返回: GetTenantPackage200Response

示例

getTenantPackage 示例
Copy Copy
1
2const tenantId: string = 'tenant_westus_01';
3const packageId: string = 'pkg_premium_annual_2026';
4interface FetchOptions { includeArchived?: boolean }
5const options: FetchOptions = { includeArchived: false };
6const result: GetTenantPackage200Response = await getTenantPackage(tenantId, packageId);
7

获取租户套餐列表 Internal Link

参数

名称 类型 必需 描述
tenantId string
skip number

响应

返回: GetTenantPackages200Response

示例

getTenantPackages 示例
Copy Copy
1
2const tenantId: string = 'tenant_4f3a9c2d';
3const skip: number = 25;
4const packagesResponse: GetTenantPackages200Response = await getTenantPackages(tenantId);
5const pagedPackagesResponse: GetTenantPackages200Response = await getTenantPackages(tenantId, skip);
6

替换租户套餐 Internal Link

参数

名称 类型 必需 描述
tenantId string
id string
replaceTenantPackageBody ReplaceTenantPackageBody

响应

返回: FlagCommentPublic200Response

示例

replaceTenantPackage 示例
Copy Copy
1
2const tenantId: string = 'tenant-9b72f2';
3const packageId: string = 'pkg-prod-v2';
4const replaceTenantPackageBody: ReplaceTenantPackageBody = {
5 name: 'Premium Moderation Bundle',
6 enabled: true,
7 maxModerators: 4,
8 // 类似 "notes" 或 "trialExpiry" 的可选字段在此处故意省略
9} as ReplaceTenantPackageBody;
10const result: FlagCommentPublic200Response = await replaceTenantPackage(
11 tenantId,
12 packageId,
13 replaceTenantPackageBody
14);
15

更新租户套餐 Internal Link

参数

名称 类型 必填 说明
tenantId string
id string
updateTenantPackageBody UpdateTenantPackageBody

响应

返回: FlagCommentPublic200Response

示例

updateTenantPackage 示例
Copy Copy
1
2const tenantId: string = 'tenant_8a4f1c9b';
3const packageId: string = 'pkg_premium_v2';
4const customConfig: CustomConfigParameters = { enableRichText: true, maxImagesPerComment: 5 };
5const updateTenantPackageBody: UpdateTenantPackageBody = {
6 name: 'Premium Moderation Package',
7 enabled: true,
8 description: 'Adds advanced spam rules, image moderation and priority support',
9 customConfigParameters: customConfig
10};
11const result: FlagCommentPublic200Response = await updateTenantPackage(tenantId, packageId, updateTenantPackageBody);
12

创建租户用户 Internal Link


参数

名称 类型 必需 描述
tenantId string
createTenantUserBody CreateTenantUserBody

响应

返回: CreateTenantUser200Response

示例

createTenantUser 示例
Copy Copy
1
2const tenantId: string = "tenant_9a8c7e4b";
3const createTenantUserBody: CreateTenantUserBody = {
4 email: "julia.smith@acme-corp.com",
5 displayName: "Julia Smith",
6 role: "moderator",
7 password: "Str0ngP@ssword!23",
8 sendInviteEmail: true, // 可选参数示例
9 locale: "en-US",
10 metadata: { department: "Customer Success" }
11};
12const result: CreateTenantUser200Response = await createTenantUser(tenantId, createTenantUserBody);
13

删除租户用户 Internal Link

参数

名称 类型 必需 描述
tenantId string
id string
deleteComments string
commentDeleteMode string

响应

返回: FlagCommentPublic200Response

示例

deleteTenantUser 示例
Copy Copy
1
2const tenantId: string = 'tenant_8f3b2a9c';
3const id: string = 'user_4e5f6a7b';
4const deleteComments: string = 'true';
5const commentDeleteMode: string = 'hard';
6
7const result: FlagCommentPublic200Response = await deleteTenantUser(tenantId, id, deleteComments, commentDeleteMode);
8

获取租户用户 Internal Link

参数

名称 类型 必填 描述
tenantId string
id string

响应

返回: GetTenantUser200Response

示例

getTenantUser 示例
Copy Copy
1
2const tenantId: string = "tenant_9f7d4b2a-1c3e";
3const id: string = "user_6a12b3c4d5";
4const includeProfile: boolean | undefined = true; // 可选参数示例
5const response: GetTenantUser200Response = await getTenantUser(tenantId, id);
6console.log("Tenant user fetched", response);
7

获取租户用户列表 Internal Link

参数

名称 类型 必填 说明
tenantId string
skip number

响应

返回: GetTenantUsers200Response

示例

getTenantUsers 示例
Copy Copy
1
2const tenantId: string = 'tenant_8f3b2c1a';
3const skip: number = 50;
4const firstPage: GetTenantUsers200Response = await getTenantUsers(tenantId);
5const nextPage: GetTenantUsers200Response = await getTenantUsers(tenantId, skip);
6

替换租户用户 Internal Link

参数

名称 类型 必需 描述
tenantId string
id string
replaceTenantUserBody ReplaceTenantUserBody
updateComments string

响应

返回:FlagCommentPublic200Response

示例

replaceTenantUser 示例
Copy Copy
1
2const tenantId: string = "tenant_5f8b9a";
3const id: string = "user_92bf21";
4const replaceTenantUserBody: ReplaceTenantUserBody = {
5 email: "jane.doe@acme-corp.com",
6 displayName: "Jane Doe",
7 externalId: "acme|12345",
8 roles: ["commenter", "moderator"],
9 isActive: true,
10 metadata: { team: "product", location: "NYC" }
11};
12const updateComments: string = "Update historical comments to reflect new display name";
13const result: FlagCommentPublic200Response = await replaceTenantUser(tenantId, id, replaceTenantUserBody, updateComments);
14

参数

名称 类型 必填 描述
tenantId string
id string
redirectURL string

响应

返回: FlagCommentPublic200Response

示例

sendLoginLink 示例
Copy Copy
1
2const tenantId: string = 'tenant_acme_01';
3const id: string = 'user_9f3b2a';
4const redirectURL: string = 'https://app.example.com/onboard?source=login-email';
5const result: FlagCommentPublic200Response = await sendLoginLink(tenantId, id, redirectURL);
6

更新租户用户 Internal Link

参数

Name Type Required Description
tenantId string
id string
updateTenantUserBody UpdateTenantUserBody
updateComments string

响应

返回: FlagCommentPublic200Response

示例

updateTenantUser 示例
Copy Copy
1
2const tenantId: string = 'tenant_84f3b2';
3const id: string = 'user_7a9d1c';
4const updateComments: string = 'Promoted to moderator and updated contact email';
5const updateTenantUserBody: UpdateTenantUserBody = {
6 email: 'jane.doe+mod@example.com',
7 displayName: 'Jane D.',
8 roles: ['moderator'],
9 isBanned: false,
10 metadata: { department: 'community' }
11};
12const result: FlagCommentPublic200Response = await updateTenantUser(tenantId, id, updateTenantUserBody, updateComments);
13

创建租户 Internal Link

参数

名称 类型 必需 描述
tenantId string
createTenantBody CreateTenantBody

响应

返回:CreateTenant200Response

示例

createTenant 示例
Copy Copy
1
2const tenantId: string = "acme-corporation";
3const billing: BillingInfo = { planId: "pro", billingContactEmail: "finance@acme-corp.com", currency: "USD" };
4const domainConfig: APIDomainConfiguration = { primaryDomain: "comments.acme-corp.com", allowedDomains: ["acme-corp.com", "www.acme-corp.com"], enforceHttps: true };
5const importedSites: ImportedSiteType[] = [{ siteId: "site-001", url: "https://blog.acme-corp.com", name: "Acme Blog" }]; // optional
6const createBody: CreateTenantBody = { tenantName: "Acme Corporation", adminEmail: "admin@acme-corp.com", billingInfo: billing, domainConfiguration: domainConfig, importedSites, enableModeration: true };
7const response: CreateTenant200Response = await createTenant(tenantId, createBody);
8

删除租户 Internal Link

参数

名称 类型 必需 描述
tenantId string
id string
sure string

响应

返回:FlagCommentPublic200Response

示例

deleteTenant 示例
Copy Copy
1
2const tenantId: string = "tenant_7b3f1a9e";
3const id: string = "flag_9c4d2b1a";
4const sure: string = "yes_confirm_delete";
5
6const result: FlagCommentPublic200Response = await deleteTenant(tenantId, id, sure);
7console.log(result);
8

获取租户 Internal Link

参数

名称 类型 必填 描述
tenantId string
id string

响应

返回: GetTenant200Response

示例

getTenant 示例
Copy Copy
1
2const tenantId: string = "tenant_acme_corp";
3const id: string = "f47ac10b-58cc-4372-a567-0e02b2c3d479";
4interface GetOptions { includeDeleted?: boolean; locale?: string; }
5const options: GetOptions = { locale: "en-US" };
6const result: GetTenant200Response = await getTenant(tenantId, id);
7

获取租户列表 Internal Link

参数

Name Type Required Description
tenantId string
meta string
skip number

响应

返回:GetTenants200Response

示例

getTenants 示例
Copy Copy
1
2(async () => {
3 const tenantId: string = 'tenant_9f2d1b7c';
4 const meta: string = 'include=domains,billing,customConfig';
5 const skip: number = 20;
6 const response: GetTenants200Response = await getTenants(tenantId, meta, skip);
7 console.log(response);
8})();
9

更新租户 Internal Link

参数

名称 类型 必填 描述
tenantId string
id string
updateTenantBody UpdateTenantBody

响应

返回: FlagCommentPublic200Response

示例

updateTenant 示例
Copy Copy
1
2const tenantId: string = "tenant_01H4ZQ7KABCD";
3const id: string = "site_9f8e7d6c";
4const apiDomainConfiguration: APIDomainConfiguration = {
5 primaryDomain: "comments.acme.com",
6 allowSubdomains: true
7};
8const billingInfo: BillingInfo = {
9 planName: "Business",
10 billingContactEmail: "billing@acme.com",
11 seats: 25
12};
13const updateTenantBody: UpdateTenantBody = {
14 displayName: "Acme Corporation Comments",
15 apiDomainConfiguration,
16 billingInfo, // 演示可选参数
17 enableModeration: true
18};
19const result: FlagCommentPublic200Response = await updateTenant(tenantId, id, updateTenantBody);
20

上传图片 Internal Link

上传并调整图像大小

参数

名称 类型 必需 描述
tenantId string
file Blob
sizePreset SizePreset
urlId string

响应

返回: UploadImageResponse


通过 ID 获取用户徽章进度 Internal Link


参数

名称 类型 必需 描述
tenantId string
id string

响应

返回: GetUserBadgeProgressById200Response


通过用户 ID 获取用户徽章进度 Internal Link


参数

名称 类型 必需 描述
tenantId string
userId string

响应

返回: GetUserBadgeProgressById200Response


获取用户徽章进度列表 Internal Link


参数

名称 类型 必需 描述
tenantId string
userId string
limit number
skip number

响应

返回: GetUserBadgeProgressList200Response


创建用户徽章 Internal Link

参数

名称 类型 必需 说明
tenantId string
createUserBadgeParams CreateUserBadgeParams

响应

返回: CreateUserBadge200Response


删除用户徽章 Internal Link

参数

名称 类型 必填 描述
tenantId string
id string

响应

返回: UpdateUserBadge200Response


获取用户徽章 Internal Link

参数

Name Type Required Description
tenantId string
id string

响应

返回: GetUserBadge200Response


获取用户徽章列表 Internal Link

参数

名称 类型 必需 说明
tenantId string
userId string
badgeId string
type number
displayedOnComments boolean
limit number
skip number

响应

返回: GetUserBadges200Response


更新用户徽章 Internal Link


参数

名称 类型 必需 描述
tenantId string
id string
updateUserBadgeParams UpdateUserBadgeParams

响应

返回: UpdateUserBadge200Response


获取用户通知计数 Internal Link


参数

名称 类型 必需 描述
tenantId string
sso string

响应

返回: GetUserNotificationCount200Response


获取用户通知 Internal Link

参数

名称 类型 必需 描述
tenantId string
pageSize number
afterId string
includeContext boolean
afterCreatedAt number
unreadOnly boolean
dmOnly boolean
noDm boolean
includeTranslations boolean
sso string

响应

返回: GetUserNotifications200Response


重置用户通知计数 Internal Link

参数

名称 类型 必需 描述
tenantId string
sso string

响应

返回: ResetUserNotifications200Response


重置用户通知 Internal Link

参数

名称 类型 必需 描述
tenantId string
afterId string
afterCreatedAt number
unreadOnly boolean
dmOnly boolean
noDm boolean
sso string

响应

返回: ResetUserNotifications200Response


更新用户评论订阅状态 Internal Link

启用或禁用针对特定评论的通知。

参数

名称 类型 必需 描述
tenantId string
notificationId string
optedInOrOut UpdateUserNotificationCommentSubscriptionStatusOptedInOrOutEnum
commentId string
sso string

响应

返回: UpdateUserNotificationStatus200Response

更新用户页面订阅状态 Internal Link

启用或禁用页面的通知。当用户订阅页面时,会为新的根评论创建通知,并且

参数

名称 类型 必填 描述
tenantId string
urlId string
url string
pageTitle string
subscribedOrUnsubscribed UpdateUserNotificationPageSubscriptionStatusSubscribedOrUnsubscribedEnum
sso string

响应

返回: UpdateUserNotificationStatus200Response


更新用户通知状态 Internal Link

参数

名称 类型 必填 描述
tenantId string
notificationId string
newStatus UpdateUserNotificationStatusNewStatusEnum
sso string

响应

返回: UpdateUserNotificationStatus200Response


获取用户在线状态 Internal Link


参数

名称 类型 必需 描述
tenantId string
urlIdWS string
userIds string

响应

返回: GetUserPresenceStatuses200Response


搜索用户 Internal Link


参数

名称 类型 必需 描述
tenantId string
urlId string
usernameStartsWith string
mentionGroupIds Array
sso string

响应

返回: SearchUsers200Response


获取用户 Internal Link

参数

名称 类型 必填 描述
tenantId string
id string

响应

返回: GetUser200Response

示例

getUser 示例
Copy Copy
1
2const tenantId: string = "acme-publishing-42";
3const userIdOptional: string | undefined = "user_9d7b4c"; // 在某些流程中可能为 undefined(可选)
4const id: string = userIdOptional ?? "user_default_0001";
5const result: GetUser200Response = await getUser(tenantId, id);
6console.log(result);
7

创建投票 Internal Link

参数

名称 类型 必需 描述
tenantId string
commentId string
direction CreateVoteDirectionEnum
userId string
anonUserId string

响应

返回: VoteComment200Response

示例

createVote 示例
Copy Copy
1
2(async () => {
3 const tenantId: string = 'acme-tenant-812';
4 const commentId: string = '5e8f8b7a-3d4b-4f1b-9a2e-1c9f2d6a7b8c';
5 const direction: CreateVoteDirectionEnum = CreateVoteDirectionEnum.UP;
6 const anonUserId: string = 'anon-84b9c2d';
7 const voteResult: VoteComment200Response = await createVote(tenantId, commentId, direction, undefined, anonUserId);
8 console.log(voteResult);
9})();
10

删除投票 Internal Link

参数

Name Type Required Description
tenantId string
id string
editKey string

响应

返回: DeleteCommentVote200Response

示例

deleteVote 示例
Copy Copy
1
2const tenantId: string = 'tenant_7f3b21c9';
3const id: string = 'vote_4a2d9f1b';
4const editKey: string = 'edit_92b7c6a1';
5
6const resultWithoutEditKey: DeleteCommentVote200Response = await deleteVote(tenantId, id);
7const resultWithEditKey: DeleteCommentVote200Response = await deleteVote(tenantId, id, editKey);
8

获取投票 Internal Link

参数

名称 类型 必需 描述
tenantId string
urlId string

响应

返回: GetVotes200Response

示例

getVotes 示例
Copy Copy
1
2const tenantId: string = 'tenant_9f8b3c_prod';
3const urlId: string = '/news/2026/typescript-ecosystem-update';
4const votes: GetVotes200Response = await getVotes(tenantId, urlId);
5// 如果存在可选参数,例如 includeHidden,它可能像下面这样使用:
6// const votesWithHidden: GetVotes200Response = await getVotes(tenantId, urlId, { includeHidden: true });
7

获取用户的投票 Internal Link

参数

名称 类型 必需 描述
tenantId string
urlId string
userId string
anonUserId string

响应

返回: GetVotesForUser200Response

示例

getVotesForUser 示例
Copy Copy
1
2const tenantId: string = 'tenant_acme_01';
3const urlId: string = 'news/2026/01/12/product-launch';
4const userId: string = 'user_9c3f2b';
5const anonUserId: string = 'anon_d4e7a1';
6
7const votesForUser: GetVotesForUser200Response = await getVotesForUser(tenantId, urlId, userId);
8const votesForAnon: GetVotesForUser200Response = await getVotesForUser(tenantId, urlId, undefined, anonUserId);
9

需要帮助?

如果您在使用 JavaScript/TypeScript SDK 时遇到任何问题或有疑问,请:

贡献

欢迎贡献!请访问 GitHub 仓库 获取贡献指南。