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 (default) - 僅型別,能安全在任何地方匯入

公開與受保護的 API Internal Link

此 SDK 提供三個主要的 API 類別:

  • DefaultApi - 需要您的 API 金鑰進行驗證的受保護端點。用於伺服器端操作。
  • PublicApi - 可在無需 API 金鑰的情況下存取的公開端點。可直接從瀏覽器/行動裝置等呼叫。
  • HiddenApi - 供內部/管理用途的端點,適用於進階使用情境。

範例:使用 Public API(瀏覽器安全)

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

const publicApi = new PublicApi();

// 取得頁面評論(不需要 API 金鑰)
const response = await publicApi.getCommentsPublic({
  tenantId: 'your-tenant-id',
  urlId: 'page-url-id'
});

範例:使用 Default API(僅限伺服器端)

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 功能。

Simple SSO (Server-Side Only)

簡易 SSO 應在伺服器端產生並傳送給客戶端:

// 伺服器端程式碼(Node.js/backend)
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 傳送到你的客戶端程式碼
// 客戶端程式碼之後可以使用此 token 與瀏覽器 SDK

安全 SSO 應在伺服器端實作,並提供較佳的安全性:

// 伺服器端程式碼(Node.js/backend)
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 傳送給客戶端供瀏覽器使用

Using SSO from Browser (with Server-Generated Token)

// 客戶端程式碼(瀏覽器)
import { PublicApi } from 'fastcomments-sdk/browser';

// 從你的伺服器端點取得 SSO token
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 // 使用伺服器產生的 SSO token
});

SSO with Comment Creation

// 伺服器端:建立 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',
};

// 訂閱該頁面的即時事件
const subscription = subscribeToChanges(
  config,
  'your-tenant-id', // tenantIdWS(租戶 ID)
  'page-url-id',    // urlIdWS(頁面 URL ID)  
  'user-session-id', // userIdWS(從 getComments 回應取得)
  (event: LiveEvent) => {
    console.log('Live event received:', event);

    switch (event.type) {
      case LiveEventType.new_comment:
        console.log('New comment:', event.comment);
        // 使用新留言更新您的介面
        break;
      case LiveEventType.new_vote:
        console.log('New vote:', event.vote);
        // 在介面中更新票數
        break;
      case LiveEventType.updated_comment:
        console.log('Comment updated:', event.comment);
        break;
      default:
        console.log('Other event type:', event.type);
    }

    return true; // 若事件已處理則回傳 true
  },
  (isConnected: boolean) => {
    console.log('Connection status:', isConnected ? 'Connected' : 'Disconnected');
  }
);

// 完成後關閉訂閱
subscription.close();

訂閱使用者事件

監聽與特定使用者相關的事件(通知、提及等):

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

const userConfig = {
  userIdWS: 'user-session-id', // 從 getComments 回應取得
};

// 訂閱使用者的個人資訊流
const userSubscription = subscribeToUserFeed(
  userConfig,
  (event: LiveEvent) => {
    console.log('User event received:', event);

    switch (event.type) {
      case LiveEventType.notification:
        console.log('New notification:', event.notification);
        // 在您的介面中顯示通知
        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');
  }
);

// 完成後關閉
userSubscription.close();

取得 userIdWS

參數 userIdWS 為即時事件所需,可從 API 回應中取得:

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

// 從回應中擷取 userIdWS
const userIdWS = response.data?.userSessionInfo?.userIdWS;

if (userIdWS) {
  // 現在您可以訂閱即時事件
  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() // 此操作的唯一識別碼
  }
});

錯誤處理 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 等)。

參數

Name Type Required Description
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

回應

Returns: 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


參數

名稱 類型 必填 說明
tenantId string
id string
userId string
anonUserId string

回應

回傳: FlagComment200Response


解鎖留言 Internal Link

Parameters

名稱 類型 必填 說明
tenantId string
commentId string
broadcastId string
sso string

Response

回傳: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

參數

Name Type Required Description
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

參數

Name Type Required Description
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

參數

Name Type Required Description
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

參數

Name Type Required Description
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


參數

名稱 類型 必填 說明
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

參數

名稱 類型 必填 描述
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

參數

Name Type Required Description
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

參數

名稱 類型 必填 說明
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

參數

Name Type Required Description
tag string Yes
tenantId string No
deleteHashTagRequest DeleteHashTagRequest No

回應

回傳: 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

參數

名稱 類型 必要 描述
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"; // 選擇性來源(可能為 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

參數

名稱 類型 必填 說明
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

參數

Name Type Required Description
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

參數

名稱 類型 必填 說明
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

參數

Name Type Required Description
tenantId string
id string

Response

回傳: DeletePageAPIResponse

以 URLId 取得頁面 Internal Link


參數

名稱 類型 必填 描述
tenantId string
urlId string

回應

回傳:GetPageByURLIdAPIResponse


取得頁面列表 Internal Link


參數

名稱 類型 必填 描述
tenantId string

回應

回傳: GetPagesAPIResponse


變更頁面 Internal Link


參數

Name Type Required Description
tenantId string
id string
updateAPIPageData UpdateAPIPageData

回應

回傳: PatchPageAPIResponse


刪除待處理的 Webhook 事件 Internal Link

參數

名稱 Type 必填 說明
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

參數

Name Type Required Description
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

參數

Name Type Required Description
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 Yes
id string Yes

回應

回傳: 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

參數

名稱 類型 必填 描述
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

新增 SSO 使用者 Internal Link


參數

名稱 類型 必填 描述
tenantId string
createAPISSOUserData CreateAPISSOUserData

回應

回傳:AddSSOUserAPIResponse


刪除 SSO 使用者 Internal Link

參數

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

回應

回傳: DeleteSSOUserAPIResponse


以電郵取得 SSO 使用者 Internal Link


參數

名稱 類型 必填 說明
tenantId string
email string

回應

回傳: GetSSOUserByEmailAPIResponse


以 ID 取得 SSO 使用者 Internal Link

參數

名稱 類型 必填 描述
tenantId string
id string

回應

回傳: GetSSOUserByIdAPIResponse

取得 SSO 使用者列表 Internal Link


參數

名稱 類型 必填 描述
tenantId string
skip number

回應

回傳: GetSSOUsers200Response


變更 SSO 使用者 Internal Link


參數

Name Type Required Description
tenantId string
id string
updateAPISSOUserData UpdateAPISSOUserData
updateComments boolean

回應

回傳: PatchSSOUserAPIResponse


覆寫 SSO 使用者 Internal Link


參數

名稱 類型 必填 描述
tenantId string
id string
updateAPISSOUserData UpdateAPISSOUserData
updateComments boolean

回傳

回傳: PutSSOUserAPIResponse


建立訂閱 Internal Link


參數

名稱 類型 必填 說明
tenantId string
createAPIUserSubscriptionData CreateAPIUserSubscriptionData

回應

回傳: CreateSubscriptionAPIResponse


刪除訂閱 Internal Link


參數

名稱 類型 必填 說明
tenantId string
id string
userId string

回應

回傳: DeleteSubscriptionAPIResponse


取得訂閱列表 Internal Link

參數

Name Type Required Description
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


參數

Name Type Required Description
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

參數

名稱 類型 必填 描述
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

參數

Name Type Required Description
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

參數

Name Type Required Description
tenantId string Yes
id string Yes
deleteComments string No
commentDeleteMode string No

回應

回傳: 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

參數

名稱 類型 必填 說明
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" }]; // 可選
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

參數

名稱 類型 必填 說明
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


參數

名稱 類型 必填 說明
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

參數

Name Type Required Description
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

參數

名稱 Type 必填 描述
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

參數

Name Type Required Description
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 儲存庫 以取得貢獻指南。