FastComments.com

FastComments Nim 開發套件


這是 FastComments 的官方 Nim SDK。

FastComments API 的官方 Nim SDK

儲存庫

在 GitHub 檢視


需求 Internal Link


  • Nim >= 1.6.0
  • nimcrypto >= 0.5.4

安裝 Internal Link

使用 Nimble

nimble install fastcomments

從原始碼建置

nimble build

函式庫內容

此函式庫包含產生的 API 用戶端與 SSO 工具,以便更容易與 API 一起使用。

公開與受保護的 API

對於 API 用戶端,有三個 API 模組,api_defaultapi_publicapi_moderationapi_default 包含需要 API 金鑰的方法,api_public 則包含可直接從瀏覽器/行動裝置/等進行且無需驗證的 API 呼叫。api_moderation 模組包含管理員後台的相關方法。

api_moderation 方法涵蓋列出、計數、搜尋與匯出評論及其日誌;審核動作如移除/還原評論、檢舉、設定審查/垃圾/審核狀態、調整投票,以及重新開啟/關閉討論串;封鎖相關功能(封鎖使用者留言、取消封鎖、封鎖前摘要、封鎖狀態與偏好設定,以及被封鎖使用者數量);與徽章與信任(授予/移除徽章、列出手動徽章、取得/設定使用者的信任係數,以及擷取使用者的內部檔案)。每個 api_moderation 方法都接受一個 sso 參數,以便該呼叫以 SSO 管理員身份進行驗證。

快速開始 Internal Link

使用已驗證的 API (DefaultAPI)

重要: 已驗證的端點需要將您的 API 金鑰設定為 x-api-key 標頭。

import httpclient
import fastcomments
import fastcomments/apis/api_default
import fastcomments/models/model_comment_data

let client = newHttpClient()
client.headers["x-api-key"] = "your-api-key"

# 執行已驗證的 API 呼叫
let (response, httpResponse) = getComments(
  httpClient = client,
  tenantId = "your-tenant-id",
  page = 0,
  limit = 0,
  skip = 0,
  asTree = false,
  skipChildren = 0,
  limitChildren = 0,
  maxTreeDepth = 0,
  urlId = "your-url-id",
  userId = "",
  anonUserId = "",
  contextUserId = "",
  hashTag = "",
  parentId = "",
  direction = SortDirections.DESC
)

if response.isSome:
  let resp = response.get()
  if resp.comments.isSome:
    echo "Found ", resp.comments.get().len, " comments"

使用公開 API (PublicAPI)

公開端點不需要驗證:

import httpclient
import fastcomments
import fastcomments/apis/api_public

let client = newHttpClient()

# 執行公開 API 呼叫
let (response, httpResponse) = getCommentsPublic(
  httpClient = client,
  tenantId = "your-tenant-id",
  urlId = "your-url-id",
  page = 0,
  direction = SortDirections.DESC,
  sso = "",
  skip = 0,
  skipChildren = 0,
  limit = 0,
  limitChildren = 0,
  countChildren = false,
  fetchPageForCommentId = "",
  includeConfig = false,
  countAll = false,
  includei10n = false,
  locale = "",
  modules = "",
  isCrawler = false,
  includeNotificationCount = false,
  asTree = false,
  maxTreeDepth = 0,
  useFullTranslationIds = false,
  parentId = "",
  searchText = "",
  hashTags = @[],
  userId = "",
  customConfigStr = "",
  afterCommentId = "",
  beforeCommentId = ""
)

if response.isSome:
  let resp = response.get()
  if resp.comments.isSome:
    echo "Found ", resp.comments.get().len, " comments"

使用審核 API (ModerationAPI)

審核端點為管理員儀表板提供功能,並使用代表執行審核操作的管理員的 SSO 令牌進行驗證:

import httpclient
import fastcomments
import fastcomments/apis/api_moderation

let client = newHttpClient()

# 列出審核儀表板中的評論
let (response, httpResponse) = getApiComments(
  httpClient = client,
  page = 0,
  count = 30,
  textSearch = "",
  byIPFromComment = "",
  filters = "",
  searchFilters = "",
  sorts = "",
  demo = false,
  sso = "your-sso-token"
)

if response.isSome:
  let resp = response.get()
  echo "Found ", resp.comments.len, " comments"

常見問題

  1. 401 authentication error:請在進行 DefaultAPI 請求之前,確認已在您的 HttpClient 上設定 x-api-key 標頭:client.headers["x-api-key"] = "your-api-key"
  2. Wrong API class:對於伺服器端需驗證的請求請使用 api_default,對於客戶端/公開請求請使用 api_public,而管理員儀表板的請求請使用 api_moderation

發出 API 呼叫 Internal Link

本 SDK 中的所有 API 方法都回傳 (Option[ResponseType], Response) 的元組。第一個元素在成功時包含解析後的回應,第二個元素則是原始的 HTTP 回應。

範例:擷取評論

import httpclient
import options
import fastcomments
import fastcomments/apis/api_default

let client = newHttpClient()
client.headers["x-api-key"] = "your-api-key"

let (response, httpResponse) = getComments(
  httpClient = client,
  tenantId = "your-tenant-id",
  page = 0,
  limit = 0,
  skip = 0,
  asTree = false,
  skipChildren = 0,
  limitChildren = 0,
  maxTreeDepth = 0,
  urlId = "your-url-id",
  userId = "",
  anonUserId = "",
  contextUserId = "",
  hashTag = "",
  parentId = "",
  direction = SortDirections.DESC
)

if httpResponse.code == Http200:
  if response.isSome:
    let resp = response.get()
    if resp.comments.isSome:
      echo "Found ", resp.comments.get().len, " comments"

備註 Internal Link

廣播 ID

你會看到在某些 API 呼叫中需要傳入一個 broadcastId。當你接收到事件時,你會拿回這個 ID,因此如果你打算在用戶端採用樂觀更新(在用戶端樂觀地套用變更),你就可以據此忽略該事件(你可能會想這樣做,因為它提供了最佳的使用體驗)。在這裡傳入一個 UUID。這個 ID 應該夠獨特,以免在同一個瀏覽器會話中出現兩次。

SSO (單一登入)

關於 SSO 的範例,請見下方。

SSO 使用方式 Internal Link

簡易 SSO

import fastcomments/sso

let user = newSimpleSSOUserData(
  userId = "user-123",
  email = "user@example.com",
  avatar = "https://example.com/avatar.jpg"
)
let sso = newSimple(simpleUserData = user)
let token = sso.createToken()

echo "SSO Token: ", token

安全 SSO

import fastcomments/sso

let user = newSecureSSOUserData(
  userId = "user-123",
  email = "user@example.com",
  username = "johndoe",
  avatar = "https://example.com/avatar.jpg"
)

let apiKey = "your-api-key"
let sso = newSecure(apiKey = apiKey, secureUserData = user)
let token = sso.createToken()

echo "Secure SSO Token: ", token

彙總 Internal Link

透過分組(若提供 groupBy)並套用多個運算來聚合文件。支援不同的運算(例如 sum、countDistinct、avg 等)。

參數

NameTypeRequiredDescription
tenantIdstring
aggregationRequestAggregationRequest
parentTenantIdstring
includeStatsbool

回應

回傳:Option[AggregateResponse]

範例

aggregate 範例
Copy Copy
1
2let (response, httpResponse) = client.aggregate(
3 tenantId = "my-tenant-123",
4 aggregationRequest = AggregationRequest(groupBy = @["articleId"], metrics = @["commentCount"], filters = @[], limit = 0),
5 parentTenantId = "",
6 includeStats = false
7)
8
9if response.isSome:
10 let agg = response.get()
11 discard agg
12

取得稽核日誌 Internal Link

參數

名稱Type必填描述
tenantIdstring
limitfloat64
skipfloat64
orderSORTDIR
afterfloat64
beforefloat64

回應

回傳: Option[GetAuditLogsResponse]

範例

getAuditLogs 範例
Copy Copy
1
2let (response, httpResponse) = client.getAuditLogs(
3 tenantId = "my-tenant-123",
4 limit = 50.0,
5 skip = 0.0,
6 order = SORTDIR.DESC,
7 after = 1622505600.0,
8 before = 1625097600.0
9)
10
11if response.isSome:
12 let logs = response.get()
13 echo logs
14else:
15 echo "No audit logs returned"
16

公開登出 Internal Link

回應

回傳: Option[APIEmptyResponse]

範例

logoutPublic 範例
Copy Copy
1
2let (response, httpResponse) = client.logoutPublic(tenantId = "my-tenant-123", sessionId = "sess-9a8b7c6d", userId = "editor-87", revokeAll = false, ipAddress = "")
3if response.isSome:
4 let emptyResp = response.get()
5 echo "Logout successful for user: ", "editor-87"
6else:
7 echo "Logout failed"
8

從評論封鎖 Internal Link

參數

NameType必填Description
tenantIdstring
commentIdstring
publicBlockFromCommentParamsPublicBlockFromCommentParams
ssostring

回應

回傳:Option[BlockSuccess]

範例

blockFromCommentPublic 範例
Copy Copy
1
2let publicParams = PublicBlockFromCommentParams(
3 reason = "Repeated spam links",
4 durationMinutes = 1440,
5 blockAll = true,
6 notifyUser = false,
7 tags = @["spam", "auto-block"]
8)
9
10let (response, httpResponse) = client.blockFromCommentPublic(
11 tenantId = "my-tenant-123",
12 commentId = "comment-98765",
13 publicBlockFromCommentParams = publicParams,
14 sso = ""
15)
16
17if response.isSome:
18 let blockResult = response.get()
19 echo "Block succeeded: ", $blockResult
20else:
21 echo "Block failed, HTTP status: ", $httpResponse.status
22

取消封鎖評論 Internal Link

參數

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

回應

回傳: Option[UnblockSuccess]

範例

unBlockCommentPublic 範例
Copy Copy
1
2let (response, httpResponse) = client.unBlockCommentPublic(tenantId = "my-tenant-123", commentId = "cmt-987654321", publicBlockFromCommentParams = PublicBlockFromCommentParams(), sso = "")
3if response.isSome:
4 let unblockResult = response.get()
5 discard unblockResult
6else:
7 discard httpResponse
8

檢查被封鎖的評論 Internal Link


參數

名稱類型必填說明
tenantIdstring
commentIdsstring
ssostring

回應

回傳: Option[CheckBlockedCommentsResponse]

範例

checkedCommentsForBlocked 範例
Copy Copy
1
2let (response, httpResponse) = client.checkedCommentsForBlocked(
3 tenantId = "my-tenant-123",
4 commentIds = "",
5 sso = ""
6)
7if response.isSome:
8 let blockedResp = response.get()
9 echo "Received blocked comments response: ", blockedResp
10else:
11 echo "No response body; HTTP status: ", $httpResponse.status
12

從評論封鎖使用者 Internal Link

參數

名稱Type必填描述
tenantIdstring
idstring
blockFromCommentParamsBlockFromCommentParams
userIdstring
anonUserIdstring

回應

回傳: Option[BlockSuccess]

範例

blockUserFromComment 範例
Copy Copy
1
2let (response, httpResponse) = client.blockUserFromComment(
3 tenantId = "my-tenant-123",
4 id = "cmt-7890",
5 blockFromCommentParams = BlockFromCommentParams(
6 reason = "Repeated abusive language",
7 durationMinutes = 1440,
8 notifyUser = true,
9 tags = @["abuse", "automated"]
10 ),
11 userId = "user-456",
12 anonUserId = ""
13)
14
15if response.isSome:
16 let result = response.get()
17 discard result
18else:
19 discard httpResponse
20

建立公開評論 Internal Link

參數

NameTypeRequiredDescription
tenantIdstring
urlIdstring
broadcastIdstring
commentDataCommentData
sessionIdstring
ssostring

回應

回傳: Option[SaveCommentsResponseWithPresence]

範例

createCommentPublic 範例
Copy Copy
1
2let commentPayload = CommentData(
3 text = "Great write-up on serverless architectures.",
4 authorName = "Jane Doe",
5 authorEmail = "jane.doe@example.com",
6 isPublic = true,
7 tags = @["tech", "serverless"]
8)
9let (response, httpResponse) = client.createCommentPublic(
10 tenantId = "my-tenant-123",
11 urlId = "news/2026/06/fastcomments-sdk-update",
12 broadcastId = "broadcast-2026-06-19",
13 commentData = commentPayload,
14 sessionId = "sess-8a7b6c",
15 sso = "sso-jwt-abc123"
16)
17if response.isSome:
18 let saved = response.get()
19 discard saved
20

刪除評論 Internal Link

參數

名稱類型必填描述
tenantIdstring
idstring
contextUserIdstring
isLivebool

回應

回傳:Option[DeleteCommentResult]

範例

deleteComment 範例
Copy Copy
1
2let (response, httpResponse) = client.deleteComment(tenantId = "my-tenant-123", id = "cmt-98765", contextUserId = "user-456", isLive = true)
3if response.isSome:
4 let result = response.get()
5 echo "DeleteCommentResult received"
6else:
7 echo "No result, HTTP status: ", httpResponse.status
8

刪除公開評論 Internal Link

參數

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

回應

回傳: Option[PublicAPIDeleteCommentResponse]

範例

deleteCommentPublic 範例
Copy Copy
1
2let (response, httpResponse) = client.deleteCommentPublic(tenantId = "my-tenant-123", commentId = "cmt-987654321", broadcastId = "", editKey = "", sso = "")
3if response.isSome:
4 let deleted = response.get()
5 echo "Delete acknowledged, HTTP status: ", httpResponse.status
6

刪除評論投票 Internal Link

參數

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

回應

回傳: Option[VoteDeleteResponse]

範例

deleteCommentVote 範例
Copy Copy
1
2let (response, httpResponse) = client.deleteCommentVote(
3 tenantId = "my-tenant-123",
4 commentId = "comment-456",
5 voteId = "vote-789",
6 urlId = "news/article-title",
7 broadcastId = "",
8 editKey = "",
9 sso = ""
10)
11if response.isSome:
12 let voteResp = response.get()
13 echo "Vote delete response:", voteResp
14else:
15 echo "No response body, HTTP response:", httpResponse
16

檢舉評論 Internal Link

參數

名稱型別必填說明
tenantIdstring
idstring
userIdstring
anonUserIdstring

回應

回傳: Option[FlagCommentResponse]

範例

flagComment 範例
Copy Copy
1
2let (response, httpResponse) = client.flagComment(
3 tenantId = "my-tenant-123",
4 id = "cmt-98765",
5 userId = "user-12345",
6 anonUserId = ""
7)
8
9if response.isSome:
10 let flagResp = response.get()
11 echo "Flag response received"
12else:
13 echo "No flag response returned"
14

取得評論 Internal Link

參數

名稱類型必填描述
tenantIdstring
idstring

回應

回傳: Option[APIGetCommentResponse]

範例

getComment 範例
Copy Copy
1
2let (response, httpResponse) = client.getComment(tenantId = "my-tenant-123", id = "cmt-7890")
3if response.isSome:
4 let comment = response.get()
5 discard comment
6else:
7 echo "Comment not found"
8

取得評論列表 Internal Link

參數

名稱類型必填描述
tenantIdstringYes
pageintNo
limitintNo
skipintNo
asTreeboolNo
skipChildrenintNo
limitChildrenintNo
maxTreeDepthintNo
urlIdstringYes
userIdstringNo
anonUserIdstringNo
contextUserIdstringNo
hashTagstringNo
parentIdstringNo
directionSortDirectionsNo
fromDateint64No
toDateint64No

回應

回傳:Option[APIGetCommentsResponse]

範例

getComments 範例
Copy Copy
1
2let (response, httpResponse) = client.getComments(
3 tenantId = "my-tenant-123",
4 page = 1,
5 limit = 25,
6 skip = 0,
7 asTree = true,
8 skipChildren = 0,
9 limitChildren = 5,
10 maxTreeDepth = 3,
11 urlId = "news/2026-global-economy",
12 userId = "user-789",
13 anonUserId = "",
14 contextUserId = "",
15 hashTag = "economy",
16 parentId = "",
17 direction = SortDirections.Desc,
18 fromDate = 1710000000000'i64,
19 toDate = 1710100000000'i64
20)
21if response.isSome:
22 let commentsResp = response.get()
23 discard commentsResp
24

取得公開評論列表 Internal Link


req tenantId urlId

參數

NameTypeRequiredDescription
tenantIdstring
urlIdstring
pageint
directionSortDirections
ssostring
skipint
skipChildrenint
limitint
limitChildrenint
countChildrenbool
fetchPageForCommentIdstring
includeConfigbool
countAllbool
includei10nbool
localestring
modulesstring
isCrawlerbool
includeNotificationCountbool
asTreebool
maxTreeDepthint
useFullTranslationIdsbool
parentIdstring
searchTextstring
hashTagsseq[string]
userIdstring
customConfigStrstring
afterCommentIdstring
beforeCommentIdstring

回應

回傳: Option[GetCommentsResponseWithPresencePublicComment]

範例

getCommentsPublic 範例
Copy Copy
1
2let (response, httpResponse) = client.getCommentsPublic(
3 tenantId = "my-tenant-123",
4 urlId = "news/article-title",
5 page = 2,
6 direction = SortDirections.Descending,
7 sso = "",
8 skip = 0,
9 skipChildren = 0,
10 limit = 25,
11 limitChildren = 5,
12 countChildren = false,
13 fetchPageForCommentId = "",
14 includeConfig = true,
15 countAll = false,
16 includei10n = true,
17 locale = "en-US",
18 modules = "reactions,moderation",
19 isCrawler = false,
20 includeNotificationCount = true,
21 asTree = true,
22 maxTreeDepth = 3,
23 useFullTranslationIds = false,
24 parentId = "",
25 searchText = "climate change",
26 hashTags = @["climate", "research"],
27 userId = "user-789",
28 customConfigStr = "",
29 afterCommentId = "",
30 beforeCommentId = ""
31)
32
33if response.isSome:
34 let commentsResp = response.get()
35 echo "Received comments response:"
36 echo commentsResp
37else:
38 echo "No comments returned. HTTP status:", httpResponse.status
39
---

取得評論文字 Internal Link

參數

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

回應

回傳: Option[PublicAPIGetCommentTextResponse]

範例

getCommentText 範例
Copy Copy
1
2let (response, httpResponse) = client.getCommentText(tenantId = "my-tenant-123", commentId = "cmt-987654321", editKey = "", sso = "")
3
4if response.isSome:
5 let commentTextResp = response.get()
6 echo commentTextResp
7else:
8 echo "No comment text returned"
9

取得評論投票者名稱 Internal Link

參數

NameTypeRequiredDescription
tenantIdstring
commentIdstring
dirint
ssostring

回應

回傳: Option[GetCommentVoteUserNamesSuccessResponse]

範例

getCommentVoteUserNames 範例
Copy Copy
1
2let (response, httpResponse) = client.getCommentVoteUserNames(tenantId = "my-tenant-123", commentId = "cmt-987654", dir = 0, sso = "")
3if response.isSome:
4 let success: GetCommentVoteUserNamesSuccessResponse = response.get()
5 discard success
6

鎖定評論 Internal Link

參數

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

回應

回傳: Option[APIEmptyResponse]

範例

lockComment 範例
Copy Copy
1
2let (response, httpResponse) = client.lockComment(tenantId = "news-tenant-42", commentId = "cmt-8f3a2b9d", broadcastId = "", sso = "")
3if response.isSome:
4 let apiResp = response.get()
5 echo "Locked comment successfully for tenant news-tenant-42"
6else:
7 echo "Failed to lock comment, HTTP status: ", $httpResponse.status
8

置頂評論 Internal Link

參數

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

回應

回傳:Option[ChangeCommentPinStatusResponse]

範例

pinComment 範例
Copy Copy
1
2let (response, httpResponse) = client.pinComment(tenantId = "my-tenant-123", commentId = "cmt-98765", broadcastId = "", sso = "")
3if response.isSome:
4 let pinnedResp = response.get()
5 echo "Pin status updated for comment cmt-98765"
6else:
7 echo "No response received"
8

儲存評論 Internal Link

參數

名稱類型必填描述
tenantIdstring
createCommentParamsCreateCommentParams
isLivebool
doSpamCheckbool
sendEmailsbool
populateNotificationsbool

回應

回傳: Option[APISaveCommentResponse]

範例

saveComment 範例
Copy Copy
1
2let createCommentParams = CreateCommentParams(
3 urlId = "news/2026/major-policy-change",
4 content = "This is a thoughtful comment on the policy change and its potential impacts.",
5 authorName = "Morgan Lee",
6 authorEmail = "morgan.lee@example.org",
7 tags = @["policy","analysis"],
8 extraData = @[])
9
10let (response, httpResponse) = client.saveComment(
11 tenantId = "my-tenant-123",
12 createCommentParams = createCommentParams,
13 isLive = true,
14 doSpamCheck = true,
15 sendEmails = false,
16 populateNotifications = true)
17
18if response.isSome:
19 let saved = response.get()
20 discard saved
21

批次儲存評論 Internal Link

參數

名稱型別是否必填描述
tenantIdstring
createCommentParamsseq[CreateCommentParams]
isLivebool
doSpamCheckbool
sendEmailsbool
populateNotificationsbool): (Option[seq[SaveCommentsBulkResponse]]
idstring
fromNamestring

回應

回傳:Option[APIEmptyResponse]

範例

saveCommentsBulk 範例
Copy Copy
1
2let (response, httpResponse) = client.saveCommentsBulk(
3 tenantId = "my-tenant-123",
4 createCommentParams = @[],
5 isLive = false,
6 doSpamCheck = false,
7 sendEmails = false,
8 populateNotifications = false,
9 id = "",
10 fromName = ""
11)
12
13if response.isSome:
14 let apiResp = response.get()
15 echo "Bulk save succeeded, tenant:", " my-tenant-123"
16else:
17 echo "Bulk save returned no API response"
18

設定評論文字 Internal Link

參數

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

回應

回傳: Option[PublicAPISetCommentTextResponse]

範例

setCommentText 範例
Copy Copy
1
2let (response, httpResponse) = client.setCommentText(
3 tenantId = "my-tenant-123",
4 commentId = "cmt-456789",
5 broadcastId = "",
6 commentTextUpdateRequest = CommentTextUpdateRequest(text: "Updated comment text to fix a typo and clarify meaning."),
7 editKey = "",
8 sso = ""
9)
10if response.isSome:
11 let result = response.get()
12 discard result
13

取消從評論封鎖使用者 Internal Link

參數

NameTypeRequiredDescription
tenantIdstring
idstring
unBlockFromCommentParamsUnBlockFromCommentParams
userIdstring
anonUserIdstring

回應

回傳: Option[UnblockSuccess]

範例

unBlockUserFromComment 範例
Copy Copy
1
2let (response, httpResponse) = client.unBlockUserFromComment(
3 tenantId = "my-tenant-123",
4 id = "comment-9f3b2a",
5 unBlockFromCommentParams = UnBlockFromCommentParams(),
6 userId = "user-1024",
7 anonUserId = "anon-77b"
8)
9
10if response.isSome:
11 let unblockResult = response.get()
12 echo unblockResult
13else:
14 echo "Unblock failed"
15

取消檢舉評論 Internal Link

參數

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

回應

回傳: Option[FlagCommentResponse]

範例

unFlagComment 範例
Copy Copy
1
2let (response, httpResponse) = client.unFlagComment(tenantId = "my-tenant-123",
3 id = "comment-98765",
4 userId = "user-12345",
5 anonUserId = "")
6
7if response.isSome:
8 let flagResp = response.get()
9 echo "Unflagged comment response:", flagResp
10else:
11 echo "Unflag failed, HTTP status:", httpResponse.status
12

解除鎖定評論 Internal Link

參數

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

回應

回傳: Option[APIEmptyResponse]

範例

unLockComment 範例
Copy Copy
1
2let tenantId = "my-tenant-123"
3let commentId = "cmt-987654321"
4let (response, httpResponse) = client.unLockComment(
5 tenantId = tenantId,
6 commentId = commentId,
7 broadcastId = "",
8 sso = ""
9)
10if response.isSome:
11 let apiResp = response.get()
12 echo "Unlocked comment ", commentId, " for tenant ", tenantId
13else:
14 echo "Unlock failed, HTTP status: ", $httpResponse.status
15

取消置頂評論 Internal Link

參數

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

回應

回傳: Option[ChangeCommentPinStatusResponse]

範例

unPinComment 範例
Copy Copy
1
2let (response, httpResponse) = client.unPinComment(tenantId = "my-tenant-123", commentId = "cmt-987654321", broadcastId = "", sso = "")
3if response.isSome:
4 let result = response.get()
5 echo "Unpinned comment:", $result
6else:
7 echo "Unpin failed, HTTP status:", $httpResponse.status
8

更新評論 Internal Link

參數

NameTypeRequiredDescription
tenantIdstring
idstring
updatableCommentParamsUpdatableCommentParams
contextUserIdstring
doSpamCheckbool
isLivebool

回應

傳回: Option[APIEmptyResponse]

範例

updateComment 範例
Copy Copy
1
2let (response, httpResponse) = client.updateComment(
3 tenantId = "my-tenant-123",
4 id = "cmt-987654",
5 updatableCommentParams = UpdatableCommentParams(
6 text = "Updated comment: corrected facts and clarified wording.",
7 isApproved = true,
8 tags = @["news", "update"]
9 ),
10 contextUserId = "user-456",
11 doSpamCheck = true,
12 isLive = true
13)
14
15if response.isSome:
16 let apiResp = response.get()
17 discard apiResp
18

對評論投票 Internal Link

參數

NameTypeRequiredDescription
tenantIdstringYes
commentIdstringYes
urlIdstringYes
broadcastIdstringNo
voteBodyParamsVoteBodyParamsNo
sessionIdstringNo
ssostringNo

回應

回傳: Option[VoteResponse]

範例

voteComment 範例
Copy Copy
1
2let (response, httpResponse) = client.voteComment(
3 tenantId = "my-tenant-123",
4 commentId = "cmt-987654321",
5 urlId = "news/article-2026-inflation",
6 broadcastId = "",
7 voteBodyParams = VoteBodyParams(),
8 sessionId = "",
9 sso = ""
10)
11
12if response.isSome:
13 let voteResp = response.get()
14 discard voteResp
15else:
16 discard httpResponse
17

取得使用者的評論 Internal Link

參數

NameTypeRequiredDescription
userIdstring
directionSortDirections
repliesToUserIdstring
pagefloat64
includei10nbool
localestring
isCrawlerbool

回應

回傳: Option[GetCommentsForUserResponse]

範例

getCommentsForUser 範例
Copy Copy
1
2let (response, httpResponse) = client.getCommentsForUser(
3 userId = "user-8421",
4 direction = SortDirections.Newest,
5 repliesToUserId = "",
6 page = 1.0,
7 includei10n = true,
8 locale = "en-US",
9 isCrawler = false
10)
11
12if response.isSome:
13 let comments = response.get()
14 discard comments
15

新增網域設定 Internal Link


參數

名稱型別必填說明
tenantIdstring
addDomainConfigParamsAddDomainConfigParams

回應

回傳:Option[AddDomainConfigResponse]

範例

addDomainConfig 範例
Copy Copy
1
2let config = AddDomainConfigParams(
3 domain: "comments.example-news.com",
4 enabled: true,
5 allowedOrigins: @["https://www.example-news.com", "https://m.example-news.com"],
6 commentsPath: "/news/world/election-coverage",
7 priority: 5
8)
9let (response, httpResponse) = client.addDomainConfig(tenantId = "my-tenant-123", addDomainConfigParams = config)
10if response.isSome:
11 let created = response.get()
12 echo "Created domain config:", created
13else:
14 echo "Failed to create domain config, HTTP status:", httpResponse.status.code
15

刪除網域設定 Internal Link

參數

NameTypeRequiredDescription
tenantIdstring
domainstring

回應

回傳: Option[DeleteDomainConfigResponse]

範例

deleteDomainConfig 範例
Copy Copy
1
2let (response, httpResponse) = client.deleteDomainConfig(tenantId = "my-tenant-123", domain = "news.example.com")
3if response.isSome:
4 let deleted = response.get()
5 echo "DeleteDomainConfig succeeded for tenant ", "my-tenant-123"
6else:
7 echo "DeleteDomainConfig failed. HTTP status: ", $httpResponse.status
8

取得網域設定 Internal Link

參數

名稱型別必填說明
tenantIdstring
domainstring

回應

回傳:Option[GetDomainConfigResponse]

範例

getDomainConfig 範例
Copy Copy
1
2let (response, httpResponse) = client.getDomainConfig(tenantId = "my-tenant-123", domain = "news/top-story-2026")
3if response.isSome:
4 let cfg = response.get()
5 discard cfg
6else:
7 discard httpResponse
8

取得所有網域設定 Internal Link

參數

名稱類型必填描述
tenantIdstring

回應

回傳:Option[GetDomainConfigsResponse]

範例

getDomainConfigs 範例
Copy Copy
1
2let (response, httpResponse) = client.getDomainConfigs(tenantId = "my-tenant-123")
3if response.isSome:
4 let domainConfigs = response.get()
5 echo "Received domain configs for tenant my-tenant-123"
6 echo domainConfigs
7else:
8 echo "No domain configs returned"
9

部分更新網域設定 Internal Link

參數

NameTypeRequiredDescription
tenantIdstring
domainToUpdatestring
patchDomainConfigParamsPatchDomainConfigParams

回應

回傳: Option[PatchDomainConfigResponse]

範例

patchDomainConfig 範例
Copy Copy
1
2let patchParams: PatchDomainConfigParams = PatchDomainConfigParams(
3 allowedOrigins = @["https://news.example.com", "https://cdn.news.com"],
4 enableComments = true,
5 moderationRequired = false,
6 maxCommentLength = 2000,
7 primaryDomain = "comments.news-site.com"
8)
9let (response, httpResponse) = client.patchDomainConfig(
10 tenantId = "my-tenant-123",
11 domainToUpdate = "comments.news-site.com",
12 patchDomainConfigParams = patchParams
13)
14if response.isSome:
15 let cfg = response.get()
16 echo "Patched domain config received:", cfg
17else:
18 echo "No response body, HTTP status:", httpResponse.statusCode
19

取代網域設定 Internal Link

參數

名稱類型必填說明
tenantIdstring
domainToUpdatestring
updateDomainConfigParamsUpdateDomainConfigParams

回應

回傳: Option[PutDomainConfigResponse]

範例

putDomainConfig 範例
Copy Copy
1
2let (response, httpResponse) = client.putDomainConfig(
3 tenantId = "my-tenant-123",
4 domainToUpdate = "blog.example.com",
5 updateDomainConfigParams = UpdateDomainConfigParams(
6 allowAnonymous = false,
7 moderationEnabled = true,
8 maxCommentLength = 800,
9 allowedOrigins = @["https://blog.example.com", "https://cdn.blog.example.com"],
10 enableThreadedComments = true
11 )
12)
13
14if response.isSome:
15 let cfg = response.get()
16 echo cfg
17else:
18 echo "Failed to update domain config, HTTP status: ", httpResponse.status
19

建立電子郵件範本 Internal Link

參數

NameTypeRequiredDescription
tenantIdstring
createEmailTemplateBodyCreateEmailTemplateBody

回應

回傳: Option[CreateEmailTemplateResponse]

範例

createEmailTemplate 範例
Copy Copy
1
2let (response, httpResponse) = client.createEmailTemplate(tenantId = "my-tenant-123",
3 createEmailTemplateBody = CreateEmailTemplateBody(
4 name = "Weekly Newsletter",
5 subject = "This Week on NewsSite",
6 html = "<h1>Latest updates</h1><p>Read our latest article.</p>",
7 fromAddress = "no-reply@newssite.com",
8 isDefault = false,
9 tags = @["news", "weekly"]
10 )
11)
12
13if response.isSome:
14 let template = response.get()
15 echo "Created email template id: ", template.id
16

刪除電子郵件範本 Internal Link

參數

NameTypeRequiredDescription
tenantIdstring
idstring

回應

回傳: Option[APIEmptyResponse]

範例

deleteEmailTemplate 範例
Copy Copy
1
2let (response, httpResponse) = client.deleteEmailTemplate(
3 tenantId = "my-tenant-123",
4 id = "welcome-email-template-001"
5)
6
7if response.isSome:
8 let apiEmpty = response.get()
9 discard apiEmpty
10 echo "Email template deleted successfully"
11else:
12 echo "No response body"
13

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


參數

NameTypeRequiredDescription
tenantIdstring
idstring
errorIdstring

回應

回傳: Option[APIEmptyResponse]

範例

deleteEmailTemplateRenderError 範例
Copy Copy
1
2let (response, httpResponse) = client.deleteEmailTemplateRenderError(tenantId = "my-tenant-123", id = "welcome-email-template", errorId = "err-20250615-01")
3if response.isSome:
4 let emptyResp = response.get()
5 echo "Deleted render error, tenant:", "my-tenant-123"
6 echo "HTTP status:", httpResponse.status
7else:
8 echo "No body returned, HTTP status:", httpResponse.status
9

取得電子郵件範本 Internal Link

參數

名稱類型必填說明
tenantIdstring
idstring

回傳

回傳: Option[GetEmailTemplateResponse]

範例

getEmailTemplate 範例
Copy Copy
1
2let (response, httpResponse) = client.getEmailTemplate(tenantId = "my-tenant-123", id = "welcome-email-01")
3if response.isSome:
4 let template = response.get()
5 discard template
6

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

參數

名稱類型必填說明
tenantIdstring

回應

回傳: Option[GetEmailTemplateDefinitionsResponse]

範例

getEmailTemplateDefinitions 範例
Copy Copy
1
2let (response, httpResponse) = client.getEmailTemplateDefinitions(tenantId = "my-tenant-123")
3if response.isSome:
4 let definitions = response.get()
5 echo "Email template definitions for my-tenant-123: ", definitions
6else:
7 echo "Failed to retrieve templates, HTTP status: ", httpResponse.status
8

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

參數

NameTypeRequiredDescription
tenantIdstring
idstring
skipfloat64

回應

回傳:Option[GetEmailTemplateRenderErrorsResponse]

範例

getEmailTemplateRenderErrors 範例
Copy Copy
1
2let (response, httpResponse) = client.getEmailTemplateRenderErrors(tenantId = "my-tenant-123", id = "", skip = 0.0)
3if response.isSome:
4 let templateErrors = response.get()
5 discard templateErrors
6else:
7 discard httpResponse
8

取得電子郵件範本列表 Internal Link


參數

NameTypeRequiredDescription
tenantIdstring
skipfloat64

回應

回傳: Option[GetEmailTemplatesResponse]

範例

getEmailTemplates 範例
Copy Copy
1
2let (response, httpResponse) = client.getEmailTemplates(tenantId = "my-tenant-123", skip = 0.0)
3if response.isSome:
4 let templates = response.get()
5 echo templates
6else:
7 echo "No email templates available"
8

渲染電子郵件範本 Internal Link

參數

名稱類型必填描述
tenantIdstring
renderEmailTemplateBodyRenderEmailTemplateBody
localestring

回應

回傳: Option[RenderEmailTemplateResponse]

範例

renderEmailTemplate 範例
Copy Copy
1
2let (response, httpResponse) = client.renderEmailTemplate(
3 tenantId = "my-tenant-123",
4 renderEmailTemplateBody = RenderEmailTemplateBody(),
5 locale = "en-US"
6)
7
8if response.isSome:
9 let rendered = response.get()
10 echo rendered
11

更新電子郵件範本 Internal Link

參數

NameTypeRequiredDescription
tenantIdstringYes
idstringNo
updateEmailTemplateBodyUpdateEmailTemplateBodyNo

回應

回傳: Option[APIEmptyResponse]

範例

updateEmailTemplate 範例
Copy Copy
1
2let updateBody = UpdateEmailTemplateBody(
3 subject = "Welcome to Newsly",
4 html = "<p>Thanks for joining Newsly! Visit https://newsly.example to get started.</p>",
5 fromAddress = "no-reply@newsly.example",
6 fromName = "Newsly Team",
7 enabled = true
8)
9let (response, httpResponse) = client.updateEmailTemplate(tenantId = "my-tenant-123", id = "welcome-email", updateEmailTemplateBody = updateBody)
10if response.isSome:
11 let result = response.get()
12 discard result
13else:
14 discard httpResponse.statusCode
15

取得事件日誌 Internal Link

req tenantId urlId userIdWS

參數

NameTypeRequiredDescription
tenantIdstring
urlIdstring
userIdWSstring
startTimeint64
endTimeint64

回應

回傳:Option[GetEventLogResponse]

範例

getEventLog 範例
Copy Copy
1
2let (response, httpResponse) = client.getEventLog(
3 tenantId = "my-tenant-123",
4 urlId = "news/article-2026-solar-panels",
5 userIdWS = "user-456",
6 startTime = 1688000000'i64,
7 endTime = 1688086400'i64
8)
9if response.isSome:
10 let eventLog = response.get()
11 discard eventLog
12

取得全域事件日誌 Internal Link

req tenantId urlId userIdWS

參數

NameTypeRequiredDescription
tenantIdstring
urlIdstring
userIdWSstring
startTimeint64
endTimeint64

回應

回傳: Option[GetEventLogResponse]

範例

getGlobalEventLog 範例
Copy Copy
1
2let (response, httpResponse) = client.getGlobalEventLog(
3 tenantId = "my-tenant-123",
4 urlId = "news/article-2026-06-19",
5 userIdWS = "user-987",
6 startTime = int64(1622505600),
7 endTime = int64(1625097600)
8)
9if response.isSome:
10 let eventLog = response.get()
11 echo eventLog, httpResponse.statusCode
12

建立動態貼文 Internal Link

參數

名稱類型必填描述
tenantIdstring
createFeedPostParamsCreateFeedPostParams
broadcastIdstring
isLivebool
doSpamCheckbool
skipDupCheckbool

回應

回傳: Option[CreateFeedPostsResponse]

範例

createFeedPost 範例
Copy Copy
1
2let postParams = CreateFeedPostParams(
3 title = "Major Acquisition by TechCorp",
4 content = "TechCorp has acquired SoftWorks in a deal valued at $1.2B, creating a new market leader.",
5 url = "news/tech/major-acquisition",
6 tags = @["business", "technology"],
7 authorId = "journalist-321"
8)
9
10let (response, httpResponse) = client.createFeedPost(
11 tenantId = "my-tenant-123",
12 createFeedPostParams = postParams,
13 broadcastId = "",
14 isLive = false,
15 doSpamCheck = false,
16 skipDupCheck = false
17)
18
19if response.isSome:
20 let created = response.get()
21 discard created
22

建立公開動態貼文 Internal Link

參數

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

回應

回傳:Option[CreateFeedPostResponse]

範例

createFeedPostPublic 範例
Copy Copy
1
2let params = CreateFeedPostParams(
3 title = "Breaking: Major Update on Product X",
4 content = "Today we released Product X v2.0 with performance improvements and bug fixes.",
5 author = "jane.doe",
6 tags = @["product", "release", "v2"],
7 isPinned = false
8)
9
10let (response, httpResponse) = client.createFeedPostPublic(tenantId = "my-tenant-123", createFeedPostParams = params, broadcastId = "", sso = "")
11
12if response.isSome:
13 let created = response.get()
14 echo "Created feed post:", created
15else:
16 echo "Failed to create feed post; HTTP status:", httpResponse.status
17

刪除公開動態貼文 Internal Link

參數

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

回應

回傳: Option[DeleteFeedPostPublicResponse]

範例

deleteFeedPostPublic 範例
Copy Copy
1
2let (response, httpResponse) = client.deleteFeedPostPublic(tenantId = "my-tenant-123", postId = "", broadcastId = "", sso = "")
3if response.isSome:
4 let deleted = response.get()
5 echo "Delete successful"
6else:
7 echo "Delete failed"
8

取得動態貼文 Internal Link

req tenantId afterId

參數

名稱類型必填說明
tenantIdstring
afterIdstring
limitint
tagsseq[string]

回應

回傳: Option[GetFeedPostsResponse]

範例

getFeedPosts 範例
Copy Copy
1
2let (response, httpResponse) = client.getFeedPosts(
3 tenantId = "my-tenant-123",
4 afterId = "",
5 limit = 0,
6 tags = @[]
7)
8if response.isSome:
9 let feed = response.get()
10 echo "Feed retrieved for tenant my-tenant-123"
11

取得公開動態貼文 Internal Link

req tenantId afterId

Parameters

NameTypeRequiredDescription
tenantIdstring
afterIdstring
limitint
tagsseq[string]
ssostring
isCrawlerbool
includeUserInfobool

Response

回傳:Option[PublicFeedPostsResponse]

Example

getFeedPostsPublic 範例
Copy Copy
1
2let (response, httpResponse) = client.getFeedPostsPublic(
3 tenantId = "my-tenant-123",
4 afterId = "",
5 limit = 0,
6 tags = @[],
7 sso = "",
8 isCrawler = false,
9 includeUserInfo = false
10)
11if response.isSome:
12 let feed = response.get()
13 discard feed
14

取得動態貼文統計 Internal Link

參數

名稱類型必填說明
tenantIdstring
postIdsseq[string]
ssostring

回應

回傳:Option[FeedPostsStatsResponse]

範例

getFeedPostsStats 範例
Copy Copy
1
2let (response, httpResponse) = client.getFeedPostsStats(tenantId = "my-tenant-123", postIds = @["news/article-2026", "opinion/market-trends"], sso = "")
3if response.isSome:
4 let stats = response.get()
5 echo "Received feed posts stats for tenant:", " my-tenant-123"
6 discard stats
7

取得使用者公開反應 Internal Link

參數

名稱類型必填描述
tenantIdstring
postIdsseq[string]
ssostring

回應

回傳: Option[UserReactsResponse]

範例

getUserReactsPublic 範例
Copy Copy
1
2let (response, httpResponse) = client.getUserReactsPublic(
3 tenantId = "my-tenant-123",
4 postIds = @["news/article-2026", "blog/opinion-987"],
5 sso = ""
6)
7if response.isSome:
8 let reacts = response.get()
9 echo "Received user reacts for tenant: ", "my-tenant-123"
10

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


參數

NameTypeRequiredDescription
tenantIdstring
postIdstring
reactBodyParamsReactBodyParams
isUndobool
broadcastIdstring
ssostring

回應

回傳: Option[ReactFeedPostResponse]

範例

reactFeedPostPublic 範例
Copy Copy
1
2let (response, httpResponse) = client.reactFeedPostPublic(
3 tenantId = "my-tenant-123",
4 postId = "news/article-2026-06-19",
5 reactBodyParams = ReactBodyParams(reactType = "heart", tags = @["breaking", "editorial"]),
6 isUndo = false,
7 broadcastId = "broadcast-789",
8 sso = "sso-token-abc123"
9)
10if response.isSome:
11 let react = response.get()
12 echo react
13else:
14 echo "No response from reactFeedPostPublic, HTTP status:", httpResponse.statusCode
15

更新動態貼文 Internal Link

參數

名稱類型必填說明
tenantIdstring
idstring
feedPostFeedPost

回應

回傳: Option[APIEmptyResponse]

範例

updateFeedPost 範例
Copy Copy
1
2let feedPost: FeedPost = FeedPost(title: "City Council Approves New Waterfront Park",
3 content: "The council voted 5-2 to approve funding and a timeline for construction.",
4 tags: @["local", "parks", "city"],
5 published: true)
6
7let (response, httpResponse) = client.updateFeedPost(tenantId = "my-tenant-123", id = "post-456", feedPost = feedPost)
8
9if response.isSome:
10 let apiResp = response.get()
11 echo "Feed post updated successfully"
12 echo apiResp
13else:
14 echo "Failed to update feed post"
15 echo httpResponse
16

更新公開動態貼文 Internal Link

參數

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

回應

傳回: Option[CreateFeedPostResponse]

範例

updateFeedPostPublic 範例
Copy Copy
1
2let (response, httpResponse) = client.updateFeedPostPublic(
3 tenantId = "my-tenant-123",
4 postId = "post-456",
5 updateFeedPostParams = UpdateFeedPostParams(title = "Weekly Product Update", content = "Released bug fixes and performance improvements in v2.1.", tags = @["release", "product"], pinned = false),
6 broadcastId = "",
7 sso = ""
8)
9if response.isSome:
10 let created = response.get()
11 echo "Updated feed post id: ", created.postId
12else:
13 echo "Update failed with HTTP status: ", httpResponse.status
14

公開檢舉評論 Internal Link

參數

NameTypeRequiredDescription
tenantIdstring
commentIdstring
isFlaggedbool
ssostring

回應

回傳: Option[APIEmptyResponse]

範例

flagCommentPublic 範例
Copy Copy
1
2let (response, httpResponse) = client.flagCommentPublic(
3 tenantId = "my-tenant-123",
4 commentId = "cmt-456789",
5 isFlagged = true,
6 sso = ""
7)
8
9if response.isSome:
10 let apiResp = response.get()
11 discard apiResp
12else:
13 discard httpResponse
14

取得大型動圖 Internal Link

參數

NameTypeRequiredDescription
tenantIdstring
largeInternalURLSanitizedstring

回傳

回傳: Option[GifGetLargeResponse]

範例

getGifLarge 範例
Copy Copy
1
2let (response, httpResponse) = client.getGifLarge(tenantId = "news-tenant-42", largeInternalURLSanitized = "")
3if response.isSome:
4 let gif = response.get()
5 echo "Received GifGetLargeResponse"
6 discard gif
7else:
8 echo "No gif returned, HTTP status: " & $httpResponse.status
9

搜尋動圖 Internal Link

參數

NameTypeRequiredDescription
tenantIdstring
searchstring
localestring
ratingstring
pagefloat64

回應

回傳: Option[GetGifsSearchResponse]

範例

getGifsSearch 範例
Copy Copy
1
2let (response, httpResponse) = client.getGifsSearch(
3 tenantId = "my-tenant-123",
4 search = "funny cat",
5 locale = "en-US",
6 rating = "PG",
7 page = 1.0
8)
9
10if response.isSome:
11 let gifs = response.get()
12 echo "Fetched GIFs response:", gifs
13

取得熱門動圖 Internal Link

參數

名稱類型必填描述
tenantIdstring
localestring
ratingstring
pagefloat64

回應

回傳: Option[GetGifsTrendingResponse]

範例

getGifsTrending 範例
Copy Copy
1
2let (response, httpResponse) = client.getGifsTrending(tenantId = "my-tenant-123",
3 locale = "en-US",
4 rating = "pg-13",
5 page = 1.0)
6if response.isSome:
7 let trending = response.get()
8

新增標籤 Internal Link

參數

NameTypeRequiredDescription
tenantIdstring
createHashTagBodyCreateHashTagBody

回應

回傳: Option[CreateHashTagResponse]

範例

addHashTag 範例
Copy Copy
1
2let (response, httpResponse) = client.addHashTag(tenantId = "my-tenant-123",
3 createHashTagBody = CreateHashTagBody(name = "Breaking News",
4 slug = "breaking-news",
5 description = "Major breaking news items",
6 color = "#ff0000",
7 isTrending = true,
8 aliases = @["breaking", "news"]))
9if response.isSome:
10 let created = response.get()
11 echo created
12

批次新增標籤 Internal Link

參數

名稱類型必填說明
tenantIdstring
bulkCreateHashTagsBodyBulkCreateHashTagsBody

回傳

回傳: Option[BulkCreateHashTagsResponse]

範例

addHashTagsBulk 範例
Copy Copy
1
2let (response, httpResponse) = client.addHashTagsBulk(tenantId = "my-tenant-123", bulkCreateHashTagsBody = BulkCreateHashTagsBody(hashTags = @["news", "breaking", "politics"], replaceExisting = false))
3if response.isSome:
4 let result = response.get()
5 echo "Bulk tags response:", result
6else:
7 echo "No response body, HTTP status:", httpResponse.statusCode
8

刪除標籤 Internal Link

參數

名稱類型必填說明
tagstring
tenantIdstring
deleteHashTagRequestBodyDeleteHashTagRequestBody

回應

回傳: Option[APIEmptyResponse]

範例

deleteHashTag 範例
Copy Copy
1
2let (response, httpResponse) = client.deleteHashTag(
3 tag = "",
4 tenantId = "my-tenant-123",
5 deleteHashTagRequestBody = DeleteHashTagRequestBody()
6)
7
8if response.isSome:
9 let emptyResp = response.get()
10 echo "Deleted hashtag for tenant my-tenant-123; response:", $emptyResp, " status:", $httpResponse.status
11else:
12 echo "No response body; status:", $httpResponse.status
13

取得標籤列表 Internal Link

參數

名稱類型必填描述
tenantIdstring
pagefloat64

回應

回傳: Option[GetHashTagsResponse]

範例

getHashTags 範例
Copy Copy
1
2let (response, httpResponse) = client.getHashTags(tenantId = "news-portal-987", page = 2.0)
3if response.isSome:
4 let tagsResp = response.get()
5 echo "Received hashtags response"
6else:
7 echo "No hashtags returned"
8

部分更新標籤 Internal Link

參數

NameTypeRequiredDescription
tagstring
tenantIdstring
updateHashTagBodyUpdateHashTagBody

回應

回傳: Option[UpdateHashTagResponse]

範例

patchHashTag 範例
Copy Copy
1
2let (response, httpResponse) = client.patchHashTag(tag = "breaking-news", tenantId = "my-tenant-123", updateHashTagBody = UpdateHashTagBody())
3if response.isSome:
4 let updatedHashTag = response.get()
5 echo updatedHashTag
6

刪除審核投票 Internal Link

參數

名稱類型必填說明
commentIdstringYes
voteIdstringNo
ssostringNo

回應

回傳: Option[VoteDeleteResponse]

範例

deleteModerationVote 範例
Copy Copy
1
2let (response, httpResponse) = client.deleteModerationVote(commentId = "my-tenant-123/news/article-title/comment-987", voteId = "vote-456", sso = "sso-token-abc")
3if response.isSome:
4 let voteResp = response.get()
5 echo "Vote deleted:", voteResp
6else:
7 echo "Delete failed:", httpResponse
8

取得 API 評論 Internal Link

參數

名稱類型必填說明
pagefloat64
countfloat64
textSearchstring
byIPFromCommentstring
filtersstring
searchFiltersstring
sortsstring
demobool
ssostring

回應

回傳: Option[ModerationAPIGetCommentsResponse]

範例

getApiComments 範例
Copy Copy
1
2let (response, httpResponse) = client.getApiComments(
3 page = 1.0,
4 count = 25.0,
5 textSearch = "opinion on climate summit",
6 byIPFromComment = "198.51.100.23",
7 filters = "status:approved",
8 searchFilters = "section:world",
9 sorts = "-createdAt",
10 demo = false,
11 sso = "sso-user-982bf"
12)
13
14if response.isSome:
15 let commentsResp = response.get()
16 echo "Retrieved comments response"
17else:
18 echo "No comments returned, HTTP status: ", httpResponse.status
19

取得 API 匯出狀態 Internal Link

參數

名稱型別必填說明
batchJobIdstring
ssostring

回應

回傳: Option[ModerationExportStatusResponse]

範例

getApiExportStatus 範例
Copy Copy
1
2let (response, httpResponse) = client.getApiExportStatus(batchJobId = "export-job-2026-06-01", sso = "sso-abc123token")
3if response.isSome:
4 let exportStatus = response.get()
5 echo repr(exportStatus)
6else:
7 echo "No export status available, HTTP code: ", httpResponse.statusCode
8

取得 API IDs Internal Link

參數

名稱型別必填描述
textSearchstring
byIPFromCommentstring
filtersstring
searchFiltersstring
afterIdstring
demobool
ssostring

回應

回傳: Option[ModerationAPIGetCommentIdsResponse]

範例

getApiIds 範例
Copy Copy
1
2let (response, httpResponse) = client.getApiIds(
3 textSearch = "urgent moderation review",
4 byIPFromComment = "203.0.113.45",
5 filters = "status:pending,flagged",
6 searchFilters = "author:jane.doe@example.com",
7 afterId = "cmt_9f8e7d6a",
8 demo = false,
9 sso = "sso-token-6b7f9a"
10)
11
12if response.isSome:
13 let idsResp = response.get()
14 echo idsResp
15

取得從評論封禁的使用者 Internal Link

參數

NameTypeRequiredDescription
commentIdstring
ssostring

回應

回傳: Option[GetBannedUsersFromCommentResponse]

範例

getBanUsersFromComment 範例
Copy Copy
1
2let (response, httpResponse) = client.getBanUsersFromComment(commentId = "comment-98765", sso = "")
3if response.isSome:
4 let bannedResp = response.get()
5 discard bannedResp
6else:
7 echo "No banned users found or request failed"
8

取得評論封禁狀態 Internal Link

參數

NameTypeRequiredDescription
commentIdstring
ssostring

回應

回傳: Option[GetCommentBanStatusResponse]

範例

getCommentBanStatus 範例
Copy Copy
1
2let (response, httpResponse) = client.getCommentBanStatus(commentId = "cmt-987654321", sso = "")
3
4if response.isSome:
5 let banStatus = response.get()
6 echo "Ban status for comment cmt-987654321: ", banStatus
7else:
8 echo "No ban status returned for comment cmt-987654321"
9

取得評論子項 Internal Link

參數

NameTypeRequiredDescription
commentIdstring
ssostring

回應

回傳: Option[ModerationAPIChildCommentsResponse]

範例

getCommentChildren 範例
Copy Copy
1
2let (response, httpResponse) = client.getCommentChildren(commentId = "comment-98765", sso = "")
3if response.isSome:
4 let childResp = response.get()
5 discard childResp
6

取得計數 Internal Link

參數

NameTypeRequiredDescription
textSearchstring
byIPFromCommentstring
filterstring
searchFiltersstring
demobool
ssostring

回應

回傳: Option[ModerationAPICountCommentsResponse]

範例

getCount 範例
Copy Copy
1
2let (response, httpResponse) = client.getCount(
3 textSearch = "climate change",
4 byIPFromComment = "203.0.113.5",
5 filter = "status:approved",
6 searchFilters = "author:john.doe@example.com;tag:opinion",
7 demo = false,
8 sso = "sso_eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9"
9)
10if response.isSome:
11 let countResp = response.get()
12 discard countResp
13 echo "Count response received"
14else:
15 echo "No count data returned"
16

取得多項計數 Internal Link

參數

名稱類型是否必填描述
ssostring

回應

回傳: Option[GetBannedUsersCountResponse]

範例

getCounts 範例
Copy Copy
1
2let (response, httpResponse) = client.getCounts(sso = "sso_my-tenant-123_token_AbCdEf123456")
3if response.isSome:
4 let counts = response.get()
5 echo counts
6else:
7 echo "Request failed with status:", httpResponse.status
8

取得日誌 Internal Link

參數

名稱類型必要描述
commentIdstring
ssostring

回應

回傳: Option[ModerationAPIGetLogsResponse]

範例

getLogs 範例
Copy Copy
1
2let (response, httpResponse) = client.getLogs(commentId = "cmt-8471f2d3", sso = "")
3if response.isSome:
4 let logs = response.get()
5 echo "Fetched logs:", logs
6

取得手動徽章 Internal Link

參數

NameTypeRequiredDescription
ssostring

回應

回傳: Option[GetTenantManualBadgesResponse]

範例

getManualBadges 範例
Copy Copy
1
2let (response, httpResponse) = client.getManualBadges(sso = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9")
3if response.isSome:
4 let badges = response.get()
5 echo "Manual badges received:"
6 echo badges
7else:
8 echo "No manual badges returned."
9 echo httpResponse
10

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

參數

NameTypeRequiredDescription
badgesUserIdstring
commentIdstring
ssostring

回應

回傳:Option[GetUserManualBadgesResponse]

範例

getManualBadgesForUser 範例
Copy Copy
1
2let (response, httpResponse) = client.getManualBadgesForUser(
3 badgesUserId = "user-98765",
4 commentId = "comment-0a1b2c3d",
5 sso = "sso-eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9"
6)
7if response.isSome:
8 let badges = response.get()
9 echo "Received manual badges for user"
10 echo "HTTP status: ", httpResponse.status
11

取得審核用評論 Internal Link

參數

名稱類型必填描述
commentIdstring
includeEmailbool
includeIPbool
ssostring

回應

回傳: Option[ModerationAPICommentResponse]

範例

getModerationComment 範例
Copy Copy
1
2let (response, httpResponse) = client.getModerationComment(commentId = "cmt-8f3b2a9d", includeEmail = false, includeIP = false, sso = "")
3if response.isSome:
4 let comment = response.get()
5 discard comment
6else:
7 echo "No moderation comment returned"
8

取得審核用評論文字 Internal Link


參數

名稱類型必要描述
commentIdstring
ssostring

回應

回傳: Option[GetCommentTextResponse]

範例

getModerationCommentText 範例
Copy Copy
1
2let (response, httpResponse) = client.getModerationCommentText(commentId = "comment-9f8b7a6c", sso = "")
3if response.isSome:
4 let commentData = response.get()
5 echo "Moderation comment text retrieved"
6else:
7 echo "No moderation comment text available"
8

取得預封鎖摘要 Internal Link

參數

NameTypeRequiredDescription
commentIdstring
includeByUserIdAndEmailbool
includeByIPbool
includeByEmailDomainbool
ssostring

回應

回傳: Option[PreBanSummary]

範例

getPreBanSummary 範例
Copy Copy
1
2let commentId = "cmt-7423"
3let (response, httpResponse) = client.getPreBanSummary(
4 commentId = commentId,
5 includeByUserIdAndEmail = false,
6 includeByIP = false,
7 includeByEmailDomain = false,
8 sso = ""
9)
10if response.isSome:
11 let preBanSummary = response.get()
12 discard preBanSummary
13else:
14 discard httpResponse
15

取得搜尋評論摘要 Internal Link

參數

名稱型別必填說明
valuestring
filtersstring
searchFiltersstring
ssostring

回應

回傳: Option[ModerationCommentSearchResponse]

範例

getSearchCommentsSummary 範例
Copy Copy
1
2let (response, httpResponse) = client.getSearchCommentsSummary(
3 value = "news/climate-change-2026",
4 filters = "{\"tenantId\":\"my-tenant-123\",\"siteId\":\"main-site\",\"status\":\"approved\"}",
5 searchFilters = "author:journalist@news.com OR content:climate",
6 sso = "sso-xyz-7890"
7)
8if response.isSome:
9 let summary = response.get()
10 echo "Received summary: ", $summary
11else:
12 echo "No summary returned, HTTP response: ", $httpResponse
13

取得搜尋頁面結果 Internal Link

參數

名稱類型必填說明
valuestring
ssostring

回應

回傳: Option[ModerationPageSearchResponse]

範例

getSearchPages 範例
Copy Copy
1
2let (response, httpResponse) = client.getSearchPages(value = "news/politics/election-2024", sso = "sso-user-7f3b9c")
3if response.isSome:
4 let pageSearch = response.get()
5 echo "Moderation page search returned"
6else:
7 echo "No moderation pages found"
8

取得搜尋網站結果 Internal Link

參數

名稱類型必填說明
valuestring
ssostring

回應

回傳: Option[ModerationSiteSearchResponse]

範例

getSearchSites 範例
Copy Copy
1
2let (response, httpResponse) = client.getSearchSites(value = "news/2026-olympics", sso = "sso-user-9876-token")
3if response.isSome:
4 let searchResponse: ModerationSiteSearchResponse = response.get()
5 echo "Found sites for search:", searchResponse
6

取得搜尋建議 Internal Link

參數

名稱類型必填描述
textSearchstring
ssostring

回應

回傳: Option[ModerationSuggestResponse]

範例

getSearchSuggest 範例
Copy Copy
1
2let (response, httpResponse) = client.getSearchSuggest(textSearch = "suspicious comment with spammy links", sso = "sso-user-789")
3if response.isSome:
4 let suggest = response.get()
5 echo "ModerationSuggestResponse:"
6 echo suggest
7else:
8 echo "No moderation suggestions returned. HTTP status: ", httpResponse.status
9

取得搜尋使用者 Internal Link

參數

名稱型別必要描述
valuestring
ssostring

回應

回傳: Option[ModerationUserSearchResponse]

範例

getSearchUsers 範例
Copy Copy
1
2let (response, httpResponse) = client.getSearchUsers(value = "john.doe@example.com", sso = "sso-acme-789")
3if response.isSome:
4 let searchRes = response.get()
5 echo "Search result:", searchRes
6else:
7 echo "No users found"
8

取得信任度指標 Internal Link

參數

名稱類型必填說明
userIdstring
ssostring

回應

回傳: Option[GetUserTrustFactorResponse]

範例

getTrustFactor 範例
Copy Copy
1
2let (response, httpResponse) = client.getTrustFactor(userId = "user-1001", sso = "sso-token-6f7d9c")
3if response.isSome:
4 let trust = response.get()
5 echo "Received trust factor for user-1001"
6else:
7 echo "No trust factor returned, HTTP status: ", $httpResponse.status
8

取得使用者封禁偏好 Internal Link

參數

名稱類型必填說明
ssostring

回應

回傳: Option[APIModerateGetUserBanPreferencesResponse]

範例

getUserBanPreference 範例
Copy Copy
1
2let (response, httpResponse) = client.getUserBanPreference(sso = "sso-jwt-7f3a9b")
3if response.isSome:
4 let prefs = response.get()
5 echo "User ban preferences:", prefs
6else:
7 echo "No ban preference found"
8

取得使用者內部資料 Internal Link

參數

NameTypeRequiredDescription
commentIdstring
ssostring

回應

回傳: Option[GetUserInternalProfileResponse]

範例

getUserInternalProfile 範例
Copy Copy
1
2let (response, httpResponse) = client.getUserInternalProfile(commentId = "cmt-2026-00042", sso = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyIjoibXl1c2VyIn0.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c")
3if response.isSome:
4 let profile = response.get()
5 discard profile
6

調整評論投票 Internal Link

參數

名稱類型必填描述
commentIdstring
adjustCommentVotesParamsAdjustCommentVotesParams
ssostring

回應

回傳: Option[AdjustVotesResponse]

範例

postAdjustCommentVotes 範例
Copy Copy
1
2let (response, httpResponse) = client.postAdjustCommentVotes(commentId = "cmt-987654", adjustCommentVotesParams = nil, sso = "sso-token-abc123")
3if response.isSome:
4 let adjusted = response.get()
5 discard adjusted
6

提交 API 匯出 Internal Link

參數

NameTypeRequiredDescription
textSearchstring
byIPFromCommentstring
filtersstring
searchFiltersstring
sortsstring
ssostring

回傳

回傳: Option[ModerationExportResponse]

範例

postApiExport 範例
Copy Copy
1
2let (response, httpResponse) = client.postApiExport(
3 textSearch = "offensive language and spam",
4 byIPFromComment = "203.0.113.45",
5 filters = "{\"status\":\"pending\",\"severity\":\"high\"}",
6 searchFilters = "authorEmail:editor@news-site.com",
7 sorts = "-createdAt",
8 sso = "sso-session-token-9f8b7c"
9)
10if response.isSome:
11 let exportResp = response.get()
12 echo "Moderation export received:", exportResp
13else:
14 echo "No export returned, HTTP status:", httpResponse.status.code
15

從評論封禁使用者 Internal Link

參數

NameTypeRequiredDescription
commentIdstring
banEmailbool
banEmailDomainbool
banIPbool
deleteAllUsersCommentsbool
bannedUntilstring
isShadowBanbool
updateIdstring
banReasonstring
ssostring

回傳

回傳: Option[BanUserFromCommentResult]

範例

postBanUserFromComment 範例
Copy Copy
1
2let (response, httpResponse) = client.postBanUserFromComment(
3 commentId = "cmt-8f3a1b",
4 banEmail = false,
5 banEmailDomain = false,
6 banIP = false,
7 deleteAllUsersComments = false,
8 bannedUntil = "",
9 isShadowBan = false,
10 updateId = "",
11 banReason = "",
12 sso = ""
13)
14if response.isSome:
15 let banResult = response.get()
16 discard banResult
17else:
18 echo "No ban result returned"
19

解除使用者封禁 Internal Link

參數

名稱類型必填說明
banUserUndoParamsBanUserUndoParamsNo
ssostringNo

回應

回傳: Option[APIEmptyResponse]

範例

postBanUserUndo 範例
Copy Copy
1
2let banParams = BanUserUndoParams(
3 tenantId = "my-tenant-123",
4 userId = "user-987",
5 undoneBy = "moderator-42",
6 reason = "Reinstated after manual review"
7)
8let (response, httpResponse) = client.postBanUserUndo(banUserUndoParams = banParams, sso = "sso-jwt-abc123")
9if response.isSome:
10 let apiResp = response.get()
11 echo "Ban undo succeeded, http status: " & $httpResponse.status
12else:
13 echo "Ban undo failed, http status: " & $httpResponse.status
14

批次預封鎖摘要 Internal Link


參數

名稱類型必填描述
bulkPreBanParamsBulkPreBanParams
includeByUserIdAndEmailbool
includeByIPbool
includeByEmailDomainbool
ssostring

回應

回傳:Option[BulkPreBanSummary]

範例

postBulkPreBanSummary 範例
Copy Copy
1
2let bulkParams = BulkPreBanParams(
3 tenantId = "my-tenant-123",
4 userIds = @["user-456", "user-789"],
5 emails = @["spammer@example.com", "bot@malicious.org"],
6 ipAddresses = @["203.0.113.5", "198.51.100.42"],
7 emailDomains = @["malicious.org"]
8)
9
10let (response, httpResponse) = client.postBulkPreBanSummary(
11 bulkPreBanParams = bulkParams,
12 includeByUserIdAndEmail = true,
13 includeByIP = true,
14 includeByEmailDomain = false,
15 sso = "sso-token-abc123"
16)
17
18if response.isSome:
19 let summary = response.get()
20 echo "Pre-ban summary:", summary
21

依 ID 取得評論 Internal Link

參數

名稱類型必填說明
commentsByIdsParamsCommentsByIdsParams
ssostring

回應

回傳: Option[ModerationAPIChildCommentsResponse]

範例

postCommentsByIds 範例
Copy Copy
1
2let commentsParams = CommentsByIdsParams(ids = @["cmt-1001", "cmt-1002"], includeReplies = true, maxDepth = 2)
3let (response, httpResponse) = client.postCommentsByIds(commentsByIdsParams = commentsParams, sso = "sso-user-7f3a9b")
4if response.isSome:
5 let result = response.get()
6 echo "Received child comments response: ", result
7

送出檢舉評論 Internal Link


參數

名稱類型必要描述
commentIdstring
ssostring

回應

回傳:Option[APIEmptyResponse]

範例

postFlagComment 範例
Copy Copy
1
2let (response, httpResponse) = client.postFlagComment(commentId = "comment-742", sso = "")
3if response.isSome:
4 let apiResp = response.get()
5 echo "Comment flagged successfully"
6else:
7 echo "Failed to flag comment"
8

移除評論 Internal Link

參數

名稱類型必填說明
commentIdstring
ssostring

回應

回傳: Option[PostRemoveCommentResponse]

範例

postRemoveComment 範例
Copy Copy
1
2let (response, httpResponse) = client.postRemoveComment(commentId = "cmt-987654321", sso = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.abc123.signature")
3if response.isSome:
4 let removed = response.get()
5 echo "Comment removed:", removed
6else:
7 echo "Failed to remove comment, HTTP response:", httpResponse
8

還原已刪除的評論 Internal Link

參數

名稱類型必填說明
commentIdstring
ssostring

回應

回傳:Option[APIEmptyResponse]

範例

postRestoreDeletedComment 範例
Copy Copy
1
2let (response, httpResponse) = client.postRestoreDeletedComment(commentId = "comment-8a7b6c5d", sso = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.SAMPLE_SIGNATURE")
3if response.isSome:
4 let apiResp = response.get()
5 echo "Comment restored:", apiResp
6else:
7 echo "Restore request failed"
8

設定評論核准狀態 Internal Link

參數

名稱類型是否必填描述
commentIdstring
approvedbool
ssostring

回應

回傳: Option[SetCommentApprovedResponse]

範例

postSetCommentApprovalStatus 範例
Copy Copy
1
2let (response, httpResponse) = client.postSetCommentApprovalStatus(commentId = "cmt-7890", approved = false, sso = "")
3if response.isSome:
4 let setResp = response.get()
5 discard setResp
6

設定評論審查狀態 Internal Link

參數

名稱類型必填描述
commentIdstring
reviewedbool
ssostring

回應

回傳: Option[APIEmptyResponse]

範例

postSetCommentReviewStatus 範例
Copy Copy
1
2let (response, httpResponse) = client.postSetCommentReviewStatus(
3 commentId = "cmt-98765-news-article",
4 reviewed = false,
5 sso = ""
6)
7if response.isSome:
8 let apiResp = response.get()
9 echo "Review status updated"
10else:
11 echo "Failed to update review status: " & $httpResponse.status
12

設定評論為垃圾狀態 Internal Link

參數

名稱類型必填描述
commentIdstring
spambool
permNotSpambool
ssostring

回應

回傳: Option[APIEmptyResponse]

範例

postSetCommentSpamStatus 範例
Copy Copy
1
2let (response, httpResponse) = client.postSetCommentSpamStatus(
3 commentId = "cmt-20250619-842",
4 spam = false,
5 permNotSpam = false,
6 sso = ""
7)
8if response.isSome:
9 let apiEmpty = response.get()
10 discard apiEmpty
11

設定評論文字 (審核) Internal Link

參數

名稱型別必填說明
commentIdstring
setCommentTextParamsSetCommentTextParams
ssostring

回應

回傳:Option[SetCommentTextResponse]

範例

postSetCommentText 範例
Copy Copy
1
2let (response, httpResponse) = client.postSetCommentText(commentId = "comment-4821",
3 setCommentTextParams = SetCommentTextParams(text = "Updated comment to clarify the main point and fix a typo."),
4 sso = "sso-user-8f3b9c")
5
6if response.isSome:
7 let setCommentResp = response.get()
8 echo "Received SetCommentTextResponse"
9

取消檢舉評論 (審核) Internal Link

參數

名稱類型必填說明
commentIdstring
ssostring

回應

回傳: Option[APIEmptyResponse]

範例

postUnFlagComment 範例
Copy Copy
1
2let (response, httpResponse) = client.postUnFlagComment(commentId = "comment-8f3a2b4e", sso = "")
3if response.isSome:
4 let apiEmpty = response.get()
5 echo "Comment unflagged successfully, response: ", apiEmpty
6else:
7 echo "Failed to unflag comment. HTTP response: ", httpResponse
8

送出投票 Internal Link

參數

名稱類型必填說明
commentIdstring
directionstring
ssostring

回應

回傳:Option[VoteResponse]

範例

postVote 範例
Copy Copy
1
2let (response, httpResponse) = client.postVote(commentId = "comment-4f3a9e", direction = "up", sso = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyIjoidXNlci0xMjMifQ.signedPart")
3if response.isSome:
4 let vote = response.get()
5 echo "Vote recorded:", vote
6else:
7 echo "No vote returned"
8

授予徽章 Internal Link

參數

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

回應

回傳: Option[AwardUserBadgeResponse]

範例

putAwardBadge 範例
Copy Copy
1
2let (response, httpResponse) = client.putAwardBadge(
3 badgeId = "gold-contributor",
4 userId = "user-8723",
5 commentId = "cmt-54a3b2",
6 broadcastId = "",
7 sso = ""
8)
9if response.isSome:
10 let award = response.get()
11 echo "Awarded badge received"
12else:
13 echo "No award response"
14

關閉討論串 Internal Link

參數

名稱類型必填描述
urlIdstring
ssostring

回應

回傳:Option[APIEmptyResponse]

範例

putCloseThread 範例
Copy Copy
1
2let (response, httpResponse) = client.putCloseThread(urlId = "news/article-title", sso = "")
3if response.isSome:
4 let apiResp = response.get()
5 echo "Thread closed successfully:", $apiResp
6else:
7 echo "Failed to close thread, HTTP response:", $httpResponse
8

移除徽章 Internal Link

參數

名稱類型必填描述
badgeIdstring
userIdstring
commentIdstring
broadcastIdstring
ssostring

回傳

回傳: Option[RemoveUserBadgeResponse]

範例

putRemoveBadge 範例
Copy Copy
1
2let (response, httpResponse) = client.putRemoveBadge(badgeId = "verified-journalist",
3 userId = "user-7890",
4 commentId = "comment-98765",
5 broadcastId = "",
6 sso = "")
7
8if response.isSome:
9 let removeResp = response.get()
10 discard removeResp
11else:
12 discard httpResponse
13

重新開啟討論串 Internal Link

參數

名稱類型必填說明
urlIdstring
ssostring

回應

回傳: Option[APIEmptyResponse]

範例

putReopenThread 範例
Copy Copy
1
2let (response, httpResponse) = client.putReopenThread(urlId = "news/2026-election-analysis", sso = "")
3if response.isSome:
4 let apiResp = response.get()
5 echo "Reopen succeeded, response: ", apiResp
6else:
7 echo "Reopen failed, HTTP status: ", httpResponse.status
8

設定信任度指標 Internal Link

參數

名稱類型必填說明
userIdstring
trustFactorstring
ssostring

回傳

回傳: Option[SetUserTrustFactorResponse]

範例

setTrustFactor 範例
Copy Copy
1
2let (response, httpResponse) = client.setTrustFactor(userId = "user-9876", trustFactor = "high", sso = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJ1c2VyLTk4NzYiLCJpYXQiOjE2MjQwMDAwMDB9.signature")
3if response.isSome:
4 let resultObj = response.get()
5 echo resultObj
6else:
7 echo "No response received"
8

建立管理員 Internal Link

參數

NameTypeRequiredDescription
tenantIdstringYes
createModeratorBodyCreateModeratorBodyNo

回應

回傳: Option[CreateModeratorResponse]

範例

createModerator 範例
Copy Copy
1
2var body: CreateModeratorBody
3body.username = "alice.moderator"
4body.displayName = "Alice Moderator"
5body.email = "alice@news-site.com"
6body.enabled = true
7body.roles = @["moderator"]
8body.notes = ""
9
10let (response, httpResponse) = client.createModerator(tenantId = "my-tenant-123", createModeratorBody = body)
11if response.isSome:
12 let created = response.get()
13 echo "Created moderator ID: ", created.id
14

刪除管理員 Internal Link

參數

名稱類型必填描述
tenantIdstring
idstring
sendEmailstring

回應

回傳: Option[APIEmptyResponse]

範例

deleteModerator 範例
Copy Copy
1
2let (response, httpResponse) = client.deleteModerator(tenantId = "my-tenant-123", id = "", sendEmail = "")
3if response.isSome:
4 let apiEmpty = response.get()
5 echo "Moderator deleted successfully for tenant my-tenant-123"
6else:
7 echo "No response returned; inspect httpResponse"
8

取得管理員 Internal Link

參數

名稱類型必填說明
tenantIdstring
idstring

回應

回傳:Option[GetModeratorResponse]

範例

getModerator 範例
Copy Copy
1
2let (response, httpResponse) = client.getModerator(tenantId = "my-tenant-123", id = "mod-456")
3if response.isSome:
4 let moderator = response.get()
5 echo moderator
6else:
7 echo "Moderator not found, HTTP status: ", $httpResponse.status
8

取得管理員列表 Internal Link


參數

名稱類型必要描述
tenantIdstring
skipfloat64

回應

回傳: Option[GetModeratorsResponse]

範例

getModerators 範例
Copy Copy
1
2let (response, httpResponse) = client.getModerators(tenantId = "my-tenant-123", skip = 0.0)
3if response.isSome:
4 let moderators = response.get()
5 echo "Received moderators response:", moderators
6else:
7 echo "No moderators returned"
8

更新管理員 Internal Link

參數

名稱類型必填描述
tenantIdstring
idstring
updateModeratorBodyUpdateModeratorBody

回應

回傳: Option[APIEmptyResponse]

範例

updateModerator 範例
Copy Copy
1
2let modBody: UpdateModeratorBody = UpdateModeratorBody(
3 displayName = "Alice Moderator",
4 email = "alice@newsdaily.com",
5 isActive = true,
6 permissions = @["delete_comments", "ban_users"]
7)
8
9let (response, httpResponse) = client.updateModerator(tenantId = "news-tenant-456", id = "moderator-789", updateModeratorBody = modBody)
10
11if response.isSome:
12 let apiEmpty = response.get()
13 echo "Moderator updated successfully. HTTP status: ", httpResponse.status
14else:
15 echo "Failed to update moderator. HTTP status: ", httpResponse.status
16

刪除通知計數 Internal Link

參數

名稱型別必填說明
tenantIdstring
idstring

回應

回傳: Option[APIEmptyResponse]

範例

deleteNotificationCount 範例
Copy Copy
1
2let (response, httpResponse) = client.deleteNotificationCount(tenantId = "my-tenant-123", id = "notification-789")
3if response.isSome:
4 let emptyResp = response.get()
5 echo "Notification count deleted for tenant: ", "my-tenant-123"
6else:
7 echo "Failed to delete notification count, status: ", $httpResponse.statusCode
8

取得快取的通知計數 Internal Link

參數

NameTypeRequiredDescription
tenantIdstringYes
idstringNo

回應

Returns: Option[GetCachedNotificationCountResponse]

範例

getCachedNotificationCount 範例
Copy Copy
1
2let (response, httpResponse) = client.getCachedNotificationCount(tenantId = "my-tenant-123", id = "notification-789")
3if response.isSome:
4 let cached = response.get()
5 echo "Cached notification count: ", $cached
6else:
7 echo "No cached notification count"
8

取得通知計數 Internal Link

參數

名稱Type必填說明
tenantIdstring
userIdstring
urlIdstring
fromCommentIdstring
viewedbool

回應

回傳: Option[GetNotificationCountResponse]

範例

getNotificationCount 範例
Copy Copy
1
2let (response, httpResponse) = client.getNotificationCount(tenantId = "my-tenant-123", userId = "user-987", urlId = "news/2026/06/election-results", fromCommentId = "", viewed = false)
3if response.isSome:
4 let notifyData = response.get()
5 echo notifyData
6

取得通知列表 Internal Link

參數

名稱類型必填說明
tenantIdstring
userIdstring
urlIdstring
fromCommentIdstring
viewedbool
skipfloat64

回應

回傳: Option[GetNotificationsResponse]

範例

getNotifications 範例
Copy Copy
1
2let (response, httpResponse) = client.getNotifications(tenantId = "my-tenant-123", userId = "user-456", urlId = "news/article-title", fromCommentId = "cmt-789", viewed = false, skip = 0.0)
3if response.isSome:
4 let notifications = response.get()
5 echo notifications
6

更新通知 Internal Link

參數

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

回應

回傳: Option[APIEmptyResponse]

範例

updateNotification 範例
Copy Copy
1
2let (response, httpResponse) = client.updateNotification(
3 tenantId = "my-tenant-123",
4 id = "notif-456",
5 updateNotificationBody = UpdateNotificationBody(
6 enabled = true,
7 channels = @["email", "push"],
8 frequency = "immediate"
9 ),
10 userId = "user-789"
11)
12
13if response.isSome:
14 let apiEmpty = response.get()
15 discard apiEmpty
16

建立 V1 頁面反應 Internal Link

參數

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

回傳

回傳:Option[CreateV1PageReact]

範例

createV1PageReact 範例
Copy Copy
1
2let (response, httpResponse) = client.createV1PageReact(
3 tenantId = "my-tenant-123",
4 urlId = "news/2026/market-rally",
5 title = "Breaking News: Markets Rally Today"
6)
7
8if response.isSome:
9 let pageReact = response.get()
10 echo "Page react created: ", pageReact
11else:
12 echo "Failed to create page react: ", httpResponse
13

建立 V2 頁面反應 Internal Link


參數

名稱類型必填描述
tenantIdstring
urlIdstring
idstring
titlestring

回應

回傳: Option[CreateV1PageReact]

範例

createV2PageReact 範例
Copy Copy
1
2let (response, httpResponse) = client.createV2PageReact(
3 tenantId = "my-tenant-123",
4 urlId = "news/2026/06/fastcomments-release",
5 id = "",
6 title = ""
7)
8if response.isSome:
9 let react = response.get()
10 echo "Created page react: ", $react
11else:
12 echo "No react returned, HTTP status: ", $httpResponse.statusCode
13

刪除 V1 頁面反應 Internal Link

參數

名稱類型必填描述
tenantIdstring
urlIdstring

回應

回傳:Option[CreateV1PageReact]

範例

deleteV1PageReact 範例
Copy Copy
1
2let (response, httpResponse) = client.deleteV1PageReact(tenantId = "my-tenant-123", urlId = "news/article-title")
3if response.isSome:
4 let deletedReact = response.get()
5 echo "Deleted react:", deletedReact
6else:
7 echo "No react returned for tenant: my-tenant-123, url: news/article-title"
8

刪除 V2 頁面反應 Internal Link

參數

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

回應

回傳: Option[CreateV1PageReact]

範例

deleteV2PageReact 範例
Copy Copy
1
2let (response, httpResponse) = client.deleteV2PageReact(tenantId = "my-tenant-123", urlId = "news/2026/politics-election", id = "react-456")
3if response.isSome:
4 let react = response.get()
5 echo react
6else:
7 echo "No reaction returned, status: ", httpResponse.status
8

取得 V1 頁面按讚數 Internal Link

參數

名稱類型必填說明
tenantIdstring
urlIdstring

回應

回傳: Option[GetV1PageLikes]

範例

getV1PageLikes 範例
Copy Copy
1
2let (response, httpResponse) = client.getV1PageLikes(tenantId = "my-tenant-123", urlId = "news/how-to-train-your-dragon")
3if response.isSome:
4 let pageLikes = response.get()
5 echo "Fetched page likes for url:", "news/how-to-train-your-dragon"
6else:
7 echo "No likes returned for url:", "news/how-to-train-your-dragon"
8

取得 V2 頁面反應 Internal Link

參數

名稱型別必填說明
tenantIdstring
urlIdstring

回應

回傳: Option[GetV2PageReacts]

範例

getV2PageReacts 範例
Copy Copy
1
2let (response, httpResponse) = client.getV2PageReacts(tenantId = "my-tenant-123", urlId = "news/elections/2026/us-primary-results")
3if response.isSome:
4 let reacts = response.get()
5 echo "Received reacts: ", $reacts
6else:
7 echo "No reacts available"
8

取得 V2 頁面反應使用者 Internal Link


參數

NameTypeRequiredDescription
tenantIdstringYes
urlIdstringYes
idstringNo

回應

回傳: Option[GetV2PageReactUsersResponse]

範例

getV2PageReactUsers 範例
Copy Copy
1
2let (response, httpResponse) = client.getV2PageReactUsers(tenantId = "my-tenant-123", urlId = "news/article-title", id = "")
3if response.isSome:
4 let usersResp = response.get()
5 echo repr(usersResp)
6else:
7 echo "No page react users returned. HTTP response: ", repr(httpResponse)
8

新增頁面 Internal Link

參數

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

回應

回傳: Option[AddPageAPIResponse]

範例

addPage 範例
Copy Copy
1
2var createData: CreateAPIPageData
3createData.url = "news/nim-4-release"
4createData.title = "Nim 4 Release Coverage"
5createData.path = "/news/nim-4-release"
6createData.isEnabled = true
7createData.tags = @["nim", "release"]
8createData.description = "Coverage of Nim 4 release"
9
10let (response, httpResponse) = client.addPage(tenantId = "my-tenant-123", createAPIPageData = createData)
11
12if response.isSome:
13 let pageResp = response.get()
14 echo pageResp
15

刪除頁面 Internal Link

參數

名稱型別必填說明
tenantIdstring
idstring

回應

回傳: Option[DeletePageAPIResponse]

範例

deletePage 範例
Copy Copy
1
2let (response, httpResponse) = client.deletePage(tenantId = "site-tenant-456", id = "news/winter-updates-2025")
3if response.isSome:
4 let deleted = response.get()
5 echo "DeletePageAPIResponse:", deleted
6else:
7 echo "Delete failed, HTTP response:", httpResponse
8

取得離線使用者 Internal Link


頁面上曾留言但目前不在線上的使用者。依 displayName 排序。 在用盡 /users/online 後使用,以呈現「成員」區段。 以 commenterName 做游標分頁:伺服器會於部分索引 {tenantId, urlId, commenterName} 從 afterName 向前透過 $gt 遍歷,沒有 $skip 的成本。

參數

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

回應

回傳: Option[PageUsersOfflineResponse]

範例

getOfflineUsers 範例
Copy Copy
1
2let (response, httpResponse) = client.getOfflineUsers(
3 tenantId = "my-tenant-123",
4 urlId = "news/article-how-to-code",
5 afterName = "",
6 afterUserId = ""
7)
8
9if response.isSome:
10 let offlinePage = response.get()
11 echo "Received offline users page"
12 discard httpResponse.statusCode
13

取得線上使用者 Internal Link

當前在線的頁面檢視者:其 websocket session 目前訂閱該頁面的人員。 回傳 anonCount + totalCount(房間範圍的訂閱者,包括我們不列舉的匿名檢視者)。

Parameters

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

回應

回傳: Option[PageUsersOnlineResponse]

範例

getOnlineUsers 範例
Copy Copy
1
2let (response, httpResponse) = client.getOnlineUsers(tenantId = "my-tenant-123", urlId = "news/politics/top-story", afterName = "", afterUserId = "")
3if response.isSome:
4 let page = response.get()
5 echo "Received online users page:"
6 echo page
7else:
8 echo "No online users returned. HTTP status: ", httpResponse.statusCode
9

依 URL ID 取得頁面 Internal Link

參數

名稱類型必填說明
tenantIdstring
urlIdstring

回應

回傳: Option[GetPageByURLIdAPIResponse]

範例

getPageByURLId 範例
Copy Copy
1
2let (response, httpResponse) = client.getPageByURLId(tenantId = "my-tenant-123", urlId = "news/article-title")
3if response.isSome:
4 let page = response.get()
5 echo "Page ID: ", page.id
6 echo "Title: ", page.title
7 echo "URL: ", page.url
8 echo "Published: ", $page.published
9 echo "Tags: ", $page.tags
10else:
11 echo "No page found. HTTP status: ", httpResponse.statusCode
12

取得頁面列表 Internal Link

參數

名稱類型必填描述
tenantIdstring

回應

回傳: Option[GetPagesAPIResponse]

範例

getPages 範例
Copy Copy
1
2let (response, httpResponse) = client.getPages(tenantId = "news-site-456")
3if response.isSome:
4 let pages = response.get()
5 echo "Received pages response: ", pages
6else:
7 echo "No pages returned. HTTP response: ", httpResponse
8

取得公開頁面列表 Internal Link

列出租戶的頁面。FChat 桌面用戶端用此來填充其房間列表。 要求在每個頁面的解析後自訂設定中,enableFChat 必須為 true。 需要 SSO 的頁面會依請求使用者的群組存取權限進行過濾。

參數

名稱類型必填說明
tenantIdstring
cursorstring
limitint
qstring
sortByPagesSortBy
hasCommentsbool

回應

回傳: Option[GetPublicPagesResponse]

範例

getPagesPublic 範例
Copy Copy
1
2let (response, httpResponse) = client.getPagesPublic(
3 tenantId = "my-tenant-123",
4 cursor = "",
5 limit = 0,
6 q = "",
7 sortBy = PagesSortBy(0),
8 hasComments = false
9)
10
11if response.isSome:
12 let pages = response.get()
13 echo "Retrieved public pages: ", $pages
14else:
15 echo "No pages returned, HTTP status: ", $httpResponse.status
16

取得使用者資訊 Internal Link

租戶的批次使用者資訊。給定 userIds,回傳來自 User / SSOUser 的顯示資訊。用於留言元件以豐富剛透過 presence 事件出現的使用者。無頁面上下文:隱私一律強制執行(私人檔案會被遮罩)。

參數

NameTypeRequiredDescription
tenantIdstring
idsstring

回應

回傳: Option[PageUsersInfoResponse]

範例

getUsersInfo 範例
Copy Copy
1
2let (response, httpResponse) = client.getUsersInfo(tenantId = "my-tenant-123", ids = "user-42,user-87")
3if response.isSome:
4 let usersInfo = response.get()
5 echo "Retrieved users info:", usersInfo
6else:
7 echo "No users info returned. HTTP status:", httpResponse.status
8

部分更新頁面 Internal Link

參數

NameTypeRequiredDescription
tenantIdstring
idstring
updateAPIPageDataUpdateAPIPageData

回應

回傳: Option[PatchPageAPIResponse]

範例

patchPage 範例
Copy Copy
1
2let updateData = UpdateAPIPageData(
3 title = "Breaking: Major Event Update",
4 urlId = "news/major-event-update",
5 visible = true,
6 tags = @["breaking", "headline"],
7 sortOrder = 5
8)
9
10let (response, httpResponse) = client.patchPage(
11 tenantId = "my-tenant-123",
12 id = "news/major-event-update",
13 updateAPIPageData = updateData
14)
15
16if response.isSome:
17 let page = response.get()
18 discard page
19

刪除待處理的 webhook 事件 Internal Link

參數

NameTypeRequiredDescription
tenantIdstring
idstring

回應

回傳: Option[APIEmptyResponse]

範例

deletePendingWebhookEvent 範例
Copy Copy
1
2let (response, httpResponse) = client.deletePendingWebhookEvent(tenantId = "my-tenant-123", id = "wh_evt_9f8b7a6c")
3if response.isSome:
4 let apiEmpty = response.get()
5 echo "Pending webhook event deleted for tenant my-tenant-123"
6else:
7 echo "Failed to delete pending webhook event"
8

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

參數

名稱Type必填說明
tenantIdstring
commentIdstring
externalIdstring
eventTypestring
domainstring
attemptCountGTfloat64

回應

回傳: Option[GetPendingWebhookEventCountResponse]

範例

getPendingWebhookEventCount 範例
Copy Copy
1
2let (response, httpResponse) = client.getPendingWebhookEventCount(
3 tenantId = "my-tenant-123",
4 commentId = "cmt-456abc",
5 externalId = "ext-7890",
6 eventType = "comment_created",
7 domain = "news.example.com",
8 attemptCountGT = 2.0
9)
10
11if response.isSome:
12 let pending = response.get()
13 echo pending
14else:
15 echo "No pending webhook event count returned; HTTP status: ", httpResponse.status
16

取得待處理 webhook 事件列表 Internal Link

參數

名稱類型必填說明
tenantIdstring
commentIdstring
externalIdstring
eventTypestring
domainstring
attemptCountGTfloat64
skipfloat64

回應

回傳: Option[GetPendingWebhookEventsResponse]

範例

getPendingWebhookEvents 範例
Copy Copy
1
2let (response, httpResponse) = client.getPendingWebhookEvents(
3 tenantId = "my-tenant-123",
4 commentId = "cmt-987654",
5 externalId = "",
6 eventType = "",
7 domain = "",
8 attemptCountGT = 0.0,
9 skip = 0.0
10)
11if response.isSome:
12 let pending = response.get()
13 discard pending
14

建立問卷設定 Internal Link

參數

名稱類型必填說明
tenantIdstring
createQuestionConfigBodyCreateQuestionConfigBody

回應

回傳: Option[CreateQuestionConfigResponse]

範例

createQuestionConfig 範例
Copy Copy
1
2let (response, httpResponse) = client.createQuestionConfig(
3 tenantId = "my-tenant-123",
4 createQuestionConfigBody = CreateQuestionConfigBody(
5 label = "Article Question",
6 required = true,
7 minLength = 20,
8 maxLength = 1000,
9 allowedTags = @["comment","question","feedback"],
10 notifyModerators = false
11 )
12)
13if response.isSome:
14 let cfg = response.get()
15 echo "Created question config id: ", cfg.id
16

刪除問卷設定 Internal Link

參數

名稱型別必要描述
tenantIdstringYes
idstringNo

回應

回傳: Option[APIEmptyResponse]

範例

deleteQuestionConfig 範例
Copy Copy
1
2let (response, httpResponse) = client.deleteQuestionConfig(tenantId = "my-tenant-123", id = "")
3
4if response.isSome:
5 let deleted = response.get()
6 echo "Question config deleted for tenant: ", "my-tenant-123"
7else:
8 echo "Failed to delete question config"
9

取得問卷設定 Internal Link

參數

名稱類型必填描述
tenantIdstring
idstring

回應

回傳:Option[GetQuestionConfigResponse]

範例

getQuestionConfig 範例
Copy Copy
1
2let (response, httpResponse) = client.getQuestionConfig(tenantId = "my-tenant-123", id = "qst-456")
3if response.isSome:
4 let cfg = response.get()
5 discard cfg
6

取得問卷設定列表 Internal Link

參數

名稱類型必填說明
tenantIdstring
skipfloat64

回應

回傳: Option[GetQuestionConfigsResponse]

範例

getQuestionConfigs 範例
Copy Copy
1
2let (response, httpResponse) = client.getQuestionConfigs(tenantId = "my-tenant-123", skip = 0.0)
3if response.isSome:
4 let configs = response.get()
5 echo "Received question configs for tenant my-tenant-123"
6 echo configs
7else:
8 echo "No question configs returned"
9

更新問卷設定 Internal Link

參數

名稱類型必填描述
tenantIdstring
idstring
updateQuestionConfigBodyUpdateQuestionConfigBody

回應

回傳: Option[APIEmptyResponse]

範例

updateQuestionConfig 範例
Copy Copy
1
2let (response, httpResponse) = client.updateQuestionConfig(tenantId = "my-tenant-123", id = "question-config-456", updateQuestionConfigBody = default(UpdateQuestionConfigBody))
3if response.isSome:
4 let apiEmpty = response.get()
5 discard apiEmpty
6

建立問卷結果 Internal Link

參數

NameTypeRequiredDescription
tenantIdstring
createQuestionResultBodyCreateQuestionResultBody

回應

回傳: Option[CreateQuestionResultResponse]

範例

createQuestionResult 範例
Copy Copy
1
2let (response, httpResponse) = client.createQuestionResult(
3 tenantId = "my-tenant-123",
4 createQuestionResultBody = CreateQuestionResultBody(
5 questionId = "q-2026-001",
6 userId = "user-42",
7 correct = true,
8 score = 95,
9 tags = @["news","reader-question"]
10 )
11)
12if response.isSome:
13 let result = response.get()
14 echo "Created question result id: ", result.id
15 echo "HTTP status: ", httpResponse.status.code
16

刪除問卷結果 Internal Link

參數

名稱型別必填說明
tenantIdstring
idstring

回應

回傳: Option[APIEmptyResponse]

範例

deleteQuestionResult 範例
Copy Copy
1
2let tenantId = "my-tenant-123"
3let resultId = "question-result-456"
4let (response, httpResponse) = client.deleteQuestionResult(tenantId = tenantId, id = resultId)
5if response.isSome:
6 let emptyResp = response.get()
7 echo "Deleted question result:", resultId
8

取得問卷結果 Internal Link

參數

名稱類型必填說明
tenantIdstring
idstring

回應

回傳: Option[GetQuestionResultResponse]

範例

getQuestionResult 範例
Copy Copy
1
2let (response, httpResponse) = client.getQuestionResult(tenantId = "my-tenant-123", id = "question-456")
3if response.isSome:
4 let result = response.get()
5 echo "Question result received:"
6 echo result
7else:
8 echo "No question result returned, HTTP status: ", $httpResponse.status
9

取得問卷結果列表 Internal Link

參數

NameTypeRequiredDescription
tenantIdstring
urlIdstring
userIdstring
startDatestring
questionIdstring
questionIdsstring
skipfloat64

回應

回傳: Option[GetQuestionResultsResponse]

範例

getQuestionResults 範例
Copy Copy
1
2let (response, httpResponse) = client.getQuestionResults(
3 tenantId = "my-tenant-123",
4 urlId = "news/2026/election-analysis",
5 userId = "user-42",
6 startDate = "2026-06-01T00:00:00Z",
7 questionId = "q-6789",
8 questionIds = @["q-6789", "q-6790"],
9 skip = 0.0
10)
11if response.isSome:
12 let results = response.get()
13 echo "Received question results"
14else:
15 echo "No results returned"
16

更新問卷結果 Internal Link

參數

名稱類型必填描述
tenantIdstring
idstring
updateQuestionResultBodyUpdateQuestionResultBody

回應

回傳: Option[APIEmptyResponse]

範例

updateQuestionResult 範例
Copy Copy
1
2let (response, httpResponse) = client.updateQuestionResult(
3 tenantId = "my-tenant-123",
4 id = "question-result-456",
5 updateQuestionResultBody = UpdateQuestionResultBody(
6 questionId: "q-789",
7 userId: "user-42",
8 score: 92,
9 passed: true,
10 tags: @["quiz", "math"]
11 )
12)
13if response.isSome:
14 let apiResp = response.get()
15 echo "Question result updated successfully"
16else:
17 echo "No response body; HTTP status: ", httpResponse.status.code
18

彙總問卷結果 Internal Link

參數

名稱類型必填說明
tenantIdstring
questionIdstring
questionIdsseq[string]
urlIdstring
timeBucketAggregateTimeBucket
startDatestring
forceRecalculatebool

回應

回傳: Option[AggregateQuestionResultsResponse]

範例

aggregateQuestionResults 範例
Copy Copy
1
2let (response, httpResponse) = client.aggregateQuestionResults(
3 tenantId = "my-tenant-123",
4 questionId = "",
5 questionIds = @[],
6 urlId = "news/article-title",
7 timeBucket = AggregateTimeBucket(0),
8 startDate = "",
9 forceRecalculate = false
10)
11
12if response.isSome:
13 let results = response.get()
14 discard results
15

批次彙總問卷結果 Internal Link

參數

名稱類型必填說明
tenantIdstring
bulkAggregateQuestionResultsRequestBulkAggregateQuestionResultsRequest
forceRecalculatebool

回應

回傳: Option[BulkAggregateQuestionResultsResponse]

範例

bulkAggregateQuestionResults 範例
Copy Copy
1
2let (response, httpResponse) = client.bulkAggregateQuestionResults(
3 tenantId = "my-tenant-123",
4 bulkAggregateQuestionResultsRequest = BulkAggregateQuestionResultsRequest(),
5 forceRecalculate = false
6)
7
8if response.isSome:
9 let aggregated = response.get()
10 echo "Aggregated question results received"
11

將評論與問卷結果合併 Internal Link

參數

名稱類型必填說明
tenantIdstring
questionIdstring
questionIdsseq[string]
urlIdstring
startDatestring
forceRecalculatebool
minValuefloat64
maxValuefloat64
limitfloat64

回應

回傳: Option[CombineQuestionResultsWithCommentsResponse]

範例

combineCommentsWithQuestionResults 範例
Copy Copy
1
2let (response, httpResponse) = client.combineCommentsWithQuestionResults(
3 tenantId = "my-tenant-123",
4 questionId = "",
5 questionIds = @[],
6 urlId = "news/article-2026-climate-change",
7 startDate = "",
8 forceRecalculate = false,
9 minValue = 0.0,
10 maxValue = 0.0,
11 limit = 0.0
12)
13
14if response.isSome:
15 let combined = response.get()
16 echo "Combined results received for tenant:", " my-tenant-123"
17else:
18 echo "No combined results returned"
19

新增 SSO 使用者 Internal Link

參數

名稱類型必填描述
tenantIdstring
createAPISSOUserDataCreateAPISSOUserData

回應

回傳:Option[AddSSOUserAPIResponse]

範例

addSSOUser 範例
Copy Copy
1
2let (response, httpResponse) = client.addSSOUser(
3 tenantId = "my-tenant-123",
4 createAPISSOUserData = CreateAPISSOUserData(
5 id = "sso-456",
6 email = "alice.johnson@newsorg.com",
7 name = "Alice Johnson",
8 roles = @["editor", "contributor"],
9 isActive = true,
10 isAdmin = false
11 )
12)
13if response.isSome:
14 let apiResp = response.get()
15 discard apiResp
16else:
17 discard httpResponse
18

刪除 SSO 使用者 Internal Link

參數

名稱類型必填描述
tenantIdstring
idstring
deleteCommentsbool
commentDeleteModestring

回應

回傳: Option[DeleteSSOUserAPIResponse]

範例

deleteSSOUser 範例
Copy Copy
1
2let (response, httpResponse) = client.deleteSSOUser(tenantId = "my-tenant-123", id = "sso-user-9876", deleteComments = true, commentDeleteMode = "hard")
3if response.isSome:
4 let deleted = response.get()
5 discard deleted
6else:
7 discard httpResponse
8

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

參數

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

回應

回傳: Option[GetSSOUserByEmailAPIResponse]

範例

getSSOUserByEmail 範例
Copy Copy
1
2let (response, httpResponse) = client.getSSOUserByEmail(tenantId = "my-tenant-123", email = "alice@newsco.com")
3if response.isSome:
4 let ssoUser = response.get()
5 echo "SSO user found: ", ssoUser.email
6else:
7 echo "No SSO user found. HTTP status: ", httpResponse.status
8

依 ID 取得 SSO 使用者 Internal Link

參數

名稱類型必填描述
tenantIdstring
idstring

回應

回傳: Option[GetSSOUserByIdAPIResponse]

範例

getSSOUserById 範例
Copy Copy
1
2let (response, httpResponse) = client.getSSOUserById(tenantId = "my-tenant-123", id = "user-789")
3if response.isSome:
4 let ssoUser: GetSSOUserByIdAPIResponse = response.get()
5 echo "SSO user retrieved: ", $ssoUser
6else:
7 echo "No SSO user found, HTTP status: ", httpResponse.statusCode
8

取得 SSO 使用者列表 Internal Link

參數

名稱類型必填描述
tenantIdstring
skipint

回應

回傳: Option[GetSSOUsersResponse]

範例

getSSOUsers 範例
Copy Copy
1
2let (response, httpResponse) = client.getSSOUsers(tenantId = "my-tenant-123", skip = 0)
3if response.isSome:
4 let ssoUsers = response.get()
5 echo ssoUsers
6else:
7 echo "No SSO users returned; HTTP response:", httpResponse
8

部分更新 SSO 使用者 Internal Link

參數

名稱類型必填描述
tenantIdstring
idstring
updateAPISSOUserDataUpdateAPISSOUserData
updateCommentsbool

回應

回傳:Option[PatchSSOUserAPIResponse]

範例

patchSSOUser 範例
Copy Copy
1
2let (response, httpResponse) = client.patchSSOUser(
3 tenantId = "my-tenant-123",
4 id = "user-789",
5 updateAPISSOUserData = UpdateAPISSOUserData(
6 externalId = "ext-987",
7 username = "j.smith",
8 email = "j.smith@news.example.com",
9 displayName = "John Smith",
10 roles = @["author", "editor"],
11 avatarUrl = "https://cdn.news.example.com/avatars/j.smith.png"
12 ),
13 updateComments = true
14)
15
16if response.isSome:
17 let patched = response.get()
18 echo patched
19

建立或取代 SSO 使用者 Internal Link

參數

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

回應

回傳: Option[PutSSOUserAPIResponse]

範例

putSSOUser 範例
Copy Copy
1
2let (response, httpResponse) = client.putSSOUser(
3 tenantId = "my-tenant-123",
4 id = "user-456",
5 updateAPISSOUserData = UpdateAPISSOUserData(
6 externalId = "ext-789",
7 displayName = "Jane Doe",
8 email = "jane.doe@example.com",
9 avatarUrl = "https://cdn.news-site.com/avatars/jane.jpg",
10 roles = @["member", "subscriber"]
11 ),
12 updateComments = true
13)
14
15if response.isSome:
16 let result = response.get()
17 echo "SSO user updated:", result
18

建立訂閱 Internal Link

參數

名稱類型必填說明
tenantIdstring
createAPIUserSubscriptionDataCreateAPIUserSubscriptionData

回應

回傳: Option[CreateSubscriptionAPIResponse]

範例

createSubscription 範例
Copy Copy
1
2let createData = CreateAPIUserSubscriptionData(
3 subscriberId = "user-987",
4 email = "jane.doe@newsreader.com",
5 urlId = "news/local-weather",
6 active = true,
7 tags = @["weather", "local"],
8 frequency = "immediate"
9)
10let (response, httpResponse) = client.createSubscription(tenantId = "my-tenant-123", createAPIUserSubscriptionData = createData)
11if response.isSome:
12 let created = response.get()
13 echo "Created subscription id: ", created.id
14

刪除訂閱 Internal Link

參數

NameTypeRequiredDescription
tenantIdstringYes
idstringNo
userIdstringNo

回應

回傳: Option[DeleteSubscriptionAPIResponse]

範例

deleteSubscription 範例
Copy Copy
1
2let (response, httpResponse) = client.deleteSubscription(tenantId = "my-tenant-123", id = "sub-98765", userId = "user-456")
3if response.isSome:
4 let deleteResp = response.get()
5 echo "Delete subscription response received"
6else:
7 echo "No subscription response"
8

取得訂閱列表 Internal Link


參數

名稱類型必填描述
tenantIdstring
userIdstring

回應

回傳: Option[GetSubscriptionsAPIResponse]

範例

getSubscriptions 範例
Copy Copy
1
2let (response, httpResponse) = client.getSubscriptions(tenantId = "my-tenant-123", userId = "")
3if response.isSome:
4 let subscriptions = response.get()
5 discard subscriptions
6

更新訂閱 Internal Link

參數

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

回應

回傳: Option[UpdateSubscriptionAPIResponse]

範例

updateSubscription 範例
Copy Copy
1
2let (response, httpResponse) = client.updateSubscription(
3 tenantId = "my-tenant-123",
4 id = "sub-456",
5 updateAPIUserSubscriptionData = UpdateAPIUserSubscriptionData(
6 subscribed = true,
7 channels = @["email", "push"]
8 ),
9 userId = "user-789"
10)
11
12if response.isSome:
13 let updated = response.get()
14 echo "Subscription updated:", updated
15else:
16 echo "Update failed, HTTP response:", httpResponse
17

取得租戶每日使用量 Internal Link

參數

名稱類型必填描述
tenantIdstring
yearNumberfloat64
monthNumberfloat64
dayNumberfloat64
skipfloat64

回應

回傳:Option[GetTenantDailyUsagesResponse]

範例

getTenantDailyUsages 範例
Copy Copy
1
2let (response, httpResponse) = client.getTenantDailyUsages(
3 tenantId = "my-tenant-123",
4 yearNumber = 2026.0,
5 monthNumber = 6.0,
6 dayNumber = 19.0,
7 skip = 0.0
8)
9
10if response.isSome:
11 let usage = response.get()
12 discard usage
13

建立租戶方案 Internal Link

參數

名稱類型必填說明
tenantIdstring
createTenantPackageBodyCreateTenantPackageBody

回應

回傳: Option[CreateTenantPackageResponse]

範例

createTenantPackage 範例
Copy Copy
1
2let (response, httpResponse) = client.createTenantPackage(tenantId = "my-tenant-123", createTenantPackageBody = CreateTenantPackageBody())
3
4if response.isSome:
5 let pkg = response.get()
6 echo "Created tenant package: ", $pkg
7else:
8 echo "Failed to create tenant package, HTTP response: ", $httpResponse
9

刪除租戶方案 Internal Link

參數

名稱類型必填說明
tenantIdstring
idstring

回應

回傳: Option[APIEmptyResponse]

範例

deleteTenantPackage 範例
Copy Copy
1
2let (response, httpResponse) = client.deleteTenantPackage(tenantId = "my-tenant-123", id = "package-987")
3if response.isSome:
4 let emptyResp = response.get()
5 echo emptyResp
6else:
7 echo "Failed to delete tenant package"
8

取得租戶方案 Internal Link

參數

NameTypeRequiredDescription
tenantIdstring
idstring

回應

回傳: Option[GetTenantPackageResponse]

範例

getTenantPackage 範例
Copy Copy
1
2let (response, httpResponse) = client.getTenantPackage(tenantId = "my-tenant-123", id = "premium-2026")
3if response.isSome:
4 let pkg = response.get()
5 echo "Retrieved tenant package:"
6 echo pkg
7else:
8 echo "Tenant package not found"
9

取得租戶方案列表 Internal Link

參數

名稱型別必填說明
tenantIdstring
skipfloat64

回應

回傳:Option[GetTenantPackagesResponse]

範例

getTenantPackages 範例
Copy Copy
1
2let (response, httpResponse) = client.getTenantPackages(tenantId = "my-tenant-123", skip = 0.0)
3if response.isSome:
4 let packages = response.get()
5 echo "Received tenant packages:"
6 echo packages
7else:
8 echo "No packages found for tenant 'my-tenant-123'"
9

取代租戶方案 Internal Link

參數

NameTypeRequiredDescription
tenantIdstring
idstring
replaceTenantPackageBodyReplaceTenantPackageBody

回應

回傳: Option[APIEmptyResponse]

範例

replaceTenantPackage 範例
Copy Copy
1
2let (response, httpResponse) = client.replaceTenantPackage(
3 tenantId = "my-tenant-123",
4 id = "pkg-987",
5 replaceTenantPackageBody = ReplaceTenantPackageBody(
6 name = "Premium Plan",
7 priceCents = 999,
8 seats = 50,
9 enabled = true,
10 features = @["moderation", "analytics", "priority-support"]
11 )
12)
13
14if response.isSome:
15 let apiEmpty = response.get()
16 discard apiEmpty
17

更新租戶方案 Internal Link

參數

NameTypeRequiredDescription
tenantIdstring
idstring
updateTenantPackageBodyUpdateTenantPackageBody

回傳

回傳: Option[APIEmptyResponse]

範例

updateTenantPackage 範例
Copy Copy
1
2let packageBody = UpdateTenantPackageBody(
3 name: "Pro Plan",
4 priceCents: 1999,
5 active: true,
6 features: @["priority-support", "advanced-moderation"]
7)
8
9let (response, httpResponse) = client.updateTenantPackage(
10 tenantId = "my-tenant-123",
11 id = "pkg-789",
12 updateTenantPackageBody = packageBody
13)
14
15if response.isSome:
16 let apiEmpty = response.get()
17 echo "Tenant package updated successfully, HTTP status: " & $httpResponse.status
18

建立租戶使用者 Internal Link

參數

名稱型別必填說明
tenantIdstring
createTenantUserBodyCreateTenantUserBody

回應

回傳: Option[CreateTenantUserResponse]

範例

createTenantUser 範例
Copy Copy
1
2let (response, httpResponse) = client.createTenantUser(tenantId = "my-tenant-123",
3 createTenantUserBody = CreateTenantUserBody(userId = "user-456",
4 email = "jane.doe@example.com",
5 displayName = "Jane Doe",
6 roles = @["editor"],
7 isAdmin = false))
8if response.isSome:
9 let created = response.get()
10 discard created
11

刪除租戶使用者 Internal Link

參數

名稱類型必填描述
tenantIdstring
idstring
deleteCommentsstring
commentDeleteModestring

回應

回傳: Option[APIEmptyResponse]

範例

deleteTenantUser 範例
Copy Copy
1
2let (response, httpResponse) = client.deleteTenantUser(tenantId = "my-tenant-123", id = "user-789", deleteComments = "true", commentDeleteMode = "soft")
3if response.isSome:
4 let apiResp = response.get()
5 echo "Tenant user deleted, response: ", apiResp
6else:
7 echo "Failed to delete tenant user, HTTP status: ", $httpResponse.status
8

取得租戶使用者 Internal Link

參數

NameTypeRequiredDescription
tenantIdstring
idstring

回應

Returns: Option[GetTenantUserResponse]

範例

getTenantUser 範例
Copy Copy
1
2let (response, httpResponse) = client.getTenantUser(tenantId = "my-tenant-123", id = "user-789")
3if response.isSome:
4 let tenantUser = response.get()
5 echo "User fetched:", tenantUser
6else:
7 echo "No user found, HTTP status:", httpResponse.status
8

取得租戶使用者列表 Internal Link

參數

名稱類型必填說明
tenantIdstring
skipfloat64

回應

回傳: Option[GetTenantUsersResponse]

範例

getTenantUsers 範例
Copy Copy
1
2let (response, httpResponse) = client.getTenantUsers(tenantId = "my-tenant-123", skip = 0.0)
3
4if response.isSome:
5 let tenantUsers = response.get()
6 echo "Retrieved tenant users"
7else:
8 echo "No tenant users returned"
9

取代租戶使用者 Internal Link

參數

NameTypeRequiredDescription
tenantIdstring
idstring
replaceTenantUserBodyReplaceTenantUserBody
updateCommentsstring

回應

回傳:Option[APIEmptyResponse]

範例

replaceTenantUser 範例
Copy Copy
1
2let body = ReplaceTenantUserBody(
3 displayName = "Jane Doe",
4 email = "jane.doe@example.com",
5 externalId = "jdoe-789",
6 admin = false,
7 enabled = true,
8 tags = @["editor", "subscriber"]
9)
10
11let (response, httpResponse) = client.replaceTenantUser(
12 tenantId = "my-tenant-123",
13 id = "user-456",
14 replaceTenantUserBody = body,
15 updateComments = "true"
16)
17
18if response.isSome:
19 let apiEmpty = response.get()
20 echo "ReplaceTenantUser succeeded, http status:", httpResponse.status
21

參數

名稱類型必要描述
tenantIdstring
idstring
redirectURLstring

回應

回傳: Option[APIEmptyResponse]

範例

sendLoginLink 範例
Copy Copy
1
2let (response, httpResponse) = client.sendLoginLink(tenantId = "my-tenant-123", id = "user-456", redirectURL = "https://app.newsportal.com/welcome")
3if response.isSome:
4 let apiResp = response.get()
5 echo "Login link sent successfully"
6else:
7 echo "Failed to send login link, HTTP status: ", $httpResponse.status
8

更新租戶使用者 Internal Link

參數

NameTypeRequiredDescription
tenantIdstring
idstring
updateTenantUserBodyUpdateTenantUserBody
updateCommentsstring

回應

回傳:Option[APIEmptyResponse]

範例

updateTenantUser 範例
Copy Copy
1
2let (response, httpResponse) = client.updateTenantUser(
3 tenantId = "my-tenant-123",
4 id = "user-987",
5 updateTenantUserBody = UpdateTenantUserBody(
6 displayName = "Jane Doe",
7 email = "jane.doe@example.com",
8 roles = @["moderator", "editor"],
9 isActive = true
10 ),
11 updateComments = "true"
12)
13
14if response.isSome:
15 let apiEmpty = response.get()
16 discard apiEmpty
17

建立租戶 Internal Link

參數

名稱類型必要描述
tenantIdstring
createTenantBodyCreateTenantBody

回應

回傳: Option[CreateTenantResponse]

範例

createTenant 範例
Copy Copy
1
2let (response, httpResponse) = client.createTenant(
3 tenantId = "my-tenant-123",
4 createTenantBody = CreateTenantBody(
5 name = "My Tenant 123",
6 domain = "news.example.com",
7 allowAnonymous = false,
8 allowedOrigins = @["https://news.example.com", "https://api.news.example.com"],
9 description = "Comments for News Example"
10 )
11)
12if response.isSome:
13 let created = response.get()
14 echo "Created tenant: ", created.tenantId
15else:
16 echo "Failed to create tenant, status: ", httpResponse.status
17

刪除租戶 Internal Link

參數

名稱類型必填說明
tenantIdstring
idstring
surestring

回應

回傳:Option[APIEmptyResponse]

範例

deleteTenant 範例
Copy Copy
1
2let (response, httpResponse) = client.deleteTenant(tenantId = "my-tenant-123", id = "", sure = "")
3if response.isSome:
4 let emptyResp = response.get()
5else:
6 discard httpResponse
7

取得租戶 Internal Link

參數

名稱類型必填說明
tenantIdstring
idstring

回應

回傳: Option[GetTenantResponse]

範例

getTenant 範例
Copy Copy
1
2let (response, httpResponse) = client.getTenant(tenantId = "my-tenant-123", id = "tenant-789")
3if response.isSome:
4 let tenant = response.get()
5 discard tenant
6else:
7 discard httpResponse
8

取得租戶列表 Internal Link

參數

名稱類型必填說明
tenantIdstring
metastring
skipfloat64

回應

回傳:Option[GetTenantsResponse]

範例

getTenants 範例
Copy Copy
1
2let (response, httpResponse) = client.getTenants(tenantId = "my-tenant-123", meta = "env=production", skip = 0.0)
3if response.isSome:
4 let tenantsResp = response.get()
5 discard tenantsResp
6 echo "Tenants fetched successfully"
7else:
8 echo "Request failed with status ", httpResponse.status
9

更新租戶 Internal Link

參數

名稱類型必填說明
tenantIdstring
idstring
updateTenantBodyUpdateTenantBody

回應

回傳: Option[APIEmptyResponse]

範例

updateTenant 範例
Copy Copy
1
2let (response, httpResponse) = client.updateTenant(
3 tenantId = "my-tenant-123",
4 id = "settings",
5 updateTenantBody = UpdateTenantBody(
6 name = "My Tenant 123",
7 enableModeration = true,
8 allowedDomains = @["news.example.com", "blog.example.org"],
9 maxCommentLength = 1000
10 )
11)
12
13if response.isSome:
14 let apiResp = response.get()
15 echo "Tenant updated successfully: ", apiResp
16else:
17 echo "Failed to update tenant, HTTP status: ", httpResponse.status
18

變更工單狀態 Internal Link

參數

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

回應

回傳:Option[ChangeTicketStateResponse]

範例

changeTicketState 範例
Copy Copy
1
2let body = ChangeTicketStateBody()
3let (response, httpResponse) = client.changeTicketState(tenantId = "my-tenant-123", userId = "user-456", id = "ticket-789", changeTicketStateBody = body)
4if response.isSome:
5 let ticketResp = response.get()
6 echo "Ticket state changed:", ticketResp
7

建立工單 Internal Link

參數

名稱型別必要說明
tenantIdstring
userIdstring
createTicketBodyCreateTicketBody

回應

回傳: Option[CreateTicketResponse]

範例

createTicket 範例
Copy Copy
1
2let body = CreateTicketBody(
3 subject = "Comment moderation issue",
4 message = "Several abusive comments reported on article, please review and moderate.",
5 tags = @["moderation", "abuse", "urgent"],
6 url = "https://news.example.com/world/2026-election",
7 priority = "high"
8)
9
10let (response, httpResponse) = client.createTicket(tenantId = "my-tenant-123", userId = "user-789", createTicketBody = body)
11
12if response.isSome:
13 let ticket = response.get()
14 echo "Created ticket ID: ", ticket.id
15

取得工單 Internal Link

參數

NameTypeRequiredDescription
tenantIdstring
idstring
userIdstring

回應

回傳:Option[GetTicketResponse]

範例

getTicket 範例
Copy Copy
1
2let (response, httpResponse) = client.getTicket(tenantId = "my-tenant-123", id = "ticket-456", userId = "user-789")
3if response.isSome:
4 let ticket = response.get()
5 echo "Got ticket:", ticket
6else:
7 echo "No ticket returned; HTTP response:", httpResponse
8

取得工單列表 Internal Link

參數

名稱類型是否必填說明
tenantIdstring
userIdstring
statefloat64
skipfloat64
limitfloat64

回應

回傳:Option[GetTicketsResponse]

範例

getTickets 範例
Copy Copy
1
2let (response, httpResponse) = client.getTickets(tenantId = "my-tenant-123", userId = "user-789", state = 1.0, skip = 0.0, limit = 50.0)
3if response.isSome:
4 let tickets = response.get()
5 echo tickets
6

取得翻譯 Internal Link

參數

名稱類型必填說明
namespacestring
componentstring
localestring
useFullTranslationIdsbool

回應

回傳: Option[GetTranslationsResponse]

範例

getTranslations Example
Copy Copy
1
2let (response, httpResponse) = client.getTranslations(
3 namespace = "news-site",
4 component = "article-comments",
5 locale = "en-US",
6 useFullTranslationIds = false
7)
8if response.isSome:
9 let translations = response.get()
10 discard translations
11else:
12 echo "No translations available"
13

上傳圖片 Internal Link

參數

NameType必填說明
tenantIdstring
filestring
sizePresetSizePreset
urlIdstring

回應

回傳: Option[UploadImageResponse]

範例

uploadImage 範例
Copy Copy
1
2let (response, httpResponse) = client.uploadImage(
3 tenantId = "my-tenant-123",
4 file = "assets/images/comment-avatar.jpg",
5 sizePreset = SizePreset.small,
6 urlId = "news/article-2025-11-22"
7)
8if response.isSome:
9 let upload = response.get()
10 echo "Uploaded image id: ", upload.id
11 echo "Uploaded image url: ", upload.url
12

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

參數

名稱類型必填說明
tenantIdstring
idstring

回應

回傳: Option[APIGetUserBadgeProgressResponse]

範例

getUserBadgeProgressById 範例
Copy Copy
1
2let (response, httpResponse) = client.getUserBadgeProgressById(tenantId = "my-tenant-123", id = "")
3if response.isSome:
4 let badgeProgress = response.get()
5 echo badgeProgress
6else:
7 echo "No badge progress found"
8

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

參數

NameTypeRequiredDescription
tenantIdstring
userIdstring

回應

回傳:Option[APIGetUserBadgeProgressResponse]

範例

getUserBadgeProgressByUserId 範例
Copy Copy
1
2let tenantId = "my-tenant-123"
3let userId = "user-456"
4let (response, httpResponse) = client.getUserBadgeProgressByUserId(tenantId = tenantId, userId = userId)
5if response.isSome:
6 let badgeProgress = response.get()
7 echo "Badge progress retrieved for ", userId
8 discard badgeProgress
9

取得使用者徽章進度列表 Internal Link

參數

名稱類型必填說明
tenantIdstring
userIdstring
limitfloat64
skipfloat64

回應

回傳: Option[APIGetUserBadgeProgressListResponse]

範例

getUserBadgeProgressList 範例
Copy Copy
1
2let (response, httpResponse) = client.getUserBadgeProgressList(
3 tenantId = "my-tenant-123",
4 userId = "user-789",
5 limit = 25.0,
6 skip = 0.0
7)
8
9if response.isSome:
10 let badgeProgress = response.get()
11 echo "Received badge progress:", badgeProgress
12else:
13 echo "No badge progress; HTTP status: ", $httpResponse.status
14

建立使用者徽章 Internal Link

參數

名稱型別必填說明
tenantIdstring
createUserBadgeParamsCreateUserBadgeParams

回應

回傳: Option[APICreateUserBadgeResponse]

範例

createUserBadge 範例
Copy Copy
1
2let (response, httpResponse) = client.createUserBadge(
3 tenantId = "my-tenant-123",
4 createUserBadgeParams = CreateUserBadgeParams(
5 userId = "user-456",
6 badgeId = "top-commenter",
7 reason = "Top commenter for June 2026",
8 awardedBy = "mod-team",
9 metadata = @["news","engagement"]
10 )
11)
12if response.isSome:
13 let badgeResp = response.get()
14 discard badgeResp
15

刪除使用者徽章 Internal Link

參數

名稱類型必填描述
tenantIdstring
idstring

回應

回傳:Option[APIEmptySuccessResponse]

範例

deleteUserBadge 範例
Copy Copy
1
2let tenantId = "my-tenant-123"
3let badgeId = "badge-456"
4
5let (response, httpResponse) = client.deleteUserBadge(tenantId = tenantId, id = badgeId)
6
7if response.isSome:
8 let success = response.get()
9 echo "Badge deleted successfully for tenant: ", tenantId, " id: ", badgeId
10else:
11 echo "Failed to delete badge. HTTP status: ", $httpResponse.status
12

取得使用者徽章 Internal Link


參數

名稱類型必填描述
tenantIdstring
idstring

回應

回傳: Option[APIGetUserBadgeResponse]

範例

getUserBadge 範例
Copy Copy
1
2let (response, httpResponse) = client.getUserBadge(tenantId = "my-tenant-123", id = "badge-9876")
3if response.isSome:
4 let badge = response.get()
5 echo "Fetched badge:"
6 echo badge
7else:
8 echo "No badge found"
9 echo httpResponse
10

取得使用者徽章列表 Internal Link


參數

名稱類型必填說明
tenantIdstring
userIdstring
badgeIdstring
displayedOnCommentsbool
limitfloat64
skipfloat64

回應

回傳: Option[APIGetUserBadgesResponse]

範例

getUserBadges 範例
Copy Copy
1
2let (response, httpResponse) = client.getUserBadges(
3 tenantId = "my-tenant-123",
4 userId = "user-9876",
5 badgeId = "top-commenter",
6 displayedOnComments = true,
7 limit = 20.0,
8 skip = 0.0
9)
10
11if response.isSome:
12 let badges = response.get()
13 echo "Badges response:", badges
14else:
15 echo "No badges found (HTTP status: ", httpResponse.status, ")"
16

更新使用者徽章 Internal Link

參數

名稱類型必填說明
tenantIdstring
idstring
updateUserBadgeParamsUpdateUserBadgeParams

回應

回傳:Option[APIEmptySuccessResponse]

範例

updateUserBadge 範例
Copy Copy
1
2let (response, httpResponse) = client.updateUserBadge(
3 tenantId = "my-tenant-123",
4 id = "user-456",
5 updateUserBadgeParams = UpdateUserBadgeParams()
6)
7
8if response.isSome:
9 let success = response.get()
10 echo "Badge updated successfully"
11else:
12 echo "Badge update failed"
13

取得使用者通知計數 Internal Link

參數

名稱類型必要說明
tenantIdstring
ssostring

回應

回傳: Option[GetUserNotificationCountResponse]

範例

getUserNotificationCount 範例
Copy Copy
1
2let (response, httpResponse) = client.getUserNotificationCount(tenantId = "news-tenant-123", sso = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJ1c2VyLTI0NyIsImlhdCI6MTYw945600fQ.sflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c")
3if response.isSome:
4 let countResp = response.get()
5 echo "Received user notification count response: ", countResp
6else:
7 echo "No notification count returned"
8

取得使用者通知 Internal Link

參數

NameTypeRequiredDescription
tenantIdstring
urlIdstring
pageSizeint
afterIdstring
includeContextbool
afterCreatedAtint64
unreadOnlybool
dmOnlybool
noDmbool
includeTranslationsbool
includeTenantNotificationsbool
ssostring

回應

回傳: Option[GetMyNotificationsResponse]

範例

getUserNotifications 範例
Copy Copy
1
2let (response, httpResponse) = client.getUserNotifications(
3 tenantId = "my-tenant-123",
4 urlId = "news/article-title",
5 pageSize = 0,
6 afterId = "",
7 includeContext = false,
8 afterCreatedAt = 0,
9 unreadOnly = false,
10 dmOnly = false,
11 noDm = false,
12 includeTranslations = false,
13 includeTenantNotifications = false,
14 sso = ""
15)
16
17if response.isSome:
18 let notifications = response.get()
19 echo notifications
20

重設使用者通知計數 Internal Link

參數

名稱類型必填說明
tenantIdstring
ssostring

回應

回傳: Option[ResetUserNotificationsResponse]

範例

resetUserNotificationCount 範例
Copy Copy
1
2let (response, httpResponse) = client.resetUserNotificationCount(tenantId = "my-tenant-123", sso = "user-sso-token-456")
3if response.isSome:
4 let result = response.get()
5 echo "ResetUserNotificationsResponse:", result
6else:
7 echo "Reset failed, HTTP response:", httpResponse
8

重設使用者通知 Internal Link

參數

名稱類型必要描述
tenantIdstring
afterIdstring
afterCreatedAtint64
unreadOnlybool
dmOnlybool
noDmbool
ssostring

回應

回傳: Option[ResetUserNotificationsResponse]

範例

resetUserNotifications 範例
Copy Copy
1
2let (response, httpResponse) = client.resetUserNotifications(
3 tenantId = "my-tenant-123",
4 afterId = "",
5 afterCreatedAt = 0'i64,
6 unreadOnly = false,
7 dmOnly = false,
8 noDm = false,
9 sso = ""
10)
11if response.isSome:
12 let resetResp = response.get()
13 echo "ResetUserNotificationsResponse received"
14else:
15 echo "No ResetUserNotificationsResponse"
16

更新使用者對評論訂閱的通知狀態 Internal Link

啟用或停用針對特定留言的通知。

參數

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

回應

回傳: Option[UpdateUserNotificationCommentSubscriptionStatusResponse]

範例

updateUserNotificationCommentSubscriptionStatus 範例
Copy Copy
1
2let (response, httpResponse) = client.updateUserNotificationCommentSubscriptionStatus(
3 tenantId = "my-tenant-123",
4 notificationId = "",
5 optedInOrOut = "",
6 commentId = "cmt-789",
7 sso = ""
8)
9
10if response.isSome:
11 let updateResp = response.get()
12 echo "Subscription update response: ", updateResp
13

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

啟用或停用頁面通知。當使用者訂閱頁面時,會為新的頂層留言建立通知,並且也

參數

名稱型別必填說明
tenantIdstringYes
urlIdstringYes
urlstringNo
pageTitlestringNo
subscribedOrUnsubscribedstringNo
ssostringNo

回應

回傳:Option[UpdateUserNotificationPageSubscriptionStatusResponse]

範例

updateUserNotificationPageSubscriptionStatus 範例
Copy Copy
1
2let (response, httpResponse) = client.updateUserNotificationPageSubscriptionStatus(
3 tenantId = "my-tenant-123",
4 urlId = "news/economy/market-rally-2026-06-19",
5 url = "",
6 pageTitle = "",
7 subscribedOrUnsubscribed = "",
8 sso = ""
9)
10
11if response.isSome:
12 let updateResp = response.get()
13 echo "Subscription update received: ", updateResp
14else:
15 echo "No subscription update returned."
16

更新使用者通知狀態 Internal Link

參數

NameTypeRequiredDescription
tenantIdstring
notificationIdstring
newStatusstring
ssostring

回應

回傳: Option[UpdateUserNotificationStatusResponse]

範例

updateUserNotificationStatus 範例
Copy Copy
1
2let (response, httpResponse) = client.updateUserNotificationStatus(
3 tenantId = "my-tenant-123",
4 notificationId = "notif-456",
5 newStatus = "read",
6 sso = "sso-token-abc123"
7)
8if response.isSome:
9 let updated = response.get()
10 echo "Notification status updated successfully"
11else:
12 echo "No update response received"
13

取得使用者在線狀態 Internal Link


參數

名稱類型必填描述
tenantIdstring
urlIdWSstring
userIdsstring

回應

回傳: Option[GetUserPresenceStatusesResponse]

範例

getUserPresenceStatuses 範例
Copy Copy
1
2let (response, httpResponse) = client.getUserPresenceStatuses(tenantId = "my-tenant-123", urlIdWS = "news/article-title", userIds = "user-123,user-456")
3if response.isSome:
4 let presenceStatuses = response.get()
5 echo presenceStatuses
6else:
7 echo "No presence data"
8

搜尋使用者 Internal Link

參數

NameTypeRequiredDescription
tenantIdstringYes
urlIdstringYes
usernameStartsWithstringNo
mentionGroupIdsseq[string]No
ssostringNo
searchSectionstringNo

回應

回傳: Option[SearchUsersResult]

範例

searchUsers 範例
Copy Copy
1
2let (response, httpResponse) = client.searchUsers(
3 tenantId = "my-tenant-123",
4 urlId = "news/top-story",
5 usernameStartsWith = "",
6 mentionGroupIds = @[],
7 sso = "",
8 searchSection = ""
9)
10
11if response.isSome:
12 let searchResult = response.get()
13 echo "SearchUsersResult:", searchResult
14else:
15 echo "No result or error. HTTP response:", httpResponse
16

取得使用者 Internal Link

參數

名稱類型必填說明
tenantIdstring
idstring

回應

回傳: Option[GetUserResponse]

範例

getUser 範例
Copy Copy
1
2let (response, httpResponse) = client.getUser(tenantId = "my-tenant-123", id = "user-456")
3if response.isSome:
4 let user = response.get()
5 echo user
6else:
7 echo "User not found"
8

建立投票 Internal Link

參數

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

回應

回傳: Option[VoteResponse]

範例

createVote 範例
Copy Copy
1
2let (response, httpResponse) = client.createVote(
3 tenantId = "my-tenant-123",
4 commentId = "cmt-987654",
5 direction = "up",
6 userId = "user-42",
7 anonUserId = ""
8)
9if response.isSome:
10 let vote = response.get()
11 echo "Vote created:", vote
12else:
13 echo "No vote returned"
14

刪除投票 Internal Link

參數

NameTypeRequiredDescription
tenantIdstring
idstring
editKeystring

回應

回傳:Option[VoteDeleteResponse]

範例

deleteVote 範例
Copy Copy
1
2let (response, httpResponse) = client.deleteVote(tenantId = "my-tenant-123", id = "vote-7f3b2a", editKey = "")
3if response.isSome:
4 let voteDelete = response.get()
5 echo "Vote deleted successfully"
6else:
7 echo "Failed to delete vote"
8

取得投票列表 Internal Link


參數

NameTypeRequiredDescription
tenantIdstring
urlIdstring

回應

回傳: Option[GetVotesResponse]

範例

getVotes 範例
Copy Copy
1
2let (response, httpResponse) = client.getVotes(tenantId = "my-tenant-123", urlId = "news/breaking-article-456")
3if response.isSome:
4 let votesResp = response.get()
5 echo "Received votes response:", $votesResp
6else:
7 echo "No votes returned, HTTP response:", $httpResponse
8

取得使用者的投票 Internal Link

參數

名稱類型必填說明
tenantIdstring
urlIdstring
userIdstring
anonUserIdstring

回應

回傳: Option[GetVotesForUserResponse]

範例

getVotesForUser 範例
Copy Copy
1
2let (response, httpResponse) = client.getVotesForUser(
3 tenantId = "my-tenant-123",
4 urlId = "news/article-title",
5 userId = "user-789",
6 anonUserId = ""
7)
8if response.isSome:
9 let votes = response.get()
10 echo "User votes retrieved"
11else:
12 echo "No votes found"
13


需要協助?

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

貢獻

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