Я настроил чат с помощью ejabberd. Он работает довольно хорошо, но я хотел бы иметь возможность проводить сеансы чата по круговой системе с разными операторами в зависимости от того, кто уже в чате, а кто может разговаривать. Чтобы реализовать это, мне нужен способ обновить присутствие пользователей на основе того, находятся ли они в данный момент в приватном чате. В настоящее время я использую mod_shared_roster для рекламы присутствия, но он сообщает только о том, доступен ли пользователь.
Это действительно нужно делать на стороне сервера, потому что мне нужно будет полагаться на разных клиентов IM в зависимости от системы оператора.
Я нашел обходной путь. Поскольку система livechat использует jsjac (интерфейс javascript для xmpp), я могу создавать свои собственные пакеты присутствия. Когда клиент подключается к оператору, я устанавливаю для клиентов значение «чат» и статус «talking to <operator jid>
'.
Когда подключается новый клиент, я могу запросить статус всех других клиентов, чтобы узнать, с кем они общаются, и выбрать оператора с наименее активными чатами.
Если кто-то знает лучший / простой способ, я рад это слышать.
Вы можете рассмотреть возможность подключения всех сеансов оператора под одной учетной записью и разными ресурсами. Ex. help@example.com/Operator1 help@example.com/Operator2 help@example.com/Operator3 Все с приоритетом 1.
Когда оператор находится в чате с пользователем, отправляйте присутствие с приоритетом -1. Это удаляет ресурс из пула ресурсов, с которым можно связаться, когда пользователь отправляет сообщение на адрес help@example.com. Когда оператор заканчивает общение с пользователем - отправьте присутствие с приоритетом 1.
Дополнительная особенность этой модели заключается в том, что у вас есть только один Jabber ID, который вы хотите передать своим пользователям - help@example.com.