FastComments.com

FastComments JavaScript/TypeScript SDK


這是 FastComments 的官方 JavaScript/TypeScript SDK。

可從 Node.js 或瀏覽器管理評論、使用者、SSO(單一登入)和審核。

儲存庫

在 GitHub 上查看


安裝 Internal Link

npm

npm install fastcomments-sdk

API 文件 Internal Link


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

瀏覽器 vs 伺服器 相容性 Internal Link


此 SDK 使用 雙入口點 以確保最佳相容性並避免執行時錯誤:

  • fastcomments-sdk/browser - 瀏覽器安全的版本,使用原生 fetch
  • fastcomments-sdk/server - 完整的 Node.js 版本,支援 SSO
  • fastcomments-sdk (default) - 僅型別,能安全在任何地方匯入

公開 API vs 受保護 API Internal Link

該 SDK 提供以下 API 類別:

  • DefaultApi - 需要您的 API 金鑰用於驗證的受保護端點。用於伺服器端作業。
  • PublicApi - 可在未提供 API 金鑰下存取的公開端點。可直接從瀏覽器/行動裝置/等呼叫。
  • ModerationApi - 管理員儀表板端點(留言審核、封鎖、徽章、信任指數、搜尋)。透過管理員的會話進行驗證;對於以 SSO 驗證的管理員,傳入 sso 查詢參數。
  • 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'
});

範例:使用 Moderation API

import { createFastCommentsSDK } from 'fastcomments-sdk/server';

const sdk = createFastCommentsSDK({ /* basePath 等 */ });

// 管理員已驗證的呼叫(使用 session cookie,或為 SSO 管理員傳入 `sso`)。
const comments = await sdk.moderationApi.getApiComments({
  tenantId: 'your-tenant-id'
});

await sdk.moderationApi.postSetCommentSpamStatus({
  commentId: 'comment-id',
  spam: true
});

單一登入 (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 等)。

參數

名稱類型必填描述
tenantIdstringYes
aggregationRequestAggregationRequestYes
parentTenantIdstringNo
includeStatsbooleanNo

回應

返回:AggregateResponse

範例

聚合 示例
Copy Copy
1
2const tenantId: string = "tenant-12345";
3
4const aggregationRequest: AggregationRequest = {
5 predicates: [
6 {
7 field: "status",
8 operator: "eq",
9 value: { type: "string", value: "approved" }
10 }
11 ],
12 operations: [
13 { type: "count", field: "commentId" }
14 ],
15 sort: { field: "createdAt", direction: "desc" }
16};
17
18const parentTenantId: string = "parent-001";
19const includeStats: boolean = true;
20
21const result: AggregateResponse = await aggregate(
22 tenantId,
23 aggregationRequest,
24 parentTenantId,
25 includeStats
26);
27

取得稽核日誌 Internal Link

參數

名稱類型必填描述
tenantIdstringYes
limitnumberNo
skipnumberNo
orderSORTDIRNo
afternumberNo
beforenumberNo

回應

返回:GetAuditLogsResponse1

範例

getAuditLogs 範例
Copy Copy
1
2(async () => {
3 const tenantId: string = "tenant_42";
4 const limit: number = 100;
5 const skip: number = 10;
6 const order: SORTDIR = "desc";
7 const after: number = Date.now() - 3 * 24 * 60 * 60 * 1000; // 3 天前
8
9 const auditResponse: GetAuditLogsResponse1 = await getAuditLogs(
10 tenantId,
11 limit,
12 skip,
13 order,
14 after
15 );
16
17 console.log(auditResponse);
18})();
19

從留言封鎖(公開) Internal Link

參數

名稱類型必填描述
tenantIdstring
commentIdstring
publicBlockFromCommentParamsPublicBlockFromCommentParams
ssostring

回應

返回: BlockFromCommentPublicResponse

範例

blockFromCommentPublic 範例
Copy Copy
1
2async function demo() {
3 const tenantId: string = "tenant_9f8b7c";
4 const commentId: string = "cmt_1234567890";
5 const blockParams: PublicBlockFromCommentParams = {
6 reason: "spam",
7 durationHours: 24,
8 };
9 const ssoToken: string = "sso_ABCDEF123456";
10
11 const responseWithSso: BlockFromCommentPublicResponse = await blockFromCommentPublic(
12 tenantId,
13 commentId,
14 blockParams,
15 ssoToken
16 );
17
18 const responseWithoutSso: BlockFromCommentPublicResponse = await blockFromCommentPublic(
19 tenantId,
20 commentId,
21 blockParams
22 );
23
24 console.log(responseWithSso, responseWithoutSso);
25}
26demo();
27

解除封鎖留言(公開) Internal Link

參數

名稱類型必填說明
tenantIdstring
commentIdstring
publicBlockFromCommentParamsPublicBlockFromCommentParams
ssostring

回應

回傳: UnBlockCommentPublicResponse

範例

unBlockCommentPublic 範例
Copy Copy
1
2const tenantId: string = "acme-corp-tenant";
3const commentId: string = "cmt-20230915-001";
4const unblockParams: PublicBlockFromCommentParams = {
5 reason: "User appealed and was cleared",
6 unblockExpiresAt: new Date(Date.now() + 24 * 60 * 60 * 1000).toISOString()
7};
8const ssoToken: string = "sso-3d9f8a7b";
9
10const result: UnBlockCommentPublicResponse = await unBlockCommentPublic(
11 tenantId,
12 commentId,
13 unblockParams,
14 ssoToken
15);
16

檢查被封鎖的留言 Internal Link

參數

名稱類型必填說明
tenantIdstringYes
commentIdsstringYes
ssostringNo

回應

返回:CheckedCommentsForBlockedResponse

範例

checkedCommentsForBlocked 範例
Copy Copy
1
2(async () => {
3 const tenantId: string = "acme-corp-123";
4 const commentIds: string = "cmt_001,cmt_002";
5 const ssoToken: string = "ssoTokenXYZ";
6
7 const blockedCheck: CheckedCommentsForBlockedResponse = await checkedCommentsForBlocked(tenantId, commentIds);
8 const blockedCheckWithSso: CheckedCommentsForBlockedResponse = await checkedCommentsForBlocked(tenantId, commentIds, ssoToken);
9})();
10

封鎖使用者(留言) Internal Link

參數

名稱類型必要描述
tenantIdstring
idstring
blockFromCommentParamsBlockFromCommentParams
userIdstring
anonUserIdstring

回應

返回: BlockUserFromCommentResponse

範例

blockUserFromComment 範例
Copy Copy
1
2const tenantId: string = 'tenant_42';
3const commentId: string = 'cmt_20231101';
4
5const blockParams: BlockFromCommentParams = {
6 reason: 'spam',
7 blockDurationHours: 24,
8};
9
10const userId: string = 'user_123'; // 可選參數
11
12const response: BlockUserFromCommentResponse = await blockUserFromComment(
13 tenantId,
14 commentId,
15 blockParams,
16 userId
17);
18

建立公開留言 Internal Link

參數

名稱類型必填描述
tenantIdstringYes
urlIdstringYes
broadcastIdstringYes
commentDataCommentDataYes
sessionIdstringNo
ssostringNo

回應

返回: CreateCommentPublicResponse

示例

createCommentPublic 示例
Copy Copy
1
2(async () => {
3 const tenantId: string = "tenant-abc123";
4 const urlId: string = "post-987654";
5 const broadcastId: string = "bcast-001";
6 const commentData: CommentData = {
7 content: "I really enjoyed this article!"
8 };
9 const sessionId: string = "session-xyz789";
10 const sso: string = "sso-token-456def";
11
12 const response: CreateCommentPublicResponse = await createCommentPublic(
13 tenantId,
14 urlId,
15 broadcastId,
16 commentData,
17 sessionId,
18 sso
19 );
20
21 console.log(response);
22})();
23

刪除留言 Internal Link

參數

NameTypeRequiredDescription
tenantIdstring
idstring
contextUserIdstring
isLiveboolean

回應

Returns: DeleteCommentResponse

範例

deleteComment 範例
Copy Copy
1
2(async () => {
3 const tenantId: string = 'tenant_01';
4 const commentId: string = 'comment_abc123';
5 const contextUserId: string = 'user_42';
6 const isLive: boolean = false;
7
8 const deleteResult: DeleteCommentResponse = await deleteComment(tenantId, commentId, contextUserId, isLive);
9 const simpleResult: DeleteCommentResponse = await deleteComment(tenantId, commentId);
10})();
11

刪除公開留言 Internal Link

參數

名稱類型必填說明
tenantIdstringYes
commentIdstringYes
broadcastIdstringYes
editKeystringNo
ssostringNo

回應

返回: DeleteCommentPublicResponse

範例

deleteCommentPublic 範例
Copy Copy
1
2(async () => {
3 const tenantId: string = 'c6f9a2e3-9b1d-4f8a-b2d2-1a2b3c4d5e6f';
4 const commentId: string = '7d9f0b1c-2e3f-4a5b-6c7d-8e9f0a1b2c3d';
5 const broadcastId: string = 'live-2023-09-15';
6 const editKey: string = 'ed1tK3y1234567890';
7 const sso: string = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.abc123';
8
9 const result: DeleteCommentPublicResponse = await deleteCommentPublic(
10 tenantId,
11 commentId,
12 broadcastId,
13 editKey,
14 sso
15 );
16})();
17

刪除留言投票 Internal Link

參數

名稱類型必填說明
tenantIdstring
commentIdstring
voteIdstring
urlIdstring
broadcastIdstring
editKeystring
ssostring

回應

返回:DeleteCommentVoteResponse

範例

deleteCommentVote 範例
Copy Copy
1
2async function removeVote() {
3 const tenantId: string = "tenant_12345";
4 const commentId: string = "cmt_98765";
5 const voteId: string = "vote_abcde";
6 const urlId: string = "url_56789";
7 const broadcastId: string = "brd_001";
8 const editKey: string = "edit_456";
9 // sso 為可選項,已省略
10
11 const response: DeleteCommentVoteResponse = await deleteCommentVote(
12 tenantId,
13 commentId,
14 voteId,
15 urlId,
16 broadcastId,
17 editKey
18 );
19
20 console.log(response);
21}
22
23removeVote();
24

檢舉留言 Internal Link

參數

NameTypeRequiredDescription
tenantIdstringYes
idstringYes
userIdstringNo
anonUserIdstringNo

回應

返回:FlagCommentResponse1

範例

flagComment 範例
Copy Copy
1
2(async () => {
3 const tenantId: string = "tenant_2023";
4 const commentId: string = "comment_5678";
5 const userId: string = "user_1234";
6 const anonUserId: string = "anon_4321";
7
8 const result: FlagCommentResponse1 = await flagComment(tenantId, commentId, userId);
9 const anonResult: FlagCommentResponse1 = await flagComment(tenantId, commentId, undefined, anonUserId);
10})();
11

取得留言 Internal Link

參數

名稱類型必填說明
tenantIdstringYes
idstringYes

回應

返回: GetCommentResponse

範例

getComment 範例
Copy Copy
1
2(async () => {
3 const tenantId: string = "acme-corp";
4 const commentId: string = "comment-987654";
5 const result: GetCommentResponse = await getComment(tenantId, commentId);
6 const badgeInfo: CommentUserBadgeInfo | undefined = result.comment?.user?.badgeInfo;
7 console.log(badgeInfo?.label);
8})();
9

取得多則留言 Internal Link

參數

NameTypeRequiredDescription
tenantIdstringYes
pagenumberNo
limitnumberNo
skipnumberNo
asTreebooleanNo
skipChildrennumberNo
limitChildrennumberNo
maxTreeDepthnumberNo
urlIdstringNo
userIdstringNo
anonUserIdstringNo
contextUserIdstringNo
hashTagstringNo
parentIdstringNo
directionSortDirectionsNo
fromDatenumberNo
toDatenumberNo

回應

Returns: GetCommentsResponse

範例

getComments 範例
Copy Copy
1
2const tenantId: string = "tenant_12345";
3const page: number = 2;
4const limit: number = 50;
5const asTree: boolean = true;
6const urlId: string = "article_5678";
7const direction: SortDirections = "desc";
8const fromDate: number = Date.now() - 7 * 24 * 60 * 60 * 1000; // 一週前
9const toDate: number = Date.now();
10
11const commentsResponse: GetCommentsResponse = await getComments({
12 tenantId,
13 page,
14 limit,
15 asTree,
16 urlId,
17 direction,
18 fromDate,
19 toDate,
20});
21

取得公開留言 Internal Link

請求
tenantId
urlId

參數

名稱類型必填說明
tenantIdstringYes
urlIdstringYes
pagenumberNo
directionSortDirectionsNo
ssostringNo
skipnumberNo
skipChildrennumberNo
limitnumberNo
limitChildrennumberNo
countChildrenbooleanNo
fetchPageForCommentIdstringNo
includeConfigbooleanNo
countAllbooleanNo
includei10nbooleanNo
localestringNo
modulesstringNo
isCrawlerbooleanNo
includeNotificationCountbooleanNo
asTreebooleanNo
maxTreeDepthnumberNo
useFullTranslationIdsbooleanNo
parentIdstringNo
searchTextstringNo
hashTagsArrayNo
userIdstringNo
customConfigStrstringNo
afterCommentIdstringNo
beforeCommentIdstringNo

回應

返回:GetCommentsPublicResponse

範例

getCommentsPublic 範例
Copy Copy
1
2async function fetchComments() {
3 const tenantId: string = 'acme-corp';
4 const urlId: string = 'blog/post-789';
5 const page: number = 1;
6 const direction: SortDirections = SortDirections.Desc;
7 const limit: number = 25;
8 const includeConfig: boolean = true;
9 const locale: string = 'en-GB';
10 const modules: string = 'reactions,attachments';
11 const isCrawler: boolean = false;
12 const includeNotificationCount: boolean = true;
13 const asTree: boolean = true;
14 const maxTreeDepth: number = 4;
15 const searchText: string = 'TypeScript';
16 const hashTags: string[] = ['typescript', 'api'];
17 const response: GetCommentsPublicResponse = await getCommentsPublic(
18 tenantId,
19 urlId,
20 page,
21 direction,
22 undefined,
23 undefined,
24 undefined,
25 limit,
26 undefined,
27 undefined,
28 undefined,
29 includeConfig,
30 undefined,
31 undefined,
32 locale,
33 modules,
34 isCrawler,
35 includeNotificationCount,
36 asTree,
37 maxTreeDepth,
38 undefined,
39 undefined,
40 searchText,
41 hashTags,
42 undefined,
43 undefined,
44 undefined,
45 undefined
46 );
47}
48

取得留言文字 Internal Link

參數

名稱類型必填描述
tenantIdstringYes
commentIdstringYes
editKeystringNo
ssostringNo

回應

返回:GetCommentTextResponse1

範例

getCommentText 範例
Copy Copy
1
2async function run() {
3 const tenantId: string = "acme-corp-tenant";
4 const commentId: string = "cmt-5f2e9a1b";
5 const editKey: string = "edk-9b7c3";
6 const ssoToken: string = "sso-xyz789";
7
8 const commentOnly: GetCommentTextResponse1 = await getCommentText(tenantId, commentId);
9 const commentWithEdit: GetCommentTextResponse1 = await getCommentText(tenantId, commentId, editKey);
10 const commentFull: GetCommentTextResponse1 = await getCommentText(tenantId, commentId, editKey, ssoToken);
11}
12run();
13

取得留言投票者名稱 Internal Link


參數

名稱類型必填描述
tenantIdstring
commentIdstring
dirnumber
ssostring

回應

返回:GetCommentVoteUserNamesResponse

範例

getCommentVoteUserNames 範例
Copy Copy
1
2async function demoGetCommentVoteUserNames() {
3 const tenantId: string = "acme-corp";
4 const commentId: string = "cmt_5f2a1e3b";
5 const dir: number = 1; // 升序
6
7 const votesWithoutSSO: GetCommentVoteUserNamesResponse = await getCommentVoteUserNames(
8 tenantId,
9 commentId,
10 dir
11 );
12
13 const ssoToken: string = "sso_abcdef123456";
14 const votesWithSSO: GetCommentVoteUserNamesResponse = await getCommentVoteUserNames(
15 tenantId,
16 commentId,
17 dir,
18 ssoToken
19 );
20
21 console.log(votesWithoutSSO, votesWithSSO);
22}
23

鎖定留言 Internal Link

參數

名稱類型必填描述
tenantIdstring
commentIdstring
broadcastIdstring
ssostring

回應

返回:LockCommentResponse

範例

lockComment 範例
Copy Copy
1
2(async () => {
3 const tenantId: string = "tenant_12345";
4 const commentId: string = "cmt_98765";
5 const broadcastId: string = "brd_54321";
6
7 // 使用可選的 SSO 令牌
8 const ssoToken: string = "user-abc123";
9 const lockedWithSso: LockCommentResponse = await lockComment(tenantId, commentId, broadcastId, ssoToken);
10
11 // 未使用 SSO 令牌
12 const lockedWithoutSso: LockCommentResponse = await lockComment(tenantId, commentId, broadcastId);
13})();
14

置頂留言 Internal Link

參數

名稱類型必填描述
tenantIdstring
commentIdstring
broadcastIdstring
ssostring

回應

返回: PinCommentResponse

範例

pinComment 範例
Copy Copy
1
2(async () => {
3 const tenantId: string = 'tenant-001';
4 const commentId: string = 'comment-5678';
5 const broadcastId: string = 'broadcast-2023';
6 const ssoToken: string = 'sso-xyz-789';
7
8 const pinResult: PinCommentResponse = await pinComment(tenantId, commentId, broadcastId);
9 const pinResultWithSso: PinCommentResponse = await pinComment(tenantId, commentId, broadcastId, ssoToken);
10})();
11

儲存留言 Internal Link

參數

名稱型別必填描述
tenantIdstringYes
createCommentParamsCreateCommentParamsYes
isLivebooleanNo
doSpamCheckbooleanNo
sendEmailsbooleanNo
populateNotificationsbooleanNo

回應

回傳: SaveCommentResponse

範例

saveComment 範例
Copy Copy
1
2async function submitComment() {
3 const tenantId: string = "tenant_9f8e7d6c";
4 const commentParams: CreateCommentParams = {
5 text: "Great post, thanks for sharing!",
6 authorId: "user_123abc",
7 mentions: [] as CommentUserMentionInfo[],
8 hashtags: [] as CommentUserHashTagInfo[]
9 };
10 const response: SaveCommentResponse = await saveComment(
11 tenantId,
12 commentParams,
13 true, // isLive
14 false // doSpamCheck
15 );
16 console.log(response);
17}
18submitComment();
19

批次儲存留言 Internal Link

參數

名稱類型必填說明
tenantIdstringYes
createCommentParamsArrayYes
isLivebooleanNo
doSpamCheckbooleanNo
sendEmailsbooleanNo
populateNotificationsbooleanNo

回應

返回:Array<SaveCommentsBulkResponse

範例

saveCommentsBulk 範例
Copy Copy
1
2const tenantId: string = "tenant_9f8b7c6d";
3
4const bulkComments: CreateCommentParams[] = [
5 {
6 content: "Welcome to the new forum thread!",
7 authorId: "user_42",
8 mentions: [{ userId: "user_84", username: "alice" }],
9 hashtags: [{ tag: "intro" }]
10 },
11 {
12 content: "Please review the updated guidelines.",
13 authorId: "moderator_1",
14 mentions: [],
15 hashtags: [{ tag: "guidelines" }, { tag: "update" }]
16 }
17];
18
19const results: SaveCommentsBulkResponse[] = await saveCommentsBulk(
20 tenantId,
21 bulkComments,
22 true, // 是否為實時
23 false, // 執行垃圾郵件檢查
24 true, // 發送電子郵件
25 undefined // 填充通知(使用預設)
26);
27

設定留言文字 Internal Link

參數

名稱類型必填說明
tenantIdstring
commentIdstring
broadcastIdstring
commentTextUpdateRequestCommentTextUpdateRequest
editKeystring
ssostring

回應

返回:SetCommentTextResponse1

範例

setCommentText 範例
Copy Copy
1
2(async () => {
3 const tenantId: string = 'tenant_12345';
4 const commentId: string = 'cmt_98765';
5 const broadcastId: string = 'brd_112233';
6 const commentTextUpdateRequest: CommentTextUpdateRequest = {
7 text: 'Updated comment with @john.doe and #important',
8 mentions: [{ userId: 'user_001', username: 'john.doe' }],
9 hashtags: [{ tag: 'important' }],
10 };
11 const editKey: string = 'edit_abc123';
12 const result: SetCommentTextResponse1 = await setCommentText(
13 tenantId,
14 commentId,
15 broadcastId,
16 commentTextUpdateRequest,
17 editKey,
18 );
19 console.log(result);
20})();
21

解除封鎖使用者(留言) Internal Link


參數

名稱類型必填說明
tenantIdstringYes
idstringYes
unBlockFromCommentParamsUnBlockFromCommentParamsYes
userIdstringNo
anonUserIdstringNo

回應

返回:UnBlockUserFromCommentResponse

範例

unBlockUserFromComment 範例
Copy Copy
1
2async function demoUnblock() {
3 const tenantId: string = "acme-corp-tenant";
4 const commentId: string = "cmt_9f8b7a6d";
5
6 const params: UnBlockFromCommentParams = {
7 reason: "User resolved the issue",
8 notifyUser: true
9 };
10
11 const userId: string = "usr_12345";
12
13 const result: UnBlockUserFromCommentResponse = await unBlockUserFromComment(
14 tenantId,
15 commentId,
16 params,
17 userId
18 // anonUserId 已省略
19 );
20
21 console.log(result);
22}
23demoUnblock();
24

取消檢舉留言 Internal Link

參數

名稱類型必填描述
tenantIdstring
idstring
userIdstring
anonUserIdstring

回應

返回:UnFlagCommentResponse

範例

unFlagComment 範例
Copy Copy
1
2const tenantId: string = "acme-corp";
3const commentId: string = "cmt_123456";
4const userId: string = "usr_98765";
5
6const result: UnFlagCommentResponse = await unFlagComment(tenantId, commentId, userId);
7
8const anonCommentId: string = "cmt_123457";
9const anonUserId: string = "anon_abc123";
10
11const anonResult: UnFlagCommentResponse = await unFlagComment(tenantId, anonCommentId, undefined, anonUserId);
12

解鎖留言 Internal Link

參數

名稱類型必填描述
tenantIdstringYes
commentIdstringYes
broadcastIdstringYes
ssostringNo

回應

返回:UnLockCommentResponse

範例

unLockComment 範例
Copy Copy
1
2const tenantId: string = "tenant_12345";
3const commentId: string = "cmt_9876";
4const broadcastId: string = "brd_001";
5const ssoToken: string | undefined = "sso_token_abc";
6
7async function run() {
8 const unlocked: UnLockCommentResponse = await unLockComment(tenantId, commentId, broadcastId, ssoToken);
9 console.log(unlocked);
10
11 // 呼叫時省略可選的 sso 參數
12 const unlockedWithoutSso: UnLockCommentResponse = await unLockComment(tenantId, commentId, broadcastId);
13 console.log(unlockedWithoutSso);
14}
15
16run();
17

取消置頂留言 Internal Link

參數

名稱類型必須說明
tenantIdstring
commentIdstring
broadcastIdstring
ssostring

回應

返回: UnPinCommentResponse

範例

unPinComment 範例
Copy Copy
1
2(async () => {
3 const tenantId: string = "tenant-001"
4 const commentId: string = "comment-123"
5 const broadcastId: string = "broadcast-456"
6 const sso: string = "sso-token-xyz"
7
8 const resultWithSso: UnPinCommentResponse = await unPinComment(tenantId, commentId, broadcastId, sso)
9 const resultWithoutSso: UnPinCommentResponse = await unPinComment(tenantId, commentId, broadcastId)
10
11 console.log(resultWithSso, resultWithoutSso)
12})()
13

更新留言 Internal Link

參數

名稱類型必填說明
tenantIdstringYes
idstringYes
updatableCommentParamsUpdatableCommentParamsYes
contextUserIdstringNo
doSpamCheckbooleanNo
isLivebooleanNo

回應

返回: UpdateCommentResponse

範例

updateComment 範例
Copy Copy
1
2const tenantId: string = "tenant_12345";
3const commentId: string = "cmt_98765";
4
5const updatableCommentParams: UpdatableCommentParams = {
6 // 範例欄位;實際結構取決於 API 定義
7 // 例如,body: "Edited comment content",
8};
9
10const contextUserId: string = "user_abcde";
11const doSpamCheck: boolean = true;
12const isLive: boolean = false;
13
14const result: UpdateCommentResponse = await updateComment(
15 tenantId,
16 commentId,
17 updatableCommentParams,
18 contextUserId,
19 doSpamCheck,
20 isLive
21);
22

留言投票 Internal Link

參數

NameTypeRequiredDescription
tenantIdstringYes
commentIdstringYes
urlIdstringYes
broadcastIdstringYes
voteBodyParamsVoteBodyParamsYes
sessionIdstringNo
ssostringNo

回應

Returns: VoteCommentResponse

範例

voteComment 範例
Copy Copy
1
2const tenantId: string = "acme-corp";
3const commentId: string = "cmt_9f8e7d6c";
4const urlId: string = "url_123456";
5const broadcastId: string = "bcast_2024_01";
6
7const voteBodyParams: VoteBodyParams = {
8 vote: "up", // 例如 "up" | "down"
9 weight: 1, // 投票的可選加權
10};
11
12const sessionId: string = "sess_abc123def";
13const sso: string = "sso_token_xyz";
14
15const result: VoteCommentResponse = await voteComment(
16 tenantId,
17 commentId,
18 urlId,
19 broadcastId,
20 voteBodyParams,
21 sessionId,
22 sso
23);
24

取得使用者的留言 Internal Link

參數

名稱類型必填描述
userIdstring
directionSortDirections
repliesToUserIdstring
pagenumber
includei10nboolean
localestring
isCrawlerboolean

回應

Returns: GetCommentsForUserResponse1

範例

getCommentsForUser 範例
Copy Copy
1
2async function demo() {
3 const userId: string = "user-12345";
4 const direction: SortDirections = "desc";
5 const page: number = 1;
6 const includei10n: boolean = true;
7 const locale: string = "en-US";
8 const isCrawler: boolean = false;
9
10 const response: GetCommentsForUserResponse1 = await getCommentsForUser(
11 userId,
12 direction,
13 undefined,
14 page,
15 includei10n,
16 locale,
17 isCrawler
18 );
19
20 console.log(response);
21}
22

新增網域設定 Internal Link

參數

名稱類型必填說明
tenantIdstring
addDomainConfigParamsAddDomainConfigParams

回應

返回:AddDomainConfigResponse

範例

addDomainConfig 範例
Copy Copy
1
2(async () => {
3 const tenantId: string = 'tenant_12345';
4 const config: AddDomainConfigParams = {
5 domain: 'myblog.example.com',
6 enabled: true,
7 // description 是可選的,此處省略
8 };
9 const response: AddDomainConfigResponse = await addDomainConfig(tenantId, config);
10 console.log(response);
11})();
12

刪除網域設定 Internal Link

參數

名稱類型必填描述
tenantIdstringYes
domainstringYes

回應

返回:DeleteDomainConfigResponse

範例

deleteDomainConfig 範例
Copy Copy
1
2async function runExample() {
3 const tenantId: string = 'acme-corp';
4 const domain: string = 'blog.acme.com';
5 const response: DeleteDomainConfigResponse = await deleteDomainConfig(tenantId, domain);
6 console.log(response);
7}
8runExample();
9

取得網域設定 Internal Link

參數

NameTypeRequiredDescription
tenantIdstringYes
domainstringYes

回應

返回:GetDomainConfigResponse

範例

getDomainConfig 範例
Copy Copy
1
2async function main() {
3 const tenantId: string = "acme-corp-123";
4 const domain: string = "blog.acme.com";
5 const config: GetDomainConfigResponse = await getDomainConfig(tenantId, domain);
6 console.log(config);
7}
8main();
9

取得多個網域設定 Internal Link

參數

名稱類型必要描述
tenantIdstring

回應

返回: GetDomainConfigsResponse

範例

getDomainConfigs 範例
Copy Copy
1
2async function fetchDomainConfigs(): Promise<void> {
3 const tenantId: string = "acme-corp-567";
4 const configs: GetDomainConfigsResponse = await getDomainConfigs(tenantId);
5 console.log(configs);
6}
7

部分更新網域設定 Internal Link

參數

名稱類型必填描述
tenantIdstringYes
domainToUpdatestringYes
patchDomainConfigParamsPatchDomainConfigParamsYes

回應

Returns: PatchDomainConfigResponse

範例

patchDomainConfig 範例
Copy Copy
1
2async function updateDomainConfig() {
3 const tenantId: string = "tenant_98765";
4 const domainToUpdate: string = "forum.mycompany.com";
5 const patchParams: PatchDomainConfigParams = {
6 enableComments: true,
7 moderationLevel: "strict",
8 allowAnonymous: false, // 示範可選參數
9 };
10 const response: PatchDomainConfigResponse = await patchDomainConfig(tenantId, domainToUpdate, patchParams);
11 console.log(response);
12}
13
14updateDomainConfig();
15

覆蓋更新網域設定 Internal Link

參數

名稱類型必填說明
tenantIdstring
domainToUpdatestring
updateDomainConfigParamsUpdateDomainConfigParams

回應

返回: PutDomainConfigResponse

範例

putDomainConfig 範例
Copy Copy
1
2async function runExample() {
3 const tenantId: string = 'tenant-9f8c7b1a';
4 const domainToUpdate: string = 'comments.mywebsite.org';
5 const updateDomainConfigParams: UpdateDomainConfigParams = {
6 enableModeration: true,
7 // 可選欄位已省略,例如 maxCommentLength?: number
8 };
9 const result: PutDomainConfigResponse = await putDomainConfig(
10 tenantId,
11 domainToUpdate,
12 updateDomainConfigParams,
13 );
14 console.log(result);
15}
16runExample();
17

建立電子郵件範本 Internal Link

參數

名稱類型必填說明
tenantIdstring
createEmailTemplateBodyCreateEmailTemplateBody

回應

返回:CreateEmailTemplateResponse1

範例

createEmailTemplate 範例
Copy Copy
1
2const tenantId: string = "tenant_9f8e7d6c";
3
4const emailTemplate: CreateEmailTemplateBody = {
5 name: "Account Activation",
6 subject: "Activate Your New Account",
7 htmlContent: "<p>Welcome! Please click <a href=\"\{{activationLink}}\">here</a> to activate.</p>",
8 // 可選欄位如 textContent、isActive 已省略,以示範可選參數
9};
10
11const result: CreateEmailTemplateResponse1 = await createEmailTemplate(
12 tenantId,
13 emailTemplate
14);
15
16console.log(result);
17

刪除電子郵件範本 Internal Link

參數

名稱類型必填說明
tenantIdstring
idstring

回應

返回: DeleteEmailTemplateResponse

範例

deleteEmailTemplate 範例
Copy Copy
1
2async () => {
3 const tenantId: string = "tenant_12345";
4 const templateId: string = "template_abcde";
5
6 const response: DeleteEmailTemplateResponse = await deleteEmailTemplate(tenantId, templateId);
7
8 // 範例:從回應中存取可選屬性
9 const statusCode: number | undefined = response.status?.code;
10}();
11

刪除電子郵件範本渲染錯誤 Internal Link

參數

名稱類型必填說明
tenantIdstringYes
idstringYes
errorIdstringYes

回應

Returns: DeleteEmailTemplateRenderErrorResponse

範例

deleteEmailTemplateRenderError 範例
Copy Copy
1
2async function executeDelete() {
3 const tenantId: string = "tenant_12345";
4 const templateId: string = "email_tpl_001";
5 const errorId: string = "render_err_2023";
6
7 const result: DeleteEmailTemplateRenderErrorResponse = await deleteEmailTemplateRenderError(
8 tenantId,
9 templateId,
10 errorId
11 );
12
13 console.log(result);
14}
15
16executeDelete();
17

取得電子郵件範本 Internal Link


參數

名稱類型必填描述
tenantIdstring
idstring

回應

返回:GetEmailTemplateResponse1

範例

getEmailTemplate 範例
Copy Copy
1
2async function fetchTemplate(): Promise<void> {
3 const tenantId: string = "tenant-12345";
4 const templateId: string = "order-confirmation";
5 const response: GetEmailTemplateResponse1 = await getEmailTemplate(tenantId, templateId);
6 const emailTemplate: CustomEmailTemplate | undefined = response.customEmailTemplate;
7 const configParams: CustomConfigParameters | undefined = response.customConfigParameters;
8}
9

取得電子郵件範本定義 Internal Link

參數

名稱類型必填說明
tenantIdstring

回應

返回: GetEmailTemplateDefinitionsResponse1

範例

getEmailTemplateDefinitions 範例
Copy Copy
1
2(async () => {
3 const tenantId: string = "acme-corp-123";
4 const emailTemplateDefs: GetEmailTemplateDefinitionsResponse1 = await getEmailTemplateDefinitions(tenantId);
5 console.log(emailTemplateDefs);
6})();
7

取得電子郵件範本渲染錯誤 Internal Link

參數

名稱類型必填描述
tenantIdstring
idstring
skipnumber

回應

返回:GetEmailTemplateRenderErrorsResponse1

範例

getEmailTemplateRenderErrors 範例
Copy Copy
1
2const tenantId: string = "c2f5a8d9-4b3e-4f6a-9e1b-2d5c6f7a8b9c";
3const templateId: string = "welcome-email-template";
4const skip: number = 20;
5
6const result: GetEmailTemplateRenderErrorsResponse1 = await getEmailTemplateRenderErrors(
7 tenantId,
8 templateId,
9 skip
10);
11

取得電子郵件範本清單 Internal Link

參數

名稱類型必填說明
tenantIdstringYes
skipnumberNo

回應

返回:GetEmailTemplatesResponse1

範例

getEmailTemplates 範例
Copy Copy
1
2(async () => {
3 const tenantId: string = "tenant_12345";
4
5 // 呼叫時不含可選的 'skip'
6 const templates: GetEmailTemplatesResponse1 = await getEmailTemplates(tenantId);
7
8 // 呼叫時包含可選的 'skip' 參數
9 const pagedTemplates: GetEmailTemplatesResponse1 = await getEmailTemplates(tenantId, 20);
10})();
11

渲染電子郵件範本 Internal Link

參數

名稱類型必填描述
tenantIdstring
renderEmailTemplateBodyRenderEmailTemplateBody
localestring

回應

返回:RenderEmailTemplateResponse1

範例

renderEmailTemplate 範例
Copy Copy
1
2(async () => {
3 const tenantId: string = "acme-corp-01";
4 const templateBody: RenderEmailTemplateBody = {
5 templateId: "welcome-email",
6 placeholders: {
7 userName: "John Doe",
8 signupDate: "2024-04-01"
9 }
10 };
11 const locale: string = "en-US";
12 const result: RenderEmailTemplateResponse1 = await renderEmailTemplate(tenantId, templateBody, locale);
13 console.log(result);
14})();
15

更新電子郵件範本 Internal Link

參數

名稱類型必填描述
tenantIdstring
idstring
updateEmailTemplateBodyUpdateEmailTemplateBody

回應

返回:UpdateEmailTemplateResponse

範例

updateEmailTemplate 範例
Copy Copy
1
2(async () => {
3 const tenantId: string = "tenant_12345";
4 const templateId: string = "email_tpl_67890";
5
6 const updateBody: UpdateEmailTemplateBody = {
7 subject: "Comment reply notification",
8 htmlContent: "<p>Someone replied to your comment.</p>",
9 plainTextContent: "Someone replied to your comment.",
10 // 可選欄位範例
11 isActive: true,
12 };
13
14 const result: UpdateEmailTemplateResponse = await updateEmailTemplate(
15 tenantId,
16 templateId,
17 updateBody
18 );
19
20 console.log(result);
21})();
22

取得事件日誌 Internal Link

req tenantId urlId userIdWS

參數

名稱類型必填描述
tenantIdstring
urlIdstring
userIdWSstring
startTimenumber
endTimenumber

回應

回傳: GetEventLogResponse1

範例

getEventLog 範例
Copy Copy
1
2(async () => {
3 const tenantId: string = "tenant_9876";
4 const urlId: string = "page_54321";
5 const userIdWS: string = "ws_user_1122";
6 const startTime: number = Date.now() - 7 * 24 * 60 * 60 * 1000; // 一週前
7 const endTime: number = Date.now();
8
9 const log: GetEventLogResponse1 = await getEventLog(tenantId, urlId, userIdWS, startTime, endTime);
10 const recentLog: GetEventLogResponse1 = await getEventLog(tenantId, urlId, userIdWS, startTime);
11})();
12

取得全域事件日誌 Internal Link


請求 tenantId urlId userIdWS

參數

名稱類型必填描述
tenantIdstring
urlIdstring
userIdWSstring
startTimenumber
endTimenumber

回應

返回:GetGlobalEventLogResponse

範例

getGlobalEventLog 範例
Copy Copy
1
2(async () => {
3 const tenantId: string = '123e4567-e89b-12d3-a456-426614174000';
4 const urlId: string = 'article-2023-09-15';
5 const userIdWS: string = 'ws_987654321';
6 const startTime: number = Date.now() - 86400000;
7 const endTime: number = Date.now();
8
9 const fullLog: GetGlobalEventLogResponse = await getGlobalEventLog(tenantId, urlId, userIdWS, startTime, endTime);
10 const recentLog: GetGlobalEventLogResponse = await getGlobalEventLog(tenantId, urlId, userIdWS, startTime);
11
12 console.log(fullLog, recentLog);
13})();
14

建立動態貼文 Internal Link

參數

名稱類型必填說明
tenantIdstringYes
createFeedPostParamsCreateFeedPostParamsYes
broadcastIdstringNo
isLivebooleanNo
doSpamCheckbooleanNo
skipDupCheckbooleanNo

回應

返回:CreateFeedPostResponse1

範例

createFeedPost 範例
Copy Copy
1
2async function run() {
3 const tenantId = "tenant-12345";
4 const feedParams: CreateFeedPostParams = {
5 text: "New product launch!",
6 mediaItems: [{ type: "image", asset: { url: "https://cdn.example.com/img.jpg", width: 800, height: 600 } as FeedPostMediaItemAsset } as FeedPostMediaItem],
7 link: { url: "https://example.com/product", title: "Product" } as FeedPostLink
8 };
9 const result: CreateFeedPostResponse1 = await createFeedPost(tenantId, feedParams, "broadcast-987", true, false, true);
10 console.log(result);
11}
12run();
13

建立公開動態貼文 Internal Link

參數

名稱類型必填說明
tenantIdstringYes
createFeedPostParamsCreateFeedPostParamsYes
broadcastIdstringNo
ssostringNo

回應

回傳: CreateFeedPostPublicResponse

範例

createFeedPostPublic 範例
Copy Copy
1
2async function submitPost() {
3 const tenantId: string = "tenant_12345";
4
5 const mediaItem: FeedPostMediaItem = {
6 asset: {
7 url: "https://cdn.example.com/image.jpg",
8 mimeType: "image/jpeg",
9 size: 104857,
10 },
11 type: "image",
12 };
13
14 const link: FeedPostLink = {
15 url: "https://example.com/blog/new-feature",
16 title: "New Feature Release",
17 description: "Details about our latest product update.",
18 };
19
20 const createFeedPostParams: CreateFeedPostParams = {
21 content: "Check out our new feature!",
22 media: [mediaItem],
23 link: link,
24 };
25
26 const broadcastId: string = "broadcast_9876";
27 const sso: string = "sso_token_abc123";
28
29 const response: CreateFeedPostPublicResponse = await createFeedPostPublic(
30 tenantId,
31 createFeedPostParams,
32 broadcastId,
33 sso
34 );
35}
36

刪除公開動態貼文 Internal Link

參數

名稱類型必填說明
tenantIdstring
postIdstring
broadcastIdstring
ssostring

回應

返回: DeleteFeedPostPublicResponse

範例

deleteFeedPostPublic 範例
Copy Copy
1
2(async () => {
3 const tenantId: string = "acme-corp";
4 const postId: string = "post_987654321";
5 const broadcastId: string = "broadcast_2024Q1";
6 const sso: string = "sso_4fa3b9c2";
7
8 const response1: DeleteFeedPostPublicResponse = await deleteFeedPostPublic(tenantId, postId);
9 const response2: DeleteFeedPostPublicResponse = await deleteFeedPostPublic(tenantId, postId, broadcastId);
10 const response3: DeleteFeedPostPublicResponse = await deleteFeedPostPublic(tenantId, postId, broadcastId, sso);
11})();
12

取得動態貼文 Internal Link

請求
tenantId
afterId

參數

名稱類型必填說明
tenantIdstring
afterIdstring
limitnumber
tagsArray

回應

回傳:GetFeedPostsResponse1

範例

getFeedPosts 範例
Copy Copy
1
2(async () => {
3 const tenantId: string = 'tenant_12345';
4 const afterId: string = 'post_9876';
5 const limit: number = 20;
6 const tags: string[] = ['news', 'sports'];
7
8 const feedResult: GetFeedPostsResponse1 = await getFeedPosts(tenantId, afterId, limit, tags);
9})();
10

取得公開動態貼文 Internal Link


請求 tenantId afterId

參數

NameTypeRequiredDescription
tenantIdstring
afterIdstring
limitnumber
tagsArray
ssostring
isCrawlerboolean
includeUserInfoboolean

回應

Returns: GetFeedPostsPublicResponse

範例

getFeedPostsPublic 範例
Copy Copy
1
2async function example() {
3 const tenantId: string = "tenant_12345";
4 const afterId: string = "post_9876";
5 const limit: number = 20;
6 const tags: string[] = ["news", "tech"];
7 const sso: string = "userToken123";
8 const isCrawler: boolean = false;
9 const includeUserInfo: boolean = true;
10 const response: GetFeedPostsPublicResponse = await getFeedPostsPublic(
11 tenantId,
12 afterId,
13 limit,
14 tags,
15 sso,
16 isCrawler,
17 includeUserInfo
18 );
19}
20example();
21

取得動態貼文統計 Internal Link

參數

NameTypeRequiredDescription
tenantIdstringYes
postIdsArrayYes
ssostringNo

回應

返回:GetFeedPostsStatsResponse

範例

getFeedPostsStats 範例
Copy Copy
1
2async function runExample(): Promise<void> {
3 const tenantId: string = "tenant_12345";
4 const postIds: string[] = ["post_a1b2c3", "post_d4e5f6"];
5 const ssoToken: string = "sso_abcdef123456";
6
7 const statsWithoutSso: GetFeedPostsStatsResponse = await getFeedPostsStats(tenantId, postIds);
8 const statsWithSso: GetFeedPostsStatsResponse = await getFeedPostsStats(tenantId, postIds, ssoToken);
9}
10
11runExample();
12

取得公開使用者反應 Internal Link

參數

名稱類型必填描述
tenantIdstringYes
postIdsArrayNo
ssostringNo

回應

返回:GetUserReactsPublicResponse

範例

getUserReactsPublic 範例
Copy Copy
1
2async function demo() {
3 const tenantId: string = "tenant_12345";
4 const postIds: string[] = ["post_1a2b3c", "post_4d5e6f"];
5 const ssoToken: string = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...";
6
7 const fullResponse: GetUserReactsPublicResponse = await getUserReactsPublic(tenantId, postIds, ssoToken);
8 const minimalResponse: GetUserReactsPublicResponse = await getUserReactsPublic(tenantId);
9}
10
11demo();
12

對動態貼文做公開反應 Internal Link

參數

名稱型別必填描述
tenantIdstringYes
postIdstringYes
reactBodyParamsReactBodyParamsYes
isUndobooleanNo
broadcastIdstringNo
ssostringNo

回應

回傳: ReactFeedPostPublicResponse

範例

reactFeedPostPublic 範例
Copy Copy
1
2(async () => {
3 const tenantId: string = 'tenant_12345';
4 const postId: string = 'post_98765';
5 const reactBodyParams: ReactBodyParams = { reaction: 'thumbs_up' };
6 const isUndo: boolean = false;
7 const broadcastId: string = 'broadcast_abcde';
8 const sso: string = 'sso_token_xyz';
9
10 const response: ReactFeedPostPublicResponse = await reactFeedPostPublic(
11 tenantId,
12 postId,
13 reactBodyParams,
14 isUndo,
15 broadcastId,
16 sso
17 );
18
19 console.log(response);
20})();
21

更新動態貼文 Internal Link

參數

名稱型別必填說明
tenantIdstring
idstring
feedPostFeedPost

回應

回傳:UpdateFeedPostResponse

範例

updateFeedPost 範例
Copy Copy
1
2const tenantId: string = "tenant_3421";
3const postId: string = "feedpost_a9b8c7";
4
5const feedPost: FeedPost = {
6 content: "We've refreshed the announcement with the latest project milestones.",
7 media: [
8 {
9 type: "image",
10 url: "https://assets.example.com/images/milestone.png",
11 caption: "Project Milestones"
12 } as FeedPostMediaItem
13 ],
14 link: {
15 url: "https://example.com/project-updates",
16 title: "Project Updates",
17 description: "Read about the recent progress and upcoming goals."
18 } as FeedPostLink
19};
20
21const result: UpdateFeedPostResponse = await updateFeedPost(tenantId, postId, feedPost);
22

更新公開動態貼文 Internal Link

參數

名稱類型必填描述
tenantIdstring
postIdstring
updateFeedPostParamsUpdateFeedPostParams
broadcastIdstring
ssostring

回應

返回:UpdateFeedPostPublicResponse

範例

updateFeedPostPublic 範例
Copy Copy
1
2async function updatePostExample() {
3 const tenantId: string = 'tenant-9f8b7c';
4 const postId: string = 'post-3a4d5e';
5 const updateParams: UpdateFeedPostParams = {
6 title: 'New Announcement',
7 content: 'We have updated our terms of service.',
8 media: [
9 {
10 url: 'https://cdn.example.com/assets/image.png',
11 type: 'image',
12 asset: {
13 width: 800,
14 height: 600,
15 size: 124000
16 } as FeedPostMediaItemAsset
17 } as FeedPostMediaItem
18 ],
19 link: {
20 url: 'https://example.com/terms',
21 title: 'Read the new TOS'
22 } as FeedPostLink
23 };
24 const broadcastId: string = 'broadcast-2023-09';
25 const sso: string = 'sso-abc123xyz';
26 const result: UpdateFeedPostPublicResponse = await updateFeedPostPublic(
27 tenantId,
28 postId,
29 updateParams,
30 broadcastId,
31 sso
32 );
33}
34

公開檢舉留言 Internal Link

參數

NameTypeRequiredDescription
tenantIdstring
commentIdstring
isFlaggedboolean
ssostring

回應

返回:FlagCommentPublicResponse

範例

flagCommentPublic 範例
Copy Copy
1
2async function demoFlagComment() {
3 const tenantId: string = "acme-tenant-123";
4 const commentId: string = "comment-987654";
5 const isFlagged: boolean = true;
6 const sso: string = "sso-token-abc123";
7
8 const result: FlagCommentPublicResponse = await flagCommentPublic(
9 tenantId,
10 commentId,
11 isFlagged,
12 sso
13 );
14
15 console.log(result);
16}
17
18demoFlagComment();
19

取得大型動圖 Internal Link

參數

名稱類型必填描述
tenantIdstring
largeInternalURLSanitizedstring

回應

返回:GetGifLargeResponse

範例

getGifLarge 範例
Copy Copy
1
2(async () => {
3 const tenantId: string = 'c9f4a1b2-3d5e-4f6a-8b9c-0d1e2f3a4b5c';
4 const largeInternalURLSanitized: string = 'https://cdn.fastcomments.com/gifs/awesome-cat-large.gif';
5 const result: GetGifLargeResponse = await getGifLarge(tenantId, largeInternalURLSanitized);
6 console.log(result);
7})();
8

搜尋動圖 Internal Link

參數

名稱類型必填說明
tenantIdstring
searchstring
localestring
ratingstring
pagenumber

回應

返回:GetGifsSearchResponse

範例

getGifsSearch 範例
Copy Copy
1
2async function demo() {
3 const tenantId: string = "tenant_9f8b7c";
4 const search: string = "funny cats";
5 const locale: string = "en-US";
6 const rating: string = "pg";
7 const page: number = 1;
8
9 const result: GetGifsSearchResponse = await getGifsSearch(
10 tenantId,
11 search,
12 locale,
13 rating,
14 page
15 );
16
17 console.log(result);
18}
19
20demo();
21

取得熱門動圖 Internal Link

參數

名稱類型必要描述
tenantIdstringYes
localestringNo
ratingstringNo
pagenumberNo

回應

返回:GetGifsTrendingResponse

範例

getGifsTrending 範例
Copy Copy
1
2async function runExample(): Promise<void> {
3 const tenantId: string = "tenant_9f8b7c6d";
4 const locale: string = "en-US";
5 const rating: string = "PG-13";
6 const page: number = 1;
7
8 const trendingAll: GetGifsTrendingResponse = await getGifsTrending(tenantId, locale, rating, page);
9 console.log(trendingAll);
10
11 // 僅使用必要參數
12 const trendingMinimal: GetGifsTrendingResponse = await getGifsTrending(tenantId);
13 console.log(trendingMinimal);
14}
15
16runExample();
17

新增標籤 Internal Link

參數

NameTypeRequiredDescription
tenantIdstringNo
createHashTagBodyCreateHashTagBodyNo

回應

Returns: AddHashTagResponse

範例

addHashTag 範例
Copy Copy
1
2const tenantId: string = "tenant_9876";
3
4const newHashTag: CreateHashTagBody = {
5 tag: "typescript",
6 description: "Discussions about TypeScript"
7};
8
9const responseWithTenant: AddHashTagResponse = await addHashTag(tenantId, newHashTag);
10
11const responseWithoutTenant: AddHashTagResponse = await addHashTag(undefined, newHashTag);
12

批次新增標籤 Internal Link

參數

名稱類型必填描述
tenantIdstring
bulkCreateHashTagsBodyBulkCreateHashTagsBody

回應

返回:AddHashTagsBulkResponse

範例

addHashTagsBulk 範例
Copy Copy
1
2async () => {
3 const tenantId: string | undefined = "tenant_9f8b7c6d";
4 const bulkCreateHashTagsBody: BulkCreateHashTagsBody = {
5 tags: [
6 {
7 name: "typescript",
8 description: "Discussions about TypeScript",
9 color: "#3178c6"
10 },
11 {
12 name: "fastcomments",
13 description: "Tags for FastComments integration",
14 color: "#00aaff"
15 }
16 ]
17 };
18 const result: AddHashTagsBulkResponse = await addHashTagsBulk(tenantId, bulkCreateHashTagsBody);
19 console.log(result);
20}();
21

刪除標籤 Internal Link

參數

NameTypeRequiredDescription
tagstringYes
tenantIdstringNo
deleteHashTagRequestBodyDeleteHashTagRequestBodyNo

回應

Returns: DeleteHashTagResponse

範例

deleteHashTag 範例
Copy Copy
1
2(async () => {
3 const tag: string = "announcement";
4 const tenantId: string = "tenant_9876";
5 const requestBody: DeleteHashTagRequestBody = {
6 confirmDeletion: true
7 };
8 const response: DeleteHashTagResponse = await deleteHashTag(tag, tenantId, requestBody);
9 console.log(response);
10})();
11

取得標籤 Internal Link

參數

名稱類型必填說明
tenantIdstringYes
pagenumberNo

回應

返回:GetHashTagsResponse1

範例

getHashTags 範例
Copy Copy
1
2(async () => {
3 const tenantId: string = "tenant_12345";
4
5 const responseWithPage: GetHashTagsResponse1 = await getHashTags(tenantId, 1);
6 const responseDefault: GetHashTagsResponse1 = await getHashTags(tenantId);
7
8 console.log(responseWithPage, responseDefault);
9})();
10

部分更新標籤 Internal Link

參數

名稱類型必填說明
tagstringYes
tenantIdstringNo
updateHashTagBodyUpdateHashTagBodyNo

回應

返回:PatchHashTagResponse

範例

patchHashTag 範例
Copy Copy
1
2const response1: PatchHashTagResponse = await patchHashTag("new-feature");
3
4const response2: PatchHashTagResponse = await patchHashTag(
5 "beta-release",
6 "tenant-9f8b7c"
7);
8
9const updateBody: UpdateHashTagBody = {
10 description: "Mark comments related to the upcoming beta release",
11 color: "#1e90ff"
12};
13
14const response3: PatchHashTagResponse = await patchHashTag(
15 "beta-release",
16 "tenant-9f8b7c",
17 updateBody
18);
19

刪除審核投票 Internal Link

參數

NameTypeRequiredDescription
commentIdstringYes
voteIdstringYes
broadcastIdstringNo
tenantIdstringNo
ssostringNo

回應

Returns: DeleteModerationVoteResponse

範例

deleteModerationVote 範例
Copy Copy
1
2const commentId: string = "cmt_12345";
3const voteId: string = "vote_9876";
4const broadcastId: string = "brd_001";
5const tenantId: string = "tenant_42";
6const sso: string = "sso_token_abc";
7
8const result: DeleteModerationVoteResponse = await deleteModerationVote(
9 commentId,
10 voteId,
11 broadcastId,
12 tenantId,
13 sso
14);
15

取得 API 留言 Internal Link

參數

名稱類型必要描述
pagenumberNo
countnumberNo
textSearchstringNo
byIPFromCommentstringNo
filtersstringNo
searchFiltersstringNo
sortsstringNo
demobooleanNo
tenantIdstringNo
ssostringNo

回應

回傳:GetApiCommentsResponse

範例

getApiComments 範例
Copy Copy
1
2async function loadComments() {
3 const fullResult: GetApiCommentsResponse = await getApiComments(
4 2, // 頁面
5 25, // 數量
6 "feedback", // 文字搜尋
7 "192.168.1.100", // 依IP取得評論
8 "approved", // 篩選條件
9 "hasReplies", // 搜尋篩選條件
10 "dateDesc", // 排序
11 false, // 示範
12 "tenant-abc123", // 租戶ID
13 "sso-token-xyz" // 單點登入
14 );
15
16 const minimalResult: GetApiCommentsResponse = await getApiComments(undefined, 5);
17}
18

取得 API 匯出狀態 Internal Link

參數

名稱類型必填描述
batchJobIdstringNo
tenantIdstringNo
ssostringNo

回應

回傳:GetApiExportStatusResponse

範例

getApiExportStatus 範例
Copy Copy
1
2async function demoExportStatus() {
3 const batchJobId: string = "exportBatch-20231101-001";
4 const tenantId: string = "tenant-abc123";
5 const ssoToken: string = "sso-xyz789";
6
7 const fullStatus: GetApiExportStatusResponse = await getApiExportStatus(batchJobId, tenantId, ssoToken);
8 const simpleStatus: GetApiExportStatusResponse = await getApiExportStatus(batchJobId);
9 console.log(fullStatus, simpleStatus);
10}
11

取得 API IDs Internal Link

參數

名稱類型必要描述
textSearchstringNo
byIPFromCommentstringNo
filtersstringNo
searchFiltersstringNo
afterIdstringNo
demobooleanNo
tenantIdstringNo
ssostringNo

回應

返回:GetApiIdsResponse

範例

getApiIds 範例
Copy Copy
1
2const textSearch: string = "urgent feedback";
3const byIPFromComment: string = "203.0.113.42";
4const filters: string = "status:approved";
5const afterId: string = "comment-789";
6const demo: boolean = true;
7const tenantId: string = "tenant-001";
8
9const apiIds: GetApiIdsResponse = await getApiIds({
10 textSearch,
11 byIPFromComment,
12 filters,
13 afterId,
14 demo,
15 tenantId,
16});
17

取得從留言封鎖的使用者 Internal Link

參數

名稱類型必填描述
commentIdstring
tenantIdstring
ssostring

回應

返回:GetBanUsersFromCommentResponse

範例

getBanUsersFromComment 範例
Copy Copy
1
2async function demoGetBanUsers() {
3 const commentId: string = "cmt_5f8e3a9b2d";
4 const tenantId: string = "tenant_42";
5 const sso: string = "sso_token_abc123";
6
7 // 呼叫所有參數
8 const fullResult: GetBanUsersFromCommentResponse = await getBanUsersFromComment(commentId, tenantId, sso);
9 console.log(fullResult);
10
11 // 只使用必要參數呼叫
12 const minimalResult: GetBanUsersFromCommentResponse = await getBanUsersFromComment(commentId);
13 console.log(minimalResult);
14}
15
16demoGetBanUsers();
17

取得留言封鎖狀態 Internal Link

參數

NameTypeRequiredDescription
commentIdstring
tenantIdstring
ssostring

回應

Returns: GetCommentBanStatusResponse1

範例

getCommentBanStatus 範例
Copy Copy
1
2async function checkCommentBanStatus() {
3 const banStatus: GetCommentBanStatusResponse1 = await getCommentBanStatus('cmt_987654321', 'tenant_42', 'sso_token_abc123');
4 const banStatusNoTenant: GetCommentBanStatusResponse1 = await getCommentBanStatus('cmt_987654322', undefined, 'sso_token_def456');
5}
6

取得留言子項 Internal Link

參數

名稱類型必填說明
commentIdstringYes
tenantIdstringNo
ssostringNo

回應

回傳: GetCommentChildrenResponse

範例

getCommentChildren 範例
Copy Copy
1
2const commentId: string = "cmt_12345";
3const tenantId: string = "tenant_xyz";
4const sso: string = "sso_987654";
5
6const fullResponse: GetCommentChildrenResponse = await getCommentChildren(commentId, tenantId, sso);
7const minimalResponse: GetCommentChildrenResponse = await getCommentChildren(commentId);
8

取得計數 Internal Link

參數

名稱類型必填說明
textSearchstring
byIPFromCommentstring
filterstring
searchFiltersstring
demoboolean
tenantIdstring
ssostring

回應

返回: GetCountResponse

範例

getCount 範例
Copy Copy
1
2async function main(): Promise<void> {
3 const count: GetCountResponse = await getCount({
4 textSearch: "order issue",
5 byIPFromComment: "198.51.100.23",
6 filter: "pending",
7 demo: true,
8 tenantId: "acme_corp",
9 sso: "sso_abcdef123456"
10 });
11 console.log(count);
12}
13main();
14

取得多個計數 Internal Link

參數

名稱類型必要描述
tenantIdstring
ssostring

回應

返回:GetCountsResponse

範例

getCounts 範例
Copy Copy
1
2async function runExample() {
3 const tenantId: string = "acme-corp";
4 const ssoToken: string = "sso-token-2024";
5
6 const withBoth: GetCountsResponse = await getCounts(tenantId, ssoToken);
7 const withTenantOnly: GetCountsResponse = await getCounts(tenantId);
8 const withoutParams: GetCountsResponse = await getCounts();
9
10 console.log(withBoth, withTenantOnly, withoutParams);
11}
12runExample();
13

取得日誌 Internal Link

參數

名稱類型必填描述
commentIdstring
tenantIdstring
ssostring

回應

返回: GetLogsResponse

範例

getLogs 範例
Copy Copy
1
2async function fetchLogs() {
3 const commentId: string = "cmt_9a8b7c6d5e4f3a2b";
4 const tenantId: string = "tenant_9876";
5 const sso: string = "sso_abcdef123456";
6
7 const fullResponse: GetLogsResponse = await getLogs(commentId, tenantId, sso);
8 const minimalResponse: GetLogsResponse = await getLogs(commentId);
9}
10

取得手動徽章 Internal Link

Parameters

NameTypeRequiredDescription
tenantIdstring
ssostring

Response

返回:GetManualBadgesResponse

Example

getManualBadges 範例
Copy Copy
1
2async function fetchBadges() {
3 const tenantId: string = "tenant_987654321";
4 const ssoToken: string = "sso_ABCdef123456";
5
6 // 同時呼叫兩個可選參數
7 const responseFull: GetManualBadgesResponse = await getManualBadges(tenantId, ssoToken);
8 console.log(responseFull);
9
10 // 僅以 tenantId 呼叫
11 const responseTenantOnly: GetManualBadgesResponse = await getManualBadges(tenantId);
12 console.log(responseTenantOnly);
13}
14
15fetchBadges();
16

取得使用者的手動徽章 Internal Link

參數

名稱類型必填說明
badgesUserIdstringNo
commentIdstringNo
tenantIdstringNo
ssostringNo

回應

返回: GetManualBadgesForUserResponse

範例

getManualBadgesForUser 範例
Copy Copy
1
2(async () => {
3 const userId: string = "user_42";
4 const commentId: string = "comment_1001";
5 const tenantId: string = "tenant_acme";
6 const ssoToken: string = "sso_5f6g7h8i9j";
7
8 const badges: GetManualBadgesForUserResponse = await getManualBadgesForUser(userId, commentId, tenantId, ssoToken);
9 const limitedBadges: GetManualBadgesForUserResponse = await getManualBadgesForUser(userId);
10})();
11

取得審核留言 Internal Link

參數

名稱類型必填描述
commentIdstring
includeEmailboolean
includeIPboolean
tenantIdstring
ssostring

回應

返回:GetModerationCommentResponse

範例

getModerationComment 範例
Copy Copy
1
2async function fetchCommentDetails() {
3 // 完整參數集合
4 const commentId: string = "cmt_12345abc";
5 const includeEmail: boolean = true;
6 const includeIP: boolean = false;
7 const tenantId: string = "tenant_9876";
8 const sso: string = "sso_token_xyz";
9
10 const fullResult: GetModerationCommentResponse = await getModerationComment(
11 commentId,
12 includeEmail,
13 includeIP,
14 tenantId,
15 sso
16 );
17
18 // 只使用必要參數的最小呼叫
19 const minimalResult: GetModerationCommentResponse = await getModerationComment("cmt_67890def");
20
21 // 根據需要使用結果...
22}
23

取得審核留言文字 Internal Link

Parameters

名稱類型必填說明
commentIdstring
tenantIdstring
ssostring

回應

返回:GetModerationCommentTextResponse

範例

getModerationCommentText 範例
Copy Copy
1
2async function exampleUsage(): Promise<void> {
3 const commentId: string = "cmt_9f8e7d6c5b4a3b2c1d0e";
4 const tenantId: string = "tenant_67890";
5 const sso: string = "sso_token_abc123";
6
7 // 只使用必填參數呼叫
8 const result1: GetModerationCommentTextResponse = await getModerationCommentText(commentId);
9
10 // 呼叫時使用可選參數
11 const result2: GetModerationCommentTextResponse = await getModerationCommentText(commentId, tenantId, sso);
12}
13

取得預封鎖摘要 Internal Link

參數

名稱類型必要描述
commentIdstringYes
includeByUserIdAndEmailbooleanNo
includeByIPbooleanNo
includeByEmailDomainbooleanNo
tenantIdstringNo
ssostringNo

回應

Returns: GetPreBanSummaryResponse

範例

getPreBanSummary 範例
Copy Copy
1
2const commentId: string = "5f8d0c2e4b1a2c3d4e5f6a7b";
3const includeByUserIdAndEmail: boolean = true;
4const includeByIP: boolean = true;
5const includeByEmailDomain: boolean = false;
6const tenantId: string = "tenant-001";
7const sso: string = "sso-xyz-123";
8
9const preBanSummary: GetPreBanSummaryResponse = await getPreBanSummary(
10 commentId,
11 includeByUserIdAndEmail,
12 includeByIP,
13 includeByEmailDomain,
14 tenantId,
15 sso
16);
17

取得搜尋留言摘要 Internal Link

參數

名稱類型必填說明
valuestringNo
filtersstringNo
searchFiltersstringNo
tenantIdstringNo
ssostringNo

回應

回傳: GetSearchCommentsSummaryResponse

範例

getSearchCommentsSummary 範例
Copy Copy
1
2async function runExample(): Promise<void> {
3 const searchTerm: string = "fastcomments integration";
4 const filterString: string = "status:approved";
5 const searchFilterString: string = "author:jane";
6 const tenantId: string = "123e4567-e89b-12d3-a456-426614174000";
7 const ssoToken: string = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...";
8
9 const summary: GetSearchCommentsSummaryResponse = await getSearchCommentsSummary(
10 searchTerm,
11 filterString,
12 searchFilterString,
13 tenantId,
14 ssoToken
15 );
16
17 console.log(summary);
18}
19runExample();
20

取得搜尋頁面 Internal Link

參數

名稱類型必填說明
valuestring
tenantIdstring
ssostring

回應

回傳: GetSearchPagesResponse

範例

getSearchPages 範例
Copy Copy
1
2(async () => {
3 const query: string = "network outage";
4 const tenantId: string = "tenant-9876";
5 const ssoToken: string = "sso-abc123def456";
6
7 const searchResult: GetSearchPagesResponse = await getSearchPages(query, tenantId, ssoToken);
8 const searchResultNoSso: GetSearchPagesResponse = await getSearchPages(query, tenantId);
9})();
10

取得搜尋網站 Internal Link

參數

NameTypeRequiredDescription
valuestringNo
tenantIdstringNo
ssostringNo

回應

回傳:GetSearchSitesResponse

範例

getSearchSites 範例
Copy Copy
1
2async function fetchSites() {
3 const value: string = "customer support"
4 const tenantId: string = "tenant-9876"
5 const sso: string = "sso-abc123"
6
7 const sites: GetSearchSitesResponse = await getSearchSites(value, tenantId, sso)
8 const sitesOnlyTenant: GetSearchSitesResponse = await getSearchSites(undefined, tenantId)
9}
10

取得搜尋建議 Internal Link

參數

名稱類型必填描述
textSearchstring
tenantIdstring
ssostring

回應

返回:GetSearchSuggestResponse

範例

getSearchSuggest 範例
Copy Copy
1
2async function example(): Promise<void> {
3 const term: string = "fastcomments api";
4 const tenant: string = "tenant_001";
5 const sso: string = "sso_9a8b7c";
6
7 const fullResult: GetSearchSuggestResponse = await getSearchSuggest(term, tenant, sso);
8 const partialResult: GetSearchSuggestResponse = await getSearchSuggest(term);
9}
10
11example();
12

取得搜尋使用者 Internal Link

參數

名稱類型必要描述
valuestringNo
tenantIdstringNo
ssostringNo

回應

返回:GetSearchUsersResponse

範例

getSearchUsers 範例
Copy Copy
1
2async function demoSearch() {
3 const query: string = "john.doe@example.com";
4 const tenantId: string = "tenant_12345";
5 const ssoToken: string = "sso_token_abc";
6
7 const resultWithSso: GetSearchUsersResponse = await getSearchUsers(query, tenantId, ssoToken);
8 const resultWithoutSso: GetSearchUsersResponse = await getSearchUsers(query, tenantId);
9}
10

取得信任係數 Internal Link

參數

名稱類型必填描述
userIdstringNo
tenantIdstringNo
ssostringNo

回應

返回: GetTrustFactorResponse

範例

getTrustFactor 範例
Copy Copy
1
2async function runDemo(): Promise<void> {
3 const trustFull: GetTrustFactorResponse = await getTrustFactor("user_12345", "tenant_abc", "sso_token_987");
4 const trustUserOnly: GetTrustFactorResponse = await getTrustFactor("user_12345");
5 console.log(trustFull, trustUserOnly);
6}
7runDemo();
8

取得使用者封鎖偏好 Internal Link

參數

NameTypeRequiredDescription
tenantIdstringNo
ssostringNo

回應

Returns: GetUserBanPreferenceResponse

範例

getUserBanPreference 範例
Copy Copy
1
2async function demoGetUserBanPreference(): Promise<void> {
3 const tenantId: string = "acme-corp-tenant-2024";
4 const sso: string = "sso-token-9f8b7a6c";
5
6 const result: GetUserBanPreferenceResponse = await getUserBanPreference(tenantId, sso);
7 console.log(result);
8}
9
10demoGetUserBanPreference();
11

取得使用者內部檔案 Internal Link

參數

名稱類型必填說明
commentIdstringNo
tenantIdstringNo
ssostringNo

回應

回傳:GetUserInternalProfileResponse1

範例

getUserInternalProfile 範例
Copy Copy
1
2(async () => {
3 const fullProfile: GetUserInternalProfileResponse1 = await getUserInternalProfile({
4 commentId: "cmt_12345",
5 tenantId: "tenant_67890",
6 sso: "sso_token_abcdef"
7 });
8
9 const partialProfile: GetUserInternalProfileResponse1 = await getUserInternalProfile({
10 commentId: "cmt_98765"
11 });
12})();
13

調整留言投票 Internal Link

參數

名稱類型必填描述
commentIdstringYes
adjustCommentVotesParamsAdjustCommentVotesParamsYes
broadcastIdstringNo
tenantIdstringNo
ssostringNo

回應

返回: PostAdjustCommentVotesResponse

範例

postAdjustCommentVotes 範例
Copy Copy
1
2const commentId: string = "cmt_9f8b7a6d";
3
4const adjustParams: AdjustCommentVotesParams = {
5 voteDelta: 1,
6 // 需要 AdjustCommentVotesParams 的其他欄位
7};
8
9const broadcastId: string = "brd_20230915";
10const tenantId: string = "tenant_42";
11const sso: string = "sso-token-abc123";
12
13const result: PostAdjustCommentVotesResponse = await postAdjustCommentVotes(
14 commentId,
15 adjustParams,
16 broadcastId,
17 tenantId,
18 sso
19);
20

提交 API 匯出 Internal Link

參數

名稱類型必填說明
textSearchstringNo
byIPFromCommentstringNo
filtersstringNo
searchFiltersstringNo
sortsstringNo
tenantIdstringNo
ssostringNo

回應

回傳: PostApiExportResponse

範例

postApiExport 範例
Copy Copy
1
2(async () => {
3 const textSearch: string = "keyword:feedback"
4 const byIPFromComment: string = "203.0.113.45"
5 const filters: string = "status:pending,category:support"
6 const searchFilters: string = "createdAt>2023-01-01"
7 const sorts: string = "createdAt:desc"
8 const tenantId: string = "tenant_9876"
9 const sso: string = "sso_7e2a9b"
10
11 const exportResult: PostApiExportResponse = await postApiExport(
12 textSearch,
13 byIPFromComment,
14 filters,
15 searchFilters,
16 sorts,
17 tenantId,
18 sso
19 )
20
21 console.log(exportResult)
22})()
23

封鎖使用者(留言) Internal Link


參數

名稱類型必填描述
commentIdstring
banEmailboolean
banEmailDomainboolean
banIPboolean
deleteAllUsersCommentsboolean
bannedUntilstring
isShadowBanboolean
updateIdstring
banReasonstring
tenantIdstring
ssostring

回應

返回:PostBanUserFromCommentResponse

範例

postBanUserFromComment 範例
Copy Copy
1
2async function runBan() {
3 const commentId: string = "cmt_5f8a2b3c";
4 const banEmail: boolean = true;
5 const banIP: boolean = false;
6 const deleteAllUsersComments: boolean = true;
7 const bannedUntil: string = new Date(Date.now() + 7 * 24 * 60 * 60 * 1000).toISOString();
8 const isShadowBan: boolean = false;
9 const banReason: string = "Repeated spam posting";
10 const tenantId: string = "tenant_12345";
11
12 const response: PostBanUserFromCommentResponse = await postBanUserFromComment(
13 commentId,
14 banEmail,
15 undefined,
16 banIP,
17 deleteAllUsersComments,
18 bannedUntil,
19 isShadowBan,
20 undefined,
21 banReason,
22 tenantId
23 );
24 console.log(response);
25}
26runBan();
27

取消封鎖使用者 Internal Link

參數

名稱類型必填描述
banUserUndoParamsBanUserUndoParams
tenantIdstring
ssostring

回應

返回: PostBanUserUndoResponse

範例

postBanUserUndo 範例
Copy Copy
1
2const undoParams: BanUserUndoParams = {
3 userId: "user-8421",
4 commentId: "comment-6702",
5 reason: "Accidental ban"
6};
7
8const tenantId: string = "tenant-7f9e";
9const ssoToken: string = "sso-4b2c1d";
10
11async function runUndo() {
12 const resultAll: PostBanUserUndoResponse = await postBanUserUndo(undoParams, tenantId, ssoToken);
13 console.log(resultAll);
14
15 const resultMinimal: PostBanUserUndoResponse = await postBanUserUndo(undoParams);
16 console.log(resultMinimal);
17}
18
19runUndo();
20

批次提交預封鎖摘要 Internal Link

參數

名稱類型必填描述
bulkPreBanParamsBulkPreBanParamsYes
includeByUserIdAndEmailbooleanNo
includeByIPbooleanNo
includeByEmailDomainbooleanNo
tenantIdstringNo
ssostringNo

回應

回傳: PostBulkPreBanSummaryResponse

範例

postBulkPreBanSummary 範例
Copy Copy
1
2async function runExample() {
3 const bulkPreBanParams: BulkPreBanParams = {
4 userIds: [10234, 56789],
5 emails: ["spam_user@example.com", "abuse@badsite.org"],
6 ips: ["203.0.113.45", "198.51.100.22"],
7 emailDomains: ["maliciousdomain.com"]
8 };
9
10 const includeByUserIdAndEmail: boolean = true;
11 const includeByIP: boolean = false;
12 const includeByEmailDomain: boolean = true;
13 const tenantId: string = "tenant_8f4b2c1a";
14 const sso: string = "sso-3948abf0";
15
16 const summary: PostBulkPreBanSummaryResponse = await postBulkPreBanSummary(
17 bulkPreBanParams,
18 includeByUserIdAndEmail,
19 includeByIP,
20 includeByEmailDomain,
21 tenantId,
22 sso
23 );
24
25 console.log(summary);
26}
27
28runExample();
29

以 ID 取得留言(POST) Internal Link

參數

名稱類型必填說明
commentsByIdsParamsCommentsByIdsParams
tenantIdstring
ssostring

回應

返回: PostCommentsByIdsResponse

範例

postCommentsByIds 範例
Copy Copy
1
2const commentsByIdsParams: CommentsByIdsParams = {
3 commentIds: ['cmt001', 'cmt002'],
4 includeUserInfo: true,
5 includeThreadInfo: false,
6} as CommentsByIdsParams;
7
8const fullResponse: PostCommentsByIdsResponse = await postCommentsByIds(
9 commentsByIdsParams,
10 'tenant-12345',
11 'sso-token-xyz'
12);
13
14const minimalResponse: PostCommentsByIdsResponse = await postCommentsByIds(
15 commentsByIdsParams
16);
17

提交檢舉留言 Internal Link

參數

名稱類型必填說明
commentIdstring
broadcastIdstring
tenantIdstring
ssostring

回應

返回:PostFlagCommentResponse

範例

postFlagComment 範例
Copy Copy
1
2const commentId: string = "cmt_20230915_001";
3const broadcastId: string = "brd_20230915_live";
4const tenantId: string = "tenant_42";
5const sso: string = "sso_token_abc123";
6
7const flaggedResponse: PostFlagCommentResponse = await postFlagComment(
8 commentId,
9 broadcastId,
10 tenantId,
11 sso
12);
13

提交移除留言 Internal Link

參數

名稱類型必填描述
commentIdstring
broadcastIdstring
tenantIdstring
ssostring

回應

返回:PostRemoveCommentResponse

範例

postRemoveComment 範例
Copy Copy
1
2async function removeCommentExample(): Promise<void> {
3 const commentId: string = "cmt_7f9a3e2b";
4
5 const result1: PostRemoveCommentResponse = await postRemoveComment(commentId);
6
7 const broadcastId: string = "brd_12ab34cd";
8 const tenantId: string = "tenant_5678efgh";
9 const sso: string = "sso_XYZ12345";
10
11 const result2: PostRemoveCommentResponse = await postRemoveComment(commentId, broadcastId, tenantId, sso);
12
13 console.log(result1, result2);
14}
15

提交還原已刪除留言 Internal Link

參數

名稱類型必填說明
commentIdstringYes
broadcastIdstringNo
tenantIdstringNo
ssostringNo

回應

返回: PostRestoreDeletedCommentResponse

範例

postRestoreDeletedComment 範例
Copy Copy
1
2async function restoreCommentDemo(): Promise<void> {
3 const commentId: string = "cmt_5f2a9b7e1234567890abcd";
4 const broadcastId: string | undefined = "brd_2023_09";
5 const tenantId: string | undefined = "tenant_42";
6 const sso: string | undefined = "sso_token_abcdef123456";
7
8 const response: PostRestoreDeletedCommentResponse = await postRestoreDeletedComment(
9 commentId,
10 broadcastId,
11 tenantId,
12 sso
13 );
14
15 console.log(response);
16}
17
18restoreCommentDemo();
19

設定留言核准狀態 Internal Link

參數

名稱類型必填描述
commentIdstring
approvedboolean
broadcastIdstring
tenantIdstring
ssostring

回應

回傳: PostSetCommentApprovalStatusResponse

範例

postSetCommentApprovalStatus 範例
Copy Copy
1
2async function main() {
3 const commentIdOnly: string = "cmt_1001";
4 const resultOnly: PostSetCommentApprovalStatusResponse = await postSetCommentApprovalStatus(commentIdOnly);
5
6 const commentIdFull: string = "cmt_2002";
7 const approvedFull: boolean = true;
8 const broadcastIdFull: string = "brd_3003";
9 const tenantIdFull: string = "tenant_abc";
10 const ssoFull: string = "sso_token_xyz";
11 const resultFull: PostSetCommentApprovalStatusResponse = await postSetCommentApprovalStatus(
12 commentIdFull,
13 approvedFull,
14 broadcastIdFull,
15 tenantIdFull,
16 ssoFull
17 );
18
19 console.log(resultOnly, resultFull);
20}
21main();
22

設定留言審查狀態 Internal Link

參數

名稱類型必填說明
commentIdstring
reviewedboolean
broadcastIdstring
tenantIdstring
ssostring

回應

返回: PostSetCommentReviewStatusResponse

範例

postSetCommentReviewStatus 範例
Copy Copy
1
2async function updateCommentReviewStatus(): Promise<void> {
3 const commentId: string = "cmt_9f8a7b6c5d4e3f2a1b0c";
4 const reviewed: boolean = true;
5 const broadcastId: string = "broadcast_2024Q1";
6 const tenantId: string = "tenant_1001";
7 const sso: string = "alice@example.com";
8
9 const response: PostSetCommentReviewStatusResponse = await postSetCommentReviewStatus(
10 commentId,
11 reviewed,
12 broadcastId,
13 tenantId,
14 sso
15 );
16
17 console.log(response);
18}
19

設定留言垃圾郵件狀態 Internal Link

參數

名稱類型必填說明
commentIdstring
spamboolean
permNotSpamboolean
broadcastIdstring
tenantIdstring
ssostring

回應

返回:PostSetCommentSpamStatusResponse

範例

postSetCommentSpamStatus 範例
Copy Copy
1
2async function demoSpamStatus(): Promise<void> {
3 const commentId: string = "cmt_5f2a1b3c4d6e7f8g9h0i";
4
5 // 只需要的參數
6 const resultSimple: PostSetCommentSpamStatusResponse = await postSetCommentSpamStatus(commentId, true);
7
8 // 提供了所有可選參數
9 const resultFull: PostSetCommentSpamStatusResponse = await postSetCommentSpamStatus(
10 commentId,
11 false,
12 true,
13 "brd_1234abcd",
14 "tenant_42",
15 "sso_9876xyz"
16 );
17
18 console.log(resultSimple, resultFull);
19}
20

設定留言文字(審核) Internal Link

參數

名稱類型必要說明
commentIdstringYes
setCommentTextParamsSetCommentTextParamsYes
broadcastIdstringNo
tenantIdstringNo
ssostringNo

回應

返回:PostSetCommentTextResponse

範例

postSetCommentText 範例
Copy Copy
1
2(async () => {
3 const commentId: string = "cmt_9f8b7a6d5e4c3b2a1";
4 const setParams: SetCommentTextParams = {
5 text: "Edited comment to correct a typo and add clarification."
6 };
7 const broadcastId: string = "brd_1a2b3c4d5e6f7g8h9";
8 const tenantId: string = "tenant_xyz123";
9 const sso: string = "sso_user_456def";
10
11 const fullResult: PostSetCommentTextResponse = await postSetCommentText(
12 commentId,
13 setParams,
14 broadcastId,
15 tenantId,
16 sso
17 );
18
19 const minimalResult: PostSetCommentTextResponse = await postSetCommentText(
20 commentId,
21 setParams
22 );
23
24 console.log(fullResult, minimalResult);
25})();
26

提交取消檢舉留言 Internal Link

參數

名稱類型必填描述
commentIdstringYes
broadcastIdstringNo
tenantIdstringNo
ssostringNo

回應

返回:PostUnFlagCommentResponse

範例

postUnFlagComment 範例
Copy Copy
1
2async () => {
3 const response: PostUnFlagCommentResponse = await postUnFlagComment(
4 "cmt_12345", // commentId
5 "brd_67890", // broadcastId (可選)
6 "tenant_abc", // tenantId (可選)
7 "sso_user_token_789" // sso (可選)
8 );
9};
10

提交投票 Internal Link

參數

名稱類型必填說明
commentIdstringYes
directionstringNo
broadcastIdstringNo
tenantIdstringNo
ssostringNo

回應

返回: PostVoteResponse

範例

postVote 範例
Copy Copy
1
2let commentId: string = 'cmt_12345';
3let direction: string = 'up';
4let broadcastId: string = 'brd_67890';
5let tenantId: string = 'tenant_abc';
6let sso: string = 'sso_token_xyz';
7
8const fullVote: PostVoteResponse = await postVote(
9 commentId,
10 direction,
11 broadcastId,
12 tenantId,
13 sso
14);
15
16const simpleVote: PostVoteResponse = await postVote('cmt_67890');
17

授予徽章 Internal Link

參數

名稱類型必填說明
badgeIdstring
userIdstring
commentIdstring
broadcastIdstring
tenantIdstring
ssostring

回應

返回值: PutAwardBadgeResponse

範例

putAwardBadge 範例
Copy Copy
1
2(async () => {
3 const badgeId: string = "badge-superstar"
4 const userId: string = "user-42"
5 const commentId: string = "comment-7f9c3"
6 const broadcastId: string = "broadcast-2023-09"
7 const result: PutAwardBadgeResponse = await putAwardBadge(badgeId, userId, commentId, broadcastId)
8 console.log(result)
9})()
10

關閉討論串 Internal Link

參數

NameTypeRequiredDescription
urlIdstringYes
tenantIdstringNo
ssostringNo

回應

返回:PutCloseThreadResponse

範例

putCloseThread 範例
Copy Copy
1
2async function closeThreadDemo(): Promise<void> {
3 const urlId: string = "article-2023-09-15";
4 const tenantId: string = "tenant-42";
5 const sso: string = "sso-token-xyz";
6
7 const response: PutCloseThreadResponse = await putCloseThread(urlId, tenantId, sso);
8 console.log(response);
9}
10
11closeThreadDemo();
12

移除徽章 Internal Link

參數

名稱類型必填說明
badgeIdstringYes
userIdstringNo
commentIdstringNo
broadcastIdstringNo
tenantIdstringNo
ssostringNo

回應

返回:PutRemoveBadgeResponse

範例

putRemoveBadge 範例
Copy Copy
1
2const badgeId: string = "badge-12345";
3const userId: string = "user-9876";
4const commentId: string = "comment-5555";
5const broadcastId: string = "broadcast-001";
6
7const result: PutRemoveBadgeResponse = await putRemoveBadge(
8 badgeId,
9 userId,
10 commentId,
11 broadcastId
12);
13

重新開啟討論串 Internal Link

參數

名稱類型必填說明
urlIdstringYes
tenantIdstringNo
ssostringNo

回應

返回:PutReopenThreadResponse

範例

putReopenThread 範例
Copy Copy
1
2async function exampleUsage() {
3 const urlId: string = "thread-9f8b7c6a";
4 const tenantId: string = "tenant-001";
5 const sso: string = "sso-3f9d2e1a";
6
7 const resultAll: PutReopenThreadResponse = await putReopenThread(urlId, tenantId, sso);
8 console.log(resultAll);
9
10 const resultMinimal: PutReopenThreadResponse = await putReopenThread(urlId);
11 console.log(resultMinimal);
12}
13

設定信任係數 Internal Link

參數

NameTypeRequiredDescription
userIdstringNo
trustFactorstringNo
tenantIdstringNo
ssostringNo

回應

返回:SetTrustFactorResponse

範例

setTrustFactor 範例
Copy Copy
1
2(async () => {
3 const userId: string = "user_8421";
4 const trustFactor: string = "high";
5 const tenantId: string = "tenant_33";
6 const ssoToken: string = "sso_7d9f";
7
8 const fullResult: SetTrustFactorResponse = await setTrustFactor(userId, trustFactor, tenantId, ssoToken);
9 const minimalResult: SetTrustFactorResponse = await setTrustFactor(userId, trustFactor);
10})();
11

建立管理員 Internal Link

參數

NameTypeRequiredDescription
tenantIdstringYes
createModeratorBodyCreateModeratorBodyYes

回應

返回: CreateModeratorResponse1

範例

createModerator 範例
Copy Copy
1
2async function runExample() {
3 const tenantId: string = "tenant_9876";
4 const moderatorPayload: CreateModeratorBody = {
5 name: "Alice Johnson",
6 email: "alice.johnson@example.com"
7 // 可選欄位如說明已省略
8 };
9 const result: CreateModeratorResponse1 = await createModerator(tenantId, moderatorPayload);
10 console.log(result);
11}
12
13runExample();
14

刪除管理員 Internal Link

參數

名稱類型必填描述
tenantIdstringYes
idstringYes
sendEmailstringNo

回應

返回: DeleteModeratorResponse

範例

deleteModerator 範例
Copy Copy
1
2async function runDeleteModeratorExample() {
3 const tenantId: string = "tenant_2023";
4 const moderatorId: string = "mod_001";
5 const notificationEmail: string = "admin@mycompany.com";
6
7 const resultWithEmail: DeleteModeratorResponse = await deleteModerator(tenantId, moderatorId, notificationEmail);
8 const resultWithoutEmail: DeleteModeratorResponse = await deleteModerator(tenantId, moderatorId);
9}
10

取得管理員 Internal Link

參數

名稱類型必填說明
tenantIdstringYes
idstringYes

回應

返回:GetModeratorResponse1

範例

getModerator 範例
Copy Copy
1
2(async () => {
3 const tenantId: string = "acme-corp-001";
4 const id: string = "mod-12345";
5
6 const result: GetModeratorResponse1 = await getModerator(tenantId, id);
7
8 const moderatorName: string | undefined = result.moderator?.name;
9 console.log(moderatorName);
10})();
11

取得管理員清單 Internal Link

參數

名稱類型必填描述
tenantIdstringYes
skipnumberNo

回應

返回:GetModeratorsResponse1

範例

getModerators 範例
Copy Copy
1
2async function fetchModerators(): Promise<void> {
3 const tenantId: string = "tenant-9876";
4 const skip: number = 30; // 可選的分頁偏移
5 const moderators: GetModeratorsResponse1 = await getModerators(tenantId, skip);
6 // 沒有分頁的範例:
7 // const allModerators: GetModeratorsResponse1 = await getModerators(tenantId);
8}
9

發送邀請 Internal Link


參數

NameTypeRequiredDescription
tenantIdstring
idstring
fromNamestring

回應

返回:SendInviteResponse

範例

sendInvite 範例
Copy Copy
1
2const tenantId: string = "acme-corp-tenant";
3const inviteId: string = "invite-12345";
4const fromName: string = "John Doe";
5
6const inviteResult: SendInviteResponse = await sendInvite(tenantId, inviteId, fromName);
7

更新管理員 Internal Link

參數

名稱類型必填說明
tenantIdstringYes
idstringYes
updateModeratorBodyUpdateModeratorBodyYes

回應

返回: UpdateModeratorResponse

範例

updateModerator 範例
Copy Copy
1
2async function demoUpdateModerator(): Promise<void> {
3 const tenantId: string = "tenant_42abc";
4 const moderatorId: string = "moderator_8f9e";
5 const updateBody: UpdateModeratorBody = {
6 isActive: true,
7 role: "admin",
8 // 可選欄位
9 notes: "Promoted to senior moderator"
10 };
11 const result: UpdateModeratorResponse = await updateModerator(tenantId, moderatorId, updateBody);
12 console.log(result);
13}
14
15demoUpdateModerator();
16

刪除通知計數 Internal Link

參數

名稱類型必填描述
tenantIdstring
idstring

回應

Returns: DeleteNotificationCountResponse

範例

deleteNotificationCount 範例
Copy Copy
1
2async function run() {
3 const tenantId: string = "tenant_12345";
4 const notificationId: string = "notif_98765";
5 const result: DeleteNotificationCountResponse = await deleteNotificationCount(tenantId, notificationId);
6 console.log(result);
7}
8run();
9

取得快取的通知計數 Internal Link

參數

名稱類型必填說明
tenantIdstringYes
idstringYes

回應

返回: GetCachedNotificationCountResponse1

範例

getCachedNotificationCount 範例
Copy Copy
1
2const tenantId: string = "e3f1a9b2-4c5d-6e7f-8a9b-0c1d2e3f4a5b";
3const userId: string = "u-20231101-001";
4
5const notificationResult: GetCachedNotificationCountResponse1 = await getCachedNotificationCount(tenantId, userId);
6
7console.log(notificationResult);
8

取得通知計數 Internal Link

參數

名稱類型必填說明
tenantIdstringYes
userIdstringNo
urlIdstringNo
fromCommentIdstringNo
viewedbooleanNo
typestringNo

回應

返回:GetNotificationCountResponse1

範例

getNotificationCount 範例
Copy Copy
1
2async function demoNotificationCount() {
3 const tenantId: string = "tenant_001";
4 const userId: string = "user_42";
5 const urlId: string = "url_9f8e7d";
6 const fromCommentId: string = "comment_12345";
7 const viewed: boolean = false;
8 const type: string = "mention";
9
10 const result: GetNotificationCountResponse1 = await getNotificationCount(
11 tenantId,
12 userId,
13 urlId,
14 fromCommentId,
15 viewed,
16 type
17 );
18
19 console.log(result);
20}
21
22demoNotificationCount();
23

取得通知 Internal Link


參數

名稱類型必填描述
tenantIdstring
userIdstring
urlIdstring
fromCommentIdstring
viewedboolean
typestring
skipnumber

回應

返回: GetNotificationsResponse1

範例

getNotifications 範例
Copy Copy
1
2async function demo() {
3 const tenantId: string = "acme-corp";
4 const userId: string = "john.doe";
5
6 const notifications: GetNotificationsResponse1 = await getNotifications(tenantId, userId);
7 console.log(notifications);
8
9 const more: GetNotificationsResponse1 = await getNotifications(
10 tenantId,
11 undefined,
12 "article-5678",
13 undefined,
14 true,
15 "reply",
16 10
17 );
18 console.log(more);
19}
20demo();
21

更新通知 Internal Link

參數

名稱類型必填說明
tenantIdstringYes
idstringYes
updateNotificationBodyUpdateNotificationBodyYes
userIdstringNo

回應

返回:UpdateNotificationResponse

範例

updateNotification 範例
Copy Copy
1
2const tenantId: string = "tenant_5f4d2c";
3const notificationId: string = "notif_9b8a7c";
4
5const updateBody: UpdateNotificationBody = {
6 enabled: false,
7 sendEmail: true,
8 schedule: "2023-12-01T08:00:00Z"
9};
10
11const userId: string = "user_123e4567";
12
13const responseWithUser: UpdateNotificationResponse = await updateNotification(
14 tenantId,
15 notificationId,
16 updateBody,
17 userId
18);
19
20const responseWithoutUser: UpdateNotificationResponse = await updateNotification(
21 tenantId,
22 notificationId,
23 updateBody
24);
25

建立 V1 頁面互動 Internal Link

參數

名稱類型必填說明
tenantIdstring
urlIdstring
titlestring

回應

返回: CreateV1PageReactResponse

範例

createV1PageReact 範例
Copy Copy
1
2const tenantId: string = "tenant_12345";
3const urlId: string = "article-2024-06-improvements";
4const title: string = "FastComments API Integration Guide";
5
6const responseWithTitle: CreateV1PageReactResponse = await createV1PageReact(tenantId, urlId, title);
7const responseWithoutTitle: CreateV1PageReactResponse = await createV1PageReact(tenantId, urlId);
8

建立 V2 頁面互動 Internal Link


參數

名稱類型必填說明
tenantIdstringYes
urlIdstringYes
idstringYes
titlestringNo

回應

返回:CreateV2PageReactResponse

範例

createV2PageReact 範例
Copy Copy
1
2(async () => {
3 const tenantId: string = "acme-corp";
4 const urlId: string = "blog/posts/fastcomments-integration";
5 const pageId: string = "page-12345";
6 const title: string = "FastComments API Integration Guide";
7
8 const responseWithoutTitle: CreateV2PageReactResponse = await createV2PageReact(tenantId, urlId, pageId);
9 const responseWithTitle: CreateV2PageReactResponse = await createV2PageReact(tenantId, urlId, pageId, title);
10
11 console.log(responseWithoutTitle, responseWithTitle);
12})();
13

刪除 V1 頁面互動 Internal Link

參數

名稱類型必填描述
tenantIdstring
urlIdstring

回應

返回: DeleteV1PageReactResponse

範例

deleteV1PageReact 範例
Copy Copy
1
2const tenantId: string = "acme-corp";
3const urlId: string = "article-2024-06-01";
4
5const response: DeleteV1PageReactResponse = await deleteV1PageReact(tenantId, urlId);
6console.log(response);
7

刪除 V2 頁面互動 Internal Link

參數

名稱類型必填說明
tenantIdstring
urlIdstring
idstring

回應

返回:DeleteV2PageReactResponse

範例

deleteV2PageReact 範例
Copy Copy
1
2const tenantId: string = "tenant_12345";
3const urlId: string = "page_98765";
4const reactionId: string = "react_abcde";
5
6const deleteResult: DeleteV2PageReactResponse = await deleteV2PageReact(tenantId, urlId, reactionId);
7

取得 V1 頁面按讚 Internal Link

參數

名稱類型必填說明
tenantIdstring
urlIdstring

回應

回傳: GetV1PageLikesResponse

範例

getV1PageLikes 範例
Copy Copy
1
2async function fetchPageLikes() {
3 const tenantId: string = "acme-corp-tenant-42";
4 const urlId: string = "blog-post-2024-06-typescript-best-practices";
5
6 const likes: GetV1PageLikesResponse = await getV1PageLikes(tenantId, urlId);
7 console.log(likes);
8}
9

取得 V2 頁面互動 Internal Link

參數

名稱類型必填說明
tenantIdstring
urlIdstring

回應

返回:GetV2PageReactsResponse

範例

getV2PageReacts 範例
Copy Copy
1
2async function demoGetPageReacts(): Promise<void> {
3 const tenantId: string = "acme-corp-tenant";
4 const urlId: string = "article-2024-06-01";
5
6 const reacts: GetV2PageReactsResponse = await getV2PageReacts(tenantId, urlId);
7
8 // 可選屬性存取範例
9 const customConfig: CustomConfigParameters | undefined = reacts.customConfig;
10 console.log(reacts);
11}
12
13demoGetPageReacts();
14

取得 V2 頁面互動使用者 Internal Link

參數

名稱類型必填說明
tenantIdstring
urlIdstring
idstring

回應

返回: GetV2PageReactUsersResponse1

範例

getV2PageReactUsers 範例
Copy Copy
1
2async function fetchReactUsers() {
3 const tenantId: string = 'tenant_12345';
4 const urlId: string = 'article-9876';
5 const id: string = 'user_abcde';
6 const response: GetV2PageReactUsersResponse1 = await getV2PageReactUsers(tenantId, urlId, id);
7 console.log(response);
8}
9fetchReactUsers();
10

新增頁面 Internal Link

參數

名稱類型必填說明
tenantIdstring
createAPIPageDataCreateAPIPageData

回應

返回: AddPageAPIResponse

範例

addPage 範例
Copy Copy
1
2const tenantId: string = "tenant_9f8432b1-4c2e-4f9d-8a5d-7bc9e2f6d9a0";
3
4const pageData: CreateAPIPageData = {
5 url: "https://example.com/articles/fastcomments-intro",
6 title: "FastComments Introduction",
7 description: "An introductory guide to FastComments API usage.",
8 tags: ["fastcomments", "api", "tutorial"],
9 metadata: {
10 author: "Jane Doe",
11 publishedAt: "2024-03-15T08:00:00Z"
12 }
13};
14
15const response: AddPageAPIResponse = await addPage(tenantId, pageData);
16

刪除頁面 Internal Link

參數

名稱類型必填說明
tenantIdstring
idstring

回應

返回: DeletePageAPIResponse

範例

deletePage 範例
Copy Copy
1
2async function example() {
3 const tenantId: string = "acme-corp-001";
4 const pageId: string = "page-987654321";
5 const result: DeletePageAPIResponse = await deletePage(tenantId, pageId);
6 console.log(result);
7}
8example();
9

取得離線使用者 Internal Link

過去在頁面上的評論者目前 上線。依 displayName 排序。
在耗盡 /users/online 後使用此功能以呈現「成員」區段。
在 commenterName 上使用游標分頁:伺服器從部分 {tenantId, urlId, commenterName} 索引,透過 $gtafterName 向前走,無 $skip 成本。

參數

名稱類型必填描述
tenantIdstring
urlIdstring
afterNamestring
afterUserIdstring

回應

返回:GetOfflineUsersResponse

範例

getOfflineUsers 範例
Copy Copy
1
2async function fetchOfflineUsers(): Promise<void> {
3 const tenantId: string = "tenant_12345";
4 const urlId: string = "thread_9876";
5 const afterName: string = "Jane Smith";
6 const afterUserId: string = "user_7f9b3c";
7
8 const offlineUsers: GetOfflineUsersResponse = await getOfflineUsers(
9 tenantId,
10 urlId,
11 afterName,
12 afterUserId
13 );
14
15 console.log(offlineUsers);
16}
17

取得在線使用者 Internal Link

目前線上觀看頁面的使用者:指其 websocket 會話目前已訂閱此頁面的使用者。
返回 anonCount + totalCount(全房間訂閱者,包括我們未列舉的匿名觀看者)。

參數

名稱類型必填說明
tenantIdstring
urlIdstring
afterNamestring
afterUserIdstring

回應

返回:GetOnlineUsersResponse

範例

getOnlineUsers 範例
Copy Copy
1
2async function demoOnlineUsers() {
3 const tenantId: string = "tenant_12345";
4 const urlId: string = "url_98765";
5
6 // 使用可選的分頁參數
7 const pagedResult: GetOnlineUsersResponse = await getOnlineUsers(
8 tenantId,
9 urlId,
10 "alice_smith",
11 "user_9"
12 );
13
14 // 不使用可選的分頁參數
15 const fullResult: GetOnlineUsersResponse = await getOnlineUsers(tenantId, urlId);
16}
17

以 URL ID 取得頁面 Internal Link

參數

名稱類型必填描述
tenantIdstring
urlIdstring

回應

返回:GetPageByURLIdAPIResponse

範例

getPageByURLId 範例
Copy Copy
1
2(async () => {
3 const tenantId: string = "tenant_12345";
4 const urlId: string = "url_9876";
5
6 const response: GetPageByURLIdAPIResponse = await getPageByURLId(tenantId, urlId);
7 const page: APIPage | undefined = response.page;
8})();
9

取得頁面 Internal Link

參數

名稱類型必填說明
tenantIdstringYes

回應

返回:GetPagesAPIResponse

範例

getPages 範例
Copy Copy
1
2const tenantId: string = "tenant_12345";
3
4(async () => {
5 const response: GetPagesAPIResponse = await getPages(tenantId);
6 const firstPage: APIPage | undefined = response.pages?.[0];
7 console.log(firstPage?.title);
8})();
9

取得公開頁面 Internal Link

列出租戶的頁面。由 FChat 桌面客戶端使用,以填充其房間列表。
需要在每個頁面的已解析自訂設定中將 enableFChat 設為 true。
需要 SSO 的頁面會根據請求使用者的群組存取權限進行過濾。

Parameters

名稱類型必填描述
tenantIdstring
cursorstring
limitnumber
qstring
sortByPagesSortBy
hasCommentsboolean

Response

返回: GetPagesPublicResponse

範例

getPagesPublic 示例
Copy Copy
1
2async function fetchPages() {
3 const tenantId: string = "tenant_12345";
4 const cursor: string = "nextPageToken";
5 const limit: number = 20;
6 const q: string = "blog";
7 const sortBy: PagesSortBy = "createdAt";
8 const hasComments: boolean = true;
9
10 const response: GetPagesPublicResponse = await getPagesPublic(
11 tenantId,
12 cursor,
13 limit,
14 q,
15 sortBy,
16 hasComments
17 );
18
19 console.log(response);
20}
21

取得使用者資訊 Internal Link

取得租戶的批次使用者資訊。根據 userIds,回傳 User / SSOUser 的顯示資訊。此功能由評論小工具使用,以在使用者透過 presence 事件剛出現時豐富其資訊。無頁面上下文:隱私權一致執行(私密個人檔案會被遮蔽)。

參數

名稱類型必填說明
tenantIdstringYes
idsstringYes

回應

返回: GetUsersInfoResponse

範例

getUsersInfo 範例
Copy Copy
1
2const tenantId: string = "acme-corp-tenant";
3const ids: string = "user-1001,user-1002";
4
5const usersInfo: GetUsersInfoResponse = await getUsersInfo(tenantId, ids);
6
7// 回應中的可選欄位可能為 undefined
8const firstUser: PageUserEntry | undefined = usersInfo?.users?.[0];
9

部分更新頁面 Internal Link

參數

名稱類型必填說明
tenantIdstring
idstring
updateAPIPageDataUpdateAPIPageData

回應

返回:PatchPageAPIResponse

範例

patchPage 範例
Copy Copy
1
2(async () => {
3 const tenantId: string = "tenant_12345";
4 const pageId: string = "page_98765";
5
6 const updateData: UpdateAPIPageData = {
7 title: "Updated FAQ Page"
8 // description?: string 可以省略
9 };
10
11 const response: PatchPageAPIResponse = await patchPage(tenantId, pageId, updateData);
12})();
13

刪除待處理的 Webhook 事件 Internal Link


參數

名稱類型必填說明
tenantIdstring
idstring

回應

回傳: DeletePendingWebhookEventResponse

範例

deletePendingWebhookEvent 範例
Copy Copy
1
2async function runDemo() {
3 const tenantId: string = 'c3f5e9d2-1a2b-4c3d-9e7f-1234567890ab';
4 const eventId: string = 'event_987654321';
5 const response: DeletePendingWebhookEventResponse = await deletePendingWebhookEvent(tenantId, eventId);
6 console.log(response);
7}
8runDemo();
9

取得待處理 Webhook 事件計數 Internal Link

參數

名稱類型必填說明
tenantIdstringYes
commentIdstringNo
externalIdstringNo
eventTypestringNo
typestringNo
domainstringNo
attemptCountGTnumberNo

回應

返回:GetPendingWebhookEventCountResponse1

範例

getPendingWebhookEventCount 範例
Copy Copy
1
2(async () => {
3 const tenantId: string = "tenant_001";
4
5 const responseAll: GetPendingWebhookEventCountResponse1 = await getPendingWebhookEventCount(
6 tenantId,
7 "comment_456",
8 "ext_789",
9 "comment.updated",
10 "webhook",
11 "mydomain.com",
12 3
13 );
14
15 const responseMinimal: GetPendingWebhookEventCountResponse1 = await getPendingWebhookEventCount(tenantId);
16
17 console.log(responseAll, responseMinimal);
18})();
19

取得待處理的 Webhook 事件 Internal Link

參數

名稱類型必填說明
tenantIdstringYes
commentIdstringNo
externalIdstringNo
eventTypestringNo
typestringNo
domainstringNo
attemptCountGTnumberNo
skipnumberNo

回應

返回: GetPendingWebhookEventsResponse1

範例

getPendingWebhookEvents 範例
Copy Copy
1
2async function fetchPendingEvents(): Promise<void> {
3 const tenantId: string = "123e4567-e89b-12d3-a456-426614174000";
4 const commentId: string = "cmt-987654321";
5 const externalId: string = "ext-abc-123";
6 const eventType: string = "comment_created";
7 const type: string = "outbound";
8 const domain: string = "myblog.com";
9 const attemptCountGT: number = 3;
10 const skip: number = 0;
11
12 const pending: GetPendingWebhookEventsResponse1 = await getPendingWebhookEvents(
13 tenantId,
14 commentId,
15 externalId,
16 eventType,
17 type,
18 domain,
19 attemptCountGT,
20 skip
21 );
22
23 console.log(pending);
24}
25
26fetchPendingEvents();
27

建立問卷設定 Internal Link

參數

名稱類型必填說明
tenantIdstringYes
createQuestionConfigBodyCreateQuestionConfigBodyYes

回應

回傳: CreateQuestionConfigResponse1

範例

createQuestionConfig 範例
Copy Copy
1
2const tenantId: string = "tenant_12345";
3
4const customOption: QuestionConfigCustomOptionsInner = {
5 label: "Option A",
6 value: "a",
7};
8
9const createQuestionConfigBody: CreateQuestionConfigBody = {
10 questionText: "What is your favorite color?",
11 isActive: true,
12 // 可選欄位可省略
13 customOptions: [customOption],
14};
15
16const response: CreateQuestionConfigResponse1 = await createQuestionConfig(
17 tenantId,
18 createQuestionConfigBody
19);
20

刪除問卷設定 Internal Link

參數

名稱類型必填說明
tenantIdstringYes
idstringYes

回應

返回:DeleteQuestionConfigResponse

範例

deleteQuestionConfig 範例
Copy Copy
1
2async function runDeletion(): Promise<void> {
3 const tenantId: string = "tenant_8f5a2c9d";
4 const configId: string = "questionConfig_4b7e1f";
5 const deleteResult: DeleteQuestionConfigResponse = await deleteQuestionConfig(tenantId, configId);
6 console.log(deleteResult);
7}
8void runDeletion();
9

取得問卷設定 Internal Link

參數

名稱類型必填描述
tenantIdstring
idstring

回應

返回: GetQuestionConfigResponse1

範例

getQuestionConfig 範例
Copy Copy
1
2const tenantId: string = "acme-corp-tenant-42";
3const questionId: string = "question-7f9b3e";
4
5const response: GetQuestionConfigResponse1 = await getQuestionConfig(tenantId, questionId);
6

取得多個問卷設定 Internal Link

Parameters

NameTypeRequiredDescription
tenantIdstring
skipnumber

Response

Returns: GetQuestionConfigsResponse1

Example

getQuestionConfigs 示例
Copy Copy
1
2async function fetchQuestionConfigs() {
3 const tenantId: string = "tenant-9876";
4
5 // 呼叫(不含可選的 'skip' 參數)
6 const configsWithoutSkip: GetQuestionConfigsResponse1 = await getQuestionConfigs(tenantId);
7
8 // 呼叫(含可選的 'skip' 參數)
9 const skip: number = 10;
10 const configsWithSkip: GetQuestionConfigsResponse1 = await getQuestionConfigs(tenantId, skip);
11
12 console.log(configsWithoutSkip, configsWithSkip);
13}
14

更新問卷設定 Internal Link

參數

名稱類型必填說明
tenantIdstringYes
idstringYes
updateQuestionConfigBodyUpdateQuestionConfigBodyYes

回應

返回:UpdateQuestionConfigResponse

範例

updateQuestionConfig 範例
Copy Copy
1
2const tenantId: string = "acme-corp-tenant";
3const questionId: string = "qstn-2023-04";
4
5const updateBody: UpdateQuestionConfigBody = {
6 // 示範可選欄位
7 customOptions: [
8 {
9 id: "opt-001",
10 label: "Extra Details",
11 required: true,
12 },
13 ],
14 renderingType: "markdown",
15};
16
17const response: UpdateQuestionConfigResponse = await updateQuestionConfig(
18 tenantId,
19 questionId,
20 updateBody
21);
22

建立問卷結果 Internal Link

參數

NameTypeRequiredDescription
tenantIdstringYes
createQuestionResultBodyCreateQuestionResultBodyYes

回應

Returns: CreateQuestionResultResponse1

範例

createQuestionResult 範例
Copy Copy
1
2const tenantId: string = "acme-corp-tenant";
3
4const metaItem: MetaItem = {
5 key: "campaign",
6 value: "spring-launch"
7};
8
9const questionResultBody: CreateQuestionResultBody = {
10 questionId: "question-42",
11 answer: "Positive",
12 metadata: [metaItem]
13 // optional fields such as notes are omitted
14};
15
16const result: CreateQuestionResultResponse1 = await createQuestionResult(tenantId, questionResultBody);
17

刪除問卷結果 Internal Link

參數

名稱類型必填描述
tenantIdstringYes
idstringYes

回應

Returns: DeleteQuestionResultResponse

範例

deleteQuestionResult 範例
Copy Copy
1
2async function runDeletion(): Promise<void> {
3 const tenantId: string = "tenant-001";
4 const resultId: string = "c9f2a5b3-7e6d-4c9a-8b1f-2d3e4f5a6b7c";
5 const result: DeleteQuestionResultResponse = await deleteQuestionResult(tenantId, resultId);
6 console.log(result);
7}
8
9runDeletion();
10

取得問卷結果 Internal Link

參數

NameTypeRequired說明
tenantIdstringYes
idstringYes

回應

返回:GetQuestionResultResponse1

範例

getQuestionResult 範例
Copy Copy
1
2async function fetchQuestionResult(): Promise<void> {
3 const tenantId: string = "acme-corp-001";
4 const questionId: string = "question-7a9b8c";
5 const result: GetQuestionResultResponse1 = await getQuestionResult(tenantId, questionId);
6
7 const question: QuestionResult | undefined = result.questionResult;
8 const firstMeta: MetaItem | undefined = result.meta?.[0];
9
10 console.log(question?.id, firstMeta?.key);
11}
12

取得多筆問卷結果 Internal Link

參數

NameTypeRequiredDescription
tenantIdstringYes
urlIdstringNo
userIdstringNo
startDatestringNo
questionIdstringNo
questionIdsstringNo
skipnumberNo

回應

Returns: GetQuestionResultsResponse1

範例

getQuestionResults 範例
Copy Copy
1
2(async () => {
3 const tenantId: string = "acme-corp-123";
4 const urlId: string = "post-456";
5 const userId: string = "user-789";
6 const startDate: string = "2023-09-01T00:00:00Z";
7 const questionId: string = "q-101";
8 const questionIds: string = "q-102,q-103";
9 const skip: number = 20;
10
11 const results: GetQuestionResultsResponse1 = await getQuestionResults(
12 tenantId,
13 urlId,
14 userId,
15 startDate,
16 questionId,
17 questionIds,
18 skip
19 );
20
21 console.log(results);
22})();
23

更新問卷結果 Internal Link

參數

名稱類型必填描述
tenantIdstringYes
idstringYes
updateQuestionResultBodyUpdateQuestionResultBodyYes

回應

返回:UpdateQuestionResultResponse

範例

updateQuestionResult 範例
Copy Copy
1
2async function runUpdate() {
3 const tenantId: string = "acme-corp-01";
4 const id: string = "qr-20230915-001";
5
6 const updateQuestionResultBody: UpdateQuestionResultBody = {
7 // 必填字段
8 answer: "No",
9 // 可選字段
10 comment: "User clarified their response",
11 // anotherOptionalField?: value,
12 };
13
14 const result: UpdateQuestionResultResponse = await updateQuestionResult(
15 tenantId,
16 id,
17 updateQuestionResultBody
18 );
19
20 console.log(result);
21}
22
23runUpdate();
24

彙總問卷結果 Internal Link

參數

名稱類型必填說明
tenantIdstringYes
questionIdstringNo
questionIdsArrayNo
urlIdstringNo
timeBucketAggregateTimeBucketNo
startDateDateNo
forceRecalculatebooleanNo

回應

回傳: AggregateQuestionResultsResponse1

範例

aggregateQuestionResults 範例
Copy Copy
1
2(async () => {
3 const tenantId: string = "acme-corp-123";
4 const questionId: string = "feedback-rating";
5 const questionIds: string[] = ["feedback-rating", "recommendation"];
6 const urlId: string = "https://myblog.com/articles/42";
7 const timeBucket: AggregateTimeBucket = "month";
8 const startDate: Date = new Date("2023-01-01T00:00:00Z");
9 const forceRecalculate: boolean = true;
10
11 const result: AggregateQuestionResultsResponse1 = await aggregateQuestionResults(
12 tenantId,
13 questionId,
14 questionIds,
15 urlId,
16 timeBucket,
17 startDate,
18 forceRecalculate
19 );
20
21 console.log(result);
22})();
23

批次彙總問卷結果 Internal Link

參數

名稱類型必填說明
tenantIdstring
bulkAggregateQuestionResultsRequestBulkAggregateQuestionResultsRequest
forceRecalculateboolean

回應

返回:BulkAggregateQuestionResultsResponse1

範例

bulkAggregateQuestionResults 範例
Copy Copy
1
2const tenantId: string = "acme-corp";
3
4const request: BulkAggregateQuestionResultsRequest = {
5 questionIds: ["product-satisfaction", "feature-usage"],
6 startDate: "2024-01-01T00:00:00Z",
7 endDate: "2024-01-31T23:59:59Z",
8 timeBucket: "day"
9};
10
11const result: BulkAggregateQuestionResultsResponse1 = await bulkAggregateQuestionResults(
12 tenantId,
13 request,
14 true
15);
16

結合留言與問卷結果 Internal Link

參數

NameTypeRequiredDescription
tenantIdstringYes
questionIdstringNo
questionIdsArrayNo
urlIdstringNo
startDateDateNo
forceRecalculatebooleanNo
minValuenumberNo
maxValuenumberNo
limitnumberNo

回應

回傳: CombineCommentsWithQuestionResultsResponse

範例

combineCommentsWithQuestionResults 範例
Copy Copy
1
2const tenantId: string = "tenant_12345";
3const questionIds: string[] = ["question_1", "question_2"];
4const urlId: string = "article-9876";
5const startDate: Date = new Date("2023-01-01T00:00:00Z");
6const forceRecalculate: boolean = false;
7const minValue: number = 1;
8const maxValue: number = 5;
9const limit: number = 50;
10
11const result: CombineCommentsWithQuestionResultsResponse = await combineCommentsWithQuestionResults(
12 tenantId,
13 undefined,
14 questionIds,
15 urlId,
16 startDate,
17 forceRecalculate,
18 minValue,
19 maxValue,
20 limit
21);
22

新增 SSO 使用者 Internal Link

參數

名稱類型必填說明
tenantIdstring
createAPISSOUserDataCreateAPISSOUserData

回應

返回:AddSSOUserAPIResponse

範例

addSSOUser 範例
Copy Copy
1
2const tenantId: string = "tenant_12345";
3
4const newUser: CreateAPISSOUserData = {
5 userId: "sso_user_987",
6 name: "Jane Doe",
7 email: "jane.doe@example.com",
8 // 可選欄位
9 avatarUrl: "https://example.com/avatars/jane.jpg",
10};
11
12const result: AddSSOUserAPIResponse = await addSSOUser(tenantId, newUser);
13

刪除 SSO 使用者 Internal Link

參數

名稱類型必填說明
tenantIdstringYes
idstringYes
deleteCommentsbooleanNo
commentDeleteModestringNo

回應

返回:DeleteSSOUserAPIResponse

範例

deleteSSOUser 範例
Copy Copy
1
2const tenantId: string = "acme-corp-tenant";
3const userId: string = "sso-user-42";
4const deleteComments: boolean = true;
5const commentDeleteMode: string = "hard";
6
7const detailedResult: DeleteSSOUserAPIResponse = await deleteSSOUser(
8 tenantId,
9 userId,
10 deleteComments,
11 commentDeleteMode
12);
13
14const simpleResult: DeleteSSOUserAPIResponse = await deleteSSOUser(
15 tenantId,
16 userId
17);
18

以電子郵件取得 SSO 使用者 Internal Link

參數

名稱類型必填描述
tenantIdstringYes
emailstringYes

回應

返回:GetSSOUserByEmailAPIResponse

範例

getSSOUserByEmail 範例
Copy Copy
1
2async function fetchSSOUser() {
3 const tenantId: string = "tenant_12345";
4 const email: string = "john.doe@example.com";
5
6 const result: GetSSOUserByEmailAPIResponse = await getSSOUserByEmail(tenantId, email);
7 const user: APISSOUser | undefined = result?.user;
8}
9

以 ID 取得 SSO 使用者 Internal Link

參數

NameTypeRequiredDescription
tenantIdstringYes
idstringYes

回應

返回:GetSSOUserByIdAPIResponse

範例

getSSOUserById 範例
Copy Copy
1
2async function fetchUser() {
3 const tenantId: string = "tenant-987654321";
4 const userId: string = "sso-user-abc123";
5 const result: GetSSOUserByIdAPIResponse = await getSSOUserById(tenantId, userId);
6 const ssoUser: APISSOUser = result.user;
7}
8

取得 SSO 使用者清單 Internal Link

參數

名稱類型必填說明
tenantIdstring
skipnumber

回應

返回:GetSSOUsersResponse

範例

getSSOUsers 範例
Copy Copy
1
2async function runExample(): Promise<void> {
3 const tenantId: string = "tenant_12345";
4
5 // 呼叫時未提供可選的 `skip`
6 const firstPage: GetSSOUsersResponse = await getSSOUsers(tenantId);
7
8 // 呼叫時使用可選的 `skip`
9 const secondPage: GetSSOUsersResponse = await getSSOUsers(tenantId, 100);
10
11 console.log(firstPage, secondPage);
12}
13
14runExample();
15

部分更新 SSO 使用者 Internal Link

參數

名稱類型必填說明
tenantIdstringYes
idstringYes
updateAPISSOUserDataUpdateAPISSOUserDataYes
updateCommentsbooleanNo

回應

返回:PatchSSOUserAPIResponse

範例

patchSSOUser 範例
Copy Copy
1
2const tenantId: string = "c1f2a3b4-5678-90ab-cdef-1234567890ab";
3const userId: string = "user-987654321";
4const updateData: UpdateAPISSOUserData = {
5 email: "jane.smith@enterprise.com",
6 displayName: "Jane Smith",
7 role: "editor"
8};
9
10const responseWithComments: PatchSSOUserAPIResponse = await patchSSOUser(
11 tenantId,
12 userId,
13 updateData,
14 true
15);
16
17const responseWithoutComments: PatchSSOUserAPIResponse = await patchSSOUser(
18 tenantId,
19 userId,
20 updateData
21);
22

覆蓋更新 SSO 使用者 Internal Link

參數

名稱類型必填說明
tenantIdstring
idstring
updateAPISSOUserDataUpdateAPISSOUserData
updateCommentsboolean

回應

返回:PutSSOUserAPIResponse

範例

putSSOUser 範例
Copy Copy
1
2(async () => {
3 const tenantId: string = "tenant_abc123";
4 const userId: string = "user_456def";
5
6 const updateData: UpdateAPISSOUserData = {
7 email: "jane.doe@example.com",
8 displayName: "Jane Doe",
9 isActive: true,
10 };
11
12 const response: PutSSOUserAPIResponse = await putSSOUser(tenantId, userId, updateData, true);
13})();
14

建立訂閱 Internal Link

參數

名稱類型必填說明
tenantIdstringYes
createAPIUserSubscriptionDataCreateAPIUserSubscriptionDataYes

回應

Returns: CreateSubscriptionAPIResponse

範例

createSubscription 範例
Copy Copy
1
2(async () => {
3 const tenantId: string = "acme-corp-123";
4
5 const subscriptionData: CreateAPIUserSubscriptionData = {
6 userId: "user-456",
7 planId: "premium-monthly",
8 startDate: new Date(),
9 trialPeriodDays: 14 // 可選欄位
10 };
11
12 const result: CreateSubscriptionAPIResponse = await createSubscription(tenantId, subscriptionData);
13 console.log(result);
14})();
15

刪除訂閱 Internal Link

Parameters

名稱類型必填說明
tenantIdstring
idstring
userIdstring

Response

返回:DeleteSubscriptionAPIResponse

範例

deleteSubscription 範例
Copy Copy
1
2(async () => {
3 const tenantId: string = "tenant_9876";
4 const subscriptionId: string = "sub_54321";
5 const userId: string = "user_abc123";
6
7 // 使用可選的 userId
8 const responseWithUser: DeleteSubscriptionAPIResponse = await deleteSubscription(tenantId, subscriptionId, userId);
9
10 // 不使用可選的 userId
11 const responseWithoutUser: DeleteSubscriptionAPIResponse = await deleteSubscription(tenantId, subscriptionId);
12})();
13

取得訂閱 Internal Link

參數

名稱類型必填描述
tenantIdstringYes
userIdstringNo

回應

返回:GetSubscriptionsAPIResponse

範例

getSubscriptions 範例
Copy Copy
1
2(async () => {
3 const tenantId: string = "acme-corp-123";
4 const userId: string = "user-789";
5
6 const responseWithUser: GetSubscriptionsAPIResponse = await getSubscriptions(tenantId, userId);
7 const responseWithoutUser: GetSubscriptionsAPIResponse = await getSubscriptions(tenantId);
8})();
9

更新訂閱 Internal Link

參數

NameTypeRequiredDescription
tenantIdstring
idstring
updateAPIUserSubscriptionDataUpdateAPIUserSubscriptionData
userIdstring

回應

返回: UpdateSubscriptionAPIResponse

範例

updateSubscription 範例
Copy Copy
1
2const tenantId: string = "tenant_12345";
3const subscriptionId: string = "sub_98765";
4
5const updateData: UpdateAPIUserSubscriptionData = {
6 planId: "premium_plan",
7 status: "active",
8 renewalDate: "2024-12-31",
9};
10
11const userId: string = "user_abcde";
12
13const response: UpdateSubscriptionAPIResponse = await updateSubscription(
14 tenantId,
15 subscriptionId,
16 updateData,
17 userId
18);
19

取得租戶每日使用量 Internal Link

參數

名稱類型必填描述
tenantIdstringYes
yearNumbernumberNo
monthNumbernumberNo
dayNumbernumberNo
skipnumberNo

回應

返回:GetTenantDailyUsagesResponse1

範例

getTenantDailyUsages 示例
Copy Copy
1
2async function fetchDailyUsage() {
3 const tenantId: string = "tenant-9876";
4 const yearNumber: number = 2024;
5 const monthNumber: number = 5; // 五月
6 const dayNumber: number = 12;
7 const skip: number = 0;
8
9 const fullResult: GetTenantDailyUsagesResponse1 = await getTenantDailyUsages(
10 tenantId,
11 yearNumber,
12 monthNumber,
13 dayNumber,
14 skip
15 );
16
17 // 只使用必填參數和一個可選參數
18 const partialResult: GetTenantDailyUsagesResponse1 = await getTenantDailyUsages(
19 tenantId,
20 yearNumber
21 );
22
23 console.log(fullResult, partialResult);
24}
25
26fetchDailyUsage();
27

建立租戶方案 Internal Link

Parameters

NameTypeRequiredDescription
tenantIdstring
createTenantPackageBodyCreateTenantPackageBody

Response

Returns: CreateTenantPackageResponse1

Example

createTenantPackage 範例
Copy Copy
1
2(async () => {
3 const tenantId: string = "tenant-9876";
4
5 const body: CreateTenantPackageBody = {
6 packageName: "Standard",
7 quota: 5000,
8 // 可選欄位
9 description: "Standard package for medium traffic",
10 };
11
12 const result: CreateTenantPackageResponse1 = await createTenantPackage(tenantId, body);
13 console.log(result);
14})();
15

刪除租戶方案 Internal Link

參數

名稱類型必填說明
tenantIdstring
idstring

回應

返回:DeleteTenantPackageResponse

示例

deleteTenantPackage 示例
Copy Copy
1
2async function removeTenantPackage(): Promise<void> {
3 const tenantId: string = "tenant_12345";
4 const packageId: string = "pkg_67890";
5
6 const result: DeleteTenantPackageResponse = await deleteTenantPackage(tenantId, packageId);
7 // 按需使用結果
8}
9
10removeTenantPackage();
11

取得租戶方案 Internal Link

參數

名稱類型必填描述
tenantIdstring
idstring

回應

Returns: GetTenantPackageResponse1

範例

getTenantPackage 範例
Copy Copy
1
2async function fetchTenantPackage(): Promise<void> {
3 const tenantId: string = "acme-tenant-2024";
4 const packageId: string = "premium-package-01";
5 const response: GetTenantPackageResponse1 = await getTenantPackage(tenantId, packageId);
6
7 // 回應中的可選欄位
8 const tenantPackage: TenantPackage | undefined = response.tenantPackage;
9 const customConfig: CustomConfigParameters | undefined = response.customConfigParameters;
10}
11

取得租戶方案清單 Internal Link


參數

NameTypeRequiredDescription
tenantIdstringYes
skipnumberNo

回應

Returns: GetTenantPackagesResponse1

範例

getTenantPackages 範例
Copy Copy
1
2(async () => {
3 const tenantId: string = 'tenant_67890';
4 const skip: number = 30;
5
6 const packagesWithSkip: GetTenantPackagesResponse1 = await getTenantPackages(tenantId, skip);
7 const packagesWithoutSkip: GetTenantPackagesResponse1 = await getTenantPackages(tenantId);
8
9 console.log(packagesWithSkip, packagesWithoutSkip);
10})();
11

替換租戶方案 Internal Link

參數

名稱類型必填描述
tenantIdstringYes
idstringYes
replaceTenantPackageBodyReplaceTenantPackageBodyYes

回應

返回:ReplaceTenantPackageResponse

範例

replaceTenantPackage 範例
Copy Copy
1
2(async () => {
3 const tenantId: string = "acme-corp-tenant-01";
4 const packageId: string = "pkg-2024-annual";
5
6 const config: CustomConfigParameters = {
7 // custom configuration fields here
8 };
9
10 const body: ReplaceTenantPackageBody = {
11 name: "Enterprise Package",
12 // optional custom configuration
13 customConfig: config,
14 };
15
16 const response: ReplaceTenantPackageResponse = await replaceTenantPackage(tenantId, packageId, body);
17 console.log(response);
18})();
19

更新租戶方案 Internal Link

參數

名稱類型必填說明
tenantIdstringYes
idstringYes
updateTenantPackageBodyUpdateTenantPackageBodyYes

回應

回傳: UpdateTenantPackageResponse

範例

updateTenantPackage 範例
Copy Copy
1
2const tenantId: string = "tenant-9876";
3const packageId: string = "pkg-2023";
4
5const customConfig: CustomConfigParameters = {
6 enableSpamFilter: true,
7 spamRatingThreshold: 4,
8};
9
10const updateBody: UpdateTenantPackageBody = {
11 displayName: "Enterprise Pro",
12 customConfig,
13};
14
15const response: UpdateTenantPackageResponse = await updateTenantPackage(
16 tenantId,
17 packageId,
18 updateBody
19);
20

建立租戶使用者 Internal Link

參數

名稱類型必填描述
tenantIdstring
createTenantUserBodyCreateTenantUserBody

回應

返回: CreateTenantUserResponse1

範例

createTenantUser 範例
Copy Copy
1
2const tenantId: string = "a1b2c3d4-5678-90ab-cdef-1234567890ab";
3
4const newUser: CreateTenantUserBody = {
5 email: "jane.doe@example.com",
6 firstName: "Jane",
7 lastName: "Doe",
8 role: "admin",
9 // 可選參數
10 phoneNumber: "+15551234567",
11 isActive: true,
12};
13
14const result: CreateTenantUserResponse1 = await createTenantUser(tenantId, newUser);
15

刪除租戶使用者 Internal Link

參數

名稱類型必填說明
tenantIdstringYes
idstringYes
deleteCommentsstringNo
commentDeleteModestringNo

回應

返回:DeleteTenantUserResponse

範例

deleteTenantUser 範例
Copy Copy
1
2async function demoDeleteTenantUser() {
3 const tenantId: string = "acme-corp-tenant";
4 const userId: string = "user-9876";
5
6 // 刪除使用者及其所有評論,使用硬刪除模式
7 const resultWithOptions: DeleteTenantUserResponse = await deleteTenantUser(
8 tenantId,
9 userId,
10 "true",
11 "hard"
12 );
13
14 // 刪除使用者但不移除評論(預設行為)
15 const resultBasic: DeleteTenantUserResponse = await deleteTenantUser(tenantId, userId);
16}
17

取得租戶使用者 Internal Link

參數

NameTypeRequiredDescription
tenantIdstringYes
idstringYes

回應

返回:GetTenantUserResponse1

範例

getTenantUser 範例
Copy Copy
1
2async function fetchUser(): Promise<void> {
3 const tenantId: string = "tenant-01a2b3c";
4 const userId: string = "user-7890";
5 const result: GetTenantUserResponse1 = await getTenantUser(tenantId, userId);
6 console.log(result);
7}
8

取得租戶使用者清單 Internal Link


參數

名稱類型必要描述
tenantIdstring
skipnumber

回應

返回:GetTenantUsersResponse1

範例

getTenantUsers 範例
Copy Copy
1
2(async () => {
3 const tenantId: string = "tenant_9f7a2c";
4 const skip: number = 25;
5
6 const usersPage: GetTenantUsersResponse1 = await getTenantUsers(tenantId, skip);
7 const allUsers: GetTenantUsersResponse1 = await getTenantUsers(tenantId);
8})();
9

替換租戶使用者 Internal Link

參數

名稱類型必填說明
tenantIdstringYes
idstringYes
replaceTenantUserBodyReplaceTenantUserBodyYes
updateCommentsstringNo

回應

回傳:ReplaceTenantUserResponse

範例

replaceTenantUser 範例
Copy Copy
1
2async function updateUser() {
3 const tenantId: string = "c3d1f2e4-5b6a-4c7d-9f2e-1234567890ab";
4 const userId: string = "u-654321";
5 const replaceBody: ReplaceTenantUserBody = {
6 email: "newuser@example.com",
7 username: "newusername"
8 };
9 const response: ReplaceTenantUserResponse = await replaceTenantUser(
10 tenantId,
11 userId,
12 replaceBody,
13 "true"
14 );
15 console.log(response);
16}
17updateUser();
18

參數

名稱類型必要描述
tenantIdstring
idstring
redirectURLstring

回應

回傳:SendLoginLinkResponse

範例

sendLoginLink 範例
Copy Copy
1
2async function demoSendLoginLink() {
3 const tenantId: string = "acme-corp";
4 const userId: string = "user-9876";
5 const redirectURL: string = "https://app.acme-corp.com/auth/callback";
6
7 const resultWithRedirect: SendLoginLinkResponse = await sendLoginLink(tenantId, userId, redirectURL);
8 const resultWithoutRedirect: SendLoginLinkResponse = await sendLoginLink(tenantId, userId);
9}
10

更新租戶使用者 Internal Link

參數

名稱類型必填說明
tenantIdstring
idstring
updateTenantUserBodyUpdateTenantUserBody
updateCommentsstring

回應

返回: UpdateTenantUserResponse

範例

updateTenantUser 範例
Copy Copy
1
2let tenantId: string = "5f8f8c1a2e9b3c001c2a9b2d";
3let userId: string = "user_98765";
4
5let updateBody: UpdateTenantUserBody = {
6 email: "jane.smith@example.com",
7 role: "moderator",
8 isActive: false,
9};
10
11let updateComments: string = "Deactivated user due to policy violation.";
12
13let result: UpdateTenantUserResponse = await updateTenantUser(tenantId, userId, updateBody, updateComments);
14

建立租戶 Internal Link

參數

名稱類型必填說明
tenantIdstring
createTenantBodyCreateTenantBody

回應

返回: CreateTenantResponse1

範例

createTenant 範例
Copy Copy
1
2async function example() {
3 const tenantId: string = 'tenant-2024-01';
4 const createTenantBody: CreateTenantBody = {
5 // 必填欄位
6 name: 'Acme International',
7 // 可根據需要新增選用欄位,例如:
8 // billingInfo: { address: '123 Main St', city: 'Metropolis' } as BillingInfo,
9 };
10 const response: CreateTenantResponse1 = await createTenant(tenantId, createTenantBody);
11 console.log(response);
12}
13

刪除租戶 Internal Link

參數

NameTypeRequiredDescription
tenantIdstringYes
idstringYes
surestringNo

回應

Returns: DeleteTenantResponse

範例

deleteTenant 範例
Copy Copy
1
2async function runExample() {
3 const tenantId: string = "tenant_12345";
4 const id: string = "resource_98765";
5 const sure: string = "confirm";
6
7 // 呼叫時包含可選的 'sure' 參數
8 const responseWithSure: DeleteTenantResponse = await deleteTenant(tenantId, id, sure);
9 console.log(responseWithSure);
10
11 // 呼叫時不包含可選的 'sure' 參數
12 const responseWithoutSure: DeleteTenantResponse = await deleteTenant(tenantId, id);
13 console.log(responseWithoutSure);
14}
15
16runExample();
17

取得租戶 Internal Link

參數

NameTypeRequiredDescription
tenantIdstringYes
idstringYes

回應

回傳: GetTenantResponse1

範例

getTenant 範例
Copy Copy
1
2async function fetchTenant(): Promise<void> {
3 const tenantId: string = "tenant_12345";
4 const id: string = "user_9876";
5 const tenantInfo: GetTenantResponse1 = await getTenant(tenantId, id);
6 console.log(tenantInfo);
7}
8
9fetchTenant();
10

取得租戶清單 Internal Link

參數

名稱類型必填說明
tenantIdstring
metastring
skipnumber

回應

回傳: GetTenantsResponse1

範例

getTenants 示例
Copy Copy
1
2(async () => {
3 const tenantId: string = "tenant-9f8e7d6c";
4 const resultOnlyId: GetTenantsResponse1 = await getTenants(tenantId);
5 const resultWithMeta: GetTenantsResponse1 = await getTenants(tenantId, "full");
6 const resultAllParams: GetTenantsResponse1 = await getTenants(tenantId, "full", 15);
7 console.log(resultOnlyId, resultWithMeta, resultAllParams);
8})();
9

更新租戶 Internal Link

參數

名稱類型必填說明
tenantIdstring
idstring
updateTenantBodyUpdateTenantBody

回應

回傳:UpdateTenantResponse

範例

updateTenant 範例
Copy Copy
1
2const tenantId: string = "c8f9e3d2-4b6a-11ee-8c99-0242ac130003";
3const id: string = "tenant-config-01";
4
5const updateBody: UpdateTenantBody = {
6 domain: "mytenant.fastcomments.io",
7 branding: {
8 logoUrl: "https://cdn.mytenant.com/assets/logo.png"
9 },
10 description: "Branding update for Q3"
11};
12
13const response: UpdateTenantResponse = await updateTenant(tenantId, id, updateBody);
14console.log(response);
15

更改工單狀態 Internal Link

參數

NameTypeRequiredDescription
tenantIdstringYes
userIdstringYes
idstringYes
changeTicketStateBodyChangeTicketStateBodyYes

回應

返回: ChangeTicketStateResponse1

範例

changeTicketState 範例
Copy Copy
1
2const tenantId: string = "acme-corp";
3const userId: string = "user-97123";
4const ticketId: string = "ticket-45001";
5
6const changeTicketStateBody: ChangeTicketStateBody = {
7 state: "closed",
8 // 本文的可選欄位
9 comment: "Issue resolved after code fix"
10};
11
12const response: ChangeTicketStateResponse1 = await changeTicketState(
13 tenantId,
14 userId,
15 ticketId,
16 changeTicketStateBody
17);
18

建立工單 Internal Link

參數

名稱類型必填說明
tenantIdstringYes
userIdstringYes
createTicketBodyCreateTicketBodyYes

回應

返回:CreateTicketResponse1

範例

createTicket 範例
Copy Copy
1
2const tenantId: string = "tenant_12345";
3const userId: string = "user_98765";
4
5const ticketBody: CreateTicketBody = {
6 subject: "Issue with payment processing"
7 // description?: string 是可選的,已省略
8};
9
10const response: CreateTicketResponse1 = await createTicket(tenantId, userId, ticketBody);
11// 範例:使用回應中的可選字段
12// console.log(response.ticket?.id);
13

取得工單 Internal Link

參數

名稱類型必填說明
tenantIdstring
idstring
userIdstring

回應

返回:GetTicketResponse1

範例

getTicket 範例
Copy Copy
1
2const tenantId: string = "acme-inc";
3const ticketId: string = "ticket-3421";
4const userId: string = "alice.smith";
5
6const ticketWithUser: GetTicketResponse1 = await getTicket(tenantId, ticketId, userId);
7const ticketWithoutUser: GetTicketResponse1 = await getTicket(tenantId, ticketId);
8

取得多筆工單 Internal Link


參數

名稱類型必填說明
tenantIdstringYes
userIdstringNo
statenumberNo
skipnumberNo
limitnumberNo

回應

返回:GetTicketsResponse1

範例

getTickets 範例
Copy Copy
1
2async function loadTickets() {
3 const tenantId: string = "acme-corp";
4 const userId: string = "john.doe";
5 const state: number = 2; // 例如,已關閉
6 const skip: number = 10;
7 const limit: number = 5;
8
9 const ticketsFull: GetTicketsResponse1 = await getTickets(tenantId, userId, state, skip, limit);
10 const ticketsPartial: GetTicketsResponse1 = await getTickets(tenantId);
11}
12
13loadTickets();
14

取得翻譯 Internal Link

參數

名稱類型必填描述
namespacestring
componentstring
localestring
useFullTranslationIdsboolean

回應

Returns: GetTranslationsResponse1

範例

getTranslations 範例
Copy Copy
1
2(async () => {
3 const namespace: string = 'blog';
4 const component: string = 'comment-editor';
5 const locale: string = 'fr-FR';
6 const useFullTranslationIds: boolean = true;
7
8 const basicTranslations: GetTranslationsResponse1 = await getTranslations(namespace, component);
9 const fullTranslations: GetTranslationsResponse1 = await getTranslations(namespace, component, locale, useFullTranslationIds);
10})();
11

上傳圖片 Internal Link

上傳並調整圖像大小

參數

名稱類型必填描述
tenantIdstringYes
fileBlobYes
sizePresetSizePresetNo
urlIdstringNo

回應

返回:UploadImageResponse

範例

uploadImage 範例
Copy Copy
1
2const tenantId: string = "acme-tenant-01";
3const imageBlob: Blob = new Blob([new Uint8Array([137,80,78,71])], { type: "image/png" });
4
5const uploadResult1: UploadImageResponse = await uploadImage(tenantId, imageBlob);
6
7const sizePreset: SizePreset = { presetName: "medium" };
8const urlId: string = "article-9876";
9
10const uploadResult2: UploadImageResponse = await uploadImage(tenantId, imageBlob, sizePreset, urlId);
11

以 ID 取得使用者徽章進度 Internal Link


參數

名稱類型必填說明
tenantIdstring
idstring

回應

回傳: GetUserBadgeProgressByIdResponse

範例

getUserBadgeProgressById 範例
Copy Copy
1
2async function demo(): Promise<void> {
3 const tenantId: string = "acme-corp";
4 const userId: string = "user-42";
5 const result: GetUserBadgeProgressByIdResponse = await getUserBadgeProgressById(tenantId, userId);
6 const progress: UserBadgeProgress | undefined = result.progress;
7 const earnedAt: Date | undefined = progress?.earnedAt;
8 console.log(`Badge earned at: ${earnedAt?.toISOString() ?? "not earned yet"}`);
9}
10demo();
11

以使用者 ID 取得使用者徽章進度 Internal Link

參數

名稱類型必填描述
tenantIdstringYes
userIdstringYes

回應

返回: GetUserBadgeProgressByUserIdResponse

範例

getUserBadgeProgressByUserId 範例
Copy Copy
1
2(async () => {
3 const tenantId: string = "acme-corp";
4 const userId: string = "user-12345";
5
6 const badgeProgress: GetUserBadgeProgressByUserIdResponse = await getUserBadgeProgressByUserId(tenantId, userId);
7 console.log(badgeProgress);
8})();
9

取得使用者徽章進度清單 Internal Link

參數

名稱類型必填描述
tenantIdstringYes
userIdstringNo
limitnumberNo
skipnumberNo

回應

回傳:GetUserBadgeProgressListResponse

範例

getUserBadgeProgressList 範例
Copy Copy
1
2async function fetchBadgeProgress() {
3 const tenantId: string = "acme-corp";
4 const userId: string = "john.doe@example.com";
5 const limit: number = 10;
6 const skip: number = 5;
7
8 const fullList: GetUserBadgeProgressListResponse = await getUserBadgeProgressList(
9 tenantId,
10 userId,
11 limit,
12 skip
13 );
14
15 const simpleList: GetUserBadgeProgressListResponse = await getUserBadgeProgressList(tenantId);
16}
17
18fetchBadgeProgress();
19

建立使用者徽章 Internal Link

參數

名稱類型必填說明
tenantIdstring
createUserBadgeParamsCreateUserBadgeParams

回應

返回:CreateUserBadgeResponse

範例

createUserBadge 範例
Copy Copy
1
2const tenantId: string = "company-42";
3
4const badgeParams: CreateUserBadgeParams = {
5 name: "Community Champion",
6 iconUrl: "https://assets.example.com/badges/champion.png",
7 // description 是可選的,這裡省略
8};
9
10const result: CreateUserBadgeResponse = await createUserBadge(tenantId, badgeParams);
11

刪除使用者徽章 Internal Link

參數

名稱類型必填說明
tenantIdstring
idstring

回應

返回:DeleteUserBadgeResponse

範例

deleteUserBadge 範例
Copy Copy
1
2async function exampleDeleteBadge(): Promise<void> {
3 const tenantId: string = "tenant_9f8b7c6a";
4 const badgeId: string = "badge_4e3d2c1b";
5 const result: DeleteUserBadgeResponse = await deleteUserBadge(tenantId, badgeId);
6 console.log(result);
7}
8exampleDeleteBadge();
9

取得使用者徽章 Internal Link

參數

NameTypeRequiredDescription
tenantIdstringYes
idstringYes

回應

返回:GetUserBadgeResponse

範例

getUserBadge 範例
Copy Copy
1
2async function runExample(): Promise<void> {
3 const tenantId: string = "acme-corp-tenant-001";
4 const badgeId: string = "badge-5f9d3a2b";
5
6 const badgeResponse: GetUserBadgeResponse = await getUserBadge(tenantId, badgeId);
7
8 // 安全地存取可選欄位
9 const badgeName: string | undefined = badgeResponse.userBadge?.name;
10 console.log(`Badge ID: ${badgeId}, Name: ${badgeName ?? "Unnamed"}`);
11}
12
13runExample();
14

取得使用者徽章清單 Internal Link

參數

NameTypeRequiredDescription
tenantIdstringYes
userIdstringNo
badgeIdstringNo
typenumberNo
displayedOnCommentsbooleanNo
limitnumberNo
skipnumberNo

回應

回傳: GetUserBadgesResponse

範例

getUserBadges 範例
Copy Copy
1
2async function example() {
3 const tenantId: string = "tenant-01";
4 const userId: string = "user-42";
5 const badgeId: string = "badge-gold";
6 const type: number = 1;
7 const displayedOnComments: boolean = true;
8 const limit: number = 10;
9 const skip: number = 5;
10
11 const fullResult: GetUserBadgesResponse = await getUserBadges(
12 tenantId,
13 userId,
14 badgeId,
15 type,
16 displayedOnComments,
17 limit,
18 skip
19 );
20
21 const minimalResult: GetUserBadgesResponse = await getUserBadges(tenantId);
22}
23example();
24

更新使用者徽章 Internal Link

參數

NameTypeRequiredDescription
tenantIdstringYes
idstringYes
updateUserBadgeParamsUpdateUserBadgeParamsYes

回應

返回:UpdateUserBadgeResponse

範例

updateUserBadge 範例
Copy Copy
1
2async function applyBadge() {
3 const tenantId: string = "acme-corp-tenant";
4 const userId: string = "user-98765";
5
6 const params: UpdateUserBadgeParams = {
7 badgeId: "gold-contributor",
8 // 可選欄位範例
9 expiresAt: new Date(Date.now() + 30 * 24 * 60 * 60 * 1000).toISOString(),
10 };
11
12 const result: UpdateUserBadgeResponse = await updateUserBadge(tenantId, userId, params);
13 console.log(result);
14}
15
16applyBadge();
17

取得使用者通知數量 Internal Link

參數

名稱類型必填描述
tenantIdstringYes
ssostringNo

回應

返回:GetUserNotificationCountResponse1

範例

getUserNotificationCount 範例
Copy Copy
1
2async function demoGetUserNotificationCount() {
3 const tenantId: string = "acme-corp-01";
4
5 // Call with optional SSO token
6 const countWithSSO: GetUserNotificationCountResponse1 = await getUserNotificationCount(
7 tenantId,
8 "sso-token-abc123"
9 );
10
11 // Call without SSO token
12 const countWithoutSSO: GetUserNotificationCountResponse1 = await getUserNotificationCount(
13 tenantId
14 );
15
16 console.log(countWithSSO, countWithoutSSO);
17}
18

取得使用者通知 Internal Link

參數

名稱類型必要說明
tenantIdstring
urlIdstring
pageSizenumber
afterIdstring
includeContextboolean
afterCreatedAtnumber
unreadOnlyboolean
dmOnlyboolean
noDmboolean
includeTranslationsboolean
includeTenantNotificationsboolean
ssostring

回應

返回:GetUserNotificationsResponse

範例

getUserNotifications 範例
Copy Copy
1
2async function fetchUserNotifications() {
3 const tenantId: string = "tenant_9f4b2c";
4 const urlId: string = "post_1234";
5 const pageSize: number = 25;
6 const afterId: string = "notif_5678";
7 const includeContext: boolean = true;
8 const unreadOnly: boolean = false;
9 const dmOnly: boolean = false;
10 const includeTranslations: boolean = true;
11
12 const notifications: GetUserNotificationsResponse = await getUserNotifications(
13 tenantId,
14 urlId,
15 pageSize,
16 afterId,
17 includeContext,
18 undefined,
19 unreadOnly,
20 dmOnly,
21 undefined,
22 includeTranslations,
23 undefined,
24 undefined
25 );
26
27 console.log(notifications);
28}
29

重設使用者通知數量 Internal Link

參數

NameTypeRequiredDescription
tenantIdstring
ssostring

回應

Returns: ResetUserNotificationCountResponse

範例

resetUserNotificationCount 範例
Copy Copy
1
2async function demoResetCount() {
3 const tenantId: string = "acme-corp-tenant";
4 const sso: string = "sso-user-9876";
5
6 // 呼叫並帶有可選的 sso 參數
7 const resultWithSso: ResetUserNotificationCountResponse = await resetUserNotificationCount(tenantId, sso);
8
9 // 呼叫而不帶可選的 sso 參數
10 const resultWithoutSso: ResetUserNotificationCountResponse = await resetUserNotificationCount(tenantId);
11
12 console.log(resultWithSso, resultWithoutSso);
13}
14

重設使用者通知 Internal Link

參數

名稱類型必填說明
tenantIdstringYes
afterIdstringNo
afterCreatedAtnumberNo
unreadOnlybooleanNo
dmOnlybooleanNo
noDmbooleanNo
ssostringNo

回應

回傳: ResetUserNotificationsResponse1

範例

resetUserNotifications 範例
Copy Copy
1
2(async () => {
3 const tenantId: string = "tenant-001";
4 const afterId: string = "notif-123";
5 const afterCreatedAt: number = 1697049600; // example UNIX timestamp
6 const unreadOnly: boolean = true;
7 const dmOnly: boolean = false;
8 const noDm: boolean = false;
9 const sso: string = "sso-token-xyz";
10
11 const result: ResetUserNotificationsResponse1 = await resetUserNotifications(
12 tenantId,
13 afterId,
14 afterCreatedAt,
15 unreadOnly,
16 dmOnly,
17 noDm,
18 sso
19 );
20
21 console.log(result);
22})();
23

更新使用者留言通知訂閱狀態 Internal Link

Enable or disable notifications for a specific comment.

參數

名稱類型必填說明
tenantIdstring
notificationIdstring
optedInOrOutUpdateUserNotificationCommentSubscriptionStatusOptedInOrOutEnum
commentIdstring
ssostring

回應

返回:UpdateUserNotificationCommentSubscriptionStatusResponse

範例

updateUserNotificationCommentSubscriptionStatus 範例
Copy Copy
1
2const tenantId: string = "tenant_12345";
3const notificationId: string = "notif_9876";
4const commentId: string = "comment_abc123";
5const optedInOrOut: UpdateUserNotificationCommentSubscriptionStatusOptedInOrOutEnum =
6 UpdateUserNotificationCommentSubscriptionStatusOptedInOrOutEnum.OptIn;
7const sso: string = "ssoTokenXYZ";
8
9const responseWithSso: UpdateUserNotificationCommentSubscriptionStatusResponse =
10 await updateUserNotificationCommentSubscriptionStatus(
11 tenantId,
12 notificationId,
13 optedInOrOut,
14 commentId,
15 sso
16 );
17
18const responseWithoutSso: UpdateUserNotificationCommentSubscriptionStatusResponse =
19 await updateUserNotificationCommentSubscriptionStatus(
20 tenantId,
21 notificationId,
22 optedInOrOut,
23 commentId
24 );
25

更新使用者頁面通知訂閱狀態 Internal Link

Enable or disable notifications for a page. When users are subscribed to a page, notifications are created for new root comments, and also

參數

名稱類型必填說明
tenantIdstringYes
urlIdstringYes
urlstringYes
pageTitlestringYes
subscribedOrUnsubscribedUpdateUserNotificationPageSubscriptionStatusSubscribedOrUnsubscribedEnumYes
ssostringNo

回應

Returns: UpdateUserNotificationPageSubscriptionStatusResponse

範例

updateUserNotificationPageSubscriptionStatus 範例
Copy Copy
1
2(async () => {
3 const tenantId: string = "tenant-2024";
4 const urlId: string = "page-5678";
5 const url: string = "https://example.com/articles/typescript-tips";
6 const pageTitle: string = "Top TypeScript Tips";
7 const subscribedOrUnsubscribed: UpdateUserNotificationPageSubscriptionStatusSubscribedOrUnsubscribedEnum =
8 UpdateUserNotificationPageSubscriptionStatusSubscribedOrUnsubscribedEnum.Subscribed;
9 const sso: string = "sso-token-xyz";
10
11 const resultWithSso: UpdateUserNotificationPageSubscriptionStatusResponse = await updateUserNotificationPageSubscriptionStatus(
12 tenantId,
13 urlId,
14 url,
15 pageTitle,
16 subscribedOrUnsubscribed,
17 sso
18 );
19
20 const resultWithoutSso: UpdateUserNotificationPageSubscriptionStatusResponse = await updateUserNotificationPageSubscriptionStatus(
21 tenantId,
22 urlId,
23 url,
24 pageTitle,
25 subscribedOrUnsubscribed
26 );
27})();
28

更新使用者通知狀態 Internal Link

參數

NameTypeRequiredDescription
tenantIdstringYes
notificationIdstringYes
newStatusUpdateUserNotificationStatusNewStatusEnumYes
ssostringNo

回應

回傳:UpdateUserNotificationStatusResponse

範例

updateUserNotificationStatus 範例
Copy Copy
1
2const tenantId: string = "acme-corp";
3const notificationId: string = "notif-20231101-001";
4const newStatus: UpdateUserNotificationStatusNewStatusEnum = UpdateUserNotificationStatusNewStatusEnum.Dismissed;
5const ssoToken: string = "sso-9f8e7d6c5b4a";
6
7const result: UpdateUserNotificationStatusResponse = await updateUserNotificationStatus(
8 tenantId,
9 notificationId,
10 newStatus,
11 ssoToken
12);
13

取得使用者在線狀態 Internal Link

參數

名稱類型必填描述
tenantIdstringYes
urlIdWSstringYes
userIdsstringYes

回應

返回:GetUserPresenceStatusesResponse1

範例

getUserPresenceStatuses 範例
Copy Copy
1
2async function fetchUserPresences() {
3 const tenantId: string = "tenant_9f8e2d";
4 const urlIdWS: string = "blog.mycompany.com/thread/12345";
5 const userIds: string = "alice,bob,carol";
6
7 const result: GetUserPresenceStatusesResponse1 = await getUserPresenceStatuses(
8 tenantId,
9 urlIdWS,
10 userIds
11 );
12
13 console.log(result);
14}
15

搜尋使用者 Internal Link

參數

名稱類型必填說明
tenantIdstringYes
urlIdstringYes
usernameStartsWithstringNo
mentionGroupIdsArrayNo
ssostringNo
searchSectionSearchUsersSearchSectionEnumNo

回應

返回:SearchUsersResponse1

範例

searchUsers 示例
Copy Copy
1
2async function demoSearch(): Promise<void> {
3 const tenantId: string = "tenant_12345";
4 const urlId: string = "article-9876";
5 const usernameStartsWith: string = "john";
6 const mentionGroupIds: string[] = ["groupA", "groupB"];
7 const sso: string = "sso_abc123";
8 const searchSection: SearchUsersSearchSectionEnum = SearchUsersSearchSectionEnum.Users;
9
10 const response: SearchUsersResponse1 = await searchUsers(
11 tenantId,
12 urlId,
13 usernameStartsWith,
14 mentionGroupIds,
15 sso,
16 searchSection
17 );
18
19 console.log(response);
20}
21
22demoSearch();
23

取得使用者 Internal Link

參數

名稱類型必填說明
tenantIdstring
idstring

回應

返回:GetUserResponse1

範例

getUser 範例
Copy Copy
1
2(async () => {
3 const tenantId: string = "tenant_12345";
4 const userId: string = "user_98765";
5 const result: GetUserResponse1 = await getUser(tenantId, userId);
6})();
7

建立投票 Internal Link

參數

名稱類型必填說明
tenantIdstring
commentIdstring
directionCreateVoteDirectionEnum
userIdstring
anonUserIdstring

回應

返回:CreateVoteResponse

範例

createVote 範例
Copy Copy
1
2const tenantId: string = "tenant_12345";
3const commentId: string = "comment_987654";
4const direction: CreateVoteDirectionEnum = CreateVoteDirectionEnum.Upvote;
5const userId: string = "user_7f9a2b";
6
7const voteResult: CreateVoteResponse = await createVote(
8 tenantId,
9 commentId,
10 direction,
11 userId
12);
13

刪除投票 Internal Link

參數

名稱類型必填說明
tenantIdstringYes
idstringYes
editKeystringNo

回應

返回:DeleteVoteResponse

範例

deleteVote 範例
Copy Copy
1
2(async () => {
3 const tenantId: string = "acme-corp";
4 const commentId: string = "comment-9876";
5 const editKey: string = "edit-key-123";
6
7 const resultWithEdit: DeleteVoteResponse = await deleteVote(tenantId, commentId, editKey);
8 const resultWithoutEdit: DeleteVoteResponse = await deleteVote(tenantId, commentId);
9})();
10

取得投票 Internal Link

參數

名稱類型必填說明
tenantIdstring
urlIdstring

回應

返回: GetVotesResponse1

範例

getVotes 範例
Copy Copy
1
2async function fetchVotes(): Promise<void> {
3 const tenantId: string = "acme-corp-01";
4 const urlId: string = "article-2024-05-15";
5
6 const response: GetVotesResponse1 = await getVotes(tenantId, urlId);
7
8 // 範例說明如何存取回應中的可選欄位
9 const firstVoteId: string | undefined = response?.votes?.[0]?.id;
10}
11

取得使用者的投票 Internal Link

參數

名稱類型必填描述
tenantIdstring
urlIdstring
userIdstring
anonUserIdstring

回應

返回:GetVotesForUserResponse1

範例

getVotesForUser 範例
Copy Copy
1
2async function demo() {
3 const tenantId: string = "acme-corp";
4 const urlId: string = "post-9f8b7c";
5 const userId: string = "user-42";
6 const anonUserId: string = "anon-123";
7
8 const votesRequiredOnly: GetVotesForUserResponse1 = await getVotesForUser(tenantId, urlId);
9 const votesWithUserId: GetVotesForUserResponse1 = await getVotesForUser(tenantId, urlId, userId);
10 const votesWithAnonId: GetVotesForUserResponse1 = await getVotesForUser(tenantId, urlId, undefined, anonUserId);
11}
12demo();
13

需要幫助嗎?

如果您在使用 JavaScript/TypeScript SDK 時遇到任何問題或有任何疑問,請:

貢獻

歡迎貢獻!請造訪 GitHub 儲存庫 以取得貢獻指南。