チャットフィルターのカスタマイゼーションを開始する
注釈:本資料はAI技術を用いて翻訳されています。
概要
AccelByte Gaming Services(AGS)のチャットフィルターは、ニーズに合わせてカスタマイズできます。このガイドでは、AGS用のシンプルなカスタムチャットフィルターを紹介します。
前提条件
- Go
- Python
-
以下のツールがインストールされたWindows 11 WSL2またはLinux Ubuntu 22.04:
-
AccelByte Gaming Servicesデモ環境へのアクセス。- ベースURL:
https://prod.gamingservices.accelbyte.io - ゲームNamespaceの作成。
Namespace IDを控えておいてください。 confidentialクライアントタイプでOAuthクライアントの作成。Client IDとClient Secretを控えておいてください。
- ベースURL:
-
extend-helper-cliをダウンロードしてセットアップしていること。こちらからダウンロード。
- このツールの使用方法については、GitHubのドキュメントを参照してください。
-
以下のツールがインストールされたWindows 11 WSL2またはLinux Ubuntu 22.04:
-
AccelByte Gaming Servicesデモ環境へのアクセス。- ベースURL:
https://prod.gamingservices.accelbyte.io - ゲームNamespaceの作成。
Namespace IDを控えておいてください。 confidentialクライアントタイプでOAuthクライアントの作成。Client IDとClient Secretを控えておいてください。
- ベースURL:
-
extend-helper-cliをダウンロードしてセットアップしていること。こちらからダウンロード。
- このツールの使用方法については、GitHubのドキュメントを参照してください。
アプリテンプレートのダウンロード
- Go
- Python
チャットフィルターgRPCプラグインアプリテンプレートをクローンします。
git clone https://github.com/AccelByte/chat-filter-grpc-plugin-server-go.git
次に、リポジトリのREADME.mdのSetup、Building、Runningセクションに従ってください。または、アプリのルートディレクトリから以下のgoコマンドを使用できます:
go run main.go
次のセクションに進む前に、サーバーがローカルで実行されていることを確認してください。
ngrokを起動し、アプリ内で指定されたポートを公開します。以下のコマンドは、アプリのportを変更していないことを前提としています:
ngrok tcp localhost:6565
チャットフィルターgRPCプラグインアプリテンプレートをクローンします。
git clone https://github.com/AccelByte/chat-filter-grpc-plugin-server-python.git
次に、リポジトリのREADME.mdのSetup、Building、Runningセクションに従ってください。または、アプリのルートディレクトリから以下のpythonコマンドを使用できます:
PYTHONPATH=src python -m src.app
次のセクションに進む前に、サーバーがローカルで実行されていることを確認してください。
ngrokを起動し、アプリ内で指定されたportを公開します。以下のコマンドは、アプリのportを変更していないことを前提としています:
ngrok tcp localhost:6565
ローカルチャットフィルターアプリのテスト
次に、ngrokを使用してlocalhostをインターネットに公開し、そのアドレスをチャットフィルターgRPCurl設定に使用して、アプリをローカルでテストします。その後、アプリ内のdemo.shスクリプトを使用して実際の環境に対してテストします。
gRPCプラグインの登録
ngrokから転送アドレスをコピーします。以下のような形式になります:
<number>.tcp.ngrok.io:<port>
AGS管理ポータルにログインし、gRPCプラグインを作成したいnamespaceに移動します。サイドバーで、Chat > Chat Configurationsに移動します。**Locally hosted (for testing purpose)**オプションを選択し、上記のngrokアドレスを入力します。次に、Createをクリックします。
gRPCurlを使用したテスト
gRPCurlでのテストはオプションですが、プロキシが正しく動作していることを確認できます。gRPCurlをダウンロードしてインストールし、以下のコマンドを実行して、転送されたローカルアプリが提供するgrpcサービスのリストを出力します。 以下にngrok tcpの転送アドレスを使用してください。
grpcurl -plaintext <number>.tcp.ngrok.io:<port> list
サンプル出力:
accelbyte.chat.filter.FilterService
grpc.health.v1.Health
grpc.reflection.v1alpha.ServerReflection
デモシェルスクリプトを使用したテスト
デモシェルスクリプトは、gRPCサーバーのURLをAGSチャットに登録し、2人のテストユーザーを作成し、これら2人のユーザー間のチャットをシミュレートしてカスタムチャットフィルターgRPCサーバーをトリガーする手順をガイドします。デモシェルスクリプトの実行方法の詳細な手順はこちらをクリック。
Extendアプリの作成
Extendアプリを作成するには、AGS管理ポータルに移動し、gRPCプラグインを作成したいnamespaceを使用します。左側のペインで、Extendにカーソルを合わせてOverridable Featuresをクリックします。次に、Create Newをクリックして新しいExtendアプリを作成します。

App NameとDescription(オプション)を入力します。次に、Createをクリックします。

Overridable Featuresアプリリストページにリダイレクトされ、新しく作成されたアプリのステータスがProvisioning in Progressと表示されます。

ステータスがUNDEPLOYEDと表示されるまで待ち、リスト内のアプリ名をクリックして詳細ページを表示します。

次のセクションで使用するため、Namespace、App Name、App Repository URIを控えておいてください。
Extendアプリイメージのビルドとプッシュ
Dockerイメージをアップロードするための一時的なDocker認証情報を取得するには、extend-helper-cliが必要です。前のセクションでExtendアプリを作成する際に使用したNamespaceとApp Nameを、以下のextend-helper-cliコマンドで使用します。
extend-helper-cli dockerlogin --namespace <game namespace> --app <app name> --login
以下の権限を持つconfidentialクライアントタイプのOAuthクライアントを作成します。Client IDとClient Secretを控えておいてください。
ADMIN:NAMESPACE:{namespace}:EXTEND:REPOCREDENTIALS[READ]
extend-helper-cli v0.0.3以下を使用する場合は、以下の権限を持つユーザーを作成します(まだ持っていない場合)。ユーザー名とパスワードを控えておいてください。
ADMIN:NAMESPACE:{namespace}:EXTEND:REPOCREDENTIALS[READ]
詳細については、extend-helper-cli READMEを参照してください。
アプリのDockerイメージを直接ビルドしてプッシュするには、アプリディレクトリ内の提供されたmakeスクリプトを実行できます:
make imagex_push IMAGE_TAG=v0.0.1 REPO_URL=<app-repository-url>
REPO_URLは、アプリ詳細ページのApp Repository URLからコピーできます。
Extendアプリのデプロイ
AGS管理ポータルに戻り、Extend App Detailsページ内で、Deploy Latest Imageをクリックし、デプロイが成功するまで待ちます。
Extendアプリのテスト
ExtendアプリでgRPCプラグインを登録する
管理ポータルに戻り、Chat Configurationsを更新します。AccelByte hostedオプションを選択し、Extendアプリの1つを選択します。Saveをクリックして完了します。
デモシェルスクリプトを使用したテストの手順を再度繰り返します。
Extendアプリの動作に関する注意事項
デプロイメント設定では、Envoyによって管理されるgRPC Extendアプリのタイムアウトメカニズムがあります。このタイムアウトは、受信/送信データまたはリクエストがない場合に発生し、システムがリソースを解放できるようにします。デフォルトでは、タイムアウト期間はstreamIdleTimeoutが300秒、routeTimeoutが30秒です。