Если вы ориентируетесь на платформу Windows, самый простой способ - сделать все на стороне клиента.
Пока клиенты работают под управлением IE, Office 2003 или более поздней версии и Communicator 2007 или более поздней версии, вы можете использовать объект * ActiveX NameCtrl , который распространяется вместе с Office.
Следующий код должен помочь вам начать:
<script>
var sipUri = "your.contact@your.domain.com";
var nameCtrl = new ActiveXObject('Name.NameCtrl.1');
if (nameCtrl.PresenceEnabled)
{
nameCtrl.OnStatusChange = onStatusChange;
nameCtrl.GetStatus(sipUri, "1");
}
function onStatusChange(name, status, id)
{
// This function is fired when the contacts presence status changes.
// In a real world solution, you would want to update an image to reflect the users presence
alert(name + ", " + status + ", " + id);
}
function ShowOOUI()
{
nameCtrl.ShowOOUI(sipUri, 0, 15, 15);
}
function HideOOUI()
{
nameCtrl.HideOOUI();
}
</script>
<span onmouseover="ShowOOUI()" onmouseout="HideOOUI()" style="border-style:solid">Your Contact</span>
Для решения реального мира вам просто нужно реализовать изображение, которое изменяется в зависимости от возвращаемого состояния присутствия (то есть пузыря присутствия, отображаемого рядом с именем каждого пользователя), а также коллекцию sip uris для изображений, чтобы убедиться, что вы можете сопоставить входящее изменение статуса с соответствующим изображением.