FastComments.com

FastComments C++ 開發套件 (SDK)

這是 FastComments 的官方 C++ SDK。

FastComments API 的官方 C++ SDK

Repository

在 GitHub 上查看


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

備註 Internal Link

廣播 ID

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

SSO(單一登入)

關於 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

Parameters

NameTypeRequiredDescription
tenantIdstringYes
skipdoubleNo

Response

Returns: GetEmailTemplatesResponse

Example

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

搜尋動圖 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

取得熱門動圖 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 IDs 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

Past commenters on the page who are NOT currently online. Sorted by displayName.
Use this after exhausting /users/online to render a "Members" section.
Cursor pagination on commenterName: server walks the partial {tenantId, urlId, commenterName}
index from afterName forward via $gt, no $skip cost.

Parameters

名稱型別必填說明
tenantIdstringYes
urlIdstringYes
optionsconst GetOfflineUsersOptions&Yes

Response

Returns: PageUsersOfflineResponse

Example

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

List pages for a tenant. Used by the FChat desktop client to populate its room list.
Requires enableFChat to be true on the resolved custom config for each page.
Pages that require SSO are filtered against the requesting user's group access.

Parameters

NameTypeRequiredDescription
tenantIdstringYes
optionsconst GetPagesPublicOptions&Yes

Response

Returns: GetPublicPagesResponse

Example

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

Bulk user info for a tenant. Given userIds, return display info from User / SSOUser.
Used by the comment widget to enrich users that just appeared via a presence event.
No page context: privacy is enforced uniformly (private profiles are masked).

Parameters

名稱類型必要說明
tenantIdstringYes
idsstringYes

Response

Returns: 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 // process response
10 }catch(const std::exception&){
11 // handle error
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

新增 SSO 使用者 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

刪除 SSO 使用者 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

以電子郵件取得 SSO 使用者 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 取得 SSO 使用者 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

取得 SSO 使用者列表 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

部分更新 SSO 使用者 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

替換或建立 SSO 使用者 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

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

Parameters

名稱類型必要說明
tenantIdstringYes
urlIdstringYes
urlstringYes
pageTitlestringYes
subscribedOrUnsubscribedstringYes
ssostringNo

Response

返回: UpdateUserNotificationPageSubscriptionStatusResponse

Example

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 // 如有需要,處理 resp
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 儲存庫 以取得貢獻指南。