Advisor Desktop Widget APIs

The Advisor Desktop Widget API provides methods and events that can be used to develop third party integrations with the eGain Advisor Desktop user interface.

The JavaScript APIs are called from a promise Javascript object within the Advisor Desktop and resolve, reject are passed as arguments to the hooks. The resolve/reject are used to resolve the promise while invoking the hook.

Hooks auto resolve by default instantly unless return is false and in which case all hooks will resolve after 120 seconds

  • resolve - resolves the promise
    Copy
    Copied
    var AgentHookImpl = {
    beforeSocialCkeditorInit: function (resolve, reject, config) {
        // do async processing
       setTimeout(function () {
           console.log(config);
           config.extaplugin += ",myplugin";
           resolve(); // resolve promise
       }, 100);
        return false; // return false to prevent promise from auto resolving
    }
    };
  • reject - rejects the promise For example reject parameters can be used to show custom error messages for example. TODO: Add example code snippet

afterChatComplete

This method is called after a chat is completed by the agent in the advisor desktop.

Parameters
  • resolve - resolve function
  • reject - reject function
  • activityId - ID of activity being completed
Copy
Copied
var AgentHookImpl = { 
	afterChatComplete: function (resolve, reject, activityId) {
  	// Do something with the event 
  	console.log(activityId);
	});
 }

afterLeaveOrCompleteCallback

Call this method after the callback for an agent or customer leaving or completing a chat is executed.

Parameters
  • resolve - resolve function
  • reject - reject function
  • result - json object returned by Leave or Complete call
  • isLeave - true/false
  • activityId - ID of selected chat activity
Copy
Copied
var AgentHookImpl = {
  afterLeaveOrCompleteCallback: function (resolve, reject, result, isLeave, activityId) {
    // Do something with the event 
    console.log (activityId);
  });
}

beforeSendMessage

This method is called to change and manipulate a message before it is sent out.

Parameters
  • resolve - resolve function
  • reject - reject function
  • obj - object has the following properties
    • message: message to be sent (if this property is modified a modified message will be sent)
Copy
Copied
var AgentHookImpl = {
    beforeSendMessage: function (resolve, reject, obj) {
        "use strict";
        var message = obj.message,
            activity = obj.activity;
        if(message && message.indexOf("fool")> -1){
            reject("Fool is not allowed in chat message"); //message to be show to agent
        }else{
            resolve()
        }
    }
};

afterSendMessage

Call this method to change and manipulate a message after it is sent out.

Parameters
  • resolve - resolve function
  • reject - reject function
  • obj - object has the following properties:
    • message: message to be sent (if this property is modified a modified message is sent)
Copy
Copied
var AgentHookImpl = {
    afterSendMessage: function (resolve, reject, messageobj) {
    // Do something with the event 
    }
};

beforeGetChatMessage

Call this method before the system fetches a message.

Parameters
  • resolve - resolve function
  • reject - reject function
  • messageObj - is the message object received from polling for example:
    • eglvsid: activity id for the received message
    • eglvmsg: message object
  • Any change in the message object changes the resulting message
Copy
Copied
var AgentHookImpl = {
    beforeGetChatMessage: function (resolve, reject, messageobj) {
    // Do something with the event 
    }
};

afterGetChatMessage

Call this method after the system fetches a message.

Parameters
  • resolve - resolve function
  • reject - reject function
  • messageObj - is the message object received from polling for example:
    • eglvsid: activity id for the received message
    • eglvmsg: message object
  • Any change in the message object changes the resulting message
Copy
Copied
var AgentHookImpl = {
    aftereGetChatMessage: function (resolve, reject, messageobj) {
    // Do something with the event 
    }
};

beforePullChatCallback

Call this method before the callback for the pulling a chat is executed.

Parameters
  • resolve - resolve function
  • reject - reject function
  • result - json object returned by Pull Chat jsp call
Copy
Copied
var AgentHookImpl = {
    beforeGetChatMessage: function (resolve, reject, result) {
    // Do something with the event 
    }
};

beforeChatSelect

Call this method before the chat is selected.

Parameters
  • resolve - resolve function
  • reject - reject function
  • activityId - Id of selected chat activity
Copy
Copied
var AgentHookImpl = {
    beforeChatSelect: function (resolve, reject, activityId) {
    // Do something with the event 
    }
};

aftereChatSelect

Call this method after the chat is selected.

Parameters
  • resolve - resolve function
  • reject - reject function
  • activityId - Id of selected chat activity
Copy
Copied
var AgentHookImpl = {
    afterChatSelect: function (resolve, reject, activityId) {
    // Do something with the event 
    }
};

beforeChatCKeditorInit

Call this method before the chat CKEditor is invoked.

Parameters
  • resolve - resolve function
  • reject - reject function
  • config - ckeditor config object
Copy
Copied
var AgentHookImpl = {
    beforeChatCkeditorInit: function (resolve, reject, config) {
    // Do something with the event 
    }
};

getChatReferrerNameClassMapFunction

Call this method to get custom classes for chat icon mapping function based on referrer name.

Parameters
  • resolve - resolve function
  • reject - reject function
  • referrer -
Copy
Copied
getChatReferrerNameClassMapFunction: function (resolve, reject) {

       resolve(function(referrer){

       return {

           "facebook": 'fb-chat',

           "App": 'mobile-chat',

           'Apple': 'apple-chat',

           'SMS': 'sms-chat'

       }[referrer]

       });

    }

 

    here class apple-chat refers to something like below class name

    .icon-egain-stream-chat.icon-egain-stream-chat-apple-chat:before, .apple-chat:before{

       content: "\e011" !important;

      }

UI Hooks:

addTopToolbarButtons

Call this method to add a custom button in the main drop down menu of the toolbar. To return a button or an array of buttons use resolve.

Parameters
  • resolve - resolve function
  • reject - reject function
Example code:
Copy
Copied
var AgentHookImpl = {
    addTopToolbarButtons: function (resolve, reject) {
    resolve({
        text: 'Test',
        handler: function(){
            alert(1);
         }
     })
    }
};

addChatToolbarButtons

Call this method to add a custom button to the chat toolbar. To return a button or an array of buttons use resolve.

Parameters
  • resolve - resolve function
  • reject - reject function
Example code:
Copy
Copied
To add buttons return a button or an array of buttons with resolve. The scope of callback handler is always AgentHook
* example:

* function(resolve, reject){
*     resolve({
*         text: 'Test',
*         tooltip: 'TestTooltip',
*         position: 'toolbar',  //position can be 'toolbar' or 'menu'
*         handler: function(){
*             alert(1);
*         }
*     })
*
* }

* @param resolve
* @param reject

Email Hooks:

beforeOnAddressBookLoad

Call this method to add custom code before loading the address book.

Parameters
  • resolve - resolve function
  • reject - reject function
  • store - address book store
Copy
Copied
var AgentHookImpl = {
    beforeOnAddressBookLoad: function (resolve, reject, store) {
    // Do something with the event 
    }
};

beforeSendAndCompleteEmail

Call this method to add custom code before the "Send and Complete" of an email.

Parameters
  • resolve - resolve function
  • reject - reject function
  • replyType - email reply type
Copy
Copied
var AgentHookImpl = {
    beforeSendAndCompleteEmail: function (resolve, reject, replyType) {
    // Do something with the event 
    }
};

afterSendAndCompleteEmailCallbackSuccess

Call this method to add custom code after the execution of the call back for a successful "Send and Complete" of an email.

Parameters
  • resolve - resolve function
  • reject - reject function
  • result - json object returned by Send and Complete Email jsp call
Copy
Copied
var AgentHookImpl = {
    afterSendAndCompleteEmailCallbackSuccess: function (resolve, reject, result) {
    // Do something with the event 
    }
};

beforeSendEmail

Call this method to add custom code before the "Send " of an email.

Parameters
  • resolve - resolve function
  • reject - reject function
Copy
Copied
var AgentHookImpl = {
    afterSendAndCompleteEmailCallbackSuccess: function (resolve, reject) {
    // Do something with the event 
    }
};

beforeEmailCkeditorInit

Call this method to add custom code before the email CKEditor is invoked.

Parameters
  • resolve - resolve function
  • reject - reject function
  • config - CKEditor config object
Copy
Copied
var AgentHookImpl = {
    beforeEmailCkeditorInit: function (resolve, reject, config) {
    // Do something with the event 
    }
};

General Hooks:

beforeNonChatSelect

Call this method to add custom code before a no chat activity is selected.

Parameters
  • resolve - resolve function
  • reject - reject function
  • activityId - Id of selected chat activity
  • activityType - activity type of activity selected
Copy
Copied
var AgentHookImpl = {
    beforeNonChatSelect: function (resolve, reject, activityId, activityType) {
    // Do something with the event 
    }
};

afterNonChatSelectCallback

Call this method to add custom code after the callback for selecting a non chat activity is executed.

Parameters
  • resolve - resolve function
  • reject - reject function
  • activityId - Id of selected chat activity
  • activityType - activity type of activity selected
Copy
Copied
var AgentHookImpl = {
    afterNonChatSelectCallback: function (resolve, reject, activityId, activityType) {
    // Do something with the event 
    }
};

beforeNonChatComplete

Call this method to add custom code before a non-chat type of activity is completed.

Parameters
  • resolve - resolve function
  • reject - reject function
  • activityIds - all selected activity ids []
Copy
Copied
var AgentHookImpl = {
    beforeNonChatComplete: function (resolve, reject, activityIds) {
    // Do something with the event 
    }
};

afterNonChatCompleteCallbackSuccess

Call this method to add custom code after the successful execution of the callback for the completion on a non-chat activity.

Parameters
  • resolve - resolve function
  • reject - reject function
  • activityIds - all selected activity ids []
Copy
Copied
var AgentHookImpl = {
    afterNonChatCompleteCallbackSuccess: function (resolve, reject, activityIds) {
    // Do something with the event 
    }
};

beforeTaskCkeditorInit

Call this method to add custom code before the task CKEditor is invoked.

Parameters
  • resolve - resolve function
  • reject - reject function
  • config - CKEditor config object
Copy
Copied
var AgentHookImpl = {
    beforeTaskCkeditorInit: function (resolve, reject, config) {
    // Do something with the event 
    }
};

beforeSocialCkeditorInit

Call this method to add custom code before the social CKEditor is invoked.

Parameters
  • resolve - resolve function
  • reject - reject function
  • config - CKEditor config object
Copy
Copied
var AgentHookImpl = {
    beforeSocialCkeditorInit: function (resolve, reject, config) {
    // Do something with the event 
    }
};

getInfoEventActivityData

Call this method to manipulate activity data sent out as part of DUO event.

Parameters
  • eventName - name of event getting fired
  • activity - Activity object
  • Return: it returns either an object with activity data or undefined/null;

example code:

Copy
Copied
getInfoEventActivityData: function (eventName, activity) {
    var retObj = {};
    if(activity.getActivityType && activity.getActivityType() ==2000){
        retObj = {
            type: 'chat',
            id: activity.getId(),
            subject: activity.get('subject'),
            caseId: activity.get('caseId'),
            customerId: activity.get('customerId'),
            customerName: activity.data.contactPerson,
            queueName: activity.data.queue_name,
            createdAt: new Date(activity.data.whenCreated).toISOString()
        }
    }else if(activity.entityName){
        retObj = {
            type: activity.getActivityType(),
            id: activity.getId(),
            subject: activity.get('subject'),
            caseId: activity.get('caseId'),
            customerId: activity.get('customerId'),
            customerName: (activity.data.contactPerson_firstName || "") + " " + (activity.data.contactPerson_lastName || ""),
            queueName: activity._queue && activity._queue.data && activity._queue.data.name,
            createdAt: activity.data.createdAt.toISOString(),
            mode: activity._mode && activity._mode.data && activity._mode.data.value
        }
    }else{
        retObj = {
            type: activity.type? activity.type.value: '',
            id: activity.id,
            subject: activity.subject,
            caseId: activity.case ? activity.case.id : -1,
            customerId: activity.customer ? activity.customer.id : -1,
            customerName: (activity.data.contactPerson_firstName || "") + " " + (activity.data.contactPerson_lastName || ""),
            queueName: activity._queue && activity._queue.data && activity._queue.data.name,
            createdAt: activity.data.createdAt && new Date(activity.data.whenCreated).toISOString()
        }
    }
    return retObj;
}