DEV Community

Cover image for BizOps Workspaceでチャットとユーザーを安全にモデレートする方法

BizOps Workspaceでチャットとユーザーを安全にモデレートする方法

このハウツー記事は、BizOps Workspaceと総称されるPubNubのデータ管理機能について説明する一連の記事の一部です:

BizOps Workspaceは、アプリケーションの管理に役立つ一連のツールです。 この記事では、前回の「BizOps Workspaceで会話を監視してモデレートする方法」を発展させ、手動モデレーション機能、つまりリアルタイムで会話を監視し、ユーザーをミュートまたは禁止する機能を備えたエンドツーエンドのセキュアなチャット・アプリケーションを紹介します。

この記事は単独でも読むことができますが、ここで説明するコンセプトの背景をよりよく理解するために、前回の「BizOps Workspaceで会話を監視してモデレートする方法」の記事を読むことを強くお勧めします。

チャネルモニタとは何ですか?

チャンネルモニターは、チャットモデレーターが複数のチャンネルでリアルタイムに行われている会話のライブプレビューを見ることができます。もしモデレーターが、行儀の悪いユーザーや攻撃的なメッセージなど、何か不穏なものを発見したら、問題を緩和するためにすぐに行動することができます。

モデレーターは、どのようなアクションを取るかについて、多くの柔軟性を持っています:

  • アクセス権を制限せずにユーザーを観察する
  • 問題のあるメッセージを編集または削除する
  • そのユーザーのメッセージ公開を制限する(ミュートする)
  • メッセージの閲覧または公開を制限する(禁止する)

Monitor "機能では、手動でメッセージを確認したり、手動でユーザーをミュートしたりすることができます。この記事では自動モデレーションについては説明しません。

チャネルモニタを使用するには、PubNubキーセットでいくつかの機能を有効にする必要があります。特に、App contextと Message persistenceは最低限必要です。 詳細については、前の記事の「Channel Monitorのキーセットの要件」を参照してください。

PubNubアクセスマネージャとは何ですか?

開発者は、モデレーションシステムを回避しようとするユーザーから保護する必要があります。これはPubNubアクセスマネージャを使用して実現されます。

アクセスマネージャを使用すると、指定されたユーザー(または複数のユーザー)の権限と、指定されたリソースに対して実行できるアクションを記述する一連のルールを定義できます。 例えば

  • IDが123のユーザはチャネル456の読み書き権限がある。
  • IDが正規表現user-*に一致するすべてのユーザは、IDが正規表現global-*に一致するすべてのチャネルから読み取ることができます。
  • IDが123のユーザはチャネルのメタデータを更新する権限を持っています。

パーミッションの完全なリストについては、https://www.pubnub.com/docs/general/security/access-control#permissions のドキュメントを参照してください。

PubNub Access Managerはトークンベースであり、それを説明する最も簡単な方法は、ドキュメントに示されているように認可フローを歩き、そのフローがモデレーションにどのように関連しているかについて追加のコンテキストを提供することです:

Access Manager workflow

  1. ログインの試み。クライアントは、ユーザをアプリケーションにログインさせるために、サーバに対して認証を行います。これはおそらくIDプロバイダを介して行われます。このステップの後、サーバは登録されたアプリユーザと話していること、そしてそのユーザが誰であるかを確信します。クライアントは初期化の一環としてPubNub Access Manager認証トークンを要求します。
  2. 許可リクエスト。 サーバはSDKの'grantToken()'APIを呼び出して、クライアントからのトークン要求を処理します。 このAPIについて注意すべき点があります:このAPIはPubNub*シークレットキーでのみ*呼び出すことができるため、サーバーからのみ呼び出すことができます。このAPIはすべてのサーバーサイドSDKで利用可能です。
  3. トークンが返されます。PubNubは要求されたユーザに要求されたパーミッションを許可し、認証トークンをサーバに返します。
  4. トークンが渡されます。サーバは認証トークンを元の呼び出し元のクライアントに返します。
  5. トークンが設定されます。クライアントは、初期化時あるいはアプリケーションのライフサイクル中の任意の時点で、setToken()メソッドを使用してこの認証トークンを指定できます。トークンの有効期限が切れるため、トークンをいつでも更新できることは重要ですが、チャンネル・モニターが権限を更新した場合(ミュートされたり禁止されたりした場合)にも、クライアントは新しいトークンを要求する必要があります。
  6. 許可されたAPIリクエスト。その後のPubNubへの呼び出しはすべて認可されたものとみなされます。PubNubは、ステップ2で付与されたパーミッションとクライアントのトークンの有効性に基づいて、あらゆるAPIリクエストを許可または拒否します。

セキュアなモデレーション・ソリューションとはどのようなものか?

前回の記事の最後の方で、クライアント側からミュートや禁止がどのように見えるかのデモを示しました。 チャット SDK には、クライアントがミュートされたか禁止されたかを伝えるモデレーション イベントが含まれていますが、UI を更新する以外に、クライアントがミュート/禁止されてもメッセージを送信し続けることを防ぐことはできません。 クライアントを安全にミュートまたはBANするには、既存のAccess Manager権限を取り消し、新しいミュートまたはBANステータスを反映する新しい権限を付与する必要があります。

あるユーザーが'musicals'チャンネルからミュートされている場合を考えてみましょう:

Secure chat sequence diagram

  1. あるユーザが「movies」と「musicals」の2つのチャンネルにアクセスできるが、管理者は「musicals」チャンネルからのみミュートしたい。
  2. モデレーターはチャンネルモニターを使ってユーザーをミュートする。 これは裏を返せば 'setRestrictions()' API を呼び出していることになる。
  3. サーバアプリケーションは 'mute' 通知をモデレーションイベントで受け取り、そのユーザのアクセストークンを失効させる。
  4. クライアントアプリケーションは、'musicals' チャネルに関連付けられた 'mute' 通知を節度イベントを通して受け取ります。
  5. アプリケーションはUIを更新し、それ以上メッセージを送信しないようにする。 ユーザはページのJavaScriptを修正することで、このUIの変更を回避できますが、認証トークンが失効しているため、メッセージを送信しようとすると失敗します。
  6. 上記のAccess Managerのセクションで説明したように、アプリケーションはサーバに新しい認証トークンを要求します。 新しく付与されたトークンには、ユーザの新しい権限が反映され、'musicals' チャネルへの 'read' アクセス権のみが付与されます。

前回の記事では、"モデレーションソリューションのコンポーネント "について説明し、クライアントとサーバーの両方で利用可能なAPIを以下の図を使ってリストアップしました。上記のステップで説明したAPIは、この図にも示されています。

Table showing components of a chat moderation solution

チャットSDKサンプルアプリ

チャンネルモニターとチャットSDKの開発を担当した同じ多忙なエンジニアリングチームは、チャットSDKを使用するReact Nativeで書かれたサンプルアプリケーションも作成しました。

このサンプルは、PubNubを使用して現実的で完全な機能を備えたチャットアプリを開発するためのSDKの機能とベストプラクティスを示しています。このサンプルはオープンソースで、/samples/react-native-group-chatにあるChat SDKと同じGitHubリポジトリの一部です。

Sample app running on iOS and Android

このアプリケーションは最近更新され、Access Managerサーバからトークンを要求するようになりました。また、ユーザのパーミッションが変更されたとき、つまりチャネルから禁止されたりミュートされたときに新しいトークンを要求するようになりました。 この改良は前回の記事を書いてから行われたので、GitHubから最新のソースを入手してください。 この記事を書いている時点の最新の git commit ID はae9dfa0です。

ユーザーのミュートと禁止を安全に行うサンプル・アプリケーションを使ったデモ

このセクションでは、クライアントとサーバーの両方の視点からセキュアなモデレーションを示すエンドツーエンドのデモを立ち上げて実行する方法について説明します。

PubNubキーセットの作成

このデモを実行するには、次のように新しいPubNubキーセットを作成することをお勧めします:

  1. 管理者ポータルにログインし、新しいアプリケーションを作成するか、既存のアプリケーション内に新しいキーセットを作成します。管理者ポータルにログインし、新しいアプリケーションを作成するか、既存のアプリケーション内に新しいキーセットを作成します。必要に応じて、管理者ポータルキーの作成方法をご覧ください。
  2. キーセットのページで、以下の構成オプションを有効にします。 特に指定がない限り、デフォルトを受け入れることができます:
  • アプリ・コンテキスト。 これはチャネルとユーザに関するメタデータを保存するもので、「ユーザとチャネルの管理」についての前の記事で詳しく説明しています。 User Metadata Events(ユーザ・メタデータ・イベント)、Channel Metadata Events(チャネル・メタデータ・イベント)、Membership Events(メンバーシップ・イベント)も有効にしてください。
  • メッセージの永続化。 これはメッセージの履歴をPubNubに保存し、管理者が会話を確認、編集できるようにします。
  • アクセスマネージャ。 データへの不正アクセスを防止し、安全なモデレーションソリューションを作成するために必要です。
  • プレゼンス。 ユーザーがオンラインかオフラインかを追跡するために使用されます。

変更を保存します。

以降のステップで、Publish KeySubscribe Key、およびSecret Keyが必要になります。

サンプル アプリケーションのビルド

前述したように、チャット SDK サンプル アプリは、Expo フレームワークを使用して React Native で記述されたクロス プラットフォームのクライアント アプリです。

アプリケーションの Readme に記載されている手順に従って、サンプル アプリケーションをクローンしてビルドします。 特に、yarnやNode.jsなどの前提条件がインストールされていることを確認してください。 ReadMeにはXCodeとiOSの使用について書かれているが、Androidエミュレーター上でアプリを実行することもできる。 執筆時点の最新のgitコミットIDはae9dfa0です。

Pub/Subキーを提供する際は、前のステップで生成したキーを使用してください。 .envファイルにキーを含めない場合、アプリケーションはデフォルトでいくつかのデモキーになります。混乱を避けるために、https://github.com/pubnub/js-chat/blob/ae9dfa0/samples/react-native-group-chat/App.tsx#L60、このロジックを無効にするとよいでしょう。

アプリケーションを実行します。ReadMeではyarn iosを実行するように指示されていますが、yarn androidや yarn run startを実行することもできます。

ログインすると、コンソールに次のような警告が表示されるはずです:

Failed log message

これはクライアントがAccess Managerサーバーへの接続に失敗したためです。

サンプルAccess Managerサーバーの構築

Sample Access Manager Serverはhttps://github.com/pubnub/js-chat/tree/master/samples/access-manager-api。これは前回説明したクライアントアプリケーションと同じmonorepoです。

src/chatsdk.service.tsファイルをお好みのエディタで開き、publishKeysubscribeKeysecretKeyを入力してください。 publishKeyとsubscribeKeyは、クライアント・アプリをビルドする際に使用したものと一致させる必要があり、secretKeyは、管理ポータルのアプリのkeysetページから入手できます。

REPO/samples/access-manager-apiディレクトリからyarn run startを実行してAccess Managerサーバーを起動すると、以下のような画面が表示されるはずです:

Sample Access Manager Server output

Access Managerサーバーが何をしているかを見るには、app.service.tsを見てください。リクエスト・ユーザー用に生成されたパーミッション構造と、これらのパーミッションを適用するためのchat.sdk.grantToken()の呼び出しが表示され、生成されたauthKeyが呼び出し元のクライアントに返されます。

これらはデモ・アプリケーションが必要とするパーミッションですが、あなたのアプリケーションはおそらく異なるパーミッションを必要とするでしょう。 この提供されたルールセットを開始テンプレートとして使用することができますが、アプリ用の Access Manager サーバーを作成する際には、https://www.pubnub.com/docs/chat/chat-sdk/build/features/users/permissionsを参照して、どの Chat SDK 機能でどのパーミッションが必要かを正確に理解してください。

クライアント・デモ・アプリを再起動すると、エラーなしでログインできるようになります。 Authkey refreshed(認証キーが更新されました)」というトーストが表示されれば、すべて成功です。

AuthKey refreshed

2つのクライアント間で会話を開始してください。

Initiate a conversation between two clients

チャンネルモニターを使用してユーザーをミュートおよび禁止する

重要:2つのクライアント間で会話を開始したことがない場合は、今すぐ行ってください。 チャンネルはデモアプリによって動的に作成されるため、チャットが開始された後にのみチャンネルモニターに表示されます。

auth key refreshed'バナーや'banned user'モーダルなど、以下に表示されるユーザーインターフェースのアップデートは、デモアプリケーションの一部であることに注意してください。

  • 管理者ポータルにログインしてチャネルモニターを起動し、Access Managerサンプルとクライアントアプリケーションで使用したキーセットを選択します。
  • 左側のナビゲーション・パネルの[BizOps Workspace]セクションに移動し、[Channel Monitor]を選択します。 BizOpsWorkspaceセクションが表示されない場合は、PubNubプランをアップグレードする必要があります。
  • モデレーションを開始するチャンネルを選択するプロンプトが表示されます。 チャンネル名は1:1 user with USER_IDになります。USER_IDは会話を開始した人のユーザー名です。
  • キーセットでパーシステンスを有効にしている場合、チャンネルメッセージは以前のメッセージも含めてリアルタイムで表示されます。

Initial conversation with channel monitor

  • そのユーザーが送信したメッセージの横にあるマイクボタンを押して、そのユーザーをミュートします。 ミュートされたユーザーのデバイスに、認証キーがリフレッシュされたことを知らせるメッセージが表示されます。 ミュートされたユーザーとしてメッセージを送信しようとすると、ミュートを解除したユーザーには影響がありませんが、禁止されているというメッセージダイアログが表示されます。

Muted user

  • マイクボタンをもう一度押して、ミュートを解除してください。 ミュートを解除されたユーザーのデバイスに、認証キーがリフレッシュされ、メッセージ送信が成功したことを知らせるメッセージが表示されます。

User unmuted

  • そのユーザーが送信したメッセージの横にある禁止ボタンを押して、そのユーザーを禁止してください。 理由は自由形式のテキストなので、関連する情報を入力できます。 認証キーが更新され、ユーザーはアプリのチャット選択画面に戻ります。

User is banned

禁止されたチャンネルにアクセスしようとすると、ユーザーにエラーが表示されます:

Banned user error message

  • チャンネルモニターで「禁止を解除」を選択して、ユーザーを禁止解除してください。 認証キーが更新されます。 ユーザーはBANが解除され、再びチャットにアクセスできるようになります。

User is unbanned

まとめ

チャットアプリケーションの開発は最初のステップに過ぎません。最も困難な課題は、拡大するユーザー・ベースをサポートするためにアプリをデプロイした後にやってきます。BizOps Workspaceは、チャットアプリケーションのあらゆる側面を管理するために設計されたツールセットであり、ローンチ後の課題を簡素化します。

この記事では、ユーザーの安全なミュートと禁止に焦点を当てましたが、BizOps Workspaceの機能はさらに拡張していきます。 また、本記事ではChat SDKのみに焦点を当てましたが、Channel Monitorは当社のどのSDKでも動作するように設定することもできます。

Channel monitor configuration

ヘルプやサポートが必要な場合は、お気軽に専任のサポートチームにご連絡いただくか、開発者対応チーム(devrel@pubnub.com)までメールでお問い合わせください。

PubNubはどのようにお役に立ちますか?

この記事はPubNub.comに掲載されたものです。

私たちのプラットフォームは、開発者がWebアプリ、モバイルアプリ、およびIoTデバイスのためのリアルタイムのインタラクティブ性を構築、配信、管理するのに役立ちます。

私たちのプラットフォームの基盤は、業界最大かつ最もスケーラブルなリアルタイムエッジメッセージングネットワークです。世界15か所以上で8億人の月間アクティブユーザーをサポートし、99.999%の信頼性を誇るため、停電や同時実行数の制限、トラフィックの急増による遅延の問題を心配する必要はありません。

PubNubを体験

ライブツアーをチェックして、5分以内にすべてのPubNub搭載アプリの背後にある本質的な概念を理解する

セットアップ

PubNubアカウントにサインアップすると、PubNubキーに無料ですぐにアクセスできます。

始める

PubNubのドキュメントは、ユースケースやSDKに関係なく、あなたを立ち上げ、実行することができます。

Top comments (0)