システム受信箱通知を管理する
注釈:本資料はAI技術を用いて翻訳されています。
概要
AccelByte Gaming Services (AGS) チャットには、プレイヤーの受信箱に永続的なシステム通知を送信できるシステム受信箱通知機能が含まれています。送信できるシステム受信箱通知の例には、ゲーム内ニュース、ゲーム内メール、引き換えコード、ペナルティ通知、プレイヤーレポート通知、メンテナンススケジュール、現在のイベントなどがあります。必要に応じて、プレイヤーの受信箱から通知を削除または送信取り消しすることもできます。
この記事では、システム受信箱通知を管理および統合する方法について説明します。
前提条件
管理者は、システム受信箱通知を管理するために以下の権限を持っている必要があります:
| 権限 | アクション | 使用方法 |
|---|---|---|
ADMIN:NAMESPACE:{namespace}:CHAT:INBOX | CREATE, READ, UPDATE, DELETE | 通知を作成、クエリ、編集、削除するため。 |
ADMIN:NAMESPACE:{namespace}:CHAT:INBOX | CREATE, READ, UPDATE, DELETE | システムメッセージを作成するため。 |
システムメッセージページにアクセスする
以下のセクションで説明する管理および構成オプションにアクセスするには、AGS 管理ポータルにログインし、ゲームネームスペースダッシュボードに移動します。次に、ソーシャル > チャット > システムメッセージ に移動します。
システム受信箱通知を管理する
以下のセクションでは、システム受信箱通知の管理について詳しく説明します。
通知を作成、保存、送信する
新しいシステム受信箱通知を作成して送信するには、以下の手順に従います:
-
システムメッセージ ページで、+ 新規作成 をクリックします。
-
新しいメッセージを作成 ページにメッセージの内容、受信者、通知の詳細を入力します。
-
後でメッセージを送信する場合は 下書きとして保存 をクリックするか、すぐにメッセージを送信する場合は 送信 をクリックします。
通知の送信を取り消す
-
システムメッセージ ページで、システムメッセージリスト セクションの下にリストされている送信を取り消したい送信済み通知を見つけます。
-
送信済み通知の横にある アクション 列の下にある省略記号メニューをクリックします。次に、送信取り消し をクリックします。
-
確認ボックスで、
UNSENDと入力し、送信取り消し をクリックして確認します。
下書き通知を表示、編集、送信する
-
システムメッセージ ページで、システムメッセージリスト セクションの下にリストされている表示、編集、または送信したい下書き通知を見つけます。
-
下書き通知の横にある アクション 列の下にある 表示 オプションをクリックします。
-
情報を確認し、必要な変更を行います。
-
送信せずにメッセージを更新する場合は 下書きとして保存 をクリックするか、すぐにメッセージを送信する場合は 送信 をクリックします。
システム受信箱通知をゲームクライアントに統合する
以下の例は、システム受信箱通知をゲームクライアントに統合する方法を示しています:
- Unreal Engine
- Unity
// API クライアントを作成し、ログインして、AGS チャットに接続します
FApiClientPtr ApiClient = AccelByteOnlineSubsystemPtr->GetApiClient(TEXT("0"));
ApiClient->User.LoginWithUsername(TEXT("user+a@example.com"), TEXT("Password321"),
FVoidHandler::CreateLambda([]()
{
UE_LOG(LogTemp, Log, TEXT("ユーザー A のログインに成功しました"));
}),
FErrorHandler::CreateLambda([](int Code, FString const& Message)
{
UE_LOG(LogTemp, Log, TEXT("ユーザー A のログインに失敗しました"));
}));
ApiClient->Chat.Connect();
// 受信システムメッセージ通知のデリゲートを設定します
ApiClient->Chat.SetSystemMessageNotifDelegate(
Api::Chat::FSystemMessageNotif::CreateLambda([](const FAccelByteModelsChatSystemMessageNotif&
Notif)
{
UE_LOG(LogTemp, Log, TEXT("システムメッセージを取得しました: %s %s %s"), *Notif.MessageId, *Notif.Message,
*Notif.Category);
}));
// システムメッセージをクエリします
{
FAccelByteModelsQuerySystemMessagesResponse Result;
Chat::FQuerySystemMessageResponse OnSuccess = Chat::FQuerySystemMessageResponse::CreateLambda(
[&Result](const FAccelByteModelsQuerySystemMessagesResponse& Response)
{
Result = Response;
});
FErrorHandler OnError = FErrorHandler::CreateLambda([](int32 Code, const FString& Message)
{
UE_LOG(LogTemp, Error, TEXT("チャットシステムメッセージのクエリに失敗しました %d, %s"), Code, *Message);
});
ApiClient->Chat.QuerySystemMessage(OnSuccess, OnError);
}
// システムメッセージを更新します(既読/未読をマークするか、メッセージを保持します)
{
FAccelByteModelsActionUpdateSystemMessage Action;
Action.ID = TEXT("message-id");
Action.Read = EAccelByteOptionalBool::NO; // メッセージを未読としてマークします
Action.Keep = EAccelByteOptionalBool::YES; // メッセージを受信箱に保持するようマークします
Chat::FUpdateSystemMessagesResponse OnSuccess =
Chat::FUpdateSystemMessagesResponse::CreateLambda(
[](const FAccelByteModelsUpdateSystemMessagesResponse& Response)
{
UE_LOG(LogTemp, Log, TEXT("システムメッセージの更新に成功しました"));
});
FErrorHandler OnError = FErrorHandler::CreateLambda([](int32 Code, const FString& Message)
{
UE_LOG(LogTemp, Error, TEXT("チャットシステムメッセージの更新に失敗しました %d, %s"), Code, *Message);
});
ApiClient->Chat.UpdateSystemMessages({Action}, OnSuccess, OnError);
}
// システムメッセージを削除します
{
Chat::FDeleteSystemMessagesResponse OnSuccess =
Chat::FDeleteSystemMessagesResponse::CreateLambda(
[](const FAccelByteModelsDeleteSystemMessagesResponse& Response)
{
UE_LOG(LogTemp, Log, TEXT("システムメッセージの削除に成功しました"));
});
FErrorHandler OnError = FErrorHandler::CreateLambda([](int32 Code, const FString& Message)
{
UE_LOG(LogTemp, Error, TEXT("チャットシステムメッセージの削除に失敗しました %d, %s"), Code, *Message);
});
ApiClient->Chat.DeleteSystemMessages({TEXT("message-id")}, OnSuccess, OnError);
}
// システムメッセージの統計を取得します
{
FAccelByteGetSystemMessageStatsResponse Result;
Chat::FGetSystemMessageStatsResponse OnSuccess =
Chat::FGetSystemMessageStatsResponse::CreateLambda(
[&Result](const FAccelByteGetSystemMessageStatsResponse& Response)
{
Result = Response;
});
FErrorHandler OnError = FErrorHandler::CreateLambda([](int32 Code, const FString& Message)
{
UE_LOG(LogAccelByteChatTest, Error, TEXT("システムメッセージ統計の取得に失敗しました %d,
%s"), Code, *Message);
});
ApiClient->Chat.GetSystemMessageStats(OnSuccess, OnError);
}
// API クライアントを作成し、ログインして、チャットに接続します
var apiClient = AccelByteSDK.GetClientRegistry().GetApi();
Result<TokenData, OAuthError> loginResult;
apiClient.GetUser().LoginWithEmailV4(userEmailAddress, userPassword, (Result<TokenData, OAuthError> result) =>
{
loginResult = result;
if (result.IsError)
{
// ログインエラーを処理します
return;
}
apiClient.GetChat().Connect();
});
// 受信システムメッセージ通知のデリゲートを設定します
apiClient.GetChat().NewSystemMessage += notif =>
{
Debug.Log($"新しいシステムメッセージを取得しました: {notif.MessageId} {notif.Message} {notif.Category}");
};
// システムメッセージをクエリします
var request = new QuerySystemMessageRequest
{
UnreadOnly = true,
Offset = 0,
Limit = 5
};
QuerySystemMessagesResponse querySystemMessagesResponse = null;
apiClient.GetChat().QuerySystemMessage(result =>
{
if (result.IsError)
{
Debug.LogWarning($"QuerySystemMessage に失敗しました [{result.Error.Code}]:{result.Error.Message}");
return;
}
querySystemMessagesResponse = result.Value;
}, request);
// システムメッセージを更新します(既読/未読をマークするか、メッセージを保持します)
UpdateSystemMessagesResponse updateSystemMessagesResponse = null;
var action = new ActionUpdateSystemMessage
{
Id = "messageId",
Read = OptionalBoolean.No,
Keep = OptionalBoolean.Yes
};
apiClient.GetChat().UpdateSystemMessages(new HashSet<ActionUpdateSystemMessage> { action }, result =>
{
if (result.IsError)
{
Debug.LogWarning($"UpdateSystemMessages に失敗しました [{result.Error.Code}]:{result.Error.Message}");
return;
}
updateSystemMessagesResponse = result.Value;
});
// システムメッセージを削除します
DeleteSystemMessagesResponse response = null;
var messageIds = new HashSet<string>
{
"messageId1",
"messageId2"
};
apiClient.GetChat().DeleteSystemMessages(messageIds, result =>
{
if (result.IsError)
{
Debug.LogWarning($"DeleteSystemMessages に失敗しました [{result.Error.Code}]:{result.Error.Message}");
return;
}
response = result.Value;
});
// システムメッセージの統計を取得します
GetSystemMessageStatsResponse systemMessageStats = null;
apiClient.GetChat().GetSystemMessagesStats(delegate (Result<GetSystemMessageStatsResponse> result)
{
if (result.IsError)
{
Debug.LogWarning($"GetSystemMessage に失敗しました [{result.Error.Code}]:{result.Error.Message}");
return;
}
systemMessageStats = result.Value;
Debug.Log($"統計: {systemMessageStats.Unread} {systemMessageStats.OldestUnread}");
});