Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
vendors:cisco:wxcc:widgets [2026/02/23 09:13] – [References] gerardorourkevendors:cisco:wxcc:widgets [2026/02/26 11:19] (current) gerardorourke
Line 139: Line 139:
 === Console Logs === === Console Logs ===
 {{:vendors:cisco:wxcc:headless-widget.png?800|}} {{:vendors:cisco:wxcc:headless-widget.png?800|}}
 +
 +
 +===== Change RONA V2 ======
 +
 +This Widget is based on Aashish Berry **change-rona** widget which is located here:
 +  *https://github.com/aashishberry/desktopWidgets/tree/main
 +
 +It has 2 enhancements over the original.
 +
 +  * It stops double initialization - which seems to happen in WxCC gadgets? (when you press f5 and look at the console logs - it often get double logs)
 +    * <code>connectedCallback() {
 +        if (initialized) return; // stop double initialization of Widget
 + this.init();
 + initialized = true;
 +    }
 +    </code>
 +  * The original version attempted to make the agent available after the delaySeconds timer expires - no matter what. i.e. Even if in the mean time, the agent have moved from RONA and back into Idle with manual code. This is not what users would want. This is now prevented by checking, just before moving the agent into available, that the current state is indeed still Idle RONA. Only if its Idle due to RONA will it attempt move the agent back to an Available state.
 +
 +  * Note - As the user logs in the widget the widget loads, it then pauses for 15 seconds before loading the rest of the code. If the agent has NOT completed login by this time (i.e. if the user does not complete login by confirming their team / extension), the events to catch the RONA events do not trigger and the gadget does not work as intended.
 +
 +**Package:** {{ :vendors:cisco:wxcc:change-rona_20260226.7z |}}
 +  *download above and to run locally (http://localhost:3001/build/change-rona.js) then run the following (from the project directory):
 +    *npm install
 +    *npm run build
 +    *npm run dev
 +
 +
 +<file JavaScript change-rona.js>
 +/*
 +/*
 +Update on Sample Gadget provided by Aashish Berry (aaberry) - https://github.com/aashishberry/desktopWidgets/tree/main
 +This version checks BEFORE attempting to make the agent available that the agent state is Idel with Idle Code of 'RONA'
 +Only then will it allow the agent state to move back to available.
 +
 +This allows an agent to go Idle with different reason code (manually) and the widget will NOT pushed the agent back into available automatically 
 +It also not allow the gadget to attempt to move the agent into available again even if the agent is already available!
 +*/
 +
 +import { Desktop } from '@wxcc-desktop/sdk';
 +
 +const logger = Desktop.logger.createLogger('change-ronaV2');
 +logger.info('Change RONA Widget Loading...');
 +let initialized = false;
 +
 +class changeRona extends HTMLElement {
 +
 +    constructor() {
 +        super();
 +        this.attachShadow({ mode: "open" });
 +    }
 +
 +    connectedCallback() {
 +        if (initialized) return; // stop double initialization of Widget
 + this.init();
 + initialized = true;
 +    }
 +
 +    disconnectedCallback() {
 +        Desktop.agentContact.removeAllEventListeners();
 +        Desktop.agentStateInfo.removeAllEventListeners();
 +    }
 +
 +    sleep = (delay) => new Promise(r => setTimeout(r, delay));
 +
 +
 +    async init() {
 + logger.info('init(): Waiting 15 Seconds, the agent needs to complete login within this time for this gadget to work. Otherwise RONA Event Listner does not trigger (I do not know why?)');
 +        await this.sleep(15000);
 +        await Desktop.config.init({ widgetName: "change-ronaV2", widgetProvider: "GOR" });
 +
 + if (this.delaySeconds) {
 + logger.info('Delay read from layout: ' + this.delaySeconds + ' seconds.');
 + this.delaySeconds = this.delaySeconds * 1000;
 + }
 + else {
 + this.delaySeconds = 10000;
 + logger.info('Delay unavailable in layout. Default 10 seconds.');
 + }
 +
 +        logger.info("Widget initialized");
 +        this.agentInteractionEvents();
 +    }
 +
 +    async agentInteractionEvents() {
 + //logger.info(Desktop.agentStateInfo.latestData);
 +        Desktop.agentContact.addEventListener("eAgentOfferContactRona", () => {
 +            logger.info('RONA triggered - lets sleep for ' +  this.delaySeconds/1000 + ' seconds before we attempt to move the agent back into Available state');
 +            this.triggerChange();
 +        });
 +
 +    }
 +
 +    async triggerChange() {
 +        await this.sleep(this.delaySeconds);
 + logger.info("Our RONA sleep timer has completed.");
 +        if (Desktop.agentStateInfo.latestData.idleCode.name === 'RONA'){
 + logger.info("Agent is in an idle state with an idleCode name of 'RONA', hence we will attempt to move back to Available...");
 + try {
 + await Desktop.agentStateInfo.stateChange({
 + state: 'Available',
 + auxCodeIdArray: '0',
 + });
 + logger.info("Agent State changed to Available!");
 + } catch (e) {
 + logger.error(e);
 + }
 + }else{
 + logger.info("Agent is no longer in an idle state so we will NOT attempt to move back to Available...");
 + }
 + }
 +}
 +
 +window.customElements.define("change-rona", changeRona);
 +</file>
 +
  
  • vendors/cisco/wxcc/widgets.1771838015.txt.gz
  • Last modified: 2026/02/23 09:13
  • by gerardorourke