Using the Avaya Client SDK, your application can easily publish automatic presence or manual presence.
Automatic activity based updates for users who don’t spend time managing their status.
Manual Presence is an end user specified activity update for users who prefer privacy instead of automatic presence. Manual presence states do not include ephemeral states such as On the phone. When the end user selects a Manual Presence state, the state will be published superseding all automatic presence states set by other clients. Manual presence states remain until the user reverts the manual state to UNSPECIFIED. Please note, that when reverting manual presence to UNSPECIFIED, if auto presence is desired you will need to re-publish the auto presence state. Your application should never publish a manual presence state unless explicitly directed to do so by the end user.
The overall Presence State can not be published as it is a combination of the manual and auto presence states.
Your application is expected to execute the following steps, after initializing the Client SDK:
Note: Your application should never publish a manual presence state during initialization of your application.
Self presence of the user can be retrieved using API described in Using Presence With Shared Contacts. You need to obtain Contact instance that represents user - to do that, call User.getSelfContact(). Please note that getSelfContact() function will return self contact only after Contacts service initialization. To know when Contacts service is initialized you can use Contacts.onContactsServiceAvailableCallback. In case of self contact, Contact.onPresenceChangedCallback will be called with argument of SelfPresence type and Contact.getPresence() function will return SelfPresence.
var onContactsAvailableCallback = function () {
var selfContact = user.getSelfContact();
selfContact.addOnPresenceChangedCallback(
/**
* @param {AvayaClientServices.Services.Contacts.Contact} contact
* @param {AvayaClientServices.Services.Presence.SelfPresence} selfPresence
*/
function (contact, selfPresence) {
console.log('Overall self presence state is ' +
selfPresence.getOverallState());
}
);
selfContact.startPresence().then(
function () {
console.log('Successfully subscribed for self presence');
},
/**
* @param {AvayaClientServices.Services.Presence.PresenceError} error
*/
function (error) {
console.error('Failed to subscribe for self presence updates', error);
}
);
// Remove this callback once it's called for the first time as we already retrieved
// self contact
contacts.removeOnContactsServiceAvailableCallback(onContactsAvailableCallback);
};
contacts.addOnContactsServiceAvailableCallback(onContactsAvailableCallback);
To publish channel presence, you should retrieve self presence object, update states of desired channels and then call presenceService.publishAutomaticPresence().
selfPresence.setPhoneState(
AvayaClientServices.Services.Presence.PhonePresenceState.PRESENCE_STATE_ON_A_CALL
);
// Offline state for video channel presence can be used, for example, if client's device
// doesn't have video camera
selfPresence.setVideoState(
AvayaClientServices.Services.Presence.VideoPresenceState.PRESENCE_STATE_OFFLINE
);
selfPresence.setEnterpriseIMState(
AvayaClientServices.Services.Presence.IMPresenceState.PRESENCE_STATE_ON_A_CALL
);
presenceService.publishAutomaticPresence().then(
function () {
console.log('Channel (automatic) presence has been published successfully');
},
/**
* @param {AvayaClientServices.Services.Presence.PresenceError} error
*/
function (error) {
console.log('Failed to publish channel (automatic) presence', error);
}
);
Manual Presence State should only be invoked by your application under direction of the end user. It should never be set automatically by your application. To publish a manual presence state, call respective function of PresenceService.
presenceService.publishManualState(
AvayaClientServices.Services.Presence.PresenceManualState.PRESENCE_STATE_AVAILABLE
).then(
function () {
console.log('Manual presence state has been published successfully');
},
/**
* @param {AvayaClientServices.Services.Presence.PresenceError} error
*/
function (error) {
console.log('Failed to publish manual presence state', error);
}
);
presenceService.publishLocationMode(
AvayaClientServices.Services.Presence.PresenceLocationMode.PRESENCE_LOCATION_MODE_MOBILE
).then(
function () {
console.log('Manual presence location mode has been published successfully');
},
/**
* @param {AvayaClientServices.Services.Presence.PresenceError} error
*/
function (error) {
console.log('Failed to publish presence location mode', error);
}
);
presenceService.publishNote(
'I\'m out of the office today, for urgent issues please contact my manager'
).then(
function () {
console.log('Manual presence note has been published successfully');
},
/**
* @param {AvayaClientServices.Services.Presence.PresenceError} error
*/
function (error) {
console.log('Failed to publish manual presence note', error);
}
);