【2018年4月20日追記】この記事は内容が古くなっている部分があります。「あらためてチャットサポートを構築する」もご覧ください。【追記ここまで】
共有名簿 (shared roster)
ふつうの XMPP では、相手先名簿 (roster) は JID に紐付けられ、サーバーに保持されています。ところが匿名サーバーの場合、接続要求があった際にそのアカウントが新たに一時的に生成されるため、その JID には相手先名簿がありません。そこで、XMPP の共有名簿(shared roster)という機能を使うことにします。
ejabberd の設定ファイル ejabberd.cfg
では
{modules, [ ... {mod_shared_roster,[]}, ... ]}.
とモジュールを有効化しておきます。
ejabberd のウェブ管理画面の「ヴァーチャルホスト -> anonymous.example.net -> 共有名簿グループ」の画面で、まずひとつのグループを作成します。たとえば
- 名前: support
- 説明: サポート窓口
- メンバー: support@example.net
- 表示グループ: (空欄)
のようにします。ここで support@example.net
は、窓口側(問い合わせを受ける側)の JID です。
さらにもうひとつグループを作成します。
- 名前: all
- 説明: 全ユーザー
- メンバー: @all@
- 表示グループ: support
ここで @all@
は、「全ユーザー」を意味します。
これで、「anonymous.example.net の全ユーザーの名簿に support グループのメンバー(ここでは support@example.net
のみ)を自動的にセットする」ことができ、上述の(3)をクリアできました。
チャットサポート構築のまとめ
ここまでで、どうにかチャットサポートを構築できました。まとめますと、「チャットサポート」に求められる要件、
- アプリケーションの事前インストールが不要
- アカウント(JID)の登録が不要
- 連絡先が登録済み
に対して、(1)は Converse.js を導入することで、(2)はクッキーを利用し匿名サーバーを設定することで、そして(3)は共有名簿 (shared roster) を使うことでクリアして、一応「チャットサポート」的なものができました。そしてこれらを WordPress のサイトに導入するために プラグイン化しました。試しにこのサイトに設置してみました。画面の右下に小さなタブが見えると思います。
とりあえずはできたものの、課題も残っています。
前にも書いたとおり、事前接続のところがよく理解できていないこともあって、匿名サーバーだと使えますが、特定の JID を事前設定しようとするとうまくいきません。また、ページ遷移に対応できていません。
匿名サーバーの場合、共有名簿を使ってみましたが、多重に読み込んでいるのか、同じ相手先が増殖することがあります。どういうことなのかよくわかりません。また、これは匿名サーバーの宿命なのですが、接続した時点で相手先からは認証されていないので(その時点で生成された ID なので当然)、その相手先の在席状況が不明で「オフライン」と表示されてしまいます。印象が悪いので、WordPress のプラグインではこれを隠すようにしてみました。
今回、恥を忍んで中途半端な状態でも公開してこのような文を書いたのは、誰か能力のある人がちゃんとした実装を教えてくれることを期待してのことです。XMPP ならまだしも、Strophe.js や Converse.js で検索しても、とにかく日本語での情報は非常に少なく、どこで聞いたらいいかもわからないほどです。
何かわかる方がありましたら、教えてください。または情報をぜひ公開してください。お願いします。