何を試したか

コールセンター業務の「オペレーターと顧客がブラウザだけで顔を見ながら話す」フローを、アバター表示を前提に作り直す試作である。

顧客は URL にアクセスして「ヘルプを呼ぶ」を押すだけ。オペレーターはログイン後に「待機開始」を押すと自動マッチングが走り、双方が同じ通話ルームに入る。映像・音声・テキストチャットを 1 つの画面で完結させ、オペレーター側はカメラ映像の代わりに NICE CAMERA のアバターを出すことができるように設計している。

構成

採用技術
バックエンドASP.NET Core 6 (C#)、Docker コンテナで常駐
リアルタイム制御SignalR Hub による待機キュー・マッチング・切断検知
WebRTC メディアLiveKit Cloud(SFU、双方向映像・音声・DataChannel)
フロントエンド静的 HTML/CSS/JavaScript(フレームワーク不使用)
認証外部 API 経由のメール+パスワード、ASP.NET Core Session で 8 時間維持
アバター入出力NICE CAMERA

シグナリングと待機マッチングは自作の SignalR Hub で持ち、映像・音声の中継は LiveKit Cloud に任せている。ブラウザ側に API キーやシークレットを置かないよう、LiveKit 接続用 JWT トークンはバックエンドで都度発行する構成にした。

画面

オペレーターのログイン画面

メールアドレスとパスワードで認証する。開発モードでは認証スキップボタンを出せるようにしており、社内動作確認のオーバーヘッドを抑えている。

顧客側の待機画面

カメラ・マイクのプレビューを確認し、必要なら表示名をカスタム指定したうえで「ヘルプを呼ぶ」を押す流れ。顧客側にもアバターを出せるようにしてあり、顔を出したくない利用シーンに対応できる。

オペレーターの通話画面

相手の映像が全画面、自分の映像は右下の Picture-in-Picture で表示する構成。オペレーター側は実映像の代わりにアバターを送出できる。マイク・カメラの個別 ON/OFF とデバイス切替を通話中に行えるようにしている。

何が分かったか

  • 顔を出さずに対応できる選択肢が、オペレーターの稼働可能時間を広げる。化粧・服装・在宅時の背景といった制約から解放されるため、受付業務の人員配置の自由度が上がる
  • 待機キュー・マッチング・切断後の再待機を SignalR Hub の薄いインメモリ状態 で実装でき、コールセンター規模の初期 PoC であれば DB を持たずに成立する
  • LiveKit Cloud に映像中継を任せると、アプリ側は JWT 発行とマッチングだけ に集中できる。WebRTC の SFU を自前で立てる場合と比較して、初期構築コストが大きく下がる
  • ngrok の固定ドメイン + systemd サービス化で、VPS 再起動を跨いでも安定して外部公開できる導線が作れた
  • 認証は「セッション + 別端末検知ポーリング」の素朴な構成でも、コールセンター運用の要件(同一アカウントの二重ログイン防止)には十分対応できる

想定する応用

  • コールセンター・サポート窓口:実映像とアバターの選択を運用者側に持たせ、顧客接点の心理的負担を下げる
  • オンライン受付・案内:自治体・施設のリモート受付。アバター越しでも「人がいる」体感を保ったまま稼働時間を伸ばせる
  • 業務委託オペレーター:在宅・出張先からの応対を、画面映りを気にせず行える環境

関連プロダクト

この試作で使用しているアバター入出力基盤は製品化済み:

制限・今後

現時点ではオペレーター 1 名 + 顧客キュー方式での動作確認段階。マッチング状態がインメモリのため、複数台スケールアウトや障害再開時の永続化は未対応である。

今後は (1) 複数オペレーター同時稼働時のキュー戦略、(2) 通話履歴・対応ログの永続化、(3) アバター人格の業務別カスタマイズ、(4) モバイルブラウザでの操作性向上を検討する。