Sendbirdでマルチテナントアプリケーションにチャットプラットフォームの構築をする
はじめに
Sendbirdを利用してマルチテナントのアプリケーションに、テナント内のユーザーが相互にチャットできるようなチャットプラットフォームの構築をする方法です。
開発にはSendbirdが提供するChat Platform APIを利用します。
Chat Platform APIの実行にはいくつかSDKが用意されていますが、phpなど開発が止まっていそうなものも見受けられるため要注意です。
設計方針
Sendbirdでマルチテナントアプリケーションにチャットプラットフォームを構築する場合、テナントの粒度でSendbirdアプリケーションを作成することをベストプラクティスとして推奨しています。
※以下、コミュニティ上での回答より
ただしデフォルトでのアプリケーション数は3つであり、管理画面などで自ら増やすことができないため、直接問い合わせをして拡張してもらう必要があります。
アプリケーションを増やすこと自体はエンタープライズプランなどにする必要はないようで、実際問い合わせてみたらフリープランの状態でもすぐに希望のアプリケーション数に拡張してもらうことができました。
単一のsendbirdアプリケーションを無理やりマルチテナントアプリケーションへ統合することもできなくはないのですが、以下のようにデメリットやリスクが発生するのでアプリケーションを分割する1択で良いかと思います。
- アナリティクスや統計情報をテナント単位で見ることができない
- アプリケーションIDやAPI Tokenでの分割ができないため、テナント間で不可視としたい情報の混在リスクが高まる
- チャットグループやsendbirdユーザーのメタデータにテナント情報を持たせる必要があるため、統合するアプリケーション側が複雑になる
Sendbirdアプリケーションの作成
上記のプラクティスをもとに構築を進めていく場合、Sendbirdアプリケーションは最初に作成して終了ではなく、テナントが増えるたびに作成していく必要があります。
このユースケースの場合、ボタンクリックなどワンアクションでアプリケーションを作成することが求められると思われますが、Chat Platform APIを利用しながら以下のようにすることで実現することができます。
- Create an applicationでアプリケーションの作成
- Generate a secondary API tokenでsecondaryAPItokenの生成
- Add an IP to a whitelistでIPホワイトリストの登録
2,3は必須ではありませんが、設定する場合はCreate-an-applicationの実行後にアプリケーション単位で実行しておく必要があります。
特にsecondaryAPItokenを利用しない場合はmasterAPItokenを利用していくことになりますが、権限が強すぎるのでmasterAPItokenの利用はsecondaryAPItokenの生成にのみ留め、基本はsecondaryAPItokenを利用するのが理想です。
while ($retryCount < $maxRetries && !$isReady) {
$responsePostSecondaryToken = curl_exec($curl);
if ($responsePostSecondaryToken === 'error') {
$retryCount++;
sleep(10);
} else {
$secondary_token = $responsePostSecondaryToken['token'];
$isReady = true;
}
}
if (!$isReady) {
// 失敗時の処理
}
また、webhookやプレミアム機能を利用する場合もこのタイミングでアプリケーションごとに設定しておきます。
💡テナントごとに独自の設定が不要であり、一連の設定が面倒な場合はテンプレートのようなアプリケーションを作成しておき、設定を丸ごとコピーすることも可能です。
ここまでの一連の手続きをユーザーアクションにトリガーしてあげることでワンアクションでのアプリケーション作成が可能となり、マルチテナントのアプリケーションにチャット機能を組み込むことが可能です。
Discussion