FastComments.com

FastComments JavaScript/TypeScript SDK


這是 FastComments 的官方 JavaScript/TypeScript SDK。

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

儲存庫

在 GitHub 上查看


AI 程式碼代理 Internal Link

skills.sh

為您的程式編寫代理提供 FastComments 所需的上下文——小工具、設定、Secure SSO、REST API 與 SDK:

npx skills add fastcomments/skills

可與 Claude Code、Codex、Cursor、Copilot、Gemini 以及所有其他由 skills CLI 支援的代理一起使用。

安裝 Internal Link

npm

npm install fastcomments-sdk

API 文件說明 Internal Link


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

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


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

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

公開與受保護的 API Internal Link

該 SDK 提供以下 API 類別:

  • DefaultApi - 需要您的 API 金鑰用於驗證的受保護端點。用於伺服器端作業。
  • PublicApi - 可在未提供 API 金鑰下存取的公開端點。可直接從瀏覽器/行動裝置/等呼叫。
  • 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);
  }
}

createAgentTenant Internal Link

Creates a new trial account for an AI agent without a human signup. No API key is needed to call this.

為 AI 代理建立一個新的試用帳戶,無需人工註冊。呼叫此功能不需要 API 金鑰。

The response contains the tenant id, an API key that works immediately against the REST API and the MCP server, and a claim URL. Give the claim URL to the human you are working for: opening it while logged in to FastComments attaches the account to them. Unclaimed accounts, and their keys, are deleted 72 hours after creation. Until claimed, the account has the standard trial limits.

回應中包含租戶 ID、可立即用於 REST API 與 MCP 伺服器的 API 金鑰,以及領取 URL。將領取 URL 提供給您所協助的人員:在登入 FastComments 後開啟該 URL,即可將帳戶與其關聯。未領取的帳戶及其金鑰會在建立後 72 小時內被刪除。未領取前,帳戶仍具備標準的試用限制。

Parameters

NameTypeRequiredDescription
createAgentTenantBodyCreateAgentTenantBodyYes

Response

Returns: CreateAgentTenantResponse

Example

createAgentTenant 範例
Copy Copy
1
2const tenantBody: CreateAgentTenantBody = {
3 name: "Acme Corp",
4 domain: "acme.example.com",
5 contactEmail: "admin@acme.example.com", // optional
6 planId: 3 // optional
7};
8
9const result: CreateAgentTenantResponse = await createAgentTenant(tenantBody);
10

aggregate 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

getAuditLogs Internal Link

參數

名稱類型必填說明
tenantIdstring是
limitnumber否
skipnumber否
orderSORTDIR否
afternumber否
beforenumber否
usernamestring否
ipstring否
crudTypestring否
resourceNamestring否
targetIdstring否
targetstring否
includeManagedTenantsboolean否

回應

返回:GetAuditLogsResponse

範例

getAuditLogs 範例
Copy Copy
1
2async function fetchAuditLogs(): Promise<void> {
3 const tenantId: string = "tenant_12345";
4 const limit: number = 50;
5 const skip: number = 0;
6 const order: SORTDIR = { direction: "DESC" };
7 const after: number = Date.now() - 86400000; // 1 天前
8 const before: number = Date.now();
9 const username: string = "alice.smith";
10 const ip: string = "198.51.100.23";
11 const crudType: string = "CREATE";
12 const resourceName: string = "thread";
13 const targetId: string = "thread_45678";
14 const target: string = "forum_12";
15 const includeManagedTenants: boolean = false;
16
17 const logs: GetAuditLogsResponse = await getAuditLogs(
18 tenantId,
19 limit,
20 skip,
21 order,
22 after,
23 before,
24 username,
25 ip,
26 crudType,
27 resourceName,
28 targetId,
29 target,
30 includeManagedTenants
31 );
32
33 console.log(logs);
34}
35
36fetchAuditLogs();
37

blockFromCommentPublic Internal Link

參數

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

回應

返回:BlockSuccess

範例

blockFromCommentPublic 範例
Copy Copy
1
2async function demoBlock() {
3 const tenantId: string = "tenant_9f8b7c";
4 const commentId: string = "comment_3e2d1a";
5 const blockParams: PublicBlockFromCommentParams = {
6 reason: "harassment",
7 expiresInHours: 48
8 };
9 const ssoToken: string = "sso_5g6h7i";
10
11 const resultWithSso: BlockSuccess = await blockFromCommentPublic(tenantId, commentId, blockParams, ssoToken);
12 const resultWithoutSso: BlockSuccess = await blockFromCommentPublic(tenantId, commentId, blockParams);
13}
14

unBlockCommentPublic Internal Link

參數

名稱類型必填說明
tenantIdstringYes
commentIdstringYes
publicBlockFromCommentParamsPublicBlockFromCommentParamsYes
ssostringNo

回應

回傳:UnblockSuccess

範例

unBlockCommentPublic 範例
Copy Copy
1
2const tenantId: string = "c9f1e2a4-5b6d-4f8a-9c2e-123456789abc";
3const commentId: string = "d3b2c1a9-8f7e-4d6b-9a0b-987654321def";
4
5const unblockParams: PublicBlockFromCommentParams = {
6 reason: "User request resolved",
7 moderatorId: "mod-456"
8};
9
10const ssoToken: string = "sso-token-789xyz";
11
12const unblockResult: UnblockSuccess = await unBlockCommentPublic(tenantId, commentId, unblockParams, ssoToken);
13const unblockResultNoSso: UnblockSuccess = await unBlockCommentPublic(tenantId, commentId, unblockParams);
14

checkedCommentsForBlocked Internal Link

參數

名稱類型必填說明
tenantIdstringYes
commentIdsstringYes
ssostringNo

回應

返回: CheckBlockedCommentsResponse

範例

checkedCommentsForBlocked 範例
Copy Copy
1
2(async () => {
3 const tenantId: string = "tenant_12345";
4 const commentIds: string = "cmt_9876,cmt_5432";
5 const ssoToken: string = "sso_user_abc123";
6
7 const responseWithSso: CheckBlockedCommentsResponse = await checkedCommentsForBlocked(tenantId, commentIds, ssoToken);
8 const responseWithoutSso: CheckBlockedCommentsResponse = await checkedCommentsForBlocked(tenantId, commentIds);
9})();
10

blockUserFromComment Internal Link

參數

NameTypeRequiredDescription
tenantIdstring是
idstring是
blockFromCommentParamsBlockFromCommentParams是
userIdstring否
anonUserIdstring否

回應

返回: BlockSuccess

範例

blockUserFromComment 範例
Copy Copy
1
2async function demo() {
3 const tenantId: string = "tenant-123e4567-e89b-12d3-a456-426614174000";
4 const commentId: string = "cmt-9876543210";
5 const blockParams: BlockFromCommentParams = {
6 reason: "spam",
7 durationHours: 24
8 };
9 const userId: string = "user-abc123";
10 const anonUserId: string = "anon-xyz789";
11 const result: BlockSuccess = await blockUserFromComment(tenantId, commentId, blockParams, userId, anonUserId);
12 console.log(result);
13}
14demo();
15

createCommentPublic Internal Link

參數

名稱類型必填說明
tenantIdstringYes
urlIdstringYes
broadcastIdstringYes
commentDataCommentDataYes
sessionIdstringNo
ssostringNo

回應

Returns: SaveCommentsResponseWithPresence

範例

createCommentPublic 範例
Copy Copy
1
2async function runExample() {
3 const tenantId: string = "tenant-456";
4 const urlId: string = "url-789";
5 const broadcastId: string = "broadcast-101112";
6 const commentData: CommentData = { text: "This is a comment", userId: "user-123" };
7 const sessionId: string = "session-131415";
8 const sso: string = "sso-token-xyz";
9 const result: SaveCommentsResponseWithPresence = await createCommentPublic(tenantId, urlId, broadcastId, commentData, sessionId, sso);
10 const resultNoOpt: SaveCommentsResponseWithPresence = await createCommentPublic(tenantId, urlId, broadcastId, commentData);
11}
12

deleteComment Internal Link

參數

NameTypeRequiredDescription
tenantIdstringYes
idstringYes
contextUserIdstringNo
isLivebooleanNo

回應

Returns: DeleteCommentResult

範例

deleteComment 範例
Copy Copy
1
2async function removeComment(): Promise<void> {
3 const tenantId: string = "tenant_12345";
4 const commentId: string = "comment_9876";
5 const contextUserId: string = "user_42";
6 const result: DeleteCommentResult = await deleteComment(tenantId, commentId, contextUserId, true);
7 console.log(result);
8}
9removeComment();
10

deleteCommentPublic Internal Link

參數

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

回應

返回: PublicAPIDeleteCommentResponse

範例

deleteCommentPublic 範例
Copy Copy
1
2(async () => {
3 const tenantId: string = "tenant_12345";
4 const commentId: string = "cmt_9876";
5 const broadcastId: string = "brd_5555";
6 const editKey: string = "edit_abc123";
7 const sso: string = "sso_token_xyz";
8
9 const resultWithoutOptional: PublicAPIDeleteCommentResponse = await deleteCommentPublic(tenantId, commentId, broadcastId);
10 const resultWithOptional: PublicAPIDeleteCommentResponse = await deleteCommentPublic(tenantId, commentId, broadcastId, editKey, sso);
11})();
12

deleteCommentVote Internal Link

參數

NameTypeRequiredDescription
tenantIdstringYes
commentIdstringYes
voteIdstringYes
urlIdstringYes
broadcastIdstringYes
editKeystringNo
ssostringNo

回應

Returns: VoteDeleteResponse

範例

deleteCommentVote 範例
Copy Copy
1
2const tenantId: string = "tenant_12345";
3const commentId: string = "cmt_9876";
4const voteId: string = "vote_555";
5const urlId: string = "url_abcde";
6const broadcastId: string = "brd_2023";
7const editKey: string = "edit_abc123"; // 可選
8const ssoToken: string = "sso_token_xyz"; // 可選
9
10// 僅使用必要參數與一個可選參數 呼叫
11const deleteResult: VoteDeleteResponse = await deleteCommentVote(
12 tenantId,
13 commentId,
14 voteId,
15 urlId,
16 broadcastId,
17 editKey
18);
19
20// 同時使用兩個可選參數 呼叫
21const deleteResultWithSSO: VoteDeleteResponse = await deleteCommentVote(
22 tenantId,
23 commentId,
24 voteId,
25 urlId,
26 broadcastId,
27 editKey,
28 ssoToken
29);
30

flagComment Internal Link

參數

名稱類型必填說明
tenantIdstring是
idstring是
userIdstring否
anonUserIdstring否

回應

返回:FlagCommentResponse

範例

flagComment 範例
Copy Copy
1
2(async () => {
3 const tenantId: string = "acme-corp";
4 const commentId: string = "comment-20230915-001";
5 const userId: string = "user-42";
6 const anonUserId: string = "anon-abc123";
7
8 const response: FlagCommentResponse = await flagComment(tenantId, commentId, userId, anonUserId);
9 console.log(response);
10})();
11

getComment Internal Link

參數

名稱類型必填說明
tenantIdstring是
idstring是

回應

返回:APIGetCommentResponse

範例

取得評論 範例
Copy Copy
1
2async function fetchComment(): Promise<void> {
3 const tenantId: string = "acme-corp";
4 const commentId: string = "cmt_1234567890";
5
6 const response: APIGetCommentResponse = await getComment(tenantId, commentId);
7 const comment: APIComment | undefined = response.comment;
8
9 // 可選欄位示範
10 const badgeInfo: CommentUserBadgeInfo | undefined = comment?.user?.badge;
11 const hashtags: CommentUserHashTagInfo[] | undefined = comment?.user?.hashtags;
12 const mentions: CommentUserMentionInfo[] | undefined = comment?.user?.mentions;
13 const meta: APICommentBaseMeta | undefined = comment?.meta;
14
15 console.log(comment?.id, badgeInfo?.type);
16}
17
18fetchComment();
19

getComments Internal Link

參數

名稱類型必填說明
tenantIdstring是
pagenumber否
limitnumber否
skipnumber否
asTreeboolean否
skipChildrennumber否
limitChildrennumber否
maxTreeDepthnumber否
urlIdstring否
userIdstring否
anonUserIdstring否
contextUserIdstring否
hashTagstring否
parentIdstring否
directionSortDirections否
fromDatenumber否
toDatenumber否

回應

返回:APIGetCommentsResponse

範例

getComments 範例
Copy Copy
1
2async function loadComments(): Promise<void> {
3 const tenantId: string = "acme-corp";
4 const page: number = 1;
5 const limit: number = 50;
6 const asTree: boolean = false;
7 const direction: SortDirections = "asc";
8 const fromDate: number = Date.now() - 30 * 24 * 60 * 60 * 1000; // 30 天前
9 const toDate: number = Date.now();
10
11 const commentsResponse: APIGetCommentsResponse = await getComments(
12 tenantId,
13 page,
14 limit,
15 undefined,
16 asTree,
17 undefined,
18 undefined,
19 undefined,
20 undefined,
21 undefined,
22 undefined,
23 undefined,
24 undefined,
25 undefined,
26 direction,
27 fromDate,
28 toDate
29 );
30
31 console.log(commentsResponse);
32}
33

getCommentsPublic Internal Link

req tenantId urlId

參數

NameTypeRequiredDescription
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

回應

返回:GetCommentsResponseWithPresencePublicComment

範例

getCommentsPublic 範例
Copy Copy
1
2async function loadComments(): Promise<void> {
3 const tenantId: string = "tenant-42",
4 urlId: string = "post-2023-09-15",
5 page: number = 1,
6 direction: SortDirections = "desc",
7 limit: number = 30,
8 includeConfig: boolean = true,
9 locale: string = "en-US",
10 isCrawler: boolean = false,
11 asTree: boolean = true,
12 maxTreeDepth: number = 2,
13 searchText: string = "fastcomments",
14 hashTags: string[] = ["fastcomments","typescript"],
15 userId: string = "user-123";
16
17 const result: GetCommentsResponseWithPresencePublicComment = 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 undefined,
34 isCrawler,
35 undefined,
36 asTree,
37 maxTreeDepth,
38 undefined,
39 undefined,
40 searchText,
41 hashTags,
42 userId
43 );
44}
45

getCommentText Internal Link

參數

NameTypeRequiredDescription
tenantIdstringYes
commentIdstringYes
editKeystringNo
ssostringNo

回應

返回:PublicAPIGetCommentTextResponse

範例

getCommentText 範例
Copy Copy
1
2const tenantId: string = "acme-corp-tenant";
3const commentId: string = "comment-987654321";
4const editKey: string = "edit-key-abc123";
5const sso: string = "sso-token-xyz789";
6
7const commentWithEdit: PublicAPIGetCommentTextResponse = await getCommentText(
8 tenantId,
9 commentId,
10 editKey,
11 sso
12);
13
14const commentBasic: PublicAPIGetCommentTextResponse = await getCommentText(
15 tenantId,
16 commentId
17);
18

getCommentVoteUserNames Internal Link

參數

名稱類型必填說明
tenantIdstring是
commentIdstring是
dirnumber是
ssostring否

回應

返回: GetCommentVoteUserNamesSuccessResponse

範例

getCommentVoteUserNames 範例
Copy Copy
1
2async function example() {
3 const tenantId: string = 'tenant-9876';
4 const commentId: string = 'comment-abc123';
5 const dir: number = 1;
6 const ssoToken: string = 'sso-xyz789';
7
8 const resultWithSso: GetCommentVoteUserNamesSuccessResponse = await getCommentVoteUserNames(tenantId, commentId, dir, ssoToken);
9 const resultWithoutSso: GetCommentVoteUserNamesSuccessResponse = await getCommentVoteUserNames(tenantId, commentId, dir);
10}
11

lockComment Internal Link

Parameters

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

Response

返回:APIEmptyResponse

範例

lockComment 範例
Copy Copy
1
2async function demoLockComment() {
3 const tenantId: string = "tenant_12345";
4 const commentId: string = "cmt_9876";
5 const broadcastId: string = "brd_5555";
6 const ssoToken: string = "sso_user_abc";
7
8 const resultWithSso: APIEmptyResponse = await lockComment(tenantId, commentId, broadcastId, ssoToken);
9 const resultWithoutSso: APIEmptyResponse = await lockComment(tenantId, commentId, broadcastId);
10}
11
12demoLockComment();
13

pinComment Internal Link

參數

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

回應

返回:ChangeCommentPinStatusResponse

範例

pinComment 範例
Copy Copy
1
2async function demoPinComment() {
3 const tenantId: string = "tenant_12345";
4 const commentId: string = "cmt_98765";
5 const broadcastId: string = "brd_54321";
6
7 const resultWithoutSso: ChangeCommentPinStatusResponse = await pinComment(tenantId, commentId, broadcastId);
8 const ssoToken: string = "sso_abcde12345";
9 const resultWithSso: ChangeCommentPinStatusResponse = await pinComment(tenantId, commentId, broadcastId, ssoToken);
10}
11
12demoPinComment();
13

saveComment Internal Link

參數

NameTypeRequiredDescription
tenantIdstringYes
createCommentParamsCreateCommentParamsYes
isLivebooleanNo
doSpamCheckbooleanNo
sendEmailsbooleanNo
populateNotificationsbooleanNo

回應

Returns: APISaveCommentResponse

範例

saveComment 範例
Copy Copy
1
2const tenantId: string = "tenant_12345";
3
4const commentParams: CreateCommentParams = {
5 content: "This is a comment with a mention and a hashtag.",
6 userId: "user_987",
7 mentions: [
8 { userId: "user_123", start: 27, end: 34 }
9 ] as CommentUserMentionInfo[],
10 hashtags: [
11 { tag: "feedback", start: 45, end: 53 }
12 ] as CommentUserHashTagInfo[],
13 poll: {
14 question: "Do you like this feature?",
15 options: ["Yes", "No"]
16 } as CommentPollInput,
17};
18
19const response: APISaveCommentResponse = await saveComment(
20 tenantId,
21 commentParams,
22 true, // isLive
23 true, // doSpamCheck
24 false, // sendEmails
25 true // populateNotifications
26);
27

saveCommentsBulk Internal Link

參數

名稱類型必填說明
tenantIdstring是
createCommentParamsArray是
isLiveboolean否
doSpamCheckboolean否
sendEmailsboolean否
populateNotificationsboolean否

回應

返回: Array<SaveCommentsBulkResponse

範例

saveCommentsBulk 範例
Copy Copy
1
2const tenantId: string = "tenant_12345";
3
4const mention1: CommentUserMentionInfo = {
5 userId: "user_002",
6 start: 10,
7 end: 20,
8};
9
10const hashtag1: CommentUserHashTagInfo = {
11 tag: "news",
12 start: 30,
13 end: 35,
14};
15
16const poll1: CommentPollInput = {
17 question: "Did you find this helpful?",
18 options: ["Yes", "No"],
19};
20
21const commentA: CreateCommentParams = {
22 content: "This is a great article!",
23 userId: "user_001",
24 mentions: [mention1],
25 hashtags: [hashtag1],
26 poll: poll1,
27};
28
29const commentB: CreateCommentParams = {
30 content: "I have a question about the topic.",
31 userId: "user_003",
32};
33
34const createCommentParams: CreateCommentParams[] = [commentA, commentB];
35
36const isLive: boolean = true;
37const doSpamCheck: boolean = false;
38const sendEmails: boolean = true;
39const populateNotifications: boolean = false;
40
41const results: SaveCommentsBulkResponse[] = await saveCommentsBulk(
42 tenantId,
43 createCommentParams,
44 isLive,
45 doSpamCheck,
46 sendEmails,
47 populateNotifications
48);
49

setCommentText Internal Link

參數

NameTypeRequiredDescription
tenantIdstring是
commentIdstring是
broadcastIdstring是
commentTextUpdateRequestCommentTextUpdateRequest是
editKeystring否
ssostring否

回應

返回:PublicAPISetCommentTextResponse

範例

setCommentText 範例
Copy Copy
1
2(async () => {
3 const tenantId: string = "tenant_12345";
4 const commentId: string = "cmt_98765";
5 const broadcastId: string = "brd_54321";
6 const commentTextUpdateRequest: CommentTextUpdateRequest = {
7 text: "Revised comment text with additional details."
8 };
9 const editKey: string = "edit_abc123";
10 const sso: string = "sso_token_456def";
11
12 const response: PublicAPISetCommentTextResponse = await setCommentText(
13 tenantId,
14 commentId,
15 broadcastId,
16 commentTextUpdateRequest,
17 editKey,
18 sso
19 );
20})();
21

unBlockUserFromComment Internal Link

參數

名稱類型必填說明
tenantIdstring是
idstring是
unBlockFromCommentParamsUnBlockFromCommentParams是
userIdstring否
anonUserIdstring否

回應

回傳: UnblockSuccess

範例

unBlockUserFromComment 範例
Copy Copy
1
2(async () => {
3 const tenantId: string = "tenant-9f8b7c6d";
4 const commentId: string = "comment-4a3b2c1d";
5 const params: UnBlockFromCommentParams = {
6 reason: "User appealed the block",
7 adminNote: "Reviewed and unblocked"
8 };
9 const userId: string = "user-5e6f7g8h";
10 const anonUserId: string = "anon-1a2b3c4d";
11 const result: UnblockSuccess = await unBlockUserFromComment(
12 tenantId,
13 commentId,
14 params,
15 userId,
16 anonUserId
17 );
18 console.log(result);
19})();
20

unFlagComment Internal Link

參數

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

回應

返回:FlagCommentResponse

範例

unFlagComment 範例
Copy Copy
1
2async function runExample() {
3 const tenantId: string = "acme-corp";
4 const commentId: string = "cmt-20230915-001";
5 const userId: string = "user-42";
6
7 const unflaggedByUser: FlagCommentResponse = await unFlagComment(tenantId, commentId, userId);
8 const unflaggedByAnon: FlagCommentResponse = await unFlagComment(tenantId, commentId, undefined, "anon-xyz");
9
10 console.log(unflaggedByUser, unflaggedByAnon);
11}
12

unLockComment Internal Link

參數

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

回應

返回:APIEmptyResponse

範例

unLockComment 範例
Copy Copy
1
2async function demoUnlock() {
3 const tenantId: string = "acme-corp";
4 const commentId: string = "cmt_1234567890";
5 const broadcastId: string = "brd_987654321";
6 const ssoToken: string = "sso_abcdef123456";
7
8 const resultWithoutSso: APIEmptyResponse = await unLockComment(tenantId, commentId, broadcastId);
9 const resultWithSso: APIEmptyResponse = await unLockComment(tenantId, commentId, broadcastId, ssoToken);
10}
11

unPinComment Internal Link

參數

NameTypeRequiredDescription
tenantIdstring是
commentIdstring是
broadcastIdstring是
ssostring否

回應

返回:ChangeCommentPinStatusResponse

範例

unPinComment 範例
Copy Copy
1
2(async () => {
3 const tenantId: string = "acme-corp";
4 const commentId: string = "comment-20230915-001";
5 const broadcastId: string = "broadcast-2023-09-15";
6 const ssoToken: string = "sso-abc123";
7
8 const result: ChangeCommentPinStatusResponse = await unPinComment(tenantId, commentId, broadcastId, ssoToken);
9 const resultWithoutSso: ChangeCommentPinStatusResponse = await unPinComment(tenantId, commentId, broadcastId);
10})();
11

updateComment Internal Link

參數

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

回應

返回: APIEmptyResponse

範例

updateComment 範例
Copy Copy
1
2const tenantId: string = "c1a2b3d4-5678-90ab-cdef-1234567890ab";
3const commentId: string = "comment-9876543210";
4const updateParams: UpdatableCommentParams = {
5 content: "Edited comment content",
6 isApproved: true
7};
8
9const contextUserId: string = "user-11223344";
10const doSpamCheck: boolean = true;
11const isLive: boolean = false;
12
13const response: APIEmptyResponse = await updateComment(
14 tenantId,
15 commentId,
16 updateParams,
17 contextUserId,
18 doSpamCheck,
19 isLive
20);
21

voteComment Internal Link

參數

名稱類型必填說明
tenantIdstringYes
commentIdstringYes
urlIdstringYes
broadcastIdstringYes
voteBodyParamsVoteBodyParamsYes
sessionIdstringNo
ssostringNo

回應

返回:VoteResponse

範例

voteComment 範例
Copy Copy
1
2async function runVote() {
3 const tenantId: string = 'tenant_001';
4 const commentId: string = 'cmt_987654';
5 const urlId: string = 'url_12345';
6 const broadcastId: string = 'brd_56789';
7 const voteBody: VoteBodyParams = { direction: 'up' };
8 const sessionId: string = 'sess_abc123';
9 const sso: string = 'sso_token_xyz';
10 const response: VoteResponse = await voteComment(
11 tenantId,
12 commentId,
13 urlId,
14 broadcastId,
15 voteBody,
16 sessionId,
17 sso
18 );
19 console.log(response);
20}
21runVote();
22

getCommentsForUser Internal Link

參數

NameTypeRequiredDescription
userIdstringNo
directionSortDirectionsNo
repliesToUserIdstringNo
pagenumberNo
includei10nbooleanNo
localestringNo
isCrawlerbooleanNo

回應

返回:GetCommentsForUserResponse

範例

getCommentsForUser 範例
Copy Copy
1
2const userId: string = '550e8400-e29b-41d4-a716-446655440000';
3const direction: SortDirections = SortDirections.Descending;
4const page: number = 3;
5const includei10n: boolean = true;
6const locale: string = 'fr-FR';
7const isCrawler: boolean = false;
8
9const commentsResponse: GetCommentsForUserResponse = await getCommentsForUser(
10 userId,
11 direction,
12 undefined,
13 page,
14 includei10n,
15 locale,
16 isCrawler
17);
18

addDomainConfig 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

deleteDomainConfig 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

getDomainConfig 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

getDomainConfigs 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

patchDomainConfig 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

putDomainConfig 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

createEmailTemplate Internal Link

參數

NameTypeRequiredDescription
tenantIdstringYes
createEmailTemplateBodyCreateEmailTemplateBodyYes

回應

Returns: CreateEmailTemplateResponse

範例

createEmailTemplate 範例
Copy Copy
1
2const tenantId: string = "tenant_9f8b7c6d";
3
4const templateBody: CreateEmailTemplateBody = {
5 name: "Weekly Summary",
6 subject: "Your weekly activity report",
7 // 可選欄位
8 replyTo: "no-reply@myapp.com",
9 htmlContent: "<p>Hello \{{userName}}, here is your summary...</p>"
10};
11
12const response: CreateEmailTemplateResponse = await createEmailTemplate(tenantId, templateBody);
13
14console.log(response.template.id);
15

deleteEmailTemplate Internal Link

參數

名稱類型必填說明
tenantIdstring是
idstring是

回應

返回:APIEmptyResponse

範例

deleteEmailTemplate 範例
Copy Copy
1
2interface APIStatus {
3 code: number;
4 message: string;
5}
6
7interface APIEmptyResponse {
8 status?: APIStatus;
9}
10
11(async () => {
12 const tenantId: string = "tenant_12345";
13 const templateId: string = "template_987";
14
15 const result: APIEmptyResponse = await deleteEmailTemplate(tenantId, templateId);
16})();
17

deleteEmailTemplateRenderError Internal Link

參數

名稱類型必填說明
tenantIdstringYes
idstringYes
errorIdstringYes

回應

返回:APIEmptyResponse

範例

deleteEmailTemplateRenderError 範例
Copy Copy
1
2async function removeRenderError() {
3 const tenantId: string = "acme-corp-tenant";
4 const templateId: string = "welcome-email-template";
5 const errorId: string = "render-err-20230915";
6
7 const result: APIEmptyResponse = await deleteEmailTemplateRenderError(tenantId, templateId, errorId);
8}
9

getEmailTemplate Internal Link

參數

名稱類型必填說明
tenantIdstring是
idstring是

回應

Returns: GetEmailTemplateResponse

範例

getEmailTemplate 範例
Copy Copy
1
2async function fetchTemplate() {
3 const tenantId: string = "acme-corp-123";
4 const templateId: string = "welcome-email-456";
5 const response: GetEmailTemplateResponse = await getEmailTemplate(tenantId, templateId);
6 const status: APIStatus | undefined = response.status;
7 const customTemplate: CustomEmailTemplate | undefined = response.template;
8}
9

getEmailTemplateDefinitions Internal Link

參數

NameTypeRequiredDescription
tenantIdstring是

回應

返回:GetEmailTemplateDefinitionsResponse

範例

getEmailTemplateDefinitions 範例
Copy Copy
1
2async function fetchEmailTemplates() {
3 const tenantId: string = "acme-corp-456";
4 const result: GetEmailTemplateDefinitionsResponse = await getEmailTemplateDefinitions(tenantId);
5 const status: APIStatus = result.status;
6 const definitions: EmailTemplateDefinition[] = result.definitions ?? [];
7 console.log(`Status: ${status.code}, Templates: ${definitions.length}`);
8}
9

getEmailTemplateRenderErrors Internal Link

參數

NameTypeRequiredDescription
tenantIdstring是
idstring是
skipnumber否

回應

返回:GetEmailTemplateRenderErrorsResponse

範例

getEmailTemplateRenderErrors 範例
Copy Copy
1
2async function demo() {
3 const tenantId: string = "tenant_12345";
4 const templateId: string = "template_9876";
5
6 const resultWithSkip: GetEmailTemplateRenderErrorsResponse = await getEmailTemplateRenderErrors(tenantId, templateId, 10);
7 const resultWithoutSkip: GetEmailTemplateRenderErrorsResponse = await getEmailTemplateRenderErrors(tenantId, templateId);
8
9 console.log(resultWithSkip, resultWithoutSkip);
10}
11demo();
12

getEmailTemplates Internal Link

參數

名稱類型必填說明
tenantIdstring是
skipnumber否

回應

返回:GetEmailTemplatesResponse

範例

getEmailTemplates 範例
Copy Copy
1
2async function fetchEmailTemplates() {
3 const tenantId: string = "acme-corp-123";
4 const skip: number = 20;
5 const templatesWithSkip: GetEmailTemplatesResponse = await getEmailTemplates(tenantId, skip);
6 const templatesWithoutSkip: GetEmailTemplatesResponse = await getEmailTemplates(tenantId);
7}
8

renderEmailTemplate Internal Link

參數

名稱類型必填說明
tenantIdstringYes
renderEmailTemplateBodyRenderEmailTemplateBodyYes
localestringNo

回應

返回:RenderEmailTemplateResponse

範例

renderEmailTemplate 範例
Copy Copy
1
2const tenantId: string = "c1a2b3d4-5678-90ab-cdef-1234567890ab";
3
4const templateBody: RenderEmailTemplateBody = {
5 templateId: "welcome-email",
6 variables: {
7 userName: "Jane Doe",
8 signupDate: "2024-04-01"
9 }
10};
11
12const locale: string = "en-US";
13
14(async () => {
15 const rendered: RenderEmailTemplateResponse = await renderEmailTemplate(
16 tenantId,
17 templateBody,
18 locale
19 );
20 console.log(rendered);
21})();
22

updateEmailTemplate Internal Link

參數

名稱類型必填說明
tenantIdstring是
idstring是
updateEmailTemplateBodyUpdateEmailTemplateBody是

回應

返回:APIEmptyResponse

範例

updateEmailTemplate 範例
Copy Copy
1
2async function runUpdate() {
3 const tenantId: string = "tenant_12345";
4 const templateId: string = "template_67890";
5
6 const updateBody: UpdateEmailTemplateBody = {
7 subject: "New Comment Notification",
8 // htmlContent 是可選的,已省略
9 status: { code: 200, message: "Active" } // APIStatus
10 };
11
12 const response: APIEmptyResponse = await updateEmailTemplate(tenantId, templateId, updateBody);
13 console.log(response);
14}
15

getEventLog Internal Link

req tenantId urlId userIdWS

參數

名稱類型必填說明
tenantIdstringYes
urlIdstringYes
userIdWSstringYes
startTimenumberYes
endTimenumberNo

回應

Returns: GetEventLogResponse

範例

getEventLog 範例
Copy Copy
1
2const tenantId: string = "tenant_12345";
3const urlId: string = "url_9876";
4const userIdWS: string = "user_abcde";
5const startTime: number = Date.now() - 86_400_000; // 24 小時前
6const endTime: number = Date.now();
7
8const fullLog: GetEventLogResponse = await getEventLog(tenantId, urlId, userIdWS, startTime, endTime);
9const partialLog: GetEventLogResponse = await getEventLog(tenantId, urlId, userIdWS, startTime);
10

getGlobalEventLog Internal Link

req tenantId urlId userIdWS

參數

名稱類型必填說明
tenantIdstring是
urlIdstring是
userIdWSstring是
startTimenumber是
endTimenumber否

回應

返回:GetEventLogResponse

範例

getGlobalEventLog 範例
Copy Copy
1
2async function fetchEventLogs() {
3 const tenantId: string = "tenant_12345";
4 const urlId: string = "url_9876";
5 const userIdWS: string = "user_ws_abcde";
6 const startTime: number = Date.now() - 24 * 60 * 60 * 1000; // 24 小時前
7 const endTime: number = Date.now();
8
9 const logWithEnd: GetEventLogResponse = await getGlobalEventLog(tenantId, urlId, userIdWS, startTime, endTime);
10 const logWithoutEnd: GetEventLogResponse = await getGlobalEventLog(tenantId, urlId, userIdWS, startTime);
11}
12

createFeedPost Internal Link

參數

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

回應

返回: CreateFeedPostsResponse

範例

createFeedPost 範例
Copy Copy
1
2(async () => {
3 const tenantId: string = "c1a2b3d4-5678-90ab-cdef-1234567890ab";
4 const broadcastId: string = "b1c2d3e4-5678-90ab-cdef-1234567890cd";
5 const isLive: boolean = true;
6 const doSpamCheck: boolean = false;
7 const skipDupCheck: boolean = true;
8
9 const mediaAsset: FeedPostMediaItemAsset = {
10 url: "https://cdn.example.com/photos/sunrise.jpg",
11 type: "image/jpeg"
12 };
13 const mediaItem: FeedPostMediaItem = {
14 asset: mediaAsset,
15 caption: "Sunrise over the mountains"
16 };
17 const linkItem: FeedPostLink = {
18 url: "https://blog.example.com/tech-trends-2024",
19 title: "Top Tech Trends for 2024"
20 };
21 const postParams: CreateFeedPostParams = {
22 text: "Excited to share the latest tech trends!",
23 media: [mediaItem],
24 link: linkItem
25 };
26
27 const response: CreateFeedPostsResponse = await createFeedPost(
28 tenantId,
29 postParams,
30 broadcastId,
31 isLive,
32 doSpamCheck,
33 skipDupCheck
34 );
35 console.log(response);
36})();
37

createFeedPostPublic Internal Link

參數

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

回應

返回:CreateFeedPostResponse

範例

createFeedPostPublic 範例
Copy Copy
1
2const tenantId: string = "tenant_12345";
3
4const mediaAsset: FeedPostMediaItemAsset = {
5 url: "https://cdn.example.com/image.jpg",
6 width: 800,
7 height: 600,
8 mimeType: "image/jpeg"
9};
10
11const mediaItem: FeedPostMediaItem = {
12 type: "image",
13 asset: mediaAsset,
14 caption: "Sunset over the hills"
15};
16
17const link: FeedPostLink = {
18 url: "https://example.com/blog/post",
19 title: "Exciting New Features",
20 description: "Read about our latest updates."
21};
22
23const createFeedPostParams: CreateFeedPostParams = {
24 content: "Check out our latest blog post!",
25 media: [mediaItem],
26 link: link,
27 visibility: "public"
28};
29
30const broadcastId: string = "broadcast_9876";
31const sso: string = "sso_token_abc123";
32
33const response: CreateFeedPostResponse = await createFeedPostPublic(
34 tenantId,
35 createFeedPostParams,
36 broadcastId,
37 sso
38);
39

deleteFeedPostPublic Internal Link

參數

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

回應

Returns: DeleteFeedPostPublicResponse

範例

deleteFeedPostPublic 範例
Copy Copy
1
2(async () => {
3 const tenantId: string = "tenant_12345";
4 const postId: string = "post_98765";
5 const broadcastId: string = "broadcast_abcde";
6 const sso: string = "sso_token_xyz";
7
8 const responseWithOpts: DeleteFeedPostPublicResponse = await deleteFeedPostPublic(
9 tenantId,
10 postId,
11 broadcastId,
12 sso
13 );
14
15 const responseWithoutOpts: DeleteFeedPostPublicResponse = await deleteFeedPostPublic(
16 tenantId,
17 postId
18 );
19})();
20

getFeedPosts Internal Link

req tenantId afterId

參數

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

回應

返回: GetFeedPostsResponse

範例

getFeedPosts 範例
Copy Copy
1
2async function loadFeed() {
3 const tenantId: string = '123e4567-e89b-12d3-a456-426614174000';
4 const afterId: string = 'post_987654321';
5 const limit: number = 25;
6 const tags: string[] = ['technology', 'innovation'];
7 const response: GetFeedPostsResponse = await getFeedPosts(tenantId, afterId, limit, tags);
8 console.log(response);
9}
10loadFeed();
11

getFeedPostsPublic Internal Link


請求 tenantId afterId

參數

NameTypeRequiredDescription
tenantIdstringYes
afterIdstringNo
limitnumberNo
tagsArrayNo
ssostringNo
isCrawlerbooleanNo
includeUserInfobooleanNo

回應

返回:PublicFeedPostsResponse

範例

getFeedPostsPublic 範例
Copy Copy
1
2const tenantId: string = "acme-corp-tenant";
3const afterId: string = "post-20230915-abc123";
4const limit: number = 15;
5const tags: string[] = ["technology", "innovation"];
6const sso: string = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOiIxMjM0NSJ9.s3cr3tSignature";
7const isCrawler: boolean = false;
8const includeUserInfo: boolean = true;
9
10const feedResponse: PublicFeedPostsResponse = await getFeedPostsPublic(
11 tenantId,
12 afterId,
13 limit,
14 tags,
15 sso,
16 isCrawler,
17 includeUserInfo
18);
19

getFeedPostsStats Internal Link

參數

名稱類型必填描述
tenantIdstring是
postIdsArray是
ssostring否

回應

返回:FeedPostsStatsResponse

範例

getFeedPostsStats 範例
Copy Copy
1
2const tenantId: string = "tenant-9f8b7c6d";
3const postIds: string[] = ["post-1a2b3c", "post-4d5e6f", "post-7g8h9i"];
4const ssoToken: string = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...";
5const feedStats: FeedPostsStatsResponse = await getFeedPostsStats(tenantId, postIds, ssoToken);
6

getUserReactsPublic Internal Link

參數

名稱類型必填說明
tenantIdstringYes
postIdsArrayNo
ssostringNo

回應

回傳:UserReactsResponse

範例

getUserReactsPublic 範例
Copy Copy
1
2const tenantId: string = "tenant_12345";
3const postIds: string[] = ["post_abc", "post_def"];
4const ssoToken: string = "sso_token_987";
5
6const fullResponse: UserReactsResponse = await getUserReactsPublic(tenantId, postIds, ssoToken);
7const minimalResponse: UserReactsResponse = await getUserReactsPublic(tenantId);
8

reactFeedPostPublic Internal Link

參數

名稱類型必填說明
tenantIdstringYes
postIdstringYes
reactBodyParamsReactBodyParamsYes
isUndobooleanNo
broadcastIdstringNo
ssostringNo

回應

返回: ReactFeedPostResponse

範例

reactFeedPostPublic 範例
Copy Copy
1
2async function demoReact() {
3 const tenantId: string = "tenant_12345";
4 const postId: string = "post_98765";
5 const reactBodyParams: ReactBodyParams = {
6 type: "like",
7 userId: "user_abcde"
8 };
9 const response: ReactFeedPostResponse = await reactFeedPostPublic(
10 tenantId,
11 postId,
12 reactBodyParams,
13 true,
14 "broadcast_001",
15 "sso_token_xyz"
16 );
17}
18

updateFeedPost Internal Link

參數

名稱類型必填說明
tenantIdstringYes
idstringYes
feedPostFeedPostYes

回應

返回: APIEmptyResponse

範例

updateFeedPost 範例
Copy Copy
1
2async function runUpdate() {
3 const tenantId: string = "tenant_12345";
4 const postId: string = "post_98765";
5
6 const mediaAsset: FeedPostMediaItemAsset = {
7 url: "https://cdn.example.com/image.jpg",
8 width: 800,
9 height: 600,
10 mimeType: "image/jpeg"
11 };
12
13 const mediaItem: FeedPostMediaItem = {
14 type: "image",
15 asset: mediaAsset,
16 caption: "Sunrise over the hills"
17 };
18
19 const link: FeedPostLink = {
20 url: "https://example.com/blog",
21 title: "Latest Blog Post",
22 description: "Insights on recent developments"
23 };
24
25 const feedPost: FeedPost = {
26 title: "Daily Highlights",
27 content: "Check out today’s top stories.",
28 mediaItems: [mediaItem], // 可選
29 links: [link] // 可選
30 };
31
32 const response: APIEmptyResponse = await updateFeedPost(tenantId, postId, feedPost);
33 console.log(response);
34}
35
36runUpdate();
37

updateFeedPostPublic Internal Link

參數

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

回應

返回: CreateFeedPostResponse

範例

updateFeedPostPublic 範例
Copy Copy
1
2// 定義參數
3const tenantId: string = "tenant_12345";
4const postId: string = "post_98765";
5
6const mediaAsset: FeedPostMediaItemAsset = {
7 url: "https://cdn.example.com/image.jpg",
8 width: 800,
9 height: 600,
10 mimeType: "image/jpeg"
11};
12
13const mediaItem: FeedPostMediaItem = {
14 type: "image",
15 asset: mediaAsset,
16 caption: "A beautiful scenery"
17};
18
19const link: FeedPostLink = {
20 url: "https://example.com/article",
21 title: "Interesting Article",
22 description: "An article about TypeScript best practices."
23};
24
25const updateParams: UpdateFeedPostParams = {
26 content: "Updated post content with new media and link.",
27 media: [mediaItem],
28 link: link,
29 isPublic: true
30};
31
32const broadcastId: string = "broadcast_001";
33const sso: string = "sso_token_abc123";
34
35const response: CreateFeedPostResponse = await updateFeedPostPublic(
36 tenantId,
37 postId,
38 updateParams,
39 broadcastId,
40 sso
41);
42

flagCommentPublic Internal Link


參數

NameTypeRequiredDescription
tenantIdstringYes
commentIdstringYes
isFlaggedbooleanYes
ssostringNo

回應

Returns: APIEmptyResponse

範例

flagCommentPublic 範例
Copy Copy
1
2const tenantId: string = "tenant_42";
3const commentId: string = "comment_1001";
4const isFlagged: boolean = true;
5const sso: string = "sso_user_5678";
6
7const resultWithSso: APIEmptyResponse = await flagCommentPublic(tenantId, commentId, isFlagged, sso);
8const resultWithoutSso: APIEmptyResponse = await flagCommentPublic(tenantId, commentId, false);
9

getGifLarge Internal Link

參數

名稱類型必填說明
tenantIdstring是
largeInternalURLSanitizedstring是

回應

返回:GifGetLargeResponse

範例

getGifLarge 範例
Copy Copy
1
2async function runExample() {
3 const tenantId: string = "c1a2b3d4-5678-90ab-cdef-1234567890ab";
4 const largeInternalURLSanitized: string = "https://cdn.fastcomments.com/gifs/large/abc123.gif";
5 const response: GifGetLargeResponse = await getGifLarge(tenantId, largeInternalURLSanitized);
6 console.log(response);
7}
8

getGifsSearch Internal Link

參數

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

回應

返回:GetGifsSearchResponse

範例

getGifsSearch 範例
Copy Copy
1
2async function runExample() {
3 const tenantId: string = "tenant_9876";
4 const search: string = "celebration fireworks";
5 const locale: string = "fr-FR";
6 const rating: string = "g";
7 const page: number = 1;
8
9 const fullResult: GetGifsSearchResponse = await getGifsSearch(tenantId, search, locale, rating, page);
10 const minimalResult: GetGifsSearchResponse = await getGifsSearch(tenantId, "dog memes");
11}
12
13runExample();
14

getGifsTrending 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

addHashTag Internal Link

參數

名稱類型必填說明
tenantIdstring是
createHashTagBodyCreateHashTagBody否

回應

返回: CreateHashTagResponse

範例

addHashTag 範例
Copy Copy
1
2const tenantId: string = "c3f5e8b2-9d4a-4f6a-8b2c-1a2b3c4d5e6f";
3
4const tagPayload: CreateHashTagBody = {
5 tag: "typescript",
6 description: "Discussions about TypeScript"
7};
8
9const responseWithBody: CreateHashTagResponse = await addHashTag(tenantId, tagPayload);
10const responseWithoutBody: CreateHashTagResponse = await addHashTag(tenantId);
11

addHashTagsBulk Internal Link

參數

名稱類型必填說明
tenantIdstring是
bulkCreateHashTagsBodyBulkCreateHashTagsBody否

回應

回傳: BulkCreateHashTagsResponse

範例

addHashTagsBulk 範例
Copy Copy
1
2const tenantId: string = "tenant_9f8b7c6d";
3
4const tags: BulkCreateHashTagsBodyTagsInner[] = [
5 { name: "typescript", color: "#3178c6" },
6 { name: "fastcomments", color: "#ff6600" }
7];
8
9const bulkBody: BulkCreateHashTagsBody = { tags };
10
11const resultWithBody: BulkCreateHashTagsResponse = await addHashTagsBulk(tenantId, bulkBody);
12
13const resultWithoutBody: BulkCreateHashTagsResponse = await addHashTagsBulk(tenantId);
14

deleteHashTag Internal Link

參數

名稱類型必填說明
tenantIdstring是
tagstring是
deleteHashTagRequestBodyDeleteHashTagRequestBody否

回應

返回:APIEmptyResponse

範例

deleteHashTag 範例
Copy Copy
1
2const tenantId: string = "tenant_42";
3const tag: string = "high-priority";
4
5const requestBody: DeleteHashTagRequestBody = {
6 // 根據需要填充欄位
7};
8
9const resultWithBody: APIEmptyResponse = await deleteHashTag(tenantId, tag, requestBody);
10const resultWithoutBody: APIEmptyResponse = await deleteHashTag(tenantId, tag);
11

getHashTags Internal Link

參數

名稱類型必填說明
tenantIdstring是
pagenumber否

回應

返回: GetHashTagsResponse

範例

getHashTags 範例
Copy Copy
1
2(async () => {
3 const tenantId: string = "acme-corp-123";
4 const page: number = 1;
5 const result: GetHashTagsResponse = await getHashTags(tenantId, page);
6 console.log(result);
7})();
8

patchHashTag Internal Link

參數

NameTypeRequiredDescription
tenantIdstringYes
tagstringYes
updateHashTagBodyUpdateHashTagBodyNo

回應

返回:UpdateHashTagResponse

範例

patchHashTag 範例
Copy Copy
1
2(async () => {
3 const tenantId: string = "tenant_12345";
4 const tag: string = "news";
5
6 // 呼叫時未提供可選的 body
7 const responseWithoutBody: UpdateHashTagResponse = await patchHashTag(tenantId, tag);
8
9 // 準備更新的 body
10 const updateBody: UpdateHashTagBody = {
11 name: "Latest News",
12 description: "Tag for the most recent news articles"
13 };
14
15 const responseWithBody: UpdateHashTagResponse = await patchHashTag(tenantId, tag, updateBody);
16})();
17

getMe Internal Link

識別正在使用的憑證:它所屬的租戶,以及對於 OAuth 令牌,授權該令牌的使用者。整合使用此資訊來測試連線並為其加上標籤。

參數

名稱類型必填說明
tenantIdstringYes

回應

返回:GetMeResponse

範例

getMe 範例
Copy Copy
1
2(async () => {
3 const tenantId: string = "acme-corp-tenant";
4 const me: GetMeResponse = await getMe(tenantId);
5 const authType: MeAuthType = me.auth.type;
6 const scopes: OAuthScope[] = me.auth.scopes ?? [];
7 const status: APIStatus = me.status;
8})();
9

deleteModerationVote Internal Link

參數

名稱類型必填說明
tenantIdstringYes
commentIdstringYes
voteIdstringYes
broadcastIdstringNo
ssostringNo

回應

回傳:VoteDeleteResponse

範例

deleteModerationVote 範例
Copy Copy
1
2async function runDeleteModerationVote(): Promise<void> {
3 const tenantId: string = "tenant_9f8b7c6a";
4 const commentId: string = "comment_4d3e2f1a";
5 const voteId: string = "vote_12345abcde";
6 const broadcastId: string | undefined = "broadcast_2023_09_15";
7 const sso: string | undefined = "sso_user_7890token";
8
9 const result: VoteDeleteResponse = await deleteModerationVote(
10 tenantId,
11 commentId,
12 voteId,
13 broadcastId,
14 sso
15 );
16
17 console.log(result);
18}
19

getApiComments Internal Link


參數

名稱類型必填說明
tenantIdstring是
pagenumber否
countnumber否
textSearchstring否
byIPFromCommentstring否
filtersstring否
searchFiltersstring否
sortsstring否
demoboolean否
ssostring否

回應

返回: ModerationAPIGetCommentsResponse

範例

getApiComments 範例
Copy Copy
1
2async function fetchComments(): Promise<void> {
3 const tenantId: string = "tenant_12345";
4 const page: number = 2;
5 const count: number = 20;
6 const textSearch: string = "typescript";
7 const byIPFromComment: string = "192.168.1.100";
8 const filters: string = "spam,offensive";
9 const searchFilters: string = "user:john";
10 const sorts: string = "date_desc";
11 const demo: boolean = true;
12 const sso: string = "sso_token_abc";
13
14 const response: ModerationAPIGetCommentsResponse = await getApiComments(
15 tenantId,
16 page,
17 count,
18 textSearch,
19 byIPFromComment,
20 filters,
21 searchFilters,
22 sorts,
23 demo,
24 sso
25 );
26}
27
28fetchComments();
29

getApiExportStatus Internal Link

參數

名稱類型必填說明
tenantIdstring是
batchJobIdstring否
ssostring否

回應

返回: ModerationExportStatusResponse

範例

getApiExportStatus 範例
Copy Copy
1
2async function run() {
3 const tenantId: string = "tenant_12345";
4 const batchJobId: string = "job_98765";
5 const ssoToken: string = "sso_abcde12345";
6
7 const statusOnlyTenant: ModerationExportStatusResponse = await getApiExportStatus(tenantId);
8 const statusWithBatch: ModerationExportStatusResponse = await getApiExportStatus(tenantId, batchJobId);
9 const statusFull: ModerationExportStatusResponse = await getApiExportStatus(tenantId, batchJobId, ssoToken);
10}
11run();
12

getApiIds Internal Link

參數

名稱類型必填說明
tenantIdstring是
textSearchstring否
byIPFromCommentstring否
filtersstring否
searchFiltersstring否
afterIdstring否
demoboolean否
ssostring否

回應

返回:ModerationAPIGetCommentIdsResponse

範例

getApiIds 範例
Copy Copy
1
2async function run(): Promise<void> {
3 const tenantId: string = "acme-corp";
4 const textSearch: string = "offensive language";
5 const byIPFromComment: string = "203.0.113.45";
6 const filters: string = "status:unmoderated";
7 const searchFilters: string = "author:alice";
8 const afterId: string = "cmt_00123";
9 const demo: boolean = true;
10 const sso: string = "sso_9f8e7d6c";
11
12 const fullResult: ModerationAPIGetCommentIdsResponse = await getApiIds(
13 tenantId,
14 textSearch,
15 byIPFromComment,
16 filters,
17 searchFilters,
18 afterId,
19 demo,
20 sso
21 );
22
23 const minimalResult: ModerationAPIGetCommentIdsResponse = await getApiIds(tenantId);
24}
25

getBanUsersFromComment Internal Link

參數

名稱類型必填說明
tenantIdstringYes
commentIdstringYes
ssostringNo

回應

返回:GetBannedUsersFromCommentResponse

範例

getBanUsersFromComment 範例
Copy Copy
1
2const tenantId: string = "tenant_9f8b7c";
3const commentId: string = "comment_a1b2c3";
4const ssoToken: string = "sso_abc123";
5
6const bannedUsers: GetBannedUsersFromCommentResponse = await getBanUsersFromComment(tenantId, commentId, ssoToken);
7const bannedUsersNoSso: GetBannedUsersFromCommentResponse = await getBanUsersFromComment(tenantId, commentId);
8

getCommentBanStatus Internal Link

參數

名稱類型必填說明
tenantIdstring是
commentIdstring是
ssostring否

回應

返回:GetCommentBanStatusResponse

範例

getCommentBanStatus 範例
Copy Copy
1
2(async () => {
3 const tenantId: string = "tenant_12345";
4 const commentId: string = "cmt_987654";
5 const ssoToken: string = "sso_user_abc";
6
7 const statusWithSso: GetCommentBanStatusResponse = await getCommentBanStatus(tenantId, commentId, ssoToken);
8 const statusWithoutSso: GetCommentBanStatusResponse = await getCommentBanStatus(tenantId, commentId);
9})();
10

getCommentChildren Internal Link

參數

名稱類型必填說明
tenantIdstring是
commentIdstring是
ssostring否

回應

返回:ModerationAPIChildCommentsResponse

範例

getCommentChildren 範例
Copy Copy
1
2async function fetchChildren() {
3 const tenantId: string = "tenant_12345";
4 const commentId: string = "cmt_98765";
5 const ssoToken: string = "sso_user_abc123";
6
7 const responseWithSSO: ModerationAPIChildCommentsResponse = await getCommentChildren(tenantId, commentId, ssoToken);
8 const responseWithoutSSO: ModerationAPIChildCommentsResponse = await getCommentChildren(tenantId, commentId);
9}
10
11fetchChildren();
12

getCount Internal Link

參數

名稱類型必填說明
tenantIdstringYes
textSearchstringNo
byIPFromCommentstringNo
filterstringNo
searchFiltersstringNo
demobooleanNo
ssostringNo

回應

返回:ModerationAPICountCommentsResponse

範例

getCount 範例
Copy Copy
1
2const tenantId: string = "tenant_12345";
3
4const basicCount: ModerationAPICountCommentsResponse = await getCount(tenantId);
5
6const detailedCount: ModerationAPICountCommentsResponse = await getCount(
7 tenantId,
8 "spam",
9 "192.168.1.100",
10 "status:pending",
11 "user:john",
12 true,
13 "sso_token_abc"
14);
15

getCounts Internal Link

參數

名稱類型必填說明
tenantIdstring是
ssostring否

回應

返回:GetBannedUsersCountResponse

範例

getCounts 範例
Copy Copy
1
2async function run() {
3 const tenantId: string = "tenant_9876";
4 const ssoToken: string = "sso_user_42";
5
6 const resultWithOnlyTenant: GetBannedUsersCountResponse = await getCounts(tenantId);
7 const resultWithBoth: GetBannedUsersCountResponse = await getCounts(tenantId, ssoToken);
8}
9
10run();
11

getLogs Internal Link

參數

NameTypeRequiredDescription
tenantIdstringYes
commentIdstringYes
ssostringNo

回應

返回:ModerationAPIGetLogsResponse

範例

getLogs 範例
Copy Copy
1
2(async () => {
3 const tenantId: string = "acme-corp-123";
4 const commentId: string = "cmt_4567890";
5 const ssoToken: string = "sso_abcdef123456";
6
7 const logsWithSso: ModerationAPIGetLogsResponse = await getLogs(tenantId, commentId, ssoToken);
8 const logsWithoutSso: ModerationAPIGetLogsResponse = await getLogs(tenantId, commentId);
9})();
10

getManualBadges Internal Link

參數

名稱類型必填說明
tenantIdstring是
ssostring否

回應

返回:GetTenantManualBadgesResponse

範例

getManualBadges 範例
Copy Copy
1
2async function fetchBadges() {
3 const tenantId: string = "tenant-987654321";
4 const ssoToken: string = "sso-token-abc123";
5
6 const badgesWithSso: GetTenantManualBadgesResponse = await getManualBadges(tenantId, ssoToken);
7 const badgesWithoutSso: GetTenantManualBadgesResponse = await getManualBadges(tenantId);
8}
9

getManualBadgesForUser Internal Link

參數

名稱類型必填說明
tenantIdstring是
badgesUserIdstring否
commentIdstring否
ssostring否

回應

回傳:GetUserManualBadgesResponse

範例

getManualBadgesForUser 範例
Copy Copy
1
2async () => {
3 const tenantId: string = "tenant_12345";
4 const badgesUserId: string | undefined = "user_98765";
5 const commentId: string | undefined = "comment_abcde";
6 const sso: string | undefined = "sso_token_xyz";
7
8 const basicResponse: GetUserManualBadgesResponse = await getManualBadgesForUser(tenantId);
9 const fullResponse: GetUserManualBadgesResponse = await getManualBadgesForUser(
10 tenantId,
11 badgesUserId,
12 commentId,
13 sso
14 );
15
16 console.log(basicResponse, fullResponse);
17}();
18

getModerationComment Internal Link

參數

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

回應

返回:ModerationAPICommentResponse

範例

getModerationComment 範例
Copy Copy
1
2async function fetchComments() {
3 const tenantId: string = "acme-corp";
4 const commentId: string = "cmt_1234567890";
5
6 // 僅使用必要參數呼叫
7 const basicResponse: ModerationAPICommentResponse = await getModerationComment(tenantId, commentId);
8
9 // 使用可選參數呼叫
10 const includeEmail: boolean = true;
11 const includeIP: boolean = false;
12 const sso: string = "sso-token-abc123";
13 const detailedResponse: ModerationAPICommentResponse = await getModerationComment(
14 tenantId,
15 commentId,
16 includeEmail,
17 includeIP,
18 sso
19 );
20}
21

getModerationCommentText Internal Link

參數

NameTypeRequiredDescription
tenantIdstringYes
commentIdstringYes
ssostringNo

回應

返回:GetCommentTextResponse

範例

getModerationCommentText 範例
Copy Copy
1
2async function fetchComment() {
3 const tenantId: string = "tenant_12345";
4 const commentId: string = "cmt_98765";
5 const ssoToken: string = "sso_abcde12345";
6
7 const commentWithoutSso: GetCommentTextResponse = await getModerationCommentText(tenantId, commentId);
8 const commentWithSso: GetCommentTextResponse = await getModerationCommentText(tenantId, commentId, ssoToken);
9}
10
11fetchComment();
12

getPreBanSummary Internal Link

參數

名稱類型必填說明
tenantIdstringYes
commentIdstringYes
includeByUserIdAndEmailbooleanNo
includeByIPbooleanNo
includeByEmailDomainbooleanNo
ssostringNo

回應

返回:PreBanSummary

範例

getPreBanSummary 範例
Copy Copy
1
2async function fetchSummary(): Promise<void> {
3 const tenantId: string = "tenant_12345";
4 const commentId: string = "cmt_98765";
5 const includeByUserIdAndEmail: boolean = true;
6 const includeByIP: boolean = false;
7 const includeByEmailDomain: boolean = true;
8 const sso: string = "sso_token_abc";
9
10 const summary: PreBanSummary = await getPreBanSummary(
11 tenantId,
12 commentId,
13 includeByUserIdAndEmail,
14 includeByIP,
15 includeByEmailDomain,
16 sso
17 );
18
19 console.log(summary);
20}
21
22fetchSummary();
23

getSearchCommentsSummary Internal Link

參數

名稱類型必填說明
tenantIdstring是
valuestring否
filtersstring否
searchFiltersstring否
ssostring否

回應

Returns: ModerationCommentSearchResponse

範例

getSearchCommentsSummary 範例
Copy Copy
1
2async function runSearch() {
3 const tenantId: string = "tenant_12345";
4 const value: string = "spam";
5 const filters: string = "status:pending";
6 const searchFilters: string = "author:john";
7 const sso: string = "sso_token_abc";
8
9 const result: ModerationCommentSearchResponse = await getSearchCommentsSummary(
10 tenantId,
11 value,
12 filters,
13 searchFilters,
14 sso
15 );
16
17 console.log(result);
18}
19
20runSearch();
21

getSearchPages Internal Link

參數

名稱類型必填說明
tenantIdstringYes
valuestringNo
ssostringNo

回應

返回:ModerationPageSearchResponse

範例

getSearchPages 範例
Copy Copy
1
2const tenantId: string = "acme-corp-123";
3const searchValue: string = "spam";
4const ssoToken: string = "sso-abc123def456";
5
6const result1: ModerationPageSearchResponse = await getSearchPages(tenantId);
7const result2: ModerationPageSearchResponse = await getSearchPages(tenantId, searchValue);
8const result3: ModerationPageSearchResponse = await getSearchPages(tenantId, searchValue, ssoToken);
9

getSearchSites Internal Link

參數

名稱類型必填說明
tenantIdstring是
valuestring否
ssostring否

回應

返回:ModerationSiteSearchResponse

範例

getSearchSites 範例
Copy Copy
1
2async function runSearches(): Promise<void> {
3 const tenantId: string = "tenant-987654";
4 const query: string = "offensive content";
5 const ssoToken: string = "sso-token-xyz";
6
7 const fullResult: ModerationSiteSearchResponse = await getSearchSites(tenantId, query, ssoToken);
8 const minimalResult: ModerationSiteSearchResponse = await getSearchSites(tenantId);
9}
10
11runSearches();
12

getSearchSuggest Internal Link

參數

名稱類型必填說明
tenantIdstringYes
textSearchstringNo
ssostringNo

回應

返回:ModerationSuggestResponse

範例

getSearchSuggest 範例
Copy Copy
1
2(async () => {
3 const tenantId: string = "tenant-9f8b7c6d";
4 const textSearch: string = "harassment";
5 const sso: string = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...";
6 const suggestResponse: ModerationSuggestResponse = await getSearchSuggest(tenantId, textSearch, sso);
7 const minimalResponse: ModerationSuggestResponse = await getSearchSuggest(tenantId);
8})();
9

getSearchUsers Internal Link

參數

名稱類型必填說明
tenantIdstring是
valuestring否
ssostring否

回應

返回:ModerationUserSearchResponse

範例

getSearchUsers 範例
Copy Copy
1
2async function runSearch() {
3 const tenantId: string = "tenant-9876";
4 const emailFragment: string = "jane";
5 const ssoToken: string = "sso-token-456";
6
7 const resultWithAll: ModerationUserSearchResponse = await getSearchUsers(tenantId, emailFragment, ssoToken);
8 const resultWithTenantOnly: ModerationUserSearchResponse = await getSearchUsers(tenantId);
9}
10

getTrustFactor Internal Link

參數

名稱類型必填說明
tenantIdstring是
userIdstring否
ssostring否

回應

返回: GetUserTrustFactorResponse

範例

getTrustFactor 範例
Copy Copy
1
2async function demo() {
3 const tenantId: string = "tenant_12345";
4 const userId: string = "user_98765";
5 const sso: string = "sso_token_abcde";
6
7 const trustFactor: GetUserTrustFactorResponse = await getTrustFactor(tenantId);
8 const trustFactorWithUser: GetUserTrustFactorResponse = await getTrustFactor(tenantId, userId);
9 const trustFactorFull: GetUserTrustFactorResponse = await getTrustFactor(tenantId, userId, sso);
10}
11

getUserBanPreference Internal Link

參數

名稱類型必填說明
tenantIdstringYes
ssostringNo

回應

返回:APIModerateGetUserBanPreferencesResponse

範例

getUserBanPreference 範例
Copy Copy
1
2async function demoGetUserBanPreference() {
3 const tenantId: string = "tenant_987654321";
4 const ssoToken: string = "sso_user_abc123xyz";
5
6 const responseWithSso: APIModerateGetUserBanPreferencesResponse = await getUserBanPreference(tenantId, ssoToken);
7 const responseWithoutSso: APIModerateGetUserBanPreferencesResponse = await getUserBanPreference(tenantId);
8}
9

getUserInternalProfile Internal Link

參數

名稱類型必填說明
tenantIdstringYes
commentIdstringNo
ssostringNo

回應

返回:GetUserInternalProfileResponse

範例

getUserInternalProfile 範例
Copy Copy
1
2async function demo() {
3 const tenantId: string = "tenant_12345";
4 const commentId: string = "cmt_9876";
5 const ssoToken: string = "sso_abcde12345";
6
7 const profileOnly: GetUserInternalProfileResponse = await getUserInternalProfile(tenantId);
8 const profileWithComment: GetUserInternalProfileResponse = await getUserInternalProfile(tenantId, commentId);
9 const fullProfile: GetUserInternalProfileResponse = await getUserInternalProfile(tenantId, commentId, ssoToken);
10}
11
12demo();
13

postAdjustCommentVotes Internal Link

參數

名稱類型必填說明
tenantIdstringYes
commentIdstringYes
adjustCommentVotesParamsAdjustCommentVotesParamsYes
broadcastIdstringNo
ssostringNo

回應

返回:AdjustVotesResponse

範例

postAdjustCommentVotes 範例
Copy Copy
1
2const tenantId: string = "acme-corp";
3const commentId: string = "cmt_987654321";
4const adjustParams: AdjustCommentVotesParams = { voteDelta: 1 };
5const broadcastId: string = "brd_112233";
6const sso: string = "sso-token-xyz";
7
8const result: AdjustVotesResponse = await postAdjustCommentVotes(
9 tenantId,
10 commentId,
11 adjustParams,
12 broadcastId,
13 sso
14);
15

postApiExport Internal Link

參數

名稱類型必填說明
tenantIdstring是
textSearchstring否
byIPFromCommentstring否
filtersstring否
searchFiltersstring否
sortsstring否
ssostring否

回應

返回:ModerationExportResponse

範例

postApiExport 範例
Copy Copy
1
2async function runExport() {
3 const tenantId: string = "c9f1e2b4-8a6d-4f3a-9d2e-5b6c7d8e9f0a";
4 const textSearch: string = "spam";
5 const byIPFromComment: string = "203.0.113.45";
6 const filters: string = "status:pending";
7 const searchFilters: string = "createdAt>2023-01-01";
8 const sorts: string = "createdAt:desc";
9 const sso: string = "sso-token-abc123";
10
11 const fullExport: ModerationExportResponse = await postApiExport(
12 tenantId,
13 textSearch,
14 byIPFromComment,
15 filters,
16 searchFilters,
17 sorts,
18 sso
19 );
20
21 const minimalExport: ModerationExportResponse = await postApiExport(tenantId);
22
23 console.log(fullExport, minimalExport);
24}
25runExport();
26

postBanUserFromComment Internal Link

參數

名稱類型必填說明
tenantIdstringYes
commentIdstringYes
banEmailbooleanNo
banEmailDomainbooleanNo
banIPbooleanNo
deleteAllUsersCommentsbooleanNo
bannedUntilstringNo
isShadowBanbooleanNo
updateIdstringNo
banReasonstringNo
ssostringNo

回應

返回:BanUserFromCommentResult

範例

postBanUserFromComment 範例
Copy Copy
1
2async function banUserExample(): Promise<void> {
3 const result: BanUserFromCommentResult = await postBanUserFromComment(
4 "tenant_42",
5 "comment_1001",
6 true, // banEmail
7 undefined, // banEmailDomain(省略)
8 true, // banIP
9 false, // deleteAllUsersComments
10 "2025-01-01T00:00:00Z", // bannedUntil
11 true, // isShadowBan
12 undefined, // updateId(省略)
13 "Harassment", // banReason
14 undefined // sso(省略)
15 );
16
17 console.log(result);
18}
19

postBanUserUndo Internal Link

參數

名稱類型必填說明
tenantIdstringYes
banUserUndoParamsBanUserUndoParamsYes
ssostringNo

回應

返回: APIEmptyResponse

範例

postBanUserUndo 範例
Copy Copy
1
2const tenantId: string = "tenant_9876";
3
4const undoParams: BanUserUndoParams = {
5 userId: "user_12345",
6 // 可以在此加入其他必填欄位
7};
8
9const resultWithoutSSO: APIEmptyResponse = await postBanUserUndo(tenantId, undoParams);
10
11const ssoToken: string = "sso_abcdef123456";
12
13const resultWithSSO: APIEmptyResponse = await postBanUserUndo(tenantId, undoParams, ssoToken);
14

postBulkPreBanSummary Internal Link

參數

名稱類型必填說明
tenantIdstringYes
bulkPreBanParamsBulkPreBanParamsYes
includeByUserIdAndEmailbooleanNo
includeByIPbooleanNo
includeByEmailDomainbooleanNo
ssostringNo

回應

返回:BulkPreBanSummary

範例

postBulkPreBanSummary 範例
Copy Copy
1
2const tenantId: string = "c1f2e3d4-5678-90ab-cdef-1234567890ab";
3
4const bulkPreBanParams: BulkPreBanParams = {
5 userIds: ["user123"],
6 emails: ["spam@example.com"],
7 ips: ["192.0.2.1"],
8 emailDomains: ["example.com"]
9};
10
11const includeByUserIdAndEmail: boolean = true;
12const includeByIP: boolean = false;
13const includeByEmailDomain: boolean = true;
14const sso: string = "sso-token-abc123";
15
16const summary: BulkPreBanSummary = await postBulkPreBanSummary(
17 tenantId,
18 bulkPreBanParams,
19 includeByUserIdAndEmail,
20 includeByIP,
21 includeByEmailDomain,
22 sso
23);
24

postCommentsByIds Internal Link

Parameters

名稱類型必填說明
tenantIdstringYes
commentsByIdsParamsCommentsByIdsParamsYes
ssostringNo

Response

返回: ModerationAPIChildCommentsResponse

Example

postCommentsByIds 範例
Copy Copy
1
2const tenantId: string = 'tenant-9f8b7c6d-1234-5678-90ab-cdef12345678';
3const commentsByIdsParams: CommentsByIdsParams = {
4 commentIds: ['comment-1', 'comment-2'],
5 includeUserBadges: true
6};
7const responseWithoutSso: ModerationAPIChildCommentsResponse = await postCommentsByIds(tenantId, commentsByIdsParams);
8const sso: string = 'sso-abc123def456';
9const responseWithSso: ModerationAPIChildCommentsResponse = await postCommentsByIds(tenantId, commentsByIdsParams, sso);
10

postFlagComment Internal Link

參數

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

回應

返回:APIEmptyResponse

範例

postFlagComment 範例
Copy Copy
1
2async function runExample() {
3 const tenantId: string = "tenant_12345";
4 const commentId: string = "cmt_98765";
5
6 // 僅必要參數
7 const result1: APIEmptyResponse = await postFlagComment(tenantId, commentId);
8
9 // 包含可選參數
10 const broadcastId: string = "brd_54321";
11 const sso: string = "user@example.com";
12 const result2: APIEmptyResponse = await postFlagComment(tenantId, commentId, broadcastId, sso);
13
14 console.log(result1, result2);
15}
16runExample();
17

postRemoveComment Internal Link

參數

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

回應

Returns: PostRemoveCommentApiResponse

範例

postRemoveComment 範例
Copy Copy
1
2async function removeCommentExample() {
3 const tenantId: string = "tenant_12345";
4 const commentId: string = "cmt_98765";
5 const broadcastId: string = "brd_555";
6 const sso: string = "sso_token_abc";
7
8 const response: PostRemoveCommentApiResponse = await postRemoveComment(
9 tenantId,
10 commentId,
11 broadcastId,
12 sso
13 );
14 console.log(response);
15}
16
17removeCommentExample();
18

postRestoreDeletedComment Internal Link


參數

NameTypeRequiredDescription
tenantIdstringYes
commentIdstringYes
broadcastIdstringNo
ssostringNo

回應

Returns: APIEmptyResponse

範例

postRestoreDeletedComment 範例
Copy Copy
1
2const tenantId: string = "tenant_12345";
3const commentId: string = "cmt_98765";
4
5const resultRequired: APIEmptyResponse = await postRestoreDeletedComment(tenantId, commentId);
6
7const broadcastId: string = "brd_001";
8const sso: string = "sso_token_abc123";
9
10const resultAll: APIEmptyResponse = await postRestoreDeletedComment(
11 tenantId,
12 commentId,
13 broadcastId,
14 sso
15);
16

postSetCommentApprovalStatus Internal Link

參數

名稱類型必填說明
tenantIdstringYes
commentIdstringYes
approvedbooleanNo
broadcastIdstringNo
ssostringNo

回應

返回: SetCommentApprovedResponse

範例

postSetCommentApprovalStatus 範例
Copy Copy
1
2(async () => {
3 const tenantId: string = "tenant_001";
4 const commentId: string = "comment_123";
5 const approved: boolean = false;
6 const broadcastId: string = "broadcast_456";
7 const sso: string = "sso_789";
8
9 const result: SetCommentApprovedResponse = await postSetCommentApprovalStatus(
10 tenantId,
11 commentId,
12 approved,
13 broadcastId,
14 sso
15 );
16
17 const minimalResult: SetCommentApprovedResponse = await postSetCommentApprovalStatus(
18 tenantId,
19 commentId
20 );
21})();
22

postSetCommentReviewStatus Internal Link

參數

名稱類型必填說明
tenantIdstringYes
commentIdstringYes
reviewedbooleanNo
broadcastIdstringNo
ssostringNo

回應

返回:APIEmptyResponse

範例

postSetCommentReviewStatus 範例
Copy Copy
1
2const tenantId: string = "tenant_12345";
3const commentId: string = "cmt_98765";
4const reviewed: boolean = true;
5const broadcastId: string = "brd_001";
6const sso: string = "sso_token_abc";
7
8const result: APIEmptyResponse = await postSetCommentReviewStatus(
9 tenantId,
10 commentId,
11 reviewed,
12 broadcastId,
13 sso
14);
15

postSetCommentSpamStatus Internal Link

參數

名稱類型必填說明
tenantIdstringYes
commentIdstringYes
spambooleanNo
permNotSpambooleanNo
broadcastIdstringNo
ssostringNo

回應

返回:APIEmptyResponse

範例

postSetCommentSpamStatus 範例
Copy Copy
1
2const tenantId: string = "tenant_42";
3const commentId: string = "comment_1001";
4
5const spam: boolean = true;
6const permNotSpam: boolean = false;
7const broadcastId: string = "broadcast_2023";
8const sso: string = "sso_user_5678";
9
10const resultFull: APIEmptyResponse = await postSetCommentSpamStatus(
11 tenantId,
12 commentId,
13 spam,
14 permNotSpam,
15 broadcastId,
16 sso
17);
18
19const resultMinimal: APIEmptyResponse = await postSetCommentSpamStatus(
20 tenantId,
21 commentId
22);
23

postSetCommentText Internal Link

參數

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

回應

返回:SetCommentTextResponse

範例

postSetCommentText 範例
Copy Copy
1
2const tenantId: string = "tenant_12345";
3const commentId: string = "cmt_9876";
4const setCommentTextParams: SetCommentTextParams = {
5 text: "Revised comment after user edit.",
6 format: "plain"
7};
8const broadcastId: string = "broadcast_2023_09";
9
10const response: SetCommentTextResponse = await postSetCommentText(
11 tenantId,
12 commentId,
13 setCommentTextParams,
14 broadcastId
15);
16
17console.log(response);
18

postUnFlagComment Internal Link

參數

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

回應

返回:APIEmptyResponse

範例

postUnFlagComment 範例
Copy Copy
1
2async function runExample() {
3 const tenantId: string = "tenant_12345";
4 const commentId: string = "comment_98765";
5 const broadcastId: string = "broadcast_55555";
6 const sso: string = "sso_token_abcde";
7
8 const result1: APIEmptyResponse = await postUnFlagComment(tenantId, commentId);
9 const result2: APIEmptyResponse = await postUnFlagComment(tenantId, commentId, broadcastId, sso);
10}
11
12runExample();
13

postVote Internal Link

參數

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

回應

回傳: VoteResponse

範例

postVote 範例
Copy Copy
1
2async function runVoteExamples(): Promise<void> {
3 const tenantId: string = "acme-corp";
4 const commentId: string = "cmt_1234567890";
5
6 // 僅使用必要參數呼叫
7 const simpleVote: VoteResponse = await postVote(tenantId, commentId);
8
9 // 使用可選參數呼叫
10 const direction: string = "down";
11 const broadcastId: string = "brd_987654321";
12 const sso: string = "user-42";
13 const detailedVote: VoteResponse = await postVote(tenantId, commentId, direction, broadcastId, sso);
14
15 console.log(simpleVote, detailedVote);
16}
17

putAwardBadge Internal Link

參數

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

回應

返回:AwardUserBadgeResponse

範例

putAwardBadge 範例
Copy Copy
1
2async function awardBadgeExample(): Promise<void> {
3 const tenantId: string = "tenant_42";
4 const badgeId: string = "badge_superstar";
5 const userId: string = "user_1001";
6 const commentId: string = "comment_2023";
7
8 const result: AwardUserBadgeResponse = await putAwardBadge(
9 tenantId,
10 badgeId,
11 userId,
12 commentId
13 );
14
15 console.log(result);
16}
17

putCloseThread Internal Link

參數

名稱類型必填說明
tenantIdstring是
urlIdstring是
ssostring否

回應

返回:APIEmptyResponse

範例

putCloseThread 範例
Copy Copy
1
2(async () => {
3 const tenantId: string = "my-company";
4 const urlId: string = "post-2023-09-15";
5 const ssoToken: string = "sso-abc123def";
6
7 const resultWithSso: APIEmptyResponse = await putCloseThread(tenantId, urlId, ssoToken);
8 const resultWithoutSso: APIEmptyResponse = await putCloseThread(tenantId, urlId);
9})();
10

putRemoveBadge Internal Link

參數

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

回應

返回:RemoveUserBadgeResponse

範例

putRemoveBadge 範例
Copy Copy
1
2async function demoRemoveBadge() {
3 const tenantId: string = "tenant_42";
4 const badgeId: string = "badge_gold";
5 const userId: string = "user_1001";
6 const commentId: string = "comment_20230915";
7 const broadcastId: string = "broadcast_live_01";
8 const sso: string = "sso_abcdef123456";
9
10 const result: RemoveUserBadgeResponse = await putRemoveBadge(
11 tenantId,
12 badgeId,
13 userId,
14 commentId,
15 broadcastId,
16 sso
17 );
18
19 console.log(result);
20}
21

putReopenThread Internal Link

參數

名稱類型必填說明
tenantIdstringYes
urlIdstringYes
ssostringNo

回應

返回:APIEmptyResponse

範例

putReopenThread 範例
Copy Copy
1
2async function reopenThreadExample() {
3 const tenantId: string = "tenant_12345";
4 const urlId: string = "post-9876";
5 const sso: string = "user-abc123";
6
7 const responseWithoutSso: APIEmptyResponse = await putReopenThread(tenantId, urlId);
8 const responseWithSso: APIEmptyResponse = await putReopenThread(tenantId, urlId, sso);
9}
10
11reopenThreadExample();
12

setTrustFactor Internal Link

參數

名稱類型必填說明
tenantIdstringYes
userIdstringNo
trustFactorstringNo
ssostringNo

回應

返回:SetUserTrustFactorResponse

範例

setTrustFactor 範例
Copy Copy
1
2async function demoSetTrustFactor() {
3 const tenantId: string = "acme-corp";
4 const userId: string = "user-9876";
5 const trustFactor: string = "high";
6 const sso: string = "sso-token-xyz";
7
8 const fullResponse: SetUserTrustFactorResponse = await setTrustFactor(
9 tenantId,
10 userId,
11 trustFactor,
12 sso
13 );
14
15 const minimalResponse: SetUserTrustFactorResponse = await setTrustFactor(tenantId);
16}
17

createModerator Internal Link

參數

名稱類型必填說明
tenantIdstringYes
createModeratorBodyCreateModeratorBodyYes

回應

返回:CreateModeratorResponse

範例

createModerator 範例
Copy Copy
1
2const tenantId: string = "tenant_12345";
3
4const moderatorPayload: CreateModeratorBody = {
5 userId: "user_9876",
6 // 可選欄位;如果不需要可省略
7 notes: "Temporary moderator for event"
8};
9
10const response: CreateModeratorResponse = await createModerator(tenantId, moderatorPayload);
11

deleteModerator Internal Link

參數

名稱類型必填說明
tenantIdstring是
idstring是
sendEmailstring否

回應

返回:APIEmptyResponse

範例

deleteModerator 範例
Copy Copy
1
2(async () => {
3 const tenantId: string = "tenant_12345";
4 const moderatorId: string = "mod_9876";
5 const notifyEmail: string = "admin@company.com";
6
7 const resultWithEmail: APIEmptyResponse = await deleteModerator(tenantId, moderatorId, notifyEmail);
8 const resultWithoutEmail: APIEmptyResponse = await deleteModerator(tenantId, moderatorId);
9})();
10

getModerator Internal Link

參數

名稱類型必填說明
tenantIdstring是
idstring是

回應

返回:GetModeratorResponse

範例

getModerator 範例
Copy Copy
1
2async function fetchModerator() {
3 const tenantId: string = "c9f1e2b3-4d5a-6f78-90ab-cdef12345678";
4 const moderatorId: string = "mod-987654";
5 const response: GetModeratorResponse = await getModerator(tenantId, moderatorId);
6 const isActive: boolean | undefined = response.moderator?.isActive;
7 const statusCode: number | undefined = response.status?.code;
8}
9

getModerators Internal Link

參數

NameTypeRequiredDescription
tenantIdstringYes
skipnumberNo

回應

返回:GetModeratorsResponse

範例

getModerators 範例
Copy Copy
1
2const tenantId: string = "tenant_987654321";
3
4const moderators: GetModeratorsResponse = await getModerators(tenantId);
5
6const skip: number = 20;
7const moreModerators: GetModeratorsResponse = await getModerators(tenantId, skip);
8

sendInvite Internal Link

參數

名稱類型必填說明
tenantIdstring是
idstring是
fromNamestring是

回應

返回: APIEmptyResponse

範例

sendInvite 範例
Copy Copy
1
2const tenantId: string = "tenant-987654321";
3const id: string = "user-123456789";
4const fromName: string = "Alice Johnson";
5
6const result: APIEmptyResponse = await sendInvite(tenantId, id, fromName);
7console.log(result);
8

updateModerator Internal Link

參數

名稱類型必填說明
tenantIdstring是
idstring是
updateModeratorBodyUpdateModeratorBody是

回應

返回:APIEmptyResponse

範例

updateModerator 範例
Copy Copy
1
2const tenantId: string = "tenant_9f8b7c6d";
3const moderatorId: string = "mod_12345";
4
5const updateBody: UpdateModeratorBody = {
6 isActive: true,
7 // role?: string 是可選的,這裡省略
8};
9
10const result: APIEmptyResponse = await updateModerator(tenantId, moderatorId, updateBody);
11

deleteNotificationCount Internal Link

參數

名稱類型必填說明
tenantIdstringYes
idstringYes

回應

返回: APIEmptyResponse

範例

deleteNotificationCount 範例
Copy Copy
1
2let tenantId: string = "tenant-42f9b8c1";
3let notificationId: string = "notif-7e3a9d4f";
4
5const result: APIEmptyResponse = await deleteNotificationCount(tenantId, notificationId);
6

getCachedNotificationCount Internal Link

參數

名稱類型必填說明
tenantIdstring是
idstring是

回應

返回: GetCachedNotificationCountResponse

範例

getCachedNotificationCount 範例
Copy Copy
1
2(async () => {
3 const tenantId: string = "tenant_12345";
4 const id: string = "user_9876";
5 const response: GetCachedNotificationCountResponse = await getCachedNotificationCount(tenantId, id);
6})();
7

getNotificationCount Internal Link

參數

名稱類型必填說明
tenantIdstring是
userIdstring否
urlIdstring否
fromCommentIdstring否
viewedboolean否
typestring否

回應

返回: GetNotificationCountResponse

範例

getNotificationCount 範例
Copy Copy
1
2const tenantId: string = "acme-corp";
3const userId: string = "user-12345";
4const urlId: string = "https://app.example.com/dashboard";
5const fromCommentId: string = "cmt-9876";
6const viewed: boolean = false;
7const type: string = "reply";
8
9const notificationCount: GetNotificationCountResponse = await getNotificationCount(
10 tenantId,
11 userId,
12 urlId,
13 fromCommentId,
14 viewed,
15 type
16);
17

getNotifications Internal Link

參數

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

回應

回傳: GetNotificationsResponse

範例

getNotifications 範例
Copy Copy
1
2async function fetchNotifications(): Promise<void> {
3 const tenantId: string = "tenant_42";
4 const userId: string = "user_1001";
5 const urlId: string = "url_2023";
6 const viewed: boolean = true;
7 const skip: number = 0;
8
9 const notifications: GetNotificationsResponse = await getNotifications(
10 tenantId,
11 userId,
12 urlId,
13 undefined,
14 viewed,
15 undefined,
16 skip
17 );
18
19 console.log(notifications);
20}
21

updateNotification Internal Link

參數

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

回應

Returns: APIEmptyResponse

範例

updateNotification 範例
Copy Copy
1
2async function main(): Promise<void> {
3 const tenantId: string = "tenant-abc123";
4 const notificationId: string = "notif-9876";
5 const updateBody: UpdateNotificationBody = {
6 title: "System Maintenance",
7 message: "Scheduled maintenance at 02:00 UTC.",
8 enabled: true
9 };
10 const userId: string = "user-42";
11
12 const resultWithoutUser: APIEmptyResponse = await updateNotification(tenantId, notificationId, updateBody);
13 const resultWithUser: APIEmptyResponse = await updateNotification(tenantId, notificationId, updateBody, userId);
14}
15

createV1PageReact Internal Link

參數

名稱類型必填說明
tenantIdstring是
urlIdstring是
titlestring否
ssostring否

回應

返回:CreateV1PageReact

範例

createV1PageReact 範例
Copy Copy
1
2const tenantId: string = "my-tenant-123";
3const urlId: string = "article-456";
4
5const pageTitle: string = "Understanding TypeScript Generics";
6const ssoToken: string = "user-789-token";
7
8const fullResult: CreateV1PageReact = await createV1PageReact(tenantId, urlId, pageTitle, ssoToken);
9const minimalResult: CreateV1PageReact = await createV1PageReact(tenantId, urlId);
10

createV2PageReact Internal Link

參數

名稱類型必填說明
tenantIdstring是
urlIdstring是
idstring是
titlestring否
ssostring否

回應

返回:CreateV1PageReact

範例

createV2PageReact 範例
Copy Copy
1
2async function run() {
3 const tenantId: string = "acme-corp";
4 const urlId: string = "product-page-123";
5 const pageId: string = "page-456";
6 const pageTitle: string = "Product Overview";
7 const ssoToken: string = "jwt-token-abc123";
8
9 const pageFull: CreateV1PageReact = await createV2PageReact(tenantId, urlId, pageId, pageTitle, ssoToken);
10 const pageTitleOnly: CreateV1PageReact = await createV2PageReact(tenantId, urlId, pageId, pageTitle);
11 const pageMinimal: CreateV1PageReact = await createV2PageReact(tenantId, urlId, pageId);
12}
13run();
14

deleteV1PageReact Internal Link

參數

名稱類型必填描述
tenantIdstring是
urlIdstring是
ssostring否

回應

Returns: CreateV1PageReact

範例

deleteV1PageReact 範例
Copy Copy
1
2async function runExamples() {
3 const tenantId: string = "tenant_9f8b7c6d";
4 const urlId: string = "blog/post-2024-06-15";
5 const ssoToken: string = "sso_user_42";
6
7 const resultWithSso: CreateV1PageReact = await deleteV1PageReact(tenantId, urlId, ssoToken);
8 const resultWithoutSso: CreateV1PageReact = await deleteV1PageReact(tenantId, urlId);
9}
10

deleteV2PageReact Internal Link

參數

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

回應

返回:CreateV1PageReact

範例

deleteV2PageReact 範例
Copy Copy
1
2async function runDeleteExamples() {
3 const tenantId: string = "tenant_12345";
4 const urlId: string = "page_98765";
5 const commentId: string = "comment_abcde";
6
7 // 呼叫(不含可選的 sso)
8 const resultWithoutSso: CreateV1PageReact = await deleteV2PageReact(tenantId, urlId, commentId);
9
10 // 呼叫(含可選的 sso)
11 const ssoToken: string = "sso_token_xyz";
12 const resultWithSso: CreateV1PageReact = await deleteV2PageReact(tenantId, urlId, commentId, ssoToken);
13}
14

getV1PageLikes Internal Link

參數

NameTypeRequiredDescription
tenantIdstringYes
urlIdstringYes
ssostringNo

回應

Returns: GetV1PageLikes

範例

getV1PageLikes 範例
Copy Copy
1
2(async () => {
3 const tenantId: string = "tenant_12345";
4 const urlId: string = "https://myblog.com/post/42";
5 const ssoToken: string = "sso_user_987";
6
7 const likesWithSSO: GetV1PageLikes = await getV1PageLikes(tenantId, urlId, ssoToken);
8 const likesWithoutSSO: GetV1PageLikes = await getV1PageLikes(tenantId, urlId);
9})();
10

getV2PageReacts Internal Link

參數

名稱類型必填說明
tenantIdstring是
urlIdstring是
ssostring否

回應

Returns: GetV2PageReacts

範例

getV2PageReacts 範例
Copy Copy
1
2const tenantId: string = "tenant-42";
3const urlId: string = "article-9876";
4const ssoToken: string = "sso-abc123";
5
6const reactsWithSso: GetV2PageReacts = await getV2PageReacts(tenantId, urlId, ssoToken);
7const reactsWithoutSso: GetV2PageReacts = await getV2PageReacts(tenantId, urlId);
8

getV2PageReactUsers Internal Link

參數

名稱類型必填描述
tenantIdstring是
urlIdstring是
idstring是
ssostring否

回應

返回:GetV2PageReactUsersResponse

範例

getV2PageReactUsers 範例
Copy Copy
1
2async function demoGetUsers() {
3 const tenantId: string = "d4e5f6a7-89ab-4cde-f012-3456789abcde";
4 const urlId: string = "blog/2024/06/fastcomments-typescript";
5 const userId: string = "user_123456789";
6 const ssoToken: string = "sso_token_abcdef123456";
7
8 const responseWithSso: GetV2PageReactUsersResponse = await getV2PageReactUsers(tenantId, urlId, userId, ssoToken);
9 const responseWithoutSso: GetV2PageReactUsersResponse = await getV2PageReactUsers(tenantId, urlId, userId);
10}
11

addPage 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

deletePage 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

getOfflineUsers Internal Link

Past commenters on the page who are NOT currently online. Sorted by displayName.
過去在此頁面發表評論,但目前不在線上的評論者。依 displayName 排序。

Use this after exhausting /users/online to render a "Members" section.
在使用完 /users/online 之後,使用此方法來呈現「Members」區段。

Cursor pagination on commenterName: server walks the partial {tenantId, urlId, commenterName} index from afterName forward via $gt, no $skip cost.
在 commenterName 上使用游標分頁:伺服器從部分 {tenantId, urlId, commenterName} 索引開始,從 afterName 往前以 $gt 前進,無需 $skip 成本。

Parameters

名稱類型必填說明
tenantIdstringYes
urlIdstringYes
afterNamestringNo
afterUserIdstringNo

回應

返回:PageUsersOfflineResponse

範例

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

getOnlineUsers Internal Link

目前線上檢視頁面的使用者:指其 WebSocket 連線目前已訂閱該頁面的使用者。
返回 anonCount + totalCount(全房間的訂閱者,包括我們未列舉的匿名檢視者)。

參數

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

回應

返回:PageUsersOnlineResponse

範例

getOnlineUsers 範例
Copy Copy
1
2async function fetchOnlineUsers() {
3 const tenantId: string = "tenant_12345";
4 const urlId: string = "article-9876";
5 const afterName: string | undefined = "john_doe";
6 const afterUserId: string | undefined = "user_456";
7
8 const onlineUsers: PageUsersOnlineResponse = await getOnlineUsers(
9 tenantId,
10 urlId,
11 afterName,
12 afterUserId
13 );
14
15 console.log(onlineUsers);
16}
17
18fetchOnlineUsers();
19

getPageByURLId 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

getPages 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

getPagesPublic Internal Link

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

參數

名稱類型必填說明
tenantIdstring是
cursorstring否
limitnumber否
qstring否
sortByPagesSortBy否
hasCommentsboolean否

回應

返回:GetPublicPagesResponse

範例

getPagesPublic 範例
Copy Copy
1
2async function fetchPublicPages() {
3 const tenantId: string = "tenant_12345";
4 const cursor: string = "page_5";
5 const limit: number = 20;
6 const query: string = "support";
7 const hasComments: boolean = true;
8
9 const response: GetPublicPagesResponse = await getPagesPublic(
10 tenantId,
11 cursor,
12 limit,
13 query,
14 undefined,
15 hasComments
16 );
17
18 console.log(response);
19}
20

getUsersInfo Internal Link


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

Parameters

名稱類型必填說明
tenantIdstring是
idsstring是

Response

回傳:PageUsersInfoResponse

Example

getUsersInfo 範例
Copy Copy
1
2async function fetchUsersInfo(): Promise<void> {
3 const tenantId: string = "tenant_12345";
4 const ids: string = "user_001,user_002";
5 const response: PageUsersInfoResponse = await getUsersInfo(tenantId, ids);
6 console.log(response);
7}
8fetchUsersInfo();
9

patchPage 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

deletePendingWebhookEvent Internal Link

參數

名稱類型必填說明
tenantIdstring是
idstring是

回應

返回: APIEmptyResponse

範例

deletePendingWebhookEvent 範例
Copy Copy
1
2async function runDeletion() {
3 const tenantId: string = "tenant-42f7b9c2";
4 const eventId: string = "webhook-event-8a7d6c5b";
5 const result: APIEmptyResponse = await deletePendingWebhookEvent(tenantId, eventId);
6 console.log(result);
7}
8

getPendingWebhookEventCount Internal Link

參數

名稱類型必填說明
tenantIdstring是
commentIdstring否
externalIdstring否
eventTypestring否
typestring否
domainstring否
attemptCountGTnumber否

回應

返回:GetPendingWebhookEventCountResponse

範例

getPendingWebhookEventCount 範例
Copy Copy
1
2async function runExample() {
3 const tenantId: string = "tenant_42";
4 const commentId: string = "comment_1001";
5 const eventType: string = "comment.deleted";
6 const domain: string = "myblog.com";
7
8 const result: GetPendingWebhookEventCountResponse = await getPendingWebhookEventCount(
9 tenantId,
10 commentId,
11 undefined,
12 eventType,
13 undefined,
14 domain
15 );
16
17 console.log(result);
18}
19
20runExample();
21

getPendingWebhookEvents Internal Link

參數

NameTypeRequiredDescription
tenantIdstringYes
commentIdstringNo
externalIdstringNo
eventTypestringNo
typestringNo
domainstringNo
attemptCountGTnumberNo
skipnumberNo

回應

返回:GetPendingWebhookEventsResponse

範例

getPendingWebhookEvents 範例
Copy Copy
1
2const tenantId: string = "123e4567-e89b-12d3-a456-426614174000";
3const commentId: string = "cmt_987654321";
4const externalId: string = "ext_abc123";
5const eventType: string = "comment_created";
6const type: string = "outbound";
7const domain: string = "myblog.com";
8const attemptCountGT: number = 2;
9const skip: number = 10;
10
11const pendingEvents: GetPendingWebhookEventsResponse = await getPendingWebhookEvents(
12 tenantId,
13 commentId,
14 externalId,
15 eventType,
16 type,
17 domain,
18 attemptCountGT,
19 skip
20);
21

createPollVote Internal Link

Record a vote on a poll, or move an existing one to a different option. A voter has at most one vote per poll, so calling this again for the same voter moves their vote rather than adding one.

This obeys the site's poll settings: if voting is set to logged-in users only, a vote with just an anonUserId is rejected, and anonymous votes are rate limited per IP per poll.

參數

名稱類型必填說明
tenantIdstring是
createPollVoteBodyCreatePollVoteBody是

回應

返回:CreatePollVoteResponse

範例

createPollVote 範例
Copy Copy
1
2(async () => {
3 const tenantId: string = "acme-corp-tenant";
4
5 const vote: CreatePollVoteBody = {
6 pollId: "poll-2024-09",
7 optionId: "option-A"
8 // userId is optional and omitted here
9 };
10
11 const result: CreatePollVoteResponse = await createPollVote(tenantId, vote);
12 console.log(result);
13})();
14

deletePollVote Internal Link


撤回投票。投票所屬的選項會恢復其計數。

參數

名稱類型必填描述
tenantIdstringYes
idstringYes

回應

返回:DeletePollVoteResponse

範例

deletePollVote 範例
Copy Copy
1
2async function runDeletePollVoteExample(): Promise<void> {
3 const tenantId: string = "tenant_42abc";
4 const pollId: string = "poll_7f9e2d";
5
6 const result: DeletePollVoteResponse = await deletePollVote(tenantId, pollId);
7
8 console.log(result);
9}
10

getPollVote Internal Link

參數

NameTypeRequiredDescription
tenantIdstringYes
idstringYes

回應

返回: GetPollVoteResponse

範例

getPollVote 範例
Copy Copy
1
2async function fetchPollVote(): Promise<void> {
3 const tenantId: string = "acme-corp-tenant";
4 const pollId: string = "poll-2024-05";
5 const result: GetPollVoteResponse = await getPollVote(tenantId, pollId);
6 const status: APIStatus = result.status;
7 const vote: PublicPollVote | undefined = result.vote;
8}
9

getPollVotes Internal Link

單一投票的個別投票,最舊的排在前面。

投票屬於一則評論,因此投票總是一次讀取單一投票 - 必須提供 commentId。這樣可確保所有查詢都使用集合已建立的索引。

遵守投票的隱私設定:匿名投票的投票無法被讀取(poll-anonymous),無論在此或透過 ID。

參數

名稱類型必填說明
tenantIdstringYes
commentIdstringYes
voterIdstringNo
optionIdstringNo
skipnumberNo

回應

回傳:GetPollVotesResponse

範例

取得投票結果 範例
Copy Copy
1
2const tenantId: string = "tenant_12345";
3const commentId: string = "cmt_98765";
4const voterId: string = "user_abc";
5const optionId: string = "opt_1";
6const skip: number = 20;
7
8const pollResult: GetPollVotesResponse = await getPollVotes(
9 tenantId,
10 commentId,
11 voterId,
12 optionId,
13 skip
14);
15
16console.log(pollResult);
17

deletePoll Internal Link


從其評論中移除投票調查,並刪除所有已投的票。評論本身保持不變。

參數

名稱類型必填說明
tenantIdstring是
commentIdstring是

回應

返回:APIEmptyResponse

範例

deletePoll 範例
Copy Copy
1
2async function runDeletePoll(): Promise<void> {
3 const tenantId: string = "tenant_9f8b7c6d";
4 const commentId: string = "comment_a1b2c3d4";
5 const result: APIEmptyResponse = await deletePoll(tenantId, commentId);
6 console.log(result);
7}
8

getPoll Internal Link

參數

名稱類型必填說明
tenantIdstringYes
commentIdstringYes

回應

返回: GetPollResponse

範例

getPoll 範例
Copy Copy
1
2const tenantId: string = "c9f1e2b4-8a3d-4f6a-9d2e-7b5c1a2f3e4d";
3const commentId: string = "a1b2c3d4e5f6g7h8i9j0";
4
5const pollResponse: GetPollResponse = await getPoll(tenantId, commentId);
6
7const poll: CommentPoll | undefined = pollResponse.poll;
8const privacy: PollPrivacy | undefined = poll?.privacy;
9const options: CommentPollOption[] | undefined = poll?.options;
10

patchPoll Internal Link

在原位編輯投票,保留其票數:變更問題、重新標記選項、關閉或重新開啟投票,
或變更誰可以看到投票者。選項以 id 為依據——若要新增、刪除或重新排序,請使用 PUT 完整列表。

參數

名稱類型必填說明
tenantIdstring是
commentIdstring是
commentPollPatchCommentPollPatch是

回應

返回:SavePollResponse

範例

patchPoll 範例
Copy Copy
1
2(async () => {
3 const tenantId: string = "acme-corp";
4 const commentId: string = "cmt_9876543210";
5
6 const pollPatch: CommentPollPatch = {
7 question: "Which new feature would you like to see?",
8 options: [
9 { id: "opt-1", label: "Dark Mode" },
10 { id: "opt-2", label: "Multi-language Support" }
11 ]
12 };
13
14 const response: SavePollResponse = await patchPoll(tenantId, commentId, pollPatch);
15 console.log(response);
16})();
17

putPoll Internal Link

將投票附加到評論,或設定已存在投票的完整狀態。

選項會依 ID 匹配:若傳送的選項帶有現有選項的 ID,則保留其投票(並採用新的標籤與位置),未帶 ID 的選項會被新增,列表中省略的現有選項則會被移除,連同其已投的票一起刪除。

在已有投票的投票中不保留任何現有選項 ID 會刪除所有選項,因此需要設定 replaceVotes=true。

Parameters

名稱類型必填說明
tenantIdstring是
commentIdstring是
commentPollPutInputCommentPollPutInput是
replaceVotesboolean否

Response

Returns: SavePollResponse

Example

putPoll 範例
Copy Copy
1
2const tenantId: string = "c1a2b3d4-5678-90ab-cdef-1234567890ab";
3const commentId: string = "9876543210";
4
5const optionA: CommentPollOptionInput = { text: "Dark mode" };
6const optionB: CommentPollOptionInput = { text: "Light mode" };
7
8const pollInput: CommentPollPutInput = {
9 question: "Which UI theme do you prefer?",
10 options: [optionA, optionB],
11};
12
13const replaceVotes: boolean = true;
14
15const result: SavePollResponse = await putPoll(tenantId, commentId, pollInput, replaceVotes);
16

createQuestionConfig Internal Link

參數

NameTypeRequiredDescription
tenantIdstringYes
createQuestionConfigBodyCreateQuestionConfigBodyYes

回應

Returns: CreateQuestionConfigResponse

範例

createQuestionConfig 範例
Copy Copy
1
2async function runExample() {
3 const tenantId: string = "acme-corp-123";
4
5 const customOption: QuestionConfigCustomOptionsInner = {
6 key: "maxLength",
7 value: 500,
8 };
9
10 const createQuestionConfigBody: CreateQuestionConfigBody = {
11 name: "User Feedback",
12 description: "Collect user feedback after purchase",
13 enabled: true,
14 customOptions: [customOption],
15 // 可選欄位
16 tags: ["feedback", "post-purchase"],
17 };
18
19 const response: CreateQuestionConfigResponse = await createQuestionConfig(
20 tenantId,
21 createQuestionConfigBody
22 );
23
24 console.log(response);
25}
26

deleteQuestionConfig Internal Link

參數

名稱類型必填說明
tenantIdstringYes
idstringYes

回應

返回:APIEmptyResponse

範例

deleteQuestionConfig 範例
Copy Copy
1
2async function executeDeletion() {
3 const tenantId: string = "tenant_12345";
4 const configId: string = "config_9876";
5 const result: APIEmptyResponse = await deleteQuestionConfig(tenantId, configId);
6 console.log(result);
7}
8executeDeletion();
9

getQuestionConfig Internal Link

參數

NameTypeRequiredDescription
tenantIdstring是
idstring是

回應

Returns: GetQuestionConfigResponse

範例

getQuestionConfig 範例
Copy Copy
1
2const tenantId: string = "acme-corp-tenant";
3const questionId: string = "q-987654321";
4
5const configResponse: GetQuestionConfigResponse = await getQuestionConfig(tenantId, questionId);
6
7const status: APIStatus = configResponse.status;
8const questionConfig?: QuestionConfig = configResponse.question;
9const firstOption?: QuestionConfigCustomOptionsInner = questionConfig?.customOptions?.[0];
10

getQuestionConfigs Internal Link

參數

名稱類型必填描述
tenantIdstring是
skipnumber否

回應

返回:GetQuestionConfigsResponse

範例

getQuestionConfigs 範例
Copy Copy
1
2async function fetchConfigs() {
3 const tenantId: string = "tenant_12345";
4
5 const firstPage: GetQuestionConfigsResponse = await getQuestionConfigs(tenantId);
6 const secondPage: GetQuestionConfigsResponse = await getQuestionConfigs(tenantId, 20);
7}
8

updateQuestionConfig Internal Link

參數

名稱類型必填說明
tenantIdstring是
idstring是
updateQuestionConfigBodyUpdateQuestionConfigBody是

回應

返回:APIEmptyResponse

範例

updateQuestionConfig 範例
Copy Copy
1
2(async () => {
3 const tenantId: string = "acme-corp-tenant";
4 const questionId: string = "question-42";
5
6 const updateBody: UpdateQuestionConfigBody = {
7 title: "Revised FAQ Question"
8 // isActive、customOptions 等為可選項,已省略
9 };
10
11 const response: APIEmptyResponse = await updateQuestionConfig(tenantId, questionId, updateBody);
12 console.log(response);
13})();
14

createQuestionResult Internal Link

參數

NameTypeRequiredDescription
tenantIdstringYes
createQuestionResultBodyCreateQuestionResultBodyYes

回應

Returns: CreateQuestionResultResponse

範例

createQuestionResult 範例
Copy Copy
1
2const tenantId: string = "tenant_12345";
3
4const createQuestionResultBody: CreateQuestionResultBody = {
5 questionId: "q_9876",
6 answer: "Yes",
7 score: 5,
8 meta: [
9 { key: "source", value: "survey" }
10 ]
11};
12
13const result: CreateQuestionResultResponse = await createQuestionResult(tenantId, createQuestionResultBody);
14

deleteQuestionResult Internal Link

參數

名稱類型必填說明
tenantIdstring是
idstring是

回應

回傳:APIEmptyResponse

範例

deleteQuestionResult 範例
Copy Copy
1
2async function runDelete() {
3 const tenantId: string = "tenant_12345";
4 const resultId: string = "qr_98765";
5
6 const response: APIEmptyResponse = await deleteQuestionResult(tenantId, resultId);
7 console.log(response);
8}
9

getQuestionResult Internal Link

參數

名稱類型必填說明
tenantIdstring是
idstring是

回應

返回:GetQuestionResultResponse

範例

getQuestionResult 範例
Copy Copy
1
2const tenantId: string = "tenant_12345";
3const questionId: string = "question_98765";
4
5const response: GetQuestionResultResponse = await getQuestionResult(tenantId, questionId);
6
7const status: APIStatus | undefined = response.status;
8const firstResult: QuestionResult | undefined = response.results?.[0];
9const firstMeta: MetaItem | undefined = response.meta?.[0];
10
11console.log(response);
12

getQuestionResults Internal Link

參數

名稱類型必填說明
tenantIdstringYes
urlIdstringNo
userIdstringNo
startDatestringNo
questionIdstringNo
questionIdsstringNo
skipnumberNo

回應

返回:GetQuestionResultsResponse

範例

getQuestionResults 範例
Copy Copy
1
2async function fetchResults() {
3 const tenantId: string = 'c1a2b3d4-5678-90ab-cdef-1234567890ab';
4 const urlId: string = 'blog-post-789';
5 const startDate: string = '2023-01-01T00:00:00Z';
6 const questionIds: string = 'q-abc123,q-def456';
7 const response: GetQuestionResultsResponse = await getQuestionResults(
8 tenantId,
9 urlId,
10 undefined,
11 startDate,
12 undefined,
13 questionIds
14 );
15 console.log(response);
16}
17

updateQuestionResult Internal Link

參數

名稱類型必填說明
tenantIdstringYes
idstringYes
updateQuestionResultBodyUpdateQuestionResultBodyYes

回應

返回:APIEmptyResponse

範例

updateQuestionResult 範例
Copy Copy
1
2const tenantId: string = "c1f5e8b2-9a4d-4f3a-8d2e-6b7c9d0e1f2a";
3const questionId: string = "qstn_1234567890";
4
5const updateBody: UpdateQuestionResultBody = {
6 score: 85,
7 comment: "Adjusted based on new criteria",
8 meta: [
9 { key: "reviewer", value: "john.doe@example.com" },
10 { key: "timestamp", value: new Date().toISOString() }
11 ]
12};
13
14const response: APIEmptyResponse = await updateQuestionResult(tenantId, questionId, updateBody);
15

aggregateQuestionResults Internal Link

參數

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

回應

返回:AggregateQuestionResultsResponse

範例

aggregateQuestionResults 範例
Copy Copy
1
2async function runAggregation() {
3 const tenantId: string = '123e4567-e89b-12d3-a456-426614174000';
4 const questionId: string = 'question-9f8e7d6c5b4a3';
5 const questionIds: string[] = ['question-1a2b3c', 'question-4d5e6f'];
6 const urlId: string = 'blog-post-2023-08-15';
7 const startDate: Date = new Date('2023-01-01T00:00:00Z');
8 const forceRecalculate: boolean = true;
9
10 const result: AggregateQuestionResultsResponse = await aggregateQuestionResults(
11 tenantId,
12 questionId,
13 questionIds,
14 urlId,
15 undefined,
16 startDate,
17 forceRecalculate
18 );
19}
20

bulkAggregateQuestionResults Internal Link

參數

名稱類型必填說明
tenantIdstring是
bulkAggregateQuestionResultsRequestBulkAggregateQuestionResultsRequest是
forceRecalculateboolean否

回應

返回: BulkAggregateQuestionResultsResponse

範例

bulkAggregateQuestionResults 範例
Copy Copy
1
2const tenantId: string = "tenant_12345";
3
4const request: BulkAggregateQuestionResultsRequest = {
5 items: [
6 {
7 questionId: "q_9876",
8 startDate: "2023-01-01T00:00:00Z",
9 endDate: "2023-01-31T23:59:59Z",
10 timeBucket: "day"
11 }
12 ]
13};
14
15const response: BulkAggregateQuestionResultsResponse = await bulkAggregateQuestionResults(tenantId, request, true);
16

combineCommentsWithQuestionResults Internal Link

參數

名稱類型必填說明
tenantIdstringYes
questionIdstringNo
questionIdsArrayNo
urlIdstringNo
startDateDateNo
forceRecalculatebooleanNo
minValuenumberNo
maxValuenumberNo
limitnumberNo

回應

返回:CombineQuestionResultsWithCommentsResponse

範例

combineCommentsWithQuestionResults 範例
Copy Copy
1
2async function runExample() {
3 const tenantId: string = "tenant_12345";
4 const questionId: string | undefined = "q_987";
5 const questionIds: string[] = ["q_001", "q_002"];
6 const urlId: string | undefined = "url_abc";
7 const startDate: Date = new Date("2023-01-01T00:00:00Z");
8 const forceRecalculate: boolean = true;
9 const minValue: number = 0;
10 const maxValue: number = 100;
11 const limit: number = 50;
12
13 const result: CombineQuestionResultsWithCommentsResponse = await combineCommentsWithQuestionResults(
14 tenantId,
15 questionId,
16 questionIds,
17 urlId,
18 startDate,
19 forceRecalculate,
20 minValue,
21 maxValue,
22 limit
23 );
24
25 console.log(result);
26}
27
28runExample();
29

addSSOUser 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

deleteSSOUser 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

getSSOUserByEmail 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

getSSOUserById 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

getSSOUsers 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

patchSSOUser 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

putSSOUser 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

createSubscription 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

deleteSubscription 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

getSubscriptions 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

updateSubscription 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

getTenantDailyUsages Internal Link

參數

NameTypeRequiredDescription
tenantIdstringYes
yearNumbernumberNo
monthNumbernumberNo
dayNumbernumberNo
skipnumberNo

回應

返回:GetTenantDailyUsagesResponse

範例

getTenantDailyUsages 範例
Copy Copy
1
2async function demoGetTenantDailyUsages() {
3 const tenantId: string = "tenant_9876";
4 const yearNumber: number = 2024;
5 const monthNumber: number = 2;
6 const dayNumber: number = 28;
7 const skip: number = 10;
8
9 const fullResult: GetTenantDailyUsagesResponse = await getTenantDailyUsages(
10 tenantId,
11 yearNumber,
12 monthNumber,
13 dayNumber,
14 skip
15 );
16
17 const partialResult: GetTenantDailyUsagesResponse = await getTenantDailyUsages(
18 tenantId,
19 yearNumber
20 );
21}
22

createTenantPackage Internal Link

參數

名稱類型必填說明
tenantIdstring是
createTenantPackageBodyCreateTenantPackageBody是

回應

返回: CreateTenantPackageResponse

範例

createTenantPackage 範例
Copy Copy
1
2async function runExample() {
3 const tenantId: string = "tenant_9f8b7c6d";
4 const createTenantPackageBody: CreateTenantPackageBody = {
5 name: "Enterprise Package",
6 priceCents: 49999,
7 // 可選欄位
8 description: "Full suite of enterprise features"
9 };
10 const result: CreateTenantPackageResponse = await createTenantPackage(tenantId, createTenantPackageBody);
11 console.log(result);
12}
13runExample();
14

deleteTenantPackage Internal Link

參數

NameTypeRequiredDescription
tenantIdstringYes
idstringYes

回應

Returns: APIEmptyResponse

範例

deleteTenantPackage 範例
Copy Copy
1
2let tenantId: string = "tenant_12345";
3let packageId: string = "pkg_98765";
4
5const result: APIEmptyResponse = await deleteTenantPackage(tenantId, packageId);
6

getTenantPackage Internal Link

參數

名稱類型必填說明
tenantIdstring是
idstring是

回應

返回:GetTenantPackageResponse

範例

getTenantPackage 範例
Copy Copy
1
2function fetchPackage(tenantId?: string, id?: string): Promise<GetTenantPackageResponse> {
3 const tid: string = tenantId ?? "acme-corp-001";
4 const pid: string = id ?? "premium-plan-2024";
5 return getTenantPackage(tid, pid);
6}
7
8async function runExample(): Promise<void> {
9 const response: GetTenantPackageResponse = await fetchPackage();
10 const status: APIStatus | undefined = response.status;
11 const pkg: TenantPackage | undefined = response.package;
12}
13

getTenantPackages Internal Link

參數

名稱類型必填說明
tenantIdstring是
skipnumber否

回應

回傳: GetTenantPackagesResponse

範例

getTenantPackages 範例
Copy Copy
1
2async function fetchPackages() {
3 const tenantId: string = "acme-corp-001";
4 const skip: number = 15;
5
6 const resultWithSkip: GetTenantPackagesResponse = await getTenantPackages(tenantId, skip);
7 const resultWithoutSkip: GetTenantPackagesResponse = await getTenantPackages(tenantId);
8}
9

replaceTenantPackage Internal Link

參數

名稱類型必填說明
tenantIdstringYes
idstringYes
replaceTenantPackageBodyReplaceTenantPackageBodyYes

回應

返回:APIEmptyResponse

範例

replaceTenantPackage 範例
Copy Copy
1
2async function replacePackageDemo(): Promise<void> {
3 const tenantId: string = "acme-corp-001";
4 const packageId: string = "basic-plan-2023";
5 const replaceBody: ReplaceTenantPackageBody = {
6 newPackageId: "enterprise-plan-2024"
7 // 如有需要,可在此加入可選欄位
8 };
9 const response: APIEmptyResponse = await replaceTenantPackage(tenantId, packageId, replaceBody);
10 console.log(response);
11}
12

updateTenantPackage Internal Link

參數

名稱類型必填說明
tenantIdstring是
idstring是
updateTenantPackageBodyUpdateTenantPackageBody是

回應

返回:APIEmptyResponse

範例

updateTenantPackage 範例
Copy Copy
1
2const tenantId: string = "tenant_9f8b7c6d";
3const packageId: string = "pkg_3a2b1c";
4
5const updateBody: UpdateTenantPackageBody = {
6 // 可選欄位可根據需要省略或包含
7 // newPackageName?: string;
8 // renewalDate?: string;
9};
10
11const result: APIEmptyResponse = await updateTenantPackage(tenantId, packageId, updateBody);
12

createTenantUser Internal Link

參數

名稱類型必填說明
tenantIdstringYes
createTenantUserBodyCreateTenantUserBodyYes

回應

返回:CreateTenantUserResponse

範例

createTenantUser 範例
Copy Copy
1
2async function addTenantUser() {
3 const tenantId: string = '123e4567-e89b-12d3-a456-426614174000';
4 const digestFreq: DigestEmailFrequency = 'daily';
5 const body: CreateTenantUserBody = {
6 email: 'jane.doe@example.com',
7 firstName: 'Jane',
8 lastName: 'Doe',
9 role: 'admin',
10 digestEmailFrequency: digestFreq,
11 phoneNumber: '+15551234567' // 可選
12 };
13 const response: CreateTenantUserResponse = await createTenantUser(tenantId, body);
14 console.log(response);
15}
16addTenantUser();
17

deleteTenantUser Internal Link

參數

名稱類型必填說明
tenantIdstring是
idstring是
deleteCommentsstring否
commentDeleteModestring否

回應

返回:APIEmptyResponse

範例

deleteTenantUser 範例
Copy Copy
1
2(async () => {
3 const tenantId: string = "acme-corp";
4 const userId: string = "u-112233";
5
6 const result1: APIEmptyResponse = await deleteTenantUser(tenantId, userId);
7 const result2: APIEmptyResponse = await deleteTenantUser(tenantId, userId, "true", "hard");
8
9 console.log(result1, result2);
10})();
11

getTenantUser Internal Link

參數

名稱類型必填說明
tenantIdstringYes
idstringYes

回應

回傳: GetTenantUserResponse

範例

getTenantUser 範例
Copy Copy
1
2(async () => {
3 const tenantId: string = "acme-tenant-001";
4 const userId: string = "user-12345";
5 const response: GetTenantUserResponse = await getTenantUser(tenantId, userId);
6 console.log(response);
7})();
8

getTenantUsers Internal Link

參數

名稱類型必填說明
tenantIdstring是
skipnumber否

回應

返回:GetTenantUsersResponse

範例

getTenantUsers 範例
Copy Copy
1
2const tenantId: string = "tenant_12345";
3const skip: number = 20;
4
5const firstPage: GetTenantUsersResponse = await getTenantUsers(tenantId);
6const secondPage: GetTenantUsersResponse = await getTenantUsers(tenantId, skip);
7

replaceTenantUser Internal Link

參數

名稱類型必填說明
tenantIdstring是
idstring是
replaceTenantUserBodyReplaceTenantUserBody是
updateCommentsstring否

回應

回傳: APIEmptyResponse

範例

replaceTenantUser 範例
Copy Copy
1
2const tenantId: string = "c1a2b3d4-5678-90ab-cdef-1234567890ab";
3const userId: string = "user-987654321";
4const replaceBody: ReplaceTenantUserBody = {
5 email: "newuser@example.com",
6 name: "New User",
7 role: "admin"
8};
9
10const response: APIEmptyResponse = await replaceTenantUser(
11 tenantId,
12 userId,
13 replaceBody,
14 "Migrated user to new tenant"
15);
16

參數

名稱類型必填說明
tenantIdstring是
idstring是
redirectURLstring否

回應

返回:APIEmptyResponse

範例

sendLoginLink 範例
Copy Copy
1
2interface APIStatus {
3 // 狀態欄位
4}
5
6interface APIEmptyResponse {
7 status: APIStatus;
8}
9
10(async () => {
11 const tenantId: string = "acme-corp";
12 const userId: string = "user-98765";
13 const redirectURL: string = "https://app.example.com/welcome";
14
15 const responseWithRedirect: APIEmptyResponse = await sendLoginLink(tenantId, userId, redirectURL);
16 const responseWithoutRedirect: APIEmptyResponse = await sendLoginLink(tenantId, userId);
17})();
18

updateTenantUser Internal Link

參數

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

回應

返回:APIEmptyResponse

範例

updateTenantUser 範例
Copy Copy
1
2async function runUpdate() {
3 const tenantId: string = "tenant_12345";
4 const userId: string = "user_987";
5 const updateBody: UpdateTenantUserBody = {
6 email: "new.email@example.com",
7 role: "admin",
8 isActive: true
9 };
10 const comment: string = "Promoted to admin role";
11
12 const result: APIEmptyResponse = await updateTenantUser(tenantId, userId, updateBody, comment);
13 console.log(result);
14}
15
16runUpdate();
17

createTenant Internal Link

參數

名稱類型必填說明
tenantIdstringYes
createTenantBodyCreateTenantBodyYes

回應

返回:CreateTenantResponse

範例

createTenant 範例
Copy Copy
1
2async function run() {
3 const tenantId: string = "acme-corp-2024";
4 const createTenantBody: CreateTenantBody = {
5 name: "Acme Corp",
6 domainConfiguration: { domain: "comments.acme.com", sslEnabled: true },
7 importedSite: { siteId: "site-123", source: "wordpress" },
8 billingInfo: { plan: "enterprise", renewalDate: "2025-01-01" },
9 description: "Tenant for Acme Corp's production environment", // 可選
10 };
11 const response: CreateTenantResponse = await createTenant(tenantId, createTenantBody);
12}
13run();
14

deleteTenant Internal Link

參數

名稱類型必填說明
tenantIdstringYes
idstringYes
surestringNo

回應

返回:APIEmptyResponse

範例

deleteTenant 範例
Copy Copy
1
2async function main(): Promise<void> {
3 const tenantId: string = "tenant_12345";
4 const userId: string = "user_9876";
5
6 const resultWithoutSure: APIEmptyResponse = await deleteTenant(tenantId, userId);
7 const resultWithSure: APIEmptyResponse = await deleteTenant(tenantId, userId, "confirm");
8}
9
10main();
11

getTenant Internal Link

參數

名稱類型必填說明
tenantIdstringYes
idstringYes

回應

返回:GetTenantResponse

範例

getTenant 範例
Copy Copy
1
2async function fetchTenant(): Promise<void> {
3 const tenantId: string = "tenant_12345";
4 const id: string = "tenant_12345";
5
6 const tenantResponse: GetTenantResponse = await getTenant(tenantId, id);
7
8 // Optional fields in the response
9 const billing: BillingInfo | undefined = tenantResponse.billingInfo;
10 const domainConfig: APIDomainConfiguration | undefined = tenantResponse.domainConfiguration;
11}
12

getTenants Internal Link

參數

名稱類型必填說明
tenantIdstring是
metastring否
skipnumber否

回應

返回:GetTenantsResponse

範例

getTenants 範例
Copy Copy
1
2async function runExample() {
3 const tenantId: string = "c3f5e9b2-4d1a-4f2b-9a6e-1234567890ab";
4 const meta: string = "includeBilling";
5 const skip: number = 10;
6
7 const result: GetTenantsResponse = await getTenants(tenantId, meta, skip);
8 console.log(result);
9}
10runExample();
11

updateTenant Internal Link

Parameters

名稱類型必填說明
tenantIdstringYes
idstringYes
updateTenantBodyUpdateTenantBodyYes

Response

Returns: APIEmptyResponse

Example

updateTenant 範例
Copy Copy
1
2async function runUpdateTenant() {
3 const tenantId: string = "tenant-abc123";
4 const id: string = "config-456def";
5
6 const updateTenantBody: UpdateTenantBody = {
7 // required field
8 // 必填欄位
9 name: "Acme International",
10 // optional fields can be omitted, e.g., billingInfo, domainConfiguration
11 // 可選欄位可省略,例如 billingInfo, domainConfiguration
12 };
13
14 const response: APIEmptyResponse = await updateTenant(tenantId, id, updateTenantBody);
15 console.log(response);
16}
17

changeTicketState Internal Link

參數

名稱類型必填說明
tenantIdstring是
userIdstring是
idstring是
changeTicketStateBodyChangeTicketStateBody是

回應

返回:ChangeTicketStateResponse

範例

changeTicketState 範例
Copy Copy
1
2(async () => {
3 const tenantId: string = "acme-corp";
4 const userId: string = "john.doe";
5 const ticketId: string = "ticket-20230915-001";
6
7 const changeTicketStateBody: ChangeTicketStateBody = {
8 // 可選欄位範例
9 note: "Resolved after investigation"
10 };
11
12 const response: ChangeTicketStateResponse = await changeTicketState(
13 tenantId,
14 userId,
15 ticketId,
16 changeTicketStateBody
17 );
18
19 console.log(response);
20})();
21

createTicket Internal Link

參數

名稱類型必填說明
tenantIdstringYes
userIdstringYes
createTicketBodyCreateTicketBodyYes

回應

返回:CreateTicketResponse

範例

createTicket 範例
Copy Copy
1
2async function submitTicket() {
3 const tenantId: string = "acme-corp";
4 const userId: string = "user-9876";
5
6 const ticketBody: CreateTicketBody = {
7 subject: "Login issues after password reset",
8 description: "User reports being unable to log in despite using the new password.",
9 priority: "medium",
10 // CreateTicketBody 中的可選欄位
11 tags: ["login", "password-reset"]
12 };
13
14 const response: CreateTicketResponse = await createTicket(tenantId, userId, ticketBody);
15 console.log(response);
16}
17
18submitTicket();
19

getTicket Internal Link

參數

名稱類型必填說明
tenantIdstring是
idstring是
userIdstring否

回應

返回:GetTicketResponse

範例

getTicket 範例
Copy Copy
1
2async function fetchTickets() {
3 const tenantId: string = "acme-corp";
4 const ticketId: string = "ticket-12345";
5 const userId: string = "user-9876";
6
7 const ticketWithUser: GetTicketResponse = await getTicket(tenantId, ticketId, userId);
8 const ticketWithoutUser: GetTicketResponse = await getTicket(tenantId, ticketId);
9}
10

getTickets Internal Link

參數

NameTypeRequiredDescription
tenantIdstringYes
userIdstringNo
statenumberNo
skipnumberNo
limitnumberNo

回應

Returns: GetTicketsResponse

範例

getTickets 範例
Copy Copy
1
2(async () => {
3 const tenantId: string = "tenant_12345";
4 const ticketsSimple: GetTicketsResponse = await getTickets(tenantId);
5
6 const userId: string = "user_9876";
7 const state: number = 1; // 例如,開啟
8 const skip: number = 0;
9 const limit: number = 20;
10 const ticketsFull: GetTicketsResponse = await getTickets(
11 tenantId,
12 userId,
13 state,
14 skip,
15 limit
16 );
17})();
18

getTranslations Internal Link

參數

名稱類型必填說明
namespacestring是
componentstring是
localestring否
useFullTranslationIdsboolean否

回應

返回:GetTranslationsResponse

範例

getTranslations 範例
Copy Copy
1
2async function fetchTranslations() {
3 const adminDashboard: GetTranslationsResponse = await getTranslations('admin', 'dashboard');
4 const userProfileFr: GetTranslationsResponse = await getTranslations('user', 'profile', 'fr-FR', true);
5}
6

uploadImage 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

getUserBadgeProgressById Internal Link

參數

名稱類型必填說明
tenantIdstring是
idstring是

回應

返回:APIGetUserBadgeProgressResponse

範例

getUserBadgeProgressById 範例
Copy Copy
1
2const tenantId: string = "acme-corp-tenant";
3const badgeId: string = "badge-2024-07";
4
5const result: APIGetUserBadgeProgressResponse = await getUserBadgeProgressById(tenantId, badgeId);
6
7const progress: UserBadgeProgress | undefined = result?.progress;
8const status: APIStatus | undefined = result?.status;
9

getUserBadgeProgressByUserId Internal Link

參數

名稱類型必填說明
tenantIdstring是
userIdstring是

回應

返回:APIGetUserBadgeProgressResponse

範例

getUserBadgeProgressByUserId 範例
Copy Copy
1
2const tenantId: string = "acme-corp";
3const userId: string = "user-42";
4
5const badgeProgress: APIGetUserBadgeProgressResponse = await getUserBadgeProgressByUserId(tenantId, userId);
6
7if (badgeProgress.status?.code !== undefined) {
8 const statusCode: number = badgeProgress.status.code;
9}
10
11if (badgeProgress.progress?.length) {
12 const firstProgress: UserBadgeProgress = badgeProgress.progress[0];
13}
14

getUserBadgeProgressList Internal Link

參數

名稱類型必填說明
tenantIdstring是
userIdstring否
limitnumber否
skipnumber否

回應

返回:APIGetUserBadgeProgressListResponse

範例

getUserBadgeProgressList 範例
Copy Copy
1
2(async () => {
3 const tenantId: string = "tenant-9f8b7c6d";
4 const userId: string = "user-123e4567-e89b-12d3-a456-426614174000";
5 const limit: number = 10;
6 const skip: number = 0;
7
8 const response: APIGetUserBadgeProgressListResponse = await getUserBadgeProgressList(tenantId, userId, limit, skip);
9 const status: APIStatus = response.status;
10 const badges: UserBadgeProgress[] = response.badges;
11})();
12

createUserBadge Internal Link

參數

NameTypeRequiredDescription
tenantIdstringYes
createUserBadgeParamsCreateUserBadgeParamsYes

回應

Returns: APICreateUserBadgeResponse

範例

createUserBadge 範例
Copy Copy
1
2async function main(): Promise<void> {
3 const tenantId: string = "tenant_9f8b7c";
4 const badgeParams: CreateUserBadgeParams = {
5 name: "Community Helper",
6 iconUrl: "https://cdn.example.com/badges/helper.png"
7 };
8 const response: APICreateUserBadgeResponse = await createUserBadge(tenantId, badgeParams);
9}
10main();
11

deleteUserBadge Internal Link

參數

名稱類型必填說明
tenantIdstring是
idstring是

回應

返回: APIEmptySuccessResponse

範例

deleteUserBadge 範例
Copy Copy
1
2(async () => {
3 const tenantId: string = "acme-corp";
4 const badgeId: string = "moderator-badge";
5 const result: APIEmptySuccessResponse = await deleteUserBadge(tenantId, badgeId);
6 console.log(result);
7})();
8

getUserBadge Internal Link

參數

名稱類型必填說明
tenantIdstringYes
idstringYes

回應

返回:APIGetUserBadgeResponse

範例

getUserBadge 範例
Copy Copy
1
2async function demoGetUserBadge() {
3 const tenantId: string = "tenant-9f8b7c6d";
4 const userId: string = "user-123456";
5 const badgeResponse: APIGetUserBadgeResponse = await getUserBadge(tenantId, userId);
6}
7

getUserBadges Internal Link

參數

名稱類型必填說明
tenantIdstring是
userIdstring否
badgeIdstring否
typenumber否
displayedOnCommentsboolean否
limitnumber否
skipnumber否

回應

回傳:APIGetUserBadgesResponse

範例

getUserBadges 範例
Copy Copy
1
2(async () => {
3 const tenantId: string = "acme-corp";
4
5 // 提供所有參數
6 const fullResponse: APIGetUserBadgesResponse = await getUserBadges(
7 tenantId,
8 "user-42",
9 "badge-premium",
10 1,
11 true,
12 10,
13 0
14 );
15
16 // 只提供必填參數與一個可選參數 (limit)
17 const limitedResponse: APIGetUserBadgesResponse = await getUserBadges(
18 tenantId,
19 undefined,
20 undefined,
21 undefined,
22 undefined,
23 5
24 );
25
26 console.log(fullResponse, limitedResponse);
27})();
28

updateUserBadge Internal Link

參數

NameTypeRequiredDescription
tenantIdstringYes
idstringYes
updateUserBadgeParamsUpdateUserBadgeParamsYes

回應

返回:APIEmptySuccessResponse

範例

updateUserBadge 範例
Copy Copy
1
2const tenantId: string = "tenant-9f8b7c6d";
3const id: string = "user-4a3b2c1d";
4
5const updateParams: UpdateUserBadgeParams = {
6 badgeId: "badge-premium",
7 // 可選欄位
8 expiresAt: new Date("2025-12-31T23:59:59Z")
9};
10
11const result: APIEmptySuccessResponse = await updateUserBadge(tenantId, id, updateParams);
12

getUserNotificationCount Internal Link

參數

NameTypeRequiredDescription
tenantIdstring是
ssostring否

回應

返回:GetUserNotificationCountResponse

範例

getUserNotificationCount 範例
Copy Copy
1
2async function demo(): Promise<void> {
3 const tenantId: string = "acme-corp-001";
4 const ssoToken: string = "sso-token-xyz789";
5
6 const countWithoutSso: GetUserNotificationCountResponse = await getUserNotificationCount(tenantId);
7 const countWithSso: GetUserNotificationCountResponse = await getUserNotificationCount(tenantId, ssoToken);
8}
9
10demo();
11

getUserNotifications Internal Link

參數

名稱類型必填說明
tenantIdstringYes
urlIdstringNo
pageSizenumberNo
afterIdstringNo
includeContextbooleanNo
afterCreatedAtnumberNo
unreadOnlybooleanNo
dmOnlybooleanNo
noDmbooleanNo
includeTranslationsbooleanNo
includeTenantNotificationsbooleanNo
ssostringNo

回應

回傳:GetMyNotificationsResponse

範例

getUserNotifications 範例
Copy Copy
1
2async function fetchNotifications(): Promise<void> {
3 const tenantId: string = "acme-corp";
4 const urlId: string = "article-42";
5 const pageSize: number = 20;
6 const includeContext: boolean = true;
7 const unreadOnly: boolean = true;
8
9 const notifications: GetMyNotificationsResponse = await getUserNotifications(
10 tenantId,
11 urlId,
12 pageSize,
13 undefined,
14 includeContext,
15 undefined,
16 unreadOnly
17 );
18
19 console.log(notifications);
20}
21

resetUserNotificationCount Internal Link

參數

名稱類型必填說明
tenantIdstring是
ssostring否

回應

返回: ResetUserNotificationsResponse

範例

resetUserNotificationCount 範例
Copy Copy
1
2async function demoReset() {
3 const tenantId: string = "tenant_12345";
4 const ssoToken: string = "sso_abcdef123456";
5
6 const resultWithSso: ResetUserNotificationsResponse = await resetUserNotificationCount(tenantId, ssoToken);
7 const resultWithoutSso: ResetUserNotificationsResponse = await resetUserNotificationCount(tenantId);
8}
9
10demoReset();
11

resetUserNotifications Internal Link

參數

名稱類型必填說明
tenantIdstring是
afterIdstring否
afterCreatedAtnumber否
unreadOnlyboolean否
dmOnlyboolean否
noDmboolean否
ssostring否

回應

返回:ResetUserNotificationsResponse

範例

resetUserNotifications 範例
Copy Copy
1
2(async () => {
3 const tenantId: string = "acme-corp";
4 const afterId: string = "notif-2023-09-01";
5 const afterCreatedAt: number = 1693526400; // Unix 時間戳記
6 const unreadOnly: boolean = true;
7 const dmOnly: boolean = false;
8
9 const response: ResetUserNotificationsResponse = await resetUserNotifications(
10 tenantId,
11 afterId,
12 afterCreatedAt,
13 unreadOnly,
14 dmOnly
15 );
16
17 console.log(response);
18})();
19

updateUserNotificationCommentSubscriptionStatus Internal Link

Enable or disable notifications for a specific comment.

參數

名稱類型必填說明
tenantIdstringYes
notificationIdstringYes
optedInOrOutUpdateUserNotificationCommentSubscriptionStatusOptedInOrOutEnumYes
commentIdstringYes
ssostringNo

回應

Returns: UpdateUserNotificationCommentSubscriptionStatusResponse

範例

updateUserNotificationCommentSubscriptionStatus 範例
Copy Copy
1
2async function runExample(): Promise<void> {
3 const tenantId: string = "tenant_12345";
4 const notificationId: string = "notif_9876";
5 const commentId: string = "comment_abc123";
6 const optedInOrOut: UpdateUserNotificationCommentSubscriptionStatusOptedInOrOutEnum =
7 UpdateUserNotificationCommentSubscriptionStatusOptedInOrOutEnum.OptIn;
8 const sso: string = "sso_token_456";
9
10 const resultWithSso: UpdateUserNotificationCommentSubscriptionStatusResponse = await updateUserNotificationCommentSubscriptionStatus(
11 tenantId,
12 notificationId,
13 optedInOrOut,
14 commentId,
15 sso
16 );
17
18 const resultWithoutSso: UpdateUserNotificationCommentSubscriptionStatusResponse = await updateUserNotificationCommentSubscriptionStatus(
19 tenantId,
20 notificationId,
21 optedInOrOut,
22 commentId
23 );
24}
25

updateUserNotificationPageSubscriptionStatus Internal Link


啟用或停用頁面的通知。當使用者訂閱頁面時,會為新的根評論建立通知,且同時

Parameters

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

Response

返回:UpdateUserNotificationPageSubscriptionStatusResponse

Example

updateUserNotificationPageSubscriptionStatus 範例
Copy Copy
1
2async function runExample() {
3 const tenantId: string = "tenant_12345";
4 const urlId: string = "url_9876";
5 const url: string = "https://example.com/articles/awesome-article";
6 const pageTitle: string = "Awesome Article";
7 const subscribedOrUnsubscribed: UpdateUserNotificationPageSubscriptionStatusSubscribedOrUnsubscribedEnum =
8 UpdateUserNotificationPageSubscriptionStatusSubscribedOrUnsubscribedEnum.Subscribed;
9 const sso: string = "sso_token_abc";
10
11 const response: UpdateUserNotificationPageSubscriptionStatusResponse = await updateUserNotificationPageSubscriptionStatus(
12 tenantId,
13 urlId,
14 url,
15 pageTitle,
16 subscribedOrUnsubscribed,
17 sso
18 );
19
20 console.log(response);
21}
22
23runExample();
24

updateUserNotificationStatus Internal Link

參數

名稱類型必填說明
tenantIdstring是
notificationIdstring是
newStatusUpdateUserNotificationStatusNewStatusEnum是
ssostring否

回應

返回: UpdateUserNotificationStatusResponse

範例

updateUserNotificationStatus 範例
Copy Copy
1
2const tenantId: string = "tenant_12345";
3const notificationId: string = "notif_9876";
4const newStatus: UpdateUserNotificationStatusNewStatusEnum = UpdateUserNotificationStatusNewStatusEnum.READ;
5const ssoToken: string = "sso_token_abc";
6
7const responseWithSso: UpdateUserNotificationStatusResponse = await updateUserNotificationStatus(
8 tenantId,
9 notificationId,
10 newStatus,
11 ssoToken
12);
13
14const responseWithoutSso: UpdateUserNotificationStatusResponse = await updateUserNotificationStatus(
15 tenantId,
16 notificationId,
17 newStatus
18);
19

getUserPresenceStatuses Internal Link

參數

名稱類型必填說明
tenantIdstring是
urlIdWSstring是
userIdsstring是

回應

返回: GetUserPresenceStatusesResponse

範例

getUserPresenceStatuses 範例
Copy Copy
1
2(async () => {
3 const tenantId: string = "my-tenant-42";
4 const urlIdWS: string = "post-9876";
5 const userIds: string = "alice,bob,carol";
6
7 const presence: GetUserPresenceStatusesResponse = await getUserPresenceStatuses(tenantId, urlIdWS, userIds);
8 console.log(presence);
9})();
10

searchUsers Internal Link

參數

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

回應

Returns: SearchUsersResult

範例

searchUsers 範例
Copy Copy
1
2async function example() {
3 const tenantId: string = "tenant_12345";
4 const urlId: string = "article-9876";
5 const usernameStartsWith: string = "john";
6 const mentionGroupIds: string[] = ["group1", "group2"];
7 const sso: string = "sso_token_abc";
8 const searchSection: SearchUsersSearchSectionEnum = SearchUsersSearchSectionEnum.MENTIONS;
9
10 const result: SearchUsersResult = await searchUsers(
11 tenantId,
12 urlId,
13 usernameStartsWith,
14 mentionGroupIds,
15 sso,
16 searchSection
17 );
18
19 console.log(result);
20}
21

getUser Internal Link

參數

名稱類型必填說明
tenantIdstring是
idstring是

回應

返回:GetUserResponse

範例

getUser 範例
Copy Copy
1
2async function main(): Promise<void> {
3 const tenantId: string = "tenant_12345";
4 const id: string = "user_98765";
5 const response: GetUserResponse = await getUser(tenantId, id);
6 const { user }: { user?: User } = response;
7}
8main();
9

createVote Internal Link

參數

NameTypeRequiredDescription
tenantIdstringYes
commentIdstringYes
directionCreateVoteDirectionEnumYes
userIdstringNo
anonUserIdstringNo

回應

返回: VoteResponse

範例

createVote 範例
Copy Copy
1
2const tenantId: string = "tenant_12345";
3const commentId: string = "comment_67890";
4const direction: CreateVoteDirectionEnum = CreateVoteDirectionEnum.UP;
5const userId: string = "user_abcde";
6
7const voteResult: VoteResponse = await createVote(tenantId, commentId, direction, userId);
8
9const anonUserId: string = "anon_zyxwv";
10const anonVoteResult: VoteResponse = await createVote(tenantId, commentId, direction, undefined, anonUserId);
11

deleteVote Internal Link

參數

名稱類型必填說明
tenantIdstringYes
idstringYes
editKeystringNo

回應

返回:VoteDeleteResponse

範例

deleteVote 範例
Copy Copy
1
2async function run() {
3 const tenantId: string = "tenant_12345";
4 const commentId: string = "comment_98765";
5 const editKey: string = "edit_abcde";
6
7 const responseWithKey: VoteDeleteResponse = await deleteVote(tenantId, commentId, editKey);
8 const responseWithoutKey: VoteDeleteResponse = await deleteVote(tenantId, commentId);
9}
10
11run();
12

getVotes Internal Link

參數

名稱類型必填說明
tenantIdstring是
urlIdstring是

回應

返回:GetVotesResponse

範例

getVotes 範例
Copy Copy
1
2const tenantId: string = "tenant_12345";
3const urlId: string = "article-67890";
4
5(async () => {
6 const votesResponse: GetVotesResponse = await getVotes(tenantId, urlId);
7 // 取得回應中可選屬性的範例
8 const firstVote: PublicVote | undefined = votesResponse.votes?.[0];
9})();
10

getVotesForUser Internal Link

參數

名稱類型必填說明
tenantIdstringYes
urlIdstringYes
userIdstringNo
anonUserIdstringNo

回應

返回:GetVotesForUserResponse

範例

getVotesForUser 範例
Copy Copy
1
2async function demo() {
3 const tenantId: string = "tenant_12345";
4 const urlId: string = "post_9876";
5 const userId: string = "user_abcde";
6 const anonUserId: string = "anon_5678";
7
8 const responseWithUser: GetVotesForUserResponse = await getVotesForUser(tenantId, urlId, userId);
9 const responseWithAnon: GetVotesForUserResponse = await getVotesForUser(tenantId, urlId, undefined, anonUserId);
10}
11
12demo();
13

createWebhook Internal Link

訂閱一個 URL 到評論事件(REST hook 訂閱)。再次將相同的 URL 訂閱到相同的事件和網域時,會返回現有的訂閱。傳遞內容使用 HMAC 簽名,請參閱 webhooks 指南;舊版的 token 標頭永遠不會發送給 API 訂閱。

Parameters

NameTypeRequiredDescription
tenantIdstringYes
createWebhookParamsCreateWebhookParamsYes

Response

Returns: CreateWebhookResponse

Example

createWebhook 範例
Copy Copy
1
2const tenantId: string = "tenant_9f8b7c6d";
3
4const webhookParams: CreateWebhookParams = {
5 event: "comment.created" as WebhookEventName,
6 method: "POST" as WebhookHTTPMethod,
7 url: "https://myapp.example.com/webhook",
8 source: "comment" as WebhookSource,
9 // optional secret for payload verification
10 secret: "s3cr3tK3y123",
11};
12
13const result: CreateWebhookResponse = await createWebhook(tenantId, webhookParams);
14
15const webhookId: string = result.webhook.id;
16

deleteWebhook Internal Link


取消訂閱(REST hook 取消訂閱)。僅能刪除透過此 API 建立的訂閱;在儀表板管理的 webhook 必須在儀表板中編輯。

參數

名稱類型必填描述
tenantIdstring是
idstring是

回應

返回: APIEmptyResponse

範例

deleteWebhook 範例
Copy Copy
1
2const tenantId: string = "tenant_12345";
3const webhookId: string = "wh_98765";
4
5const result: APIEmptyResponse = await deleteWebhook(tenantId, webhookId);
6

getWebhooks Internal Link


列出為租戶配置的 webhook,包括儀表板管理的行和 API 訂閱。

Parameters

名稱類型必填說明
tenantIdstring是
eventWebhookEventName否
domainstring否
sourceWebhookSource否
skipnumber否

Response

返回: GetWebhooksResponse

Example

getWebhooks 範例
Copy Copy
1
2(async () => {
3 const tenantId: string = 'tenant_42';
4 const event: WebhookEventName = 'comment.created';
5 const domain: string = 'forum.example.org';
6 const source: WebhookSource = 'admin';
7 const skip: number = 0;
8
9 const fullResponse: GetWebhooksResponse = await getWebhooks(tenantId, event, domain, source, skip);
10 const minimalResponse: GetWebhooksResponse = await getWebhooks(tenantId);
11})();
12

getWebhookSamplePayloads Internal Link


最近的評論以 webhook 傳遞使用的確切形狀呈現,用於建構整合(例如 Zapier 範例資料)。每個事件都會傳遞相同的評論物件,因此 event 只需要是有效的。

參數

名稱類型必填說明
tenantIdstringYes
eventWebhookEventNameNo
limitnumberNo

回應

返回:GetWebhookSamplePayloadsResponse

範例

getWebhookSamplePayloads 範例
Copy Copy
1
2const tenantId: string = "c1a2b3d4-5678-90ab-cdef-1234567890ab";
3
4const responseAll: GetWebhookSamplePayloadsResponse = await getWebhookSamplePayloads(
5 tenantId,
6 "comment.created",
7 10
8);
9
10const responseWithEvent: GetWebhookSamplePayloadsResponse = await getWebhookSamplePayloads(
11 tenantId,
12 "comment.created"
13);
14
15const responseBasic: GetWebhookSamplePayloadsResponse = await getWebhookSamplePayloads(
16 tenantId
17);
18

需要幫助嗎?

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

貢獻

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