FastComments.com

FastComments C++ SDK

這是 FastComments 的官方 C++ SDK。

FastComments API 的官方 C++ SDK

Repository

在 GitHub 上查看

AI 程式編寫代理 Internal Link

skills.sh

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

npx skills add fastcomments/skills

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

需求 Internal Link

  • C++17 或更新版本
  • CMake 3.14 或更新版本
  • OpenSSL
  • C++ REST SDK (cpprestsdk)
  • Boost
  • Google Test (會自動下載用於測試)

安裝 Internal Link

安裝相依套件

sudo apt install libcpprest-dev libboost-all-dev

從原始碼建置

mkdir build
cd build
cmake ..
make

安裝

sudo make install

函式庫內容

此函式庫包含已產生的 API 客戶端以及 SSO 工具,可讓使用 API 更加方便。

公開 API 與受保護 API

對於 API 客戶端,有三個類別,DefaultApi、PublicApi 與 ModerationApi。DefaultApi 包含需要您的 API 金鑰的方法,PublicApi 包含可直接從瀏覽器/行動裝置等無需驗證即可呼叫的方法。ModerationApi 提供大量即時且快速的審核 API。每個 ModerationApi 方法都接受 sso 參數,並可透過 SSO 或 FastComments.com 的會話 Cookie 進行驗證。

備註 Internal Link

廣播 ID

你會看到在某些 API 呼叫中需要傳入 broadcastId。當你接收到事件時,會收到這個 ID 回傳,所以如果你打算在客戶端樂觀地套用變更(你很可能會這樣做,因為它提供最佳的使用體驗),就能知道要忽略該事件。請在此處傳入一個 UUID。此 ID 應該足夠唯一,不會在瀏覽器工作階段中出現兩次。

SSO(單一登入)

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

單一登入使用方式 Internal Link

簡易 SSO

#include <fastcomments/sso/fastcomments_sso.hpp>
#include <iostream>

using namespace fastcomments::sso;

int main() {
    SimpleSSOUserData user("user-123", "user@example.com", "https://example.com/avatar.jpg");
    FastCommentsSSO sso = FastCommentsSSO::newSimple(user);
    std::string token = sso.createToken();

    std::cout << "SSO Token: " << token << std::endl;
    return 0;
}

安全 SSO

#include <fastcomments/sso/fastcomments_sso.hpp>
#include <iostream>

using namespace fastcomments::sso;

int main() {
    SecureSSOUserData user("user-123", "user@example.com", "johndoe", "https://example.com/avatar.jpg");

    std::string apiKey = "your-api-key";
    FastCommentsSSO sso = FastCommentsSSO::newSecure(apiKey, user);
    std::string token = sso.createToken();

    std::cout << "Secure SSO Token: " << token << std::endl;
    return 0;
}

彙總 Internal Link

Aggregates documents by grouping them (if groupBy is provided) and applying multiple operations. Different operations (e.g. sum, countDistinct, avg, etc.) are supported.

參數

名稱類型必填說明
tenantIdstringYes
aggregationRequestAggregationRequestYes
optionsconst AggregateOptions&Yes

回應

返回: AggregateResponse

範例

聚合範例
Copy Copy
1
2utility::string_t tenantId = U("my-tenant-123");
3
4AggregationRequest aggregationRequest;
5aggregationRequest.setMetric(U("commentCount"));
6aggregationRequest.setStartDate(U("2023-01-01T00:00:00Z"));
7aggregationRequest.setEndDate(U("2023-12-31T23:59:59Z"));
8aggregationRequest.setFilters({ U("status:approved") });
9
10AggregateOptions options;
11options.limit = boost::optional<int>(100);
12options.includeMetadata = boost::optional<bool>(true);
13
14api->aggregate(tenantId, aggregationRequest, options)
15 .then([](pplx::task<std::shared_ptr<AggregateResponse>> task) {
16 try {
17 auto response = task.get();
18 // 處理回應
19 } catch (const std::exception& e) {
20 // 處理錯誤
21 }
22 });
23

取得稽核日誌 Internal Link

參數

名稱類型必填描述
tenantIdstringYes
optionsconst GetAuditLogsOptions&Yes

回應

Returns: GetAuditLogsResponse

範例

getAuditLogs 範例
Copy Copy
1
2utility::string_t tenantId = U("my-tenant-123");
3
4GetAuditLogsOptions options;
5options.startDate = boost::optional<utility::datetime>(utility::datetime::from_string(U("2023-01-01T00:00:00Z"), utility::datetime::RFC_1123));
6options.endDate = boost::optional<utility::datetime>(utility::datetime::from_string(U("2023-01-31T23:59:59Z"), utility::datetime::RFC_1123));
7options.limit = boost::optional<int>(100);
8
9api->getAuditLogs(tenantId, options).then([](pplx::task<std::shared_ptr<GetAuditLogsResponse>> t) {
10 try {
11 auto response = t.get();
12 // 使用回應
13 } catch (const std::exception& e) {
14 // 處理錯誤
15 }
16});
17

公開登出 Internal Link

回應

返回:APIEmptyResponse

範例

logoutPublic 範例
Copy Copy
1
2api->logoutPublic()
3 .then([](std::shared_ptr<APIEmptyResponse> /*resp*/) {
4 std::cout << "Logout successful\n";
5 })
6 .then([](pplx::task<void> t) {
7 try {
8 t.get();
9 } catch (const std::exception& e) {
10 std::cerr << "Logout failed: " << e.what() << std::endl;
11 }
12 });
13

公開從評論封鎖 Internal Link

參數

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

回應

Returns: BlockSuccess

範例

blockFromCommentPublic 範例
Copy Copy
1
2auto tenantId = utility::conversions::to_string_t("my-tenant-123");
3auto commentId = utility::conversions::to_string_t("comment-987654");
4PublicBlockFromCommentParams blockParams;
5blockParams.reason = utility::conversions::to_string_t("spam");
6blockParams.durationHours = 24;
7boost::optional<utility::string_t> sso = utility::conversions::to_string_t("sso-token-abc123");
8api->blockFromCommentPublic(tenantId, commentId, blockParams, sno)
9 .then([](std::shared_ptr<BlockSuccess> result){
10 auto successCopy = std::make_shared<BlockSuccess>(*result);
11 });
12

公開解除評論封鎖 Internal Link

參數

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

回應

返回:UnblockSuccess

範例

unBlockCommentPublic 範例
Copy Copy
1
2auto blockParams = PublicBlockFromCommentParams();
3blockParams.reason = U("spam");
4api->unBlockCommentPublic(
5 U("my-tenant-123"),
6 U("comment-789"),
7 blockParams,
8 boost::optional<utility::string_t>(U("sso-token-abc"))
9).then([](std::shared_ptr<UnblockSuccess> result){ });
10

檢查已封鎖的評論 Internal Link

Parameters

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

Response

返回: CheckBlockedCommentsResponse

Example

checkedCommentsForBlocked 範例
Copy Copy
1
2auto tenantId = U("my-tenant-123");
3auto commentIds = U("cmt-001,cmt-002");
4boost::optional<utility::string_t> sso = U("user@example.com");
5
6api->checkedCommentsForBlocked(tenantId, commentIds, sso).then([](std::shared_ptr<CheckBlockedCommentsResponse> resp){
7 (void)resp;
8});
9

從評論封鎖使用者 Internal Link

參數

名稱類型必須描述
tenantIdstring是
idstring是
blockFromCommentParamsBlockFromCommentParams是
optionsconst BlockUserFromCommentOptions&是

回應

返回:BlockSuccess

範例

blockUserFromComment 範例
Copy Copy
1
2auto tenantId = utility::conversions::to_string_t("my-tenant-123");
3auto commentId = utility::conversions::to_string_t("comment-789");
4BlockFromCommentParams params;
5params.reason = utility::conversions::to_string_t("Inappropriate content");
6params.durationDays = boost::optional<int>(30);
7BlockUserFromCommentOptions options;
8options.notifyUser = boost::optional<bool>(true);
9
10api->blockUserFromComment(tenantId, commentId, params, options)
11 .then([](std::shared_ptr<BlockSuccess> result){ })
12 .then([](pplx::task<void> t){ try { t.get(); } catch (const std::exception&) { } });
13

公開建立評論 Internal Link

參數

名稱類型必填說明
tenantIdstring是
urlIdstring是
broadcastIdstring是
commentDataCommentData是
optionsconst CreateCommentPublicOptions&是

回應

返回: SaveCommentsResponseWithPresence

範例

createCommentPublic 範例
Copy Copy
1
2auto comment = CommentData();
3comment.body = U("This is a test comment");
4comment.authorName = U("John Doe");
5comment.authorEmail = U("john.doe@example.com");
6
7CreateCommentPublicOptions opts;
8opts.replyToCommentId = boost::optional<utility::string_t>(U("parent-123"));
9
10api->createCommentPublic(
11 U("my-tenant-123"),
12 U("article-456"),
13 U("broadcast-789"),
14 comment,
15 opts).then([](std::shared_ptr<SaveCommentsResponseWithPresence> res){
16 auto commentId = res->commentId;
17 });
18

刪除評論 Internal Link

參數

名稱類型必填說明
tenantIdstring是
idstring是
optionsconst DeleteCommentOptions&是

回應

返回: DeleteCommentResult

範例

deleteComment 範例
Copy Copy
1
2auto tenantId = utility::conversions::to_string_t("my-tenant-123");
3auto commentId = utility::conversions::to_string_t("comment-789");
4DeleteCommentOptions options;
5options.reason = boost::optional<utility::string_t>(utility::conversions::to_string_t("Inappropriate content"));
6options.force = boost::optional<bool>(true);
7api->deleteComment(tenantId, commentId, options).then([](pplx::task<std::shared_ptr<DeleteCommentResult>> task){
8 try{
9 auto result = task.get();
10 }catch(const std::exception&){
11 }
12});
13

公開刪除評論 Internal Link

參數

名稱類型必填說明
tenantIdstringYes
commentIdstringYes
broadcastIdstringYes
optionsconst DeleteCommentPublicOptions&Yes

回應

回傳:PublicAPIDeleteCommentResponse

範例

deleteCommentPublic 範例
Copy Copy
1
2auto tenantId = utility::string_t(U("my-tenant-123"));
3auto commentId = utility::string_t(U("comment-456"));
4auto broadcastId = utility::string_t(U("broadcast-789"));
5DeleteCommentPublicOptions options;
6options.force = boost::optional<bool>(true);
7options.reason = boost::optional<utility::string_t>(U("Inappropriate content"));
8api->deleteCommentPublic(tenantId, commentId, broadcastId, options)
9 .then([](pplx::task<std::shared_ptr<PublicAPIDeleteCommentResponse>> t){
10 try{
11 auto resp = t.get();
12 }catch(const std::exception& e){
13 }
14 });
15

刪除評論投票 Internal Link

參數

名稱類型必填描述
tenantIdstring是
commentIdstring是
voteIdstring是
urlIdstring是
broadcastIdstring是
optionsconst DeleteCommentVoteOptions&是

回應

Returns: VoteDeleteResponse

範例

deleteCommentVote 範例
Copy Copy
1
2auto options = DeleteCommentVoteOptions{};
3options.reason = boost::optional<utility::string_t>(U("spam"));
4options.adminOverride = boost::optional<bool>(true);
5
6api->deleteCommentVote(
7 U("my-tenant-123"),
8 U("cmt-456789"),
9 U("vote-987"),
10 U("url-abc123"),
11 U("broadcast-001"),
12 options
13).then([](std::shared_ptr<VoteDeleteResponse> resp){
14 if (resp) {
15 std::cout << "Deleted vote, code: " << resp->code << std::endl;
16 }
17});
18

檢舉評論 Internal Link

參數

名稱類型必填說明
tenantIdstring是
idstring是
optionsconst FlagCommentOptions&是

回應

回傳: FlagCommentResponse

範例

flagComment 範例
Copy Copy
1
2auto opts = std::make_shared<FlagCommentOptions>();
3opts->reason = utility::conversions::to_string_t("spam");
4opts->note = boost::optional<utility::string_t>(utility::conversions::to_string_t("User posted duplicate links"));
5
6api->flagComment(utility::conversions::to_string_t("my-tenant-123"),
7 utility::conversions::to_string_t("comment-456"),
8 *opts)
9 .then([](pplx::task<std::shared_ptr<FlagCommentResponse>> t) {
10 auto resp = t.get();
11 });
12

取得評論 Internal Link

參數

名稱類型必填說明
tenantIdstringYes
idstringYes

回應

返回: APIGetCommentResponse

範例

getComment 範例
Copy Copy
1
2auto tenantId = utility::conversions::to_string_t("my-tenant-123");
3auto commentId = utility::conversions::to_string_t("comment-456");
4boost::optional<int> maxDepth = boost::none;
5api->getComment(tenantId, commentId).then([](pplx::task<std::shared_ptr<APIGetCommentResponse>> t){
6 try{
7 auto resp = t.get();
8 }catch(const std::exception&){
9 }
10});
11

取得多則評論 Internal Link

參數

名稱類型必填描述
tenantIdstring是
optionsconst GetCommentsOptions&是

回應

Returns: APIGetCommentsResponse

範例

getComments 範例
Copy Copy
1
2utility::string_t tenantId = U("my-tenant-123");
3GetCommentsOptions options;
4options.page = 1;
5options.limit = 50;
6options.sort = U("newest");
7options.authorEmail = boost::optional<utility::string_t>(U("user@example.com"));
8api->getComments(tenantId, options).then([](pplx::task<std::shared_ptr<APIGetCommentsResponse>> task) {
9 try {
10 auto response = task.get();
11 // 使用回應資料
12 } catch (const std::exception& e) {
13 // 處理錯誤
14 }
15});
16

公開取得評論 Internal Link

請求 tenantId urlId

參數

名稱類型必要說明
tenantIdstringYes
urlIdstringYes
optionsconst GetCommentsPublicOptions&Yes

回應

Returns: GetCommentsResponseWithPresence_PublicComment_

範例

getCommentsPublic 範例
Copy Copy
1
2auto tenantId = U("my-tenant-123");
3auto urlId = U("article-456");
4GetCommentsPublicOptions opts;
5opts.pageSize = 20;
6opts.includeDeleted = false;
7api->getCommentsPublic(tenantId, urlId, opts).then([](std::shared_ptr<GetCommentsResponseWithPresence_PublicComment_> resp) {
8 (void)resp;
9});
10

取得評論文字 Internal Link

參數

名稱類型必填描述
tenantIdstringYes
commentIdstringYes
optionsconst GetCommentTextOptions&Yes

回應

返回:PublicAPIGetCommentTextResponse

範例

getCommentText 示例
Copy Copy
1
2utility::string_t tenantId = U("my-tenant-123");
3utility::string_t commentId = U("cmt-456789");
4auto options = std::make_shared<GetCommentTextOptions>();
5options->language = boost::optional<utility::string_t>(U("en"));
6options->includeDeleted = boost::optional<bool>(false);
7api->getCommentText(tenantId, commentId, *options).then([](pplx::task<std::shared_ptr<PublicAPIGetCommentTextResponse>> task){
8 try{
9 auto response = task.get();
10 (void)response;
11 }catch(...){}
12});
13

取得評論投票使用者名稱 Internal Link

參數

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

回應

返回: GetCommentVoteUserNamesSuccessResponse

範例

getCommentVoteUserNames 範例
Copy Copy
1
2auto task = api->getCommentVoteUserNames(
3 utility::conversions::to_string_t("my-tenant-123"),
4 utility::conversions::to_string_t("comment-456"),
5 static_cast<int32_t>(1),
6 boost::optional<utility::string_t>(utility::conversions::to_string_t("sso-token"))
7).then([](pplx::task<std::shared_ptr<GetCommentVoteUserNamesSuccessResponse>> t){
8 try{
9 auto response = t.get();
10 }catch(const std::exception&){ }
11});
12

鎖定評論 Internal Link

參數

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

回應

返回:APIEmptyResponse

範例

lockComment 範例
Copy Copy
1
2auto tenantId = utility::conversions::to_string_t("my-tenant-123");
3auto commentId = utility::conversions::to_string_t("comment-987");
4auto broadcastId = utility::conversions::to_string_t("broadcast-654");
5boost::optional<utility::string_t> sso = utility::conversions::to_string_t("sso-token-xyz");
6
7api->lockComment(tenantId, commentId, broadcastId, sso).then([](pplx::task<std::shared_ptr<APIEmptyResponse>> task){
8 try{
9 auto response = task.get();
10 }catch(const std::exception&){
11 }
12});
13

置頂評論 Internal Link

參數

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

回應

返回:ChangeCommentPinStatusResponse

範例

pinComment 範例
Copy Copy
1
2utility::string_t tenantId = U("my-tenant-123");
3utility::string_t commentId = U("comment-456");
4utility::string_t broadcastId = U("broadcast-789");
5boost::optional<utility::string_t> sso = U("sso-token-abc");
6
7api->pinComment(tenantId, commentId, broadcastId, sso)
8 .then([](pplx::task<std::shared_ptr<ChangeCommentPinStatusResponse>> task) {
9 try {
10 auto response = task.get();
11 } catch (const std::exception&) {
12 }
13 });
14

儲存評論 Internal Link

參數

名稱類型必填說明
tenantIdstringYes
createCommentParamsCreateCommentParamsYes
optionsconst SaveCommentOptions&Yes

回應

Returns: APISaveCommentResponse

範例

saveComment 範例
Copy Copy
1
2CreateCommentParams commentParams;
3commentParams.body = utility::string_t(U("Great article!"));
4commentParams.author = utility::string_t(U("jane.doe@example.com"));
5commentParams.parentId = boost::optional<utility::string_t>(utility::string_t(U("parent-789")));
6
7SaveCommentOptions options;
8options.preview = boost::optional<bool>(false);
9
10api->saveComment(utility::string_t(U("my-tenant-123")), commentParams, options)
11 .then([](std::shared_ptr<APISaveCommentResponse> response) {
12 auto commentId = response->commentId;
13 });
14

設定評論文字 Internal Link

參數

名稱類型必填說明
tenantIdstringYes
commentIdstringYes
broadcastIdstringYes
commentTextUpdateRequestCommentTextUpdateRequestYes
optionsconst SetCommentTextOptions&Yes

回應

回傳: PublicAPISetCommentTextResponse

範例

setCommentText 範例
Copy Copy
1
2auto tenantId = U("my-tenant-123");
3auto commentId = U("cmt-456");
4auto broadcastId = U("brd-789");
5
6CommentTextUpdateRequest updateReq;
7updateReq.text = U("Updated comment content");
8updateReq.isEdited = boost::make_optional(true);
9
10SetCommentTextOptions opts;
11opts.notifySubscribers = boost::make_optional(true);
12
13api->setCommentText(tenantId, commentId, broadcastId, updateReq, opts)
14 .then([](std::shared_ptr<PublicAPISetCommentTextResponse> resp) {
15 });
16

解除使用者評論封鎖 Internal Link

參數

名稱類型必填說明
tenantIdstringYes
idstringYes
unBlockFromCommentParamsUnBlockFromCommentParamsYes
optionsconst UnBlockUserFromCommentOptions&Yes

回應

返回: UnblockSuccess

範例

unBlockUserFromComment 範例
Copy Copy
1
2auto params = std::make_shared<UnBlockFromCommentParams>();
3params->commentId = U("cmt-12345");
4params->reason = U("resolved");
5UnBlockUserFromCommentOptions opts;
6opts.notifyUser = boost::optional<bool>(true);
7api->unBlockUserFromComment(U("my-tenant-123"), U("user-456"), *params, opts)
8 .then([](pplx::task<std::shared_ptr<UnblockSuccess>> t){
9 try{
10 auto result = t.get();
11 }catch(...){}
12 });
13

取消檢舉評論 Internal Link

參數

名稱類型Required描述
tenantIdstringYes
idstringYes
optionsconst UnFlagCommentOptions&Yes

回應

返回:FlagCommentResponse

範例

unFlagComment 範例
Copy Copy
1
2auto options = UnFlagCommentOptions{};
3options.reason = boost::optional<utility::string_t>(U("Resolved by moderator"));
4api->unFlagComment(U("my-tenant-123"), U("comment-456"), options)
5 .then([](std::shared_ptr<FlagCommentResponse> response) {
6 if (response) {
7 auto status = response->status;
8 // 如有需要,處理狀態
9 }
10 })
11 .then([](pplx::task<void> previous) {
12 try {
13 previous.get();
14 } catch (const std::exception& e) {
15 // 處理錯誤
16 }
17 });
18

解除鎖定評論 Internal Link

參數

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

回應

返回: APIEmptyResponse

範例

unLockComment 範例
Copy Copy
1
2auto tenantId = utility::conversions::to_string_t("my-tenant-123");
3auto commentId = utility::conversions::to_string_t("cmt-456789");
4auto broadcastId = utility::conversions::to_string_t("broadcast-001");
5boost::optional<utility::string_t> sso = utility::conversions::to_string_t("john.doe@example.com");
6
7api->unLockComment(tenantId, commentId, broadcastId, sso).then([](pplx::task<std::shared_ptr<APIEmptyResponse>> task) {
8 try {
9 auto response = task.get();
10 } catch (const std::exception&) {
11 }
12});
13

取消置頂評論 Internal Link

參數

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

回應

返回:ChangeCommentPinStatusResponse

範例

unPinComment 範例
Copy Copy
1
2auto task = api->unPinComment(
3 utility::conversions::to_string_t("my-tenant-123"),
4 utility::conversions::to_string_t("cmt-456789"),
5 utility::conversions::to_string_t("broadcast-001"),
6 boost::optional<utility::string_t>(utility::conversions::to_string_t("user@example.com"))
7);
8task.then([](std::shared_ptr<ChangeCommentPinStatusResponse> resp){
9 auto result = std::make_shared<ChangeCommentPinStatusResponse>(*resp);
10});
11

更新評論 Internal Link

參數

名稱類型必填描述
tenantIdstring是
idstring是
updatableCommentParamsUpdatableCommentParams是
optionsconst UpdateCommentOptions&是

回應

返回: APIEmptyResponse

範例

updateComment 範例
Copy Copy
1
2auto tenantId = utility::string_t("my-tenant-123");
3auto commentId = utility::string_t("cmt-789");
4UpdatableCommentParams updatable;
5updatable.body = utility::string_t("Edited comment content");
6updatable.isSpam = boost::optional<bool>(false);
7UpdateCommentOptions options;
8options.notify = boost::optional<bool>(true);
9api->updateComment(tenantId, commentId, updatable, options)
10 .then([](std::shared_ptr<APIEmptyResponse>) {})
11 .then([](pplx::task<void> t) { try { t.get(); } catch(const std::exception&) {} });
12

投票評論 Internal Link

參數

名稱型別必填說明
tenantIdstring是
commentIdstring是
urlIdstring是
broadcastIdstring是
voteBodyParamsVoteBodyParams是
optionsconst VoteCommentOptions&是

回應

返回:VoteResponse

範例

voteComment 示例
Copy Copy
1
2auto tenantId = utility::conversions::to_string_t("my-tenant-123");
3auto commentId = utility::conversions::to_string_t("comment-7890");
4auto urlId = utility::conversions::to_string_t("article-456");
5auto broadcastId = utility::conversions::to_string_t("broadcast-321");
6
7VoteBodyParams voteParams;
8voteParams.upvote = true;
9voteParams.note = boost::optional<utility::string_t>(utility::conversions::to_string_t("Great insight"));
10
11VoteCommentOptions options;
12options.dryRun = boost::optional<bool>(false);
13
14api->voteComment(tenantId, commentId, urlId, broadcastId, voteParams, options)
15 .then([](pplx::task<std::shared_ptr<VoteResponse>> t) {
16 try {
17 auto response = t.get();
18 // 處理回應
19 } catch (const std::exception&) {
20 }
21 });
22

取得使用者評論 Internal Link

參數

名稱類型必填描述
optionsconst GetCommentsForUserOptions&是

回應

返回:GetCommentsForUserResponse

範例

getCommentsForUser 範例
Copy Copy
1
2auto options = GetCommentsForUserOptions{
3 utility::conversions::to_string_t("my-tenant-123"),
4 utility::conversions::to_string_t("user@example.com"),
5 boost::optional<int>(50),
6 boost::optional<utility::string_t>(utility::conversions::to_string_t("next-page-token"))
7};
8
9api->getCommentsForUser(options).then([](pplx::task<std::shared_ptr<GetCommentsForUserResponse>> task){
10 try{
11 auto response = task.get();
12 }catch(const std::exception&){}
13});
14

新增網域設定 Internal Link

參數

NameTypeRequiredDescription
tenantIdstring是
addDomainConfigParamsAddDomainConfigParams是

回應

返回: AddDomainConfigResponse

範例

addDomainConfig 範例
Copy Copy
1
2utility::string_t tenantId = U("my-tenant-123");
3AddDomainConfigParams params;
4params.domain = U("example.com");
5params.adminEmail = U("admin@example.com");
6params.notes = boost::optional<utility::string_t>(U("Primary domain"));
7api->addDomainConfig(tenantId, params).then([](pplx::task<std::shared_ptr<AddDomainConfigResponse>> task){
8 try{
9 auto response = task.get();
10 }catch(const std::exception&){
11 }
12});
13

刪除網域設定 Internal Link

參數

名稱類型必填描述
tenantIdstringYes
domainstringYes

回應

返回:DeleteDomainConfigResponse

範例

deleteDomainConfig 範例
Copy Copy
1
2boost::optional<utility::string_t> optTenant = U("my-tenant-123");
3boost::optional<utility::string_t> optDomain = U("example.com");
4
5api->deleteDomainConfig(optTenant.value(), optDomain.value())
6 .then([](pplx::task<std::shared_ptr<DeleteDomainConfigResponse>> task) {
7 try {
8 auto response = task.get();
9 } catch (const std::exception&) {
10 }
11 });
12

取得網域設定 Internal Link

參數

名稱類型必填說明
tenantIdstringYes
domainstringYes

回應

回傳: GetDomainConfigResponse

範例

getDomainConfig 範例
Copy Copy
1
2utility::string_t tenantId = U("my-tenant-123");
3utility::string_t domain = U("myblog.example.com");
4
5api->getDomainConfig(tenantId, domain)
6 .then([](std::shared_ptr<GetDomainConfigResponse> response) {
7 if (!response) return;
8 boost::optional<bool> moderationEnabled = response->moderationEnabled;
9 boost::optional<std::string> theme = response->theme;
10 if (moderationEnabled && *moderationEnabled) {
11 // 處理已啟用的審核
12 }
13 if (theme) {
14 // 使用主題值
15 }
16 })
17 .wait();
18

取得所有網域設定 Internal Link

參數

名稱類型必填說明
tenantIdstringYes

回應

返回:GetDomainConfigsResponse

範例

getDomainConfigs 範例
Copy Copy
1
2utility::string_t tenantId = U("my-tenant-123");
3boost::optional<utility::string_t> optionalTenant = tenantId;
4api->getDomainConfigs(optionalTenant.value())
5 .then([](std::shared_ptr<GetDomainConfigsResponse> response) {
6 auto domains = response->getDomainList();
7 for (const auto& d : domains) {
8 std::cout << d << std::endl;
9 }
10 });
11

修補網域設定 Internal Link

參數

名稱類型必填描述
tenantIdstringYes
domainToUpdatestringYes
patchDomainConfigParamsPatchDomainConfigParamsYes

回應

返回:PatchDomainConfigResponse

範例

patchDomainConfig 範例
Copy Copy
1
2auto tenantId = utility::conversions::to_string_t("my-tenant-123");
3auto domainToUpdate = utility::conversions::to_string_t("example.com");
4PatchDomainConfigParams patchDomainConfigParams;
5patchDomainConfigParams.enableComments = boost::optional<bool>(true);
6patchDomainConfigParams.moderationLevel = boost::optional<int>(2);
7patchDomainConfigParams.customHeader = boost::optional<utility::string_t>(utility::conversions::to_string_t("X-Custom-Header"));
8
9api->patchDomainConfig(tenantId, domainToUpdate, patchDomainConfigParams)
10 .then([](std::shared_ptr<PatchDomainConfigResponse> resp) {
11 // 成功處理
12 })
13 .then([](pplx::task<void> t) {
14 try { t.get(); } catch (const std::exception& e) { /* 錯誤處理 */ }
15 });
16

放置網域設定 Internal Link

參數

名稱類型必填描述
tenantIdstringYes
domainToUpdatestringYes
updateDomainConfigParamsUpdateDomainConfigParamsYes

回應

回傳: PutDomainConfigResponse

範例

putDomainConfig 範例
Copy Copy
1
2utility::string_t tenantId = U("my-tenant-123");
3utility::string_t domainToUpdate = U("example.com");
4UpdateDomainConfigParams updateParams;
5updateParams.enableComments = true;
6updateParams.moderationLevel = boost::optional<int>(2);
7updateParams.customCss = boost::optional<utility::string_t>(U(".fc-comment{color:red;}"));
8api->putDomainConfig(tenantId, domainToUpdate, updateParams)
9 .then([](std::shared_ptr<PutDomainConfigResponse> resp) {
10 });
11

建立電子郵件範本 Internal Link

參數

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

回應

返回:CreateEmailTemplateResponse

示例

createEmailTemplate 示例
Copy Copy
1
2auto body = std::make_shared<CreateEmailTemplateBody>();
3body->subject = utility::string_t("Welcome Email");
4body->htmlContent = utility::string_t("<h1>Welcome!</h1><p>Thanks for joining.</p>");
5body->fromEmail = utility::string_t("no-reply@myapp.com");
6body->replyTo = boost::optional<utility::string_t>(utility::string_t("support@myapp.com"));
7body->cc = boost::none;
8api->createEmailTemplate(utility::string_t("my-tenant-123"), *body)
9 .then([](std::shared_ptr<CreateEmailTemplateResponse> resp) {
10 std::cout << "Created template ID: " << resp->id << std::endl;
11 });
12

刪除電子郵件範本 Internal Link

參數

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

回應

返回: APIEmptyResponse

範例

deleteEmailTemplate 範例
Copy Copy
1
2auto tenantId = utility::conversions::to_string_t("my-tenant-123");
3auto templateId = utility::conversions::to_string_t("welcome-email-template");
4boost::optional<utility::string_t> optTenantId = tenantId;
5boost::optional<utility::string_t> optTemplateId = templateId;
6api->deleteEmailTemplate(optTenantId.value(), optTemplateId.value())
7 .then([](pplx::task<std::shared_ptr<APIEmptyResponse>> t) {
8 try { t.get(); }
9 catch (const std::exception&) {}
10 });
11

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

參數

名稱類型必填描述
tenantIdstringYes
idstringYes
errorIdstringYes

回應

返回: APIEmptyResponse

範例

deleteEmailTemplateRenderError 範例
Copy Copy
1
2boost::optional<utility::string_t> optTemplateId = utility::conversions::to_string_t("template-456");
3api->deleteEmailTemplateRenderError(
4 utility::conversions::to_string_t("my-tenant-123"),
5 *optTemplateId,
6 utility::conversions::to_string_t("error-789"))
7 .then([](std::shared_ptr<APIEmptyResponse>) {})
8 .then([](pplx::task<void> t) {
9 try { t.get(); } catch (...) {}
10 });
11

取得電子郵件範本 Internal Link

參數

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

回應

返回:GetEmailTemplateResponse

範例

getEmailTemplate 範例
Copy Copy
1
2auto tenantId = utility::conversions::to_string_t("my-tenant-123");
3auto templateId = utility::conversions::to_string_t("welcome-email");
4boost::optional<utility::string_t> language = utility::conversions::to_string_t("en-US");
5
6api->getEmailTemplate(tenantId, templateId)
7 .then([=](pplx::task<std::shared_ptr<GetEmailTemplateResponse>> task) {
8 try {
9 auto response = task.get();
10 } catch (const std::exception&) {
11 }
12 });
13

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

參數

名稱類型必要說明
tenantIdstringYes

回應

返回: GetEmailTemplateDefinitionsResponse

範例

getEmailTemplateDefinitions 範例
Copy Copy
1
2auto tenantId = utility::conversions::to_string_t("my-tenant-123");
3api->getEmailTemplateDefinitions(tenantId).then([](pplx::task<std::shared_ptr<GetEmailTemplateDefinitionsResponse>> t) {
4 try {
5 auto resp = t.get();
6 boost::optional<utility::string_t> tmplName = resp ? resp->templateName : boost::none;
7 if (tmplName) {
8 std::cout << *tmplName << std::endl;
9 }
10 } catch (const std::exception& e) {
11 std::cerr << e.what() << std::endl;
12 }
13});
14

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

參數

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

回應

返回: GetEmailTemplateRenderErrorsResponse

範例

getEmailTemplateRenderErrors 範例
Copy Copy
1
2utility::string_t tenantId = U("my-tenant-123");
3utility::string_t id = U("email-template-789");
4boost::optional<double> skip = 20.0;
5
6api->getEmailTemplateRenderErrors(tenantId, id, skip)
7 .then([](pplx::task<std::shared_ptr<GetEmailTemplateRenderErrorsResponse>> task) {
8 try {
9 auto response = task.get();
10 // 使用回應
11 } catch (const std::exception& ex) {
12 // 處理錯誤
13 }
14 });
15

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

參數

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

回應

返回:GetEmailTemplatesResponse

範例

getEmailTemplates 範例
Copy Copy
1
2auto tenantId = utility::string_t(U("my-tenant-123"));
3boost::optional<double> skip = 10.0;
4api->getEmailTemplates(tenantId, skip)
5 .then([](std::shared_ptr<GetEmailTemplatesResponse> resp) {
6 (void)resp;
7 });
8

渲染電子郵件範本 Internal Link

參數

名稱類型必填說明
tenantIdstringYes
renderEmailTemplateBodyRenderEmailTemplateBodyYes
localestringNo

回應

返回: RenderEmailTemplateResponse

範例

renderEmailTemplate 範例
Copy Copy
1
2auto body = RenderEmailTemplateBody();
3body.templateId = U("welcome-email");
4body.recipientEmail = U("user@example.com");
5boost::optional<utility::string_t> locale = U("en-US");
6
7api->renderEmailTemplate(U("my-tenant-123"), body, locale)
8 .then([](std::shared_ptr<RenderEmailTemplateResponse> resp) {
9 std::cout << "Email template rendered successfully\n";
10 });
11

更新電子郵件範本 Internal Link

參數

名稱類型必填說明
tenantIdstringYes
idstringYes
updateEmailTemplateBodyUpdateEmailTemplateBodyYes

回應

返回: APIEmptyResponse

範例

updateEmailTemplate 範例
Copy Copy
1
2utility::string_t tenantId = U("my-tenant-123");
3utility::string_t templateId = U("welcome-email");
4UpdateEmailTemplateBody body;
5body.subject = U("Welcome to Our Platform");
6body.content = U("<p>Hello \{{userName}}, welcome aboard!</p>");
7body.isActive = boost::optional<bool>(true);
8api->updateEmailTemplate(tenantId, templateId, body)
9 .then([](std::shared_ptr<APIEmptyResponse> response) {
10 // 成功處理
11 })
12 .then([](pplx::task<void> t) {
13 try { t.get(); } catch (const std::exception &) { /* 錯誤處理 */ }
14 });
15

取得事件日誌 Internal Link

req tenantId urlId userIdWS

參數

名稱類型必填說明
tenantIdstring是
urlIdstring是
userIdWSstring是
startTimeint64_t是
endTimeint64_t否

回應

返回:GetEventLogResponse

範例

getEventLog 範例
Copy Copy
1
2auto startTime = int64_t(1622505600);
3boost::optional<int64_t> endTime = int64_t(1622592000);
4api->getEventLog(U("my-tenant-123"), U("article-456"), U("user@example.com"), startTime, endTime)
5 .then([](std::shared_ptr<GetEventLogResponse> response){
6 auto copy = std::make_shared<GetEventLogResponse>(*response);
7 (void)copy;
8 });
9

取得全域事件日誌 Internal Link

req tenantId urlId userIdWS

參數

名稱類型必填描述
tenantIdstring是
urlIdstring是
userIdWSstring是
startTimeint64_t是
endTimeint64_t否

回應

返回:GetEventLogResponse

範例

getGlobalEventLog 範例
Copy Copy
1
2api->getGlobalEventLog(
3 U("my-tenant-123"),
4 U("article-456"),
5 U("user@example.com"),
6 1622505600,
7 boost::optional<int64_t>(1625097600)
8).then([](std::shared_ptr<GetEventLogResponse> resp) {
9 (void)resp;
10});
11

建立動態貼文 Internal Link

參數

名稱類型必填說明
tenantIdstringYes
createFeedPostParamsCreateFeedPostParamsYes
optionsconst CreateFeedPostOptions&Yes

回應

返回:CreateFeedPostsResponse

範例

createFeedPost 範例
Copy Copy
1
2auto tenantId = utility::conversions::to_string_t("my-tenant-123");
3CreateFeedPostParams postParams;
4postParams.content = utility::conversions::to_string_t("Excited to join FastComments!");
5postParams.authorEmail = utility::conversions::to_string_t("user@example.com");
6postParams.title = utility::conversions::to_string_t("My First Post");
7postParams.tags = boost::optional<std::vector<utility::string_t>>({ utility::conversions::to_string_t("intro") });
8
9CreateFeedPostOptions options;
10options.notifyFollowers = boost::optional<bool>(true);
11options.scheduledAt = boost::optional<utility::datetime>(utility::datetime::utc_now());
12
13api->createFeedPost(tenantId, postParams, options).then([](std::shared_ptr<CreateFeedPostsResponse> resp) {
14 auto postId = resp->postId;
15});
16

公開建立動態貼文 Internal Link

參數

名稱類型必填描述
tenantIdstring是
createFeedPostParamsCreateFeedPostParams是
optionsconst CreateFeedPostPublicOptions&是

回應

Returns: CreateFeedPostResponse

範例

createFeedPostPublic 範例
Copy Copy
1
2utility::string_t tenantId = U("my-tenant-123");
3
4CreateFeedPostParams params;
5params.title = U("Introducing Our New Feature");
6params.content = U("We are excited to announce the release of our latest update.");
7params.authorEmail = boost::optional<utility::string_t>(U("user@example.com"));
8params.tags = boost::optional<std::vector<utility::string_t>>({U("announcement"), U("release")});
9
10CreateFeedPostPublicOptions options;
11
12api->createFeedPostPublic(tenantId, params, options)
13 .then([](std::shared_ptr<CreateFeedPostResponse> resp) {
14 if (resp) {
15 std::wcout << U("Post created with ID: ") << resp->postId << std::endl;
16 }
17 });
18

公開刪除動態貼文 Internal Link

參數

名稱類型必填說明
tenantIdstringYes
postIdstringYes
optionsconst DeleteFeedPostPublicOptions&Yes

回應

返回: DeleteFeedPostPublicResponse

範例

deleteFeedPostPublic 範例
Copy Copy
1
2auto opts = std::make_shared<DeleteFeedPostPublicOptions>();
3opts->reason = boost::optional<utility::string_t>(U("Inappropriate content"));
4api->deleteFeedPostPublic(U("my-tenant-123"), U("post-789"), *opts)
5 .then([](std::shared_ptr<DeleteFeedPostPublicResponse> resp) {
6 if (resp && resp->isSuccess()) {
7 // 成功邏輯
8 }
9 });
10

取得動態貼文 Internal Link

req tenantId afterId

參數

名稱類型必填說明
tenantIdstringYes
optionsconst GetFeedPostsOptions&Yes

回應

回傳: GetFeedPostsResponse

範例

getFeedPosts 範例
Copy Copy
1
2auto opts = std::make_shared<GetFeedPostsOptions>();
3opts->maxResults = boost::optional<int>(50);
4opts->cursor = boost::optional<utility::string_t>(U("next-cursor"));
5api->getFeedPosts(U("my-tenant-123"), *opts).then([](std::shared_ptr<GetFeedPostsResponse> resp) {
6 auto count = resp->posts.size();
7});
8

公開取得動態貼文 Internal Link

req tenantId afterId

參數

名稱類型必填說明
tenantIdstringYes
optionsconst GetFeedPostsPublicOptions&Yes

回應

返回:PublicFeedPostsResponse

範例

getFeedPostsPublic 範例
Copy Copy
1
2auto options = GetFeedPostsPublicOptions{};
3options.limit = boost::optional<int>{20};
4options.before = boost::optional<utility::string_t>{U("2023-01-01T00:00:00Z")};
5
6api->getFeedPostsPublic(U("my-tenant-123"), options).then([](pplx::task<std::shared_ptr<PublicFeedPostsResponse>> task){
7 try{
8 auto response = task.get();
9 auto processed = std::make_shared<PublicFeedPostsResponse>(*response);
10 // 根據需要使用 processed
11 }catch(const std::exception&){
12 // 處理錯誤
13 }
14});
15

取得動態貼文統計 Internal Link

參數

名稱類型必填描述
tenantIdstringYes
postIdsvector<stringYes
ssostringNo

回應

返回:FeedPostsStatsResponse

範例

getFeedPostsStats 範例
Copy Copy
1
2auto tenantId = utility::conversions::to_string_t("my-tenant-123");
3std::vector<utility::string_t> postIds = {
4 utility::conversions::to_string_t("post-001"),
5 utility::conversions::to_string_t("post-002")
6};
7boost::optional<utility::string_t> sso = utility::conversions::to_string_t("user@example.com");
8
9api->getFeedPostsStats(tenantId, postIds, sso)
10 .then([](std::shared_ptr<FeedPostsStatsResponse> response) {
11 (void)response;
12 });
13

公開取得使用者回應 Internal Link

參數

名稱類型必填描述
tenantIdstring是
optionsconst GetUserReactsPublicOptions&是

回應

返回: UserReactsResponse

範例

getUserReactsPublic 範例
Copy Copy
1
2auto options = GetUserReactsPublicOptions{};
3options.userId = boost::optional<utility::string_t>(U("user@example.com"));
4options.limit = boost::optional<int>(50);
5api->getUserReactsPublic(U("my-tenant-123"), options).then([](pplx::task<std::shared_ptr<UserReactsResponse>> t){
6 auto response = t.get();
7});
8

公開回應動態貼文 Internal Link

參數

名稱類型必填說明
tenantIdstring是
postIdstring是
reactBodyParamsReactBodyParams是
optionsconst ReactFeedPostPublicOptions&是

回應

回傳:ReactFeedPostResponse

範例

reactFeedPostPublic 範例
Copy Copy
1
2auto tenantId = utility::conversions::to_string_t("my-tenant-123");
3auto postId = utility::conversions::to_string_t("post-987");
4ReactBodyParams reactBody;
5reactBody.reaction = utility::conversions::to_string_t("love");
6reactBody.userId = utility::conversions::to_string_t("user@example.com");
7ReactFeedPostPublicOptions options;
8options.metadata = boost::optional<utility::string_t>(utility::conversions::to_string_t("mobile"));
9api->reactFeedPostPublic(tenantId, postId, reactBody, options)
10 .then([](std::shared_ptr<ReactFeedPostResponse> resp) {
11 });
12

更新動態貼文 Internal Link

參數

名稱類型必要描述
tenantIdstring是
idstring是
feedPostFeedPost是

回應

返回:APIEmptyResponse

範例

updateFeedPost 範例
Copy Copy
1
2utility::string_t tenantId = U"my-tenant-123";
3utility::string_t postId = U"post-456";
4
5FeedPost feedPost;
6feedPost.title = U"Breaking News";
7feedPost.content = U"Details of the update go here.";
8feedPost.imageUrl = boost::optional<utility::string_t>(U"https://example.com/image.jpg");
9
10api->updateFeedPost(tenantId, postId, feedPost)
11 .then([](pplx::task<std::shared_ptr<APIEmptyResponse>> task) {
12 try {
13 auto response = task.get();
14 } catch (const std::exception& ex) {
15 }
16 });
17

公開更新動態貼文 Internal Link

參數

名稱類型必填說明
tenantIdstring是
postIdstring是
updateFeedPostParamsUpdateFeedPostParams是
optionsconst UpdateFeedPostPublicOptions&是

回應

返回: CreateFeedPostResponse

範例

updateFeedPostPublic 範例
Copy Copy
1
2utility::string_t tenantId = U("my-tenant-123");
3utility::string_t postId = U("post-456");
4UpdateFeedPostParams params;
5params.title = boost::optional<utility::string_t>(U("Updated Title"));
6params.body = boost::optional<utility::string_t>(U("Updated content of the post."));
7UpdateFeedPostPublicOptions options;
8options.notifyFollowers = boost::optional<bool>(true);
9api->updateFeedPostPublic(tenantId, postId, params, options)
10 .then([](std::shared_ptr<CreateFeedPostResponse> resp) {
11 auto result = resp;
12 });
13

公開檢舉評論 Internal Link

參數

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

回應

返回: APIEmptyResponse

範例

flagCommentPublic 範例
Copy Copy
1
2auto tenantId = utility::conversions::to_string_t("my-tenant-123");
3auto commentId = utility::conversions::to_string_t("cmt-456789");
4bool isFlagged = true;
5boost::optional<utility::string_t> sso = utility::conversions::to_string_t("sso-token-abc");
6
7api->flagCommentPublic(tenantId, commentId, isFlagged, sso)
8 .then([](pplx::task<std::shared_ptr<APIEmptyResponse>> t){
9 try{
10 auto resp = t.get();
11 }catch(const std::exception&){
12 }
13 });
14

取得大型 GIF Internal Link

參數

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

回應

返回: GifGetLargeResponse

範例

getGifLarge 範例
Copy Copy
1
2auto tenantId = utility::conversions::to_string_t("my-tenant-123");
3auto largeUrl = utility::conversions::to_string_t("https://cdn.example.com/gifs/large/abc123.gif");
4
5api->getGifLarge(tenantId, largeUrl)
6 .then([&](std::shared_ptr<GifGetLargeResponse> resp) {
7 boost::optional<utility::string_t> maybeUrl;
8 if (resp && resp->url) {
9 maybeUrl = resp->url;
10 }
11 if (maybeUrl) {
12 std::wcout << *maybeUrl << std::endl;
13 }
14 });
15

搜尋 GIF Internal Link

參數

NameTypeRequiredDescription
tenantIdstring是
searchstring是
optionsconst GetGifsSearchOptions&是

回應

Returns: GetGifsSearchResponse

範例

getGifsSearch 範例
Copy Copy
1
2auto tenantId = U("my-tenant-123");
3auto search = U("funny cats");
4GetGifsSearchOptions options;
5options.limit = boost::optional<int>(10);
6options.rating = boost::optional<utility::string_t>(U("pg"));
7api->getGifsSearch(tenantId, search, options).then([](pplx::task<std::shared_ptr<GetGifsSearchResponse>> task){
8 try{
9 auto response = task.get();
10 }catch(const std::exception&){
11 }
12});
13

熱門 GIF Internal Link

參數

名稱類型必填描述
tenantIdstring是
optionsconst GetGifsTrendingOptions&是

回應

返回: GetGifsTrendingResponse

範例

getGifsTrending 示例
Copy Copy
1
2utility::string_t tenantId = U("my-tenant-123");
3GetGifsTrendingOptions options;
4options.limit = 10;
5options.rating = boost::optional<utility::string_t>(U("G"));
6api->getGifsTrending(tenantId, options).then([](std::shared_ptr<GetGifsTrendingResponse> response) {
7 for (const auto& gif : response->gifs) {
8 auto url = gif.url;
9 }
10});
11

新增標籤 Internal Link

參數

名稱類型必填說明
tenantIdstringYes
createHashTagBodyCreateHashTagBodyYes

回應

返回: CreateHashTagResponse

範例

addHashTag 範例
Copy Copy
1
2CreateHashTagBody request;
3request.tag = utility::conversions::to_string_t("feature-request");
4request.description = utility::conversions::to_string_t("Requests for new features");
5request.relatedUrl = boost::optional<utility::string_t>(utility::conversions::to_string_t("https://example.com/feature-request"));
6
7api->addHashTag(utility::conversions::to_string_t("my-tenant-123"), request)
8 .then([](std::shared_ptr<CreateHashTagResponse> resp) {
9 (void)resp;
10 });
11

批量新增標籤 Internal Link

參數

名稱類型必填描述
tenantIdstringYes
bulkCreateHashTagsBodyBulkCreateHashTagsBodyYes

回應

回傳:BulkCreateHashTagsResponse

範例

addHashTagsBulk 範例
Copy Copy
1
2auto tenantId = utility::string_t(U("my-tenant-123"));
3BulkCreateHashTagsBody bulkBody;
4bulkBody.tags = { utility::string_t(U("announcement")), utility::string_t(U("feature-request")) };
5bulkBody.description = boost::optional<utility::string_t>(U("Bulk tag creation"));
6api->addHashTagsBulk(tenantId, bulkBody).then([](pplx::task<std::shared_ptr<BulkCreateHashTagsResponse>> task){
7 try{
8 auto resp = task.get();
9 }catch(const std::exception&){
10 }
11});
12

刪除標籤 Internal Link

參數

名稱類型必填描述
tenantIdstring是
tagstring是
deleteHashTagRequestBodyDeleteHashTagRequestBody是

回應

返回: APIEmptyResponse

範例

deleteHashTag 範例
Copy Copy
1
2auto tenantId = utility::conversions::to_string_t("my-tenant-001");
3auto tag = utility::conversions::to_string_t("news");
4DeleteHashTagRequestBody requestBody;
5requestBody.userId = utility::conversions::to_string_t("user-42");
6requestBody.reason = boost::optional<utility::string_t>(utility::conversions::to_string_t("User request"));
7api->deleteHashTag(tenantId, tag, requestBody)
8 .then([](std::shared_ptr<APIEmptyResponse> resp) {
9 });
10

取得標籤 Internal Link

參數

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

回應

返回: GetHashTagsResponse

範例

getHashTags 範例
Copy Copy
1
2auto tenantId = utility::string_t(U("my-tenant-123"));
3boost::optional<double> page = 2.0;
4
5api->getHashTags(tenantId, page).then([](pplx::task<std::shared_ptr<GetHashTagsResponse>> task) {
6 try {
7 auto resultPtr = task.get();
8 auto response = std::make_shared<GetHashTagsResponse>(*resultPtr);
9 // 使用回應
10 } catch (const std::exception&) {
11 // 處理錯誤
12 }
13});
14

修補標籤 Internal Link

參數

名稱類型必填說明
tenantIdstring是
tagstring是
updateHashTagBodyUpdateHashTagBody是

回應

返回:UpdateHashTagResponse

範例

patchHashTag 範例
Copy Copy
1
2utility::string_t tenantId = U("my-tenant-123");
3utility::string_t tag = U("important");
4auto body = std::make_shared<UpdateHashTagBody>();
5body->name = U("important-updated");
6body->description = boost::optional<utility::string_t>(U("Updated description"));
7api->patchHashTag(tenantId, tag, *body)
8 .then([](pplx::task<std::shared_ptr<UpdateHashTagResponse>> t){
9 try{
10 auto response = t.get();
11 std::cout << "Updated tag ID: " << response->id << std::endl;
12 }catch(const std::exception& e){
13 std::cerr << "Patch failed: " << e.what() << std::endl;
14 }
15 });
16

刪除審核投票 Internal Link

參數

名稱類型必填描述
tenantIdstringYes
commentIdstringYes
voteIdstringYes
optionsconst DeleteModerationVoteOptions&Yes

回應

返回:VoteDeleteResponse

範例

deleteModerationVote 範例
Copy Copy
1
2auto tenantId = utility::conversions::to_string_t("my-tenant-123");
3auto commentId = utility::conversions::to_string_t("comment-abc123");
4auto voteId = utility::conversions::to_string_t("vote-xyz789");
5DeleteModerationVoteOptions opts;
6opts.reason = utility::conversions::to_string_t("Offensive language");
7opts.hardDelete = boost::optional<bool>(true);
8api->deleteModerationVote(tenantId, commentId, voteId, opts)
9 .then([](std::shared_ptr<VoteDeleteResponse> resp){});
10

取得 API 評論 Internal Link

參數

名稱類型必填說明
tenantIdstringYes
optionsconst GetApiCommentsOptions&Yes

回應

返回:ModerationAPIGetCommentsResponse

範例

getApiComments 範例
Copy Copy
1
2auto options = GetApiCommentsOptions{};
3options.page = boost::make_optional(2);
4options.authorEmail = boost::make_optional<utility::string_t>(U("user@example.com"));
5options.includeDeleted = boost::make_optional(false);
6
7api->getApiComments(U("my-tenant-123"), options).then([](pplx::task<std::shared_ptr<ModerationAPIGetCommentsResponse>> task){
8 try{
9 auto response = task.get();
10 }catch(const std::exception&){
11 }
12});
13

取得 API 匯出狀態 Internal Link

參數

名稱類型必填說明
tenantIdstringYes
optionsconst GetApiExportStatusOptions&Yes

回應

回傳: ModerationExportStatusResponse

範例

getApiExportStatus 範例
Copy Copy
1
2auto opts = GetApiExportStatusOptions{};
3opts.exportId = boost::make_optional<utility::string_t>(U("export-456"));
4api->getApiExportStatus(U("my-tenant-123"), opts)
5 .then([](pplx::task<std::shared_ptr<ModerationExportStatusResponse>> t){
6 try{
7 auto status = t.get();
8 }catch(const std::exception&){
9 }
10 });
11

取得 API ID Internal Link

參數

名稱類型必填描述
tenantIdstring是
optionsconst GetApiIdsOptions&是

回應

返回:ModerationAPIGetCommentIdsResponse

範例

getApiIds 範例
Copy Copy
1
2utility::string_t tenantId = U("my-tenant-123");
3GetApiIdsOptions options;
4options.limit = boost::optional<int>(100);
5options.cursor = boost::optional<utility::string_t>(U("next-page-token"));
6api->getApiIds(tenantId, options).then([](pplx::task<std::shared_ptr<ModerationAPIGetCommentIdsResponse>> t){
7 try{
8 auto response = t.get();
9 auto ids = response->commentIds;
10 }catch(const std::exception&){
11 }
12});
13

取得被評論封鎖的使用者 Internal Link

參數

名稱類型必須描述
tenantIdstring是
commentIdstring是
ssostring否

回應

返回: GetBannedUsersFromCommentResponse

範例

getBanUsersFromComment 範例
Copy Copy
1
2auto tenantId = utility::string_t(U("my-tenant-123"));
3auto commentId = utility::string_t(U("comment-456"));
4boost::optional<utility::string_t> sso = boost::make_optional(utility::string_t(U("sso-token-abc")));
5
6api->getBanUsersFromComment(tenantId, commentId, sso).then([](pplx::task<std::shared_ptr<GetBannedUsersFromCommentResponse>> task) {
7 try {
8 auto response = task.get();
9 } catch (const std::exception&) {
10 }
11});
12

取得評論封鎖狀態 Internal Link

參數

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

回應

返回: GetCommentBanStatusResponse

範例

getCommentBanStatus 範例
Copy Copy
1
2auto tenantId = utility::string_t(U"my-tenant-123");
3auto commentId = utility::string_t(U"comment-456");
4boost::optional<utility::string_t> sso = utility::string_t(U"user@example.com");
5
6api->getCommentBanStatus(tenantId, commentId, sso).then([](pplx::task<std::shared_ptr<GetCommentBanStatusResponse>> t){
7 try{
8 auto response = t.get();
9 }catch(const std::exception&){ }
10});
11

取得評論子項 Internal Link

參數

名稱類型必填描述
tenantIdstringYes
commentIdstringYes
ssostringNo

回應

返回:ModerationAPIChildCommentsResponse

範例

getCommentChildren 範例
Copy Copy
1
2utility::string_t tenantId = U("my-tenant-123");
3utility::string_t commentId = U("comment-456");
4boost::optional<utility::string_t> sso = U("sso-token-abc");
5
6api->getCommentChildren(tenantId, commentId, sso)
7 .then([](pplx::task<std::shared_ptr<ModerationAPIChildCommentsResponse>> task) {
8 try {
9 auto response = task.get();
10 } catch (const std::exception&) {
11 }
12 });
13

取得計數 Internal Link

參數

名稱類型必填描述
tenantIdstringYes
optionsconst GetCountOptions&Yes

回傳

回傳: ModerationAPICountCommentsResponse

範例

getCount 範例
Copy Copy
1
2utility::string_t tenantId = U("my-tenant-123");
3GetCountOptions options;
4options.userEmail = boost::optional<utility::string_t>(U("user@example.com"));
5options.maxResults = boost::optional<int>(100);
6api->getCount(tenantId, options).then([](pplx::task<std::shared_ptr<ModerationAPICountCommentsResponse>> task){
7 try{
8 auto resp = task.get();
9 auto copy = std::make_shared<ModerationAPICountCommentsResponse>(*resp);
10 std::cout << "Count: " << copy->count << std::endl;
11 }catch(const std::exception& e){
12 std::cerr << "Error: " << e.what() << std::endl;
13 }
14});
15

取得多項計數 Internal Link

參數

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

回應

返回: GetBannedUsersCountResponse

範例

getCounts 範例
Copy Copy
1
2api->getCounts(
3 utility::conversions::to_string_t("my-tenant-123"),
4 boost::optional<utility::string_t>(utility::conversions::to_string_t("john.doe@example.com"))
5).then([](pplx::task<std::shared_ptr<GetBannedUsersCountResponse>> t){
6 try{
7 auto response = t.get();
8 }catch(const std::exception&){
9 }
10});
11

取得日誌 Internal Link

參數

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

回應

返回:ModerationAPIGetLogsResponse

範例

getLogs 範例
Copy Copy
1
2utility::string_t tenantId = U("my-tenant-123");
3utility::string_t commentId = U("comment-456");
4boost::optional<utility::string_t> sso = U("sso-token-abc");
5
6api->getLogs(tenantId, commentId, sso).then([](pplx::task<std::shared_ptr<ModerationAPIGetLogsResponse>> t){
7 try{
8 auto response = t.get();
9 }catch(...){
10 }
11});
12

取得手動徽章 Internal Link

參數

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

回應

返回:GetTenantManualBadgesResponse

範例

getManualBadges 範例
Copy Copy
1
2utility::string_t tenantId = U("my-tenant-123");
3boost::optional<utility::string_t> sso = boost::make_optional(U("user@example.com"));
4
5api->getManualBadges(tenantId, sso)
6 .then([](pplx::task<std::shared_ptr<GetTenantManualBadgesResponse>> t) {
7 try {
8 auto response = t.get();
9 // 處理回應,例如 response->badgeList
10 } catch (const std::exception& ex) {
11 // 處理錯誤
12 }
13 });
14

取得使用者手動徽章 Internal Link

參數

名稱類型必填說明
tenantIdstring是
optionsconst GetManualBadgesForUserOptions&是

回應

返回:GetUserManualBadgesResponse

範例

getManualBadgesForUser 範例
Copy Copy
1
2utility::string_t tenantId = U("my-tenant-123");
3GetManualBadgesForUserOptions options;
4options.userEmail = boost::optional<utility::string_t>(U("user@example.com"));
5options.includeInactive = boost::optional<bool>(true);
6api->getManualBadgesForUser(tenantId, options).then([](pplx::task<std::shared_ptr<GetUserManualBadgesResponse>> task){
7 try{
8 auto response = task.get();
9 }catch(const std::exception&){
10 }
11});
12

取得審核評論 Internal Link

參數

名稱類型必填描述
tenantIdstring是
commentIdstring是
optionsconst GetModerationCommentOptions&是

回應

返回:ModerationAPICommentResponse

範例

getModerationComment 示例
Copy Copy
1
2auto tenantId = utility::conversions::to_string_t("my-tenant-123");
3auto commentId = utility::conversions::to_string_t("comment-456");
4GetModerationCommentOptions options;
5options.includeDeleted = boost::optional<bool>(true);
6options.locale = boost::optional<utility::string_t>(utility::conversions::to_string_t("en-US"));
7api->getModerationComment(tenantId, commentId, options)
8 .then([](pplx::task<std::shared_ptr<ModerationAPICommentResponse>> task) {
9 try {
10 auto response = task.get();
11 // 根據需要處理回應
12 } catch (const std::exception& ex) {
13 // 處理錯誤
14 }
15 });
16

取得審核評論文字 Internal Link

參數

NameTypeRequiredDescription
tenantIdstringYes
commentIdstringYes
ssostringNo

回應

返回:GetCommentTextResponse

範例

getModerationCommentText 範例
Copy Copy
1
2utility::string_t tenantId = U("my-tenant-123");
3utility::string_t commentId = U("cmt-987654");
4boost::optional<utility::string_t> sso = U("sso-token-abc");
5
6api->getModerationCommentText(tenantId, commentId, sso)
7 .then([](pplx::task<std::shared_ptr<GetCommentTextResponse>> t) {
8 try {
9 auto resp = t.get();
10 auto text = std::make_shared<std::string>(resp->commentText);
11 } catch (const std::exception&) {
12 }
13 });
14

取得預封鎖摘要 Internal Link

參數

名稱類型必填說明
tenantIdstringYes
commentIdstringYes
optionsconst GetPreBanSummaryOptions&Yes

回應

返回:PreBanSummary

範例

getPreBanSummary 範例
Copy Copy
1
2auto tenantId = utility::conversions::to_string_t("my-tenant-123");
3auto commentId = utility::conversions::to_string_t("cmt-456789");
4GetPreBanSummaryOptions options;
5options.locale = boost::optional<utility::string_t>{utility::conversions::to_string_t("en-US")};
6
7api->getPreBanSummary(tenantId, commentId, options)
8 .then([](pplx::task<std::shared_ptr<PreBanSummary>> t) {
9 try {
10 auto summary = t.get();
11 // 處理摘要
12 } catch (const std::exception&) {
13 // 處理錯誤
14 }
15 });
16

取得搜尋評論摘要 Internal Link

參數

名稱類型必填說明
tenantIdstring是
optionsconst GetSearchCommentsSummaryOptions&是

回應

返回:ModerationCommentSearchResponse

範例

getSearchCommentsSummary 範例
Copy Copy
1
2auto tenantId = utility::conversions::to_string_t("my-tenant-123");
3auto options = std::make_shared<GetSearchCommentsSummaryOptions>();
4options->query = utility::conversions::to_string_t("spam");
5options->pageSize = boost::optional<int>(50);
6options->pageNumber = boost::optional<int>(1);
7options->fromDate = boost::none;
8api->getSearchCommentsSummary(tenantId, *options).then([](pplx::task<std::shared_ptr<ModerationCommentSearchResponse>> task){
9 try{
10 auto response = task.get();
11 }catch(const std::exception&){
12 }
13});
14

取得搜尋頁面 Internal Link

參數

NameTypeRequiredDescription
tenantIdstringYes
optionsconst GetSearchPagesOptions&Yes

回應

Returns: ModerationPageSearchResponse

範例

getSearchPages 範例
Copy Copy
1
2GetSearchPagesOptions options;
3options.pageNumber = boost::optional<int>(1);
4options.pageSize = boost::optional<int>(50);
5options.searchTerm = boost::optional<utility::string_t>(U("spam"));
6
7api->getSearchPages(U("my-tenant-123"), options)
8 .then([](pplx::task<std::shared_ptr<ModerationPageSearchResponse>> task) {
9 try {
10 auto response = task.get();
11 // 使用回應
12 } catch (const std::exception& e) {
13 // 處理錯誤
14 }
15 });
16

取得搜尋站點 Internal Link

參數

NameTypeRequiredDescription
tenantIdstringYes
optionsconst GetSearchSitesOptions&Yes

回應

返回:ModerationSiteSearchResponse

範例

getSearchSites 範例
Copy Copy
1
2auto tenantId = utility::string_t(U("my-tenant-123"));
3GetSearchSitesOptions options;
4options.query = boost::make_optional(utility::string_t(U("example query")));
5options.limit = boost::make_optional(25);
6
7api->getSearchSites(tenantId, options)
8 .then([](pplx::task<std::shared_ptr<ModerationSiteSearchResponse>> t) {
9 try {
10 auto response = t.get();
11 auto respPtr = std::make_shared<ModerationSiteSearchResponse>(*response);
12 for (const auto& site : respPtr->sites) {
13 // 處理邏輯
14 }
15 } catch (const std::exception&) {
16 // 錯誤處理
17 }
18 });
19

取得搜尋建議 Internal Link

參數

名稱類型必填說明
tenantIdstring是
optionsconst GetSearchSuggestOptions&是

回應

返回: ModerationSuggestResponse

範例

getSearchSuggest 範例
Copy Copy
1
2utility::string_t tenantId = U("my-tenant-123");
3GetSearchSuggestOptions opts;
4opts.query = U("search term");
5opts.limit = boost::optional<int>(5);
6opts.includeInactive = boost::optional<bool>(false);
7api->getSearchSuggest(tenantId, opts).then([](pplx::task<std::shared_ptr<ModerationSuggestResponse>> t){
8 try{
9 auto resp = t.get();
10 }catch(const std::exception&){ }
11}).wait();
12

取得搜尋使用者 Internal Link

參數

名稱類型必填說明
tenantIdstring是
optionsconst GetSearchUsersOptions&是

回應

返回: ModerationUserSearchResponse

範例

getSearchUsers 範例
Copy Copy
1
2auto tenantId = utility::string_t(U("my-tenant-123"));
3GetSearchUsersOptions opts;
4opts.query = utility::string_t(U("john.doe@example.com"));
5opts.page = boost::optional<int>(1);
6opts.pageSize = boost::optional<int>(20);
7
8api->getSearchUsers(tenantId, opts)
9 .then([](std::shared_ptr<ModerationUserSearchResponse> resp) {
10 for (const auto& user : resp->users) {
11 std::wcout << user.id << L" - " << user.email << std::endl;
12 }
13 });
14

取得信任因子 Internal Link

參數

名稱類型必填說明
tenantIdstring是
optionsconst GetTrustFactorOptions&是

回應

Returns: GetUserTrustFactorResponse

範例

getTrustFactor 範例
Copy Copy
1
2auto tenantId = utility::string_t(U("my-tenant-123"));
3GetTrustFactorOptions options;
4options.userEmail = boost::optional<utility::string_t>(U("user@example.com"));
5options.ipAddress = boost::optional<utility::string_t>(U("203.0.113.42"));
6api->getTrustFactor(tenantId, options).then([](std::shared_ptr<GetUserTrustFactorResponse> resp) {
7 if (resp) {
8 std::cout << "Trust factor: " << resp->trustFactor << std::endl;
9 }
10});
11

取得使用者封鎖偏好 Internal Link

參數

名稱類型必須描述
tenantIdstring是
ssostring否

回應

返回:APIModerateGetUserBanPreferencesResponse

範例

getUserBanPreference 範例
Copy Copy
1
2auto tenantId = utility::string_t(U("my-tenant-123"));
3boost::optional<utility::string_t> sso = boost::optional<utility::string_t>(U("user@example.com"));
4
5api->getUserBanPreference(tenantId, sso)
6 .then([](pplx::task<std::shared_ptr<APIModerateGetUserBanPreferencesResponse>> t) {
7 try {
8 auto resp = t.get();
9 } catch (const std::exception&) {
10 }
11 });
12

取得使用者內部資料 Internal Link

參數

NameTypeRequiredDescription
tenantIdstringYes
optionsconst GetUserInternalProfileOptions&Yes

回應

返回:GetUserInternalProfileResponse

範例

getUserInternalProfile 範例
Copy Copy
1
2utility::string_t tenantId = U("my-tenant-123");
3GetUserInternalProfileOptions options;
4options.email = boost::optional<utility::string_t>(U("user@example.com"));
5options.includeDetails = boost::optional<bool>(true);
6
7api->getUserInternalProfile(tenantId, options)
8 .then([](std::shared_ptr<GetUserInternalProfileResponse> response) {
9 if (response) {
10 auto name = response->displayName;
11 auto id = response->userId;
12 }
13 });
14

調整評論投票 Internal Link

參數

名稱類型必要說明
tenantIdstring是
commentIdstring是
adjustCommentVotesParamsAdjustCommentVotesParams是
optionsconst PostAdjustCommentVotesOptions&是

回應

返回: AdjustVotesResponse

範例

postAdjustCommentVotes 範例
Copy Copy
1
2auto tenantId = utility::conversions::to_string_t("my-tenant-123");
3auto commentId = utility::conversions::to_string_t("cmt-456789");
4AdjustCommentVotesParams params;
5params.voteDelta = 1;
6params.userIdentifier = utility::conversions::to_string_t("user@example.com");
7params.reason = boost::optional<utility::string_t>(utility::conversions::to_string_t("Helpful"));
8PostAdjustCommentVotesOptions opts;
9opts.timeout = boost::optional<int>(30);
10api->postAdjustCommentVotes(tenantId, commentId, params, opts).then([](pplx::task<std::shared_ptr<AdjustVotesResponse>> t){
11 try{
12 auto resp = t.get();
13 }catch(const std::exception& e){
14 }
15});
16

發送 API 匯出 Internal Link

參數

名稱類型必填說明
tenantIdstringYes
optionsconst PostApiExportOptions&Yes

回應

返回: ModerationExportResponse

範例

postApiExport 範例
Copy Copy
1
2auto tenantId = utility::string_t(U("my-tenant-123"));
3PostApiExportOptions options;
4options.format = utility::string_t(U("json"));
5options.email = utility::string_t(U("reports@example.com"));
6options.startDate = boost::optional<utility::datetime>(utility::datetime::from_string(U("2023-01-01T00:00:00Z")));
7options.endDate = boost::optional<utility::datetime>(utility::datetime::from_string(U("2023-01-31T23:59:59Z")));
8
9api->postApiExport(tenantId, options)
10 .then([](std::shared_ptr<ModerationExportResponse> response) {
11 if (response) {
12 // 處理成功的匯出回應
13 }
14 })
15 .wait();
16

從評論封鎖使用者 Internal Link

Parameters

NameTypeRequiredDescription
tenantIdstringYes
commentIdstringYes
optionsconst PostBanUserFromCommentOptions&Yes

Response

返回: BanUserFromCommentResult

Example

postBanUserFromComment 範例
Copy Copy
1
2utility::string_t tenantId = U("my-tenant-123");
3utility::string_t commentId = U("comment-456789");
4PostBanUserFromCommentOptions options;
5options.reason = boost::optional<utility::string_t>(U("spam"));
6options.durationDays = boost::optional<int>(30);
7
8api->postBanUserFromComment(tenantId, commentId, options)
9 .then([](std::shared_ptr<BanUserFromCommentResult> result) {
10 // 結果處理
11 })
12 .then([](pplx::task<void> t) {
13 try { t.get(); } catch (const std::exception& e) { /* 錯誤處理 */ }
14 });
15

撤銷使用者封鎖 Internal Link

參數

名稱類型必填描述
tenantIdstringYes
banUserUndoParamsBanUserUndoParamsYes
ssostringNo

回應

返回: APIEmptyResponse

範例

postBanUserUndo 範例
Copy Copy
1
2auto tenantId = utility::string_t(U("my-tenant-123"));
3BanUserUndoParams banParams;
4banParams.userId = utility::string_t(U("user-567"));
5banParams.reason = utility::string_t(U("reinstated"));
6boost::optional<utility::string_t> sso = utility::string_t(U("sso-token-abc"));
7
8api->postBanUserUndo(tenantId, banParams, sso).then([](std::shared_ptr<APIEmptyResponse> resp){
9 // 處理成功
10});
11

批量預封鎖摘要 Internal Link

參數

名稱類型必填說明
tenantIdstring是
bulkPreBanParamsBulkPreBanParams是
optionsconst PostBulkPreBanSummaryOptions&是

回應

返回: BulkPreBanSummary

範例

postBulkPreBanSummary 範例
Copy Copy
1
2auto tenantId = utility::conversions::to_string_t("my-tenant-123");
3BulkPreBanParams bulkPreBanParams;
4bulkPreBanParams.emails = {
5 utility::conversions::to_string_t("spam1@example.com"),
6 utility::conversions::to_string_t("spam2@example.com")
7};
8bulkPreBanParams.reason = utility::conversions::to_string_t("spam");
9PostBulkPreBanSummaryOptions options;
10options.requestId = boost::optional<utility::string_t>(utility::conversions::to_string_t("req-456"));
11api->postBulkPreBanSummary(tenantId, bulkPreBanParams, options)
12 .then([](std::shared_ptr<BulkPreBanSummary> result) {
13 (void)result;
14 });
15

依 ID 發送評論 Internal Link

參數

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

回應

返回:ModerationAPIChildCommentsResponse

範例

postCommentsByIds 範例
Copy Copy
1
2auto tenantId = utility::string_t(U("my-tenant-123"));
3CommentsByIdsParams params;
4params.commentIds = {U("cmt-001"), U("cmt-002")};
5boost::optional<utility::string_t> sso = U("sso-token-abc");
6api->postCommentsByIds(tenantId, params, sso).then([](pplx::task<std::shared_ptr<ModerationAPIChildCommentsResponse>> t){
7 try{
8 auto resp = t.get();
9 auto copy = std::make_shared<ModerationAPIChildCommentsResponse>(*resp);
10 }catch(const std::exception&){ }
11});
12

發送檢舉評論 Internal Link

參數

名稱類型必須說明
tenantIdstring是
commentIdstring是
optionsconst PostFlagCommentOptions&是

回應

返回: APIEmptyResponse

範例

postFlagComment 範例
Copy Copy
1
2PostFlagCommentOptions options;
3options.reason = boost::optional<utility::string_t>(U("spam"));
4options.reportedBy = boost::optional<utility::string_t>(U("moderator@example.com"));
5
6api->postFlagComment(U("my-tenant-123"), U("comment-456"), options)
7 .then([](std::shared_ptr<APIEmptyResponse> resp){
8 (void)resp;
9 })
10 .then([](pplx::task<void> t){
11 try{
12 t.get();
13 }catch(const std::exception&){
14 }
15 });
16

發送移除評論 Internal Link

參數

名稱類型必填說明
tenantIdstring是
commentIdstring是
optionsconst PostRemoveCommentOptions&是

回應

Returns: PostRemoveCommentApiResponse

範例

postRemoveComment 範例
Copy Copy
1
2auto tenantId = utility::string_t(U("my-tenant-123"));
3auto commentId = utility::string_t(U("cmt-456789"));
4PostRemoveCommentOptions options;
5options.permanent = boost::optional<bool>(true);
6api->postRemoveComment(tenantId, commentId, options)
7 .then([](pplx::task<std::shared_ptr<PostRemoveCommentApiResponse>> task) {
8 try {
9 auto response = task.get();
10 // Process response
11 } catch (const std::exception& ex) {
12 // Handle error
13 }
14 });
15

恢復已刪除評論 Internal Link

參數

名稱類型必填說明
tenantIdstringYes
commentIdstringYes
optionsconst PostRestoreDeletedCommentOptions&Yes

回應

返回:APIEmptyResponse

範例

postRestoreDeletedComment 範例
Copy Copy
1
2utility::string_t tenantId = U("my-tenant-123");
3utility::string_t commentId = U("cmt-987654");
4PostRestoreDeletedCommentOptions options;
5options.reason = boost::optional<utility::string_t>(U("Restoring after accidental delete"));
6options.notifyUser = boost::optional<bool>(true);
7api->postRestoreDeletedComment(tenantId, commentId, options)
8 .then([](std::shared_ptr<APIEmptyResponse> resp){
9 });
10

設定評論批准狀態 Internal Link

參數

名稱類型必填說明
tenantIdstringYes
commentIdstringYes
optionsconst PostSetCommentApprovalStatusOptions&Yes

回應

返回:SetCommentApprovedResponse

範例

postSetCommentApprovalStatus 範例
Copy Copy
1
2auto tenantId = utility::conversions::to_string_t("my-tenant-123");
3auto commentId = utility::conversions::to_string_t("comment-abc123");
4auto options = std::make_shared<PostSetCommentApprovalStatusOptions>();
5options->approved = boost::optional<bool>(true);
6options->reason = boost::optional<utility::string_t>(utility::conversions::to_string_t("Inappropriate content"));
7api->postSetCommentApprovalStatus(tenantId, commentId, *options)
8 .then([](pplx::task<std::shared_ptr<SetCommentApprovedResponse>> task) {
9 try {
10 auto response = task.get();
11 } catch (const std::exception& ex) {
12 }
13 });
14

設定評論審核狀態 Internal Link

參數

名稱類型必填說明
tenantIdstringYes
commentIdstringYes
optionsconst PostSetCommentReviewStatusOptions&Yes

回應

返回:APIEmptyResponse

範例

postSetCommentReviewStatus 範例
Copy Copy
1
2auto tenantId = utility::conversions::to_string_t("my-tenant-123");
3auto commentId = utility::conversions::to_string_t("cmt-456789");
4PostSetCommentReviewStatusOptions opts;
5opts.status = utility::conversions::to_string_t("approved");
6opts.note = boost::optional<utility::string_t>(utility::conversions::to_string_t("Looks good"));
7api->postSetCommentReviewStatus(tenantId, commentId, opts)
8 .then([](pplx::task<std::shared_ptr<APIEmptyResponse>> t){
9 try{
10 auto resp = t.get();
11 }catch(const std::exception& e){
12 }
13 });
14

設定評論垃圾狀態 Internal Link

參數

名稱類型必填說明
tenantIdstringYes
commentIdstringYes
optionsconst PostSetCommentSpamStatusOptions&Yes

回應

Returns: APIEmptyResponse

範例

postSetCommentSpamStatus 範例
Copy Copy
1
2auto options = PostSetCommentSpamStatusOptions{};
3options.isSpam = true;
4options.reason = boost::optional<utility::string_t>{U"User reported spam"};
5
6api->postSetCommentSpamStatus(U("my-tenant-123"), U("comment-789"), options)
7 .then([](std::shared_ptr<APIEmptyResponse> resp) {
8 auto copy = std::make_shared<APIEmptyResponse>(*resp);
9 })
10 .then([](pplx::task<void> t) {
11 try { t.get(); } catch(const std::exception&) {}
12 });
13

設定評論文字 Internal Link

參數

名稱類型必填說明
tenantIdstring是
commentIdstring是
setCommentTextParamsSetCommentTextParams是
optionsconst PostSetCommentTextOptions&是

回應

返回:SetCommentTextResponse

範例

postSetCommentText 範例
Copy Copy
1
2auto tenantId = U("my-tenant-123");
3auto commentId = U("comment-456");
4SetCommentTextParams params;
5params.text = U("Revised comment content");
6PostSetCommentTextOptions options;
7options.requestId = boost::optional<utility::string_t>(U("req-987"));
8api->postSetCommentText(tenantId, commentId, params, options)
9 .then([](std::shared_ptr<SetCommentTextResponse> resp) {
10 auto updatedId = resp->commentId;
11 })
12 .then([](pplx::task<void> t) {
13 try { t.get(); } catch (const std::exception&) {}
14 });
15

取消檢舉評論 Internal Link

參數

名稱類型必填描述
tenantIdstring是
commentIdstring是
optionsconst PostUnFlagCommentOptions&是

回應

返回:APIEmptyResponse

範例

postUnFlagComment 範例
Copy Copy
1
2utility::string_t tenantId = U("my-tenant-123");
3utility::string_t commentId = U("cmt-456789");
4PostUnFlagCommentOptions opts;
5opts.notifyUser = boost::optional<bool>(true);
6api->postUnFlagComment(tenantId, commentId, opts)
7 .then([](std::shared_ptr<APIEmptyResponse> resp) {
8 // 這裡可以進行處理
9 })
10 .then([](pplx::task<void> t) {
11 try { t.get(); } catch (const std::exception&) {}
12 });
13

發送投票 Internal Link

參數

名稱類型必填描述
tenantIdstringYes
commentIdstringYes
optionsconst PostVoteOptions&Yes

回應

返回: VoteResponse

範例

postVote 範例
Copy Copy
1
2utility::string_t tenantId = U("my-tenant-123");
3utility::string_t commentId = U("cmt-456789");
4PostVoteOptions options;
5options.upvote = boost::make_optional(true);
6options.reason = boost::make_optional<std::string>("Inappropriate content");
7api->postVote(tenantId, commentId, options)
8 .then([](pplx::task<std::shared_ptr<VoteResponse>> t) {
9 try {
10 auto resp = t.get();
11 auto count = resp->voteCount;
12 } catch (const std::exception& e) {
13 }
14 });
15

授予徽章 Internal Link

參數

名稱類型必填說明
tenantIdstring是
badgeIdstring是
optionsconst PutAwardBadgeOptions&是

回應

返回:AwardUserBadgeResponse

範例

putAwardBadge 範例
Copy Copy
1
2auto tenantId = utility::conversions::to_string_t("my-tenant-123");
3auto badgeId = utility::conversions::to_string_t("badge-456");
4PutAwardBadgeOptions opts;
5opts.userId = utility::conversions::to_string_t("user-42");
6opts.note = boost::optional<utility::string_t>(utility::conversions::to_string_t("Excellent comment"));
7api->putAwardBadge(tenantId, badgeId, opts).then([](pplx::task<std::shared_ptr<AwardUserBadgeResponse>> t){
8 try{
9 auto resp = t.get();
10 auto respCopy = std::make_shared<AwardUserBadgeResponse>(*resp);
11 }catch(const std::exception& e){
12 }
13});
14

關閉討論串 Internal Link

參數

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

回應

返回:APIEmptyResponse

範例

putCloseThread 範例
Copy Copy
1
2auto tenantId = utility::string_t(U("my-tenant-4321"));
3auto urlId = utility::string_t(U("article-9876"));
4boost::optional<utility::string_t> sso = boost::make_optional<utility::string_t>(U("user@example.com"));
5
6api->putCloseThread(tenantId, urlId, sso).then([](pplx::task<std::shared_ptr<APIEmptyResponse>> task){
7 try{
8 auto response = task.get();
9 }catch(const std::exception&){
10 }
11});
12

移除徽章 Internal Link

參數

NameTypeRequiredDescription
tenantIdstringYes
badgeIdstringYes
optionsconst PutRemoveBadgeOptions&Yes

回應

返回: RemoveUserBadgeResponse

範例

putRemoveBadge 範例
Copy Copy
1
2utility::string_t tenantId = U("my-tenant-123");
3utility::string_t badgeId = U("badge-abc-456");
4PutRemoveBadgeOptions options;
5options.reason = boost::optional<utility::string_t>(U("Spamming"));
6api->putRemoveBadge(tenantId, badgeId, options).then([](std::shared_ptr<RemoveUserBadgeResponse> resp) {
7 (void)resp;
8});
9

重新開啟討論串 Internal Link

參數

NameTypeRequiredDescription
tenantIdstring是
urlIdstring是
ssostring否

回應

返回:APIEmptyResponse

範例

putReopenThread 範例
Copy Copy
1
2api->putReopenThread(utility::string_t(U("my-tenant-123")), utility::string_t(U("thread-456")), boost::make_optional<utility::string_t>(U("user@example.com")))
3 .then([](std::shared_ptr<APIEmptyResponse> result){
4 std::cout << "Thread reopened" << std::endl;
5 });
6

設定信任因子 Internal Link

參數

名稱類型必填說明
tenantIdstring是
optionsconst SetTrustFactorOptions&是

回應

返回:SetUserTrustFactorResponse

範例

setTrustFactor 範例
Copy Copy
1
2SetTrustFactorOptions opts;
3opts.userId = utility::conversions::to_string_t("user@example.com");
4opts.trustFactor = 8;
5opts.reason = boost::optional<utility::string_t>(utility::conversions::to_string_t("Spam check passed"));
6api->setTrustFactor(utility::conversions::to_string_t("my-tenant-123"), opts)
7 .then([](pplx::task<std::shared_ptr<SetUserTrustFactorResponse>> task) {
8 try {
9 auto response = task.get();
10 } catch (const std::exception&) {
11 }
12 });
13

建立審核者 Internal Link

參數

名稱類型必填描述
tenantIdstringYes
createModeratorBodyCreateModeratorBodyYes

回應

返回:CreateModeratorResponse

範例

createModerator 範例
Copy Copy
1
2CreateModeratorBody moderatorBody;
3moderatorBody.email = utility::conversions::to_string_t("moderator@example.com");
4moderatorBody.name = utility::conversions::to_string_t("John Moderator");
5moderatorBody.notes = boost::optional<utility::string_t>(utility::conversions::to_string_t("Community moderator"));
6api->createModerator(utility::conversions::to_string_t("my-tenant-123"), moderatorBody)
7 .then([](std::shared_ptr<CreateModeratorResponse> resp) {});
8

刪除審核者 Internal Link

參數

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

回應

返回: APIEmptyResponse

範例

deleteModerator 範例
Copy Copy
1
2auto tenantId = utility::conversions::to_string_t("my-tenant-123");
3auto moderatorId = utility::conversions::to_string_t("mod-456");
4boost::optional<utility::string_t> sendEmail = utility::conversions::to_string_t("admin@example.com");
5api->deleteModerator(tenantId, moderatorId, sendEmail)
6 .then([](std::shared_ptr<APIEmptyResponse> resp) {
7 // 處理成功
8 });
9

取得審核者 Internal Link

參數

名稱類型必填說明
tenantIdstringYes
idstringYes

回應

回傳: GetModeratorResponse

範例

getModerator 範例
Copy Copy
1
2auto tenantId = utility::string_t(U("my-tenant-123"));
3auto moderatorId = utility::string_t(U("moderator-789"));
4api->getModerator(tenantId, moderatorId)
5 .then([](pplx::task<std::shared_ptr<GetModeratorResponse>> t) {
6 try {
7 auto response = t.get();
8 } catch (const std::exception&) {
9 }
10 });
11

取得審核者列表 Internal Link

參數

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

回應

返回:GetModeratorsResponse

示例

getModerators 示例
Copy Copy
1
2utility::string_t tenantId = U("my-tenant-123");
3boost::optional<double> skip = 10.0;
4api->getModerators(tenantId, skip).then([](pplx::task<std::shared_ptr<GetModeratorsResponse>> t){
5 auto response = t.get();
6});
7

發送邀請 Internal Link

參數

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

回應

返回: APIEmptyResponse

範例

sendInvite 範例
Copy Copy
1
2boost::optional<utility::string_t> cc = utility::conversions::to_string_t("cc@example.com");
3api->sendInvite(
4 utility::conversions::to_string_t("my-tenant-123"),
5 utility::conversions::to_string_t("invitee@example.com"),
6 utility::conversions::to_string_t("John Doe")
7).then([](std::shared_ptr<APIEmptyResponse> resp) {
8 // 處理成功的邀請
9});
10

更新審核者 Internal Link

參數

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

回應

回傳: APIEmptyResponse

範例

updateModerator 範例
Copy Copy
1
2auto tenantId = utility::conversions::to_string_t("my-tenant-123");
3auto moderatorId = utility::conversions::to_string_t("mod-789");
4UpdateModeratorBody body;
5body.email = utility::conversions::to_string_t("moderator@example.com");
6body.isActive = true;
7body.notes = boost::optional<utility::string_t>(utility::conversions::to_string_t("Senior moderator"));
8api->updateModerator(tenantId, moderatorId, body)
9 .then([](std::shared_ptr<APIEmptyResponse>) {})
10 .then([](pplx::task<void> t) { try { t.get(); } catch (const std::exception&) {} });
11

刪除通知計數 Internal Link

參數

名稱類型必填說明
tenantIdstringYes
idstringYes

回應

Returns: APIEmptyResponse

範例

deleteNotificationCount 範例
Copy Copy
1
2auto tenantId = utility::conversions::to_string_t("my-tenant-123");
3auto notificationId = utility::conversions::to_string_t("notif-789");
4
5api->deleteNotificationCount(tenantId, notificationId)
6 .then([](std::shared_ptr<APIEmptyResponse> resp) {})
7 .then([](pplx::task<void> t) { try { t.get(); } catch (const std::exception&) {} });
8

取得快取通知計數 Internal Link

參數

名稱類型必填說明
tenantIdstringYes
idstringYes

回應

返回:GetCachedNotificationCountResponse

範例

getCachedNotificationCount 範例
Copy Copy
1
2auto tenantId = boost::optional<utility::string_t>(utility::conversions::to_string_t("my-tenant-123"));
3auto userId = boost::optional<utility::string_t>(utility::conversions::to_string_t("user-456"));
4
5api->getCachedNotificationCount(tenantId.value(), userId.value())
6 .then([](pplx::task<std::shared_ptr<GetCachedNotificationCountResponse>> task) {
7 try {
8 auto response = task.get();
9 // process response
10 } catch (const std::exception&) {
11 // handle error
12 }
13 });
14

取得通知計數 Internal Link

參數

NameTypeRequiredDescription
tenantIdstringYes
optionsconst GetNotificationCountOptions&Yes

回應

返回: GetNotificationCountResponse

範例

getNotificationCount 範例
Copy Copy
1
2auto tenantId = U("my-tenant-123");
3GetNotificationCountOptions options;
4options.filter = boost::optional<utility::string_t>(U("unread"));
5options.maxCount = boost::optional<int>(10);
6api->getNotificationCount(tenantId, options)
7 .then([](pplx::task<std::shared_ptr<GetNotificationCountResponse>> t) {
8 try {
9 auto response = t.get();
10 } catch (const std::exception& ex) {
11 }
12 });
13

取得通知 Internal Link

參數

名稱類型必填說明
tenantIdstring是
optionsconst GetNotificationsOptions&是

回應

返回: GetNotificationsResponse

範例

getNotifications 範例
Copy Copy
1
2GetNotificationsOptions options;
3options.limit = 20;
4options.after = U("cursor-123");
5api->getNotifications(U("my-tenant-123"), options)
6 .then([](std::shared_ptr<GetNotificationsResponse> resp) {
7 (void)resp;
8 });
9

更新通知 Internal Link

參數

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

回應

返回: APIEmptyResponse

範例

updateNotification 範例
Copy Copy
1
2auto updateBody = std::make_shared<UpdateNotificationBody>();
3updateBody->title = utility::conversions::to_string_t("System Maintenance");
4updateBody->message = utility::conversions::to_string_t("Scheduled downtime at 02:00 UTC.");
5api->updateNotification(
6 utility::conversions::to_string_t("my-tenant-123"),
7 utility::conversions::to_string_t("notif-456"),
8 updateBody,
9 boost::optional<utility::string_t>(utility::conversions::to_string_t("admin-user"))
10).then([](std::shared_ptr<APIEmptyResponse>){});
11

建立 V1 頁面回應 Internal Link

參數

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

回應

返回:CreateV1PageReact

範例

createV1PageReact 範例
Copy Copy
1
2auto tenantId = utility::string_t(U("my-tenant-123"));
3auto urlId = utility::string_t(U("https://example.com/articles/789"));
4boost::optional<utility::string_t> title = utility::string_t(U("Understanding Async C++"));
5api->createV1PageReact(tenantId, urlId, title).then([](pplx::task<std::shared_ptr<CreateV1PageReact>> task) {
6 try {
7 auto response = task.get();
8 } catch (const std::exception&) {
9 }
10});
11

建立 V2 頁面回應 Internal Link

參數

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

回應

返回: CreateV1PageReact

範例

createV2PageReact 範例
Copy Copy
1
2api->createV2PageReact(
3 utility::string_t(U("my-tenant-789")),
4 utility::string_t(U("https://example.com/articles/12345")),
5 utility::string_t(U("user-42")),
6 boost::optional<utility::string_t>(U("Helpful"))
7).then([](pplx::task<std::shared_ptr<CreateV1PageReact>> task){
8 try{
9 auto response = task.get();
10 }catch(const std::exception&){ }
11});
12

刪除 V1 頁面回應 Internal Link

參數

名稱類型必須描述
tenantIdstringYes
urlIdstringYes

回應

返回: CreateV1PageReact

範例

deleteV1PageReact 範例
Copy Copy
1
2auto tenantId = utility::conversions::to_string_t("my-tenant-123");
3auto urlId = utility::conversions::to_string_t("page-abc-456");
4api->deleteV1PageReact(tenantId, urlId).then([](pplx::task<std::shared_ptr<CreateV1PageReact>> task){
5 try{
6 auto response = task.get();
7 boost::optional<std::shared_ptr<CreateV1PageReact>> optResponse = response;
8 }catch(...){
9 }
10});
11

刪除 V2 頁面回應 Internal Link

參數

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

回應

返回:CreateV1PageReact

範例

deleteV2PageReact 範例
Copy Copy
1
2auto tenantId = utility::conversions::to_string_t("my-tenant-123");
3auto urlId = utility::conversions::to_string_t("page-456");
4auto reactId = utility::conversions::to_string_t("react-789");
5boost::optional<utility::string_t> correlationId = utility::conversions::to_string_t("corr-001");
6
7api->deleteV2PageReact(tenantId, urlId, reactId)
8 .then([](pplx::task<std::shared_ptr<CreateV1PageReact>> t) {
9 auto result = t.get();
10 });
11

取得 V1 頁面讚 Internal Link

參數

名稱類型必填說明
tenantIdstringYes
urlIdstringYes

回應

回傳: GetV1PageLikes

範例

getV1PageLikes 範例
Copy Copy
1
2auto tenantId = utility::conversions::to_string_t("my-tenant-123");
3auto urlId = utility::conversions::to_string_t("article-789");
4boost::optional<utility::string_t> filter;
5
6api->getV1PageLikes(tenantId, urlId).then([=](pplx::task<std::shared_ptr<GetV1PageLikes>> task){
7 try{
8 auto raw = task.get();
9 auto likes = std::make_shared<GetV1PageLikes>(*raw);
10 auto total = likes->totalLikes;
11 }catch(...){
12 }
13});
14

取得 V2 頁面回應 Internal Link

參數

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

回應

返回:GetV2PageReacts

範例

getV2PageReacts 範例
Copy Copy
1
2auto tenantId = utility::string_t("my-tenant-123");
3auto urlId = utility::string_t("https://example.com/article/42");
4boost::optional<utility::string_t> locale = utility::string_t("en-US");
5api->getV2PageReacts(tenantId, urlId)
6 .then([locale](std::shared_ptr<GetV2PageReacts> reacts){
7 if (locale) {}
8 })
9 .then([](pplx::task<void> t){
10 try { t.get(); } catch (...) {}
11 });
12

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

Parameters

名稱類型必填說明
tenantIdstringYes
urlIdstringYes
idstringYes

Response

返回:GetV2PageReactUsersResponse

Example

getV2PageReactUsers 範例
Copy Copy
1
2auto tenantId = utility::conversions::to_string_t("my-tenant-123");
3auto urlId = utility::conversions::to_string_t("page-456");
4auto id = utility::conversions::to_string_t("react-789");
5boost::optional<utility::string_t> maybeFilter;
6api->getV2PageReactUsers(tenantId, urlId, id).then([](pplx::task<std::shared_ptr<GetV2PageReactUsersResponse>> task){
7 try{
8 auto response = task.get();
9 // 根據需要使用回應
10 }catch(const std::exception&){
11 // 處理錯誤
12 }
13});
14

新增頁面 Internal Link

參數

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

回應

返回:AddPageAPIResponse

範例

addPage 示例
Copy Copy
1
2auto createData = CreateAPIPageData{};
3createData.title = utility::string_t(U("Welcome Page"));
4createData.url = utility::string_t(U("https://example.com/welcome"));
5createData.description = boost::optional<utility::string_t>(utility::string_t(U("Landing page for new users")));
6
7api->addPage(utility::string_t(U("my-tenant-123")), createData)
8 .then([](std::shared_ptr<AddPageAPIResponse> response) {
9 if (response && response->success) {
10 // 處理成功的新增
11 } else {
12 // 處理錯誤
13 }
14 });
15

刪除頁面 Internal Link

參數

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

回應

回傳:DeletePageAPIResponse

範例

deletePage 範例
Copy Copy
1
2auto tenantId = utility::conversions::to_string_t("my-tenant-123");
3auto pageId = utility::conversions::to_string_t("page-456");
4
5api->deletePage(tenantId, pageId)
6 .then([](pplx::task<std::shared_ptr<DeletePageAPIResponse>> t) {
7 try {
8 auto response = t.get();
9 // 根據需要處理回應
10 } catch (const std::exception& ex) {
11 // 處理錯誤
12 }
13 });
14

取得離線使用者 Internal Link

頁面上過去曾留言但目前不在線上的使用者。按 displayName 排序。 在用完 /users/online 之後,使用此 API 來渲染「成員」區塊。 基於 commenterName 的游標分頁:伺服器透過 $gt 從 afterName 開始,沿著部分索引 {tenantId, urlId, commenterName} 向前走,沒有 $skip 的成本。

參數

名稱類型必填說明
tenantIdstring是
urlIdstring是
optionsconst GetOfflineUsersOptions&是

回應

回傳:PageUsersOfflineResponse

範例

getOfflineUsers 範例
Copy Copy
1
2utility::string_t tenantId = U("my-tenant-123");
3utility::string_t urlId = U("page-456");
4GetOfflineUsersOptions options;
5options.limit = boost::optional<int>(50);
6options.includeDetails = boost::optional<bool>(true);
7
8api->getOfflineUsers(tenantId, urlId, options)
9 .then([](pplx::task<std::shared_ptr<PageUsersOfflineResponse>> t) {
10 try {
11 auto response = t.get();
12 } catch (const std::exception&) {
13 }
14 });
15

取得線上使用者 Internal Link

目前線上觀看頁面的使用者:目前其 websocket session 已訂閱該頁面的使用者。
返回 anonCount + totalCount(全域訂閱者,包含我們未列舉的匿名觀看者)。

參數

名稱型別必填說明
tenantIdstring是
urlIdstring是
optionsconst GetOnlineUsersOptions&是

回應

返回: PageUsersOnlineResponse

範例

getOnlineUsers 範例
Copy Copy
1
2utility::string_t tenantId = U("my-tenant-123");
3utility::string_t urlId = U("article-456");
4auto options = std::make_shared<GetOnlineUsersOptions>();
5options->maxResults = boost::optional<int>(100);
6options->includeInactive = boost::optional<bool>(false);
7api->getOnlineUsers(tenantId, urlId, *options).then([](pplx::task<std::shared_ptr<PageUsersOnlineResponse>> task){
8 try{
9 auto response = task.get();
10 }catch(const std::exception&){
11 }
12});
13

依 URL ID 取得頁面 Internal Link

參數

名稱類型必填描述
tenantIdstringYes
urlIdstringYes

回應

回傳:GetPageByURLIdAPIResponse

範例

getPageByURLId 範例
Copy Copy
1
2auto tenantId = utility::conversions::to_string_t("my-tenant-123");
3auto urlId = utility::conversions::to_string_t("page-456");
4boost::optional<utility::string_t> correlationId = boost::make_optional(utility::conversions::to_string_t("corr-789"));
5
6api->getPageByURLId(tenantId, urlId)
7 .then([correlationId](pplx::task<std::shared_ptr<GetPageByURLIdAPIResponse>> task) {
8 try {
9 auto response = task.get();
10 } catch (const std::exception&) {
11 }
12 });
13

取得頁面 Internal Link

參數

名稱類型必填說明
tenantIdstringYes

回應

Returns: GetPagesAPIResponse

範例

getPages 範例
Copy Copy
1
2auto tenantId = utility::conversions::to_string_t("my-tenant-123");
3api->getPages(tenantId)
4 .then([](pplx::task<std::shared_ptr<GetPagesAPIResponse>> task) {
5 try {
6 auto response = task.get();
7 boost::optional<utility::string_t> nextCursor = response->nextCursor;
8 } catch (const std::exception&) {
9 }
10 });
11

公開取得頁面 Internal Link

列出租戶的頁面。由 FChat 桌面用戶端使用,以填入其房間清單。 每個頁面在解析後的自訂設定中都需要 enableFChat 為 true。 需要 SSO 的頁面會根據請求使用者的群組存取權限進行篩選。

參數

名稱類型必填說明
tenantIdstring是
optionsconst GetPagesPublicOptions&是

回應

回傳:GetPublicPagesResponse

範例

getPagesPublic 範例
Copy Copy
1
2utility::string_t tenantId = U("my-tenant-123");
3GetPagesPublicOptions options;
4options.limit = boost::optional<int>(50);
5options.cursor = boost::optional<utility::string_t>(U("cursor-token"));
6api->getPagesPublic(tenantId, options).then([](pplx::task<std::shared_ptr<GetPublicPagesResponse>> task){
7 try{
8 auto response = task.get();
9 // process response if needed
10 }catch(const std::exception&){
11 // handle error if needed
12 }
13});
14

取得使用者資訊 Internal Link

取得租戶的批次使用者資訊。給定 userIds,從 User / SSOUser 回傳顯示資訊。 由留言小工具使用,以豐富剛透過 presence 事件出現的使用者。 無頁面上下文:隱私一律強制執行(私人個人資料會被遮蔽)。

參數

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

回應

回傳:PageUsersInfoResponse

範例

getUsersInfo 範例
Copy Copy
1
2utility::string_t tenantId = U("my-tenant-123");
3utility::string_t ids = U("alice@example.com,bob@example.com");
4boost::optional<utility::string_t> locale = boost::make_optional(U("en-US"));
5
6api->getUsersInfo(tenantId, ids).then([](pplx::task<std::shared_ptr<PageUsersInfoResponse>> t){
7 try{
8 auto response = t.get();
9 // 處理回應
10 }catch(const std::exception&){
11 // 處理錯誤
12 }
13});
14

修補頁面 Internal Link

參數

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

回應

回傳:PatchPageAPIResponse

範例

patchPage 範例
Copy Copy
1
2utility::string_t tenantId = U("my-tenant-123");
3utility::string_t pageId = U("page-789");
4UpdateAPIPageData update;
5update.title = boost::optional<utility::string_t>(U("Updated Page Title"));
6update.metadata = boost::optional<utility::string_t>(U("{\"author\":\"jane.doe@example.com\"}"));
7api->patchPage(tenantId, pageId, update)
8 .then([](std::shared_ptr<PatchPageAPIResponse> response) {
9 if (response && response->isSuccess) {
10 // 處理成功
11 }
12 })
13 .then([](pplx::task<void> t) {
14 try { t.get(); } catch (const std::exception&) {}
15 });
16

刪除待處理 Webhook 事件 Internal Link

參數

NameTypeRequiredDescription
tenantIdstringYes
idstringYes

回應

返回:APIEmptyResponse

範例

deletePendingWebhookEvent 範例
Copy Copy
1
2auto tenantId = utility::conversions::to_string_t("my-tenant-123");
3auto eventId = utility::conversions::to_string_t("event-987654");
4boost::optional<utility::string_t> optTenant = tenantId;
5
6api->deletePendingWebhookEvent(optTenant.value(), eventId)
7 .then([](std::shared_ptr<APIEmptyResponse> resp) {
8 (void)resp;
9 })
10 .then([](pplx::task<void> t) {
11 try { t.get(); } catch (const std::exception& e) { }
12 });
13

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

參數

名稱類型必填說明
tenantIdstringYes
optionsconst GetPendingWebhookEventCountOptions&Yes

回應

Returns: GetPendingWebhookEventCountResponse

範例

getPendingWebhookEventCount 範例
Copy Copy
1
2auto tenantId = utility::conversions::to_string_t("my-tenant-123");
3GetPendingWebhookEventCountOptions opts;
4opts.filter = boost::optional<utility::string_t>(utility::conversions::to_string_t("active"));
5api->getPendingWebhookEventCount(tenantId, opts)
6 .then([](std::shared_ptr<GetPendingWebhookEventCountResponse> resp){
7 auto count = resp->getCount();
8 });
9

取得待處理 Webhook 事件 Internal Link

參數

名稱類型必填說明
tenantIdstring是
optionsconst GetPendingWebhookEventsOptions&是

回應

返回:GetPendingWebhookEventsResponse

範例

getPendingWebhookEvents 範例
Copy Copy
1
2auto tenantId = utility::string_t(U("my-tenant-123"));
3GetPendingWebhookEventsOptions opts;
4opts.pageSize = boost::optional<int>(100);
5opts.startAfter = boost::optional<utility::string_t>(U("event-abc-456"));
6api->getPendingWebhookEvents(tenantId, opts)
7 .then([](pplx::task<std::shared_ptr<GetPendingWebhookEventsResponse>> task) {
8 try {
9 auto resp = task.get();
10 auto copy = std::make_shared<GetPendingWebhookEventsResponse>(*resp);
11 } catch (const std::exception&) {}
12 });
13

建立問題設定 Internal Link

參數

名稱類型必填說明
tenantIdstringYes
createQuestionConfigBodyCreateQuestionConfigBodyYes

回應

返回:CreateQuestionConfigResponse

範例

createQuestionConfig 範例
Copy Copy
1
2auto tenantId = utility::string_t(U("my-tenant-123"));
3CreateQuestionConfigBody configBody;
4configBody.question = utility::string_t(U("How satisfied are you with our service?"));
5configBody.required = true;
6configBody.defaultAnswer = boost::optional<utility::string_t>(utility::string_t(U("Very satisfied")));
7api->createQuestionConfig(tenantId, configBody).then([](pplx::task<std::shared_ptr<CreateQuestionConfigResponse>> task){
8 try{
9 auto response = task.get();
10 }catch(const std::exception&){}
11});
12

刪除問題設定 Internal Link

參數

名稱類型必填說明
tenantIdstringYes
idstringYes

回應

Returns: APIEmptyResponse

範例

deleteQuestionConfig 範例
Copy Copy
1
2auto tenantId = utility::conversions::to_string_t("my-tenant-123");
3auto configId = utility::conversions::to_string_t("question-config-456");
4
5api->deleteQuestionConfig(tenantId, configId)
6 .then([](std::shared_ptr<APIEmptyResponse> resp) {
7 // 處理成功刪除
8 })
9 .then([](pplx::task<void> t) {
10 try {
11 t.get();
12 } catch (const std::exception&) {
13 // 處理錯誤
14 }
15 });
16

取得問題設定 Internal Link

參數

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

回應

回傳:GetQuestionConfigResponse

範例

getQuestionConfig 範例
Copy Copy
1
2auto tenantId = utility::conversions::to_string_t("my-tenant-123");
3auto questionId = utility::conversions::to_string_t("question-456");
4
5api->getQuestionConfig(tenantId, questionId)
6 .then([](pplx::task<std::shared_ptr<GetQuestionConfigResponse>> task) {
7 try {
8 auto response = task.get();
9 // 按需使用回應
10 } catch (const std::exception&) {
11 // 處理錯誤
12 }
13 });
14

取得問題設定列表 Internal Link

參數

名稱類型必要描述
tenantIdstring是
skipdouble否

回應

返回:GetQuestionConfigsResponse

範例

getQuestionConfigs 範例
Copy Copy
1
2auto tenantId = utility::conversions::to_string_t("my-tenant-123");
3boost::optional<double> skip = 10.0;
4api->getQuestionConfigs(tenantId, skip).then([](std::shared_ptr<GetQuestionConfigsResponse> resp){
5 auto config = std::make_shared<GetQuestionConfigsResponse>(*resp);
6});
7

更新問題設定 Internal Link

參數

名稱類型必填描述
tenantIdstringYes
idstringYes
updateQuestionConfigBodyUpdateQuestionConfigBodyYes

回應

回傳: APIEmptyResponse

範例

updateQuestionConfig 範例
Copy Copy
1
2UpdateQuestionConfigBody updateBody;
3updateBody.enabled = true;
4updateBody.maxResponses = boost::optional<int>{10};
5updateBody.notes = boost::optional<utility::string_t>{U("Config updated via SDK")};
6
7api->updateQuestionConfig(U("my-tenant-123"), U("config-789"), updateBody)
8 .then([](std::shared_ptr<APIEmptyResponse> resp) {
9 })
10 .then([](pplx::task<void> t) {
11 try { t.get(); } catch (const std::exception&) {}
12 });
13

建立問題結果 Internal Link

參數

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

回應

返回:CreateQuestionResultResponse

範例

createQuestionResult 範例
Copy Copy
1
2utility::string_t tenantId = U("my-tenant-123");
3CreateQuestionResultBody body;
4body.questionId = U("question-456");
5body.result = U("approved");
6body.comment = boost::optional<utility::string_t>(U("Looks good"));
7api->createQuestionResult(tenantId, body)
8 .then([=](pplx::task<std::shared_ptr<CreateQuestionResultResponse>> t) {
9 try {
10 auto resp = t.get();
11 } catch (const std::exception&) {
12 }
13 });
14

刪除問題結果 Internal Link

參數

名稱類型必填說明
tenantIdstringYes
idstringYes

回應

返回:APIEmptyResponse

範例

deleteQuestionResult 範例
Copy Copy
1
2boost::optional<utility::string_t> optTenant = utility::conversions::to_string_t( "my-tenant-123" );
3utility::string_t questionId = utility::conversions::to_string_t( "question-456" );
4
5if ( optTenant )
6{
7 api->deleteQuestionResult( *optTenant, questionId )
8 .then( []( pplx::task<std::shared_ptr<APIEmptyResponse>> t )
9 {
10 try
11 {
12 auto resp = t.get();
13 // 成功處理
14 }
15 catch ( const std::exception& e )
16 {
17 // 錯誤處理
18 }
19 } );
20}
21

取得問題結果 Internal Link

參數

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

回應

返回: GetQuestionResultResponse

範例

getQuestionResult 示例
Copy Copy
1
2auto tenantId = utility::string_t(U("my-tenant-123"));
3auto questionId = utility::string_t(U("question-789"));
4boost::optional<utility::string_t> optionalParam = boost::none;
5
6api->getQuestionResult(tenantId, questionId)
7 .then([](pplx::task<std::shared_ptr<GetQuestionResultResponse>> task) {
8 try {
9 auto response = task.get();
10 } catch (const std::exception&) {
11 }
12 });
13

取得問題結果列表 Internal Link

參數

名稱類型必須說明
tenantIdstringYes
optionsconst GetQuestionResultsOptions&Yes

回應

返回: GetQuestionResultsResponse

範例

getQuestionResults 範例
Copy Copy
1
2utility::string_t tenantId = U("my-tenant-123");
3GetQuestionResultsOptions options;
4options.questionId = boost::optional<utility::string_t>(U("question-456"));
5options.includeDeleted = boost::optional<bool>(false);
6api->getQuestionResults(tenantId, options)
7 .then([](pplx::task<std::shared_ptr<GetQuestionResultsResponse>> t) {
8 auto response = t.get();
9 // 處理回應
10 });
11

更新問題結果 Internal Link

參數

名稱類型必填說明
tenantIdstringYes
idstringYes
updateQuestionResultBodyUpdateQuestionResultBodyYes

回應

返回: APIEmptyResponse

範例

updateQuestionResult 範例
Copy Copy
1
2auto tenantId = utility::string_t(U("my-tenant-123"));
3auto questionId = utility::string_t(U("question-456"));
4UpdateQuestionResultBody body;
5body.result = U("approved");
6body.note = boost::optional<utility::string_t>(U("Reviewed by admin"));
7api->updateQuestionResult(tenantId, questionId, body)
8 .then([](pplx::task<std::shared_ptr<APIEmptyResponse>> t) {
9 try {
10 auto respPtr = std::make_shared<APIEmptyResponse>(*t.get());
11 } catch (const std::exception&) {
12 }
13 });
14

彙總問題結果 Internal Link

參數

名稱類型必填說明
tenantIdstring是
optionsconst AggregateQuestionResultsOptions&是

回應

返回:AggregateQuestionResultsResponse

範例

aggregateQuestionResults 範例
Copy Copy
1
2auto tenantId = utility::conversions::to_string_t("my-tenant-123");
3AggregateQuestionResultsOptions opts;
4opts.questionId = utility::conversions::to_string_t("question-789");
5opts.startDate = boost::optional<utility::datetime>(utility::datetime::from_string(U("2023-01-01T00:00:00Z"), utility::datetime::ISO_8601));
6opts.endDate = boost::optional<utility::datetime>(utility::datetime::from_string(U("2023-01-31T23:59:59Z"), utility::datetime::ISO_8601));
7api->aggregateQuestionResults(tenantId, opts)
8 .then([](std::shared_ptr<AggregateQuestionResultsResponse> resp) {
9 static_cast<void>(resp);
10 });
11

批量彙總問題結果 Internal Link

參數

NameTypeRequiredDescription
tenantIdstringYes
bulkAggregateQuestionResultsRequestBulkAggregateQuestionResultsRequestYes
forceRecalculateboolNo

回應

Returns: BulkAggregateQuestionResultsResponse

範例

bulkAggregateQuestionResults 範例
Copy Copy
1
2auto tenantId = utility::conversions::to_string_t("my-tenant-123");
3BulkAggregateQuestionResultsRequest request;
4request.questionIds = {
5 utility::conversions::to_string_t("q123"),
6 utility::conversions::to_string_t("q456")
7};
8request.startDate = utility::datetime::from_string(U("2023-01-01T00:00:00Z"));
9request.endDate = utility::datetime::from_string(U("2023-01-31T23:59:59Z"));
10boost::optional<bool> forceRecalc = true;
11api->bulkAggregateQuestionResults(tenantId, request, forceRecalc)
12 .then([](pplx::task<std::shared_ptr<BulkAggregateQuestionResultsResponse>> t) {
13 auto resp = t.get();
14 });
15

結合評論與問題結果 Internal Link

參數

名稱類型必填說明
tenantIdstring是
optionsconst CombineCommentsWithQuestionResultsOptions&是

回應

返回:CombineQuestionResultsWithCommentsResponse

範例

combineCommentsWithQuestionResults 範例
Copy Copy
1
2utility::string_t tenantId = utility::string_t("my-tenant-123");
3CombineCommentsWithQuestionResultsOptions options;
4options.questionId = utility::string_t("question-789");
5options.maxComments = boost::optional<int>(50);
6api->combineCommentsWithQuestionResults(tenantId, options).then(
7 [](pplx::task<std::shared_ptr<CombineQuestionResultsWithCommentsResponse>> task){
8 try{
9 auto respPtr = task.get();
10 auto combined = std::make_shared<CombineQuestionResultsWithCommentsResponse>(*respPtr);
11 // 根据需要使用 combined
12 }catch(const std::exception&){
13 }
14 });
15

新增單一登入使用者 Internal Link

參數

NameTypeRequiredDescription
tenantIdstringYes
createAPISSOUserDataCreateAPISSOUserDataYes

回應

返回:AddSSOUserAPIResponse

範例

addSSOUser 範例
Copy Copy
1
2auto tenantId = utility::conversions::to_string_t("my-tenant-123");
3CreateAPISSOUserData createAPISSOUserData;
4createAPISSOUserData.email = utility::conversions::to_string_t("john.doe@example.com");
5createAPISSOUserData.externalId = utility::conversions::to_string_t("ext-9876");
6createAPISSOUserData.firstName = boost::optional<utility::string_t>(utility::conversions::to_string_t("John"));
7createAPISSOUserData.lastName = boost::optional<utility::string_t>(utility::conversions::to_string_t("Doe"));
8api->addSSOUser(tenantId, createAPISSOUserData)
9 .then([](std::shared_ptr<AddSSOUserAPIResponse> resp) {
10 });
11

刪除單一登入使用者 Internal Link

參數

名稱類型必須描述
tenantIdstring是
idstring是
optionsconst DeleteSSOUserOptions&是

回應

返回:DeleteSSOUserAPIResponse

範例

deleteSSOUser 範例
Copy Copy
1
2auto tenantId = U("my-tenant-123");
3auto userId = U("user-456");
4DeleteSSOUserOptions options;
5options.dryRun = boost::optional<bool>(true);
6api->deleteSSOUser(tenantId, userId, options).then([](std::shared_ptr<DeleteSSOUserAPIResponse> resp) {
7 if (resp) {
8 (void)resp;
9 }
10});
11

依 Email 取得單一登入使用者 Internal Link

參數

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

回應

返回: GetSSOUserByEmailAPIResponse

範例

getSSOUserByEmail 範例
Copy Copy
1
2auto correlationId = boost::optional<utility::string_t>(utility::conversions::to_string_t("corr-001"));
3
4api->getSSOUserByEmail(
5 utility::conversions::to_string_t("my-tenant-123"),
6 utility::conversions::to_string_t("user@example.com")
7).then([](pplx::task<std::shared_ptr<GetSSOUserByEmailAPIResponse>> t) {
8 try {
9 auto response = t.get();
10 } catch (const std::exception&) {
11 }
12});
13

依 ID 取得單一登入使用者 Internal Link

參數

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

回應

返回: GetSSOUserByIdAPIResponse

範例

getSSOUserById 範例
Copy Copy
1
2auto tenantId = U("my-tenant-123");
3auto ssoUserId = U("user-789");
4api->getSSOUserById(tenantId, ssoUserId)
5 .then([](std::shared_ptr<GetSSOUserByIdAPIResponse> resp) {
6 boost::optional<utility::string_t> email;
7 if (resp && resp->email) email = resp->email;
8 if (email) {
9 auto e = *email;
10 }
11 });
12

取得單一登入使用者列表 Internal Link

參數

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

回應

返回:GetSSOUsersResponse

範例

getSSOUsers 範例
Copy Copy
1
2utility::string_t tenantId = U("my-tenant-123");
3boost::optional<int32_t> skip = 25;
4api->getSSOUsers(tenantId, skip).then([](pplx::task<std::shared_ptr<GetSSOUsersResponse>> t) {
5 try {
6 auto response = t.get();
7 } catch (const std::exception&) {
8 }
9});
10

修補單一登入使用者 Internal Link

參數

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

回應

回傳: PatchSSOUserAPIResponse

範例

patchSSOUser 範例
Copy Copy
1
2utility::string_t tenantId = U("my-tenant-123");
3utility::string_t userId = U("user-456");
4UpdateAPISSOUserData updateData;
5updateData.email = U("jane.doe@example.com");
6updateData.displayName = U("Jane Doe");
7boost::optional<bool> updateComments = true;
8
9api->patchSSOUser(tenantId, userId, updateData, updateComments)
10 .then([](pplx::task<std::shared_ptr<PatchSSOUserAPIResponse>> t){
11 try{
12 auto resp = t.get();
13 (void)resp;
14 }catch(const std::exception&){
15 }
16 });
17

放置單一登入使用者 Internal Link

參數

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

回應

返回: PutSSOUserAPIResponse

範例

putSSOUser 範例
Copy Copy
1
2UpdateAPISSOUserData userData;
3userData.email = utility::conversions::to_string_t("alice@example.com");
4userData.first_name = utility::conversions::to_string_t("Alice");
5userData.last_name = utility::conversions::to_string_t("Smith");
6userData.role = utility::conversions::to_string_t("moderator");
7
8api->putSSOUser(
9 utility::conversions::to_string_t("my-tenant-123"),
10 utility::conversions::to_string_t("alice.smith"),
11 userData,
12 boost::optional<bool>(true)
13).then([](pplx::task<std::shared_ptr<PutSSOUserAPIResponse>> t) {
14 auto response = t.get();
15});
16

建立訂閱 Internal Link

參數

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

回應

回傳:CreateSubscriptionAPIResponse

範例

createSubscription 範例
Copy Copy
1
2auto tenantId = U("my-tenant-123");
3CreateAPIUserSubscriptionData subscriptionData;
4subscriptionData.email = U("user@example.com");
5subscriptionData.planId = U("premium-plan");
6subscriptionData.couponCode = boost::optional<utility::string_t>(U("WELCOME10"));
7api->createSubscription(tenantId, subscriptionData)
8 .then([](pplx::task<std::shared_ptr<CreateSubscriptionAPIResponse>> task) {
9 try {
10 auto response = task.get();
11 } catch (const std::exception&) {
12 }
13 });
14

刪除訂閱 Internal Link

參數

名稱類型必填說明
tenantIdstringYes
idstringYes
userIdstringNo

回應

返回: DeleteSubscriptionAPIResponse

範例

deleteSubscription 範例
Copy Copy
1
2api->deleteSubscription(utility::string_t(U("my-tenant-123")), utility::string_t(U("sub-456")), boost::optional<utility::string_t>(utility::string_t(U("user@example.com"))))
3 .then([](std::shared_ptr<DeleteSubscriptionAPIResponse> resp){
4 if (resp) {
5 }
6 });
7

取得訂閱 Internal Link

參數

名稱類型必填說明
tenantIdstringYes
userIdstringNo

回應

回傳: GetSubscriptionsAPIResponse

範例

getSubscriptions 範例
Copy Copy
1
2auto tenant = utility::conversions::to_string_t("my-tenant-123");
3boost::optional<utility::string_t> user = utility::conversions::to_string_t("user@example.com");
4
5api->getSubscriptions(tenant, user).then(
6 [](pplx::task<std::shared_ptr<GetSubscriptionsAPIResponse>> t) {
7 try {
8 auto response = t.get();
9 // 處理回應
10 } catch (const std::exception& e) {
11 // 處理錯誤
12 }
13 }
14);
15

更新訂閱 Internal Link

參數

NameTypeRequiredDescription
tenantIdstringYes
idstringYes
updateAPIUserSubscriptionDataUpdateAPIUserSubscriptionDataYes
userIdstringNo

回應

返回: UpdateSubscriptionAPIResponse

範例

updateSubscription 範例
Copy Copy
1
2UpdateAPIUserSubscriptionData subscriptionData;
3subscriptionData.plan = utility::conversions::to_string_t("premium");
4subscriptionData.active = true;
5
6api->updateSubscription(
7 utility::conversions::to_string_t("my-tenant-123"),
8 utility::conversions::to_string_t("sub-987654"),
9 subscriptionData,
10 boost::optional<utility::string_t>(utility::conversions::to_string_t("admin-user-456"))
11).then([](std::shared_ptr<UpdateSubscriptionAPIResponse> response){
12 bool ok = response && response->isSuccess;
13 (void)ok;
14});
15

取得租戶每日使用量 Internal Link

參數

名稱類型必填描述
tenantIdstring是
optionsconst GetTenantDailyUsagesOptions&是

回應

Returns: GetTenantDailyUsagesResponse

範例

getTenantDailyUsages 範例
Copy Copy
1
2utility::string_t tenantId = U("my-tenant-123");
3GetTenantDailyUsagesOptions opts;
4opts.startDate = boost::optional<utility::datetime>(utility::datetime::from_string(U("2023-01-01T00:00:00Z")));
5opts.endDate = boost::optional<utility::datetime>(utility::datetime::from_string(U("2023-01-31T23:59:59Z")));
6api->getTenantDailyUsages(tenantId, opts).then([](std::shared_ptr<GetTenantDailyUsagesResponse> resp){
7 auto result = std::make_shared<GetTenantDailyUsagesResponse>(*resp);
8}).wait();
9

建立租戶套件 Internal Link

參數

名稱類型必填說明
tenantIdstringYes
createTenantPackageBodyCreateTenantPackageBodyYes

回應

返回:CreateTenantPackageResponse

範例

createTenantPackage 範例
Copy Copy
1
2auto tenantId = utility::conversions::to_string_t("my-tenant-123");
3CreateTenantPackageBody body;
4body.name = utility::conversions::to_string_t("Pro Plan");
5body.maxUsers = 100;
6body.expiryDate = boost::optional<utility::datetime>(utility::datetime::utc_now() + std::chrono::hours(24 * 30));
7body.notes = boost::none;
8api->createTenantPackage(tenantId, body).then([](pplx::task<std::shared_ptr<CreateTenantPackageResponse>> t){
9 try{
10 auto resp = t.get();
11 }catch(const std::exception&){
12 }
13});
14

刪除租戶套件 Internal Link

參數

NameTypeRequiredDescription
tenantIdstringYes
idstringYes

回應

返回: APIEmptyResponse

範例

deleteTenantPackage 範例
Copy Copy
1
2auto tenantId = utility::conversions::to_string_t("my-tenant-123");
3auto packageId = utility::conversions::to_string_t("pkg-456");
4boost::optional<utility::string_t> optTenant = tenantId;
5boost::optional<utility::string_t> optPackage = packageId;
6api->deleteTenantPackage(optTenant.value(), optPackage.value())
7 .then([](std::shared_ptr<APIEmptyResponse>){ })
8 .then([](pplx::task<void> t){ try{ t.get(); }catch(const std::exception&){ } });
9

取得租戶套件 Internal Link

參數

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

回應

返回:GetTenantPackageResponse

範例

getTenantPackage 範例
Copy Copy
1
2auto tenantId = U("my-tenant-123");
3auto packageId = U("pkg-456");
4api->getTenantPackage(tenantId, packageId).then([](pplx::task<std::shared_ptr<GetTenantPackageResponse>> task){
5 try{
6 auto resp = task.get();
7 auto result = std::make_shared<GetTenantPackageResponse>(*resp);
8 }catch(...){}
9});
10

取得租戶套件列表 Internal Link

參數

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

回應

返回: GetTenantPackagesResponse

範例

getTenantPackages 範例
Copy Copy
1
2auto tenantId = utility::string_t(U("my-tenant-123"));
3boost::optional<double> skip = 20.0;
4api->getTenantPackages(tenantId, skip)
5 .then([](std::shared_ptr<GetTenantPackagesResponse> resp) {
6 (void)resp;
7 });
8

取代租戶套件 Internal Link

參數

名稱類型必填描述
tenantIdstringYes
idstringYes
replaceTenantPackageBodyReplaceTenantPackageBodyYes

回應

返回: APIEmptyResponse

範例

replaceTenantPackage 範例
Copy Copy
1
2auto tenantId = utility::conversions::to_string_t("my-tenant-123");
3auto pkgId = utility::conversions::to_string_t("pkg-456");
4ReplaceTenantPackageBody body;
5body.planId = utility::conversions::to_string_t("enterprise");
6body.notes = boost::optional<utility::string_t>(utility::conversions::to_string_t("Upgrade request"));
7api->replaceTenantPackage(tenantId, pkgId, body)
8 .then([](std::shared_ptr<APIEmptyResponse>) { })
9 .then([](pplx::task<void> t) {
10 try { t.get(); } catch (const std::exception&) { }
11 });
12

更新租戶套件 Internal Link

參數

名稱類型必要說明
tenantIdstringYes
idstringYes
updateTenantPackageBodyUpdateTenantPackageBodyYes

回應

返回:APIEmptyResponse

範例

updateTenantPackage 範例
Copy Copy
1
2auto body = std::make_shared<UpdateTenantPackageBody>();
3body->packageId = utility::conversions::to_string_t("premium-plan");
4body->expirationDate = utility::conversions::to_string_t("2025-12-31");
5body->notes = boost::optional<utility::string_t>(utility::conversions::to_string_t("Upgraded package"));
6
7api->updateTenantPackage(utility::conversions::to_string_t("my-tenant-123"),
8 utility::conversions::to_string_t("pkg-456"),
9 body)
10 .then([](pplx::task<std::shared_ptr<APIEmptyResponse>> task) {
11 try {
12 auto response = task.get();
13 // 成功處理
14 } catch (const std::exception& ex) {
15 // 錯誤處理
16 }
17 });
18

建立租戶使用者 Internal Link

參數

NameTypeRequiredDescription
tenantIdstringYes
createTenantUserBodyCreateTenantUserBodyYes

回應

返回: CreateTenantUserResponse

範例

createTenantUser 範例
Copy Copy
1
2auto body = CreateTenantUserBody{};
3body.email = utility::conversions::to_string_t("newuser@example.com");
4body.firstName = utility::conversions::to_string_t("Alice");
5body.lastName = utility::conversions::to_string_t("Smith");
6body.role = boost::optional<utility::string_t>(utility::conversions::to_string_t("moderator"));
7
8api->createTenantUser(utility::conversions::to_string_t("my-tenant-123"), body)
9 .then([](pplx::task<std::shared_ptr<CreateTenantUserResponse>> task) {
10 try {
11 auto response = task.get();
12 } catch (const std::exception&) {
13 }
14 });
15

刪除租戶使用者 Internal Link

參數

名稱類型必填說明
tenantIdstring是
idstring是
optionsconst DeleteTenantUserOptions&是

回應

返回:APIEmptyResponse

範例

deleteTenantUser 範例
Copy Copy
1
2DeleteTenantUserOptions options;
3options.reason = boost::optional<utility::string_t>(U("User requested deletion"));
4
5api->deleteTenantUser(U("my-tenant-123"), U("user@example.com"), options)
6 .then([](std::shared_ptr<APIEmptyResponse> resp){
7 (void)resp;
8 });
9

取得租戶使用者 Internal Link

參數

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

回應

回傳: GetTenantUserResponse

範例

getTenantUser 範例
Copy Copy
1
2auto tenantId = utility::conversions::to_string_t("my-tenant-123");
3auto userId = utility::conversions::to_string_t("user@example.com");
4api->getTenantUser(tenantId, userId)
5 .then([](pplx::task<std::shared_ptr<GetTenantUserResponse>> task) {
6 try {
7 auto response = task.get();
8 // 根據需要使用回應
9 } catch (const std::exception&) {
10 // 錯誤處理
11 }
12 });
13

取得租戶使用者列表 Internal Link

參數

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

回應

返回: GetTenantUsersResponse

範例

getTenantUsers 範例
Copy Copy
1
2auto tenantId = utility::conversions::to_string_t("my-tenant-123");
3boost::optional<double> skip = 10;
4
5api->getTenantUsers(tenantId, skip).then([](pplx::task<std::shared_ptr<GetTenantUsersResponse>> t){
6 try {
7 auto resp = t.get();
8 } catch (const std::exception&) {
9 }
10});
11

取代租戶使用者 Internal Link

參數

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

回應

返回: APIEmptyResponse

示例

replaceTenantUser 示例
Copy Copy
1
2auto tenantId = utility::string_t(U("my-tenant-123"));
3auto userId = utility::string_t(U("john.doe@example.com"));
4ReplaceTenantUserBody replaceBody;
5replaceBody.email = utility::string_t(U("john.doe@example.com"));
6replaceBody.role = utility::string_t(U("admin"));
7boost::optional<utility::string_t> updateComments = utility::string_t(U("Promoted to admin"));
8api->replaceTenantUser(tenantId, userId, replaceBody, updateComments)
9 .then([](std::shared_ptr<APIEmptyResponse> resp){ });
10

參數

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

回應

回傳: APIEmptyResponse

範例

sendLoginLink 範例
Copy Copy
1
2api->sendLoginLink(
3 U("my-tenant-123"),
4 U("user@example.com"),
5 boost::make_optional(U("https://myapp.com/auth/callback"))
6).then([](std::shared_ptr<APIEmptyResponse> resp) {
7});
8

更新租戶使用者 Internal Link

參數

NameTypeRequiredDescription
tenantIdstringYes
idstringYes
updateTenantUserBodyUpdateTenantUserBodyYes
updateCommentsstringNo

回應

Returns: APIEmptyResponse

範例

updateTenantUser 範例
Copy Copy
1
2utility::string_t tenantId = U("my-tenant-123");
3utility::string_t userId = U("user-456");
4UpdateTenantUserBody body;
5body.email = U("john.doe@example.com");
6body.role = U("admin");
7boost::optional<utility::string_t> updateComments = U("Promoted to admin");
8
9api->updateTenantUser(tenantId, userId, body, updateComments)
10 .then([](std::shared_ptr<APIEmptyResponse>){ });
11

建立租戶 Internal Link

參數

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

回應

返回: CreateTenantResponse

範例

createTenant 範例
Copy Copy
1
2auto tenantId = utility::conversions::to_string_t("my-tenant-123");
3CreateTenantBody body;
4body.setName(utility::conversions::to_string_t("Acme Corp"));
5body.setAdminEmail(utility::conversions::to_string_t("admin@acme.com"));
6body.setPlan(utility::conversions::to_string_t("enterprise"));
7body.setDescription(boost::optional<utility::string_t>(utility::conversions::to_string_t("Primary tenant for Acme")));
8
9api->createTenant(tenantId, body).then([](pplx::task<std::shared_ptr<CreateTenantResponse>> t){
10 auto resp = t.get();
11});
12

刪除租戶 Internal Link

參數

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

回應

返回:APIEmptyResponse

範例

deleteTenant 範例
Copy Copy
1
2auto tenantId = utility::conversions::to_string_t("my-tenant-123");
3auto userId = utility::conversions::to_string_t("user@example.com");
4boost::optional<utility::string_t> sure = utility::conversions::to_string_t("true");
5api->deleteTenant(tenantId, userId, sure)
6 .then([](pplx::task<std::shared_ptr<APIEmptyResponse>> t){
7 try{
8 auto resp = t.get();
9 auto result = std::make_shared<APIEmptyResponse>(*resp);
10 }catch(const std::exception&){})
11

取得租戶 Internal Link

參數

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

回應

返回: GetTenantResponse

範例

getTenant 範例
Copy Copy
1
2auto tenantId = utility::conversions::to_string_t("my-tenant-123");
3auto id = utility::conversions::to_string_t("tenant-admin-456");
4boost::optional<utility::string_t> includeDetails = utility::conversions::to_string_t("full");
5api->getTenant(tenantId, id)
6 .then([](std::shared_ptr<GetTenantResponse> resp) {
7 if (resp) {
8 std::wcout << resp->toString() << std::endl;
9 }
10 });
11

取得租戶列表 Internal Link

參數

名稱類型必填描述
tenantIdstring是
optionsconst GetTenantsOptions&是

回應

返回:GetTenantsResponse

範例

getTenants 範例
Copy Copy
1
2GetTenantsOptions options;
3options.includeDeleted = boost::make_optional(false);
4options.searchTerm = boost::make_optional(utility::string_t(U("enterprise")));
5
6api->getTenants(utility::string_t(U("my-tenant-123")), options)
7 .then([](std::shared_ptr<GetTenantsResponse> response) {
8 })
9 .then([](pplx::task<void> t){ try{ t.get(); }catch(...){} });
10

更新租戶 Internal Link

參數

名稱類型必填描述
tenantIdstringYes
idstringYes
updateTenantBodyUpdateTenantBodyYes

回應

返回: APIEmptyResponse

範例

updateTenant 範例
Copy Copy
1
2auto tenantId = utility::string_t(U("my-tenant-123"));
3auto recordId = utility::string_t(U("tenant-456"));
4UpdateTenantBody body;
5body.name = boost::optional<utility::string_t>(U("Acme Corp"));
6body.contactEmail = boost::optional<utility::string_t>(U("admin@acme.com"));
7api->updateTenant(tenantId, recordId, body).then([](std::shared_ptr<APIEmptyResponse> resp) {
8 auto log = std::make_shared<utility::string_t>(U("Tenant update succeeded"));
9 (void)resp;
10 (void)log;
11});
12

變更工單狀態 Internal Link

參數

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

回應

返回: ChangeTicketStateResponse

範例

changeTicketState 範例
Copy Copy
1
2auto body = std::make_shared<ChangeTicketStateBody>();
3body->state = U("closed");
4body->comment = boost::optional<utility::string_t>(U("Ticket resolved"));
5api->changeTicketState(U("my-tenant-123"), U("user@example.com"), U("ticket-456"), *body)
6 .then([](std::shared_ptr<ChangeTicketStateResponse>) {});
7

建立工單 Internal Link

參數

名稱類型必填說明
tenantIdstringYes
userIdstringYes
createTicketBodyCreateTicketBodyYes

回應

返回: CreateTicketResponse

範例

createTicket 範例
Copy Copy
1
2auto tenantId = utility::conversions::to_string_t("my-tenant-123");
3auto userId = utility::conversions::to_string_t("john.doe@example.com");
4CreateTicketBody ticketBody;
5ticketBody.setSubject(utility::conversions::to_string_t("Login Issue"));
6ticketBody.setDescription(utility::conversions::to_string_t("Cannot log in after password reset."));
7boost::optional<int> priority = 2;
8ticketBody.setPriority(priority);
9api->createTicket(tenantId, userId, ticketBody).then([](pplx::task<std::shared_ptr<CreateTicketResponse>> task){
10 try{
11 auto response = task.get();
12 // 根據需要使用回應
13 }catch(const std::exception&){
14 // 處理錯誤
15 }
16});
17

取得工單 Internal Link

參數

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

回應

返回:GetTicketResponse

範例

getTicket 範例
Copy Copy
1
2utility::string_t tenantId = U("my-tenant-123");
3utility::string_t ticketId = U("ticket-789");
4boost::optional<utility::string_t> userId = U("alice@example.com");
5api->getTicket(tenantId, ticketId, userId).then([](pplx::task<std::shared_ptr<GetTicketResponse>> task){
6 try{
7 auto resp = task.get();
8 }catch(const std::exception&){
9 }
10});
11

取得工單列表 Internal Link

參數

名稱型別必填說明
tenantIdstring是
optionsconst GetTicketsOptions&是

回應

返回:GetTicketsResponse

範例

getTickets 範例
Copy Copy
1
2auto options = GetTicketsOptions{};
3options.page = boost::optional<int>(1);
4options.status = boost::optional<utility::string_t>(U("open"));
5api->getTickets(U("my-tenant-123"), options).then([](pplx::task<std::shared_ptr<GetTicketsResponse>> task) {
6 try {
7 auto response = task.get();
8 auto responseCopy = std::make_shared<GetTicketsResponse>(*response);
9 } catch (const std::exception&) {
10 }
11});
12

取得翻譯 Internal Link

參數

名稱類型必填描述
r_namespacestring是
componentstring是
optionsconst GetTranslationsOptions&是

回應

返回: GetTranslationsResponse

範例

getTranslations 範例
Copy Copy
1
2utility::string_t ns = U("my-tenant-123");
3utility::string_t comp = U("comments");
4auto optsPtr = std::make_shared<GetTranslationsOptions>();
5optsPtr->language = boost::make_optional(U("en"));
6optsPtr->fallback = boost::none;
7api->getTranslations(ns, comp, *optsPtr)
8 .then([](pplx::task<std::shared_ptr<GetTranslationsResponse>> t) {
9 try {
10 auto resp = t.get();
11 } catch (const std::exception& e) {
12 }
13 });
14

上傳圖片 Internal Link

上傳與調整圖像大小

參數

名稱類型必填說明
tenantIdstringYes
fileHttpContentYes
optionsconst UploadImageOptions&Yes

回應

返回:UploadImageResponse

範例

uploadImage 範例
Copy Copy
1
2auto fileStream = concurrency::streams::fstream::open_istream(U("avatar.png"), std::ios::in).get();
3HttpContent file(fileStream, U("image/png"));
4UploadImageOptions options;
5options.description = boost::optional<utility::string_t>(U("Profile picture"));
6options.width = boost::optional<int>(256);
7options.height = boost::optional<int>(256);
8api->uploadImage(U("my-tenant-123"), file, options).then([](pplx::task<std::shared_ptr<UploadImageResponse>> t){
9 auto resp = t.get();
10});
11

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

參數

名稱類型必填說明
tenantIdstringYes
idstringYes

回應

返回: APIGetUserBadgeProgressResponse

範例

getUserBadgeProgressById 範例
Copy Copy
1
2auto tenantId = U("my-tenant-123");
3auto userId = U("user-456");
4api->getUserBadgeProgressById(tenantId, userId)
5 .then([=](pplx::task<std::shared_ptr<APIGetUserBadgeProgressResponse>> t){
6 try{
7 auto resp = t.get();
8 boost::optional<std::shared_ptr<APIGetUserBadgeProgressResponse>> optResp = resp;
9 if(optResp){}
10 }catch(const std::exception&){}
11 });
12

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

參數

名稱類型必填說明
tenantIdstringYes
userIdstringYes

回應

返回: APIGetUserBadgeProgressResponse

範例

getUserBadgeProgressByUserId 範例
Copy Copy
1
2boost::optional<std::shared_ptr<APIGetUserBadgeProgressResponse>> responseOpt;
3api->getUserBadgeProgressByUserId(
4 utility::conversions::to_string_t("my-tenant-123"),
5 utility::conversions::to_string_t("user@example.com"))
6 .then([&responseOpt](pplx::task<std::shared_ptr<APIGetUserBadgeProgressResponse>> t) {
7 try {
8 responseOpt = t.get();
9 } catch (...) {
10 responseOpt = boost::none;
11 }
12 });
13

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

參數

名稱類型必填描述
tenantIdstring是
optionsconst GetUserBadgeProgressListOptions&是

回應

返回:APIGetUserBadgeProgressListResponse

範例

getUserBadgeProgressList 範例
Copy Copy
1
2utility::string_t tenantId = U("my-tenant-123");
3GetUserBadgeProgressListOptions options;
4options.userId = U("user@example.com");
5options.page = boost::optional<int>(1);
6options.pageSize = boost::optional<int>(20);
7api->getUserBadgeProgressList(tenantId, options)
8 .then([](std::shared_ptr<APIGetUserBadgeProgressListResponse> resp) {
9 if (!resp) return;
10 for (const auto& badge : resp->badges) {
11 // 處理徽章
12 }
13 });
14

建立使用者徽章 Internal Link

參數

NameTypeRequiredDescription
tenantIdstringYes
createUserBadgeParamsCreateUserBadgeParamsYes

回應

返回: APICreateUserBadgeResponse

範例

createUserBadge 範例
Copy Copy
1
2auto tenantId = U("my-tenant-123");
3CreateUserBadgeParams badgeParams;
4badgeParams.userEmail = U("user@example.com");
5badgeParams.badgeCode = U("gold");
6badgeParams.expirationDate = boost::optional<utility::datetime>(utility::datetime::utc_now() + utility::datetime::from_seconds(2592000));
7api->createUserBadge(tenantId, badgeParams).then([](std::shared_ptr<APICreateUserBadgeResponse> resp){
8 if (resp && resp->success) {
9 auto result = std::make_shared<APICreateUserBadgeResponse>(*resp);
10 }
11});
12

刪除使用者徽章 Internal Link

參數

名稱類型必填說明
tenantIdstringYes
idstringYes

回應

返回:APIEmptySuccessResponse

範例

deleteUserBadge 範例
Copy Copy
1
2auto tenantId = boost::optional<utility::string_t>(U("my-tenant-123"));
3auto badgeId = utility::string_t(U("badge-789"));
4api->deleteUserBadge(tenantId.value(), badgeId)
5 .then([](std::shared_ptr<APIEmptySuccessResponse> resp){
6 auto copy = std::make_shared<APIEmptySuccessResponse>(*resp);
7 })
8 .then([](pplx::task<void> t){
9 try{ t.get(); } catch(const std::exception&){ }
10 });
11

取得使用者徽章 Internal Link

參數

名稱類型必填說明
tenantIdstringYes
idstringYes

回應

返回: APIGetUserBadgeResponse

範例

getUserBadge 範例
Copy Copy
1
2utility::string_t tenantId = U("my-tenant-123");
3utility::string_t userId = U("user-456");
4api->getUserBadge(tenantId, userId).then([](pplx::task<std::shared_ptr<APIGetUserBadgeResponse>> t){
5 try{
6 auto resp = t.get();
7 boost::optional<std::string> badgeUrl = resp->badge_url ? boost::optional<std::string>(*resp->badge_url) : boost::none;
8 }catch(const std::exception&){
9 }
10});
11

取得使用者徽章列表 Internal Link

參數

名稱類型必要說明
tenantIdstring是
optionsconst GetUserBadgesOptions&是

回應

返回: APIGetUserBadgesResponse

範例

getUserBadges 範例
Copy Copy
1
2GetUserBadgesOptions opts;
3opts.userId = boost::make_optional(U("user@example.com"));
4opts.includeExpired = boost::make_optional(false);
5
6api->getUserBadges(U("my-tenant-123"), opts)
7 .then([](pplx::task<std::shared_ptr<APIGetUserBadgesResponse>> t) {
8 try {
9 auto response = t.get();
10 } catch (const std::exception&) {
11 }
12 });
13

更新使用者徽章 Internal Link

參數

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

回應

回傳: APIEmptySuccessResponse

範例

updateUserBadge 範例
Copy Copy
1
2auto tenantId = utility::conversions::to_string_t("my-tenant-123");
3auto userId = utility::conversions::to_string_t("user@example.com");
4UpdateUserBadgeParams params;
5params.badgeId = utility::conversions::to_string_t("vip-badge");
6params.expiration = boost::optional<utility::datetime>(utility::datetime::from_string(U("2024-12-31T23:59:59Z")));
7api->updateUserBadge(tenantId, userId, params)
8 .then([](std::shared_ptr<APIEmptySuccessResponse> resp){
9 std::cout << "Badge updated successfully\n";
10 })
11 .catch([](std::exception const& e){
12 std::cerr << "Error updating badge: " << e.what() << "\n";
13 });
14

取得使用者通知計數 Internal Link

參數

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

回應

回傳: GetUserNotificationCountResponse

範例

getUserNotificationCount 範例
Copy Copy
1
2auto tenantId = utility::conversions::to_string_t("my-tenant-123");
3boost::optional<utility::string_t> sso = utility::conversions::to_string_t("user@example.com");
4api->getUserNotificationCount(tenantId, sso).then([](pplx::task<std::shared_ptr<GetUserNotificationCountResponse>> t){
5 try{
6 auto resp = t.get();
7 // 使用 resp 如有需要
8 }catch(const std::exception&){
9 // 處理錯誤
10 }
11});
12

取得使用者通知 Internal Link

參數

名稱類型必填描述
tenantIdstring是
optionsconst GetUserNotificationsOptions&是

回應

Returns: GetMyNotificationsResponse

範例

取得使用者通知範例
Copy Copy
1
2utility::string_t tenantId = utility::string_t("my-tenant-123");
3GetUserNotificationsOptions options;
4options.limit = boost::optional<int>(20);
5options.unreadOnly = boost::optional<bool>(true);
6api->getUserNotifications(tenantId, options)
7 .then([](pplx::task<std::shared_ptr<GetMyNotificationsResponse>> task){
8 auto resp = task.get();
9 auto notifications = std::make_shared<GetMyNotificationsResponse>(*resp);
10 });
11

重設使用者通知計數 Internal Link

參數

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

回應

返回: ResetUserNotificationsResponse

範例

resetUserNotificationCount 範例
Copy Copy
1
2auto resetTask = api->resetUserNotificationCount(
3 U("my-tenant-123"),
4 boost::optional<utility::string_t>(U("user@example.com"))
5).then([](std::shared_ptr<ResetUserNotificationsResponse> resp){
6});
7

重設使用者通知 Internal Link

參數

名稱類型必填描述
tenantIdstringYes
optionsconst ResetUserNotificationsOptions&Yes

回應

返回: ResetUserNotificationsResponse

範例

resetUserNotifications 範例
Copy Copy
1
2auto tenantId = utility::string_t(U("my-tenant-123"));
3ResetUserNotificationsOptions options;
4options.email = boost::optional<utility::string_t>(U("user@example.com"));
5api->resetUserNotifications(tenantId, options)
6 .then([](std::shared_ptr<ResetUserNotificationsResponse> resp) {
7 // 處理回應
8 });
9

更新使用者評論訂閱狀態 Internal Link

為特定評論啟用或停用通知。

參數

NameTypeRequiredDescription
tenantIdstringYes
notificationIdstringYes
optedInOrOutstringYes
commentIdstringYes
ssostringNo

回應

返回:UpdateUserNotificationCommentSubscriptionStatusResponse

範例

updateUserNotificationCommentSubscriptionStatus 範例
Copy Copy
1
2auto updateTask = api->updateUserNotificationCommentSubscriptionStatus(
3 utility::conversions::to_string_t("my-tenant-123"),
4 utility::conversions::to_string_t("notif-456"),
5 utility::conversions::to_string_t("optedIn"),
6 utility::conversions::to_string_t("comment-789"),
7 boost::optional<utility::string_t>(utility::conversions::to_string_t("sso-token-abc"))
8).then([](std::shared_ptr<UpdateUserNotificationCommentSubscriptionStatusResponse> resp){
9 (void)resp;
10});
11

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

啟用或停用頁面的通知。當使用者訂閱某個頁面時,系統會為新的根留言建立通知,並且

參數

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

回應

回傳:UpdateUserNotificationPageSubscriptionStatusResponse

範例

updateUserNotificationPageSubscriptionStatus 範例
Copy Copy
1
2utility::string_t tenantId = U("my-tenant-123");
3utility::string_t urlId = U("page-456");
4utility::string_t url = U("https://example.com/articles/awesome-article");
5utility::string_t pageTitle = U("Awesome Article");
6utility::string_t subscription = U("subscribed");
7boost::optional<utility::string_t> sso = boost::make_optional<utility::string_t>(U("sso-token-789"));
8
9api->updateUserNotificationPageSubscriptionStatus(tenantId, urlId, url, pageTitle, subscription, sso)
10 .then([](std::shared_ptr<UpdateUserNotificationPageSubscriptionStatusResponse> resp) {
11 // process resp if needed
12 });
13

更新使用者通知狀態 Internal Link

參數

名稱類型必填說明
tenantIdstringYes
notificationIdstringYes
newStatusstringYes
ssostringNo

回應

返回:UpdateUserNotificationStatusResponse

範例

updateUserNotificationStatus 範例
Copy Copy
1
2api->updateUserNotificationStatus(
3 U("my-tenant-123"),
4 U("notif-456"),
5 U("read"),
6 boost::optional<utility::string_t>(U("sso-token-abc"))
7).then([](std::shared_ptr<UpdateUserNotificationStatusResponse> resp) {
8}).wait();
9

取得使用者在線狀態 Internal Link

參數

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

回應

返回:GetUserPresenceStatusesResponse

範例

getUserPresenceStatuses 範例
Copy Copy
1
2auto tenantId = U("my-tenant-123");
3auto urlIdWS = U("article-789");
4auto userIds = U("alice@example.com,bob@example.com");
5boost::optional<utility::string_t> optionalFilter = boost::none;
6api->getUserPresenceStatuses(tenantId, urlIdWS, userIds)
7 .then([](pplx::task<std::shared_ptr<GetUserPresenceStatusesResponse>> t){
8 try{
9 auto response = t.get();
10 }catch(...){
11 }
12 });
13

搜尋使用者 Internal Link

Parameters

名稱類型必填描述
tenantIdstringYes
urlIdstringYes
optionsconst SearchUsersOptions&Yes

Response

Returns: SearchUsersResult

Example

searchUsers 範例
Copy Copy
1
2utility::string_t tenantId = U("my-tenant-123");
3utility::string_t urlId = U("article-456");
4SearchUsersOptions options;
5options.query = U("john.doe@example.com");
6options.page = boost::optional<int>(1);
7options.pageSize = boost::optional<int>(20);
8api->searchUsers(tenantId, urlId, options).then([](pplx::task<std::shared_ptr<SearchUsersResult>> task){
9 try{
10 auto result = task.get();
11 }catch(const std::exception&){}
12});
13

取得使用者 Internal Link

參數

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

回應

回傳:GetUserResponse

範例

getUser 示例
Copy Copy
1
2auto tenantId = utility::conversions::to_string_t("my-tenant-123");
3auto userId = utility::conversions::to_string_t("user-789");
4boost::optional<utility::string_t> optTag = boost::none;
5
6api->getUser(tenantId, userId)
7 .then([=](pplx::task<std::shared_ptr<GetUserResponse>> task) {
8 try {
9 auto response = task.get();
10 if (!response) {
11 response = std::make_shared<GetUserResponse>();
12 }
13 // 根據需要處理回應
14 } catch (const std::exception&) {
15 // 處理錯誤
16 }
17 });
18

建立投票 Internal Link

參數

名稱類型必填描述
tenantIdstring是
commentIdstring是
directionstring是
optionsconst CreateVoteOptions&是

回應

返回:VoteResponse

範例

createVote 範例
Copy Copy
1
2auto tenantId = utility::conversions::to_string_t("my-tenant-123");
3auto commentId = utility::conversions::to_string_t("cmt-456");
4auto direction = utility::conversions::to_string_t("up");
5auto optionsPtr = std::make_shared<CreateVoteOptions>();
6optionsPtr->userId = utility::conversions::to_string_t("user-789");
7optionsPtr->ipAddress = boost::optional<utility::string_t>(utility::conversions::to_string_t("192.168.1.100"));
8api->createVote(tenantId, commentId, direction, *optionsPtr)
9 .then([](std::shared_ptr<VoteResponse> resp){});
10

刪除投票 Internal Link

參數

名稱類型必需說明
tenantIdstring是
idstring是
editKeystring否

回應

返回:VoteDeleteResponse

範例

deleteVote 範例
Copy Copy
1
2auto tenantId = utility::conversions::to_string_t("my-tenant-123");
3auto voteId = utility::conversions::to_string_t("vote-9876");
4boost::optional<utility::string_t> editKey = utility::conversions::to_string_t("edit-abc123");
5
6api->deleteVote(tenantId, voteId, editKey).then([](pplx::task<std::shared_ptr<VoteDeleteResponse>> task) {
7 try {
8 auto response = task.get();
9 // 按需求處理回應
10 } catch (const std::exception&) {
11 // 處理錯誤
12 }
13});
14

取得投票 Internal Link

參數

名稱類型必填說明
tenantIdstringYes
urlIdstringYes

回應

返回:GetVotesResponse

範例

getVotes 範例
Copy Copy
1
2auto tenantId = utility::string_t(U("my-tenant-123"));
3auto urlId = utility::string_t(U("article-456"));
4boost::optional<utility::string_t> extraHeader = boost::none;
5
6api->getVotes(tenantId, urlId).then([=](pplx::task<std::shared_ptr<GetVotesResponse>> task) {
7 try {
8 auto original = task.get();
9 auto response = std::make_shared<GetVotesResponse>(*original);
10 } catch (...) {
11 // 錯誤處理
12 }
13});
14

取得使用者投票 Internal Link

參數

NameTypeRequiredDescription
tenantIdstringYes
urlIdstringYes
optionsconst GetVotesForUserOptions&Yes

回應

返回: GetVotesForUserResponse

範例

getVotesForUser 範例
Copy Copy
1
2auto tenantId = utility::string_t(U("my-tenant-123"));
3auto urlId = utility::string_t(U("post-456"));
4GetVotesForUserOptions options;
5options.page = boost::optional<int>(2);
6options.pageSize = boost::optional<int>(50);
7api->getVotesForUser(tenantId, urlId, options).then([](std::shared_ptr<GetVotesForUserResponse> response) {
8 if (response) {
9 // 處理回應,例如遍歷投票
10 }
11});
12

需要幫助?

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

貢獻

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