xmpp меняет статус в чате

Я настроил чат с помощью ejabberd. Это работает довольно хорошо, но я хотел бы иметь возможность округлять сеансы чата для разных операторов в зависимости от того, кто уже находится в чате и кто может свободно общаться. Чтобы реализовать это, мне нужен какой-то способ обновить присутствие пользователей, основываясь на том, находятся ли они в данный момент в приватном чате. В настоящее время я использую mod_shared_roster для рекламы присутствия, но он сообщает только о том, доступен ли пользователь.

Это действительно нужно делать на стороне сервера, потому что мне нужно будет полагаться на разных IM-клиентов в зависимости от системы оператора.

2 ответа

Решение

Вы можете рассмотреть возможность подключения всех сеансов операторов под одной учетной записью и различными ресурсами. Ex. help@example.com/Operator1 help@example.com/Operator2 help@example.com/Operator3 Все с приоритетом 1.

Когда оператор в чате с пользователем, отправьте присутствие с приоритетом -1. Это удаляет ресурс из пула ресурсов для контакта, когда пользователь отправляет сообщение на адрес help@example.com. Когда оператор заканчивает общаться с пользователем, отправьте сообщение с приоритетом 1.

Дополнительной особенностью этой модели является то, что у вас есть только один Jabber ID для общения с вашими пользователями - help@example.com

Я нашел обходной путь. Поскольку система livechat использует jsjac (интерфейс javascript для xmpp), я могу создавать собственные пакеты присутствия. Когда клиент подключается к оператору, я устанавливаю "присутствие" клиента в "чат" и статус "в"talking to <operator jid>".

Когда подключается новый клиент, я могу запросить статус всех других клиентов, чтобы узнать, с кем они общаются, и выбрать оператора с наименее активными чатами.

Если кто-нибудь знает лучший / более простой способ, я буду рад это услышать.

Другие вопросы по тегам