Мне нужно внедрить систему живого чата на основе XMPP в Django.После долгих раздумий и идей коллеги мы пришли к следующему.
Метод с использованием бота:
- Когда посетитель посещает сайт.Клиент XMPP посетителя, в данном случае это Strophe.JS, начинает соединение XMPP-over-BOSH с сервером XMPP и подключается к комнате с именем
<visitor_id>@conference.demo.com
.В настоящее время в комнате больше никого нет. - Посетитель делает запрос на аналитику с пользовательским идентификатором посетителя к Django
- Представление Django сохраняет идентификатор посетителя в таблице с именем
ActiveUsers
,Эта таблица также содержит новое поле с именем status
.Он устанавливает status
в INACTIVE
. - . Эта модель отправляет сигнал по методу
save
. - Этот сигнал принимается ботом, который подключается к серверу XMPP иприсоединяется к комнате
<visitor_id>@conference.demo.com
.Теперь у нас есть пользователь и бот в комнате. - Пользователи службы поддержки сайта зарегистрированы в своем веб-интерфейсе.
- У них есть JS-код, который постоянно опрашивает сайт Django, чтобы проверить
ActiveUsers
.Он выбирает строки из таблицы и отображает их.(Я подумал об использовании django-pubsub для этого) - Когда посетитель набирает сообщение, оно отправляется через XMPP-over-BOSH на сервер XMPP, бот jabber вroom видит это сообщение и обновляет статус записи в таблице
ActiveUsers
до ACTIVE
. - Как сказано: у людей, поддерживающих сайт, есть JS, который продолжает опрашивать эту таблицу.Он начинает мигать, показывая, что пользователь сейчас общается.
- Персонал службы поддержки теперь может дважды щелкнуть по этой строке, после чего начинается соединение XMPP-over-BOSH с комнатой посетителя.Он знает, что комната -
<visitor_id>@conference.demo.com
. - Бот, увидев, что сотрудник службы поддержки присоединился к комнате, обновляет запись
ActiveUsers
, чтобы показать CHATTING
.Это гарантирует, что в комнате может находиться только вспомогательный персонал, т. Е. Комната занята. - Бот записывает сообщения на стол Django
- Когда оба видят, что оба пользователя покинули комнату,удаляет запись.
ejabberd или openfire будет сервером XMPP.Apache - это веб-сервер, который запускает mod_wsgi для обслуживания Django и mod_proxy для передачи запросов XMPP-over-BOSh на сервер XMPP.
Похоже ли это на пользу?Какие-либо предложения?Я беспокоюсь о загрузке системы Django.
(Это долго. Извините, но я не знаю.)
Метод с использованием Stanzas Presence:
Нана стороне клиента, я использую библиотеку Strophe JS, которая поддерживает присутствие, и я добавил методы обратного вызова.Я гибко использую ejabberd или openfire в качестве моего сервера XMPP.На сервере XMPP много посетителей - некоторые с сайта A, а некоторые с сайта B, но все они подключены к одному и тому же XMPP-серверу.Когда посетитель посещает сайт, он подключается к XMPP-серверу как <visitor_id>_<site_id>@demo.com
, и каждый из них попадает в комнату под названием <visitor_id>@conference.demo.com
.Персонал отдела продаж / поддержки также подключен к серверу XMPP как <supportsale_id>_<site_id>@demo.com
.Они не связаны ни с одной из комнат чата.У них нет ни одного посетителя в их списке.
Хороший способ показать, что пользователь подключился к сайту, - передать раздел присутствия продавцам / специалистам службы поддержки.Только посетители и сотрудники отдела продаж / поддержки с одного и того же сайта общаются друг с другом, и поэтому у меня есть <site_id>
в имени пользователя, чтобы показать, к какому сайту принадлежит этот человек.
Кажется, что вы не можете подписатьсяналичие строф для пользователя, если у вас его нет в списке.(Вполне логично).Можно ли автоматически добавлять каждого нового пользователя сайта, подключенного к системе, в список сотрудников отдела продаж / поддержки этого сайта?Не будет ли это автоматически сигнализировать о присутствии сотрудникам отдела продаж / поддержки?Как я могу реализовать это - любая помощь?