システム受信箱通知を管理する
注釈:本資料はAI技術を用いて翻訳されています。
概要
AccelByte Gaming Services (AGS) チャットには、プレイヤーの受信箱に永続的なシステム通知を送信できるシステム受信箱通知機能があります。送信できるシステム受信箱通知の例としては、ゲーム内ニュース、ゲーム内メール、引き換えコード、ペナルティ通知、プレイヤーレポート通知、メンテナンススケジュール、開催中のイベントなどが挙げられます。必要に応じて、プレイヤーの受信箱から通知を削除したり、送信を取り消したりすることもできます。
この記事では、AGS 管理ポータルまたは AGS CLI でシステム受信箱通知を管理する方法と、ゲームクライアントに統合する方法について説明します。
前提条件
管理者がシステム受信箱通知を管理するには、以下の権限が必要です:
| 権限 | アクション | 使用方法 |
|---|---|---|
ADMIN:NAMESPACE:{namespace}:CHAT:INBOX | CREATE, READ, UPDATE, DELETE | 通知を作成、クエリ、編集、削除するため。 |
ADMIN:NAMESPACE:{namespace}:CHAT:INBOX | CREATE, READ, UPDATE, DELETE | システムメッセージを作成するため。 |
AGS CLI の手順を実行するには、AGS CLI をインストールし、上記の権限を持つアカウントでサインインしてください。詳しくは、インストールとサインイン を参照してください。例では Bash シェルを使用しています。
システムメッセージページにアクセスする
以下のセクションで説明する管理オプションおよび構成オプションにアクセスするには、AGS 管理ポータルにログインし、ゲームネームスペースのダッシュボードに移動します。次に、マルチプレイヤー > チャット > システムメッセージ に移動します。
システム受信箱通知を管理する
以下のセクションでは、システム受信箱通知の管理について詳しく説明します。
通知を作成、保存、送信する
新しいシステム受信箱通知を作成して送信するには、以下の手順に従います:
- Admin Portal
- AGS CLI
-
システムメッセージ ページで、+ 新規作成 をクリックします。
-
新しいメッセージを作成 ページにメッセージの内容、受信者、通知の詳細を入力します。
-
後でメッセージを送信する場合は 下書きとして保存 をクリックするか、すぐにメッセージを送信する場合は 送信 をクリックします。
-
通知を記述した JSON ファイルを作成します。ファイル名は任意です。この例では
message.jsonを使用します:{
"message": {"title": "<Title>", "body": "<Body>", "gift": {}},
"scope": "USER",
"userIds": ["<UserId>"],
"expiredAt": <ExpiredAt>,
"status": "DRAFT"
}message: 通知の内容です。titleとbodyは管理ポータルの コンテンツ フィールドに対応し、giftには ゲーム内ギフトペイロード を指定します。ギフトがない場合は{}を使用します。scopeとuserIds: 特定のプレイヤーに通知を送信するには、scopeをUSERに設定し、userIdsにそのプレイヤーのユーザー ID を列挙します。すべてのプレイヤーに送信するには、scopeをNAMESPACEに、userIdsを[]に設定します。管理ポータルではユーザー名やメールアドレスも指定できますが、AGS CLI ではユーザー ID のみ指定できます。expiredAt: 通知の有効期限です。秒単位の Unix タイムスタンプで指定します。管理ポータルでは代わりに日数を指定し、空欄のままにすると 30 日が使用されます。未来の時刻を指定する必要があります。Linux では、date -d '+1 day' +%sを実行すると 1 日後のタイムスタンプが出力されます。status: 通知を下書きとして保存する場合はDRAFT、すぐに送信する場合はSENTを指定します。
-
通知を作成します。
@の後に JSON ファイルのパスを指定します:ags chat inbox create-message --namespace <YourNamespace> --json @message.jsonコマンドを実行すると、
idを含む新しい通知が出力されます。
通知の送信を取り消す
- Admin Portal
- AGS CLI
-
システムメッセージ ページで、システムメッセージリスト セクションに一覧表示されている送信済み通知の中から、送信を取り消したい通知を見つけます。
-
送信済み通知の横にある アクション 列の省略記号メニューをクリックします。次に、送信取り消し をクリックします。
-
確認ボックスで、
UNSENDと入力し、送信取り消し をクリックして確認します。
-
送信済み通知の ID を確認します:
ags chat inbox list-messages --namespace <YourNamespace> --transient false --status SENT -
通知の送信を取り消します。
<MessageId>を通知のidに置き換えます:ags chat inbox unsend-message --namespace <YourNamespace> --inbox <MessageId> --json '{"userIds": []}'userIdsリストを空にすると、すべての受信者の受信箱から通知が削除され、送信取り消し済みとしてマークされます。特定のプレイヤーからのみ削除するには、代わりにそのプレイヤーのユーザー ID を列挙します。
下書き通知を表示、編集、送信する
- Admin Portal
- AGS CLI
-
システムメッセージ ページで、システムメッセージリスト セクションに一覧表示されている下書き通知の中から、表示、編集、または送信したい通知を見つけます。
-
下書き通知の横にある アクション 列の 表示 オプションをクリックします。
-
情報を確認し、必要に応じて変更を加えます。
-
送信せずにメッセージを更新する場合は 下書きとして保存 をクリックするか、すぐにメッセージを送信する場合は 送信 をクリックします。
-
下書き通知を見つけて、その設定を確認します:
ags chat inbox list-messages --namespace <YourNamespace> --transient false --status DRAFT --format json -
下書きを編集するには、通知の新しい設定を記述した JSON ファイルを作成します。この例では
message.jsonを使用します:{
"message": {"title": "<Title>", "body": "<Body>", "gift": {}},
"scope": "USER",
"userIds": ["<UserId>"],
"expiredAt": <ExpiredAt>
}各フィールドは 通知を作成、保存、送信する と同じように機能します。
警告更新するたびに、内容、受信者、有効期限が上書きされます。変更しないフィールドも含め、4 つのフィールドすべてを指定してください。
-
変更を保存します。
<MessageId>を手順 1 で確認した下書きのidに置き換えます。@の後に JSON ファイルのパスを指定します:ags chat inbox update-message --namespace <YourNamespace> --message-id <MessageId> --json @message.json -
下書きを送信するには、次のコマンドを実行します:
ags chat inbox send-message --namespace <YourNamespace> --message-id <MessageId>
システム受信箱通知をゲームクライアントに統合する
以下の例は、システム受信箱通知をゲームクライアントに統合する方法を示しています:
- 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}");
});