<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://all.docs.genesys.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Chrissyforrest</id>
	<title>Genesys Documentation - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://all.docs.genesys.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Chrissyforrest"/>
	<link rel="alternate" type="text/html" href="https://all.docs.genesys.com/Special:Contributions/Chrissyforrest"/>
	<updated>2026-04-04T13:35:30Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.31.1</generator>
	<entry>
		<id>https://all.docs.genesys.com/index.php?title=WID/Current/SDK/WebChatService-combined&amp;diff=69785</id>
		<title>WID/Current/SDK/WebChatService-combined</title>
		<link rel="alternate" type="text/html" href="https://all.docs.genesys.com/index.php?title=WID/Current/SDK/WebChatService-combined&amp;diff=69785"/>
		<updated>2020-10-29T17:11:27Z</updated>

		<summary type="html">&lt;p&gt;Chrissyforrest: Published&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Article&lt;br /&gt;
|Standalone=No&lt;br /&gt;
|DisplayName=WebChatService&lt;br /&gt;
|TocName=WebChatService&lt;br /&gt;
|Context=Learn how to use Genesys chat services.&lt;br /&gt;
|ComingSoon=No&lt;br /&gt;
|Platform=GenesysEngage-cloud&lt;br /&gt;
|Role=Developer&lt;br /&gt;
|Section={{Section&lt;br /&gt;
|sectionHeading=Overview&lt;br /&gt;
|anchor=overview&lt;br /&gt;
|alignment=Vertical&lt;br /&gt;
|structuredtext=WebChatService exposes high-level API access to Genesys chat services, so you can monitor and modify a chat session on the front end, or develop your own custom WebChat widgets. Compared to developing a custom chat UI and using the chat REST API, WebChatService dramatically simplifies integration—improving the reliability, feature set, and compatibility of every widget on the bus.&lt;br /&gt;
&lt;br /&gt;
===Usage===&lt;br /&gt;
&lt;br /&gt;
WebChatService and the matching WebChat widget work together right out of the box and they share the same configuration object. Using WebChat uses WebChatService.&lt;br /&gt;
&lt;br /&gt;
You can also use WebChatService as a high-level API using bus commands and events to build your own WebChat widget or other UI features based on WebChatService events.&lt;br /&gt;
&lt;br /&gt;
===Namespace===&lt;br /&gt;
&lt;br /&gt;
The WebChat Service plugin has the following namespaces tied to each of the following types:&lt;br /&gt;
&lt;br /&gt;
{{{!}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
!{{!}}Type&lt;br /&gt;
!{{!}}Namespace&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{!}}{{Link-SomewhereInThisVersion|manual=SDK|topic=WebChatService-combined|anchor=config|display text=Configuration}}&lt;br /&gt;
{{!}}{{!}}webchat&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{!}}CXBus—{{Link-SomewhereInThisVersion|manual=SDK|topic=WebChatService-combined|anchor=commands|display text=API commands}} &amp;amp; {{Link-SomewhereInThisVersion|manual=SDK|topic=WebChatService-combined|anchor=events|display text=API events}}&lt;br /&gt;
{{!}}{{!}}WebChatService&lt;br /&gt;
{{!}}}&lt;br /&gt;
&lt;br /&gt;
===Customization===&lt;br /&gt;
&lt;br /&gt;
WebChatService has many configuration options but no customization options. It is a plug-and-play plugin and works as is.&lt;br /&gt;
|Status=No&lt;br /&gt;
}}{{Section&lt;br /&gt;
|sectionHeading=Configuration&lt;br /&gt;
|anchor=config&lt;br /&gt;
|alignment=Vertical&lt;br /&gt;
|structuredtext=WebChat and WebChatService share the '''_genesys.widgets.webchat''' configuration namespace. WebChat contains the UI options and WebChatService contains the connection options.&lt;br /&gt;
&lt;br /&gt;
{{NoteFormat|Starting with version 9.0.008.04, WebChatService allows you to choose between the types of chat services available in Genesys via the transport section in {{Link-SomewhereInThisVersion|manual=SDK|topic=WebChatService-combined|anchor=options|display text=configuration options}}.|}}&lt;br /&gt;
&lt;br /&gt;
{{AnchorDiv|example}}&lt;br /&gt;
===Example===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// When using v2 API &lt;br /&gt;
&lt;br /&gt;
window._genesys.widgets.webchat = {&lt;br /&gt;
&lt;br /&gt;
	apikey: 'n3eNkgxxxxxxxxxxxx8VA',&lt;br /&gt;
	dataURL: 'https://api.genesyscloud.com/gms-chat/2/chat',&lt;br /&gt;
	enableCustomHeader: true,&lt;br /&gt;
&lt;br /&gt;
	userData: {},&lt;br /&gt;
	emojis: true,&lt;br /&gt;
	actionsMenu: true,&lt;br /&gt;
&lt;br /&gt;
	autoInvite: {&lt;br /&gt;
&lt;br /&gt;
		enabled: false,&lt;br /&gt;
		timeToInviteSeconds: 10,&lt;br /&gt;
		inviteTimeoutSeconds: 30&lt;br /&gt;
	},&lt;br /&gt;
&lt;br /&gt;
	chatButton: {&lt;br /&gt;
&lt;br /&gt;
		enabled: true,&lt;br /&gt;
		template: '&amp;lt;div&amp;gt;CHAT NOW&amp;lt;/div&amp;gt;',&lt;br /&gt;
		effect: 'fade',&lt;br /&gt;
		openDelay: 1000,&lt;br /&gt;
		effectDuration: 300,&lt;br /&gt;
		hideDuringInvite: true&lt;br /&gt;
	}&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// When using v3 API&lt;br /&gt;
&lt;br /&gt;
window._genesys.widgets.webchat = {&lt;br /&gt;
&lt;br /&gt;
	emojis: true,&lt;br /&gt;
	userData: {},&lt;br /&gt;
	transport: {&lt;br /&gt;
&lt;br /&gt;
		type: 'pureengage-v3-rest',&lt;br /&gt;
		dataURL: https://&amp;lt;hostname&amp;gt;/nexus/v3/chat/sessions,&lt;br /&gt;
		endpoint: 'xxxxxxxxx',&lt;br /&gt;
		headers: {&lt;br /&gt;
			'x-api-key': 'xxxxxxxx'&lt;br /&gt;
		},&lt;br /&gt;
		async: {&lt;br /&gt;
&lt;br /&gt;
			enabled: true, &lt;br /&gt;
&lt;br /&gt;
			getSessionData: function(sessionData, Cookie, CookieOptions) {&lt;br /&gt;
&lt;br /&gt;
				// Note: You don't have to use cookies. You can, instead, store in a secured location like a database.&lt;br /&gt;
				Cookie.set('customer-defined-session-cookie', JSON.stringify(sessionData), CookieOptions);&lt;br /&gt;
			},&lt;br /&gt;
&lt;br /&gt;
			setSessionData: function(Open, Cookie, CookieOptions) {&lt;br /&gt;
&lt;br /&gt;
				// Retrieve from your secured location.&lt;br /&gt;
				return Cookie.get('customer-defined-session-cookie');&lt;br /&gt;
			}&lt;br /&gt;
		},&lt;br /&gt;
&lt;br /&gt;
	chatButton: {&lt;br /&gt;
&lt;br /&gt;
		enabled: true,&lt;br /&gt;
		template: '&amp;lt;div&amp;gt;CHAT NOW&amp;lt;/div&amp;gt;',&lt;br /&gt;
		effect: 'fade',&lt;br /&gt;
		openDelay: 1000,&lt;br /&gt;
		effectDuration: 300,&lt;br /&gt;
		hideDuringInvite: true&lt;br /&gt;
	}&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
{{AnchorDiv|options}}&lt;br /&gt;
===Options===&lt;br /&gt;
&lt;br /&gt;
{{AnchorDiv|v2}}&lt;br /&gt;
====Version 2 API====&lt;br /&gt;
{{{!}} class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Name&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
!Default&lt;br /&gt;
!Required&lt;br /&gt;
!Introduced/Updated&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}apikey&lt;br /&gt;
{{!}}string&lt;br /&gt;
{{!}}Apigee Proxy secure token.&lt;br /&gt;
{{!}}n/a&lt;br /&gt;
{{!}}Yes, if using Apigee Proxy&lt;br /&gt;
{{!}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}endpoint&lt;br /&gt;
{{!}}string&lt;br /&gt;
{{!}}Manually select the endpoint on which to initiate chat.&lt;br /&gt;
{{!}}n/a&lt;br /&gt;
{{!}}n/a&lt;br /&gt;
{{!}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}dataURL&lt;br /&gt;
{{!}}string (URL)&lt;br /&gt;
{{!}}URL for GMS REST chat service. If cometD.enabled is set to true, this property will be ignored.&lt;br /&gt;
{{!}}n/a&lt;br /&gt;
{{!}}Always&lt;br /&gt;
{{!}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}enableCustomHeader&lt;br /&gt;
{{!}}boolean&lt;br /&gt;
{{!}}Enables the use of the custom authorization header defined in _genesys.widgets.main.header static config. Attaches the custom authorization header to all WebChatService request.&lt;br /&gt;
{{!}}false&lt;br /&gt;
{{!}}No&lt;br /&gt;
{{!}}9.0.002.06&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}userData&lt;br /&gt;
{{!}}object&lt;br /&gt;
{{!}}Arbitrary attached data to include when initiating a chat.&lt;br /&gt;
{{!}}{}&lt;br /&gt;
{{!}}n/a&lt;br /&gt;
{{!}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}ajaxTimeout&lt;br /&gt;
{{!}}number&lt;br /&gt;
{{!}}Number of milliseconds to wait before AJAX timeout.&lt;br /&gt;
{{!}}3000&lt;br /&gt;
{{!}}n/a&lt;br /&gt;
{{!}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}xhrFields&lt;br /&gt;
{{!}}object&lt;br /&gt;
{{!}}Allows you to set the properties for the AJAX xhrFields object (for example, {withCredentials: false}).&lt;br /&gt;
{{!}}{withCredentials: false}&lt;br /&gt;
{{!}}n/a&lt;br /&gt;
{{!}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}pollExceptionLimit&lt;br /&gt;
{{!}}number&lt;br /&gt;
{{!}}Number of successive poll exceptions (chat server offline) before WebChatService publishes 'chatServerWentOffline'.&lt;br /&gt;
{{!}}5&lt;br /&gt;
{{!}}n/a&lt;br /&gt;
{{!}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}restoreTimeout&lt;br /&gt;
{{!}}number&lt;br /&gt;
{{!}}Number of milliseconds before restore timeout. Prevents the chat session from restoring after a certain time away from the session (for example, user navigated to a different site during chat and never ended the session).&lt;br /&gt;
{{!}}60000&lt;br /&gt;
{{!}}&lt;br /&gt;
{{!}}&lt;br /&gt;
{{!}}}&lt;br /&gt;
&lt;br /&gt;
{{AnchorDiv|v3}}&lt;br /&gt;
====Version 3 API====&lt;br /&gt;
{{{!}} &lt;br /&gt;
{{!}}- &lt;br /&gt;
!Name&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
!Default&lt;br /&gt;
!Required&lt;br /&gt;
!Introduced/Updated&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}transport&lt;br /&gt;
{{!}}object&lt;br /&gt;
{{!}}Object containing the transport service configuration options.&lt;br /&gt;
{{!}}n/a&lt;br /&gt;
{{!}}Yes, when using new transport services available with WebChat.&lt;br /&gt;
{{!}}9.0.008.04&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}transport.type&lt;br /&gt;
{{!}}string&lt;br /&gt;
{{!}}Select the type of transport service that needs to work with WebChat UI plugin. For Pure Engage v3 REST API, the value is 'pureengage-v3-rest'.&lt;br /&gt;
{{!}}n/a&lt;br /&gt;
{{!}}Yes, when using Pure Engage v3 REST API.&lt;br /&gt;
{{!}}9.0.008.04&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}transport.dataURL&lt;br /&gt;
{{!}}string (URL)&lt;br /&gt;
{{!}}URL for Pure Engage v3 REST API chat service. Please contact your local Genesys customer representative to obtain a valid dataURL.&lt;br /&gt;
{{!}}n/a&lt;br /&gt;
{{!}}Always&lt;br /&gt;
{{!}}9.0.008.04&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}transport.endpoint&lt;br /&gt;
{{!}}string&lt;br /&gt;
{{!}}The endpoint for Genesys Engage v3 API.&lt;br /&gt;
{{!}}n/a&lt;br /&gt;
{{!}}Yes&lt;br /&gt;
{{!}}9.0.008.04&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}transport.headers&lt;br /&gt;
{{!}}object&lt;br /&gt;
{{!}}Object containing key value pairs of any custom headers.&lt;br /&gt;
{{!}}n/a&lt;br /&gt;
{{!}}Yes&lt;br /&gt;
{{!}}9.0.008.04&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}transport.headers[x-api-key]&lt;br /&gt;
{{!}}string&lt;br /&gt;
{{!}}The API key provided from Genesys. Please contact your local Genesys customer representative to obtain a valid API key.&lt;br /&gt;
{{!}}n/a&lt;br /&gt;
{{!}}Yes&lt;br /&gt;
{{!}}9.0.008.04&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}transport.async&lt;br /&gt;
{{!}}object&lt;br /&gt;
{{!}}Object containing Async mode configuration options.{{NoteFormat|To properly restore a chat session that has ended previously, you'll need to navigate back to the page and open the WebChat Widget. This way, the chat session is restored in the background and is ready. Presently, this is a current limitation in Async WebChat.|}}&lt;br /&gt;
{{!}}{}&lt;br /&gt;
{{!}}No&lt;br /&gt;
{{!}}9.0.008.04&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}transport.async.enabled&lt;br /&gt;
{{!}}boolean&lt;br /&gt;
{{!}}Enable Asynchronous Chat where a chat session can be active indefinitely. When you close WebChat without ending the chat session, the session will simply go dormant. When you open WebChat again, the session will restore and continue chatting where left off.&lt;br /&gt;
{{!}}false&lt;br /&gt;
{{!}}Yes, when Async WebChat mode is enabled&lt;br /&gt;
{{!}}9.0.008.04&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}transport.async.setSessionData&lt;br /&gt;
{{!}}function&lt;br /&gt;
{{!}}A function that you can define to retrieve updated session data from WebChatService plugin. This function is called back when starting a new Async chat session for the first time or when the sessionData changes over the course of an active chat session. This function takes the following arguments - sessionData (current active session data), Cookie (Widgets Internal cookie reference) and CookieOptions (a parameter that is needed when using Widgets Cookie). The purpose of this function is to provide you the active session data so that it can be stored somewhere safe and secure. Later this needs to be provided in the below setSessionData function to restore the chat session. Refer to the {{Link-SomewhereInThisVersion|manual=SDK|topic=WebChatService-combined|anchor=example|display text=example}} for usage.&lt;br /&gt;
{{!}}none&lt;br /&gt;
{{!}}Yes, when Async WebChat mode is enabled&lt;br /&gt;
{{!}}9.0.008.04&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}transport.async.getSessionData&lt;br /&gt;
{{!}}function&lt;br /&gt;
{{!}}A function that you can define to return the session data to WebChatService plugin. During initialization, WebChatService plugin will call this function to check if any session data is returned. If found, WebChatService tries to restore the chat session using this session data and open WebChat Widget. WebChatService will also pass the following arguments into this function - Open (WebChat current open state value), Cookie (Widgets Internal cookie reference) and CookieOptions (a parameter that will be needed when using Widgets Cookie). Refer to the {{Link-SomewhereInThisVersion|manual=SDK|topic=WebChatService-combined|anchor=example|display text=example}} for usage.&lt;br /&gt;
{{!}}none&lt;br /&gt;
{{!}}Yes, when Async WebChat mode is enabled&lt;br /&gt;
{{!}}9.0.008.04&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}transport.async.deleteSessionData&lt;br /&gt;
{{!}}function&lt;br /&gt;
{{!}}A function that you can define to delete the session data from your secret storage, it will be called by WebChatService plugin when Async chat session is lost or cannot find anymore due to unknown reasons. This function will enable you write the script for deleting the session data from your secret storage, in this way WebChat will try to start a new chat normally rather than trying to restore a lost chat session. WebChatService will also pass the following arguments into this function - errorData (lost session and error details), Cookie (Widgets Internal cookie reference) and CookieOptions (a parameter that will be needed when using Widgets Cookie).&lt;br /&gt;
{{!}}none&lt;br /&gt;
{{!}}Yes, when Async WebChat mode is enabled&lt;br /&gt;
{{!}}9.0.015.12&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}userData&lt;br /&gt;
{{!}}object&lt;br /&gt;
{{!}}Arbitrary attached data to include when initiating a chat.&lt;br /&gt;
{{!}}{}&lt;br /&gt;
{{!}}n/a&lt;br /&gt;
{{!}}&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}ajaxTimeout&lt;br /&gt;
{{!}}number&lt;br /&gt;
{{!}}Number of milliseconds to wait before AJAX timeout.&lt;br /&gt;
{{!}}3000&lt;br /&gt;
{{!}}n/a&lt;br /&gt;
{{!}}&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}}&lt;br /&gt;
|Status=No&lt;br /&gt;
}}{{Section&lt;br /&gt;
|sectionHeading=Localization&lt;br /&gt;
|anchor=localize&lt;br /&gt;
|alignment=Vertical&lt;br /&gt;
|structuredtext=WebChatService doesn't have any localization options.&lt;br /&gt;
|Status=No&lt;br /&gt;
}}{{Section&lt;br /&gt;
|sectionHeading=API commands&lt;br /&gt;
|anchor=commands&lt;br /&gt;
|alignment=Vertical&lt;br /&gt;
|structuredtext=Once you've registered your plugin on the bus, you can call commands on other registered plugins. Here's how to use the global bus object to register a new plugin on the bus.&lt;br /&gt;
&lt;br /&gt;
{{NoteFormat|The global bus object is a debugging tool. When implementing Widgets on your own site, do not use the global bus object to register your custom plugins. Instead, see {{Link-SomewhereInThisVersion|manual=SDK|topic=GWCBusExtensions|display text=Genesys Widgets Extensions}} for more information about extending Genesys Widgets.|1}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;var oMyPlugin = window._genesys.widgets.bus.registerPlugin('MyPlugin');&lt;br /&gt;
&lt;br /&gt;
oMyPlugin.command('WebChatService.getAgents');&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{NoteFormat|Starting with version 9.0.008.04, WebChatService allows you to choose between the types of chat API services available in Genesys via the transport section configuration options. For more information, see the Options table in {{Link-SomewhereInThisVersion|manual=SDK|topic=WebChatService-combined|anchor=options|display text=configuration options}}.|1}}&lt;br /&gt;
&lt;br /&gt;
===configure===&lt;br /&gt;
&lt;br /&gt;
Internal use only. The main App plugin shares configuration settings to widgets using each widget’s &amp;lt;code&amp;gt;configure&amp;lt;/code&amp;gt; command. The &amp;lt;code&amp;gt;configure&amp;lt;/code&amp;gt; command can only be called once at startup. Calling &amp;lt;code&amp;gt;configure&amp;lt;/code&amp;gt; again after startup may result in unpredictable behavior.&lt;br /&gt;
&lt;br /&gt;
===startChat===&lt;br /&gt;
&lt;br /&gt;
Initiates a new chat session with the chat server via GES or with the service configured under the transport section. &lt;br /&gt;
&lt;br /&gt;
====Example====&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
oMyPlugin.command('WebChatService.startChat', {&lt;br /&gt;
&lt;br /&gt;
	nickname: 'Jonny',&lt;br /&gt;
	firstname: 'Johnathan',&lt;br /&gt;
	lastname: 'Smith',&lt;br /&gt;
	email: 'jon.smith@mail.com',&lt;br /&gt;
	subject: 'product questions',&lt;br /&gt;
	userData: {}&lt;br /&gt;
&lt;br /&gt;
}).done(function(e){&lt;br /&gt;
&lt;br /&gt;
	// WebChatService started a chat successfully&lt;br /&gt;
&lt;br /&gt;
}).fail(function(e){&lt;br /&gt;
&lt;br /&gt;
	// WebChatService failed to start chat&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Options====&lt;br /&gt;
&lt;br /&gt;
{{{!}} &lt;br /&gt;
{{!}}- &lt;br /&gt;
!Option&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}nickname&lt;br /&gt;
{{!}}string&lt;br /&gt;
{{!}}Chat Entry Form Data: 'nickname'.&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}firstname&lt;br /&gt;
{{!}}string&lt;br /&gt;
{{!}}Chat Entry Form Data: 'firstname'.&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}lastname&lt;br /&gt;
{{!}}string&lt;br /&gt;
{{!}}Chat Entry Form Data: 'lastname'.&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}email&lt;br /&gt;
{{!}}string&lt;br /&gt;
{{!}}Chat Entry Form Data: 'email'.&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}subject&lt;br /&gt;
{{!}}string&lt;br /&gt;
{{!}}Chat Entry Form Data: 'subject'.&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}userData&lt;br /&gt;
{{!}}object&lt;br /&gt;
{{!}}Arbitrary data to attach to the chat session (AKA attachedData). Properties defined here will be merged with default userData set in the configuration object.&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}} &lt;br /&gt;
&lt;br /&gt;
====Resolutions====&lt;br /&gt;
&lt;br /&gt;
{{{!}} &lt;br /&gt;
{{!}}- &lt;br /&gt;
!Status&lt;br /&gt;
!When&lt;br /&gt;
!Returns&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}resolved&lt;br /&gt;
{{!}}Server confirms session started&lt;br /&gt;
{{!}}(AJAX Response Object)&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}rejected&lt;br /&gt;
{{!}}A chat session is already active&lt;br /&gt;
{{!}}'There is already an active chat session'&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}rejected&lt;br /&gt;
{{!}}AJAX exception occurs&lt;br /&gt;
{{!}}(AJAX Response Object)&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}rejected&lt;br /&gt;
{{!}}Server exception occurs&lt;br /&gt;
{{!}}(AJAX Response Object)&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}rejected&lt;br /&gt;
{{!}}userData is invalid&lt;br /&gt;
{{!}}'malformed data object provided in userData property'&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}} &lt;br /&gt;
&lt;br /&gt;
===endChat===&lt;br /&gt;
&lt;br /&gt;
Ends the chat session with the chat server via GES or with the service configured under transport section. &lt;br /&gt;
&lt;br /&gt;
====Example====&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
oMyPlugin.command('WebChatService.endChat').done(function(e){&lt;br /&gt;
&lt;br /&gt;
	// WebChatService ended a chat successfully&lt;br /&gt;
&lt;br /&gt;
}).fail(function(e){&lt;br /&gt;
&lt;br /&gt;
	// WebChatService failed to end chat&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Resolutions====&lt;br /&gt;
&lt;br /&gt;
{{{!}} &lt;br /&gt;
{{!}}- &lt;br /&gt;
!Status&lt;br /&gt;
!When&lt;br /&gt;
!Returns&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}resolved&lt;br /&gt;
{{!}}Active session is ended successfully&lt;br /&gt;
{{!}}(AJAX Response Object)&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}rejected&lt;br /&gt;
{{!}}No chat session is currently active&lt;br /&gt;
{{!}}'There is no active chat session'&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}} &lt;br /&gt;
&lt;br /&gt;
===sendMessage===&lt;br /&gt;
&lt;br /&gt;
Sends a message from the client to the chat session. &lt;br /&gt;
&lt;br /&gt;
====Example====&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
oMyPlugin.command('WebChatService.sendMessage', {message: 'hi'}).done(function(e){&lt;br /&gt;
&lt;br /&gt;
	// WebChatService sent a message successfully&lt;br /&gt;
&lt;br /&gt;
}).fail(function(e){&lt;br /&gt;
&lt;br /&gt;
	// WebChatService failed to send a message&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Options====&lt;br /&gt;
{{{!}} &lt;br /&gt;
{{!}}- &lt;br /&gt;
!Option&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}message&lt;br /&gt;
{{!}}string&lt;br /&gt;
{{!}}The message you want to send&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}} &lt;br /&gt;
&lt;br /&gt;
====Resolutions====&lt;br /&gt;
&lt;br /&gt;
{{{!}} &lt;br /&gt;
{{!}}- &lt;br /&gt;
!Status&lt;br /&gt;
!When&lt;br /&gt;
!Returns&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}resolved&lt;br /&gt;
{{!}}Message is successfully sent&lt;br /&gt;
{{!}}(AJAX Response Object)&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}rejected&lt;br /&gt;
{{!}}No message text provided&lt;br /&gt;
{{!}}'No message text provided'&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}rejected&lt;br /&gt;
{{!}}No chat session is currently active&lt;br /&gt;
{{!}}'There is no active chat session'&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}rejected&lt;br /&gt;
{{!}}AJAX exception occurs&lt;br /&gt;
{{!}}(AJAX Response Object)&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}} &lt;br /&gt;
&lt;br /&gt;
===sendCustomNotice===&lt;br /&gt;
&lt;br /&gt;
Sends a custom notice from the client to the chat server. This request is used to deliver any custom notification between a custom client application and a custom agent desktop. Neither Genesys Widgets, nor Workspace, uses this out of the box.&lt;br /&gt;
&lt;br /&gt;
====Example====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
oMyPlugin.command('WebChatService.sendCustomNotice', {message: 'bye'}).done(function(e){&lt;br /&gt;
&lt;br /&gt;
	// WebChatService sent a custom message successfully&lt;br /&gt;
&lt;br /&gt;
}).fail(function(e){&lt;br /&gt;
&lt;br /&gt;
	// WebChatService failed to send a custom message&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Options====&lt;br /&gt;
&lt;br /&gt;
{{{!}} &lt;br /&gt;
{{!}}- &lt;br /&gt;
!Option&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}message&lt;br /&gt;
{{!}}string&lt;br /&gt;
{{!}}A message you want to send along with the custom notice&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}} &lt;br /&gt;
&lt;br /&gt;
====Resolutions====&lt;br /&gt;
{{{!}} &lt;br /&gt;
{{!}}- &lt;br /&gt;
!Status&lt;br /&gt;
!When&lt;br /&gt;
!Returns&lt;br /&gt;
!Introduced/Updated&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}resolved&lt;br /&gt;
{{!}}Message is successfully sent&lt;br /&gt;
{{!}}(AJAX Response Object)&lt;br /&gt;
{{!}}&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}rejected&lt;br /&gt;
{{!}}AJAX exception occurs&lt;br /&gt;
{{!}}(AJAX Response Object)&lt;br /&gt;
{{!}}&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}rejected&lt;br /&gt;
{{!}}The server doesn't support receiving custom notices&lt;br /&gt;
{{!}}This transport doesn't support sendCustomNotice command.&lt;br /&gt;
{{!}}9.0.008.04&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}} &lt;br /&gt;
&lt;br /&gt;
===sendTyping===&lt;br /&gt;
&lt;br /&gt;
Sends a &amp;quot;''Customer typing''&amp;quot; notification to the chat session. A visual indication will be shown to the agent. &lt;br /&gt;
&lt;br /&gt;
====Example====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
oMyPlugin.command('WebChatService.sendTyping').done(function(e){&lt;br /&gt;
&lt;br /&gt;
	// WebChatService sent typing successfully&lt;br /&gt;
&lt;br /&gt;
}).fail(function(e){&lt;br /&gt;
&lt;br /&gt;
	// WebChatService failed to send typing&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Options====&lt;br /&gt;
&lt;br /&gt;
{{{!}} &lt;br /&gt;
{{!}}- &lt;br /&gt;
!Option&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}Message&lt;br /&gt;
{{!}}String&lt;br /&gt;
{{!}}The message you want to send along with the typing notification&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}} &lt;br /&gt;
&lt;br /&gt;
====Resolutions====&lt;br /&gt;
&lt;br /&gt;
{{{!}} &lt;br /&gt;
{{!}}- &lt;br /&gt;
!Status&lt;br /&gt;
!When&lt;br /&gt;
!Returns&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}resolved&lt;br /&gt;
{{!}}AJAX request is successful&lt;br /&gt;
{{!}}(AJAX Response Object)&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}rejected&lt;br /&gt;
{{!}}AJAX exception occurs&lt;br /&gt;
{{!}}(AJAX Response Object)&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}rejected&lt;br /&gt;
{{!}}No chat session is currently active&lt;br /&gt;
{{!}}'There is no active chat session'&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}} &lt;br /&gt;
&lt;br /&gt;
{{AnchorDiv|sfm}}&lt;br /&gt;
===sendFilteredMessage===&lt;br /&gt;
&lt;br /&gt;
Sends a message along with a regular expression to match the message and hide it from the client. Useful for sending codes and tokens through the WebChat interface to the Agent Desktop.&lt;br /&gt;
&lt;br /&gt;
{{NoteFormat|Filters are now automatically stored and recalled on chat restore for the duration of the session.}}&lt;br /&gt;
&lt;br /&gt;
====Example====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
oMyPlugin.command('WebChatService.sendFilteredMessage', {&lt;br /&gt;
&lt;br /&gt;
	message: 'filtered message',&lt;br /&gt;
	regex: /[a-zA-Z]/&lt;br /&gt;
&lt;br /&gt;
}).done(function(e){&lt;br /&gt;
&lt;br /&gt;
	// WebChatService sent filtered message successfully&lt;br /&gt;
&lt;br /&gt;
}).fail(function(e){&lt;br /&gt;
&lt;br /&gt;
	// WebChatService failed to send filtered message&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Options====&lt;br /&gt;
&lt;br /&gt;
{{{!}} &lt;br /&gt;
{{!}}- &lt;br /&gt;
!Option&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}message&lt;br /&gt;
{{!}}string&lt;br /&gt;
{{!}}Message you want to send but don't want to appear in the transcript&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}regex&lt;br /&gt;
{{!}}RegExp&lt;br /&gt;
{{!}}Regular expression to match the message&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}} &lt;br /&gt;
&lt;br /&gt;
====Resolutions====&lt;br /&gt;
{{{!}} &lt;br /&gt;
{{!}}- &lt;br /&gt;
!Status&lt;br /&gt;
!When&lt;br /&gt;
!Returns&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}resolved&lt;br /&gt;
{{!}}There is an active session&lt;br /&gt;
{{!}}n/a&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}rejected&lt;br /&gt;
{{!}}No chat session is currently active&lt;br /&gt;
{{!}}'No active chat session'&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}} &lt;br /&gt;
&lt;br /&gt;
 {{AnchorDiv|ap}}&lt;br /&gt;
===addPrefilter===&lt;br /&gt;
&lt;br /&gt;
Adds a new pre-filter regular expression to the pre-filter list. Any messages matched using the pre-filters will not be shown in the transcript&lt;br /&gt;
&lt;br /&gt;
{{NoteFormat|Filters are now automatically stored and recalled on chat restore for the duration of the session.}}&lt;br /&gt;
&lt;br /&gt;
====Example====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
oMyPlugin.command('WebChatService.addPrefilter', {filters: /[a-zA-Z]/}).done(function(e){&lt;br /&gt;
&lt;br /&gt;
	// WebChatService added filter successfully&lt;br /&gt;
	// e == Object of registered prefilters&lt;br /&gt;
&lt;br /&gt;
}).fail(function(e){&lt;br /&gt;
&lt;br /&gt;
	// WebChatService failed to add filter&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Options====&lt;br /&gt;
&lt;br /&gt;
{{{!}} &lt;br /&gt;
{{!}}- &lt;br /&gt;
!Option&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}filters&lt;br /&gt;
{{!}}RegExp or Array of RegExp&lt;br /&gt;
{{!}}Regular Expression(s) to add to the prefilter list&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}} &lt;br /&gt;
&lt;br /&gt;
====Resolutions====&lt;br /&gt;
{{{!}} &lt;br /&gt;
{{!}}- &lt;br /&gt;
!Status&lt;br /&gt;
!When&lt;br /&gt;
!Returns&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}resolved&lt;br /&gt;
{{!}}Valid filters are provided&lt;br /&gt;
{{!}}Array of all registered prefilters.&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}rejected&lt;br /&gt;
{{!}}Invalid or missing filters provided&lt;br /&gt;
{{!}}'Missing or invalid filters provided. Please provide a regular expression or an array of regular expressions.'&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}} &lt;br /&gt;
&lt;br /&gt;
===updateUserData===&lt;br /&gt;
&lt;br /&gt;
Updates the userData properties associated with the chat session. If this command is called before a chat session starts, it will update the internal userData object and will be sent when a chat session starts. If this command is called after a chat session starts, a request to the server will be made to update the userData on the server associated with the chat session.&lt;br /&gt;
&lt;br /&gt;
====Example====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
oMyPlugin.command('WebChatService.updateUserData', {firstname: 'Joe'}).done(function(e){&lt;br /&gt;
&lt;br /&gt;
	// WebChatService updated user data successfully&lt;br /&gt;
&lt;br /&gt;
}).fail(function(e){&lt;br /&gt;
&lt;br /&gt;
	// WebChatService failed to update user data&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Options====&lt;br /&gt;
&lt;br /&gt;
{{{!}} &lt;br /&gt;
{{!}}- &lt;br /&gt;
!Option&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}n/a&lt;br /&gt;
{{!}}object&lt;br /&gt;
{{!}}userData object you want to send to the server for this active session&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}} &lt;br /&gt;
&lt;br /&gt;
====Resolutions====&lt;br /&gt;
&lt;br /&gt;
{{{!}} &lt;br /&gt;
{{!}}- &lt;br /&gt;
!Status&lt;br /&gt;
!When&lt;br /&gt;
!Returns&lt;br /&gt;
!Introduced/Updated&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}resolved&lt;br /&gt;
{{!}}Session is active and userData is successfully sent&lt;br /&gt;
{{!}}(AJAX Response Object)&lt;br /&gt;
{{!}}&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}rejected&lt;br /&gt;
{{!}}Session is active and AJAX exception occurs&lt;br /&gt;
{{!}}(AJAX Response Object)&lt;br /&gt;
{{!}}&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}resolved&lt;br /&gt;
{{!}}Session is not active and internal userData object is merged with new userData properties provided&lt;br /&gt;
{{!}}The internal userData object that will be sent to the server&lt;br /&gt;
{{!}}&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}rejected&lt;br /&gt;
{{!}}Session is active and the server doesn't support updating userData&lt;br /&gt;
{{!}}This transport doesn't support updating userData during an active chat session.&lt;br /&gt;
{{!}}9.0.008.04&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}} &lt;br /&gt;
&lt;br /&gt;
===poll===&lt;br /&gt;
&lt;br /&gt;
Internal use only. Starts polling for new messages. &lt;br /&gt;
&lt;br /&gt;
====Example====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
oMyPlugin.command('WebChatService.poll').done(function(e){&lt;br /&gt;
&lt;br /&gt;
	// WebChatService started polling successfully&lt;br /&gt;
&lt;br /&gt;
}).fail(function(e){&lt;br /&gt;
&lt;br /&gt;
	// WebChatService failed to start polling&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Resolutions====&lt;br /&gt;
&lt;br /&gt;
{{{!}} &lt;br /&gt;
{{!}}- &lt;br /&gt;
!Status&lt;br /&gt;
!When&lt;br /&gt;
!Returns&lt;br /&gt;
!Introduced/Updated&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}resolved&lt;br /&gt;
{{!}}There is an active session&lt;br /&gt;
{{!}}n/a&lt;br /&gt;
{{!}}&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}rejected&lt;br /&gt;
{{!}}WebChatService isn't calling this command&lt;br /&gt;
{{!}}'Access Denied to private command. Only WebChatService is allowed to invoke this command.'&lt;br /&gt;
{{!}}&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}rejected&lt;br /&gt;
{{!}}No chat session is currently active&lt;br /&gt;
{{!}}'previous poll has not finished.'&lt;br /&gt;
{{!}}&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}rejected&lt;br /&gt;
{{!}}The server doesn't support polling&lt;br /&gt;
{{!}}'This transport doesn't support polling.'&lt;br /&gt;
{{!}}9.0.008.04&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}} &lt;br /&gt;
&lt;br /&gt;
===startPoll===&lt;br /&gt;
&lt;br /&gt;
Starts automatic polling for new messages. &lt;br /&gt;
&lt;br /&gt;
====Example====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
oMyPlugin.command('WebChatService.startPoll').done(function(e){&lt;br /&gt;
&lt;br /&gt;
	// WebChatService started polling successfully&lt;br /&gt;
&lt;br /&gt;
}).fail(function(e){&lt;br /&gt;
&lt;br /&gt;
	// WebChatService failed to start polling&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Resolutions====&lt;br /&gt;
&lt;br /&gt;
{{{!}} &lt;br /&gt;
{{!}}- &lt;br /&gt;
!Status&lt;br /&gt;
!When&lt;br /&gt;
!Returns&lt;br /&gt;
!Introduced / Updated&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}resolved&lt;br /&gt;
{{!}}There is an active session&lt;br /&gt;
{{!}}n/a&lt;br /&gt;
{{!}}&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}rejected&lt;br /&gt;
{{!}}No chat session is currently active&lt;br /&gt;
{{!}}No active chat session&lt;br /&gt;
{{!}}&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}rejected&lt;br /&gt;
{{!}}The server doesn't support polling&lt;br /&gt;
{{!}}This transport doesn't support polling&lt;br /&gt;
{{!}}9.0.008.04&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}} &lt;br /&gt;
&lt;br /&gt;
===stopPoll===&lt;br /&gt;
&lt;br /&gt;
Stops automatic polling for new messages. &lt;br /&gt;
&lt;br /&gt;
====Example====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
oMyPlugin.command('WebChatService.stopPoll').done(function(e){&lt;br /&gt;
&lt;br /&gt;
	// WebChatService stopped polling successfully&lt;br /&gt;
&lt;br /&gt;
}).fail(function(e){&lt;br /&gt;
&lt;br /&gt;
	// WebChatService failed to stop polling&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Resolutions====&lt;br /&gt;
&lt;br /&gt;
{{{!}} &lt;br /&gt;
{{!}}- &lt;br /&gt;
!Status&lt;br /&gt;
!When&lt;br /&gt;
!Returns&lt;br /&gt;
!Introduced / Updated&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}resolved&lt;br /&gt;
{{!}}There is an active session&lt;br /&gt;
{{!}}n/a&lt;br /&gt;
{{!}}&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}rejected&lt;br /&gt;
{{!}}No chat session is currently active&lt;br /&gt;
{{!}}No active chat session&lt;br /&gt;
{{!}}&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}rejected&lt;br /&gt;
{{!}}The server doesn't support polling&lt;br /&gt;
{{!}}This transport doesn't support polling&lt;br /&gt;
{{!}}9.0.008.04&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}} &lt;br /&gt;
&lt;br /&gt;
===resetPollExceptions===&lt;br /&gt;
&lt;br /&gt;
Resets the poll exception count to 0. pollExceptionLimit is set in the configuration.&lt;br /&gt;
&lt;br /&gt;
====Example====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
oMyPlugin.command('WebChatService.resetPollExceptions').done(function(e){&lt;br /&gt;
&lt;br /&gt;
	// WebChatService reset polling successfully&lt;br /&gt;
&lt;br /&gt;
}).fail(function(e){&lt;br /&gt;
&lt;br /&gt;
	// WebChatService failed to reset polling&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Resolutions====&lt;br /&gt;
&lt;br /&gt;
{{{!}} &lt;br /&gt;
{{!}}- &lt;br /&gt;
!Status&lt;br /&gt;
!When&lt;br /&gt;
!Returns&lt;br /&gt;
!Introduced / Updated&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}resolved&lt;br /&gt;
{{!}}Always&lt;br /&gt;
{{!}}n/a&lt;br /&gt;
{{!}}&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}rejected&lt;br /&gt;
{{!}}The server doesn't support polling&lt;br /&gt;
{{!}}This transport doesn't support resetPollExceptions command.&lt;br /&gt;
{{!}}9.0.008.04&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}} &lt;br /&gt;
&lt;br /&gt;
===restore===&lt;br /&gt;
&lt;br /&gt;
Internal use only. You should not invoke this manually unless you are using Async mode.&lt;br /&gt;
&lt;br /&gt;
====Example====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
oMyPlugin.command('WebChatService.restore').done(function(e){&lt;br /&gt;
&lt;br /&gt;
	// WebChatService restored successfully&lt;br /&gt;
&lt;br /&gt;
}).fail(function(e){&lt;br /&gt;
&lt;br /&gt;
	// WebChatService failed to restore&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Options====&lt;br /&gt;
&lt;br /&gt;
{{{!}} &lt;br /&gt;
{{!}}- &lt;br /&gt;
!Option&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
!Accepted Values&lt;br /&gt;
!Introduced / Updated&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}sessionData&lt;br /&gt;
{{!}}string&lt;br /&gt;
{{!}}The session data that is needed to restore the WebChat in Async mode. It is a JWT token string value. Applicable only when using WebChat with Genesys Engage v3 API. For more information, see the “Genesys Engage v3” tab in the “Options” table in {{Link-SomewhereInThisVersion|manual=SDK|topic=WebChatService-combined|anchor=options|display text=configuration options}}.&lt;br /&gt;
{{!}}(JWT string token)&lt;br /&gt;
{{!}}9.0.008.04&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}} &lt;br /&gt;
&lt;br /&gt;
====Resolutions====&lt;br /&gt;
&lt;br /&gt;
{{{!}} &lt;br /&gt;
{{!}}- &lt;br /&gt;
!Status&lt;br /&gt;
!When&lt;br /&gt;
!Returns&lt;br /&gt;
!Introduced / Updated&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}resolved&lt;br /&gt;
{{!}}Session has been found&lt;br /&gt;
{{!}}n/a&lt;br /&gt;
{{!}}&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}rejected&lt;br /&gt;
{{!}}Session cannot be found&lt;br /&gt;
{{!}}n/a&lt;br /&gt;
{{!}}&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}rejected&lt;br /&gt;
{{!}}Restoring chat session is in progress&lt;br /&gt;
{{!}}Already restoring. Ignoring request.&lt;br /&gt;
{{!}}9.0.002.06&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}rejected&lt;br /&gt;
{{!}}Chat session is already active&lt;br /&gt;
{{!}}Chat session is already active, ignoring restore command.&lt;br /&gt;
{{!}}9.0.002.06&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}rejected&lt;br /&gt;
{{!}}Trying restore chat session manually&lt;br /&gt;
{{!}}Access Denied to private command. Only WebChatService is allowed to invoke this command in Non-Async mode.&lt;br /&gt;
{{!}}9.0.002.06&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}} &lt;br /&gt;
&lt;br /&gt;
===getTranscript===&lt;br /&gt;
&lt;br /&gt;
Fetches an array of all messages in the chat session.&lt;br /&gt;
&lt;br /&gt;
{{NoteFormat|1=For more information on the fields included in JSON response, see {{#Widget:ExtLink|link=https://docs.genesys.com/Documentation/GMS/latest/API/APIResponses#Digital_Channels_Chat_V2_Response_Format|displaytext=Digital Channels Chat V2 Response Format}}.|2=}}&lt;br /&gt;
&lt;br /&gt;
====Example====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
oMyPlugin.command('WebChatService.getTranscript').done(function(e){&lt;br /&gt;
&lt;br /&gt;
	// WebChatService got transcript successfully&lt;br /&gt;
	// e == Object with an array of messages&lt;br /&gt;
&lt;br /&gt;
}).fail(function(e){&lt;br /&gt;
&lt;br /&gt;
	// WebChatService failed to get transcript&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Resolutions====&lt;br /&gt;
&lt;br /&gt;
{{{!}} &lt;br /&gt;
{{!}}- &lt;br /&gt;
!Status&lt;br /&gt;
!When&lt;br /&gt;
!Returns&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}resolved&lt;br /&gt;
{{!}}Always&lt;br /&gt;
{{!}}Object with an array of messages&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}} &lt;br /&gt;
&lt;br /&gt;
===getAgents===&lt;br /&gt;
&lt;br /&gt;
Return a list of agents currently participating in the chat. Includes agent metadata.&lt;br /&gt;
&lt;br /&gt;
====Example====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
oMyPlugin.command('WebChatService.getAgents').done(function(e){&lt;br /&gt;
&lt;br /&gt;
	// WebChatService got agents successfully&lt;br /&gt;
	// e == Object with agents information in chat&lt;br /&gt;
&lt;br /&gt;
}).fail(function(e){&lt;br /&gt;
&lt;br /&gt;
	// WebChatService failed to get agents&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Resolutions====&lt;br /&gt;
&lt;br /&gt;
{{{!}} &lt;br /&gt;
{{!}}- &lt;br /&gt;
!Status&lt;br /&gt;
!When&lt;br /&gt;
!Returns&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}resolved&lt;br /&gt;
{{!}}Always&lt;br /&gt;
{{!}}(Object List) {name: (String), connected: (Boolean), supervisor: (Boolean), connectedTime: (int time),disconnectedTime: (int time)}&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}} &lt;br /&gt;
&lt;br /&gt;
===getStats===&lt;br /&gt;
&lt;br /&gt;
Returns stats on chat session including start time, end time, duration, and list of agents.&lt;br /&gt;
&lt;br /&gt;
====Example====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
oMyPlugin.command('WebChatService.getStats').done(function(e){&lt;br /&gt;
&lt;br /&gt;
	// WebChatService got stats successfully&lt;br /&gt;
	// e == Object with chat session stats&lt;br /&gt;
&lt;br /&gt;
}).fail(function(e){&lt;br /&gt;
&lt;br /&gt;
	// WebChatService failed to get stats&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Resolutions====&lt;br /&gt;
&lt;br /&gt;
{{{!}} &lt;br /&gt;
{{!}}- &lt;br /&gt;
!Status&lt;br /&gt;
!When&lt;br /&gt;
!Returns&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}resolved&lt;br /&gt;
{{!}}Always&lt;br /&gt;
{{!}}{agents: (Object), startTime: (int time), endTime: (int time), duration: (int time)}&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}} &lt;br /&gt;
&lt;br /&gt;
===sendFile===&lt;br /&gt;
&lt;br /&gt;
'''[Introduced: 9.0.008.04]'''&lt;br /&gt;
&lt;br /&gt;
Sends the file from the client machine to the agent.&lt;br /&gt;
&lt;br /&gt;
====Example====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
oMyPlugin.command('WebChatService.sendFile', {files: $('&amp;lt;input/&amp;gt;').attr('type', 'file') /* Only works on UI, can not dynamically change */ }).done(function(e){&lt;br /&gt;
&lt;br /&gt;
	// WebChatService sent file successfully&lt;br /&gt;
&lt;br /&gt;
}).fail(function(e){&lt;br /&gt;
&lt;br /&gt;
	// WebChatService failed to send file&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Options====&lt;br /&gt;
&lt;br /&gt;
{{{!}} &lt;br /&gt;
{{!}}- &lt;br /&gt;
!Option&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}files&lt;br /&gt;
{{!}}File&lt;br /&gt;
{{!}}A reference to a file input element (for example &amp;lt;input type=“file”/&amp;gt;)&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}} &lt;br /&gt;
&lt;br /&gt;
====Resolutions====&lt;br /&gt;
&lt;br /&gt;
{{{!}} &lt;br /&gt;
{{!}}- &lt;br /&gt;
!Status&lt;br /&gt;
!When&lt;br /&gt;
!Returns&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}resolved&lt;br /&gt;
{{!}}The file sent is a valid type and size&lt;br /&gt;
{{!}}(AJAX Response Object)&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}rejected&lt;br /&gt;
{{!}}The file sent is an invalid type&lt;br /&gt;
{{!}}(AJAX Response Object)&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}rejected&lt;br /&gt;
{{!}}The number of uploads is exceeded&lt;br /&gt;
{{!}}(AJAX Response Object)&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}rejected&lt;br /&gt;
{{!}}The file size exceeds the limit&lt;br /&gt;
{{!}}(AJAX Response Object)&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}rejected&lt;br /&gt;
{{!}}The file size is too large or an unknown error occurs&lt;br /&gt;
{{!}}(AJAX Response Object)&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}rejected&lt;br /&gt;
{{!}}The server doesn't support file uploads&lt;br /&gt;
{{!}}This transport doesn't support file uploads&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}} &lt;br /&gt;
&lt;br /&gt;
===downloadFile===&lt;br /&gt;
&lt;br /&gt;
====Downloads the file to the client machine.   Example====&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
oMyPlugin.command('WebChatService.downloadFile', {fileId: '1', fileName: 'myfile.txt'}).done(function(e){&lt;br /&gt;
&lt;br /&gt;
	// WebChatService sent file successfully&lt;br /&gt;
&lt;br /&gt;
}).fail(function(e){&lt;br /&gt;
&lt;br /&gt;
	// WebChatService failed to send file&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Options====&lt;br /&gt;
{{{!}} &lt;br /&gt;
{{!}}- &lt;br /&gt;
!Option&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}field&lt;br /&gt;
{{!}}string&lt;br /&gt;
{{!}}This is the id of the file to be downloaded from the session&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}} &lt;br /&gt;
&lt;br /&gt;
====Resolutions====&lt;br /&gt;
&lt;br /&gt;
{{{!}} &lt;br /&gt;
{{!}}- &lt;br /&gt;
!Status&lt;br /&gt;
!When&lt;br /&gt;
!Returns&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}resolved&lt;br /&gt;
{{!}}The file is downloaded successfully&lt;br /&gt;
{{!}}n/a&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}} &lt;br /&gt;
&lt;br /&gt;
===getSessionData===&lt;br /&gt;
&lt;br /&gt;
'''[Introduced: 9.0.002.06]'''&lt;br /&gt;
&lt;br /&gt;
Retrieves the active session data at any time.&lt;br /&gt;
&lt;br /&gt;
====Example====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
oMyPlugin.command('WebChatService.getSessionData')&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Resolutions====&lt;br /&gt;
&lt;br /&gt;
{{{!}} &lt;br /&gt;
{{!}}- &lt;br /&gt;
!Status&lt;br /&gt;
!When&lt;br /&gt;
!Returns&lt;br /&gt;
!Introduced / Updated&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}resolved&lt;br /&gt;
{{!}}Always, when using Chat via GMS API. For more information, see the 'GMS' tab in the 'Options' table in {{Link-SomewhereInThisVersion|manual=SDK|topic=WebChatService-combined|anchor=options|display text=configuration options}}.&lt;br /&gt;
{{!}}{secureKey: (string), sessionID: (number/string), alias: (number/string), userId: (number/string)}&lt;br /&gt;
{{!}}&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}resolved&lt;br /&gt;
{{!}}Always, when using Chat via Genesys Engage v3 API. For more information, see the 'Genesys Engage v3' tab in the 'Options' table in {{Link-SomewhereInThisVersion|manual=SDK|topic=WebChatService-combined|anchor=options|display text=configuration options}}.&lt;br /&gt;
{{!}}{participantId: (string), sessionId: {string), token: (string), transportId: (string)}&lt;br /&gt;
{{!}}9.0.008.04&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}rejected&lt;br /&gt;
{{!}}Never&lt;br /&gt;
{{!}}undefined&lt;br /&gt;
{{!}}&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}} &lt;br /&gt;
&lt;br /&gt;
===fetchHistory===&lt;br /&gt;
&lt;br /&gt;
'''[Introduced: 9.0.008.04]'''&lt;br /&gt;
&lt;br /&gt;
This applies only in Asynchronous mode to fetch older chat messages. It does not fetch all of the messages at once; rather a certain number of messages are fetched every time this command is called. Response data will be available in the {{Link-SomewhereInThisVersion|manual=SDK|topic=WebChatService-combined|anchor=events|display text=messageReceived}} event.&lt;br /&gt;
&lt;br /&gt;
====Example====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
oMyPlugin.command('WebChatService.fetchHistory')&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Resolutions====&lt;br /&gt;
&lt;br /&gt;
{{{!}} &lt;br /&gt;
{{!}}- &lt;br /&gt;
!Status&lt;br /&gt;
!When&lt;br /&gt;
!Returns&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}resolved&lt;br /&gt;
{{!}}Old messages are retrieved&lt;br /&gt;
{{!}}(AJAX Response Object)&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}rejected&lt;br /&gt;
{{!}}Request fails&lt;br /&gt;
{{!}}(AJAX Response Object)&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}rejected&lt;br /&gt;
{{!}}Asynchronous mode is not enabled&lt;br /&gt;
{{!}}Fetching history messages applies only to Asynchronous chat&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}rejected&lt;br /&gt;
{{!}}All messages are received&lt;br /&gt;
{{!}}No more messages to fetch&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}} &lt;br /&gt;
&lt;br /&gt;
===registerTypingPreviewInput===&lt;br /&gt;
&lt;br /&gt;
Selects an HTML input to watch for key events. Used to trigger startTyping and stopTyping automatically. &lt;br /&gt;
&lt;br /&gt;
====Example====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
oMyPlugin.command('WebChatService.registerTypingPreviewInput', {input: $('input') }).done(function(e){&lt;br /&gt;
&lt;br /&gt;
	// WebChatService registered input area successfully&lt;br /&gt;
&lt;br /&gt;
}).fail(function(e){&lt;br /&gt;
&lt;br /&gt;
	// WebChatService failed to register typing preview&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Options====&lt;br /&gt;
&lt;br /&gt;
{{{!}} &lt;br /&gt;
{{!}}- &lt;br /&gt;
!Option&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}input&lt;br /&gt;
{{!}}HTML Reference&lt;br /&gt;
{{!}}An HTML reference to a text or textarea input&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}} &lt;br /&gt;
&lt;br /&gt;
====Resolutions====&lt;br /&gt;
&lt;br /&gt;
{{{!}} &lt;br /&gt;
{{!}}- &lt;br /&gt;
!Status&lt;br /&gt;
!When&lt;br /&gt;
!Returns&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}resolved&lt;br /&gt;
{{!}}Valid HTML input reference is provided&lt;br /&gt;
{{!}}n/a&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}rejected&lt;br /&gt;
{{!}}Invalid or missing HTML input reference&lt;br /&gt;
{{!}}'Invalid value provided for the 'input' property. An HTML element reference to a textarea or text input is required.'&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}} &lt;br /&gt;
&lt;br /&gt;
===registerPreProcessor===&lt;br /&gt;
&lt;br /&gt;
Registers a function that receives the message object, allowing you to manipulate the values before it is rendered in the transcript.&lt;br /&gt;
&lt;br /&gt;
====Example====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
oMyPlugin.command('WebChatService.registerPreProcessor', {preprocessor: function(message){&lt;br /&gt;
 	message.text = message.text + ' some preprocessing text'; &lt;br /&gt;
 	return message;&lt;br /&gt;
 } }).done(function(e){&lt;br /&gt;
 	// WebChatService registered preprocessor function&lt;br /&gt;
 	// e == function that was registered&lt;br /&gt;
 }).fail(function(e){&lt;br /&gt;
 	// WebChatService failed to register function&lt;br /&gt;
 });&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Options====&lt;br /&gt;
{{{!}} class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Option&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}preprocessor&lt;br /&gt;
{{!}}function&lt;br /&gt;
{{!}}The preprocessor function you want to register.&lt;br /&gt;
{{!}}}&lt;br /&gt;
&lt;br /&gt;
====Resolutions====&lt;br /&gt;
{{{!}} class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Status&lt;br /&gt;
!When&lt;br /&gt;
!Returns&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}resolved&lt;br /&gt;
{{!}}A valid preprocessor function is provided and is registered&lt;br /&gt;
{{!}}The registered preprocessor function.&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}rejected&lt;br /&gt;
{{!}}An invalid preprocessor function is provided&lt;br /&gt;
{{!}}No preprocessor function provided. Type provided was '&amp;lt;DATATYPE&amp;gt;'.&amp;lt;br /&amp;gt;&lt;br /&gt;
{{!}}}&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
|Status=No&lt;br /&gt;
}}{{Section&lt;br /&gt;
|sectionHeading=API events&lt;br /&gt;
|anchor=events&lt;br /&gt;
|alignment=Vertical&lt;br /&gt;
|structuredtext=Once you've registered your plugin on the bus, you can subscribe to and listen for published events. Here's how to use the global bus object to register a new plugin on the bus.&lt;br /&gt;
&lt;br /&gt;
{{NoteFormat|The global bus object is a debugging tool. When implementing Widgets on your own site, do not use the global bus object to register your custom plugins. Instead, see {{Link-SomewhereInThisVersion|manual=SDK|topic=GWCBusExtensions|display text=Genesys Widgets Extensions}} for more information about extending Genesys Widgets.|1}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;var oMyPlugin = window._genesys.widgets.bus.registerPlugin('MyPlugin');&lt;br /&gt;
&lt;br /&gt;
oMyPlugin.subscribe('WebChatService.ready', function(e){});&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{{!}} class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Name&lt;br /&gt;
!Description&lt;br /&gt;
!Data&lt;br /&gt;
!Introduced/updated&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}ready&lt;br /&gt;
{{!}}WebChatService is initialized and ready to accept commands.&lt;br /&gt;
{{!}}n/a&lt;br /&gt;
{{!}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}restored&lt;br /&gt;
{{!}}Chat session has been restored after page navigation or refresh. In Asynchronous mode, this event includes data indicating whether a chat session has been restored in Async mode or not.&lt;br /&gt;
{{!}}{async: (boolean)}&lt;br /&gt;
{{!}}9.0.002.06&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}restoreTimeout&lt;br /&gt;
{{!}}Chat session restoration attempted was denied after user navigated away from originating website for longer than the time limit: default 60 seconds.&lt;br /&gt;
{{!}}n/a&lt;br /&gt;
{{!}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}restoreFailed&lt;br /&gt;
{{!}}Could not restore chat session after page navigation or refresh.&lt;br /&gt;
{{!}}n/a&lt;br /&gt;
{{!}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}restoredOffline&lt;br /&gt;
{{!}}Chat session was restored normally but chat server is offline. This means no messages can come through. When chat server is comes back online, 'chatServerBackOnline' is published.&lt;br /&gt;
{{!}}n/a&lt;br /&gt;
{{!}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}messageReceived&lt;br /&gt;
{{!}}A new message has been received from the server. Includes text messages, status messages, notices, and other message types.&lt;br /&gt;
{{!}}{originalMessages: (object), messages: (array of objects), restoring: (boolean), sessionData: (object)}&lt;br /&gt;
{{!}}9.0.002.06&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}error&lt;br /&gt;
{{!}}An error occurred between the client and the server.&lt;br /&gt;
{{!}}(AJAX Response)&lt;br /&gt;
{{!}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}started&lt;br /&gt;
{{!}}Chat session has successfully started.&lt;br /&gt;
{{!}}(AJAX Response containing session data)&lt;br /&gt;
{{!}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}ended&lt;br /&gt;
{{!}}Chat session has successfully ended.&lt;br /&gt;
{{!}}n/a&lt;br /&gt;
{{!}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}agentTypingStarted&lt;br /&gt;
{{!}}Agents has started typing a new message.&lt;br /&gt;
{{!}}(AJAX Response)&lt;br /&gt;
{{!}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}agentTypingStopped&lt;br /&gt;
{{!}}Agent has stopped typing.&lt;br /&gt;
{{!}}(AJAX Response)&lt;br /&gt;
{{!}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}pollingStarted&lt;br /&gt;
{{!}}Chat server automatic polling has started.&lt;br /&gt;
{{!}}n/a&lt;br /&gt;
{{!}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}pollingStopped&lt;br /&gt;
{{!}}Chat server automatic polling has stopped.&lt;br /&gt;
{{!}}n/a&lt;br /&gt;
{{!}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}clientConnected&lt;br /&gt;
{{!}}Indicates the user has been connected to the chat session.&lt;br /&gt;
{{!}}{message: (object), agents: (object), numAgentsConnected: (number)}&lt;br /&gt;
{{!}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}clientDisconnected&lt;br /&gt;
{{!}}Indicates the user has been disconnected form the chat session.&lt;br /&gt;
{{!}}{message: (object), agents: (object), numAgentsConnected: (number)}&lt;br /&gt;
{{!}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}agentConnected&lt;br /&gt;
{{!}}Indicates an agent has connected to the chat.&lt;br /&gt;
{{!}}{message: (object), agents: (object), numAgentsConnected: (number)}&lt;br /&gt;
{{!}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}agentDisconnected&lt;br /&gt;
{{!}}Indicates an agent has disconnected from the chat.&lt;br /&gt;
{{!}}{message: (object), agents: (object), numAgentsConnected: (number)}&lt;br /&gt;
{{!}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}supervisorConnected&lt;br /&gt;
{{!}}Indicates a supervisor has connected to the chat.&lt;br /&gt;
{{!}}{message: (object), agents: (object), numAgentsConnected: (number)}&lt;br /&gt;
{{!}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}supervisorDisconnected&lt;br /&gt;
{{!}}Indicates a supervisor has disconnected from the chat.&lt;br /&gt;
{{!}}{message: (object), agents: (object), numAgentsConnected: (number)}&lt;br /&gt;
{{!}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}botConnected&lt;br /&gt;
{{!}}Indicates a bot has connected to the chat.&lt;br /&gt;
{{NoteFormat|This event is applicable only when using {{Link-SomewhereInThisVersion|manual=SDK|topic=WebChatService-combined|anchor=v2|display text=v2 API}}.|}}&lt;br /&gt;
{{!}}{message: (object), agents: (object), numAgentsConnected: (number)}&lt;br /&gt;
{{!}}9.0.014.13&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}botDisconnected&lt;br /&gt;
{{!}}Indicates a bot has disconnected from the chat.&lt;br /&gt;
{{NoteFormat|This event is applicable only when using {{Link-SomewhereInThisVersion|manual=SDK|topic=WebChatService-combined|anchor=v2|display text=v2 API}}.|}}&lt;br /&gt;
{{!}}{message: (object), agents: (object), numAgentsConnected: (number)}&lt;br /&gt;
{{!}}9.0.014.13&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}clientTypingStarted&lt;br /&gt;
{{!}}The user has started typing. Sends an event to the agent.&lt;br /&gt;
{{!}}n/a&lt;br /&gt;
{{!}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}clientTypingStopped&lt;br /&gt;
{{!}}After a user stops typing, a countdown begins. When the countdown completes, the typing notification will clear for the agent.&lt;br /&gt;
{{!}}n/a&lt;br /&gt;
{{!}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}disconnected&lt;br /&gt;
{{!}}Cannot reach servers. No connection. Either the user is offline or the server is offline.&lt;br /&gt;
{{!}}n/a&lt;br /&gt;
{{!}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}reconnected&lt;br /&gt;
{{!}}Connection restored. This event is only published after 'disconnected'.&lt;br /&gt;
{{!}}n/a&lt;br /&gt;
{{!}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}chatServerWentOffline&lt;br /&gt;
{{!}}Chat server has gone offline but chat session has not ended. New messages are temporarily unavailable. This event is published only after the configuration option 'pollExceptionLimit' has been exceeded. Default limit is 5 poll exceptions. 'restoredOffline' is an alternate to this event that is used only when the chat server is down while trying to restore your chat session. The reason for having two events is to allow for separate handling of both scenarios. {{NoteFormat|This event is applicable only when using {{Link-SomewhereInThisVersion|manual=SDK|topic=WebChatService-combined|anchor=v2|display text=v2 API}}.|}}&lt;br /&gt;
{{!}}n/a&lt;br /&gt;
{{!}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}chatServerBackOnline&lt;br /&gt;
{{!}}Chat server had come back online after going offline. This will only be published after 'chatServerWentOffline'.&lt;br /&gt;
{{NoteFormat|This event is applicable only when using {{Link-SomewhereInThisVersion|manual=SDK|topic=WebChatService-combined|anchor=v2|display text=v2 API}}.|}}&lt;br /&gt;
{{!}}n/a&lt;br /&gt;
{{!}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}connectionPending&lt;br /&gt;
{{!}}If there is a connection problem and WebChatService is trying to reconnect, this event will be published. Published before 'chatServerWentOffline'.&lt;br /&gt;
{{NoteFormat|This event is applicable only when using {{Link-SomewhereInThisVersion|manual=SDK|topic=WebChatService-combined|anchor=v2|display text=v2 API}}.|}}&lt;br /&gt;
{{!}}n/a&lt;br /&gt;
{{!}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}connectionRestored&lt;br /&gt;
{{!}}Is published when the connection has be reestablished. Publishes at the same time as 'chatServerBackOnline'.&lt;br /&gt;
{{!}}n/a&lt;br /&gt;
{{!}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}}&lt;br /&gt;
|Status=No&lt;br /&gt;
}}&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Chrissyforrest</name></author>
		
	</entry>
	<entry>
		<id>https://all.docs.genesys.com/index.php?title=WID/Current/Developer/GWCCookies&amp;diff=69773</id>
		<title>WID/Current/Developer/GWCCookies</title>
		<link rel="alternate" type="text/html" href="https://all.docs.genesys.com/index.php?title=WID/Current/Developer/GWCCookies&amp;diff=69773"/>
		<updated>2020-10-29T15:40:03Z</updated>

		<summary type="html">&lt;p&gt;Chrissyforrest: Published&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Article&lt;br /&gt;
|Standalone=No&lt;br /&gt;
|DisplayName=Cookies&lt;br /&gt;
|TocName=Cookies&lt;br /&gt;
|Context=Learn which session cookies are used by Genesys Widgets to restore chat sessions, track the state of the UI, store a customer's decisions, and more.&lt;br /&gt;
|ComingSoon=No&lt;br /&gt;
|Platform=GenesysEngage-cloud&lt;br /&gt;
|Role=Administrator, Developer&lt;br /&gt;
|Section={{Section&lt;br /&gt;
|sectionHeading=Overview&lt;br /&gt;
|anchor=Overview&lt;br /&gt;
|alignment=Vertical&lt;br /&gt;
|structuredtext====Purpose===&lt;br /&gt;
Genesys Widgets uses cookies to store non-sensitive data in the browser. The end-user's browser must allow cookies for Genesys Widgets to operate properly. Each cookie is required, and without the ability to read and write these cookies, Genesys Widgets features will not function properly.&lt;br /&gt;
&lt;br /&gt;
===Cookie creation===&lt;br /&gt;
All cookies start with the prefix &amp;quot;'''_genesys.widgets'''&amp;quot; to easily identify them. By default, Genesys Widgets cookies are created in a way that allows the cookies to be read across sub-domains by setting the &amp;quot;domain&amp;quot; attribute in the cookie options. We derive the proper domain value by parsing the host site's domain and extracting it.{{NoteFormat|Genesys Widgets never stores Personally Identifiable Information (PII) in its cookies.|}}&lt;br /&gt;
&lt;br /&gt;
===Duration===&lt;br /&gt;
All cookies used by Genesys Widgets are created as session cookies and will be deleted when the user's browser is fully closed.&lt;br /&gt;
===Sub-domains===&lt;br /&gt;
Normally, cookies cannot be transferred between sub-domains of a website unless they are configured to do so. Genesys Widgets automatically detects the domain of the host site and configures all cookies to be transferable between sub-domains. For example, you could start a chat on '''www.testsite.com''' and restore that chat session on '''store.testsite.com''', '''support.testsite.com''', or '''portal.testsite.com'''.&lt;br /&gt;
===Cookie support in test environments===&lt;br /&gt;
Genesys Widgets uses special cookies that persist across sub-domains. This is a critical feature for plugins like WebChat that need to restore an active chat session while navigating around a website. The side effect of using this type of cookie is they won't work when using test environment domain names such as &amp;quot;localhost&amp;quot; or an IP address. You must use a fully-qualified domain name (FQDN) such as &amp;quot;localhost.com&amp;quot; or any other variant that can be identified as a domain name. Cookies will also fail to work if you run the test site as an HTML file path directly in the browser.&lt;br /&gt;
&lt;br /&gt;
One workaround is to update your system's '''hosts''' file to create an FQDN alias for &amp;quot;localhost&amp;quot;, your test environment's name, or an IP address.&lt;br /&gt;
&lt;br /&gt;
'''Example'''&lt;br /&gt;
   127.0.0.1       localhost&lt;br /&gt;
   127.0.0.1       localhost.com&lt;br /&gt;
A fully-qualified domain name (FQDN) such as &amp;quot;localhost.com&amp;quot; or any other variant that can be identified as a domain name is not mandatory, but it is recommended. This way, the cookies will also work when using test environment domain names such as &amp;quot;localhost&amp;quot; or an IP address.&lt;br /&gt;
&lt;br /&gt;
The following is a list of cookies used by Genesys Widgets.&lt;br /&gt;
|Status=No&lt;br /&gt;
}}{{Section&lt;br /&gt;
|sectionHeading=App&lt;br /&gt;
|alignment=Vertical&lt;br /&gt;
|structuredtext=&amp;lt;br /&amp;gt;&lt;br /&gt;
{{{!}} class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Cookie Name&lt;br /&gt;
!Purpose&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}_genesys.widgets.app.autoLoadList&lt;br /&gt;
{{!}}Contains a list of active plugin names that are updated based on the usage of widgets during the {{Link-SomewhereInThisVersion|manual=Developer|topic=GWCDeployment|anchor=DeployingGenesysWidgetslazyloading|display text=lazy loading}}  deployment method. This is to ensure that a widget is auto-loaded during a page refresh or page navigation when there is an active session associated with it.&lt;br /&gt;
{{!}}}&lt;br /&gt;
|Status=No&lt;br /&gt;
}}{{Section&lt;br /&gt;
|sectionHeading=Console&lt;br /&gt;
|alignment=Vertical&lt;br /&gt;
|structuredtext=&amp;lt;br /&amp;gt;&lt;br /&gt;
{{{!}} class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Cookie Name&lt;br /&gt;
!Purpose&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}_genesys.widgets.console.session&lt;br /&gt;
{{!}}Contains the active Console plugin open/close state.&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}_genesys.widgets.console.commandPlugin&lt;br /&gt;
{{!}}Contains the selected plugin name from the Commands section.&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}_genesys.widgets.console.command&lt;br /&gt;
{{!}}Contains the selected command to run from the Commands section.&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}_genesys.widgets.console.eventPlugin&lt;br /&gt;
{{!}}Contains the selected plugin from the Events section to listen for events.&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}_genesys.widgets.console.event&lt;br /&gt;
{{!}}Contains the selected event type to listen against, from the Events section.&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}_genesys.widgets.console.optionsArea&lt;br /&gt;
{{!}}Contains the command options to send when executing a command.&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}_genesys.widgets.console.activeSubscriptions&lt;br /&gt;
{{!}}Contains the list of all active event subscriptions listening via the Console plugin.&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}_genesys.widgets.console.windowPosition&lt;br /&gt;
{{!}}Contains the position of the Console plugin on the screen.&lt;br /&gt;
{{!}}}&lt;br /&gt;
|Status=No&lt;br /&gt;
}}{{Section&lt;br /&gt;
|sectionHeading=WebChat&lt;br /&gt;
|alignment=Vertical&lt;br /&gt;
|structuredtext=&amp;lt;br /&amp;gt;&lt;br /&gt;
{{{!}} class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Cookie Name&lt;br /&gt;
!Purpose&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}_genesys.widgets.webchat.state.open&lt;br /&gt;
{{!}}Contains the WebChat Widget open or close state for internal tracking purposes.&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}_genesys.widgets.webchat.state.keys&lt;br /&gt;
{{!}}Can contain encrypted keys related to the current active chat session.&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}_genesys.widgets.webchat.state.ping&lt;br /&gt;
{{!}}Contains the time at which the last successful request was made to the server.&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}_genesys.widgets.webchat.metaData&lt;br /&gt;
{{!}}Contains all the {{Link-SomewhereInThisVersion|manual=SDK|topic=WebChat-combined#metadata|display text=Metadata}} details related to the current active chat session.&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}_genesys.widgets.webchat.state.index&lt;br /&gt;
{{!}}Contains the last unique Message ID for internal tracking purposes.&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}_genesys.widgets.webchat.state.filters&lt;br /&gt;
{{!}}Contains any prefilters that were added using WebChatService plugin commands {{Link-SomewhereInThisVersion|manual=SDK|topic=WebChatService-combined#ap|display text=addPrefilter}} or {{Link-SomewhereInThisVersion|manual=SDK|topic=WebChatService-combined#sfm|display text=sendFilteredMessage}}.&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}_genesys.widgets.webchat.state.session&lt;br /&gt;
{{!}}Contains the unique Session ID related to the current active chat session. It is used to restore the active chat session during scenarios like page refresh or page navigation.&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}_genesys.widgets.webchat.state.minimized&lt;br /&gt;
{{!}}Contains the WebChat Widget minimized or maximized state for internal tracking purposes.&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}_genesys.widgets.webchat.autoInvite.disabled&lt;br /&gt;
{{!}}Contains a value that disables or enables the WebChat autoInvite feature. It is dynamically updated based on the user's response to the initial WebChat invite.&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}_genesys.widgets.webchat.state.unreadMessages&lt;br /&gt;
{{!}}Tracks the number of unread messages during an active chat session, when WebChat is minimized. It is cleared whenever the WebChat Widget is maximized by the user to read the new messages.&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}_genesys.widgets.webchat.state.lastMessageCountRead&lt;br /&gt;
{{!}}Contains the number of messages that are read during an active chat session that calculates the number of unread messages when WebChat is minimized. It is automatically cleared whenever the WebChat Widget is maximized or closed/ended.&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}_genesys.widgets.webchat.state.asyncUnreadMessageCount&lt;br /&gt;
{{!}}Keeps track of the number of unread messages related to an Async Chat, when WebChat is minimized. It is cleared whenever the WebChat Widget is maximized by the user to read the new messages.&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}_genesys.widgets.webchat.state.pureengage-v3-rest.session&lt;br /&gt;
{{!}}Used only with Genesys Engage V3 API. It contains the Session ID related to the current active chat session. It is used to restore the active chat session during scenarios like page refresh or page navigation.&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}_genesys.widgets.webchat.state.pureengage-v3-rest.keys&lt;br /&gt;
{{!}}Used only with Genesys Engage V3 API, containing the encrypted keys related to the current active chat session.&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}_genesys.widgets.webchat.state.pureengage-v3-rest.index&lt;br /&gt;
{{!}}Used only with Genesys Engage V3 API, containing the last unique message ID for internal tracking purposes.&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}_genesys.widgets.webchat.state.pureengage-v3-rest.open&lt;br /&gt;
{{!}}Used only with Genesys Engage V3 API, containing the WebChat Widget open or close state for internal tracking purposes.&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}_genesys.widgets.webchat.state.purecloud-v2-sockets.JWtoken&lt;br /&gt;
{{!}}Used only with Genesys Cloud V2 API, containing the JWT token related to the current active chat session.&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}_genesys.widgets.webchat.state.purecloud-v2-sockets.ConversationID&lt;br /&gt;
{{!}}Used only with Genesys Cloud V2 API, containing the active conversation ID related to the current chat session.&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}_genesys.widgets.webchat.state.purecloud-v2-sockets.MemberID&lt;br /&gt;
{{!}}Used only with Genesys Cloud V2 API, containing the user ID of the WebChat Widget related to the current active chat session.&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}_genesys.widgets.webchat.state.purecloud-v2-sockets.WS_URL&lt;br /&gt;
{{!}}Used only with Genesys Cloud V2 API, containing the WebSocket event stream URI for listening to new incoming messages.&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}_genesys.widgets.webchat.state.purecloud-v2-sockets.LastMsgId&lt;br /&gt;
{{!}}Used only with Genesys Cloud V2 API, containing the last unique ID of the message sent in the WebChat Widget.&lt;br /&gt;
{{!}}}&lt;br /&gt;
|Status=No&lt;br /&gt;
}}&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Chrissyforrest</name></author>
		
	</entry>
	<entry>
		<id>https://all.docs.genesys.com/index.php?title=File:WebChat-screenshot-with-cobrowse-corrected.png&amp;diff=69675</id>
		<title>File:WebChat-screenshot-with-cobrowse-corrected.png</title>
		<link rel="alternate" type="text/html" href="https://all.docs.genesys.com/index.php?title=File:WebChat-screenshot-with-cobrowse-corrected.png&amp;diff=69675"/>
		<updated>2020-10-28T17:40:44Z</updated>

		<summary type="html">&lt;p&gt;Chrissyforrest: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Chrissyforrest</name></author>
		
	</entry>
	<entry>
		<id>https://all.docs.genesys.com/index.php?title=WID/Current/Developer/GWCDeployment&amp;diff=69553</id>
		<title>WID/Current/Developer/GWCDeployment</title>
		<link rel="alternate" type="text/html" href="https://all.docs.genesys.com/index.php?title=WID/Current/Developer/GWCDeployment&amp;diff=69553"/>
		<updated>2020-10-27T21:27:07Z</updated>

		<summary type="html">&lt;p&gt;Chrissyforrest: Published&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Article&lt;br /&gt;
|Standalone=No&lt;br /&gt;
|DisplayName=Genesys Widgets Deployment Guide&lt;br /&gt;
|TocName=Genesys Widgets Deployment Guide&lt;br /&gt;
|Context=This guide provides the steps required to instrument your website with Genesys Widgets.&lt;br /&gt;
|ComingSoon=No&lt;br /&gt;
|Platform=GenesysCloud, GenesysEngage-cloud&lt;br /&gt;
|Role=Developer&lt;br /&gt;
|Section={{Section&lt;br /&gt;
|sectionHeading=Audience&lt;br /&gt;
|anchor=Audience&lt;br /&gt;
|alignment=Vertical&lt;br /&gt;
|structuredtext=This document is for website developers who are in charge of website code. You must have knowledge of HTML, JavaScript, and CSS.&lt;br /&gt;
|Status=No&lt;br /&gt;
}}{{Section&lt;br /&gt;
|sectionHeading=How can I deploy Genesys Widgets?&lt;br /&gt;
|anchor=HowcanIdeployGenesysWidgets&lt;br /&gt;
|alignment=Vertical&lt;br /&gt;
|structuredtext=There are two deployment methods available:&lt;br /&gt;
&lt;br /&gt;
*{{Link-SomewhereInThisManual|topic=GWCDeployment|anchor=lazy|display text=Lazy loading}}&amp;amp;mdash; The recommended method, lazy loading breaks the JavaScript bundle apart into individual plugin files and loads them into the page only as you need them. This is the preferred method of deploying Genesys Widgets.&lt;br /&gt;
&lt;br /&gt;
*{{Link-SomewhereInThisManual|topic=GWCDeployment|anchor=all|display text=All-in-one}} (deprecated) &amp;amp;mdash;The all-in-one method is the &amp;quot;classic&amp;quot; method of deploying Genesys Widgets. In this method, you have one JavaScript file and one CSS file that contain all plugins and resources.&lt;br /&gt;
&lt;br /&gt;
{{AnchorDiv|lazy}}&lt;br /&gt;
|Status=No&lt;br /&gt;
}}{{Section&lt;br /&gt;
|sectionHeading=Deploying Genesys Widgets (lazy loading)&lt;br /&gt;
|anchor=DeployingGenesysWidgetslazyloading&lt;br /&gt;
|alignment=Vertical&lt;br /&gt;
|structuredtext={{NoteFormat|Lazy loading is the recommended method for Widgets. The ({{Link-SomewhereInThisManual|topic=GWCDeployment|anchor=all|display text=all-in-one}}) method is deprecated.|}}&lt;br /&gt;
===Files used===&lt;br /&gt;
&lt;br /&gt;
*'''widgets/cxbus.min.js'''&lt;br /&gt;
*'''widgets/plugins/widgets-core.min.js'''&lt;br /&gt;
*'''widgets/plugins/*.*'''&lt;br /&gt;
&lt;br /&gt;
A good starting point is the following script:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;widgets/cxbus.min.js&amp;quot; &lt;br /&gt;
onload=&amp;quot;javascript:CXBus.configure({debug:true,pluginsPath:&lt;br /&gt;
'build/plugins/'});CXBus.loadFile('path/to/widgets.config.js')&lt;br /&gt;
.done(function(){CXBus.loadPlugin('widgets-core')});&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This script does the following:&lt;br /&gt;
&lt;br /&gt;
#Loads '''cxbus.min.js'''. This makes the global CXBus instance available.&lt;br /&gt;
#Configures CXBus to turn on debug logging and set the path to the Widgets plugin folder.&lt;br /&gt;
#Loads your configuration file, '''widgets.config.js'''. (This is an imaginary file. You must create it).&lt;br /&gt;
#Loads '''widgets-core''', the core Genesys Widgets library.&lt;br /&gt;
&lt;br /&gt;
Use this script as a starting point and customize it as needed.&lt;br /&gt;
&lt;br /&gt;
Remember that your configuration can be defined inline on the page or loaded in as a separate file (as shown in this script). &lt;br /&gt;
&lt;br /&gt;
{{NoteFormat|Whichever method you choose, you must ensure your configuration is in the page before you load '''widgets-core'''. Otherwise, '''widgets-core''' cannot read the configuration.}}&lt;br /&gt;
&lt;br /&gt;
{{NoteFormat|Refer to {{Link-SomewhereInThisManual|topic=GWCConfig|display text=Configuring Genesys Widgets}} for help.|}}&lt;br /&gt;
&lt;br /&gt;
===On-demand lazy loading===&lt;br /&gt;
&lt;br /&gt;
Genesys Widgets is designed to load plugins into the page on-demand as you use the product. For example, if you call the command '''WebChat.open''', CXBus fetches the '''webchat.min.js''' plugin from the '''plugins/''' folder and loads it into the page. Any WebChat command triggers it to load. Likewise, WebChat calls WebChatService commands, thus CXBus loads '''webchatservice.min.js''' into the page as well.&lt;br /&gt;
&lt;br /&gt;
===Preloading plugins===&lt;br /&gt;
&lt;br /&gt;
In some cases, you might not want to load plugins on-demand, or the demand is to load them at startup. A good example is SideBar. You probably want this plugin to appear on the screen immediately so the customer can use it. To make this possible, you can specify which plugins you want to preload at startup in your configuration.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    _genesys.widgets.main.preload = [&lt;br /&gt;
&lt;br /&gt;
        &amp;quot;sidebar&amp;quot;&lt;br /&gt;
    ];&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You may specify as many plugins as you want in the preload list. The plugins load in order after you load Widgets Core.&lt;br /&gt;
&lt;br /&gt;
All plugin names are lower-case. Please refer to the file names in the '''plugins/''' folder. For example, to preload '''webchat.min.js''', specify &amp;lt;tt&amp;gt;webchat&amp;lt;/tt&amp;gt;, the first part of the file name.&lt;br /&gt;
&lt;br /&gt;
You may find other plugins or features of plugins that necessitate preloading.&lt;br /&gt;
&lt;br /&gt;
{{AnchorDiv|all}}&lt;br /&gt;
|Status=No&lt;br /&gt;
}}{{Section&lt;br /&gt;
|sectionHeading=Deploying Genesys Widgets (all-in-one)&lt;br /&gt;
|anchor=DeployingGenesysWidgetsallinone&lt;br /&gt;
|alignment=Vertical&lt;br /&gt;
|structuredtext={{NoteFormat|1=Lazy loading is the recommended method for Widgets. The ({{Link-SomewhereInThisManual|topic=GWCDeployment|anchor=all|display text=all-in-one}}) method is deprecated.|2=}}&lt;br /&gt;
===Files Used===&lt;br /&gt;
&lt;br /&gt;
*'''widgets/widgets.min.css'''&lt;br /&gt;
*'''widgets/widgets.min.js'''&lt;br /&gt;
&lt;br /&gt;
A good starting point is the following script:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;script src-&amp;quot;widgets/widgets.config.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script src=&amp;quot;widgets/widgets.min.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;link id=&amp;quot;genesys-widgets-styles&amp;quot; data-origID=&amp;quot;genesys-widgets-styles&amp;quot;  data-origID=&amp;quot;genesys-widgets-styles&amp;quot;  data-origID=&amp;quot;genesys-widgets-styles&amp;quot;  data-origID=&amp;quot;genesys-widgets-styles&amp;quot;  data-origID=&amp;quot;genesys-widgets-styles&amp;quot;  data-origID=&amp;quot;genesys-widgets-styles&amp;quot;  data-origID=&amp;quot;genesys-widgets-styles&amp;quot;  data-origID=&amp;quot;genesys-widgets-styles&amp;quot;  data-origID=&amp;quot;genesys-widgets-styles&amp;quot;  href=&amp;quot;http://www.yourhost.com/path/to/widgets.min.css&amp;quot; type=&amp;quot;text/css&amp;quot; rel=&amp;quot;stylesheet&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
First, you must define your configuration for Genesys Widgets. You can do this inline on the page by using a ''script'' tag, or you can store it in a separate file and load it in before '''widgets.min.js'''. In the script example above, we assume your configuration is stored in another file. You must create the '''widgets.config.js''' file for this script to function properly. &lt;br /&gt;
&lt;br /&gt;
{{NoteFormat|Whichever method you choose, you must ensure your configuration is in the page before you load '''widgets.min.js'''. Otherwise, '''widgets.min.js''' cannot read the configuration.}}&lt;br /&gt;
&lt;br /&gt;
{{NoteFormat|Refer to {{Link-SomewhereInThisManual|topic=GWCConfig|display text=Configuring Genesys Widgets}} for help.|}}&lt;br /&gt;
&lt;br /&gt;
{{AnchorDiv|alternative}}&lt;br /&gt;
==Alternative deployment script==&lt;br /&gt;
&lt;br /&gt;
To simplify the deployment process while using tools like Google Tag Manager, you can use below script to embed Widgets.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
    var widgetBaseUrl = 'https://apps.mypurecloud.ie/widgets/9.0/',&lt;br /&gt;
        widgetScriptElement = document.createElement('script');&lt;br /&gt;
	            &lt;br /&gt;
    widgetScriptElement.setAttribute('src', widgetBaseUrl + 'cxbus.min.js');&lt;br /&gt;
&lt;br /&gt;
    widgetScriptElement.addEventListener('load', function () {&lt;br /&gt;
         &lt;br /&gt;
       CXBus.configure({debug: false, pluginsPath: widgetBaseUrl + 'plugins/'});&lt;br /&gt;
       CXBus.loadPlugin('widgets-core');&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    document.head.append(widgetScriptElement);&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{AnchorDiv|CDN}}&lt;br /&gt;
|Status=No&lt;br /&gt;
}}{{Section&lt;br /&gt;
|sectionHeading=Releases hosted on Content Delivery Network (CDN)&lt;br /&gt;
|anchor=ReleaseshostedonContentDeliveryNetworkCDN&lt;br /&gt;
|alignment=Vertical&lt;br /&gt;
|structuredtext=Genesys Widgets are now available over CDN, providing optimized load times and instant access to new releases.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
https://apps.mypurecloud.com/widgets/&amp;lt;version&amp;gt;/&amp;lt;filename&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that &amp;lt;version&amp;gt; and &amp;lt;filename&amp;gt; are placeholders. &lt;br /&gt;
&lt;br /&gt;
===&amp;lt;filename&amp;gt;===&lt;br /&gt;
This value varies based on the deployment method you choose.&lt;br /&gt;
&lt;br /&gt;
{{NoteFormat|In the case where a CDN URL that you are trying to access is '''not found''', it means that either the release or the file you are looking for is not yet available.|2}}&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;version&amp;gt;===&lt;br /&gt;
version can take one of the following 3 values.&lt;br /&gt;
&lt;br /&gt;
*9.0 - (Major) - A version that is company-wide or&lt;br /&gt;
*9.0.xxx - (Major).(Minor) - Minor version is product specific and is tied to each Widget’s iteration or&lt;br /&gt;
*9.0.xxx.xx - (Major).(Minor).(Release candidate) - Specific release version&lt;br /&gt;
&lt;br /&gt;
For all the available released versions, refer to the [https://docs.genesys.com/Documentation/PSAAS/Public/RN/GW Widgets Release Notes].&lt;br /&gt;
&lt;br /&gt;
===Choose region===&lt;br /&gt;
Widgets is available in a number of regions worldwide as shown below. Please choose the nearest or appropriate region URL based on where you are located. &lt;br /&gt;
&lt;br /&gt;
{{{!}} border=&amp;quot;1&amp;quot;&lt;br /&gt;
{{!}}- &lt;br /&gt;
!Region&lt;br /&gt;
!URL&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}North America (East)&lt;br /&gt;
{{!}}&amp;lt;nowiki&amp;gt;https://apps.mypurecloud.com/widgets/{version}/{path/to/file}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}North America (West)&lt;br /&gt;
{{!}}&amp;lt;nowiki&amp;gt;https://apps.usw2.pure.cloud/widgets/{version}/{path/to/file}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}North America (Canada)&lt;br /&gt;
{{!}}&amp;lt;nowiki&amp;gt;https://apps.cac1.pure.cloud/widgets/{version}/{path/to/file}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}Australia or New Zealand&lt;br /&gt;
{{!}}&amp;lt;nowiki&amp;gt;https://apps.mypurecloud.com.au/widgets/{version}/{path/to/file}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}EU (Ireland)&lt;br /&gt;
{{!}}&amp;lt;nowiki&amp;gt;https://apps.mypurecloud.ie/widgets/{version}/{path/to/file}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}EU (Frankfurt)&lt;br /&gt;
{{!}}&amp;lt;nowiki&amp;gt;https://apps.mypurecloud.de/widgets/{version}/{path/to/file}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}UK (London)&lt;br /&gt;
{{!}}&amp;lt;nowiki&amp;gt;https://apps.euw2.pure.cloud/widgets/{version}/{path/to/file}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}Japan&lt;br /&gt;
{{!}}&amp;lt;nowiki&amp;gt;https://apps.mypurecloud.jp/widgets/{version}/{path/to/file}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}Seoul&lt;br /&gt;
{{!}}&amp;lt;nowiki&amp;gt;https://apps.apne2.pure.cloud/widgets/{version}/{path/to/file}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
{{!}}} &lt;br /&gt;
&lt;br /&gt;
===Using Genesys Widgets CDN with versions===&lt;br /&gt;
Starting in the 9.0.006.02 release, all the released versions are accessible from the Genesys CDN URL. The sections below explain how to access the latest available released version or a specific released version using Genesys CDN.&lt;br /&gt;
&lt;br /&gt;
To get the latest released version under the 9.0 family: https://apps.mypurecloud.com/widgets/9.0/widgets.min.js&lt;br /&gt;
&lt;br /&gt;
To get the last available released version under a specific (Major).(Minor) version (this also includes any hot fixes for that release): &amp;lt;nowiki&amp;gt;https://apps.mypurecloud.com/widgets/&amp;lt;/nowiki&amp;gt;'''9.0.xxx'''/widgets.min.js&lt;br /&gt;
&lt;br /&gt;
'''Example:''' &amp;lt;nowiki&amp;gt;https://apps.mypurecloud.com/widgets/&amp;lt;/nowiki&amp;gt;'''9.0.006'''/widgets.min.js&lt;br /&gt;
&lt;br /&gt;
To get a specific release/hot-fix version: &amp;lt;nowiki&amp;gt;https://apps.mypurecloud.com/widgets/&amp;lt;/nowiki&amp;gt;'''9.0.xxx.xx'''/widgets.min.js&lt;br /&gt;
&lt;br /&gt;
'''Example:''' &amp;lt;nowiki&amp;gt;https://apps.mypurecloud.com/widgets/&amp;lt;/nowiki&amp;gt;'''9.0.006.02'''/widgets.min.js{{NoteFormat|Note that all older versions of Genesys Widgets may not be available in the CDN. All the released versions are available only starting with the 9.0.006.02 version.}}&lt;br /&gt;
&lt;br /&gt;
===Versioning examples with scenarios===&lt;br /&gt;
When a new release version comes out, it is available under all the 3 different CDN URLs below. In this example, if 9.0.006.01 is the first ever release announced, then it is available under the following CDN URLs.&lt;br /&gt;
&lt;br /&gt;
*/9.0/&lt;br /&gt;
*/9.0.006/&lt;br /&gt;
*/9.0.006.01/&lt;br /&gt;
&lt;br /&gt;
When 9.0.007.04 is released, it is available under /9.0/ but '''not''' under /9.0.006/ or /9.0.006.01/. Instead, /9.0.007/ and /9.0.007.04/ CDN URLs are created and this release is available under them:&lt;br /&gt;
&lt;br /&gt;
*/9.0/&lt;br /&gt;
*/9.0.007/&lt;br /&gt;
*/9.0.007.04/&lt;br /&gt;
&lt;br /&gt;
If a hot fix (such as 9.0.006.02) is released after 9.0.007.04 is released, then the hot fix is available under the following CDN URLs:&lt;br /&gt;
&lt;br /&gt;
*/9.0.006/&lt;br /&gt;
*/9.0.006.02/&lt;br /&gt;
&lt;br /&gt;
If a hot fix (such as 9.0.007.05) is released before announcing any new release, then it is available under the following CDN URLs:&lt;br /&gt;
&lt;br /&gt;
*/9.0/&lt;br /&gt;
*/9.0.007/&lt;br /&gt;
*/9.0.007.05/&lt;br /&gt;
&lt;br /&gt;
===Deployment methods===&lt;br /&gt;
&lt;br /&gt;
====Lazy loading====&lt;br /&gt;
'''Recommended approach:''' When using the lazy loading method, the base Genesys CDN URL must be prefixed in the {{Link-SomewhereInThisManual|topic=GWCDeployment|anchor=lazy|display text=lazy loading deployment script}}. The &amp;lt;filenames&amp;gt; value is not needed in this scenario because they are auto-loaded from the base CDN configured. Here is what the deployment script looks like when using 9.0.006.02 release:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://apps.mypurecloud.com/widgets/9.0.006.02/cxbus.min.js&amp;quot; onload=&amp;quot;javascript:CXBus.configure({debug:true,pluginsPath:&lt;br /&gt;
'https://apps.mypurecloud.com/widgets/9.0.006.02/plugins/'});&lt;br /&gt;
CXBus.loadFile('path/to/widgets.config.js').done(function()&lt;br /&gt;
{CXBus.loadPlugin('widgets-core')});&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====All-in-one====&lt;br /&gt;
'''Legacy approach (deprecated):''' When using the all-in-one deployment method, the values are the files mentioned in the {{Link-SomewhereInThisManual|topic=GWCDeployment|anchor=all|display text=all-in-one}} section. For example, if you would like to use widgets.min.js and widgets.min.css under 9.0.006.02 release, CDN URLs will look like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
https://apps.mypurecloud.com/widgets/9.0.006.02/widgets.min.js&lt;br /&gt;
https://apps.mypurecloud.com/widgets/9.0.006.02/widgets.min.css&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
|Status=No&lt;br /&gt;
}}{{Section&lt;br /&gt;
|sectionHeading=Checking Widgets Version&lt;br /&gt;
|alignment=Vertical&lt;br /&gt;
|structuredtext='''CXBus.command(&amp;quot;App.info&amp;quot;);'''&lt;br /&gt;
&lt;br /&gt;
Prints out the debug header with version information.&lt;br /&gt;
&lt;br /&gt;
'''window._genesys.widgets.common.data(&amp;quot;version&amp;quot;);'''&lt;br /&gt;
&lt;br /&gt;
Returns the version number directly, as a string.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
|Status=No&lt;br /&gt;
}}&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Chrissyforrest</name></author>
		
	</entry>
	<entry>
		<id>https://all.docs.genesys.com/index.php?title=WID/HIW&amp;diff=69552</id>
		<title>WID/HIW</title>
		<link rel="alternate" type="text/html" href="https://all.docs.genesys.com/index.php?title=WID/HIW&amp;diff=69552"/>
		<updated>2020-10-27T21:17:40Z</updated>

		<summary type="html">&lt;p&gt;Chrissyforrest: Published&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{HIW&lt;br /&gt;
|DisplayName=How Widgets works&lt;br /&gt;
|TocName=How Widgets works&lt;br /&gt;
|Context=Learn how Genesys Widgets works.&lt;br /&gt;
|ComingSoon=No&lt;br /&gt;
|Platform=GenesysEngage-cloud&lt;br /&gt;
|Role=Developer&lt;br /&gt;
|featurename=Widgets&lt;br /&gt;
|ShortDescription=Genesys Widgets is a set of APIs that provides specific types of user interface elements—normally referred to as ''widgets''—and the services to drive them, enabling you to enhance your website with chat or callback, or your own customized contact center functionality.&lt;br /&gt;
|overviewtext=Modern contact centers need more than voice channels to keep up with their customers. Whether it's a chat session or screen sharing—or even if it's just a matter of scheduling a callback—digital channels and other modern customer support functions are a necessity for providing a unified customer journey.&lt;br /&gt;
&lt;br /&gt;
Genesys Widgets is a set of APIs that provides specific types of user interface elements—normally referred to as ''widgets''—and the services to drive them, enabling you to enhance your website with chat or callback, or your own customized contact center functionality.&lt;br /&gt;
&lt;br /&gt;
[[File:Webchat main new.jpg|750x750px]]&lt;br /&gt;
|featureoverview=Genesys Widgets is built on top of the {{Link-AnywhereElse|product=WID|version=Current|manual=SDK|topic=GWCBusAPIOverview|display text=CXBus}} messaging bus. CXBus uses the {{#Widget:ExtLink|link=https://en.wikipedia.org/wiki/Publish%E2%80%93subscribe_pattern|displaytext=publish–subscribe pattern}} to facilitate communication between the Widgets components, all of which are ''plugins'' that can both ''publish'' events on the bus and ''subscribe'' to the events they are interested in.&lt;br /&gt;
&lt;br /&gt;
With the help of the Widgets-Core plugins, CXBus makes it possible to combine the logic implemented by user interface plugins, service plugins, and utility plugins into cohesive products that can provide chat sessions, schedule callbacks, and so on.&lt;br /&gt;
[[File:Widgets-architecture.png|center|600x600px]]&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
===CXBus===&lt;br /&gt;
This messaging bus allows you to create your own plugins with a namespaced API consisting of commands, events, and a data model. CXBus also loads your plugins and resources—either manually or automatically. Every other component in Genesys Widgets is a CXBus plugin. In addition to creating your own plugins for use on the bus, you can use CXBus to manually call plugin commands, subscribe to events, or read data.&lt;br /&gt;
===Widgets-Core===&lt;br /&gt;
These plugins make up the Widgets framework. All of the other plugins depend on them:&lt;br /&gt;
&lt;br /&gt;
*{{Link-AnywhereElse|product=WID|version=Current|manual=SDK|topic=App-combined|display text=App}} (main parent controller for Genesys Widgets)&lt;br /&gt;
*{{Link-AnywhereElse|product=WID|version=Current|manual=SDK|topic=Common|display text=Common}}&lt;br /&gt;
*{{Link-AnywhereElse|product=WID|version=Current|manual=SDK|topic=Overlay-combined|display text=Overlay}}&lt;br /&gt;
*{{Link-AnywhereElse|product=WID|version=Current|manual=SDK|topic=Toaster-combined|display text=Toaster}}&lt;br /&gt;
*{{Link-AnywhereElse|product=WID|version=Current|manual=SDK|topic=WindowManager-combined|display text=WindowManager}}&lt;br /&gt;
&lt;br /&gt;
===Service plugins===&lt;br /&gt;
These handle the network connections to Genesys channels. UI plugins use their services to communicate with the server indirectly. They can also be used independently to develop your own UI plugins.&lt;br /&gt;
&lt;br /&gt;
*{{Link-AnywhereElse|product=WID|version=Current|manual=SDK|topic=CallbackService-combined|display text=CallbackService}}&lt;br /&gt;
*{{Link-AnywhereElse|product=WID|version=Current|manual=SDK|topic=StatsService-combined|display text=StatsService}}&lt;br /&gt;
*{{Link-AnywhereElse|product=WID|version=Current|manual=SDK|topic=WebChatService-combined|display text=WebChatService}}&lt;br /&gt;
&lt;br /&gt;
===UI plugins===&lt;br /&gt;
Also known as ''Widgets'':&lt;br /&gt;
&lt;br /&gt;
*{{Link-AnywhereElse|product=WID|version=Current|manual=SDK|topic=Calendar-combined|display text=Calendar}}&lt;br /&gt;
*{{Link-AnywhereElse|product=WID|version=Current|manual=SDK|topic=Callback-combined|display text=Callback}}&lt;br /&gt;
*{{Link-AnywhereElse|product=WID|version=Current|manual=SDK|topic=CallUs-combined|display text=CallUs}}&lt;br /&gt;
*{{Link-AnywhereElse|product=WID|version=Current|manual=SDK|topic=ChannelSelector-combined|display text=ChannelSelector}}&lt;br /&gt;
*{{Link-AnywhereElse|product=WID|version=Current|manual=SDK|topic=Console-combined|display text=Console}}&lt;br /&gt;
*{{Link-AnywhereElse|product=WID|version=Current|manual=SDK|topic=SideBar-combined|display text=SideBar}}&lt;br /&gt;
*{{Link-AnywhereElse|product=WID|version=Current|manual=SDK|topic=WebChat-combined|display text=WebChat}}&lt;br /&gt;
&lt;br /&gt;
===Bridge plugins===&lt;br /&gt;
The {{Link-AnywhereElse|product=WID|version=Current|manual=SDK|topic=Engagement-combined|display text=Engage}} plugin interfaces Genesys Widgets with other products.&lt;br /&gt;
&lt;br /&gt;
===Modules===&lt;br /&gt;
These are standalone bits of code or data that can be loaded-into plugins directly. WebChatService has both a version 1 and a version 2 controller. The proper controller module is loaded at runtime, based on your configuration options.&lt;br /&gt;
|HIWSection={{HIWSection&lt;br /&gt;
|HIWSectionHeading=Related stuff&lt;br /&gt;
|HIWSectionAlignment=Vertical&lt;br /&gt;
|HIWSectionGif=No&lt;br /&gt;
|HIWSectionText=*{{Link-AnywhereElse|product=WID|version=Current|manual=Developer|display text=Widgets Developer's Guide}}&lt;br /&gt;
*{{Link-AnywhereElse|product=WID|version=Current|manual=SDK|display text=Widgets API Reference}}&lt;br /&gt;
*{{#Widget:ExtLink|link=https://docs.genesys.com/Documentation/PSAAS/Public/RN/GW|displaytext=Genesys Widgets Release Notes}}&lt;br /&gt;
}}{{HIWSection&lt;br /&gt;
|HIWSectionHeading=How to use Genesys Widgets&lt;br /&gt;
|HIWSectionAlignment=Vertical&lt;br /&gt;
|HIWSectionGif=No&lt;br /&gt;
|HIWSectionText=Read the {{Link-AnywhereElse|product=WID|version=Current|manual=Developer|topic=GWCDeployment|display text=Get started}} article.&lt;br /&gt;
}}&lt;br /&gt;
|advanced=No&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Chrissyforrest</name></author>
		
	</entry>
	<entry>
		<id>https://all.docs.genesys.com/index.php?title=WID/Current/SDK/Engagement-combined&amp;diff=69548</id>
		<title>WID/Current/SDK/Engagement-combined</title>
		<link rel="alternate" type="text/html" href="https://all.docs.genesys.com/index.php?title=WID/Current/SDK/Engagement-combined&amp;diff=69548"/>
		<updated>2020-10-27T20:52:55Z</updated>

		<summary type="html">&lt;p&gt;Chrissyforrest: Published&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Article&lt;br /&gt;
|Standalone=No&lt;br /&gt;
|DisplayName=Engage&lt;br /&gt;
|TocName=Engage&lt;br /&gt;
|Context=Learn how to use the Genesys Engage plugin to integrate any Engage solution with Genesys Widgets.&lt;br /&gt;
|ComingSoon=No&lt;br /&gt;
|Platform=GenesysEngage-cloud&lt;br /&gt;
|Role=Developer&lt;br /&gt;
|Section={{Section&lt;br /&gt;
|sectionHeading=Overview&lt;br /&gt;
|anchor=overview&lt;br /&gt;
|alignment=Vertical&lt;br /&gt;
|structuredtext=[[File:Desktop_Engage_Offer_Overlay_View_with_Text_on_left_v1.png|center|frameless|675x675px]]&lt;br /&gt;
The Genesys Engage plugin is generic and contains commands that automate customer engagement within Genesys Widgets. Starting with version {{#Widget:ExtLink|link=https://docs.genesys.com/Documentation/PSAAS/Public/RN/GW#Nov292019|displaytext=9.0.015.11}}, the Engage plugin includes Offers, which allows a customer to view a product or promotion on a page. It comes with many display modes and rendering options, such as overlay/toaster mode with text or image-only layouts, or both.&lt;br /&gt;
[[File:Engage Invite Dark v2.png|center|frameless|525x525px]]&lt;br /&gt;
===Usage===&lt;br /&gt;
Use the Engage plugin to show either an invite or an offer via the following methods:&lt;br /&gt;
&lt;br /&gt;
*Calling the {{Link-SomewhereInThisVersion|manual=SDK|topic=Engagement-combined|anchor=invite|display text=Engage.invite}} command&lt;br /&gt;
*Calling the {{Link-SomewhereInThisVersion|manual=SDK|topic=Engagement-combined|anchor=offer|display text=Engage.offer}} command&lt;br /&gt;
&lt;br /&gt;
===Namespaces===&lt;br /&gt;
The Engage plugin uses the following namespaces.&lt;br /&gt;
{{{!}} class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Type&lt;br /&gt;
!Namespace&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}i18n - {{Link-SomewhereInThisVersion|manual=SDK|topic=Engagement-combined|anchor=localize|display text=Localization}}&lt;br /&gt;
{{!}}Engage&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}CXBus - {{Link-SomewhereInThisVersion|manual=SDK|topic=Engagement-combined|anchor=commands|display text=API commands}} &amp;amp; {{Link-SomewhereInThisVersion|manual=SDK|topic=Engagement-combined|anchor=events|display text=API events}}&lt;br /&gt;
{{!}}Engage&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}CSS&lt;br /&gt;
{{!}}.cx-engage&lt;br /&gt;
{{!}}}&lt;br /&gt;
&lt;br /&gt;
===Screenshots===&lt;br /&gt;
'''Engage Invite'''&lt;br /&gt;
&lt;br /&gt;
[[File:Engage_Invite_Mobile_Dark_theme_v1.png|150x150px|Mobile mode Engage Invite view with dark theme]]&lt;br /&gt;
[[File:Engage_Invite_Mobile_Light_theme_v1.png|150x150px|Mobile mode Engage Invite view with light theme]]&lt;br /&gt;
&lt;br /&gt;
'''Engage Offer'''&lt;br /&gt;
&lt;br /&gt;
[[File:Desktop_Engage_Offer_toaster_mode.png|150x150px|Desktop Toast view with both image and text]]&lt;br /&gt;
[[File:Desktop_Engage_Offer_modal_overlay_view_with_text_on_top.png|150x150px|Desktop Modal Overlay view with text on top]]&lt;br /&gt;
[[File:Desktop_Engage_Offer_overlay_view_with_text_at_bottom.png|150x150px|Desktop Overlay view with text at bottom]]&lt;br /&gt;
[[File:Desktop_Engage_Offer_Toast_view_with_text_content_on_right.png|150x150px|Desktop Toast view with text content on right side]]&lt;br /&gt;
[[File:Desktop_Engage_Offer_Toast_view_with_text_content_on_left.png|150x150px|Desktop Toast view with text content on left side]]&lt;br /&gt;
[[File:Desktop_Engage_Offer_overlay_view_-_Right_text_v1.png|150x150px|Desktop Overlay view with text on right side]]&lt;br /&gt;
[[File:Desktop_Engage_Offer_modal_Overlay_View_with_Text_on_left.png|150x150px|Desktop Modal Overlay view with text on left side]]&lt;br /&gt;
[[File:Mobile_Engage_Offer_inserted_onto_the_top_of_a_webpage.png|150x150px|Mobile Offer inserted onto the top of a web page]]&lt;br /&gt;
[[File:Mobile_mode_Engage_Offer_view_in_modal_overlay_with_background_greyed_out_v1.png|150x150px|Mobile Offer view in modal overlay with background area grayed out]]&lt;br /&gt;
[[File:Mobile_mode_Engage_Offer_view_in_modal_overlay_v1.png|150x150px|Mobile Offer view in modal overlay]]&lt;br /&gt;
|Status=No&lt;br /&gt;
}}{{Section&lt;br /&gt;
|sectionHeading=Configuration&lt;br /&gt;
|anchor=config&lt;br /&gt;
|alignment=Vertical&lt;br /&gt;
|structuredtext=The Genesys Engage plugin doesn't have any configuration options.&lt;br /&gt;
|Status=No&lt;br /&gt;
}}{{Section&lt;br /&gt;
|sectionHeading=Localization&lt;br /&gt;
|anchor=localize&lt;br /&gt;
|alignment=Vertical&lt;br /&gt;
|structuredtext=The Genesys Engage plugin doesn't have any localization options.&lt;br /&gt;
|Status=No&lt;br /&gt;
}}{{Section&lt;br /&gt;
|sectionHeading=API commands&lt;br /&gt;
|anchor=commands&lt;br /&gt;
|alignment=Vertical&lt;br /&gt;
|structuredtext=Once you've registered your plugin on the bus, you can call commands on other registered plugins. Here's how to use the global bus object to register a new plugin on the bus.&lt;br /&gt;
&lt;br /&gt;
{{NoteFormat|The global bus object is a debugging tool. When implementing Widgets on your own site, do not use the global bus object to register your custom plugins. Instead, see {{Link-SomewhereInThisVersion|manual=SDK|topic=GWCBusExtensions|display text=Genesys Widgets extensions}} for more information about extending Genesys Widgets.|1}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;var oMyPlugin = window._genesys.widgets.bus.registerPlugin('MyPlugin');&lt;br /&gt;
&lt;br /&gt;
oMyPlugin.command('Engage.invite');&amp;lt;/source&amp;gt;&lt;br /&gt;
{{AnchorDiv|invite}}&lt;br /&gt;
===invite===&lt;br /&gt;
Opens the Engage Widget and renders the text based on the options provided. If no options are provided, the widget doesn't open.&lt;br /&gt;
&lt;br /&gt;
===Example===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;oMyPlugin.command('Engage.invite', {&lt;br /&gt;
	'type':'toast',&lt;br /&gt;
	'timeout':3000,&lt;br /&gt;
	'title':'Engage Title',&lt;br /&gt;
	'ariaTitle':'Engage Invite',&lt;br /&gt;
	'body':'Engage invite body content',&lt;br /&gt;
	'accept':'Yes',&lt;br /&gt;
	'decline':'No, thanks',&lt;br /&gt;
	'ariaAccept':'Yes',&lt;br /&gt;
	'ariaDecline':'No, thanks',&lt;br /&gt;
	'ariaClose':'Close',&lt;br /&gt;
	'command': 'WebChat.open',&lt;br /&gt;
	'options':{'proactive': true, 'userData': {'category': 'shoes'}}&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
oMyPlugin.command('Engage.invite',{&lt;br /&gt;
	'type':'toast',&lt;br /&gt;
	'timeout':3000,&lt;br /&gt;
	'force': true,&lt;br /&gt;
	'title':'Engage Title',&lt;br /&gt;
	'ariaTitle':'Engage Invite',&lt;br /&gt;
	'body':'Engage invite body content',&lt;br /&gt;
	'accept':'Yes',&lt;br /&gt;
	'decline':'No, thanks',&lt;br /&gt;
	'ariaAccept':'Yes',&lt;br /&gt;
	'ariaDecline':'No, thanks',&lt;br /&gt;
	'ariaClose':'Close'&lt;br /&gt;
}).done(function(response){&lt;br /&gt;
&lt;br /&gt;
	// Act upon the received response code &lt;br /&gt;
&lt;br /&gt;
	switch(response){&lt;br /&gt;
	case 'accepted':oMyPlugin.command('WebChat.open'); &lt;br /&gt;
			break;&lt;br /&gt;
	case 'declined': break;&lt;br /&gt;
	case 'closed': break;&lt;br /&gt;
	case 'timeout': break;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Options===&lt;br /&gt;
{{{!}} class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Option&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
!Accepted Values&lt;br /&gt;
!Default&lt;br /&gt;
!Introduced/Updated&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}type&lt;br /&gt;
{{!}}string&lt;br /&gt;
{{!}}Widget display type.&lt;br /&gt;
{{!}}toast&lt;br /&gt;
{{!}}&lt;br /&gt;
{{!}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}timeout&lt;br /&gt;
{{!}}number&lt;br /&gt;
{{!}}Timeout integer in milliseconds.&lt;br /&gt;
{{!}}n/a&lt;br /&gt;
{{!}}&lt;br /&gt;
{{!}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}title&lt;br /&gt;
{{!}}string&lt;br /&gt;
{{!}}String for widget title.&lt;br /&gt;
{{!}}n/a&lt;br /&gt;
{{!}}&lt;br /&gt;
{{!}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}ariaTitle&lt;br /&gt;
{{!}}string&lt;br /&gt;
{{!}}Aria label text for the Engage invite window.&lt;br /&gt;
{{!}}n/a&lt;br /&gt;
{{!}}&lt;br /&gt;
{{!}}9.0.015.04&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}body&lt;br /&gt;
{{!}}string&lt;br /&gt;
{{!}}String for offer body text.&lt;br /&gt;
{{!}}n/a&lt;br /&gt;
{{!}}&lt;br /&gt;
{{!}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}accept&lt;br /&gt;
{{!}}string&lt;br /&gt;
{{!}}String for Accept button text.&lt;br /&gt;
{{!}}n/a&lt;br /&gt;
{{!}}&lt;br /&gt;
{{!}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}ariaAccept&lt;br /&gt;
{{!}}string&lt;br /&gt;
{{!}}Aria label text for the Accept button.&lt;br /&gt;
{{!}}n/a&lt;br /&gt;
{{!}}&lt;br /&gt;
{{!}}9.0.016.10&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}decline&lt;br /&gt;
{{!}}string&lt;br /&gt;
{{!}}String for Decline button text.&lt;br /&gt;
{{!}}n/a&lt;br /&gt;
{{!}}&lt;br /&gt;
{{!}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}ariaDecline&lt;br /&gt;
{{!}}string&lt;br /&gt;
{{!}}Aria label text for the Decline button.&lt;br /&gt;
{{!}}n/a&lt;br /&gt;
{{!}}&lt;br /&gt;
{{!}}9.0.016.10&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}ariaClose&lt;br /&gt;
{{!}}string&lt;br /&gt;
{{!}}Aria label text for the Engage Close button.&lt;br /&gt;
{{!}}n/a&lt;br /&gt;
{{!}}&lt;br /&gt;
{{!}}9.0.016.10&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}command&lt;br /&gt;
{{!}}string&lt;br /&gt;
{{!}}Command to execute.&lt;br /&gt;
{{!}}n/a&lt;br /&gt;
{{!}}&lt;br /&gt;
{{!}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}options&lt;br /&gt;
{{!}}object&lt;br /&gt;
{{!}}Options related to the command provided.&lt;br /&gt;
{{!}}n/a&lt;br /&gt;
{{!}}&lt;br /&gt;
{{!}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}priority&lt;br /&gt;
{{!}}number&lt;br /&gt;
{{!}}Replace the active lower priority Engage invite with the higher priority Engage invite.&lt;br /&gt;
{{!}}n/a&lt;br /&gt;
{{!}}0&lt;br /&gt;
{{!}}9.0.015.11&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}force&lt;br /&gt;
{{!}}boolean&lt;br /&gt;
{{!}}Replace the active Engage invite with the new Engage invite irrespective of priorities.&lt;br /&gt;
{{!}}n/a&lt;br /&gt;
{{!}}false&lt;br /&gt;
{{!}}9.0.015.11&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}}&lt;br /&gt;
&lt;br /&gt;
===Resolutions===&lt;br /&gt;
{{{!}} class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Status&lt;br /&gt;
!When&lt;br /&gt;
!Returns&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}resolved&lt;br /&gt;
{{!}}When engage invite is accepted by user.&lt;br /&gt;
{{!}}accepted&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}resolved&lt;br /&gt;
{{!}}When engage invite is declined by user.&lt;br /&gt;
{{!}}declined&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}resolved&lt;br /&gt;
{{!}}When engage invite widget is closed by user.&lt;br /&gt;
{{!}}closed&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}resolved&lt;br /&gt;
{{!}}When engage invite widget closes due to timeout.&lt;br /&gt;
{{!}}timeout&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}}&lt;br /&gt;
{{AnchorDiv|offer}}&lt;br /&gt;
===offer===&lt;br /&gt;
Opens a widget for a product offer using the data sent through the command options provided below. The widget can include both rendering options and the actual data that needs to be displayed in the Offer Widget. If no options are provided, the widget will not open.&lt;br /&gt;
&lt;br /&gt;
===Example===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
 oMyPlugin.command('Engage.offer', {&lt;br /&gt;
 &lt;br /&gt;
 	mode:'overlay',&lt;br /&gt;
 	modal:true,&lt;br /&gt;
 	layout:'leftText',&lt;br /&gt;
 	title: 'GRAB WHAT YOU NEED!!',&lt;br /&gt;
	ariaTitle: 'Offers',&lt;br /&gt;
 	headline:'We Got All!',&lt;br /&gt;
 	description:'Get free NextDay delivery on orders of $35 or more. Start shopping now!',&lt;br /&gt;
 &lt;br /&gt;
 	cta:{&lt;br /&gt;
 		text:'Join',&lt;br /&gt;
 		url:'https://www.genesys.com',&lt;br /&gt;
 		target:'_blank'&lt;br /&gt;
 	},&lt;br /&gt;
 &lt;br /&gt;
 	image:{&lt;br /&gt;
 		src:'https://picsum.photos/id/237/300/300',&lt;br /&gt;
 		alt:'Alternate Text for Image'&lt;br /&gt;
 	},&lt;br /&gt;
 &lt;br /&gt;
 	styles:{&lt;br /&gt;
 		closeButton:{&lt;br /&gt;
 			'color':'red'&lt;br /&gt;
 		}&lt;br /&gt;
 	},&lt;br /&gt;
        ariaCTA:'Join',&lt;br /&gt;
	ariaClose:'Close Offer'&lt;br /&gt;
 });&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
===Options===&lt;br /&gt;
{{{!}} class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Option&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
!Accepted values&lt;br /&gt;
!Default&lt;br /&gt;
!Introduced/Updated&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}mode&lt;br /&gt;
{{!}}string&lt;br /&gt;
{{!}}The display type of the Offer widget.&lt;br /&gt;
{{!}}overlay, toaster&lt;br /&gt;
{{!}}toaster&lt;br /&gt;
{{!}}9.0.015.04&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}modal&lt;br /&gt;
{{!}}boolean&lt;br /&gt;
{{!}}Applicable only when mode is 'overlay'. A smokescreen will be shown in the background of overlay modal window. This window can be dismissed by clicking anywhere in the smokescreen area.&lt;br /&gt;
{{!}}n/a&lt;br /&gt;
{{!}}false&lt;br /&gt;
{{!}}9.0.015.04&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}layout&lt;br /&gt;
{{!}}string&lt;br /&gt;
{{!}}Additional layout options are supported for all modes.&lt;br /&gt;
{{!}}minimal, leftText, rightText, topText, bottomText&lt;br /&gt;
{{!}}leftText&lt;br /&gt;
{{!}}9.0.015.04&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}headline&lt;br /&gt;
{{!}}string&lt;br /&gt;
{{!}}The Offer title header text.&lt;br /&gt;
{{!}}n/a&lt;br /&gt;
{{!}}n/a&lt;br /&gt;
{{!}}9.0.015.04&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}ariaTitle&lt;br /&gt;
{{!}}string&lt;br /&gt;
{{!}}Aria label text for the Offer window.&lt;br /&gt;
{{!}}n/a&lt;br /&gt;
{{!}}n/a&lt;br /&gt;
{{!}}9.0.015.04&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}description&lt;br /&gt;
{{!}}string&lt;br /&gt;
{{!}}The Offer body description text.&lt;br /&gt;
{{!}}n/a&lt;br /&gt;
{{!}}n/a&lt;br /&gt;
{{!}}9.0.015.04&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}cta&lt;br /&gt;
{{!}}object&lt;br /&gt;
{{!}}An object containing HTML attributes and/or CXBus commands for the CTA (call to action) button.&lt;br /&gt;
{{!}}n/a&lt;br /&gt;
{{!}}n/a&lt;br /&gt;
{{!}}9.0.015.04&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}cta.text&lt;br /&gt;
{{!}}string&lt;br /&gt;
{{!}}The CTA button text.&lt;br /&gt;
{{!}}n/a&lt;br /&gt;
{{!}}n/a&lt;br /&gt;
{{!}}9.0.015.04&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}cta.url&lt;br /&gt;
{{!}}string&lt;br /&gt;
{{!}}The URL string for the CTA button.&lt;br /&gt;
Note: The URL must be properly defined with the complete Protocol URL Address. For example, https://www.genesys.com.&lt;br /&gt;
{{!}}_blank, _parent, _self, _top, framename&lt;br /&gt;
{{!}}n/a&lt;br /&gt;
{{!}}9.0.015.04&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}cta.target&lt;br /&gt;
{{!}}string&lt;br /&gt;
{{!}}Specifies where the URL is opened.&lt;br /&gt;
{{!}}n/a&lt;br /&gt;
{{!}}n/a&lt;br /&gt;
{{!}}9.0.015.04&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}cta.command&lt;br /&gt;
{{!}}string&lt;br /&gt;
{{!}}A CXBus command to execute.&lt;br /&gt;
{{!}}n/a&lt;br /&gt;
{{!}}n/a&lt;br /&gt;
{{!}}9.0.015.04&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}cta.commandOptions&lt;br /&gt;
{{!}}string&lt;br /&gt;
{{!}}Options related to CXBUs command.&lt;br /&gt;
{{!}}n/a&lt;br /&gt;
{{!}}n/a&lt;br /&gt;
{{!}}9.0.015.04&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}image&lt;br /&gt;
{{!}}object&lt;br /&gt;
{{!}}An object containing image tag attributes.&lt;br /&gt;
{{!}}n/a&lt;br /&gt;
{{!}}n/a&lt;br /&gt;
{{!}}9.0.015.04&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}image.src&lt;br /&gt;
{{!}}string&lt;br /&gt;
{{!}}The URL of the image.&lt;br /&gt;
{{!}}n/a&lt;br /&gt;
{{!}}n/a&lt;br /&gt;
{{!}}9.0.015.04&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}image.alt&lt;br /&gt;
{{!}}string&lt;br /&gt;
{{!}}Alternate text for the image.&lt;br /&gt;
{{!}}n/a&lt;br /&gt;
{{!}}n/a&lt;br /&gt;
{{!}}9.0.015.04&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}image.title&lt;br /&gt;
{{!}}string&lt;br /&gt;
{{!}}To indicate the screen reader user whether the image opens the URL in a new window.&lt;br /&gt;
{{!}}n/a&lt;br /&gt;
{{!}}n/a&lt;br /&gt;
{{!}}9.0.016.10&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}insertAfter&lt;br /&gt;
{{!}}string&lt;br /&gt;
{{!}}Applicable only in mobile mode. An ID or class name of an HTML selector from the host page. The offer will be inserted after this element. Precede the value mentioned here with the standard Class ('.') and ID selector ('#') character.&lt;br /&gt;
{{!}}n/a&lt;br /&gt;
{{!}}n/a&lt;br /&gt;
{{!}}9.0.015.04&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}insertBefore&lt;br /&gt;
{{!}}string&lt;br /&gt;
{{!}}Applicable only in mobile mode. An ID or class name of an HTML selector from the host page. The offer will be inserted before this element. Precede the value mentioned here with the standard Class ('.') and ID selector ('#') character.&lt;br /&gt;
{{!}}n/a&lt;br /&gt;
{{!}}n/a&lt;br /&gt;
{{!}}9.0.015.04&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}insertInto&lt;br /&gt;
{{!}}string&lt;br /&gt;
{{!}}Applicable only in mobile mode. An ID or class name of an HTML selector from the host page. The offer will be appended inside this element. Precede the value mentioned here with the standard Class ('.') and ID selector ('#') character.&lt;br /&gt;
{{!}}n/a&lt;br /&gt;
{{!}}n/a&lt;br /&gt;
{{!}}9.0.015.04&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}styles&lt;br /&gt;
{{!}}object&lt;br /&gt;
{{!}}An object containing styles for the offer content.&lt;br /&gt;
{{!}}n/a&lt;br /&gt;
{{!}}n/a&lt;br /&gt;
{{!}}9.0.015.04&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}styles.closeButton&lt;br /&gt;
{{!}}object&lt;br /&gt;
{{!}}An object containing styles for the close button.&lt;br /&gt;
{{!}}n/a&lt;br /&gt;
{{!}}n/a&lt;br /&gt;
{{!}}9.0.015.04&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}styles.closeButton.color&lt;br /&gt;
{{!}}string&lt;br /&gt;
{{!}}The color of the close button.&lt;br /&gt;
{{!}}n/a&lt;br /&gt;
{{!}}n/a&lt;br /&gt;
{{!}}9.0.015.04&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}styles.closeButton.opacity&lt;br /&gt;
{{!}}number&lt;br /&gt;
{{!}}The CSS 'opacity' property for the close button.&lt;br /&gt;
{{!}}n/a&lt;br /&gt;
{{!}}n/a&lt;br /&gt;
{{!}}9.0.015.04&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}styles.overlay&lt;br /&gt;
{{!}}object&lt;br /&gt;
{{!}}An object containing styles for the overlay container.&lt;br /&gt;
{{!}}n/a&lt;br /&gt;
{{!}}n/a&lt;br /&gt;
{{!}}9.0.015.04&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}styles.overlay.top&lt;br /&gt;
{{!}}string&lt;br /&gt;
{{!}}The CSS 'top' property for the overlay container.&lt;br /&gt;
{{!}}n/a&lt;br /&gt;
{{!}}n/a&lt;br /&gt;
{{!}}9.0.015.04&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}styles.overlay.right&lt;br /&gt;
{{!}}string&lt;br /&gt;
{{!}}The CSS 'right' property for the overlay container.&lt;br /&gt;
{{!}}n/a&lt;br /&gt;
{{!}}n/a&lt;br /&gt;
{{!}}9.0.015.04&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}styles.overlay.bottom&lt;br /&gt;
{{!}}string&lt;br /&gt;
{{!}}The CSS 'bottom' property for the overlay container.&lt;br /&gt;
{{!}}n/a&lt;br /&gt;
{{!}}n/a&lt;br /&gt;
{{!}}9.0.015.04&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}styles.overlay.left&lt;br /&gt;
{{!}}string&lt;br /&gt;
{{!}}The CSS 'left' property for the overlay container.&lt;br /&gt;
Note: When all the position values are provided, the order of precedence will be top, right, bottom, and left.&lt;br /&gt;
{{!}}n/a&lt;br /&gt;
{{!}}n/a&lt;br /&gt;
{{!}}9.0.015.04&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}styles.overlay.center&lt;br /&gt;
{{!}}boolean&lt;br /&gt;
{{!}}Aligns the overlay container to the center of the screen.&lt;br /&gt;
{{!}}n/a&lt;br /&gt;
{{!}}true&lt;br /&gt;
{{!}}9.0.015.04&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}styles.offer&lt;br /&gt;
{{!}}object&lt;br /&gt;
{{!}}An object containing styles for the Offer window.&lt;br /&gt;
{{!}}n/a&lt;br /&gt;
{{!}}n/a&lt;br /&gt;
{{!}}9.0.015.04&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}styles.offer.backgroundColor&lt;br /&gt;
{{!}}string&lt;br /&gt;
{{!}}The background color of the offer.&lt;br /&gt;
{{!}}n/a&lt;br /&gt;
{{!}}n/a&lt;br /&gt;
{{!}}9.0.015.04&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}styles.offer.color&lt;br /&gt;
{{!}}string&lt;br /&gt;
{{!}}The text color of the offer.&lt;br /&gt;
{{!}}n/a&lt;br /&gt;
{{!}}n/a&lt;br /&gt;
{{!}}9.0.015.04&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}styles.offer.padding&lt;br /&gt;
{{!}}string&lt;br /&gt;
{{!}}The padding for the offer container.&lt;br /&gt;
{{!}}n/a&lt;br /&gt;
{{!}}0&lt;br /&gt;
{{!}}9.0.015.04&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}styles.title&lt;br /&gt;
{{!}}object&lt;br /&gt;
{{!}}An object containing styles for the title.&lt;br /&gt;
{{!}}n/a&lt;br /&gt;
{{!}}n/a&lt;br /&gt;
{{!}}9.0.015.04&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}styles.title.font&lt;br /&gt;
{{!}}string&lt;br /&gt;
{{!}}The CSS 'font' property for the title.&lt;br /&gt;
{{!}}n/a&lt;br /&gt;
{{!}}n/a&lt;br /&gt;
{{!}}9.0.015.04&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}styles.title.textAlign&lt;br /&gt;
{{!}}string&lt;br /&gt;
{{!}}The CSS 'text-align' property for the title.&lt;br /&gt;
{{!}}n/a&lt;br /&gt;
{{!}}n/a&lt;br /&gt;
{{!}}9.0.015.04&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}styles.headline&lt;br /&gt;
{{!}}object&lt;br /&gt;
{{!}}An object containing styles for the header text.&lt;br /&gt;
{{!}}n/a&lt;br /&gt;
{{!}}n/a&lt;br /&gt;
{{!}}9.0.015.04&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}styles.headline.font&lt;br /&gt;
{{!}}string&lt;br /&gt;
{{!}}The CSS 'font' property for the header text.&lt;br /&gt;
{{!}}n/a&lt;br /&gt;
{{!}}n/a&lt;br /&gt;
{{!}}9.0.015.04&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}styles.headline.textAlign&lt;br /&gt;
{{!}}string&lt;br /&gt;
{{!}}The CSS 'text-align' property for the header text.&lt;br /&gt;
{{!}}n/a&lt;br /&gt;
{{!}}n/a&lt;br /&gt;
{{!}}9.0.015.04&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}styles.description&lt;br /&gt;
{{!}}object&lt;br /&gt;
{{!}}An object containing styles for the offer description text.&lt;br /&gt;
{{!}}n/a&lt;br /&gt;
{{!}}n/a&lt;br /&gt;
{{!}}9.0.015.04&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}styles.description.font&lt;br /&gt;
{{!}}string&lt;br /&gt;
{{!}}The CSS 'font' property for the description text.&lt;br /&gt;
{{!}}n/a&lt;br /&gt;
{{!}}n/a&lt;br /&gt;
{{!}}9.0.015.04&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}styles.description.textAlign&lt;br /&gt;
{{!}}string&lt;br /&gt;
{{!}}The CSS 'text-align' property for the description text.&lt;br /&gt;
{{!}}n/a&lt;br /&gt;
{{!}}n/a&lt;br /&gt;
{{!}}9.0.015.04&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}styles.ctaButton&lt;br /&gt;
{{!}}object&lt;br /&gt;
{{!}}An object containing styles for call to action button in the offer window.&lt;br /&gt;
{{!}}n/a&lt;br /&gt;
{{!}}n/a&lt;br /&gt;
{{!}}9.0.015.04&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}styles.ctaButton.font&lt;br /&gt;
{{!}}string&lt;br /&gt;
{{!}}The CSS 'font' property for the text in CTA button.&lt;br /&gt;
{{!}}n/a&lt;br /&gt;
{{!}}n/a&lt;br /&gt;
{{!}}9.0.015.04&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}styles.ctaButton.textAlign&lt;br /&gt;
{{!}}string&lt;br /&gt;
{{!}}The CSS 'text-align' property for the text in CTA button.&lt;br /&gt;
{{!}}n/a&lt;br /&gt;
{{!}}n/a&lt;br /&gt;
{{!}}9.0.015.04&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}styles.ctaButton.background&lt;br /&gt;
{{!}}string&lt;br /&gt;
{{!}}The CSS 'background' property for the CTA button.&lt;br /&gt;
{{!}}n/a&lt;br /&gt;
{{!}}n/a&lt;br /&gt;
{{!}}9.0.015.04&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}styles.ctaButton.color&lt;br /&gt;
{{!}}string&lt;br /&gt;
{{!}}The CSS 'color' property for the text in CTA button.&lt;br /&gt;
{{!}}n/a&lt;br /&gt;
{{!}}n/a&lt;br /&gt;
{{!}}9.0.015.04&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}styles.ctaButton.fontSize&lt;br /&gt;
{{!}}string&lt;br /&gt;
{{!}}The CSS 'font-size' property for the text in CTA button.&lt;br /&gt;
{{!}}n/a&lt;br /&gt;
{{!}}n/a&lt;br /&gt;
{{!}}9.0.015.04&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}ariaCTA&lt;br /&gt;
{{!}}string&lt;br /&gt;
{{!}}Aria label text for the Offer CTA button.&lt;br /&gt;
{{!}}n/a&lt;br /&gt;
{{!}}n/a&lt;br /&gt;
{{!}}9.0.016.10&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}ariaClose&lt;br /&gt;
{{!}}string&lt;br /&gt;
{{!}}Aria label text for the Offer Close button.&lt;br /&gt;
{{!}}n/a&lt;br /&gt;
{{!}}n/a&lt;br /&gt;
{{!}}9.0.016.10&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}priority&lt;br /&gt;
{{!}}number&lt;br /&gt;
{{!}}Replace the active lower priority Engage Offer with the higher priority Engage Offer.&lt;br /&gt;
{{!}}n/a&lt;br /&gt;
{{!}}0&lt;br /&gt;
{{!}}9.0.015.11&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}force&lt;br /&gt;
{{!}}boolean&lt;br /&gt;
{{!}}Replace the active Engage Offer with the new Engage Offer irrespective of priorities.&lt;br /&gt;
{{!}}n/a&lt;br /&gt;
{{!}}false&lt;br /&gt;
{{!}}9.0.015.11&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}}&lt;br /&gt;
|Status=No&lt;br /&gt;
}}{{Section&lt;br /&gt;
|sectionHeading=API events&lt;br /&gt;
|anchor=events&lt;br /&gt;
|alignment=Vertical&lt;br /&gt;
|structuredtext=Once you've {{Link-SomewhereInThisVersion|manual=SDK|topic=GWCBusAPIOverview|anchor=regplugin|display text=registered your plugin on the bus}}, you can subscribe to and listen for published events. Here's how to use the global bus object to register a new plugin on the bus.&lt;br /&gt;
&lt;br /&gt;
{{NoteFormat|The global bus object is a debugging tool. When implementing widgets on your own site, do not use the global bus object to register your custom plugins. Instead, see {{Link-AnywhereElse|product=WID|version=Current|manual=SDK|topic=GWCBusExtensions}} for more information about extending Genesys Widgets.|1}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
 var oMyPlugin = window._genesys.widgets.bus.registerPlugin('MyPlugin');&lt;br /&gt;
 &lt;br /&gt;
 oMyPlugin.subscribe('Engage.ready', function(e){});&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
{{{!}} class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Name&lt;br /&gt;
!Description&lt;br /&gt;
!Data&lt;br /&gt;
!Introduced/Updated&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}ready&lt;br /&gt;
{{!}}The Engage widget is initialized and ready to accept commands on the bus.&lt;br /&gt;
{{!}}n/a&lt;br /&gt;
{{!}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}opened&lt;br /&gt;
{{!}}The Engage widget opens.&lt;br /&gt;
 Note: Applicable only to Engage.offer command&lt;br /&gt;
{{!}}{{Link-SomewhereInThisVersion|manual=SDK|topic=Engagement-combined|anchor=metadata|display text=Metadata}}&lt;br /&gt;
{{!}}9.0.015.04&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}CTA&lt;br /&gt;
{{!}}When the user clicks the CTA button in the Engage widget.&lt;br /&gt;
 Note: Applicable only to Engage.offer command&lt;br /&gt;
{{!}}{{Link-SomewhereInThisVersion|manual=SDK|topic=Engagement-combined|anchor=metadata|display text=Metadata}}&lt;br /&gt;
{{!}}9.0.015.04&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}hover&lt;br /&gt;
{{!}}When the user first hovers over the Engage widget.&lt;br /&gt;
 Note: Applicable only to Engage.offer command&lt;br /&gt;
{{!}}{{Link-SomewhereInThisVersion|manual=SDK|topic=Engagement-combined|anchor=metadata|display text=Metadata}}&lt;br /&gt;
{{!}}9.0.015.04&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}dismissed&lt;br /&gt;
{{!}}When the user closes the Engage widget by clicking the Close button.&lt;br /&gt;
 Note: Applicable only to Engage.offer command&lt;br /&gt;
{{!}}{{Link-SomewhereInThisVersion|manual=SDK|topic=Engagement-combined|anchor=metadata|display text=Metadata}}&lt;br /&gt;
{{!}}9.0.015.04&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}closed&lt;br /&gt;
{{!}}The Engage widget closes.&lt;br /&gt;
 Note: Applicable only to Engage.offer command&lt;br /&gt;
{{!}}{{Link-SomewhereInThisVersion|manual=SDK|topic=Engagement-combined|anchor=metadata|display text=Metadata}}&lt;br /&gt;
{{!}}9.0.015.04&lt;br /&gt;
{{!}}}&lt;br /&gt;
{{NoteFormat|Applicable only for Engage.offer command.|1}}&lt;br /&gt;
===Interaction Lifecycle===&lt;br /&gt;
Every offer interaction has a sequence of events we describe as the ''Interaction Lifecycle''. These events track progress and user choices from the beginning of an interaction (opening Offers), to the end (closing Offers), and every step in between.&lt;br /&gt;
&lt;br /&gt;
The following events comprise the Interaction Lifecycle:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;ready&lt;br /&gt;
opened&lt;br /&gt;
CTA&lt;br /&gt;
hover&lt;br /&gt;
dismissed&lt;br /&gt;
closed&amp;lt;/source&amp;gt;&lt;br /&gt;
===Lifecycle scenarios===&lt;br /&gt;
An Interaction Lifecycle can vary based on each user's intent and experience with the Offer widget. Here are several sequences of events in the lifecycle that correspond to different scenarios.&lt;br /&gt;
&lt;br /&gt;
The user opened the Offer widget but changed their mind and closed it without seeing the offer details:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;LANGUAGE&amp;quot;&amp;gt;ready -&amp;gt; opened -&amp;gt; dismissed -&amp;gt; closed&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
The user opened the Offer widget, hovered over the offer details, and then closed it:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;LANGUAGE&amp;quot;&amp;gt;ready -&amp;gt; opened -&amp;gt; hover -&amp;gt; dismissed -&amp;gt; closed&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
The user opened the Offer widget and clicked on the button, which triggers CTA:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;LANGUAGE&amp;quot;&amp;gt;ready -&amp;gt; opened -&amp;gt; CTA -&amp;gt; closed&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
{{NoteFormat|For a list of all Offer events, see {{Link-SomewhereInThisVersion|manual=SDK|topic=Engagement-combined|anchor=events|display text=API events}}.|2}}&lt;br /&gt;
|Status=No&lt;br /&gt;
}}{{Section&lt;br /&gt;
|sectionHeading=Metadata&lt;br /&gt;
|anchor=metadata&lt;br /&gt;
|alignment=Vertical&lt;br /&gt;
|structuredtext=Each event in the Interaction Lifecycle includes the following block of metadata. By default, all values are set to false. As the user progresses through the lifecycle of an Offer Engage interaction, these values are updated.&lt;br /&gt;
&lt;br /&gt;
The metadata block contains Boolean state flags, timestamps, and elapsed times. These values can be used to track and identify trends or issues with interactions. During runtime, the metadata can help you offer a smart and dynamic experience to your users.&lt;br /&gt;
===Reference===&lt;br /&gt;
{{{!}} class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Name&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
!Introduced/Updated&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}opened&lt;br /&gt;
{{!}}integer (timestamp)&lt;br /&gt;
{{!}}Timestamp indicating when the offer was opened.&lt;br /&gt;
{{!}}9.0.015.04&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}closed&lt;br /&gt;
{{!}}integer (timestamp)&lt;br /&gt;
{{!}}Timestamp indicating when the offer was closed.&lt;br /&gt;
{{!}}9.0.015.04&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}dismissed&lt;br /&gt;
{{!}}integer (timestamp)&lt;br /&gt;
{{!}}Timestamp indicating when the user dismissed the offer by clicking the close button.&lt;br /&gt;
{{!}}9.0.015.04&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}triggeredCTA&lt;br /&gt;
{{!}}integer (timestamp)&lt;br /&gt;
{{!}}Timestamp indicating when the CTA was triggered.&lt;br /&gt;
{{!}}9.0.015.04&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}timeBeforeCTA&lt;br /&gt;
{{!}}integer (milliseconds)&lt;br /&gt;
{{!}}Total time in milliseconds from when the user opened the offer to when the CTA is triggered.&lt;br /&gt;
{{!}}9.0.015.04&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}timeFirstHover&lt;br /&gt;
{{!}}integer (timestamp)&lt;br /&gt;
{{!}}Timestamp indicating when the user first hovered over the offer.&lt;br /&gt;
{{!}}9.0.015.04&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}timeBeforeHover&lt;br /&gt;
{{!}}integer (milliseconds)&lt;br /&gt;
{{!}}Total time in milliseconds from when the user opened the offer to when the user first hovered over the offer.&lt;br /&gt;
{{!}}9.0.015.04&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}timeElapsedHover&lt;br /&gt;
{{!}}integer (milliseconds)&lt;br /&gt;
{{!}}Total time in milliseconds when the user hovered over the offer.&lt;br /&gt;
{{!}}9.0.015.04&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}elementClicked&lt;br /&gt;
{{!}}string&lt;br /&gt;
{{!}}Name of CTA element that was clicked.&lt;br /&gt;
{{!}}9.0.015.04&lt;br /&gt;
{{!}}}&lt;br /&gt;
|Status=No&lt;br /&gt;
}}&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Chrissyforrest</name></author>
		
	</entry>
	<entry>
		<id>https://all.docs.genesys.com/index.php?title=WID/Current/SDK/App-combined&amp;diff=69530</id>
		<title>WID/Current/SDK/App-combined</title>
		<link rel="alternate" type="text/html" href="https://all.docs.genesys.com/index.php?title=WID/Current/SDK/App-combined&amp;diff=69530"/>
		<updated>2020-10-27T18:51:59Z</updated>

		<summary type="html">&lt;p&gt;Chrissyforrest: Published&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Article&lt;br /&gt;
|Standalone=No&lt;br /&gt;
|DisplayName=App&lt;br /&gt;
|TocName=App&lt;br /&gt;
|Context=Learn how to control your widgets.&lt;br /&gt;
|ComingSoon=No&lt;br /&gt;
|Platform=GenesysEngage-cloud&lt;br /&gt;
|Role=Developer&lt;br /&gt;
|Section={{Section&lt;br /&gt;
|sectionHeading=Overview&lt;br /&gt;
|alignment=Vertical&lt;br /&gt;
|structuredtext=App is the main controller for Genesys Widgets and has no UI. It controls all startup routines, global configurations, and extensions, and it executes the onReady event and distributes changes to theme, language, mobile mode, and other application-wide effects.&lt;br /&gt;
===Usage===&lt;br /&gt;
App's main interface is its configuration. You set all global defaults using the window._genesys.widgets.main property. &lt;br /&gt;
App also has a few commands you can use to change the language and theme.&lt;br /&gt;
===Customization===&lt;br /&gt;
App itself cannot be customized, but its configuration options affect all widgets.&lt;br /&gt;
===Mobile Support===&lt;br /&gt;
App has built-in mobile detection and can automatically notify all widgets to switch to mobile mode. You can also control this manually.&lt;br /&gt;
|Status=No&lt;br /&gt;
}}{{Section&lt;br /&gt;
|sectionHeading=Configuration&lt;br /&gt;
|anchor=config&lt;br /&gt;
|alignment=Vertical&lt;br /&gt;
|structuredtext====Description===&lt;br /&gt;
App uses the configuration property '_genesys.widgets.main'. App controls the Genesys Widgets product as a whole, handling themes, languages, and mobile devices.&lt;br /&gt;
&lt;br /&gt;
===Example===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
window._genesys.widgets = {&lt;br /&gt;
&lt;br /&gt;
	main: {&lt;br /&gt;
		theme: 'dark',&lt;br /&gt;
		themes: {&lt;br /&gt;
&lt;br /&gt;
			dark: 'cx-theme-dark',&lt;br /&gt;
			light: 'cx-theme-light',&lt;br /&gt;
			blue: 'cx-theme-blue',&lt;br /&gt;
			red: 'cx-theme-red'&lt;br /&gt;
		},&lt;br /&gt;
		lang: 'en',&lt;br /&gt;
		i18n: 'i18n.json',&lt;br /&gt;
		mobileMode: 'auto',&lt;br /&gt;
		mobileModeBreakpoint: 600,&lt;br /&gt;
		debug: true,&lt;br /&gt;
		header: {'Authorization': 'value'},&lt;br /&gt;
		cookieOptions: {&lt;br /&gt;
			secure: true, &lt;br /&gt;
			domain: 'genesys.com', &lt;br /&gt;
			path: '/',&lt;br /&gt;
                        sameSite: 'Strict'&lt;br /&gt;
		}&lt;br /&gt;
	},&lt;br /&gt;
	onReady: function(){&lt;br /&gt;
&lt;br /&gt;
		// Do something on Widgets ready&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
===Options===&lt;br /&gt;
{{{!}} class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Name&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
!Default&lt;br /&gt;
!Required&lt;br /&gt;
!Introduced/Updated&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}main.themes&lt;br /&gt;
{{!}}object&lt;br /&gt;
{{!}}An object list containing the CSS classname for each theme. The property names are used to select the theme in the 'theme' property, for example {dark:'cx-theme-dark', light:'cx-theme-light', 'red':'cx-theme-red', 'blue':'cx-theme-blue'}.&lt;br /&gt;
Where 'dark' and 'light' are the built-in themes provided in Genesys Widgets and 'red' and 'blue' are example custom theme names you may create on your own. {{NoteFormat|It is not necessary to define the 'dark' and 'light' theme as shown in this example. It is included to help show how the formatting works. Whatever you put in this object will be merged with the default themes object internally.|}}&lt;br /&gt;
{{!}}{dark: 'cx-theme-dark', light: 'cx-theme-light'}&lt;br /&gt;
{{!}}n/a&lt;br /&gt;
{{!}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}main.theme&lt;br /&gt;
{{!}}string&lt;br /&gt;
{{!}}Selects the theme to apply to Genesys Widgets from the 'themes' object. Uses the property name of the theme. for example using the example from 'themes' above, possible values for this could be 'dark', 'light', 'red', 'blue'.&lt;br /&gt;
{{!}}dark&lt;br /&gt;
{{!}}n/a&lt;br /&gt;
{{!}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}main.lang&lt;br /&gt;
{{!}}string&lt;br /&gt;
{{!}}Select the language to use from the 'i18n' language pack. Language codes are selected by the customer. Any language code format can be used as long as this property matches one of the language codes in your i18n language pack. For more information about localization, see {{Link-AnywhereElse|product=WID|version=Current|manual=Developer|topic=GWCInternat|display text=localization}}.&lt;br /&gt;
{{!}}en&lt;br /&gt;
{{!}}n/a&lt;br /&gt;
{{!}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}main.i18n&lt;br /&gt;
{{!}}URL string or JSON&lt;br /&gt;
{{!}}Either a path to a remote i18n.json language pack file or an inline JSON language pack definition. For more information about language packs, see {{Link-AnywhereElse|product=WID|version=Current|manual=Developer|topic=GWCInternat|display text=localization}}.&lt;br /&gt;
{{!}}en&lt;br /&gt;
{{!}}Default English language strings are built into each widget and are displayed by default. Defining this i18n language pack overrides the built-in strings.&lt;br /&gt;
{{!}}n/a&lt;br /&gt;
{{!}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}main.header&lt;br /&gt;
{{!}}object&lt;br /&gt;
{{!}}An object containing a key value pair for the authorization header.&lt;br /&gt;
{{!}}n/a&lt;br /&gt;
{{!}}n/a&lt;br /&gt;
{{!}}9.0.002.06&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{AnchorDiv|MP}}main.preload&lt;br /&gt;
{{!}}array&lt;br /&gt;
{{!}}(For use with lazy loading only) A list of plugins you want pre-loaded at startup. You may want certain plugins, such as SideBar, to be shown on screen as soon as possible; to do so, you may add 'sidebar' to this preload plugins array so it will be loaded after Widgets starts up. The names you add to the list must match the first part of the plugin filename you wish to load. Example: 'sidebar' will load 'sidebar.min.js' from the 'plugins/' folder. All filenames are lowercase.{{NoteFormat|This preload array is intended for use when running widgets in lazy loading mode. You may also use this to pre-load your own custom-made plugins.|}}&lt;br /&gt;
{{!}}none&lt;br /&gt;
{{!}}When lazy loading Widgets&lt;br /&gt;
{{!}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}main.mobileMode&lt;br /&gt;
{{!}}boolean/string&lt;br /&gt;
{{!}}Mobile Mode setting.&lt;br /&gt;
true = Force Mobile Mode on all devices. false = Disable Mobile Mode completely. 'auto' = Genesys Widgets Automatically switches between Mobile and Desktop Modes using the 'mobileModeBreakpoint' property and UserAgent detection.&lt;br /&gt;
{{!}}auto&lt;br /&gt;
{{!}}n/a&lt;br /&gt;
{{!}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}main.timeFormat&lt;br /&gt;
{{!}}number/string&lt;br /&gt;
{{!}}This sets the time format for the timestamps. It can be 12 or 24.&lt;br /&gt;
{{!}}12&lt;br /&gt;
{{!}}n/a&lt;br /&gt;
{{!}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}main.mobileModeBreakpoint&lt;br /&gt;
{{!}}number&lt;br /&gt;
{{!}}The breakpoint width in pixels where Genesys Widgets will switch to Mobile Mode. Breakpoint checked at startup only.&lt;br /&gt;
{{!}}600&lt;br /&gt;
{{!}}n/a&lt;br /&gt;
{{!}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}main.debug&lt;br /&gt;
{{!}}boolean&lt;br /&gt;
{{!}}Enable debug logging from the bus to appear in the browser console.&lt;br /&gt;
{{!}}false&lt;br /&gt;
{{!}}n/a&lt;br /&gt;
{{!}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}main.customStylesheetID&lt;br /&gt;
{{!}}string&lt;br /&gt;
{{!}}The HTML ID of a &amp;lt;style&amp;gt; tag that contains CSS overrides, custom themes, or other custom CSS intended for Genesys Widgets. On startup, Widgets will move this &amp;lt;style&amp;gt; tag to the end of the document so that 1:1 CSS class overrides apply correctly.&lt;br /&gt;
{{!}}n/a&lt;br /&gt;
{{!}}n/a&lt;br /&gt;
{{!}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}main.downloadGoogleFont&lt;br /&gt;
{{!}}boolean&lt;br /&gt;
{{!}} By default, Genesys Widgets downloads and uses the Google font 'Roboto'. to disable this download, set value false.{{!}}true&lt;br /&gt;
{{!}}n/a&lt;br /&gt;
{{!}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}main.deploymentID&lt;br /&gt;
{{!}}string&lt;br /&gt;
{{!}}The string used to customize cookie names so that multiple Widgets deployments can run in the same domain.&lt;br /&gt;
{{!}}n/a&lt;br /&gt;
{{!}}n/a&lt;br /&gt;
{{!}}9.0.006.02&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}main.cookieOptions&lt;br /&gt;
{{!}}object&lt;br /&gt;
{{!}}An object containing cookie attributes that applies globally to all Widgets. The following cookie attributes are supported:&lt;br /&gt;
&lt;br /&gt;
# 'secure' - Either true or false, indicating if the cookie transmission requires a secure protocol (https).&lt;br /&gt;
# 'domain' - A string indicating a valid domain where the cookie should be visible. &lt;br /&gt;
# 'path' - A string indicating the path where the cookie is visible.&lt;br /&gt;
# 'expires' - Specifies the number of days, either from time of creation or from a date instance, until the cookie is to be removed. 'domain' and 'path' can be used to make cookies compatible with environments that use a non FQDN URL, such as an intranet hostname. However, the domain should only be manually set in production if the automated values are causing problems. Otherwise, rely on the automated domain and path.&lt;br /&gt;
# 'sameSite' - This maps to the cookie SameSite attribute allowing the cookie to be restricted to a first-party or same-site context. It can take any of the supported values that [https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie/SameSite SameSite] attribute takes. {{NoteFormat|The values are automatically set by Widgets to support cross-sub-domain cookies. Modifying these options overrides the automated values and might break cross-sub-domain cookie support if not properly set.&lt;br /&gt;
&lt;br /&gt;
For usage, please refer to the above example|}}&lt;br /&gt;
{{!}}{sameSite:'Strict'}&lt;br /&gt;
{{!}}n/a&lt;br /&gt;
{{!}}9.0.017.01&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}onReady&lt;br /&gt;
{{!}}function&lt;br /&gt;
{{!}}A callback function that is invoked when the Widgets are ready and initialized with the configuration provided.&lt;br /&gt;
{{!}}none&lt;br /&gt;
{{!}}n/a&lt;br /&gt;
{{!}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}}&lt;br /&gt;
|Status=No&lt;br /&gt;
}}{{Section&lt;br /&gt;
|sectionHeading=Localization&lt;br /&gt;
|alignment=Vertical&lt;br /&gt;
|structuredtext=No localization options.&lt;br /&gt;
|Status=No&lt;br /&gt;
}}{{Section&lt;br /&gt;
|sectionHeading=API Commands&lt;br /&gt;
|alignment=Vertical&lt;br /&gt;
|structuredtext=Once you've registered your plugin on the bus, you can call commands on other registered plugins. Here's how to use the global bus object to register a new plugin on the bus.&lt;br /&gt;
&lt;br /&gt;
{{NoteFormat|The global bus object is a debugging tool. When implementing Widgets on your own site, do not use the global bus object to register your custom plugins. Instead, see {{Link-SomewhereInThisManual|topic=GWCBusExtensions|display text=Widgets Extensions}} for more information about extending Genesys Widgets.|1}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;var oMyPlugin = window._genesys.widgets.bus.registerPlugin('MyPlugin');&lt;br /&gt;
&lt;br /&gt;
oMyPlugin.command('App.themeDemo');&amp;lt;/source&amp;gt;&lt;br /&gt;
===setTheme===&lt;br /&gt;
Sets the theme for Genesys Widgets from the list of registered themes. Default themes are 'light' and 'dark'. You can register as many new themes as you need.&lt;br /&gt;
&lt;br /&gt;
====Example====&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
oMyPlugin.command('App.setTheme', {theme: 'light'}).done(function(e){&lt;br /&gt;
&lt;br /&gt;
	// App set theme successfully&lt;br /&gt;
&lt;br /&gt;
}).fail(function(e){&lt;br /&gt;
&lt;br /&gt;
	// App failed to set theme&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
====Options====&lt;br /&gt;
&lt;br /&gt;
{{{!}} class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
{{!}}-&lt;br /&gt;
!{{!}}Option&lt;br /&gt;
!{{!}}Type&lt;br /&gt;
!{{!}}Description&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{!}}theme&lt;br /&gt;
{{!}}{{!}}string&lt;br /&gt;
{{!}}{{!}}Name of the theme you want to use. This name is specified in window._genesys.main.themes. Default themes are 'light' and 'dark'.&lt;br /&gt;
{{!}}}&lt;br /&gt;
&lt;br /&gt;
====Resolutions====&lt;br /&gt;
&lt;br /&gt;
{{{!}} class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
{{!}}-&lt;br /&gt;
!{{!}}Status&lt;br /&gt;
!{{!}}When&lt;br /&gt;
!{{!}}Returns&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{!}}resolved&lt;br /&gt;
{{!}}{{!}}Theme exists and is successfully changed&lt;br /&gt;
{{!}}{{!}}The name of the theme that was chosen, for example 'light'.&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{!}}rejected&lt;br /&gt;
{{!}}{{!}}Theme does not exist&lt;br /&gt;
{{!}}{{!}}'Invalid theme specified'.&lt;br /&gt;
{{!}}}&lt;br /&gt;
===getTheme===&lt;br /&gt;
Get the CSS classname for the currently selected theme.&lt;br /&gt;
&lt;br /&gt;
====Example====&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
oMyPlugin.command('App.getTheme').done(function(e){&lt;br /&gt;
&lt;br /&gt;
	// App got theme successfully&lt;br /&gt;
	// e == CSS classname for current theme&lt;br /&gt;
&lt;br /&gt;
}).fail(function(e){&lt;br /&gt;
&lt;br /&gt;
	// App failed to get theme&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
====Resolutions====&lt;br /&gt;
&lt;br /&gt;
{{{!}} class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
{{!}}-&lt;br /&gt;
!{{!}}Status&lt;br /&gt;
!{{!}}When&lt;br /&gt;
!{{!}}Returns&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{!}}resolved&lt;br /&gt;
{{!}}{{!}}Always&lt;br /&gt;
{{!}}{{!}}CSS classname for the currently selected theme. e.g. 'cx-theme-light'&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{!}}rejected&lt;br /&gt;
{{!}}{{!}}Never&lt;br /&gt;
{{!}}{{!}} n/a&lt;br /&gt;
{{!}}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===reTheme===&lt;br /&gt;
Accepts an HTML reference (either string or jQuery wrapped set) and applies the proper CSS Theme Classname to that HTML and returns it back. When widgets receive the 'theme' event from App, they pass-in their UI containers into App.reTheme to have the old theme classname stripped and new classname applied.&lt;br /&gt;
&lt;br /&gt;
====Example====&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
oMyPlugin.command('App.reTheme', {html: '&amp;lt;div&amp;gt;Test Theme&amp;lt;/div&amp;gt;'}).done(function(e){&lt;br /&gt;
&lt;br /&gt;
	// App set theme successfully&lt;br /&gt;
&lt;br /&gt;
}).fail(function(e){&lt;br /&gt;
&lt;br /&gt;
	// App failed to set theme&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
====Options====&lt;br /&gt;
&lt;br /&gt;
{{{!}} class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
{{!}}-&lt;br /&gt;
!{{!}}Option&lt;br /&gt;
!{{!}}Type&lt;br /&gt;
!{{!}}Description&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{!}}html&lt;br /&gt;
{{!}}{{!}}string or jQuery Wrapped Set&lt;br /&gt;
{{!}}{{!}}HTML string or jQuery Wrapped Set you want to have modified.&lt;br /&gt;
{{!}}}&lt;br /&gt;
&lt;br /&gt;
====Resolutions====&lt;br /&gt;
&lt;br /&gt;
{{{!}} class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
{{!}}-&lt;br /&gt;
!{{!}}Status&lt;br /&gt;
!{{!}}When&lt;br /&gt;
!{{!}}Returns&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{!}}resolved&lt;br /&gt;
{{!}}{{!}}HTML is provided and theme is updated&lt;br /&gt;
{{!}}{{!}}HTML that was passed-in and modified&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{!}}rejected&lt;br /&gt;
{{!}}{{!}}No HTML is provided&lt;br /&gt;
{{!}}{{!}}'No HTML provided by [plugin name]'&lt;br /&gt;
{{!}}}&lt;br /&gt;
===themeDemo===&lt;br /&gt;
Start an automated demo of each theme. All registered themes will be applied with a default delay between themes of 2 seconds. You can override this delay. This command is useful for comparing themes or testing themes with official or custom widgets.&lt;br /&gt;
&lt;br /&gt;
====Example====&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
oMyPlugin.command('App.themeDemo', {delay: 1000}).done(function(e){&lt;br /&gt;
&lt;br /&gt;
	// App demo successfully started&lt;br /&gt;
&lt;br /&gt;
}).fail(function(e){&lt;br /&gt;
&lt;br /&gt;
	// App failed to start demo&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
====Options====&lt;br /&gt;
&lt;br /&gt;
{{{!}} class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
{{!}}-&lt;br /&gt;
!{{!}}Option&lt;br /&gt;
!{{!}}Type&lt;br /&gt;
!{{!}}Description&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{!}}delay&lt;br /&gt;
{{!}}{{!}}number&lt;br /&gt;
{{!}}{{!}}Number of milliseconds between theme changes. Default value is 2000 milliseconds.&lt;br /&gt;
{{!}}}&lt;br /&gt;
&lt;br /&gt;
====Resolutions====&lt;br /&gt;
&lt;br /&gt;
{{{!}} class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
{{!}}-&lt;br /&gt;
!{{!}}Status&lt;br /&gt;
!{{!}}When&lt;br /&gt;
!{{!}}Returns&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{!}}resolved&lt;br /&gt;
{{!}}{{!}}Always&lt;br /&gt;
{{!}}{{!}} n/a&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{!}}rejected&lt;br /&gt;
{{!}}{{!}}Never&lt;br /&gt;
{{!}}{{!}} n/a&lt;br /&gt;
{{!}}}&lt;br /&gt;
&lt;br /&gt;
===setLanguage===&lt;br /&gt;
Changes the language&lt;br /&gt;
&lt;br /&gt;
====Example====&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
oMyPlugin.command('App.setLanguage', {lang: 'eng'}).done(function(e){&lt;br /&gt;
&lt;br /&gt;
	// App set language successfully started&lt;br /&gt;
&lt;br /&gt;
}).fail(function(e){&lt;br /&gt;
&lt;br /&gt;
	// App failed to set language&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
====Options====&lt;br /&gt;
&lt;br /&gt;
{{{!}} class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
{{!}}-&lt;br /&gt;
!{{!}}Option&lt;br /&gt;
!{{!}}Type&lt;br /&gt;
!{{!}}Description&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{!}}lang&lt;br /&gt;
{{!}}{{!}}string&lt;br /&gt;
{{!}}{{!}}Change the language of Genesys Widgets. Switches all strings in Widgets to selected language.&lt;br /&gt;
{{!}}}&lt;br /&gt;
&lt;br /&gt;
====Resolutions====&lt;br /&gt;
&lt;br /&gt;
{{{!}} class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
{{!}}-&lt;br /&gt;
!{{!}}Status&lt;br /&gt;
!{{!}}When&lt;br /&gt;
!{{!}}Returns&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{!}}resolved&lt;br /&gt;
{{!}}{{!}}Language successfully changed&lt;br /&gt;
{{!}}{{!}} n/a&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{!}}rejected&lt;br /&gt;
{{!}}{{!}}No language code is provided&lt;br /&gt;
{{!}}{{!}}No language code provided&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{!}}rejected&lt;br /&gt;
{{!}}{{!}}No matching language code is specified in your language pack&lt;br /&gt;
{{!}}{{!}}No matching language code found in language pack&lt;br /&gt;
{{!}}}&lt;br /&gt;
&lt;br /&gt;
===closeAll===&lt;br /&gt;
Publishes the 'App.closeAll' event that requests all widgets to close.&lt;br /&gt;
&lt;br /&gt;
====Example====&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
oMyPlugin.command('App.closeAll').done(function(e){&lt;br /&gt;
&lt;br /&gt;
	// App closed all successfully&lt;br /&gt;
&lt;br /&gt;
}).fail(function(e){&lt;br /&gt;
&lt;br /&gt;
	// App failed to close all&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Resolutions====&lt;br /&gt;
{{{!}} class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
{{!}}-&lt;br /&gt;
!{{!}}Status&lt;br /&gt;
!{{!}}When&lt;br /&gt;
!{{!}}Returns&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{!}}resolved&lt;br /&gt;
{{!}}{{!}}Always&lt;br /&gt;
{{!}}{{!}} n/a&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{!}}rejected&lt;br /&gt;
{{!}}{{!}}Never&lt;br /&gt;
{{!}}{{!}} n/a&lt;br /&gt;
{{!}}}&lt;br /&gt;
&lt;br /&gt;
===updateAJAXHeader===&lt;br /&gt;
'''Introduced: 9.0.002.06'''&lt;br /&gt;
&lt;br /&gt;
Updates the Authorization header.&lt;br /&gt;
&lt;br /&gt;
====Example====&lt;br /&gt;
 _genesys.widgets.bus.command('App.updateAJAXHeader', {header: &lt;br /&gt;
 &lt;br /&gt;
 	{'Authorization': 'value'}&lt;br /&gt;
 &lt;br /&gt;
 });&lt;br /&gt;
&lt;br /&gt;
====Resolutions====&lt;br /&gt;
{{{!}} class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Status&lt;br /&gt;
!When&lt;br /&gt;
!Returns&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}resolved&lt;br /&gt;
{{!}}Header is updated&lt;br /&gt;
{{!}}n/a&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}rejected&lt;br /&gt;
{{!}}Never&lt;br /&gt;
{{!}}No request header found&lt;br /&gt;
{{!}}}&lt;br /&gt;
&lt;br /&gt;
===removeAJAXHeader===&lt;br /&gt;
'''Introduced: 9.0.002.06'''&lt;br /&gt;
&lt;br /&gt;
Removes the set Authorization header.&lt;br /&gt;
&lt;br /&gt;
====Example====&lt;br /&gt;
 _genesys.widgets.bus.command('App.removeAJAXHeader');&lt;br /&gt;
&lt;br /&gt;
====Resolutions====&lt;br /&gt;
{{{!}} class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Status&lt;br /&gt;
!When&lt;br /&gt;
!Returns&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}resolved&lt;br /&gt;
{{!}}Always&lt;br /&gt;
{{!}}n/a&lt;br /&gt;
{{!}}}&lt;br /&gt;
&lt;br /&gt;
===registerExtension===&lt;br /&gt;
'''Introduced: 9.0.002.06'''&lt;br /&gt;
&lt;br /&gt;
Allows you to register and initialize new extensions at runtime instead of predefining extensions before Genesys Widgets starts up.&lt;br /&gt;
&lt;br /&gt;
====Options====&lt;br /&gt;
{{{!}} class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Option&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}undefined&lt;br /&gt;
{{!}}function&lt;br /&gt;
{{!}}Your extension function. Receives the following arguments: $ (jQuery), CXBus, Common&lt;br /&gt;
{{!}}}&lt;br /&gt;
&lt;br /&gt;
====Resolutions====&lt;br /&gt;
{{{!}} class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Status&lt;br /&gt;
!When&lt;br /&gt;
!Returns&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}resolved&lt;br /&gt;
{{!}}Valid 'extension' object provided&lt;br /&gt;
{{!}}n/a&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}rejected&lt;br /&gt;
{{!}}Invalid 'extension' option provided&lt;br /&gt;
{{!}}n/a&lt;br /&gt;
{{!}}}&lt;br /&gt;
&lt;br /&gt;
===registerAutoLoad===&lt;br /&gt;
(For use with lazy loading only) Allows you to register a plugin into the {{Link-SomewhereInThisVersion|manual=SDK|topic=App-combined|anchor=MP|display text=preload plugins array}} so that it can be pre-loaded at the startup rather than lazy loading later. This can be useful when there is an active session maintained by your Widget and you would like to show it immediately at startup during page refresh or navigating across pages.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;Note: This command is intended for use when running widgets in lazy loading mode.&lt;br /&gt;
You may also use this to register and pre-load your own custom-made plugins.&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Options====&lt;br /&gt;
{{{!}} class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Option&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}name&lt;br /&gt;
{{!}}string&lt;br /&gt;
{{!}}The name of the plugin that needs to be registered for auto loading.&lt;br /&gt;
{{!}}}&lt;br /&gt;
&lt;br /&gt;
====Resolutions====&lt;br /&gt;
{{{!}} class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Status&lt;br /&gt;
!When&lt;br /&gt;
!Returns&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}resolved&lt;br /&gt;
{{!}}A plugin is added into the preload list&lt;br /&gt;
{{!}}n/a&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}rejected&lt;br /&gt;
{{!}}Never&lt;br /&gt;
{{!}}n/a&lt;br /&gt;
{{!}}}&lt;br /&gt;
&lt;br /&gt;
===deregisterAutoLoad===&lt;br /&gt;
(For use with lazy loading only) Allows you to de-register a plugin from the {{Link-SomewhereInThisVersion|manual=SDK|topic=App-combined|anchor=MP|display text=preload plugins array}} so that it will not be pre-loaded at startup. This can be useful when there is no more active session maintained by your Widget and you don't want to show it on the screen immediately at startup.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;Note: This command is intended for use when running widgets in lazy loading mode.&lt;br /&gt;
You may also use this to de-register your own custom-made plugins.&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Options====&lt;br /&gt;
{{{!}} class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Option&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}name&lt;br /&gt;
{{!}}string&lt;br /&gt;
{{!}}The name of the plugin that needs to be de-registered from auto loading.&lt;br /&gt;
{{!}}}&lt;br /&gt;
&lt;br /&gt;
====Resolutions====&lt;br /&gt;
{{{!}} class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Status&lt;br /&gt;
!When&lt;br /&gt;
!Returns&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}resolved&lt;br /&gt;
{{!}}A plugin is removed from the preload list&lt;br /&gt;
{{!}}n/a&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}rejected&lt;br /&gt;
{{!}}Never&lt;br /&gt;
{{!}}n/a&lt;br /&gt;
{{!}}}&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
|Status=No&lt;br /&gt;
}}{{Section&lt;br /&gt;
|sectionHeading=API Events&lt;br /&gt;
|alignment=Vertical&lt;br /&gt;
|structuredtext=Once you've registered your plugin on the bus, you can subscribe to and listen for published events. Here's how to use the global bus object to register a new plugin on the bus.&lt;br /&gt;
&lt;br /&gt;
{{NoteFormat|The global bus object is a debugging tool. When implementing Widgets on your own site, do not use the global bus object to register your custom plugins. Instead, see {{Link-SomewhereInThisManual|topic=GWCBusExtensions|display text=Widgets Extensions}} for more information about extending Genesys Widgets.|1}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;var oMyPlugin = window._genesys.widgets.bus.registerPlugin('MyPlugin');&lt;br /&gt;
&lt;br /&gt;
oMyPlugin.subscribe('App.ready', function(e){});&amp;lt;/source&amp;gt;&lt;br /&gt;
{{{!}} class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
{{!}}-&lt;br /&gt;
!{{!}}Name&lt;br /&gt;
!{{!}}Description&lt;br /&gt;
!{{!}}Data&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{!}}ready&lt;br /&gt;
{{!}}{{!}}CallUs is initialized and ready to accept commands.&lt;br /&gt;
{{!}}{{!}} &lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{!}}i18n&lt;br /&gt;
{{!}}{{!}}Published when the language for Genesys Widgets is changed or is being set for the first time.&lt;br /&gt;
{{!}}{{!}}'(language code)'&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{!}}theme&lt;br /&gt;
{{!}}{{!}}Published when the theme for Genesys Widgets is changed or is being set for the first time.&lt;br /&gt;
{{!}}{{!}}{theme: '(theme CSS classname)'}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{!}}timeFormat&lt;br /&gt;
{{!}}{{!}}Published when the time format for Genesys Widgets is changed or is being set for the first time.&lt;br /&gt;
{{!}}{{!}}{timeFormat: iTimeFormat}&lt;br /&gt;
{{!}}}&lt;br /&gt;
|Status=No&lt;br /&gt;
}}&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Chrissyforrest</name></author>
		
	</entry>
	<entry>
		<id>https://all.docs.genesys.com/index.php?title=WID/Current/SDK/GWCBusAPIOverview&amp;diff=69529</id>
		<title>WID/Current/SDK/GWCBusAPIOverview</title>
		<link rel="alternate" type="text/html" href="https://all.docs.genesys.com/index.php?title=WID/Current/SDK/GWCBusAPIOverview&amp;diff=69529"/>
		<updated>2020-10-27T18:49:38Z</updated>

		<summary type="html">&lt;p&gt;Chrissyforrest: Published&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Article&lt;br /&gt;
|Standalone=No&lt;br /&gt;
|DisplayName=Widgets Bus API overview&lt;br /&gt;
|TocName=Widgets Bus API overview&lt;br /&gt;
|Context=Learn about the bus that all widgets components are built on.&lt;br /&gt;
|ComingSoon=No&lt;br /&gt;
|Platform=GenesysEngage-cloud&lt;br /&gt;
|Role=Developer&lt;br /&gt;
|Section={{Section&lt;br /&gt;
|sectionHeading=Overview&lt;br /&gt;
|anchor=Overview&lt;br /&gt;
|alignment=Vertical&lt;br /&gt;
|structuredtext=Genesys Widgets is built on top of the CXBus messaging bus. CXBus uses the {{#Widget:ExtLink|link=https://en.wikipedia.org/wiki/Publish–subscribe_pattern|displaytext=publish-subscribe}} model to facilitate communication between the Widgets components, all of which are ''plugins'' that can both ''publish'' events on the bus and ''subscribe'' to the events they are interested in.&lt;br /&gt;
&lt;br /&gt;
With the help of the Widgets-Core plugins, CXBus makes it possible to combine the logic implemented by user interface plugins, service plugins, and utility plugins into cohesive products that can provide chat sessions, schedule callbacks, and so on.&lt;br /&gt;
&lt;br /&gt;
Publications and subscriptions are loosely bound so that you can publish and subscribe to any event without that event explicitly being available. This allows for plugins to lazy load into the bus or provide conditional logic in your plugins so they can wait for other plugins to be available.&lt;br /&gt;
&lt;br /&gt;
CXBus events and commands are executed asynchronously using deferred methods and promises. This allows for better performance and standardized Pass/Fail handling for all commands. Command promises are not resolved until the command is finished, including any nested asynchronous commands that command may invoke. This gives you assurance that the command completed successfully and the timing of your follow-up action will occur at the right time. As for permissions, CXBus provides metadata in every command call including which plugin called the command and at what time. This allows for plugins to selectively allow/deny invocation of commands. &lt;br /&gt;
&lt;br /&gt;
You can use three methods to access the Bus:&lt;br /&gt;
&lt;br /&gt;
*Global access&lt;br /&gt;
*Genesys Widgets onReady callback&lt;br /&gt;
*Extensions&lt;br /&gt;
&lt;br /&gt;
===Global access===&lt;br /&gt;
====QuickBus====&lt;br /&gt;
&amp;lt;tt&amp;gt;window._genesys.widgets.bus&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;For quick access to call commands on the bus, you can access the '''QuickBus''' instance after Genesys Widgets loads. QuickBus is a CXBus plugin that is exposed globally for your convenience. Typical use cases for using QuickBus are for debugging or calling a command when a link or button is clicked. Instead of creating your own plugin, you can use QuickBus to add the click handler inline in your HTML.&amp;lt;br /&amp;gt;Example:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;#&amp;quot; onclick=&amp;quot;_genesys.widgets.bus.command('WebChat.open');&amp;quot;&amp;gt;Open WebChat&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
====Global CXBus====&lt;br /&gt;
CXBus is available as a global instance named &amp;quot;CXBus&amp;quot; (or window.CXBus). Unlike QuickBus, this is not a plugin but CXBus itself.&lt;br /&gt;
&amp;lt;br /&amp;gt;CXBus has been updated to include a &amp;quot;command&amp;quot; method that allows you to execute a command directly from the CXBus instance. &lt;br /&gt;
&amp;lt;br /&amp;gt;Example:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
CXBus.command(&amp;quot;WebChat.open&amp;quot;);&lt;br /&gt;
&amp;lt;/source&amp;gt;You can use this, like QuickBus, for debugging or setting up click events.&lt;br /&gt;
===Genesys Widgets onReady callback===&lt;br /&gt;
Genesys Widgets provides an &amp;quot;onReady&amp;quot; callback function that you can define in your configuration. This will be triggered after Genesys Widgets initializes. QuickBus is provided as an argument in this function, but you may also access CXBus globally in your function.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
window._genesys.widgets.onReady = function(QuickBus){&lt;br /&gt;
    &lt;br /&gt;
    // Use the QuickBus plugin provided here to interface with the bus&lt;br /&gt;
    // QuickBus is analogous to window._genesys.widgets.bus&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
===Extensions===&lt;br /&gt;
You can define your own plugins/widgets that interface with Genesys Widgets. For more information, please see {{Link-SomewhereInThisVersion|manual=SDK|topic=GWCBusExtensions|display text=Genesys Widgets extensions}}.&lt;br /&gt;
|Status=No&lt;br /&gt;
}}{{Section&lt;br /&gt;
|sectionHeading=CXBus Reference&lt;br /&gt;
|anchor=CXBusReference&lt;br /&gt;
|alignment=Vertical&lt;br /&gt;
|structuredtext=The CXBus instance is exposed globally (window.CXBus) and has several methods available:&lt;br /&gt;
&lt;br /&gt;
*CXBus.command&lt;br /&gt;
*CXBus.configure&lt;br /&gt;
*CXBus.loadFile&lt;br /&gt;
*CXBus.loadPlugin&lt;br /&gt;
*CXBus.registerPlugin&lt;br /&gt;
&lt;br /&gt;
===CXBus.command===&lt;br /&gt;
Calls a command on the bus under the namespace &amp;quot;CXBus&amp;quot;. Use this to quickly and easily call commands without needing to generate a unique plugin interface object first.&lt;br /&gt;
====Example====&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
CXBus.command(&amp;quot;WebChat.open&amp;quot;, {});&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
====Arguments====&lt;br /&gt;
&lt;br /&gt;
{{{!}} class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
{{!}}-&lt;br /&gt;
!{{!}}Name&lt;br /&gt;
!{{!}}Type&lt;br /&gt;
!{{!}}Description&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{!}}Command name&lt;br /&gt;
{{!}}{{!}}string&lt;br /&gt;
{{!}}{{!}}The name of the command you wish to execute.&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{!}}Command options&lt;br /&gt;
{{!}}{{!}}object&lt;br /&gt;
{{!}}{{!}}Optional: You may pass an object containing properties that the command will accept. Refer to the documentation on each command to see what options are available.&lt;br /&gt;
{{!}}}&lt;br /&gt;
&lt;br /&gt;
====Returns====&lt;br /&gt;
Always returns a promise. You can define done(), fail(), or always() callbacks for every command. &lt;br /&gt;
===CXBus.configure===&lt;br /&gt;
Allows you to change configuration options for CXBus.&lt;br /&gt;
====Example====&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
CXBus.configure({debug: true, pluginsPath: &amp;quot;/js/widgets/plugins/&amp;quot;});&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
====Arguments====&lt;br /&gt;
&lt;br /&gt;
{{{!}} class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
{{!}}-&lt;br /&gt;
!{{!}}Name&lt;br /&gt;
!{{!}}Type&lt;br /&gt;
!{{!}}Description&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{!}}Configuration options&lt;br /&gt;
{{!}}{{!}}object&lt;br /&gt;
{{!}}{{!}}An object containing properties, similar to command options. In this object you can change configuration options for CXBus.&lt;br /&gt;
{{!}}}&lt;br /&gt;
&lt;br /&gt;
====Configuration options====&lt;br /&gt;
{{{!}} class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
{{!}}-&lt;br /&gt;
!{{!}}Name&lt;br /&gt;
!{{!}}Type&lt;br /&gt;
!{{!}}Description&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{!}}debug&lt;br /&gt;
{{!}}{{!}}boolean&lt;br /&gt;
{{!}}{{!}}Enable or disable CXBus logging in the javascript console. Set to '''true''' to enable; set to '''false''' to disable. Default value is '''false'''.&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{!}}pluginsPath&lt;br /&gt;
{{!}}{{!}}string&lt;br /&gt;
{{!}}{{!}}The location of the Genesys Widgets &amp;quot;plugins&amp;quot; folder.&lt;br /&gt;
'''Example''': &amp;quot;/js/widgets/plugins/&amp;quot;&lt;br /&gt;
The default value here is &amp;quot;&amp;quot;. This configuration option is used for lazy loading plugin files. Be sure to configure this option when using Genesys Widgets in lazy loading mode.&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{!}}pluginMap&lt;br /&gt;
{{!}}{{!}}object&lt;br /&gt;
{{!}}{{!}}Used to change the target JS file for each plugin or to add a new plugin.&lt;br /&gt;
&lt;br /&gt;
'''Example''':&lt;br /&gt;
 {sendmessage: &amp;quot;&amp;lt;nowiki&amp;gt;https://www.yoursite.com/plugins/custom-sendmessage.js&amp;lt;/nowiki&amp;gt;&amp;quot;}&lt;br /&gt;
CXBus will automatically lazy load plugins defined in this object when something tries to call a command on that plugin.&lt;br /&gt;
&lt;br /&gt;
For instance, if SendMessage.open is called and '''SendMessage''' isn't loaded, CXBus will fetch it from the default &amp;quot;plugins/&amp;quot; folder. If you want to load a different '''SendMessage''' widget, you can override the default URL of the JS file associated with &amp;quot;sendmessage&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
You can also prevent a plugin from loading by mapping it to '''false'''.&lt;br /&gt;
&lt;br /&gt;
'''Example''':&lt;br /&gt;
{sendmessage: false}{{NoteFormat|&lt;br /&gt;
* Any number of plugins can be included in this object.&lt;br /&gt;
* Only works when using the lazy-loading method of initializing Widgets.&lt;br /&gt;
*Not intended to be used to load different versions of Genesys Widgets plugins.}}&lt;br /&gt;
{{!}}}&lt;br /&gt;
&lt;br /&gt;
====Returns====&lt;br /&gt;
This method returns nothing.&lt;br /&gt;
===CXBus.loadFile===&lt;br /&gt;
Loads any javascript file.&lt;br /&gt;
====Example====&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
CXBus.loadFile(&amp;quot;/js/widgets/plugins/webchat.min.js&amp;quot;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
====Arguments====&lt;br /&gt;
&lt;br /&gt;
{{{!}} class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
{{!}}-&lt;br /&gt;
!{{!}}Name&lt;br /&gt;
!{{!}}Type&lt;br /&gt;
!{{!}}Description&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{!}}File path&lt;br /&gt;
{{!}}{{!}}string&lt;br /&gt;
{{!}}{{!}}Loads a javascript file based on the file path specified.&lt;br /&gt;
{{!}}}&lt;br /&gt;
&lt;br /&gt;
====Returns====&lt;br /&gt;
Always returns a promise. You can define done(), fail(), or always() callbacks. &lt;br /&gt;
When the file loads successfully, done() will be triggered.&lt;br /&gt;
When the file fails to load, fail() will be triggered.&lt;br /&gt;
===CXBus.loadPlugin===&lt;br /&gt;
Loads a plugin file from the configured &amp;quot;plugins&amp;quot; folder.&lt;br /&gt;
====Example====&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
CXBus.loadPlugin(&amp;quot;webchat&amp;quot;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
====Arguments====&lt;br /&gt;
&lt;br /&gt;
{{{!}} class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
{{!}}-&lt;br /&gt;
!{{!}}Name&lt;br /&gt;
!{{!}}Type&lt;br /&gt;
!{{!}}Description&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{!}}Plugin name&lt;br /&gt;
{{!}}{{!}}string&lt;br /&gt;
{{!}}{{!}}Loads a plugin from the &amp;quot;plugins&amp;quot; folder by name (configured by the &amp;quot;pluginsPath&amp;quot; option). Plugin names match their CXBus namespaces but are lowercase. &amp;lt;br /&amp;gt;Example: To load WebChat, use &amp;quot;webchat&amp;quot;. &amp;lt;br /&amp;gt;You can refer to the files inside the &amp;quot;plugins&amp;quot; folder as well. The first part of the file name will be the name you use with this function. &amp;lt;br /&amp;gt;Example: Use &amp;quot;webchat&amp;quot; to load &amp;quot;webchat.min.js&amp;quot;.&lt;br /&gt;
{{!}}}&lt;br /&gt;
&lt;br /&gt;
====Returns====&lt;br /&gt;
Always returns a promise. You can define done(), fail(), or always() callbacks. &lt;br /&gt;
When the plugin loads successfully, done() will be triggered.&lt;br /&gt;
When the plugin fails to load, fail() will be triggered.&lt;br /&gt;
===CXBus.registerPlugin===&lt;br /&gt;
Registers a new plugin namespace on the bus and returns a plugin interface object. You will use the plugin interface object to publish, subscribe, call commands, and perform other CXBus functions. &lt;br /&gt;
====Example====&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var oMyNewPlugin = CXBus.registerPlugin(&amp;quot;MyNewPlugin&amp;quot;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
====Arguments====&lt;br /&gt;
&lt;br /&gt;
{{{!}} class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
{{!}}-&lt;br /&gt;
!{{!}}Name&lt;br /&gt;
!{{!}}Type&lt;br /&gt;
!{{!}}Description&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{!}}CXBus plugin namespace&lt;br /&gt;
{{!}}{{!}}string&lt;br /&gt;
{{!}}{{!}}The namespace you want to reserve for your plugin.&lt;br /&gt;
{{!}}}&lt;br /&gt;
&lt;br /&gt;
====Returns====&lt;br /&gt;
If the namespace is not already taken, it will return a CXBus plugin interface object configured with the selected namespace. &lt;br /&gt;
If the namespace is already taken, it will return false.&lt;br /&gt;
|Status=No&lt;br /&gt;
}}{{Section&lt;br /&gt;
|sectionHeading=CXBus Plugin Interface Reference&lt;br /&gt;
|anchor=CXBusPluginInterfaceReference&lt;br /&gt;
|alignment=Vertical&lt;br /&gt;
|structuredtext=When you register a plugin using CXBus.registerPlugin(), it returns a CXBus Plugin Interface Object. This object contains many methods that allow you to interact with other plugins on the bus.&lt;br /&gt;
&lt;br /&gt;
Let's start with the assumption that we've created the below plugin interface:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var oMyNewPlugin = CXBus.registerPlugin(&amp;quot;MyNewPlugin&amp;quot;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===oMyNewPlugin.registerCommand===&lt;br /&gt;
Allows you to register a new command on the bus for other plugins to use.&lt;br /&gt;
====Example====&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
oMyNewPlugin.registerCommand(&amp;quot;test&amp;quot;, function(e){&lt;br /&gt;
	&lt;br /&gt;
	console.log(&amp;quot;'MyNewPlugin.test' command was called&amp;quot;, e)&lt;br /&gt;
&lt;br /&gt;
	e.deferred.resolve();&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
====Arguments====&lt;br /&gt;
{{{!}} &lt;br /&gt;
{{!}}- &lt;br /&gt;
!Name&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}Command name&lt;br /&gt;
{{!}}string&lt;br /&gt;
{{!}}The name you want for this command. When other plugins call your command, they must specify the namespace as well.&amp;lt;br /&amp;gt;Example: &amp;quot;test&amp;quot; is called on the bus as &amp;quot;MyNewPlugin.test&amp;quot;.&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}Command function&lt;br /&gt;
{{!}}function&lt;br /&gt;
{{!}}The command function that is executed when the command is called. This function is provided an '''Event Object''' that contains metadata and any options passed in.&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}} &lt;br /&gt;
====Event object====&lt;br /&gt;
{{{!}} &lt;br /&gt;
{{!}}- &lt;br /&gt;
!Name&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}time&lt;br /&gt;
{{!}}number (integer time)&lt;br /&gt;
{{!}}The time the command was called.&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}commander&lt;br /&gt;
{{!}}string&lt;br /&gt;
{{!}}The name of the plugin that called your command. Example: If your plugin called a command, the value would be &amp;quot;MyNewPlugin&amp;quot;. &amp;lt;br /&amp;gt; You can use this information to create plugin-specific logic in your command.&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}command&lt;br /&gt;
{{!}}string&lt;br /&gt;
{{!}}The name of this command. Example: &amp;quot;MyNewPlugin.test&amp;quot;. &amp;lt;br /&amp;gt;This can be useful if you are using the same function for multiple commands and need to identify which command was called.&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}deferred&lt;br /&gt;
{{!}}deferred promise object&lt;br /&gt;
{{!}}When a command is called, a promise is generated. You must resolve this promise in your command without exception. Either execute e.deferred.resolve() or e.deferred.reject().&amp;lt;br /&amp;gt;You may pass values back through these methods. If you pass a value back inside reject() it will be printed in the console as an error log automatically.&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}data&lt;br /&gt;
{{!}}object&lt;br /&gt;
{{!}}This is the object containing command options passed in when the command was called. If no options were passed, this will default to an empty object.&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}} &lt;br /&gt;
====Returns====&lt;br /&gt;
Returns true.&lt;br /&gt;
===oMyNewPlugin.registerEvents===&lt;br /&gt;
Registering events is a formality that allows CXBus to keep a registry of all possible events. You don't need to register events before publishing them, but it's a best practice to always register events.&lt;br /&gt;
====Example====&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
oMyNewPlugin.registerEvents([&amp;quot;ready&amp;quot;, &amp;quot;testEvent&amp;quot;]);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
====Arguments====&lt;br /&gt;
{{{!}} &lt;br /&gt;
{{!}}- &lt;br /&gt;
!Name&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}Event name array&lt;br /&gt;
{{!}}array&lt;br /&gt;
{{!}}An array of event names.&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}} &lt;br /&gt;
====Returns====&lt;br /&gt;
Returns true if at least one value event was included in the array.&lt;br /&gt;
Returns false if no events are included in the array or no array is passed in.&lt;br /&gt;
===oMyNewPlugin.subscribe===&lt;br /&gt;
&lt;br /&gt;
Subscribes your plugin to an event on the bus with a callback function. When the event is published, the callback function is executed. You can subscribe to any event, even if the event does not exist. This allows for binding events that may come in the future. &lt;br /&gt;
&lt;br /&gt;
====Example====&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
oMyNewPlugin.subscribe(&amp;quot;WebChat.opened&amp;quot;, function(e){&lt;br /&gt;
	&lt;br /&gt;
	// e = Event Object. Contains metadata and attached data &lt;br /&gt;
	//&lt;br /&gt;
	// Example Event Object data:&lt;br /&gt;
	//&lt;br /&gt;
	// e.time == 1532017560154&lt;br /&gt;
	// e.event == &amp;quot;WebChat.opened&amp;quot;&lt;br /&gt;
	// e.publisher == &amp;quot;WebChat&amp;quot;&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
====Arguments====&lt;br /&gt;
{{{!}} &lt;br /&gt;
{{!}}- &lt;br /&gt;
!Name&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}Event name&lt;br /&gt;
{{!}}string&lt;br /&gt;
{{!}}The name of the event you want to subscribe to. Must include the plugin's namespace.&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}Callback function&lt;br /&gt;
{{!}}function&lt;br /&gt;
{{!}}A function to execute when the event is published. An Event Object is passed into this function that gives you access to metadata and attached data.&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}} &lt;br /&gt;
====Event object====&lt;br /&gt;
{{{!}} &lt;br /&gt;
{{!}}- &lt;br /&gt;
!Name&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}time&lt;br /&gt;
{{!}}number (integer time)&lt;br /&gt;
{{!}}The time the event was published.&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}event&lt;br /&gt;
{{!}}string&lt;br /&gt;
{{!}}The name of the event, including namespace. That can be useful if you are using the same function to handle multiple events.&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}publisher&lt;br /&gt;
{{!}}string&lt;br /&gt;
{{!}}The namespace of the plugin that published the event.&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}} &lt;br /&gt;
====Returns====&lt;br /&gt;
Returns the name of the event back to you if the subscription was successful.&lt;br /&gt;
Returns false if you did not specify an event and/or a callback function.&lt;br /&gt;
===oMyNewPlugin.publish===&lt;br /&gt;
Publishes an event on the bus under your plugin's namespace. &lt;br /&gt;
====Example====&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
// Publishes the event &amp;quot;MyNewPlugin.testEvent&amp;quot; with attached data {test: &amp;quot;123&amp;quot;}&lt;br /&gt;
oMyNewPlugin.publish(&amp;quot;testEvent&amp;quot;, {test: &amp;quot;123&amp;quot;});&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
====Arguments====&lt;br /&gt;
{{{!}} &lt;br /&gt;
{{!}}- &lt;br /&gt;
!Name&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}Event name&lt;br /&gt;
{{!}}string&lt;br /&gt;
{{!}}The name of the event you want to publish. Do not include the plugin namespace.&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}Attached data&lt;br /&gt;
{{!}}object&lt;br /&gt;
{{!}}An object of arbitrary properties you can attach to your event.&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}} &lt;br /&gt;
====Returns====&lt;br /&gt;
Always returns true.&lt;br /&gt;
===oMyNewPlugin.republish===&lt;br /&gt;
A special method of publishing intended for one-off events like &amp;quot;ready&amp;quot;. In some cases, an event will fire only once. If a plugin is loaded at a later time that needs to subscribe to this event, it will never get it because it will never be published again. To solve this problem, the &amp;quot;republish&amp;quot; method will automatically republish an event to new subscribers as soon as they subscribe to it. &lt;br /&gt;
&lt;br /&gt;
In Genesys Widgets, every plugin publishes a &amp;quot;ready&amp;quot; event. This event is published using &amp;quot;republish&amp;quot; so that any plugin loaded and/or initialized after can still receive the event.&lt;br /&gt;
&lt;br /&gt;
It is  important that you only use &amp;quot;republish&amp;quot; for events that publish once. Using republish multiple times for the same event can cause unwanted behavior.&lt;br /&gt;
&lt;br /&gt;
Genesys Widgets plugins all publish a &amp;quot;ready&amp;quot; event. This is not related to the CXBus plugin interface object's &amp;quot;ready()&amp;quot; method. Calling oMyNewPlugin.ready() will not publish any events.&lt;br /&gt;
====Example====&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
oMyNewPlugin.republish(&amp;quot;ready&amp;quot;, {...});&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
====Arguments====&lt;br /&gt;
{{{!}} &lt;br /&gt;
{{!}}- &lt;br /&gt;
!Name&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}Event name&lt;br /&gt;
{{!}}string&lt;br /&gt;
{{!}}The name of the event you want to have republished. Do not include the plugin namespace.&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}Attached data&lt;br /&gt;
{{!}}object&lt;br /&gt;
{{!}}An object of arbitrary properties you can attach to your event.&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}} &lt;br /&gt;
====Returns====&lt;br /&gt;
Always returns true.&lt;br /&gt;
===oMyNewPlugin.publishDirect===&lt;br /&gt;
A slight variation on &amp;quot;publish&amp;quot;, this method will only publish an event on the bus if it has subscribers. The intention of this method is to avoid spamming the logs with events that no plugins are listening to. In particular, if you have an event that publishes frequently or on an interval, &amp;quot;publishDirect&amp;quot; may be used to minimize its impact on logs in the console.&lt;br /&gt;
====Example====&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
oMyNewPlugin.publishDirect(&amp;quot;poll&amp;quot;, {...});&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
====Arguments====&lt;br /&gt;
{{{!}} &lt;br /&gt;
{{!}}- &lt;br /&gt;
!Name&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}Event name&lt;br /&gt;
{{!}}string&lt;br /&gt;
{{!}}The name of the event you want to have republished. Do not include the plugin namespace.&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}Attached data&lt;br /&gt;
{{!}}object&lt;br /&gt;
{{!}}An object of arbitrary properties you can attach to your event.&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}} &lt;br /&gt;
====Returns====&lt;br /&gt;
Always returns true.&lt;br /&gt;
===oMyNewPlugin.command===&lt;br /&gt;
Have your plugin call a command on the bus. &lt;br /&gt;
====Example====&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
oMyNewPlugin.command(&amp;quot;WebChat.open&amp;quot;, {...}).done(function(e){&lt;br /&gt;
&lt;br /&gt;
	// If command succeeds&lt;br /&gt;
	// e == any returned data&lt;br /&gt;
&lt;br /&gt;
}).fail(function(e){&lt;br /&gt;
	&lt;br /&gt;
	// If command fails&lt;br /&gt;
	// e == any returned data&lt;br /&gt;
&lt;br /&gt;
}).always(function(){&lt;br /&gt;
	&lt;br /&gt;
	// Always executed&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
====Arguments====&lt;br /&gt;
{{{!}} &lt;br /&gt;
{{!}}- &lt;br /&gt;
!Name&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}Command name&lt;br /&gt;
{{!}}string&lt;br /&gt;
{{!}}Name of the command you wish to call.&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}Command options&lt;br /&gt;
{{!}}string&lt;br /&gt;
{{!}}Optional: An object containing properties the command will use in its execution. Refer to plugin references for a list of options available for each command.&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}} &lt;br /&gt;
====Returns====&lt;br /&gt;
Always returns a promise. You can define done(), fail(), or always() callbacks for every command.  &lt;br /&gt;
===oMyNewPlugin.before===&lt;br /&gt;
Allows you to interrupt a registered command on the bus with your own &amp;quot;before&amp;quot; function. You may modify the command options before they're passed to the command, you may trigger some action before the command is executed, or you can cancel the command before it executes.&lt;br /&gt;
&lt;br /&gt;
You may specify more than one &amp;quot;before&amp;quot; function for a command. If you do, they will be executed in a chain where the output of the previous function becomes the input for the next function. &lt;br /&gt;
You cannot remove &amp;quot;before&amp;quot; functions once they have been added.&lt;br /&gt;
====Example====&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
oMyNewPlugin.before(&amp;quot;WebChat.open&amp;quot;, function(oData){&lt;br /&gt;
&lt;br /&gt;
    // oData == the options passed into the command call&lt;br /&gt;
    // e.g. if this command is called:   oMyPlugin.command(&amp;quot;WebChat.open&amp;quot;, {form: {firstname: &amp;quot;Mike&amp;quot;&lt;br /&gt;
    // then oData will == {form: {firstname: &amp;quot;Mike&amp;quot;&lt;br /&gt;
    // You must return oData back, or an empty object {} for execution to continue.&lt;br /&gt;
    // If you return false|undefined|null or don't return anything, execution of the command will be stopped&lt;br /&gt;
    return oData;&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Arguments====&lt;br /&gt;
{{{!}} &lt;br /&gt;
{{!}}- &lt;br /&gt;
!Name&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}Command name&lt;br /&gt;
{{!}}string&lt;br /&gt;
{{!}}Name of the function you want to interrupt with your &amp;quot;before&amp;quot; function.&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}&amp;quot;before&amp;quot; function&lt;br /&gt;
{{!}}function&lt;br /&gt;
{{!}}A function that accepts command options (oData in above example). If you want the command to continue executing, you must return the oData object. If you want to cancel the command, return '''false''' or '''undefined''' or don't return anything. You may modify the contents of oData before it is sent to the command. This allows you to override command options or add on dynamic options depending on external conditions.&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}} &lt;br /&gt;
====Returns====&lt;br /&gt;
Returns true when you pass a properly formatted command name (e.g. &amp;quot;PluginName.commandName&amp;quot;).&lt;br /&gt;
Returns false when you pass an improperly formatted command name.&lt;br /&gt;
===oMyNewPlugin.registry===&lt;br /&gt;
Returns the CXBus Registry lookup table.&lt;br /&gt;
====Example====&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
oMyNewPlugin.registry();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
====Arguments====&lt;br /&gt;
No arguments.&lt;br /&gt;
====Returns====&lt;br /&gt;
Returns the internal CXBus registry that tracks all plugins, their commands, and their events. &lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Registry Structure Example:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	&amp;quot;Plugin1&amp;quot;: {&lt;br /&gt;
&lt;br /&gt;
		commands: [&amp;quot;command1&amp;quot;, &amp;quot;command2&amp;quot;],&lt;br /&gt;
		events: [&amp;quot;event1&amp;quot;, &amp;quot;event2&amp;quot;]&lt;br /&gt;
	},&lt;br /&gt;
&lt;br /&gt;
	&amp;quot;Plugin2&amp;quot;: {&lt;br /&gt;
&lt;br /&gt;
		commands: [&amp;quot;command1&amp;quot;, &amp;quot;command2&amp;quot;],&lt;br /&gt;
		events: [&amp;quot;event1&amp;quot;, &amp;quot;event2&amp;quot;]&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===oMyNewPlugin.subscribers===&lt;br /&gt;
Returns a list of events and their subscribers.&lt;br /&gt;
====Example====&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
oMyNewPlugin.subscribers();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
====Arguments====&lt;br /&gt;
No arguments.&lt;br /&gt;
====Returns====&lt;br /&gt;
Returns an object identifying a list of events being subscribed to, and a list of plugin names subscribed to each event.&lt;br /&gt;
&lt;br /&gt;
Example of WebChatService's subscribers:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
// Format  {&amp;quot;eventname&amp;quot;: [&amp;quot;subscriber1&amp;quot;, &amp;quot;subscriber2&amp;quot;]}&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
	&amp;quot;WebChatService.agentConnected&amp;quot;:[&amp;quot;WebChat&amp;quot;],&lt;br /&gt;
	&amp;quot;WebChatService.agentDisconnected&amp;quot;:[&amp;quot;WebChat&amp;quot;],&lt;br /&gt;
	&amp;quot;WebChatService.ready&amp;quot;:[],&lt;br /&gt;
	&amp;quot;WebChatService.started&amp;quot;:[&amp;quot;WebChat&amp;quot;],&lt;br /&gt;
	&amp;quot;WebChatService.restored&amp;quot;:[&amp;quot;WebChat&amp;quot;],&lt;br /&gt;
	&amp;quot;WebChatService.clientDisconnected&amp;quot;:[],&lt;br /&gt;
	&amp;quot;WebChatService.clientConnected&amp;quot;:[],&lt;br /&gt;
	&amp;quot;WebChatService.messageReceived&amp;quot;:[&amp;quot;WebChat&amp;quot;],&lt;br /&gt;
	&amp;quot;WebChatService.error&amp;quot;:[&amp;quot;WebChat&amp;quot;],&lt;br /&gt;
	&amp;quot;WebChatService.restoreTimeout&amp;quot;:[&amp;quot;WebChat&amp;quot;],&lt;br /&gt;
	&amp;quot;WebChatService.restoreFailed&amp;quot;:[&amp;quot;WebChat&amp;quot;],&lt;br /&gt;
	&amp;quot;WebChatService.ended&amp;quot;:[&amp;quot;WebChat&amp;quot;],&lt;br /&gt;
	&amp;quot;WebChatService.agentTypingStarted&amp;quot;:[&amp;quot;WebChat&amp;quot;],&lt;br /&gt;
	&amp;quot;WebChatService.agentTypingStopped&amp;quot;:[&amp;quot;WebChat&amp;quot;],&lt;br /&gt;
	&amp;quot;WebChatService.restoredOffline&amp;quot;:[&amp;quot;WebChat&amp;quot;],&lt;br /&gt;
	&amp;quot;WebChatService.chatServerWentOffline&amp;quot;:[&amp;quot;WebChat&amp;quot;],&lt;br /&gt;
	&amp;quot;WebChatService.chatServerBackOnline&amp;quot;:[&amp;quot;WebChat&amp;quot;],&lt;br /&gt;
	&amp;quot;WebChatService.disconnected&amp;quot;:[&amp;quot;WebChat&amp;quot;],&lt;br /&gt;
	&amp;quot;WebChatService.reconnected&amp;quot;:[&amp;quot;WebChat&amp;quot;]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===oMyNewPlugin.namespace===&lt;br /&gt;
Returns your plugin's namespace.&lt;br /&gt;
====Example====&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
oMyNewPlugin.namespace();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
====Arguments====&lt;br /&gt;
No arguments.&lt;br /&gt;
====Returns====&lt;br /&gt;
Returns your plugin's namespace. If your plugin's namespace is &amp;quot;MyNewPlugin&amp;quot;, it will return &amp;quot;MyNewPlugin&amp;quot;.&lt;br /&gt;
===oMyNewPlugin.ready===&lt;br /&gt;
Marks your plugin as ready to have its commands called. This method is required to be called for all plugins. You should call this method after all your commands are registered, initialization code is finished, and configuration has completed. Failure to call this method will result in your commands being unexecutable.&lt;br /&gt;
====Example====&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
oMyNewPlugin.ready();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
====Arguments====&lt;br /&gt;
No arguments.&lt;br /&gt;
====Returns====&lt;br /&gt;
Returns nothing.&lt;br /&gt;
|Status=No&lt;br /&gt;
}}&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Chrissyforrest</name></author>
		
	</entry>
	<entry>
		<id>https://all.docs.genesys.com/index.php?title=WID/Current/SDK/GWCBusExtensions&amp;diff=69527</id>
		<title>WID/Current/SDK/GWCBusExtensions</title>
		<link rel="alternate" type="text/html" href="https://all.docs.genesys.com/index.php?title=WID/Current/SDK/GWCBusExtensions&amp;diff=69527"/>
		<updated>2020-10-27T18:46:39Z</updated>

		<summary type="html">&lt;p&gt;Chrissyforrest: Published&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Article&lt;br /&gt;
|Standalone=No&lt;br /&gt;
|DisplayName=Genesys Widgets extensions&lt;br /&gt;
|TocName=Genesys Widgets extensions&lt;br /&gt;
|Context=Learn how to create your own plugins and widgets.&lt;br /&gt;
|ComingSoon=No&lt;br /&gt;
|Platform=GenesysEngage-cloud&lt;br /&gt;
|Role=Developer&lt;br /&gt;
|Section={{Section&lt;br /&gt;
|sectionHeading=Overview&lt;br /&gt;
|alignment=Vertical&lt;br /&gt;
|structuredtext=Genesys Widgets allows you to create your own plugins and widgets. These extensions are an easy way to define your own functionality, while using the same resources as the core Genesys Widgets.&lt;br /&gt;
|Status=No&lt;br /&gt;
}}{{Section&lt;br /&gt;
|sectionHeading=Defining extensions&lt;br /&gt;
|alignment=Vertical&lt;br /&gt;
|structuredtext=Extensions are defined at runtime before Genesys Widgets loads. You can define them inline or include extensions in separate files, either grouped or separated.&lt;br /&gt;
&lt;br /&gt;
{{NoteFormat|Define/include your extensions after your Genesys Widgets configuration object but before you include the Genesys Widgets JavaScript package.|}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
if(!window._genesys.widgets.extensions){&lt;br /&gt;
&lt;br /&gt;
    window._genesys.widgets.extensions = {};&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
window._genesys.widgets.extensions[&amp;quot;TestExtension&amp;quot;] = function($, CXBus, Common){&lt;br /&gt;
&lt;br /&gt;
    var oTestExtension = CXBus.registerPlugin(&amp;quot;TestExtension&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
    oTestExtension.subscribe(&amp;quot;WebChat.opened&amp;quot;, function(e){});&lt;br /&gt;
&lt;br /&gt;
    oTestExtension.publish(&amp;quot;ready&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
    oTestExtension.command(&amp;quot;WebChat.open&amp;quot;).done(function(e){&lt;br /&gt;
&lt;br /&gt;
          // Handle success return state&lt;br /&gt;
&lt;br /&gt;
    }).fail(function(e){&lt;br /&gt;
&lt;br /&gt;
          // Handle failure return state&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    oTestExtension.registerCommand(&amp;quot;demo&amp;quot;, function(e){&lt;br /&gt;
&lt;br /&gt;
          // Command execution here&lt;br /&gt;
    });&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Make sure that the &amp;quot;extensions&amp;quot; object exists and always include this at the top of your extension definition.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
if(!window._genesys.widgets.extensions){&lt;br /&gt;
&lt;br /&gt;
window._genesys.widgets.extensions = {};&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Create a new named property inside the &amp;quot;extensions&amp;quot; object and define it as a function.&lt;br /&gt;
When Genesys Widgets initializes it will step through each extension and invoke each function, initializing them.&lt;br /&gt;
Genesys Widgets will share resources as arguments. These include: jQuery, {{Link-SomewhereInThisVersion|manual=SDK|topic=GWCBusAPIOverview|display text=CXBus}}, and the {{Link-SomewhereInThisVersion|manual=SDK|topic=Common|display text=Common}} UI utilities.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
window._genesys.widgets.extensions[&amp;quot;TestExtension&amp;quot;] = function($, CXBus, Common){};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|Status=No&lt;br /&gt;
}}{{Section&lt;br /&gt;
|sectionHeading=Creating a new CXBus plugin&lt;br /&gt;
|alignment=Vertical&lt;br /&gt;
|structuredtext=Inside the extension function is where you create a new CXBus plugin. You can use this CXBus plugin to interface with other Genesys Widgets. You can add your own UI controller logic in here or simply use the extension to connect an existing UI controller to the bus (for example, share its API over the bus and coordinate actions with events).&lt;br /&gt;
&lt;br /&gt;
Registering a new plugin on the bus creates a new, unique namespace for all your events and commands.&lt;br /&gt;
In this example, the namespace &amp;quot;cx.plugin.TestExtension&amp;quot; is created:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var oTestExtension = CXBus.registerPlugin(&amp;quot;TestExtension&amp;quot;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{NoteFormat|When referring to other namespaces, like &amp;quot;cx.plugin.TestExtension&amp;quot;, it is not necessary to include the &amp;quot;cx.plugin.&amp;quot; prefix. It is optional and implied. You can subscribe to events or call commands using the full or truncated namespace.|}}&lt;br /&gt;
|Status=No&lt;br /&gt;
}}{{Section&lt;br /&gt;
|sectionHeading=Use cases&lt;br /&gt;
|alignment=Vertical&lt;br /&gt;
|structuredtext=Extensions are like any other Genesys Widget. You can publish, subscribe, call commands, or register your own commands on the bus. You can interface with other widgets on the bus for more complex interactions.  The following examples demonstrate how you can make extensions work for you.&lt;br /&gt;
===Example: subscribing to an event===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
oTestExtension.subscribe(&amp;quot;WebChat.opened&amp;quot;, function(e){});&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Example: publishing an event===&lt;br /&gt;
Publishes the event &amp;quot;TestExtension.ready&amp;quot; on the bus.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
oTestExtension.publish(&amp;quot;ready&amp;quot;, {arbitrary data to include});&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
===Example: calling a command===&lt;br /&gt;
Commands are deferred functions. You must handle their return states asynchronously.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
oTestExtension.command(&amp;quot;WebChat.open&amp;quot;, {any options required}).done(function(e){&lt;br /&gt;
&lt;br /&gt;
    // Handle success return state&lt;br /&gt;
    // &amp;quot;e&amp;quot;, the event object, is a standard CXBus format&lt;br /&gt;
    // Any return data will be available under e.data&lt;br /&gt;
&lt;br /&gt;
}).fail(function(e){&lt;br /&gt;
&lt;br /&gt;
    // Handle failure return state&lt;br /&gt;
    // &amp;quot;e&amp;quot;, the event object, may contain an error message, warning, or AJAX response object&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
===Example: registering a command===&lt;br /&gt;
Creates a new command under your namespace that you or other widgets can call.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;e&amp;quot;, the event object, is a standard CXBus format&lt;br /&gt;
&lt;br /&gt;
*e.data = options passed into command when being called.&lt;br /&gt;
*e.commander = the namespace of the widget that called this command.&lt;br /&gt;
*e.command = the name of the command being called.&lt;br /&gt;
*e.time = timestamp when the command was called.&lt;br /&gt;
*e.deferred = the deferred promise created for this command call. You MUST always resolve or reject this promise using e.deferred.resolve() or e.deferred.reject(). You may pass any arbitrary data into either resolution state.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
oTestExtension.registerCommand(&amp;quot;demo&amp;quot;, function(e){&lt;br /&gt;
&lt;br /&gt;
    // Command execution here&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
===Example: using the 'before()' method===&lt;br /&gt;
Allows you to set up an interrupt that is executed before a command every time that command is called. &lt;br /&gt;
With this feature, you can link execution of a command with other logic, modify command options before they're used, or cancel execution of a command.&lt;br /&gt;
&lt;br /&gt;
You can specify multiple &amp;quot;before&amp;quot; functions for a single command. They will be executed in order with the output of one providing the input to the next. If one of the functions does not return an object, execution will stop and the command will be cancelled. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
oTestExtension.before(&amp;quot;WebChat.open&amp;quot;, function(oData){&lt;br /&gt;
&lt;br /&gt;
    // oData == the options passed into the command call&lt;br /&gt;
    // e.g. if this command is called:   oMyPlugin.command(&amp;quot;WebChat.open&amp;quot;, {form: {firstname: &amp;quot;Mike&amp;quot;}});&lt;br /&gt;
    // then oData will == {form: {firstname: &amp;quot;Mike&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
    // You must return oData back, or an empty object {} for execution to continue.&lt;br /&gt;
    // If you return false|undefined|null, execution of the command will be stopped&lt;br /&gt;
    return oData;&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|Status=No&lt;br /&gt;
}}&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Chrissyforrest</name></author>
		
	</entry>
	<entry>
		<id>https://all.docs.genesys.com/index.php?title=WID/Current/SDK/WebChat-combined&amp;diff=69525</id>
		<title>WID/Current/SDK/WebChat-combined</title>
		<link rel="alternate" type="text/html" href="https://all.docs.genesys.com/index.php?title=WID/Current/SDK/WebChat-combined&amp;diff=69525"/>
		<updated>2020-10-27T18:40:43Z</updated>

		<summary type="html">&lt;p&gt;Chrissyforrest: Published&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Article&lt;br /&gt;
|Standalone=No&lt;br /&gt;
|DisplayName=WebChat&lt;br /&gt;
|TocName=WebChat&lt;br /&gt;
|Context=Learn how to enable live chats between customers and agents.&lt;br /&gt;
|ComingSoon=No&lt;br /&gt;
|Platform=GenesysEngage-cloud&lt;br /&gt;
|Role=Developer&lt;br /&gt;
|Section={{Section&lt;br /&gt;
|sectionHeading=Overview&lt;br /&gt;
|anchor=overview&lt;br /&gt;
|alignment=Horizontal&lt;br /&gt;
|Media=Image&lt;br /&gt;
|image=WebChat-Main-new.PNG&lt;br /&gt;
|structuredtext=The WebChat Widget allows a customer to start a live chat with a customer service agent. The UI appears within the page and follows the customer as they traverse your website. Other features include minimize/maximize, auto-reconnect, and a built-in invite feature.&lt;br /&gt;
===Usage===&lt;br /&gt;
You can launch WebChat manually by using the following methods:&lt;br /&gt;
&lt;br /&gt;
*Call the '''WebChat.open''' {{Link-SomewhereInThisVersion|manual=SDK|topic=WebChat-combined|anchor=commands|display text=command}}&lt;br /&gt;
*Configure {{Link-SomewhereInThisVersion|manual=SDK|topic=ChannelSelector-combined}} to show WebChat as a channel&lt;br /&gt;
*Enable the built-in launcher button for WebChat that appears on the right side of the screen&lt;br /&gt;
*Create your own custom button or link to open WebChat (using the '''WebChat.open''' {{Link-SomewhereInThisVersion|manual=SDK|topic=WebChat-combined|anchor=commands|display text=command}})&lt;br /&gt;
&lt;br /&gt;
===Customization===&lt;br /&gt;
You can customize and {{Link-AnywhereElse|product=WID|version=Current|manual=Developer|topic=GWCInternat|display text=localize}} all of the static text shown in the WebChat Widget by adding entries to your {{Link-SomewhereInThisVersion|manual=SDK|topic=WebChat-combined|anchor=config|display text=configuration}} and {{Link-SomewhereInThisVersion|manual=SDK|topic=WebChat-combined|anchor=localize|display text=localization}} options.&lt;br /&gt;
&lt;br /&gt;
WebChat supports themes. You can create and register your own themes for Genesys Widgets.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
|structuredtextwide====Namespace===&lt;br /&gt;
The WebChat plugin has the following namespaces tied to each of the following types:&lt;br /&gt;
{{{!}} class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: auto;&amp;quot;&lt;br /&gt;
{{!}}-&lt;br /&gt;
!{{!}}Type&lt;br /&gt;
!{{!}}Namespace&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{!}}{{Link-SomewhereInThisVersion|manual=SDK|topic=WebChat-combined|anchor=config|display text=Configuration}}&lt;br /&gt;
{{!}}{{!}}webchat&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{!}}i18n—{{Link-SomewhereInThisVersion|manual=SDK|topic=WebChat-combined|anchor=localize|display text=Localization}}&lt;br /&gt;
{{!}}{{!}}webchat&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{!}}CXBus—{{Link-SomewhereInThisVersion|manual=SDK|topic=WebChat-combined|anchor=commands|display text=API commands}} &amp;amp; {{Link-SomewhereInThisVersion|manual=SDK|topic=WebChat-combined|anchor=events|display text=API events}}&lt;br /&gt;
{{!}}{{!}}WebChat&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{!}}CSS&lt;br /&gt;
{{!}}{{!}}.cx-webchat&lt;br /&gt;
{{!}}}&lt;br /&gt;
===Mobile support===&lt;br /&gt;
WebChat supports both desktop and mobile devices. Like all Genesys Widgets, there are two main modes: Desktop &amp;amp; Mobile. Desktop is employed for monitors, laptops, and tablets. Mobile is employed for smartphones. When a smartphone is detected, WebChat switches to special full-screen templates that are optimized for both portrait and landscape orientations.&lt;br /&gt;
&lt;br /&gt;
Switching between desktop and mobile mode is done automatically by default. You may configure Genesys Widgets to switch between Desktop and Mobile mode manually if necessary.&lt;br /&gt;
===Screenshots===&lt;br /&gt;
'''Dark theme'''&lt;br /&gt;
&lt;br /&gt;
[[File:WebChat_Form_Desktop_Dark.png|150x150px]]&lt;br /&gt;
[[File:WebChat_Form_Portrait_Dark.png|150x150px]]&lt;br /&gt;
[[File:WebChat_Form_Landscape_Dark.png|150x150px]]&lt;br /&gt;
[[File:WebChat_Transcript_Desktop_Dark-without-cobrowse.PNG|201x201px]]&lt;br /&gt;
[[File:WebChat Transcript Portrait Dark-without-cobrowse.png|267x267px]] &lt;br /&gt;
[[File:WebChat Transcript Landscape Dark without-cobrowse.png|150x150px]]&lt;br /&gt;
&lt;br /&gt;
'''Light theme'''&lt;br /&gt;
&lt;br /&gt;
[[File:WebChat_Form_Desktop_Light.png||150x150px]] &lt;br /&gt;
[[File:WebChat_Form_Portrait_light.png|150x150px]] &lt;br /&gt;
[[File:WebChat_Form_Landscape_light.png|150x150px]]&lt;br /&gt;
[[File:WebChat_Transcript_Desktop_light-without-cobrowse.PNG|202x202px]]&lt;br /&gt;
[[File:WebChat Transcript Portrait Light without cobrowse.png|267x267px]]&lt;br /&gt;
[[File:WebChat Transcript Landscape Light without cobrowse.png|150x150px]]&lt;br /&gt;
|Status=No&lt;br /&gt;
}}{{Section&lt;br /&gt;
|sectionHeading=Configuration&lt;br /&gt;
|anchor=config&lt;br /&gt;
|alignment=Vertical&lt;br /&gt;
|structuredtext=WebChat and WebChatService share the '''_genesys.widgets.webchat''' configuration namespace. WebChat has UI options while WebChatService has connection options.&lt;br /&gt;
{{AnchorDiv|example}}&lt;br /&gt;
===Example===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
window._genesys.widgets.webchat = {&lt;br /&gt;
&lt;br /&gt;
	apikey: 'n3eNkgLLgLKXREBMYjGm6lygOHHOK8VA',&lt;br /&gt;
	dataURL: 'https://api.genesyscloud.com/gms-chat/2/chat',&lt;br /&gt;
	userData: {},&lt;br /&gt;
	emojis: true,&lt;br /&gt;
	uploadsEnabled: false,&lt;br /&gt;
	confirmFormCloseEnabled: true,&lt;br /&gt;
	actionsMenu: true,&lt;br /&gt;
	maxMessageLength: 140,&lt;br /&gt;
&lt;br /&gt;
	autoInvite: {&lt;br /&gt;
&lt;br /&gt;
		enabled: false,&lt;br /&gt;
		timeToInviteSeconds: 10,&lt;br /&gt;
		inviteTimeoutSeconds: 30&lt;br /&gt;
	},&lt;br /&gt;
&lt;br /&gt;
	chatButton: {&lt;br /&gt;
&lt;br /&gt;
		enabled: true,&lt;br /&gt;
		template: '&amp;lt;div class=&amp;quot;cx-widget cx-webchat-chat-button cx-side-button&amp;quot; role=&amp;quot;button&amp;quot; &lt;br /&gt;
tabindex=&amp;quot;0&amp;quot; data-message=&amp;quot;ChatButton&amp;quot; data-gcb-service-node=&amp;quot;true&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;cx-icon&amp;quot; data-icon=&amp;quot;chat&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;i18n cx-chat-button-label&amp;quot; data-message=&amp;quot;ChatButton&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;',&lt;br /&gt;
		effect: 'fade',&lt;br /&gt;
		openDelay: 1000,&lt;br /&gt;
		effectDuration: 300,&lt;br /&gt;
		hideDuringInvite: true&lt;br /&gt;
	},&lt;br /&gt;
&lt;br /&gt;
	minimizeOnMobileRestore: false,&lt;br /&gt;
&lt;br /&gt;
	ariaIdleAlertIntervals:[50,25,10],&lt;br /&gt;
&lt;br /&gt;
	ariaCharRemainingIntervals:[75, 25, 10]&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;{{AnchorDiv|options}}&lt;br /&gt;
===Options===&lt;br /&gt;
&lt;br /&gt;
{{{!}} class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
{{!}}-&lt;br /&gt;
!{{!}}Name&lt;br /&gt;
!{{!}}Type&lt;br /&gt;
!{{!}}Description&lt;br /&gt;
!{{!}}Default&lt;br /&gt;
!{{!}}Required&lt;br /&gt;
!{{!}}Introduced/Updated&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{!}}emojis&lt;br /&gt;
{{!}}{{!}}boolean&lt;br /&gt;
{{!}}{{!}}Enable/disable Emoji menu inside chat message input. Emojis are supported using unicode characters and the list includes ☺ U+263A (smile), 👍 U+1F44D (thumbs up) and ☹ U+2639 (sad).&lt;br /&gt;
{{!}}{{!}}false&lt;br /&gt;
{{!}}{{!}}n/a&lt;br /&gt;
{{!}}{{!}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{!}}form&lt;br /&gt;
{{!}}{{!}}object&lt;br /&gt;
{{!}}{{!}}A JSON object containing a custom registration form definition. The JSON definition placed here becomes the default registration form layout for WebChat. See {{Link-SomewhereInThisVersion|manual=SDK|topic=WebChat-combined|anchor=ccrf|display text=Customizable Chat Registration Form}}.&lt;br /&gt;
{{!}}{{!}}A basic registration form is defined internally by default&lt;br /&gt;
{{!}}{{!}}n/a&lt;br /&gt;
{{!}}{{!}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{!}}uploadsEnabled&lt;br /&gt;
{{!}}{{!}}boolean&lt;br /&gt;
{{!}}{{!}}Show/Hide the Send File button. The button will be shown if the value is set to true.&lt;br /&gt;
{{!}}{{!}}false&lt;br /&gt;
{{!}}{{!}}n/a&lt;br /&gt;
{{!}}{{!}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{!}}confirmFormCloseEnabled&lt;br /&gt;
{{!}}{{!}}boolean&lt;br /&gt;
{{!}}{{!}}Enable or disable displaying a confirmation message before closing WebChat if information has been entered into the registration form.&lt;br /&gt;
{{!}}{{!}}true&lt;br /&gt;
{{!}}{{!}}n/a&lt;br /&gt;
{{!}}{{!}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{!}}timeFormat&lt;br /&gt;
{{!}}{{!}}number/string&lt;br /&gt;
{{!}}{{!}}This sets the time format for the timestamps in this widget. It can be 12 or 24.&lt;br /&gt;
{{!}}{{!}}12&lt;br /&gt;
{{!}}{{!}}false&lt;br /&gt;
{{!}}{{!}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{!}}actionsMenu&lt;br /&gt;
{{!}}{{!}}boolean&lt;br /&gt;
{{!}}{{!}}Enable/disable actions menu next to chat message input.&lt;br /&gt;
{{!}}{{!}}true&lt;br /&gt;
{{!}}{{!}}n/a&lt;br /&gt;
{{!}}{{!}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{!}}maxMessageLength&lt;br /&gt;
{{!}}{{!}}number&lt;br /&gt;
{{!}}{{!}}Set a character limit that the user can input into the message area during a chat. When max is reached, user cannot type any more.&lt;br /&gt;
{{!}}{{!}}500&lt;br /&gt;
{{!}}{{!}}n/a&lt;br /&gt;
{{!}}{{!}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{!}}charCountEnabled&lt;br /&gt;
{{!}}{{!}}boolean&lt;br /&gt;
{{!}}{{!}}Show/Hide the number of characters remaining in the input message area while the user is typing.&lt;br /&gt;
{{!}}{{!}}false&lt;br /&gt;
{{!}}{{!}}n/a&lt;br /&gt;
{{!}}{{!}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{!}}autoInvite.enabled&lt;br /&gt;
{{!}}{{!}}boolean&lt;br /&gt;
{{!}}{{!}}Enable/disable auto-invite feature. Automatically invites user to chat after user idles on page for preset time.{{NoteFormat|When running Widgets in lazy load mode, this option requires that you {{Link-SomewhereInThisVersion|manual=SDK|topic=App-combined|anchor=MP|display text=pre-load}} the WebChat plugin. |1}}&lt;br /&gt;
{{!}}{{!}}false&lt;br /&gt;
{{!}}{{!}}n/a&lt;br /&gt;
{{!}}{{!}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{!}}autoInvite.timeToInviteSeconds&lt;br /&gt;
{{!}}{{!}}number&lt;br /&gt;
{{!}}{{!}}Number of seconds of idle time before inviting customer to chat.&lt;br /&gt;
{{!}}{{!}}5&lt;br /&gt;
{{!}}{{!}}n/a&lt;br /&gt;
{{!}}{{!}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{!}}autoInvite.inviteTimeoutSeconds&lt;br /&gt;
{{!}}{{!}}number&lt;br /&gt;
{{!}}{{!}}Number of seconds to wait, after showing invite, before closing chat invite.&lt;br /&gt;
{{!}}{{!}}30&lt;br /&gt;
{{!}}{{!}}n/a&lt;br /&gt;
{{!}}{{!}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{!}}chatButton.enabled&lt;br /&gt;
{{!}}{{!}}boolean&lt;br /&gt;
{{!}}{{!}}Enable/disable chat button on screen.{{NoteFormat|When running Widgets in lazy load mode, this option requires that you {{Link-SomewhereInThisVersion|manual=SDK|topic=App-combined|anchor=MP|display text=pre-load}} the WebChat plugin. |1}}&lt;br /&gt;
{{!}}{{!}}false&lt;br /&gt;
{{!}}{{!}}n/a&lt;br /&gt;
{{!}}{{!}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{!}}chatButton.template&lt;br /&gt;
{{!}}{{!}}string&lt;br /&gt;
{{!}}{{!}}Custom HTML string template for chat button.&lt;br /&gt;
{{!}}{{!}}&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;cx-widget cx-webchat-chat-button&lt;br /&gt;
 cx-side-button&amp;quot; role=&amp;quot;button&amp;quot; tabindex=&amp;quot;0&amp;quot;&lt;br /&gt;
 data-message=&amp;quot;ChatButton&amp;quot; &lt;br /&gt;
data-gcb-service-node=&amp;quot;true&amp;quot;&amp;gt;&amp;lt;span&lt;br /&gt;
 class=&amp;quot;cx-icon&amp;quot; data-icon=&amp;quot;chat&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;i18n cx-chat-button-label&amp;quot;&lt;br /&gt;
 data-message=&amp;quot;ChatButton&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
{{!}}{{!}}n/a&lt;br /&gt;
{{!}}{{!}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{!}}chatButton.effect&lt;br /&gt;
{{!}}{{!}}string&lt;br /&gt;
{{!}}{{!}}Type of animation effect when revealing chat button. 'slide' or 'fade'.&lt;br /&gt;
{{!}}{{!}}fade&lt;br /&gt;
{{!}}{{!}}n/a&lt;br /&gt;
{{!}}{{!}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{!}}chatButton.openDelay&lt;br /&gt;
{{!}}{{!}}number&lt;br /&gt;
{{!}}{{!}}Number of milliseconds before displaying chat button on screen.&lt;br /&gt;
{{!}}{{!}}1000&lt;br /&gt;
{{!}}{{!}}n/a&lt;br /&gt;
{{!}}{{!}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{!}}chatButton.effectDuration&lt;br /&gt;
{{!}}{{!}}number&lt;br /&gt;
{{!}}{{!}}Length of animation effect in milliseconds.&lt;br /&gt;
{{!}}{{!}}300&lt;br /&gt;
{{!}}{{!}}n/a&lt;br /&gt;
{{!}}{{!}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{!}}chatButton.hideDuringInvite&lt;br /&gt;
{{!}}{{!}}boolean&lt;br /&gt;
{{!}}{{!}}When the auto-invite feature is activated, hides the chat button. When invite is dismissed, reveals the chat button again.&lt;br /&gt;
{{!}}{{!}}true&lt;br /&gt;
{{!}}{{!}}n/a&lt;br /&gt;
{{!}}{{!}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{!}}ariaIdleAlertIntervals&lt;br /&gt;
{{!}}{{!}}array/boolean&lt;br /&gt;
{{!}}{{!}}An array containing the intervals as a percentage at which the screen reader will announce the remaining idle time. By default, it is enabled with the following time intervals, and it is customizable according to the user's needs. Configuring a value of 'false' will let the screen reader call out idle time for every change.&lt;br /&gt;
{{!}}{{!}}[100, 75, 50, 25, 10]&lt;br /&gt;
{{!}}{{!}}n/a&lt;br /&gt;
{{!}}{{!}}9.0.016.11&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{!}}ariaCharRemainingIntervals&lt;br /&gt;
{{!}}{{!}}array/boolean&lt;br /&gt;
{{!}}{{!}}An array containing the intervals as a percentage at which the screen reader will announce the remaining characters when the user inputs text into the message area. By default, it is enabled with the following intervals, and it is customizable according to the user needs. Configuring a value of 'false' will let the screen reader call out remaining characters for every change.&lt;br /&gt;
{{!}}{{!}}[50, 25, 10]&lt;br /&gt;
{{!}}{{!}}n/a&lt;br /&gt;
{{!}}{{!}}9.0.016.11&lt;br /&gt;
{{!}}}&lt;br /&gt;
|Status=No&lt;br /&gt;
}}{{Section&lt;br /&gt;
|sectionHeading=Localization&lt;br /&gt;
|anchor=localize&lt;br /&gt;
|alignment=Vertical&lt;br /&gt;
|structuredtext=You can define string key names and values to match the system messages that are received from the chat server. If a customer system message is received as '''SYS001''' in the message body, Webchat checks to determine if any keys match in the language pack, and then replaces the message body accordingly. '''SYS001''' is an example format. There are no format restrictions on custom message keys. The purpose of this feature is to allow localization for the User Interface and Server to be kept in the same file.&lt;br /&gt;
&lt;br /&gt;
===Special values for localization===&lt;br /&gt;
&lt;br /&gt;
You can inject the &amp;lt;tt&amp;gt;&amp;lt;%Agent%&amp;gt;&amp;lt;/tt&amp;gt; special value.  When used, the agent's name is rendered in its place at runtime.&lt;br /&gt;
&lt;br /&gt;
===Error handling===&lt;br /&gt;
&lt;br /&gt;
Customers can define their own error messages in the '''Errors''' section found in the above Webchat Localization. If no error messages are defined, default error messages are used.&lt;br /&gt;
&lt;br /&gt;
{{NoteFormat|For information on how to set up localization, refer to {{Link-AnywhereElse|product=WID|version=Current|manual=Developer|topic=GWCInternat|display text=Localize widgets and services}}.|1}}&lt;br /&gt;
===Usage===&lt;br /&gt;
&lt;br /&gt;
You must use the ''webchat'' namespace for defining localization strings for the WebChat plugin in your i18n JSON file.&lt;br /&gt;
&lt;br /&gt;
The following example shows how to define new strings for the '''en''' (English) language. You can use any language codes you wish; there is no standard format. When selecting the active language in your configuration, you must match one of the language codes defined in your i18n JSON file. Please note that you must only define a language code once in your i18n JSON file. Inside each language object you should define new strings for each widget.&lt;br /&gt;
&lt;br /&gt;
===Inactivity messages===&lt;br /&gt;
&lt;br /&gt;
If Chat Server is configured to end the chat session after a certain idle time, it may send several warning messages to the client to inform them and prompt them to act. Chat Server can be configured to show a first warning, a second warning, and a final notice when it ends the chat session. By default, WebChat will display the warning message text as it is received from the server. If you wish to localize these methods on the client side instead, follow these steps:&lt;br /&gt;
&lt;br /&gt;
The first warning can be localized by setting the string 'IdleMessage1'.&lt;br /&gt;
&lt;br /&gt;
The second warning can be localized by setting the string 'IdleMessage2'.&lt;br /&gt;
&lt;br /&gt;
The final notice can be localized by setting the string 'IdleMessageClose'.&lt;br /&gt;
&lt;br /&gt;
{{NoteFormat|If Chat Server ever allows more than two idle warning messages, you can localize them by incrementing the integer value in the string name (e.g. 'IdleMessage3', 'IdleMessage4', and so on).|2}}&lt;br /&gt;
&lt;br /&gt;
===Default i18n JSON===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	&amp;quot;en&amp;quot;: {&lt;br /&gt;
		&amp;quot;webchat&amp;quot;: {&lt;br /&gt;
			&amp;quot;ChatButton&amp;quot;: &amp;quot;Chat&amp;quot;,&lt;br /&gt;
			&amp;quot;ChatStarted&amp;quot;: &amp;quot;Chat Started&amp;quot;,&lt;br /&gt;
			&amp;quot;ChatEnded&amp;quot;: &amp;quot;Chat Ended&amp;quot;,&lt;br /&gt;
			&amp;quot;AgentNameDefault&amp;quot;: &amp;quot;Agent&amp;quot;,&lt;br /&gt;
			&amp;quot;AgentConnected&amp;quot;: &amp;quot;&amp;lt;%Agent%&amp;gt; Connected&amp;quot;,&lt;br /&gt;
			&amp;quot;AgentDisconnected&amp;quot;: &amp;quot;&amp;lt;%Agent%&amp;gt; Disconnected&amp;quot;,&lt;br /&gt;
			&amp;quot;BotNameDefault&amp;quot;: &amp;quot;Bot&amp;quot;,&lt;br /&gt;
			&amp;quot;BotConnected&amp;quot;: &amp;quot;&amp;lt;%Bot%&amp;gt; Connected&amp;quot;,&lt;br /&gt;
			&amp;quot;BotDisconnected&amp;quot;: &amp;quot;&amp;lt;%Bot%&amp;gt; Disconnected&amp;quot;,&lt;br /&gt;
			&amp;quot;SupervisorNameDefault&amp;quot;: &amp;quot;Supervisor&amp;quot;,&lt;br /&gt;
			&amp;quot;SupervisorConnected&amp;quot;: &amp;quot;&amp;lt;%Agent%&amp;gt; Connected&amp;quot;,&lt;br /&gt;
			&amp;quot;SupervisorDisconnected&amp;quot;: &amp;quot;&amp;lt;%Agent%&amp;gt; Disconnected&amp;quot;,&lt;br /&gt;
			&amp;quot;AgentTyping&amp;quot;: &amp;quot;...&amp;quot;,&lt;br /&gt;
			&amp;quot;AriaAgentTyping&amp;quot;: &amp;quot;Agent is typing&amp;quot;,&lt;br /&gt;
			&amp;quot;AgentUnavailable&amp;quot;: &amp;quot;Sorry. There are no agents available. Please try later.&amp;quot;,&lt;br /&gt;
			&amp;quot;ChatTitle&amp;quot;: &amp;quot;Live Chat&amp;quot;,&lt;br /&gt;
			&amp;quot;ChatEnd&amp;quot;: &amp;quot;X&amp;quot;,&lt;br /&gt;
			&amp;quot;ChatClose&amp;quot;: &amp;quot;X&amp;quot;,&lt;br /&gt;
			&amp;quot;ChatMinimize&amp;quot;: &amp;quot;Min&amp;quot;,&lt;br /&gt;
			&amp;quot;ChatFormFirstName&amp;quot;: &amp;quot;First Name&amp;quot;,&lt;br /&gt;
			&amp;quot;ChatFormLastName&amp;quot;: &amp;quot;Last Name&amp;quot;,&lt;br /&gt;
			&amp;quot;ChatFormNickname&amp;quot;: &amp;quot;Nickname&amp;quot;,&lt;br /&gt;
			&amp;quot;ChatFormEmail&amp;quot;: &amp;quot;Email&amp;quot;,&lt;br /&gt;
			&amp;quot;ChatFormSubject&amp;quot;: &amp;quot;Subject&amp;quot;,&lt;br /&gt;
			&amp;quot;ChatFormPlaceholderFirstName&amp;quot;: &amp;quot;Required&amp;quot;,&lt;br /&gt;
			&amp;quot;ChatFormPlaceholderLastName&amp;quot;: &amp;quot;Required&amp;quot;,&lt;br /&gt;
			&amp;quot;ChatFormPlaceholderNickname&amp;quot;: &amp;quot;Optional&amp;quot;,&lt;br /&gt;
			&amp;quot;ChatFormPlaceholderEmail&amp;quot;: &amp;quot;Optional&amp;quot;,&lt;br /&gt;
			&amp;quot;ChatFormPlaceholderSubject&amp;quot;: &amp;quot;Optional&amp;quot;,&lt;br /&gt;
			&amp;quot;ChatFormSubmit&amp;quot;: &amp;quot;Start Chat&amp;quot;,&lt;br /&gt;
			&amp;quot;AriaChatFormSubmit&amp;quot;: &amp;quot;Start Chat&amp;quot;,&lt;br /&gt;
			&amp;quot;ChatFormCancel&amp;quot;: &amp;quot;Cancel&amp;quot;,&lt;br /&gt;
			&amp;quot;AriaChatFormCancel&amp;quot;: &amp;quot;Cancel&amp;quot;,&lt;br /&gt;
			&amp;quot;ChatFormClose&amp;quot;: &amp;quot;Close&amp;quot;,&lt;br /&gt;
			&amp;quot;ChatInputPlaceholder&amp;quot;: &amp;quot;Type your message here&amp;quot;,&lt;br /&gt;
			&amp;quot;ChatInputSend&amp;quot;: &amp;quot;Send&amp;quot;,&lt;br /&gt;
			&amp;quot;AriaChatInputSend&amp;quot;: &amp;quot;Send&amp;quot;,&lt;br /&gt;
			&amp;quot;ChatEndQuestion&amp;quot;: &amp;quot;Are you sure you want to end this chat session?&amp;quot;,&lt;br /&gt;
			&amp;quot;ChatEndCancel&amp;quot;: &amp;quot;Cancel&amp;quot;,&lt;br /&gt;
			&amp;quot;ChatEndConfirm&amp;quot;: &amp;quot;End chat&amp;quot;,&lt;br /&gt;
			&amp;quot;AriaChatEndCancel&amp;quot;: &amp;quot;Cancel&amp;quot;,&lt;br /&gt;
			&amp;quot;AriaChatEndConfirm&amp;quot;: &amp;quot;End chat&amp;quot;,&lt;br /&gt;
			&amp;quot;ConfirmCloseWindow&amp;quot;: &amp;quot;Are you sure you want to close chat?&amp;quot;,&lt;br /&gt;
			&amp;quot;ConfirmCloseCancel&amp;quot;: &amp;quot;Cancel&amp;quot;,&lt;br /&gt;
			&amp;quot;ConfirmCloseConfirm&amp;quot;: &amp;quot;Close&amp;quot;,&lt;br /&gt;
			&amp;quot;AriaConfirmCloseCancel&amp;quot;: &amp;quot;Cancel&amp;quot;,&lt;br /&gt;
			&amp;quot;AriaConfirmCloseConfirm&amp;quot;: &amp;quot;Close&amp;quot;,&lt;br /&gt;
			&amp;quot;ActionsDownload&amp;quot;: &amp;quot;Download transcript&amp;quot;,&lt;br /&gt;
			&amp;quot;ActionsEmail&amp;quot;: &amp;quot;Email transcript&amp;quot;,&lt;br /&gt;
			&amp;quot;ActionsPrint&amp;quot;: &amp;quot;Print transcript&amp;quot;,&lt;br /&gt;
			&amp;quot;ActionsSendFile&amp;quot;: &amp;quot;Attach Files&amp;quot;,&lt;br /&gt;
			&amp;quot;AriaActionsSendFileTitle&amp;quot;: &amp;quot;Opens a file upload dialog&amp;quot;,&lt;br /&gt;
			&amp;quot;ActionsEmoji&amp;quot;: &amp;quot;Send Emoji&amp;quot;,&lt;br /&gt;
			&amp;quot;ActionsVideo&amp;quot;: &amp;quot;Invite to Video Chat&amp;quot;,&lt;br /&gt;
			&amp;quot;ActionsTransfer&amp;quot;: &amp;quot;Transfer&amp;quot;,&lt;br /&gt;
			&amp;quot;ActionsInvite&amp;quot;: &amp;quot;Invite&amp;quot;,&lt;br /&gt;
			&amp;quot;InstructionsTransfer&amp;quot;: &amp;quot;Open this link on another device to transfer your chat session&amp;lt;/br&amp;gt;&amp;lt;/br&amp;gt;&amp;lt;%link%&amp;gt;&amp;quot;,&lt;br /&gt;
			&amp;quot;InstructionsInvite&amp;quot;: &amp;quot;Share this link with another person to add them to this chat session&amp;lt;/br&amp;gt;&amp;lt;/br&amp;gt;&amp;lt;%link%&amp;gt;&amp;quot;,&lt;br /&gt;
			&amp;quot;InviteTitle&amp;quot;: &amp;quot;Need help?&amp;quot;,&lt;br /&gt;
			&amp;quot;InviteBody&amp;quot;: &amp;quot;Let us know if we can help out.&amp;quot;,&lt;br /&gt;
			&amp;quot;InviteReject&amp;quot;: &amp;quot;No thanks&amp;quot;,&lt;br /&gt;
			&amp;quot;InviteAccept&amp;quot;: &amp;quot;Start chat&amp;quot;,&lt;br /&gt;
			&amp;quot;AriaInviteAccept&amp;quot;: &amp;quot;Start chat&amp;quot;,&lt;br /&gt;
			&amp;quot;AriaInviteReject&amp;quot;: &amp;quot;No thanks&amp;quot;,&lt;br /&gt;
			&amp;quot;ChatError&amp;quot;: &amp;quot;There was a problem starting the chat session. Please retry.&amp;quot;,&lt;br /&gt;
			&amp;quot;ChatErrorButton&amp;quot;: &amp;quot;OK&amp;quot;,&lt;br /&gt;
			&amp;quot;AriaChatErrorButton&amp;quot;: &amp;quot;OK&amp;quot;,&lt;br /&gt;
			&amp;quot;ChatErrorPrimaryButton&amp;quot;: &amp;quot;Yes&amp;quot;,&lt;br /&gt;
			&amp;quot;ChatErrorDefaultButton&amp;quot;: &amp;quot;No&amp;quot;,&lt;br /&gt;
			&amp;quot;AriaChatErrorPrimaryButton&amp;quot;: &amp;quot;Yes&amp;quot;,&lt;br /&gt;
			&amp;quot;AriaChatErrorDefaultButton&amp;quot;: &amp;quot;No&amp;quot;,&lt;br /&gt;
			&amp;quot;DownloadButton&amp;quot;: &amp;quot;Download&amp;quot;,&lt;br /&gt;
			&amp;quot;AriaDownloadButton&amp;quot;: &amp;quot;Download&amp;quot;,&lt;br /&gt;
			&amp;quot;FileSent&amp;quot;: &amp;quot;has sent:&amp;quot;,&lt;br /&gt;
			&amp;quot;FileTransferRetry&amp;quot;: &amp;quot;Retry&amp;quot;,&lt;br /&gt;
			&amp;quot;AriaFileTransferRetry&amp;quot;: &amp;quot;Retry&amp;quot;,&lt;br /&gt;
			&amp;quot;FileTransferError&amp;quot;: &amp;quot;OK&amp;quot;,&lt;br /&gt;
			&amp;quot;AriaFileTransferError&amp;quot;: &amp;quot;OK&amp;quot;,&lt;br /&gt;
			&amp;quot;FileTransferCancel&amp;quot;: &amp;quot;Cancel&amp;quot;,&lt;br /&gt;
			&amp;quot;AriaFileTransferCancel&amp;quot;: &amp;quot;Cancel&amp;quot;,&lt;br /&gt;
			&amp;quot;RestoreTimeoutTitle&amp;quot;: &amp;quot;Chat ended&amp;quot;,&lt;br /&gt;
			&amp;quot;RestoreTimeoutBody&amp;quot;: &amp;quot;Your previous chat session has timed out. Would you like to start a new one?&amp;quot;,&lt;br /&gt;
			&amp;quot;RestoreTimeoutReject&amp;quot;: &amp;quot;No thanks&amp;quot;,&lt;br /&gt;
			&amp;quot;RestoreTimeoutAccept&amp;quot;: &amp;quot;Start chat&amp;quot;,&lt;br /&gt;
			&amp;quot;AriaRestoreTimeoutAccept&amp;quot;: &amp;quot;Start chat&amp;quot;,&lt;br /&gt;
			&amp;quot;AriaRestoreTimeoutReject&amp;quot;: &amp;quot;No thanks&amp;quot;,&lt;br /&gt;
			&amp;quot;EndConfirmBody&amp;quot;: &amp;quot;Would you really like to end your chat session?&amp;quot;,&lt;br /&gt;
			&amp;quot;EndConfirmAccept&amp;quot;: &amp;quot;End chat&amp;quot;,&lt;br /&gt;
			&amp;quot;EndConfirmReject&amp;quot;: &amp;quot;Cancel&amp;quot;,&lt;br /&gt;
			&amp;quot;AriaEndConfirmAccept&amp;quot;: &amp;quot;End chat&amp;quot;,&lt;br /&gt;
			&amp;quot;AriaEndConfirmReject&amp;quot;: &amp;quot;Cancel&amp;quot;,&lt;br /&gt;
			&amp;quot;SurveyOfferQuestion&amp;quot;: &amp;quot;Would you like to participate in a survey?&amp;quot;,&lt;br /&gt;
			&amp;quot;ShowSurveyAccept&amp;quot;: &amp;quot;Yes&amp;quot;,&lt;br /&gt;
			&amp;quot;ShowSurveyReject&amp;quot;: &amp;quot;No&amp;quot;,&lt;br /&gt;
			&amp;quot;AriaShowSurveyAccept&amp;quot;: &amp;quot;Yes&amp;quot;,&lt;br /&gt;
			&amp;quot;AriaShowSurveyReject&amp;quot;: &amp;quot;No&amp;quot;,&lt;br /&gt;
			&amp;quot;UnreadMessagesTitle&amp;quot;: &amp;quot;unread&amp;quot;,&lt;br /&gt;
			&amp;quot;AriaYouSaid&amp;quot;: &amp;quot;You said&amp;quot;,&lt;br /&gt;
			&amp;quot;AriaSaid&amp;quot;: &amp;quot;said&amp;quot;,&lt;br /&gt;
			&amp;quot;AriaSystemSaid&amp;quot;: &amp;quot;System said&amp;quot;,&lt;br /&gt;
			&amp;quot;AriaWindowLabel&amp;quot;: &amp;quot;Live Chat Window&amp;quot;,&lt;br /&gt;
			&amp;quot;AriaMinimize&amp;quot;: &amp;quot;Live Chat Minimize&amp;quot;,&lt;br /&gt;
			&amp;quot;AriaMaximize&amp;quot;: &amp;quot;Live Chat Maximize&amp;quot;,&lt;br /&gt;
			&amp;quot;AriaClose&amp;quot;: &amp;quot;Live Chat Close&amp;quot;,&lt;br /&gt;
			&amp;quot;AriaEmojiStatusOpen&amp;quot;: &amp;quot;Emoji picker dialog is opened&amp;quot;,&lt;br /&gt;
			&amp;quot;AriaEmojiStatusClose&amp;quot;: &amp;quot;Emoji picker dialog is closed&amp;quot;,&lt;br /&gt;
			&amp;quot;AriaEmoji&amp;quot;: &amp;quot;emoji&amp;quot;,&lt;br /&gt;
			&amp;quot;AriaCharRemaining&amp;quot;: &amp;quot;Characters remaining&amp;quot;,&lt;br /&gt;
			&amp;quot;AriaMessageInput&amp;quot;: &amp;quot;Message box&amp;quot;,&lt;br /&gt;
			&amp;quot;AsyncChatEnd&amp;quot;: &amp;quot;End Chat&amp;quot;,&lt;br /&gt;
			&amp;quot;AsyncChatClose&amp;quot;: &amp;quot;Close Window&amp;quot;,&lt;br /&gt;
			&amp;quot;AriaAsyncChatEnd&amp;quot;: &amp;quot;End Chat&amp;quot;,&lt;br /&gt;
			&amp;quot;AriaAsyncChatClose&amp;quot;: &amp;quot;Close Window&amp;quot;,&lt;br /&gt;
			&amp;quot;DayLabels&amp;quot;: [&lt;br /&gt;
				&amp;quot;Sun&amp;quot;,&lt;br /&gt;
				&amp;quot;Mon&amp;quot;,&lt;br /&gt;
				&amp;quot;Tue&amp;quot;,&lt;br /&gt;
				&amp;quot;Wed&amp;quot;,&lt;br /&gt;
				&amp;quot;Thur&amp;quot;,&lt;br /&gt;
				&amp;quot;Fri&amp;quot;,&lt;br /&gt;
				&amp;quot;Sat&amp;quot;&lt;br /&gt;
			],&lt;br /&gt;
			&amp;quot;MonthLabels&amp;quot;: [&lt;br /&gt;
				&amp;quot;Jan&amp;quot;,&lt;br /&gt;
				&amp;quot;Feb&amp;quot;,&lt;br /&gt;
				&amp;quot;Mar&amp;quot;,&lt;br /&gt;
				&amp;quot;Apr&amp;quot;,&lt;br /&gt;
				&amp;quot;May&amp;quot;,&lt;br /&gt;
				&amp;quot;Jun&amp;quot;,&lt;br /&gt;
				&amp;quot;Jul&amp;quot;,&lt;br /&gt;
				&amp;quot;Aug&amp;quot;,&lt;br /&gt;
				&amp;quot;Sept&amp;quot;,&lt;br /&gt;
				&amp;quot;Oct&amp;quot;,&lt;br /&gt;
				&amp;quot;Nov&amp;quot;,&lt;br /&gt;
				&amp;quot;Dec&amp;quot;&lt;br /&gt;
			],&lt;br /&gt;
			&amp;quot;todayLabel&amp;quot;: &amp;quot;Today&amp;quot;,&lt;br /&gt;
			&amp;quot;Errors&amp;quot;: {&lt;br /&gt;
				&amp;quot;102&amp;quot;: &amp;quot;First name is required.&amp;quot;,&lt;br /&gt;
				&amp;quot;103&amp;quot;: &amp;quot;Last name is required.&amp;quot;,&lt;br /&gt;
				&amp;quot;161&amp;quot;: &amp;quot;Please enter your name.&amp;quot;,&lt;br /&gt;
				&amp;quot;201&amp;quot;: &amp;quot;The file could not be sent.&amp;lt;br/&amp;gt;&amp;lt;strong&amp;gt;&amp;lt;p class='filename' title='&amp;lt;%FilenameFull%&amp;gt;'&amp;gt;'&amp;lt;%FilenameTruncated%&amp;gt;'&amp;lt;/p&amp;gt;&amp;lt;/strong&amp;gt;&amp;lt;p class='cx-advice'&amp;gt;The maximum number of attached files would be exceeded (&amp;lt;%MaxFilesAllowed%&amp;gt;).&amp;lt;/p&amp;gt;&amp;quot;,&lt;br /&gt;
				&amp;quot;202&amp;quot;: &amp;quot;The file could not be sent.&amp;lt;br/&amp;gt;&amp;lt;strong&amp;gt;&amp;lt;p class='filename' title='&amp;lt;%FilenameFull%&amp;gt;'&amp;gt;'&amp;lt;%FilenameTruncated%&amp;gt;'&amp;lt;/p&amp;gt;&amp;lt;/strong&amp;gt;&amp;lt;p class='cx-advice'&amp;gt;Upload limit and/or maximum number of attachments would be exceeded (&amp;lt;%MaxAttachmentsSize%&amp;gt;).&amp;lt;/p&amp;gt;&amp;quot;,&lt;br /&gt;
				&amp;quot;203&amp;quot;: &amp;quot;The file could not be sent.&amp;lt;br/&amp;gt;&amp;lt;strong&amp;gt;&amp;lt;p class='filename' title='&amp;lt;%FilenameFull%&amp;gt;'&amp;gt;'&amp;lt;%FilenameTruncated%&amp;gt;'&amp;lt;/p&amp;gt;&amp;lt;/strong&amp;gt;&amp;lt;p class='cx-advice'&amp;gt;File type is not allowed.&amp;lt;/p&amp;gt;&amp;quot;,&lt;br /&gt;
				&amp;quot;204&amp;quot;: &amp;quot;We're sorry but your message is too long. Please write a shorter message.&amp;quot;,&lt;br /&gt;
				&amp;quot;240&amp;quot;: &amp;quot;We're sorry but we cannot start a new chat at this time. Please try again later.&amp;quot;,&lt;br /&gt;
				&amp;quot;364&amp;quot;: &amp;quot;Invalid email address.&amp;quot;,&lt;br /&gt;
				&amp;quot;401&amp;quot;: &amp;quot;We're sorry but we are not able to authorize the chat session. Would you like to start a new chat?&amp;quot;,&lt;br /&gt;
				&amp;quot;404&amp;quot;: &amp;quot;We're sorry but we cannot find your previous chat session. Would you like to start a new chat?&amp;quot;,&lt;br /&gt;
				&amp;quot;500&amp;quot;: &amp;quot;We're sorry, an unexpected error occurred with the service. Would you like to close and start a new Chat?&amp;quot;,&lt;br /&gt;
				&amp;quot;503&amp;quot;: &amp;quot;We're sorry, the service is currently unavailable or busy. Would you like to close and start a new Chat again?&amp;quot;,&lt;br /&gt;
				&amp;quot;ChatUnavailable&amp;quot;: &amp;quot;We're sorry but we cannot start a new chat at this time. Please try again later.&amp;quot;,&lt;br /&gt;
				&amp;quot;CriticalFault&amp;quot;: &amp;quot;Your chat session has ended unexpectedly due to an unknown issue. We apologize for the inconvenience.&amp;quot;,&lt;br /&gt;
				&amp;quot;StartFailed&amp;quot;: &amp;quot;There was an issue starting your chat session. Please verify your connection and that you submitted all required information properly, then try again.&amp;quot;,&lt;br /&gt;
				&amp;quot;MessageFailed&amp;quot;: &amp;quot;Your message was not received successfully. Please try again.&amp;quot;,&lt;br /&gt;
				&amp;quot;RestoreFailed&amp;quot;: &amp;quot;We're sorry but we were unable to restore your chat session due to an unknown error.&amp;quot;,&lt;br /&gt;
				&amp;quot;TransferFailed&amp;quot;: &amp;quot;Unable to transfer chat at this time. Please try again later.&amp;quot;,&lt;br /&gt;
				&amp;quot;FileTransferSizeError&amp;quot;: &amp;quot;The file could not be sent.&amp;lt;br/&amp;gt;&amp;lt;strong&amp;gt;&amp;lt;p class='filename' title='&amp;lt;%FilenameFull%&amp;gt;'&amp;gt;'&amp;lt;%FilenameTruncated%&amp;gt;'&amp;lt;/p&amp;gt;&amp;lt;/strong&amp;gt;&amp;lt;p class='cx-advice'&amp;gt;File size is larger than the allowed size (&amp;lt;%MaxSizePerFile%&amp;gt;).&amp;lt;/p&amp;gt;&amp;quot;,&lt;br /&gt;
				&amp;quot;InviteFailed&amp;quot;: &amp;quot;Unable to generate invite at this time. Please try again later.&amp;quot;,&lt;br /&gt;
				&amp;quot;ChatServerWentOffline&amp;quot;: &amp;quot;Messages are currently taking longer than normal to get through. We're sorry for the delay.&amp;quot;,&lt;br /&gt;
				&amp;quot;RestoredOffline&amp;quot;: &amp;quot;Messages are currently taking longer than normal to get through. We're sorry for the delay.&amp;quot;,&lt;br /&gt;
				&amp;quot;Disconnected&amp;quot;: &amp;quot;&amp;lt;div style='text-align:center'&amp;gt;Connection lost&amp;lt;/div&amp;gt;&amp;quot;,&lt;br /&gt;
				&amp;quot;Reconnected&amp;quot;: &amp;quot;&amp;lt;div style='text-align:center'&amp;gt;Connection restored&amp;lt;/div&amp;gt;&amp;quot;,&lt;br /&gt;
				&amp;quot;FileSendFailed&amp;quot;: &amp;quot;The file could not be sent.&amp;lt;br/&amp;gt;&amp;lt;strong&amp;gt;&amp;lt;p class='filename' title='&amp;lt;%FilenameFull%&amp;gt;'&amp;gt;&amp;lt;%FilenameTruncated%&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/strong&amp;gt;&amp;lt;p class='cx-advice'&amp;gt;There was an unexpected disconnection. Try again?&amp;lt;/p&amp;gt;&amp;quot;,&lt;br /&gt;
				&amp;quot;Generic&amp;quot;: &amp;quot;&amp;lt;div style='text-align:center'&amp;gt;An unexpected error occurred.&amp;lt;/div&amp;gt;&amp;quot;,&lt;br /&gt;
				&amp;quot;pureengage-v3-rest-INVALID_FILE_TYPE&amp;quot;: &amp;quot;Invalid file type. Only Images are allowed.&amp;quot;,&lt;br /&gt;
				&amp;quot;pureengage-v3-rest-LIMIT_FILE_SIZE&amp;quot;: &amp;quot;File size is larger than the allowed size.&amp;quot;,&lt;br /&gt;
				&amp;quot;pureengage-v3-rest-LIMIT_FILE_COUNT&amp;quot;: &amp;quot;The maximum number of attached files exceeded the limit.&amp;quot;,&lt;br /&gt;
				&amp;quot;pureengage-v3-rest-INVALID_CONTACT_CENTER&amp;quot;: &amp;quot;Invalid x-api-key transport configuration.&amp;quot;,&lt;br /&gt;
				&amp;quot;pureengage-v3-rest-INVALID_ENDPOINT&amp;quot;: &amp;quot;Invalid endpoint transport configuration.&amp;quot;,&lt;br /&gt;
				&amp;quot;pureengage-v3-rest-INVALID_NICKNAME&amp;quot;: &amp;quot;First Name is required.&amp;quot;,&lt;br /&gt;
				&amp;quot;pureengage-v3-rest-AUTHENTICATION_REQUIRED&amp;quot;: &amp;quot;We're sorry but we are not able to authorize the chat session.&amp;quot;,&lt;br /&gt;
				&amp;quot;purecloud-v2-sockets-400&amp;quot;: &amp;quot;Sorry, something went wrong. Please verify your connection and that you submitted all required information properly, then try again.&amp;quot;,&lt;br /&gt;
				&amp;quot;purecloud-v2-sockets-500&amp;quot;: &amp;quot;We're are sorry, an unexpected error occurred with the service.&amp;quot;,&lt;br /&gt;
				&amp;quot;purecloud-v2-sockets-503&amp;quot;: &amp;quot;We're sorry, the service is currently unavailable.&amp;quot;&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
}&amp;lt;/source&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
|Status=No&lt;br /&gt;
}}{{Section&lt;br /&gt;
|sectionHeading=API commands&lt;br /&gt;
|anchor=commands&lt;br /&gt;
|alignment=Vertical&lt;br /&gt;
|structuredtext=Once you've registered your plugin on the bus, you can call commands on other registered plugins. Here's how to use the global bus object to register a new plugin on the bus.&lt;br /&gt;
&lt;br /&gt;
{{NoteFormat|The global bus object is a debugging tool. When implementing Widgets on your own site, do not use the global bus object to register your custom plugins. Instead, see {{Link-SomewhereInThisVersion|manual=SDK|topic=GWCBusExtensions|display text=Genesys Widgets Extensions}} for more information about extending Genesys Widgets.|1}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;var oMyPlugin = window._genesys.widgets.bus.registerPlugin('MyPlugin');&lt;br /&gt;
&lt;br /&gt;
oMyPlugin.command('WebChat.open');&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===configure===&lt;br /&gt;
&lt;br /&gt;
Internal use only. The main App plugin shares configuration settings to widgets using each widget’s configure command. The configure command can only be called once at startup. Calling configure again after startup may result in unpredictable behavior.&lt;br /&gt;
&lt;br /&gt;
===open===&lt;br /&gt;
&lt;br /&gt;
Opens the WebChat UI.&lt;br /&gt;
&lt;br /&gt;
====Example====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
oMyPlugin.command('WebChat.open', {&lt;br /&gt;
&lt;br /&gt;
	userData: {},&lt;br /&gt;
	form: {&lt;br /&gt;
&lt;br /&gt;
		autoSubmit: false,&lt;br /&gt;
		firstname: 'John',&lt;br /&gt;
		lastname: 'Smith',&lt;br /&gt;
		email: 'John@mail.com',&lt;br /&gt;
		subject: 'Customer Satisfaction'&lt;br /&gt;
	}&lt;br /&gt;
	formJSON: {...}&lt;br /&gt;
	markdown: false&lt;br /&gt;
&lt;br /&gt;
}).done(function(e){&lt;br /&gt;
&lt;br /&gt;
	// WebChat opened successfully&lt;br /&gt;
&lt;br /&gt;
}).fail(function(e){&lt;br /&gt;
&lt;br /&gt;
	// WebChat isn't open or no active chat session&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Options====&lt;br /&gt;
&lt;br /&gt;
{{{!}} &lt;br /&gt;
{{!}}- &lt;br /&gt;
!Option&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}form&lt;br /&gt;
{{!}}object&lt;br /&gt;
{{!}}Object containing form data to prefill in the chat entry form and optionally auto-submit the form.&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}form.autoSubmit&lt;br /&gt;
{{!}}boolean&lt;br /&gt;
{{!}}Automatically submit the form. Useful for bypassing the entry form step.&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}form.firstname&lt;br /&gt;
{{!}}string&lt;br /&gt;
{{!}}Value for the first name entry field.&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}form.lastname&lt;br /&gt;
{{!}}string&lt;br /&gt;
{{!}}Value for the last name entry field.&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}form.email&lt;br /&gt;
{{!}}string&lt;br /&gt;
{{!}}Value for the email entry field.&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}form.subject&lt;br /&gt;
{{!}}string&lt;br /&gt;
{{!}}Value for the subject entry field.&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}formJSON&lt;br /&gt;
{{!}}object&lt;br /&gt;
{{!}}An object containing a custom registration form definition. See {{Link-SomewhereInThisVersion|manual=SDK|topic=WebChat-combined|anchor=ccrf|display text=Customizable chat registration form}}.&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}userData&lt;br /&gt;
{{!}}object&lt;br /&gt;
{{!}}Object containing arbitrary data that gets sent to the server. Overrides userData set in the webchat configuration object.&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}async&lt;br /&gt;
{{!}}boolean&lt;br /&gt;
{{!}}Starts a new chat either in asynchronous or normal mode based on the boolean value. Note that unless {{Link-SomewhereInThisVersion|manual=SDK|topic=WebChat-combined|anchor=example|display text=async static configuration}} is defined, a chat in normal mode will start automatically.&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{!}}markdown&lt;br /&gt;
{{!}}{{!}}boolean&lt;br /&gt;
{{!}}{{!}}The markdown feature for chat messages.&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{!}}id&lt;br /&gt;
{{!}}{{!}}string&lt;br /&gt;
{{!}}{{!}}A Unique identifier of a chat session that helps to identify the instance of that session and its associated events. A random value is automatically generated and assigned when no value is passed explicitly.&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}} &lt;br /&gt;
&lt;br /&gt;
====Resolutions====&lt;br /&gt;
&lt;br /&gt;
{{{!}} &lt;br /&gt;
{{!}}- &lt;br /&gt;
!Status&lt;br /&gt;
!When&lt;br /&gt;
!Returns&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}resolved&lt;br /&gt;
{{!}}WebChat is successfully opened&lt;br /&gt;
{{!}}n/a&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}rejected&lt;br /&gt;
{{!}}WebChat is already open&lt;br /&gt;
{{!}}'already opened'&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}} &lt;br /&gt;
&lt;br /&gt;
===close===&lt;br /&gt;
&lt;br /&gt;
Closes the WebChat UI.&lt;br /&gt;
&lt;br /&gt;
====Example====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
oMyPlugin.command('WebChat.close').done(function(e){&lt;br /&gt;
&lt;br /&gt;
	// WebChat closed successfully&lt;br /&gt;
&lt;br /&gt;
}).fail(function(e){&lt;br /&gt;
&lt;br /&gt;
	// WebChat is already closed or no active chat session&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Resolutions====&lt;br /&gt;
&lt;br /&gt;
{{{!}} &lt;br /&gt;
{{!}}- &lt;br /&gt;
!Status&lt;br /&gt;
!When&lt;br /&gt;
!Returns&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}resolved&lt;br /&gt;
{{!}}WebChat is successfully closed&lt;br /&gt;
{{!}}n/a&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}rejected&lt;br /&gt;
{{!}}WebChat is already closed&lt;br /&gt;
{{!}}'already closed'&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}} &lt;br /&gt;
&lt;br /&gt;
===minimize===&lt;br /&gt;
&lt;br /&gt;
Minimizes or un-minimizes the WebChat UI.&lt;br /&gt;
&lt;br /&gt;
====Example====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
oMyPlugin.command('WebChat.minimize').done(function(e){&lt;br /&gt;
&lt;br /&gt;
	// WebChat minimized successfully&lt;br /&gt;
&lt;br /&gt;
}).fail(function(e){&lt;br /&gt;
&lt;br /&gt;
	// WebChat ignores command&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Options====&lt;br /&gt;
&lt;br /&gt;
{{{!}} &lt;br /&gt;
{{!}}- &lt;br /&gt;
!Option&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}minimized&lt;br /&gt;
{{!}}boolean&lt;br /&gt;
{{!}}Rather than toggling the current minimized state you can specify the minified state directly: true = minimized, false = uniminimized.&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}} &lt;br /&gt;
&lt;br /&gt;
====Resolutions====&lt;br /&gt;
&lt;br /&gt;
{{{!}} &lt;br /&gt;
{{!}}- &lt;br /&gt;
!Status&lt;br /&gt;
!When&lt;br /&gt;
!Returns&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}resolved&lt;br /&gt;
{{!}}Always&lt;br /&gt;
{{!}}n/a&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}rejected&lt;br /&gt;
{{!}}Never&lt;br /&gt;
{{!}}'Invalid configuration'&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}} &lt;br /&gt;
&lt;br /&gt;
===endChat===&lt;br /&gt;
&lt;br /&gt;
Starts the '''end chat''' procedure. User may be prompted to confirm.&lt;br /&gt;
&lt;br /&gt;
====Example====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
oMyPlugin.command('WebChat.endChat').done(function(e){&lt;br /&gt;
&lt;br /&gt;
	// WebChat ended a chat successfully&lt;br /&gt;
&lt;br /&gt;
}).fail(function(e){&lt;br /&gt;
&lt;br /&gt;
	// WebChat has no active chat session&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Resolutions====&lt;br /&gt;
&lt;br /&gt;
{{{!}} &lt;br /&gt;
{{!}}- &lt;br /&gt;
!Status&lt;br /&gt;
!When&lt;br /&gt;
!Returns&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}resolved&lt;br /&gt;
{{!}}There is an active chat session to end&lt;br /&gt;
{{!}}n/a&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}rejected&lt;br /&gt;
{{!}}There is no active chat session to end&lt;br /&gt;
{{!}}'there is no active chat session to end'&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}} &lt;br /&gt;
&lt;br /&gt;
===invite===&lt;br /&gt;
&lt;br /&gt;
Shows an invitation to chat using the Toaster popup element. The text shown in the invitation can be edited in the localization file.&lt;br /&gt;
&lt;br /&gt;
====Example====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
oMyPlugin.command('WebChat.invite').done(function(e){&lt;br /&gt;
&lt;br /&gt;
	// WebChat invited successfully&lt;br /&gt;
&lt;br /&gt;
}).fail(function(e){&lt;br /&gt;
&lt;br /&gt;
	// WebChat is already open and will be ignored&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Resolutions====&lt;br /&gt;
&lt;br /&gt;
{{{!}} &lt;br /&gt;
{{!}}- &lt;br /&gt;
!Status&lt;br /&gt;
!When&lt;br /&gt;
!Returns&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}resolved&lt;br /&gt;
{{!}}WebChat is closed and the toast element is created successfully&lt;br /&gt;
{{!}}n/a&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}rejected&lt;br /&gt;
{{!}}WebChat is already open (prevents inviting a user that is already in a chat)&lt;br /&gt;
{{!}}'Chat is already open. Ignoring invite command.'&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}} &lt;br /&gt;
&lt;br /&gt;
===reInvite===&lt;br /&gt;
&lt;br /&gt;
When an active chat session cannot be restored, this invitation offers to start a new chat for the user. The text shown in the invitation can be edited in the localization file.&lt;br /&gt;
&lt;br /&gt;
====Example====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
oMyPlugin.command('WebChat.reInvite').done(function(e){&lt;br /&gt;
&lt;br /&gt;
	// WebChat reinvited successfully&lt;br /&gt;
&lt;br /&gt;
}).fail(function(e){&lt;br /&gt;
&lt;br /&gt;
	// WebChat is already open and will be ignored&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Resolutions====&lt;br /&gt;
&lt;br /&gt;
{{{!}} &lt;br /&gt;
{{!}}- &lt;br /&gt;
!Status&lt;br /&gt;
!When&lt;br /&gt;
!Returns&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}resolved&lt;br /&gt;
{{!}}WebChat is closed, the config item 'webchat.inviteOnRestoreTimeout' is set, and the toast element is created successfully&lt;br /&gt;
{{!}}n/a&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}rejected&lt;br /&gt;
{{!}}WebChat is already open (prevents inviting a user that is already in a chat)&lt;br /&gt;
{{!}}'Chat is already open. Ignoring invite command.'&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}} &lt;br /&gt;
&lt;br /&gt;
===injectMessage===&lt;br /&gt;
&lt;br /&gt;
Injects a custom message into the chat transcript. Useful for extending WebChat functionality with other Genesys products.&lt;br /&gt;
&lt;br /&gt;
====Example====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
oMyPlugin.command('WebChat.injectMessage', {&lt;br /&gt;
&lt;br /&gt;
	type: 'text',&lt;br /&gt;
	name: 'person',&lt;br /&gt;
	text: 'hello',&lt;br /&gt;
	custom: false,&lt;br /&gt;
	bubble:{&lt;br /&gt;
&lt;br /&gt;
		fill: '#00FF00',&lt;br /&gt;
		radius: '4px',&lt;br /&gt;
		time: false,&lt;br /&gt;
		name: false,&lt;br /&gt;
		direction: 'right',&lt;br /&gt;
		avatar:{&lt;br /&gt;
&lt;br /&gt;
			custom: '&amp;lt;div&amp;gt;word&amp;lt;/div&amp;gt;',&lt;br /&gt;
			icon: 'email'&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
}).done(function(e){&lt;br /&gt;
&lt;br /&gt;
	// WebChat injected a message successfully&lt;br /&gt;
	// e.data == The message HTML reference (jQuery wrapped set)&lt;br /&gt;
&lt;br /&gt;
}).fail(function(e){&lt;br /&gt;
&lt;br /&gt;
	// WebChat isn't open or no active chat&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Options====&lt;br /&gt;
&lt;br /&gt;
{{{!}} &lt;br /&gt;
{{!}}- &lt;br /&gt;
!Option&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}type&lt;br /&gt;
{{!}}string&lt;br /&gt;
{{!}}Switch the rendering type of the injected message between text and html.&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}name&lt;br /&gt;
{{!}}string&lt;br /&gt;
{{!}}Specify a name label for the message to identify what service or widget has injected the message.&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}text&lt;br /&gt;
{{!}}string&lt;br /&gt;
{{!}}The content of the message. Either plain text or HTML.&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}custom&lt;br /&gt;
{{!}}boolean&lt;br /&gt;
{{!}}If set to true, the default message template will not be used, allowing you to inject a highly customized HTML block unconstrained by the normal message template.&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}bubble.fill&lt;br /&gt;
{{!}}string of valid CSS color value&lt;br /&gt;
{{!}}The content of the message. Either plain text or HTML.&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}bubble.radius&lt;br /&gt;
{{!}}string of valid CSS border radius value&lt;br /&gt;
{{!}}The border radius you'd like for the bubble.&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}bubble.time&lt;br /&gt;
{{!}}boolean&lt;br /&gt;
{{!}}If you'd like to show the timestamp for the bubble.&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}bubble.name&lt;br /&gt;
{{!}}boolean&lt;br /&gt;
{{!}}If you'd like to show the name for the bubble.&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}bubble.direction&lt;br /&gt;
{{!}}string&lt;br /&gt;
{{!}}Which direction you want the message bubble to come from.&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}bubble.avatar.custom&lt;br /&gt;
{{!}}string or HTML reference&lt;br /&gt;
{{!}}Change the content of the html that would be the avatar for the chat bubble.&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}bubble.avatar.icon&lt;br /&gt;
{{!}}class name&lt;br /&gt;
{{!}}Generated common library provided for icon name.&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}} &lt;br /&gt;
&lt;br /&gt;
====Resolutions====&lt;br /&gt;
&lt;br /&gt;
{{{!}} &lt;br /&gt;
{{!}}- &lt;br /&gt;
!Status&lt;br /&gt;
!When&lt;br /&gt;
!Returns&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}resolved&lt;br /&gt;
{{!}}WebChat is open and there is an active chat session&lt;br /&gt;
{{!}}An HTML reference (jQuery wrapped set) to the new injected message.&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}rejected&lt;br /&gt;
{{!}}WebChat is not open and/or there was no active chat session&lt;br /&gt;
{{!}}'No chat session to inject into'&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}} &lt;br /&gt;
&lt;br /&gt;
===showChatButton===&lt;br /&gt;
&lt;br /&gt;
Displays the standalone chat button using either the default template and CSS, or customer-defined ones.&lt;br /&gt;
&lt;br /&gt;
====Example====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
oMyPlugin.command('WebChat.showChatButton', {&lt;br /&gt;
&lt;br /&gt;
	openDelay: 1000,&lt;br /&gt;
	duration: 1500&lt;br /&gt;
&lt;br /&gt;
}).done(function(e){&lt;br /&gt;
&lt;br /&gt;
	// WebChat shows chat button successfully&lt;br /&gt;
&lt;br /&gt;
}).fail(function(e){&lt;br /&gt;
&lt;br /&gt;
	// WebChat button is already visible, side bar is active and overrides the chat button, or chat button is disabled in configuration&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Options====&lt;br /&gt;
&lt;br /&gt;
{{{!}} &lt;br /&gt;
{{!}}- &lt;br /&gt;
!Option&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}openDelay&lt;br /&gt;
{{!}}number&lt;br /&gt;
{{!}}Duration in milliseconds to delay showing the chat button on the page.&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}duration&lt;br /&gt;
{{!}}number&lt;br /&gt;
{{!}}Duration in milliseconds for the show and hide animation.&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}} &lt;br /&gt;
&lt;br /&gt;
====Resolutions====&lt;br /&gt;
&lt;br /&gt;
{{{!}} &lt;br /&gt;
{{!}}- &lt;br /&gt;
!Status&lt;br /&gt;
!When&lt;br /&gt;
!Returns&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}resolved&lt;br /&gt;
{{!}}The chat button is enabled in the configuration, is currently not visible, and the SideBar plugin is not initialized&lt;br /&gt;
{{!}}n/a&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}rejected&lt;br /&gt;
{{!}}The chat button is not enabled in the configuration, or it's already visible, or the SideBar plugin is initialized&lt;br /&gt;
{{!}}'Chat button is already visible. Ignoring command.'&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}rejected&lt;br /&gt;
{{!}}The SideBar plugin is active the standalone chat button will be disabled automatically&lt;br /&gt;
{{!}}'SideBar is active and overrides the default chat button'&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}} &lt;br /&gt;
&lt;br /&gt;
===hideChatButton===&lt;br /&gt;
&lt;br /&gt;
Hides the standalone chat button.&lt;br /&gt;
&lt;br /&gt;
====Example====&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
oMyPlugin.command('WebChat.hideChatButton', {duration: 1500}).done(function(e){&lt;br /&gt;
&lt;br /&gt;
	// WebChat hid chat button successfully&lt;br /&gt;
&lt;br /&gt;
}).fail(function(e){&lt;br /&gt;
&lt;br /&gt;
	// WebChat button is already hidden&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Options====&lt;br /&gt;
{{{!}} &lt;br /&gt;
{{!}}- &lt;br /&gt;
!Option&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}duration&lt;br /&gt;
{{!}}number&lt;br /&gt;
{{!}}Duration in milliseconds for the show and hide animation.&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}} &lt;br /&gt;
&lt;br /&gt;
====Resolutions====&lt;br /&gt;
&lt;br /&gt;
{{{!}} &lt;br /&gt;
{{!}}- &lt;br /&gt;
!Status&lt;br /&gt;
!When&lt;br /&gt;
!Returns&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}resolved&lt;br /&gt;
{{!}}The chat button is currently visible&lt;br /&gt;
{{!}}n/a&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}rejected&lt;br /&gt;
{{!}}The chat button is already hidden&lt;br /&gt;
{{!}}'Chat button is already hidden. Ignoring command.'&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}} &lt;br /&gt;
&lt;br /&gt;
===showOverlay===&lt;br /&gt;
&lt;br /&gt;
Opens a slide-down overlay over WebChat's content. You can fill this overlay with content such as disclaimers, articles, and other information.&lt;br /&gt;
&lt;br /&gt;
====Example====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
oMyPlugin.command('WebChat.showOverlay', {&lt;br /&gt;
&lt;br /&gt;
	html: '&amp;lt;div&amp;gt;Example text&amp;lt;/div&amp;gt;',&lt;br /&gt;
	hideFooter: false&lt;br /&gt;
&lt;br /&gt;
}).done(function(e){&lt;br /&gt;
&lt;br /&gt;
	// WebChat successfully shows overlay&lt;br /&gt;
&lt;br /&gt;
}).fail(function(e){&lt;br /&gt;
&lt;br /&gt;
	// WebChat isn't open&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Options====&lt;br /&gt;
&lt;br /&gt;
{{{!}} &lt;br /&gt;
{{!}}- &lt;br /&gt;
!Option&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}html&lt;br /&gt;
{{!}}string or HTML reference&lt;br /&gt;
{{!}}The HTML content you want to display in the overlay.&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}hideFooter&lt;br /&gt;
{{!}}boolean&lt;br /&gt;
{{!}}Normally the overlay appears between the titlebar and footer bar. Set this to true to have the overlay overlap the footer to gain a bit more vertical space. This should only be used in special cases. For general use, don't set this value.&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}} &lt;br /&gt;
&lt;br /&gt;
====Resolutions====&lt;br /&gt;
{{{!}} &lt;br /&gt;
{{!}}- &lt;br /&gt;
!Status&lt;br /&gt;
!When&lt;br /&gt;
!Returns&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}resolved&lt;br /&gt;
{{!}}WebChat is open and the overlay opens&lt;br /&gt;
{{!}}&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}rejected&lt;br /&gt;
{{!}}WebChat is not currently open&lt;br /&gt;
{{!}}WebChat is not currently open. Ignoring command.&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}} &lt;br /&gt;
&lt;br /&gt;
===hideOverlay===&lt;br /&gt;
&lt;br /&gt;
Hides the slide-down overlay.&lt;br /&gt;
&lt;br /&gt;
====Example====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
oMyPlugin.command('WebChat.hideOverlay').done(function(e){&lt;br /&gt;
&lt;br /&gt;
	// WebChat hid overlay successfully&lt;br /&gt;
&lt;br /&gt;
}).fail(function(e){&lt;br /&gt;
&lt;br /&gt;
	// WebChat isn't open&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Resolutions====&lt;br /&gt;
&lt;br /&gt;
{{{!}} &lt;br /&gt;
{{!}}- &lt;br /&gt;
!Status&lt;br /&gt;
!When&lt;br /&gt;
!Returns&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}resolved&lt;br /&gt;
{{!}}WebChat is open and the overlay closes&lt;br /&gt;
{{!}}&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}rejected&lt;br /&gt;
{{!}}WebChat is not currently open&lt;br /&gt;
{{!}}WebChat is not currently open. Ignoring command.&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}}&lt;br /&gt;
|Status=No&lt;br /&gt;
}}{{Section&lt;br /&gt;
|sectionHeading=API events&lt;br /&gt;
|anchor=events&lt;br /&gt;
|alignment=Vertical&lt;br /&gt;
|structuredtext=Once you've registered your plugin on the bus, you can subscribe to and listen for published events. Here's how to use the global bus object to register a new plugin on the bus.&lt;br /&gt;
&lt;br /&gt;
{{NoteFormat|The global bus object is a debugging tool. When implementing Widgets on your own site, do not use the global bus object to register your custom plugins. Instead, see {{Link-SomewhereInThisVersion|manual=SDK|topic=GWCBusExtensions|display text=Genesys Widgets Extensions}} for more information about extending Genesys Widgets.|1}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;var oMyPlugin = window._genesys.widgets.bus.registerPlugin('MyPlugin');&lt;br /&gt;
&lt;br /&gt;
oMyPlugin.subscribe('WebChat.ready', function(e){});&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{{!}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
!Name&lt;br /&gt;
!Description&lt;br /&gt;
!Data&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}ready&lt;br /&gt;
{{!}}WebChat is initialized and ready to accept commands&lt;br /&gt;
{{!}}n/a&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}opened&lt;br /&gt;
{{!}}The WebChat widget has appeared on screen&lt;br /&gt;
{{!}}n/a&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}started&lt;br /&gt;
{{!}}The WebChat has successfully started.&lt;br /&gt;
{{!}}{{Link-SomewhereInThisVersion|manual=SDK|topic=WebChat-combined|anchor=metadata|display text=Metadata}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}submitted&lt;br /&gt;
{{!}}The user has submitted the form.&lt;br /&gt;
{{!}}{{Link-SomewhereInThisVersion|manual=SDK|topic=WebChat-combined|anchor=metadata|display text=Metadata}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}rejected&lt;br /&gt;
{{!}}When the chat session fails to start. Typically due to form validation or network errors.&lt;br /&gt;
{{!}}{{Link-SomewhereInThisVersion|manual=SDK|topic=WebChat-combined|anchor=metadata|display text=Metadata}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}completed&lt;br /&gt;
{{!}}The Chat session ended after agent is successfully connected to WebChat.&lt;br /&gt;
{{!}}{{Link-SomewhereInThisVersion|manual=SDK|topic=WebChat-combined|anchor=metadata|display text=Metadata}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}cancelled&lt;br /&gt;
{{!}}The Chat session ended before agent is connected to WebChat.&lt;br /&gt;
{{!}}{{Link-SomewhereInThisVersion|manual=SDK|topic=WebChat-combined|anchor=metadata|display text=Metadata}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}closed&lt;br /&gt;
{{!}}The WebChat widget has been removed from the screen&lt;br /&gt;
{{!}}{{Link-SomewhereInThisVersion|manual=SDK|topic=WebChat-combined|anchor=metadata|display text=Metadata}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}minimized&lt;br /&gt;
{{!}}The WebChat widget has been changed to a minimized state&lt;br /&gt;
{{!}}n/a&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}unminimized&lt;br /&gt;
{{!}}The WebChat widget has been restored from a minimized state to the standard view&lt;br /&gt;
{{!}}n/a&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}messageAdded&lt;br /&gt;
{{!}}When a message is added to the transcript, this event will fire&lt;br /&gt;
{{!}}Returns an object containing two properties: 'data' and 'html'. 'data' contains the JSON data for the message, while 'html' contains a reference to the visible message inside the chat transcript.&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}}&lt;br /&gt;
|Status=No&lt;br /&gt;
}}{{Section&lt;br /&gt;
|sectionHeading=Metadata&lt;br /&gt;
|anchor=metadata&lt;br /&gt;
|alignment=Vertical&lt;br /&gt;
|structuredtext====Interaction Lifecycle===&lt;br /&gt;
&lt;br /&gt;
Every WebChat interaction has a sequence of events we call the ''Interaction Lifecycle''. This is a sequence of events that tracks progress and choices from the beginning of an interaction (opening WebChat), to the end (closing WebChat), and every step in between.&lt;br /&gt;
&lt;br /&gt;
The following events are part of the Interaction Lifecycle:&lt;br /&gt;
&lt;br /&gt;
 ready&lt;br /&gt;
 opened&lt;br /&gt;
 started&lt;br /&gt;
 cancelled&lt;br /&gt;
 submitted&lt;br /&gt;
 rejected&lt;br /&gt;
 completed&lt;br /&gt;
 closed&lt;br /&gt;
&lt;br /&gt;
===Lifecycle scenarios===&lt;br /&gt;
&lt;br /&gt;
An Interaction Lifecycle can vary based on each user's intent and experience with WebChat. Here are several sequences of events in the lifecycle that correspond to different scenarios.&lt;br /&gt;
&lt;br /&gt;
The user opened WebChat but changed their mind and closed it without starting a chat session:&lt;br /&gt;
 ready -&amp;gt; opened -&amp;gt; cancelled -&amp;gt; closed&lt;br /&gt;
&lt;br /&gt;
The user started a chat session but ended it before an agent connected. Perhaps it was taking too long to reach someone:&lt;br /&gt;
 ready -&amp;gt; opened -&amp;gt; started -&amp;gt; cancelled -&amp;gt; closed&lt;br /&gt;
&lt;br /&gt;
The user started a chat, but the chat fails to start:&lt;br /&gt;
 ready -&amp;gt; opened -&amp;gt; started -&amp;gt; submitted -&amp;gt; rejected&lt;br /&gt;
&lt;br /&gt;
The user started a chat, met with an agent, and the session ended normally:&lt;br /&gt;
 ready -&amp;gt; opened -&amp;gt; started -&amp;gt; submitted -&amp;gt; completed -&amp;gt; closed&lt;br /&gt;
&lt;br /&gt;
{{NoteFormat|For a list of all WebChat events, see {{Link-SomewhereInThisVersion|manual=SDK|topic=WebChat-combined|anchor=events|display text=API events}}.|2}}&lt;br /&gt;
&lt;br /&gt;
===Metadata===&lt;br /&gt;
&lt;br /&gt;
Each event in the Interaction Lifecycle includes the following block of metadata. By default, all values are set to &amp;lt;tt&amp;gt;false&amp;lt;/tt&amp;gt;. As the user progresses through the lifecycle of a WebChat interaction, these values will be updated.&lt;br /&gt;
&lt;br /&gt;
The metadata block contains boolean state flags, counters, timestamps, and elapsed times. These values can be used to track and identify trends or issues with chat interactions. During run-time, the metadata can help you offer a smart and dynamic experience to your users.&lt;br /&gt;
&lt;br /&gt;
====Reference====&lt;br /&gt;
&lt;br /&gt;
{{{!}} &lt;br /&gt;
{{!}}- &lt;br /&gt;
!Name&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}proactive&lt;br /&gt;
{{!}}boolean&lt;br /&gt;
{{!}}Indicates this chat session was started proactively.&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}prefilled&lt;br /&gt;
{{!}}boolean&lt;br /&gt;
{{!}}Indicates the registration form was prefilled with info automatically.&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}autoSubmitted&lt;br /&gt;
{{!}}boolean&lt;br /&gt;
{{!}}Indicates the registration form was submitted automatically, usually after being prefilled.&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}filesUploaded&lt;br /&gt;
{{!}}integer&lt;br /&gt;
{{!}}Current number of files uploaded during chat session.&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}numAgents&lt;br /&gt;
{{!}}integer&lt;br /&gt;
{{!}}Current number of agents that have connected to the chat session.&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}userMessages&lt;br /&gt;
{{!}}integer&lt;br /&gt;
{{!}}Current number of messages sent by user.&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}agentMessages&lt;br /&gt;
{{!}}integer&lt;br /&gt;
{{!}}Current number of messages sent by agents.&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}systemMessages&lt;br /&gt;
{{!}}integer&lt;br /&gt;
{{!}}Current number of system messages received.&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}errors&lt;br /&gt;
{{!}}array/boolean&lt;br /&gt;
{{!}}An array of error codes encountered during chat session. If no errors, this value will be false.&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}form&lt;br /&gt;
{{!}}object&lt;br /&gt;
{{!}}An object containing the form parameters when the form is submitted.&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}opened&lt;br /&gt;
{{!}}integer (timestamp)&lt;br /&gt;
{{!}}Timestamp indicating when WebChat was opened.&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}started&lt;br /&gt;
{{!}}integer (timestamp)&lt;br /&gt;
{{!}}Timestamp indicating when chat session started.&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}cancelled&lt;br /&gt;
{{!}}integer (timestamp)&lt;br /&gt;
{{!}}Timestamp indicating when the chat session was cancelled. Cancelled refers to when a user ends a chat session before an agent connects.&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}rejected&lt;br /&gt;
{{!}}integer (timestamp)&lt;br /&gt;
{{!}}Timestamp indicating when the chat session was rejected. Rejected refers to when a chat session fails to start.&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}completed&lt;br /&gt;
{{!}}integer (timestamp)&lt;br /&gt;
{{!}}Timestamp indicating when the chat session ended normally. Completed refers to when a user or agent ends a chat after an agent connected.&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}closed&lt;br /&gt;
{{!}}integer (timestamp)&lt;br /&gt;
{{!}}Timestamp indicating when WebChat was closed.&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}agentReached&lt;br /&gt;
{{!}}integer (timestamp)&lt;br /&gt;
{{!}}Timestamp indicating when the first agent was reached, if any.&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}supervisorReached&lt;br /&gt;
{{!}}integer (timestamp)&lt;br /&gt;
{{!}}Timestamp indicating when the first agent supervisor was reached, if any.&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}elapsed&lt;br /&gt;
{{!}}integer (milliseconds)&lt;br /&gt;
{{!}}Total elapsed time in milliseconds from when the user started the chat session to when the chat session ended.&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}waitingForAgent&lt;br /&gt;
{{!}}integer (milliseconds)&lt;br /&gt;
{{!}}Total time in milleseconds waiting for an agent from when the user started the chat session to when an agent connected to the session.&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}id&lt;br /&gt;
{{!}}string&lt;br /&gt;
{{!}}A Unique identifier of a chat session that helps to identify the instance of that session and its associated events.&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}}&lt;br /&gt;
|Status=No&lt;br /&gt;
}}{{Section&lt;br /&gt;
|sectionHeading=Customizable chat registration form&lt;br /&gt;
|anchor=ccrf&lt;br /&gt;
|alignment=Vertical&lt;br /&gt;
|structuredtext=WebChat allows you to customize the registration form shown to users prior to starting a session. The following form inputs are currently supported:&lt;br /&gt;
&lt;br /&gt;
*Text&lt;br /&gt;
*Select&lt;br /&gt;
*Hidden&lt;br /&gt;
*Checkbox&lt;br /&gt;
*Textarea&lt;br /&gt;
&lt;br /&gt;
Customization is done through a JSON object structure that defines the layout, input type, label, and attributes for each input. You can set the default registration form definition in the '''_genesys.widgets.webchat.form''' {{Link-SomewhereInThisVersion|manual=SDK|topic=WebChat-combined|anchor=config|display text=configuration }} option. Alternately, you can pass a new registration form definition through the &amp;lt;tt&amp;gt;WebChat.open&amp;lt;/tt&amp;gt; command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;JAVASCRIPT&amp;quot;&amp;gt;&lt;br /&gt;
_genesys.widgets.bus.command(&amp;quot;WebChat.open&amp;quot;, {formJSON: oRegFormDef});&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Inputs are rendered as stacked rows with one input and one optional label per row. &lt;br /&gt;
&lt;br /&gt;
===Default example===&lt;br /&gt;
&lt;br /&gt;
The following example is the default JSON object used to render WebChat’s registration form. This is a very simple definition that does not use many properties.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;JAVASCRIPT&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	wrapper: &amp;quot;&amp;lt;table&amp;gt;&amp;lt;/table&amp;gt;&amp;quot;,&lt;br /&gt;
	inputs: [&lt;br /&gt;
&lt;br /&gt;
		{&lt;br /&gt;
			id: &amp;quot;cx_webchat_form_firstname&amp;quot;,&lt;br /&gt;
			name: &amp;quot;firstname&amp;quot;,&lt;br /&gt;
			maxlength: &amp;quot;100&amp;quot;,&lt;br /&gt;
			placeholder: &amp;quot;@i18n:webchat.ChatFormPlaceholderFirstName&amp;quot;,&lt;br /&gt;
			label: &amp;quot;@i18n:webchat.ChatFormFirstName&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
&lt;br /&gt;
		{&lt;br /&gt;
			id: &amp;quot;cx_webchat_form_lastname&amp;quot;,&lt;br /&gt;
			name: &amp;quot;lastname&amp;quot;,&lt;br /&gt;
			maxlength: &amp;quot;100&amp;quot;,&lt;br /&gt;
			placeholder: &amp;quot;@i18n:webchat.ChatFormPlaceholderLastName&amp;quot;,&lt;br /&gt;
			label: &amp;quot;@i18n:webchat.ChatFormLastName&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
&lt;br /&gt;
		{&lt;br /&gt;
			id: &amp;quot;cx_webchat_form_email&amp;quot;,&lt;br /&gt;
			name: &amp;quot;email&amp;quot;, &lt;br /&gt;
			maxlength: &amp;quot;100&amp;quot;,&lt;br /&gt;
			placeholder: &amp;quot;@i18n:webchat.ChatFormPlaceholderEmail&amp;quot;,&lt;br /&gt;
			label: &amp;quot;@i18n:webchat.ChatFormEmail&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
&lt;br /&gt;
		{&lt;br /&gt;
			id: &amp;quot;cx_webchat_form_subject&amp;quot;, &lt;br /&gt;
			name: &amp;quot;subject&amp;quot;, &lt;br /&gt;
			maxlength: &amp;quot;100&amp;quot;,&lt;br /&gt;
			placeholder: &amp;quot;@i18n:webchat.ChatFormPlaceholderSubject&amp;quot;,&lt;br /&gt;
			label: &amp;quot;@i18n:webchat.ChatFormSubject&amp;quot;&lt;br /&gt;
		}&lt;br /&gt;
	]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This JSON definition generates the following output:&lt;br /&gt;
&lt;br /&gt;
[[File:WebChat CustomForm 001.png|400px]]&lt;br /&gt;
&lt;br /&gt;
===Properties===&lt;br /&gt;
&lt;br /&gt;
Each input definition can contain any number of properties. These are categorized in two groups: &amp;quot;Special properties&amp;quot;, which are custom properties used internally to handle rendering logic, and &amp;quot;HTML attributes&amp;quot; which are properties that are applied directly as HTML attributes on the input element.&lt;br /&gt;
&lt;br /&gt;
====Special properties====&lt;br /&gt;
{{{!}} &lt;br /&gt;
{{!}}- &lt;br /&gt;
!Property&lt;br /&gt;
!Type&lt;br /&gt;
!Default&lt;br /&gt;
!Description&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}type&lt;br /&gt;
{{!}}string&lt;br /&gt;
{{!}}&amp;quot;text&amp;quot;&lt;br /&gt;
{{!}}Sets the type of input to render. Possible values are currently &amp;quot;text&amp;quot;, &amp;quot;hidden&amp;quot;, &amp;quot;select&amp;quot;, &amp;quot;checkbox&amp;quot;, and &amp;quot;textarea&amp;quot;.&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}label&lt;br /&gt;
{{!}}string&lt;br /&gt;
{{!}}&lt;br /&gt;
{{!}}Set the text for the label. If no value provided, no label will be shown. You may use localization query strings to enable custom localization (for example, label: &amp;quot;@i18n:namespace.StringName&amp;quot;). Localization query strings allow you to use strings from any widget namespace or to create your own namespace in the localization file (i18n.json) and use strings from there (for example, label: &amp;quot;@i18n:myCustomNamespace.myCustomString001&amp;quot;). For more information, see the {{Link-SomewhereInThisVersion|manual=SDK|topic=WebChat-combined|anchor=ccrflab|display text=Labels}} section.&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}wrapper&lt;br /&gt;
{{!}}HTML string&lt;br /&gt;
{{!}}&amp;lt;table&amp;gt;&amp;lt;/table&amp;gt;“&amp;lt;nowiki&amp;gt;&amp;lt;table&amp;gt;&amp;lt;/table&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;quot;&lt;br /&gt;
{{!}}Each input exists in its own row in the form. By default this is a table-row with the label in the left cell and the input in the right cell. You can redefine this wrapper and layout by specifying a new HTML row structure. See the {{Link-SomewhereInThisVersion|manual=SDK|topic=WebChat-combined|anchor=ccrfwrp|display text=Wrappers}} section for more info.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt; The default wrapper for an input is &amp;quot;&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}validate&lt;br /&gt;
{{!}}function&lt;br /&gt;
{{!}}&lt;br /&gt;
{{!}}Define a validation function for the input that executes when the input loses focus (blur) or changes value. Your function must return &amp;lt;tt&amp;gt;true&amp;lt;/tt&amp;gt; or &amp;lt;tt&amp;gt;false&amp;lt;/tt&amp;gt;. True to indicate it passed, false to indicate it failed. If your validation fails, the form will not submit and the invalid input will be highlighted in red. See the {{Link-SomewhereInThisVersion|manual=SDK|topic=WebChat-combined|anchor=ccrfval|display text=Validation}} section for more details and examples.&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}validateWhileTyping&lt;br /&gt;
{{!}}boolean&lt;br /&gt;
{{!}}false&lt;br /&gt;
{{!}}Execute validation on keypress in addition to blur and change. This ignores non-character keys like shift, ctrl, and alt.&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}options&lt;br /&gt;
{{!}}array&lt;br /&gt;
{{!}}[]&lt;br /&gt;
{{!}}When ‘type’ is set to ‘select’, you can populate the select by adding options to this array. Each option is an object (for example, {text: ‘Option 1’, value: ‘1’} for a selectable option, and {text: &amp;quot;Group 1&amp;quot;, group: true} for an option group).&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}} &lt;br /&gt;
&lt;br /&gt;
====HTML attributes====&lt;br /&gt;
&lt;br /&gt;
With the exception of special properties, all properties will be added as HTML attributes on the input element. You can use standard HTML attributes or make your own.&lt;br /&gt;
&lt;br /&gt;
'''Example'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;JAVASCRIPT&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	id: &amp;quot;cx_webchat_form_firstname&amp;quot;,&lt;br /&gt;
	name: &amp;quot;firstname&amp;quot;,&lt;br /&gt;
	maxlength: &amp;quot;100&amp;quot;,&lt;br /&gt;
	placeholder: &amp;quot;@i18n:webchat.ChatFormPlaceholderFirstName&amp;quot;,&lt;br /&gt;
	label: &amp;quot;@i18n:webchat.ChatFormFirstName&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this example, &amp;lt;tt&amp;gt;id&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;name&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;maxlength&amp;lt;/tt&amp;gt;, and &amp;lt;tt&amp;gt;placeholder&amp;lt;/tt&amp;gt; are all standard HTML attributes for the text input element. Whatever values are set here will be applied to the input as HTML attributes.&lt;br /&gt;
&lt;br /&gt;
{{NoteFormat|The default input type is &amp;quot;text&amp;quot;, so type does not need to be defined if you intend to make a text input. |1}}&lt;br /&gt;
&lt;br /&gt;
'''HTML output'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;input type=&amp;quot;text&amp;quot; id=&amp;quot;cx_webchat_form_firstname&lt;br /&gt;
 name=&amp;quot;firstname&amp;quot; maxlength=&amp;quot;100&amp;quot; placeholder=&amp;quot;Required&amp;quot;&amp;gt;&amp;lt;/input&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Disabling autocomplete====&lt;br /&gt;
&lt;br /&gt;
Since the custom form feature supports adding any HTML attributes to your inputs, you can control standard HTML features like disabling autocomplete. To disable autocomplete, add '''autocomplete: &amp;quot;off&amp;quot;''' to your input definition.&lt;br /&gt;
&lt;br /&gt;
'''Example'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;JAVASCRIPT&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	id: &amp;quot;cx_webchat_form_firstname&amp;quot;,&lt;br /&gt;
	name: &amp;quot;firstname&amp;quot;,&lt;br /&gt;
	maxlength: &amp;quot;100&amp;quot;,&lt;br /&gt;
	placeholder: &amp;quot;@i18n:webchat.ChatFormPlaceholderFirstName&amp;quot;,&lt;br /&gt;
	label: &amp;quot;@i18n:webchat.ChatFormFirstName&amp;quot;,&lt;br /&gt;
	autocomplete: &amp;quot;off&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{AnchorDiv|ccrflab}}&lt;br /&gt;
===Labels===&lt;br /&gt;
&lt;br /&gt;
A label tag will be generated for your input if you specify label text and if your custom input wrapper includes a ‘{label}’ designation. If you have added an ID attribute for your input, the label will automatically be linked to your input so that clicking on the label selects the input or, for checkboxes, toggles it. &lt;br /&gt;
&lt;br /&gt;
Labels can be defined as static strings or localization queries.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{AnchorDiv|ccrfwrp}}&lt;br /&gt;
===Wrappers===&lt;br /&gt;
&lt;br /&gt;
Wrappers are HTML string templates that define a layout. There are two kinds of wrappers, '''Form Wrappers''' and '''Input Wrappers''': &lt;br /&gt;
&lt;br /&gt;
====Form wrapper====&lt;br /&gt;
&lt;br /&gt;
You can specify the parent wrapper for the overall form in the top-level &amp;quot;wrapper&amp;quot; property. In the example below, we specify this value as “&amp;lt;nowiki&amp;gt;&amp;lt;table&amp;gt;&amp;lt;/table&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;quot;.&amp;lt;table&amp;gt;&amp;lt;/table&amp;gt;This is the default wrapper for the WebChat form:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;JAVASCRIPT&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	wrapper: &amp;quot;&amp;lt;table&amp;gt;&amp;lt;/table&amp;gt;&amp;quot;, /* form wrapper */&lt;br /&gt;
	inputs: []&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Input wrapper====&lt;br /&gt;
&lt;br /&gt;
Each input is rendered as a table row inside the Form Wrapper. You can change this by defining a new wrapper template for your input row. Inside your template you can specify where you want the input and label to be by adding the identifiers &amp;quot;{label}&amp;quot; and &amp;quot;{input}&amp;quot; to your wrapper value. See the example below:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;JAVASCRIPT&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	id: &amp;quot;cx_webchat_form_firstname&amp;quot;,&lt;br /&gt;
	name: &amp;quot;firstname&amp;quot;,&lt;br /&gt;
	maxlength: &amp;quot;100&amp;quot;,&lt;br /&gt;
	placeholder: &amp;quot;@i18n:webchat.ChatFormPlaceholderFirstName&amp;quot;,&lt;br /&gt;
	label: &amp;quot;@i18n:webchat.ChatFormFirstName&amp;quot;,&lt;br /&gt;
	wrapper: &amp;quot;&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;{label}&amp;lt;/th&amp;gt;&amp;lt;td&amp;gt;{input}&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;quot; /* input row wrapper */&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The {label} identifier is optional. Omitting it will allow the input to fill the row. If you decide to keep the label, you can move it to any location within the wrapper, such as putting the label on the right, or stacking the label on top of the input. You can control the layout of each row independently, depending on your needs.&lt;br /&gt;
&lt;br /&gt;
You are not restricted to using a table for your form. You can change the form wrapper to &amp;quot;&amp;lt;nowiki&amp;gt;&amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;quot; and then change the individual input wrappers from a table-row to your own specification. Be aware though that when you move away from the default table wrappers, you are responsible for styling and aligning your layout. Only the default table-row wrapper is supported by default Themes and CSS.{{AnchorDiv|ccrfval}}&lt;br /&gt;
===Validation===&lt;br /&gt;
&lt;br /&gt;
You can apply a validation function to each input that lets you check the value after a change has been made and/or the user has moved to a different input (on change and on blur). You can enable validation on key press by setting &amp;lt;tt&amp;gt;validateWhileTyping&amp;lt;/tt&amp;gt; to &amp;lt;tt&amp;gt;true&amp;lt;/tt&amp;gt; in your input definition.&lt;br /&gt;
&lt;br /&gt;
Here is how to define a validation function:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;JAVASCRIPT&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	id: &amp;quot;cx_webchat_form_firstname&amp;quot;,&lt;br /&gt;
	name: &amp;quot;firstname&amp;quot;,&lt;br /&gt;
	maxlength: &amp;quot;100&amp;quot;,&lt;br /&gt;
	placeholder: &amp;quot;@i18n:webchat.ChatFormPlaceholderFirstName&amp;quot;,&lt;br /&gt;
	label: &amp;quot;@i18n:webchat.ChatFormFirstName&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
	validateWhileTyping: true, // default is false&lt;br /&gt;
&lt;br /&gt;
	validate: function(event, form, input, label, $, CXBus, Common){&lt;br /&gt;
&lt;br /&gt;
		return true; // or false&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You must return &amp;lt;tt&amp;gt;true&amp;lt;/tt&amp;gt; or &amp;lt;tt&amp;gt;false&amp;lt;/tt&amp;gt; to indicate that validation has passed or failed, respectively. If you return false, the WebChat form will not submit, and the input will be highlighted in red. This is achieved by adding the CSS class &amp;quot;cx-error&amp;quot; to the input. &lt;br /&gt;
&lt;br /&gt;
====Validation function arguments====&lt;br /&gt;
&lt;br /&gt;
{{{!}} &lt;br /&gt;
{{!}}- &lt;br /&gt;
!Argument&lt;br /&gt;
!Type&lt;br /&gt;
!Description&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}event&lt;br /&gt;
{{!}}JavaScript event object&lt;br /&gt;
{{!}}The input event reference object related to the form input field. This event data can be helpful to perform actions like active validation on an input field while the user is typing.&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}form&lt;br /&gt;
{{!}}HTML reference&lt;br /&gt;
{{!}}A jquery reference to the form wrapper element.&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}input&lt;br /&gt;
{{!}}HTML reference&lt;br /&gt;
{{!}}A jquery reference to the input element being validated.&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}label&lt;br /&gt;
{{!}}HTML reference&lt;br /&gt;
{{!}}A jquery reference to the label for the input being validated.&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}$&lt;br /&gt;
{{!}}jquery instance&lt;br /&gt;
{{!}}Widget’s internal jquery instance. Use this to help you write your validation logic, if needed.&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}CXBus&lt;br /&gt;
{{!}}CXBus instance&lt;br /&gt;
{{!}}Widget’s internal CXBus reference. Use this to call commands on the bus, if needed.&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}Common&lt;br /&gt;
{{!}}Function Library&lt;br /&gt;
{{!}}Widget’s internal Common library of functions and utilities. Use if needed.&lt;br /&gt;
{{!}}- &lt;br /&gt;
{{!}}}&lt;br /&gt;
===Form submit===&lt;br /&gt;
&lt;br /&gt;
Custom input field form values are submitted to the server as key value pairs under the userData section of the form submit request, where input field names will be the property keys. During the submit, this data is merged along with the userData defined in the {{Link-SomewhereInThisVersion|manual=SDK|topic=WebChat-combined|anchor=commands|display text=WebChat.open}} command.{{NoteFormat|Depending on the API used (PureEnagage V2 API or Genesys Cloud) the payload structure in the request can vary for each, but the section below explains how the form data is submitted by the WebChat UI plugin when using custom forms.|}}Below is the internal form data object defined in the WebChat plugin by default. Since firstname, lastname, nickname, email, and subject are reserved keywords, users are not allowed to have custom fields with the same name.&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  firstname: '',&lt;br /&gt;
  lastname: '',&lt;br /&gt;
  nickname: '',&lt;br /&gt;
  email: '',&lt;br /&gt;
  subject: '',&lt;br /&gt;
  userData: {}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
====Example====&lt;br /&gt;
The example below shows how the custom form data given in the WebChat form fields have been mapped as form data object.&lt;br /&gt;
&lt;br /&gt;
The form fields with reserved keywords like firstname, lastname, and email will be sent as top level and the rest of the fields will be sent under userData to the WebChatService plugin.&lt;br /&gt;
&lt;br /&gt;
Once the form data object is sent to the WebChatService plugin, it will parse and send in the payload request.[[ File:WebChat_CustomForm_Dark_v1.png|frameless|400px|left]]&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  firstname: 'John',&lt;br /&gt;
  lastname: 'Smith',&lt;br /&gt;
  email: 'john.smith@company.com',&lt;br /&gt;
  userData: {&lt;br /&gt;
    phonenumber: '9256328346',&lt;br /&gt;
    enquirytype: 'Sales' //value selected from the dropdown&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
|Status=No&lt;br /&gt;
}}{{Section&lt;br /&gt;
|sectionHeading=Customizable emoji menu&lt;br /&gt;
|alignment=Vertical&lt;br /&gt;
|structuredtext={{AnchorDiv|cem}}&lt;br /&gt;
===Introduction===&lt;br /&gt;
WebChat offers a v2 emoji menu that lets you choose which emojis to include in the emoji menu.&lt;br /&gt;
&lt;br /&gt;
[[File:WebChat-Emoji-menu.png|link=https://all.docs.genesys.com/File:WebChat-Emoji-menu.png|401x401px]]&lt;br /&gt;
===Differences between v1 and v2===&lt;br /&gt;
&lt;br /&gt;
*v1 shows as a tooltip-style overlay; v2 shows as a new block between the transcript and the message input.&lt;br /&gt;
*v1 closes when you select an emoji or click outside the menu; v2 lets you choose multiple emojis and only closes if you click the emoji menu button again.&lt;br /&gt;
*v1 has three fixed emojis to choose from; v2 can show hundreds of customizable emojis in a grid layout.&lt;br /&gt;
*v1 menu appears in mobile mode; v2 menu is not available in mobile mode (when v2 is configured, no emoji menu button is present in mobile mode).&lt;br /&gt;
*v1 menu has default emojis; v2 menu does not have default emojis. It must be explicitly configured with a list of emojis.&lt;br /&gt;
&lt;br /&gt;
===Configuring the emoji menu===&lt;br /&gt;
Click the emoji menu icon at the bottom-left corner of the WebChat UI to open the v2 emoji menu. The transcript will be resized to fit the emoji menu, which can vary in height depending on the number of emojis configured.&lt;br /&gt;
&lt;br /&gt;
*When 1-8 emojis are configured, the menu has one row, and no scrollbar appears.&lt;br /&gt;
*When 9-16 emojis are configured, the menu has two rows, and no scrollbar appears.&lt;br /&gt;
*When 17-24 emojis are configured, the menu has three rows, and no scrollbar appears.&lt;br /&gt;
*When 25 or more emojis are configured, the menu has three rows, and a scrollbar appears.&lt;br /&gt;
&lt;br /&gt;
[[File:Emoji Menu Resizing.png|776x776px]]&lt;br /&gt;
&lt;br /&gt;
Configure the v2 emoji menu by passing a string containing emoji into the WebChat configuration or through localization.{{NoteFormat|If you define an emoji list in the WebChat configuration, it will override any emoji lists defined in localization files.|1}}You configure the emoji list by specifying a string of emoji characters, like &amp;quot;🤩🤪🤭🤫&amp;quot;. WebChat will parse this string and arrange them in the emoji menu.&amp;lt;source lang=&amp;quot;JAVASCRIPT&amp;quot;&amp;gt;&lt;br /&gt;
// Configure a flat list of emoji characters&lt;br /&gt;
_genesys.widgets.webchat.emojiList = &amp;quot;🤩🤪🤭🤫🤨₿🤮🤯🧐🤬🧡🤟🤲🧠🧒🧑🧔🧓🧕🤱₿🧙🧚🧛🧜🧝🧞🧟🧖🧗🧘🦓🦒🦔🦕🦖🦗🥥🥦🥨🥩🇦🇺🇫🇷🎂🛍🇨🇦🇧🇷🐉🎅🇲🇽🕯🇨🇳🐰🎥🍂👨💪🎓🔥🎃🕎💕🕉🇺🇸👩🎊🏊🏳️‍🌈👑☪🌱☘☀🏈🦃💘👰⛄🎿⚽🌎&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
====Add emoji display names====&lt;br /&gt;
You can also add names to emojis so that their names will appear when you hover over them. To add a name to an emoji, simply add a colon after the question mark symbol, and then type the name. Separate each name with a semicolon.&lt;br /&gt;
&lt;br /&gt;
The format is ;🤩:name;&lt;br /&gt;
&lt;br /&gt;
You can only add one name to an emoji. The following sample shows the format for configuring several emojis.&amp;lt;source lang=&amp;quot;JAVASCRIPT&amp;quot;&amp;gt;&lt;br /&gt;
// Configure an emoji list with emoji names&lt;br /&gt;
_genesys.widgets.webchat.emojiList = &amp;quot;🤩:Star-Struck;🤪:Zany Face;🤭:Face With Hand Over Mouth;🤫:Shushing Face;🤨:Face With Raised Eyebrow;₿:Bitcoin;🤮:Face Vomiting;🤯:Exploding Head;🧐:Face With Monocle;🤬:Face With Symbols on Mouth;🧡:Orange Heart;🤟:Love-You Gesture;🤲:Palms Up Together;🧠:Brain;🧒:Child;🧑:Person;🧔:Man: Beard;🧓:Older Person;🧕:Woman With Headscarf;🤱:Breast-Feeding;🧙:Mage;🧚:Fairy;🧛:Vampire;🧜:Merperson;🧝:Elf;🧞:Genie;🧟:Zombie;🧖:Person in Steamy Room;🧗:Person Climbing;🧘:Person in Lotus Position;🦓:Zebra;🦒:Giraffe;🦔:Hedgehog;🦕:Sauropod;🦖:T-Rex;🦗:Cricket;🥥:Coconut;🥦:Broccoli;🥨:Pretzel;🥩:Cut of Meat;🇦🇺:Australia Day;🇫🇷:Bastille Day;🎂:Birthday;🛍:Black Friday;🇨🇦:Canada Day;🇧🇷:Carnaval;🐉:Chinese New Year;🎅:Christmas;🇲🇽:Cinco de Mayo;🕯:Diwali;🇨🇳:Dragon Boat Festival;🐰:Easter;🎥:Emoji Movie;🍂:Fall / Autumn;👨:Father’s Day;💪:Festivus;🎓:Graduation;🔥:Guy Fawkes;🎃:Halloween;🕎:Hanukkah;💕:Hearts;🕉:Holi;🇺🇸:Independence Day;👩:Mother’s Day;🎊:New Year’s Eve;🏊:Olympics;🏳️‍🌈:Pride;👑:Queen’s Birthday;☪:Ramadan;🌱:Spring;☘:St Patrick’s Day;☀:Summer;🏈:Super Bowl;🦃:Thanksgiving;💘:Valentine’s Day;👰:Wedding / Marriage;⛄:Winter;🎿:Winter Olympics;⚽:World Cup;🌎:World Emoji Day;&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
====Partially named lists====&lt;br /&gt;
You don't have to add names for every emoji. You can add titles to only a select few.&amp;lt;source lang=&amp;quot;JAVASCRIPT&amp;quot;&amp;gt;&lt;br /&gt;
// Configure an emoji list with only a few emoji names&lt;br /&gt;
_genesys.widgets.webchat.emojiList = &amp;quot;🤩🤪🤭🤫🤨₿🤮🤯🧐🤬🧡🤟;🤲:Palms Up Together;🧠🧒🧑🧔🧓🧕🤱₿🧙🧚🧛🧜🧝🧞🧟🧖🧗🧘🦓🦒🦔🦕🦖🦗🥥🥦🥨🥩🇦🇺🇫🇷🎂;🛍:Black Friday;🇨🇦🇧🇷🐉🎅🇲🇽🕯🇨🇳🐰🎥🍂👨💪🎓🔥🎃🕎💕🕉🇺🇸👩🎊🏊🏳️‍🌈👑☪🌱☘☀🏈🦃💘👰;⛄:Snowman;🎿⚽🌎&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
===Localization===&lt;br /&gt;
Emojis can be localized so that each language has a preferred set of emojis and emoji titles.{{NoteFormat|If you define an emoji list in the WebChat configuration, it will override any emoji lists defined in localization files.|1}}The key name for defining an emoji list is &amp;quot;EmojiList&amp;quot;. Emoji lists are defined in a localization file using the same syntax as the WebChat configuration. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;JAVASCRIPT&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;en&amp;quot;: {&lt;br /&gt;
        &amp;quot;webchat&amp;quot;: {&lt;br /&gt;
            &amp;quot;EmojiList&amp;quot;: &amp;quot;🤩:Star-Struck;🤪:Zany Face;🤭:Face With Hand Over Mouth;🤫:Shushing Face;&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
|Status=No&lt;br /&gt;
}}&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Chrissyforrest</name></author>
		
	</entry>
	<entry>
		<id>https://all.docs.genesys.com/index.php?title=WID/Current/SDK/SideBar-combined&amp;diff=69489</id>
		<title>WID/Current/SDK/SideBar-combined</title>
		<link rel="alternate" type="text/html" href="https://all.docs.genesys.com/index.php?title=WID/Current/SDK/SideBar-combined&amp;diff=69489"/>
		<updated>2020-10-26T20:40:58Z</updated>

		<summary type="html">&lt;p&gt;Chrissyforrest: Published&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Article&lt;br /&gt;
|Standalone=No&lt;br /&gt;
|DisplayName=SideBar&lt;br /&gt;
|TocName=SideBar&lt;br /&gt;
|Context=Learn about the Sidebar widget, which customers use to launch other widgets with a single click.&lt;br /&gt;
|ComingSoon=No&lt;br /&gt;
|Platform=GenesysEngage-cloud&lt;br /&gt;
|Role=Developer&lt;br /&gt;
|Section={{Section&lt;br /&gt;
|sectionHeading=Overview&lt;br /&gt;
|anchor=overview&lt;br /&gt;
|alignment=Vertical&lt;br /&gt;
|structuredtext=Use the Sidebar to launch other widgets with a single click. By default, Sidebar is displayed on the right side of the screen, and you can configure any launchable widgets onto Sidebar, including your custom extension widgets. The Sidebar UI expands when you hover your cursor over it, and contracts when you move the cursor away. Other features include configurable positioning and mobile support. You can also add new configurations on the fly, which automatically re-renders the sidebar.&lt;br /&gt;
[[File:Cloud_Sidebar_DesktopLeftPositioned_10032020.png|alt=|left|282x282px]][[File:Cloud_Sidebar_DesktopExpanded_DarkMode_.png|292x292px]]&lt;br /&gt;
===Usage===&lt;br /&gt;
Use the following methods to launch SideBar manually:&lt;br /&gt;
&lt;br /&gt;
*Call the '''SideBar.open''' {{Link-SomewhereInThisVersion|manual=SDK|topic=SideBar-combined|anchor=commands|display text=command}}&lt;br /&gt;
*{{Link-SomewhereInThisVersion|manual=SDK|topic=SideBar-combined|anchor=config|display text=Configure}} Sidebar to show and launch custom widgets.&lt;br /&gt;
&lt;br /&gt;
===Dependency===&lt;br /&gt;
You must configure at least one customer-facing UI widget in order to use the Sidebar Widget.&lt;br /&gt;
===Customization===&lt;br /&gt;
You can customize and {{Link-AnywhereElse|product=WID|version=Current|manual=Developer|topic=GWCInternat|display text=localize}} all of the text shown in the Sidebar Widget by adding entries to your {{Link-SomewhereInThisVersion|manual=SDK|topic=SideBar-combined|anchor=config|display text=configuration}} and {{Link-SomewhereInThisVersion|manual=SDK|topic=SideBar-combined|anchor=localize|display text=localization}} options.&lt;br /&gt;
&lt;br /&gt;
Sidebar supports themes. You can create and register your own themes for Genesys Widgets.&lt;br /&gt;
===Namespace===&lt;br /&gt;
The Sidebar plugin has the following namespaces tied up with each of the following types: &lt;br /&gt;
{{{!}} class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: auto;&amp;quot;&lt;br /&gt;
{{!}}-&lt;br /&gt;
!{{!}}Type&lt;br /&gt;
!{{!}}Namespace&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{!}}{{Link-SomewhereInThisVersion|manual=SDK|topic=SideBar-combined|anchor=config|display text=Configuration}}&lt;br /&gt;
{{!}}{{!}}sidebar&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{!}}i18n—{{Link-SomewhereInThisVersion|manual=SDK|topic=SideBar-combined|anchor=localize|display text=Localization}}&lt;br /&gt;
{{!}}{{!}}sidebar&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{!}}CXBus—{{Link-SomewhereInThisVersion|manual=SDK|topic=SideBar-combined|anchor=commands|display text=API commands}} &amp;amp; {{Link-SomewhereInThisVersion|manual=SDK|topic=SideBar-combined|anchor=events|display text=API events}}&lt;br /&gt;
{{!}}{{!}}SideBar&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{!}}CSS&lt;br /&gt;
{{!}}{{!}}.cx-sidebar&lt;br /&gt;
{{!}}}&lt;br /&gt;
&lt;br /&gt;
===Mobile support===&lt;br /&gt;
Sidebar supports both desktop and mobile devices. In mobile mode, the sidebar launcher button is displayed to the bottom of the screen. When triggered, it expands to the full screen of mobile and shows all channels configured with scrollbar when necessary. Like all Genesys Widgets, there are two main modes: Desktop &amp;amp; Mobile. Desktop is employed for monitors, laptops, and tablets. Mobile is employed for smartphones. When a smartphone is detected, Sidebar switches to special full-screen templates that are optimized for both portrait and landscape orientations. &lt;br /&gt;
&lt;br /&gt;
Switching between desktop and mobile mode is done automatically by default. You may configure Genesys Widgets to switch between Desktop and Mobile mode manually if necessary.&lt;br /&gt;
===Screenshots===&lt;br /&gt;
&lt;br /&gt;
'''Dark theme'''&lt;br /&gt;
&lt;br /&gt;
[[File:Cloud_Sidebar_Desktop_DarkMode_10032020.png|150x150px]]&lt;br /&gt;
[[File:Cloud_Sidebar_DesktopExpanded_DarkMode_10032020.png|150x150px]]&lt;br /&gt;
[[File:M_Cloud_Sidebar_MobilePotrait_DarkMode_10032020.png|150x150px]]&lt;br /&gt;
[[File:M_Cloud_Sidebar_MobileLandscape_DarkMode_10032020.png|150x150px]]&lt;br /&gt;
&lt;br /&gt;
'''Light theme'''&lt;br /&gt;
&lt;br /&gt;
[[File:Cloud_Sidebar_Desktop_LightMode_10032020.png|150x150px]]&lt;br /&gt;
[[File:Cloud_Sidebar_DesktopExpanded_LightMode_10032020_.png|150x150px]]&lt;br /&gt;
[[File:Sidebar MobileNeedHelpLight 28022020.jpg|150x150px]]&lt;br /&gt;
[[File:M_Cloud_Sidebar_MobilePotrait_LightMode_10032020.png|150x150px]]&lt;br /&gt;
[[File:M_Cloud_Sidebar_MobileLandscape_LightMode_10032020.png|150x150px]]&lt;br /&gt;
|Status=No&lt;br /&gt;
}}{{Section&lt;br /&gt;
|sectionHeading=Configuration&lt;br /&gt;
|anchor=config&lt;br /&gt;
|alignment=Vertical&lt;br /&gt;
|structuredtext=SideBar shares the '''_genesys.widgets.sidebar''' configuration namespace. SideBar has UI options to handle its position on the screen, disable expand feature sidebar, hide sidebar, and add new channels on the fly. The display order of channels is based on the order defined in channels configuration array.&lt;br /&gt;
===Example===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
window._genesys.widgets.sidebar = {&lt;br /&gt;
&lt;br /&gt;
	showOnStartup: true,&lt;br /&gt;
&lt;br /&gt;
	position: 'left',&lt;br /&gt;
&lt;br /&gt;
	expandOnHover: true,&lt;br /&gt;
&lt;br /&gt;
	channels: [{&lt;br /&gt;
&lt;br /&gt;
			name: 'ChannelSelector', &lt;br /&gt;
			clickCommand: 'ChannelSelector.open', &lt;br /&gt;
			clickOptions: {}, &lt;br /&gt;
&lt;br /&gt;
			 //use your own static string or i18n query string for the below two display properties&lt;br /&gt;
			displayName: 'Live Assist', &lt;br /&gt;
			displayTitle: 'Get live help',&lt;br /&gt;
&lt;br /&gt;
			icon: 'agent'&lt;br /&gt;
		}, &lt;br /&gt;
&lt;br /&gt;
		{&lt;br /&gt;
			name: 'WebChat' &lt;br /&gt;
		}&lt;br /&gt;
	]&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Options===&lt;br /&gt;
&lt;br /&gt;
{{{!}} class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
{{!}}-&lt;br /&gt;
!{{!}}Name&lt;br /&gt;
!{{!}}Type&lt;br /&gt;
!{{!}}Description&lt;br /&gt;
!{{!}}Default&lt;br /&gt;
!{{!}}Required&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{!}}showOnStartup&lt;br /&gt;
{{!}}{{!}}boolean&lt;br /&gt;
{{!}}{{!}}Shows the sidebar on the screen when Widgets is launched.&lt;br /&gt;
{{!}}{{!}}true&lt;br /&gt;
{{!}}{{!}}false&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{!}}position&lt;br /&gt;
{{!}}{{!}}string&lt;br /&gt;
{{!}}{{!}}Defines the position of sidebar on the screen. Acceptable values are &amp;lt;code&amp;gt;left&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;right&amp;lt;/code&amp;gt;.&lt;br /&gt;
{{!}}{{!}}right&lt;br /&gt;
{{!}}{{!}}false&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{!}}expandOnHover&lt;br /&gt;
{{!}}{{!}}boolean&lt;br /&gt;
{{!}}{{!}}Enables the expand (slide-out) or contract (slide-in) behavior of sidebar.&lt;br /&gt;
{{!}}{{!}}true&lt;br /&gt;
{{!}}{{!}}false&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{!}}channels[index].name&lt;br /&gt;
{{!}}{{!}}string&lt;br /&gt;
{{!}}{{!}}Name of the channel. It can be found in the namespace section documentation of each Widget. Used to identify official channels vs custom channels. If a reserved name is used here, Sidebar will apply default values for that channel. A plugin name defined in the new custom plugin can also be given here. To override the default values or when defining a new custom channel/plugin, use the below following properties.&lt;br /&gt;
{{!}}{{!}}n/a&lt;br /&gt;
{{!}}{{!}}true&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{!}}channels[index].clickCommand&lt;br /&gt;
{{!}}{{!}}string&lt;br /&gt;
{{!}}{{!}}Change the default command that is triggered when clicked.&lt;br /&gt;
{{!}}{{!}}n/a&lt;br /&gt;
{{!}}{{!}}false&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{!}}channels[index].clickOptions&lt;br /&gt;
{{!}}{{!}}object&lt;br /&gt;
{{!}}{{!}}Pass valid command options that are used in above click command execution.&lt;br /&gt;
{{!}}{{!}}n/a&lt;br /&gt;
{{!}}{{!}}n/a&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{!}}channels[index].readyEvent&lt;br /&gt;
{{!}}{{!}}string&lt;br /&gt;
{{!}}{{!}}Subscribes to this ready event published by a plugin.&lt;br /&gt;
{{!}}{{!}}n/a&lt;br /&gt;
{{!}}{{!}}false&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{!}}channels[index].displayName&lt;br /&gt;
{{!}}{{!}}string or i18n query string&lt;br /&gt;
{{!}}{{!}}Change the default display name for this channel with your own static string or to achieve localization, use i18n query string. Syntax: @i18n:&amp;lt;nowiki&amp;gt;&amp;lt;plugin namespace&amp;gt;.&amp;lt;display key&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
{{!}}{{!}}n/a&lt;br /&gt;
{{!}}{{!}}false&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{!}}channels[index].displayTitle&lt;br /&gt;
{{!}}{{!}}string or i18n query string&lt;br /&gt;
{{!}}{{!}}Change the default tooltip content for this channel with your own static string or to achieve localization, use i18n query string. Syntax: @i18n:&amp;lt;nowiki&amp;gt;&amp;lt;plugin namespace&amp;gt;.&amp;lt;display key&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
{{!}}{{!}}n/a&lt;br /&gt;
{{!}}{{!}}false&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{!}}channels[index].icon&lt;br /&gt;
{{!}}{{!}}string&lt;br /&gt;
{{!}}{{!}}Change the default icon for this channel. For the list of icon names see ''Customize icons'' in {{Link-AnywhereElse|product=WID|version=Current|manual=Developer|topic=GWCCustomize}}.&lt;br /&gt;
{{!}}{{!}}n/a&lt;br /&gt;
{{!}}{{!}}false&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{!}}channels[index].onClick&lt;br /&gt;
{{!}}{{!}}function&lt;br /&gt;
{{!}}{{!}}Define a custom onclick function, this overrides clickCommand and clickOptions.&lt;br /&gt;
{{!}}{{!}}n/a&lt;br /&gt;
{{!}}{{!}}false&lt;br /&gt;
{{!}}}&lt;br /&gt;
|Status=No&lt;br /&gt;
}}{{Section&lt;br /&gt;
|sectionHeading=Localization&lt;br /&gt;
|anchor=localize&lt;br /&gt;
|alignment=Vertical&lt;br /&gt;
|structuredtext=For your custom plugins, you can define string key names and values for Name and Title (tooltip) to display on sidebar. The key format requires the plugin name, followed by &amp;quot;Title&amp;quot; or &amp;quot;Name&amp;quot;. For example, a plugin named &amp;quot;MyPlugin&amp;quot; will have keys called &amp;quot;MyPluginName&amp;quot; and &amp;quot;MyPluginTitle&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{{NoteFormat|For information on how to set up localization, refer to {{Link-AnywhereElse|product=WID|version=Current|manual=Developer|topic=GWCInternat|display text=Localize widgets and services}}.|1}}&lt;br /&gt;
===Strings===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;{&lt;br /&gt;
	&amp;quot;SidebarTitle&amp;quot;: &amp;quot;Need help?&amp;quot;,&lt;br /&gt;
	&amp;quot;ChannelSelectorName&amp;quot;: &amp;quot;Live Assistance&amp;quot;,&lt;br /&gt;
	&amp;quot;ChannelSelectorTitle&amp;quot;: &amp;quot;Get assistance from one of our agents right away&amp;quot;,&lt;br /&gt;
	&amp;quot;CallUsName&amp;quot;: &amp;quot;Call Us&amp;quot;,&lt;br /&gt;
	&amp;quot;CallUsTitle&amp;quot;: &amp;quot;Call Us details&amp;quot;,&lt;br /&gt;
	&amp;quot;CallbackName&amp;quot;: &amp;quot;Callback&amp;quot;,&lt;br /&gt;
	&amp;quot;CallbackTitle&amp;quot;: &amp;quot;Receive a Call&amp;quot;,&lt;br /&gt;
	&amp;quot;WebChatName&amp;quot;: &amp;quot;Live Chat&amp;quot;,&lt;br /&gt;
	&amp;quot;WebChatTitle&amp;quot;: &amp;quot;Live Chat&amp;quot;,&lt;br /&gt;
	&amp;quot;AriaClose&amp;quot;: &amp;quot;Close the menu Need help&amp;quot;&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
|Status=No&lt;br /&gt;
}}{{Section&lt;br /&gt;
|sectionHeading=API commands&lt;br /&gt;
|anchor=commands&lt;br /&gt;
|alignment=Vertical&lt;br /&gt;
|structuredtext=Once you've registered your plugin on the bus, you can call commands on other registered plugins. Here's how to use the global bus object to register a new plugin on the bus.&lt;br /&gt;
&lt;br /&gt;
{{NoteFormat|The global bus object is a debugging tool. When implementing Widgets on your own site, do not use the global bus object to register your custom plugins. Instead, see {{Link-AnywhereElse|product=WID|version=Current|manual=SDK|topic=GWCBusExtensions|display text=Genesys Widgets Extensions}} for more information about extending Genesys Widgets.|1}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;var oMyPlugin = window._genesys.widgets.bus.registerPlugin('MyPlugin');&lt;br /&gt;
&lt;br /&gt;
oMyPlugin.command('SideBar.open');&amp;lt;/source&amp;gt;&lt;br /&gt;
===configure===&lt;br /&gt;
Internal use only. The main App plugin shares configuration settings to widgets using each widget’s configure command. Sidebar widget has to be configured at least with one channel. The configure command can also be called at runtime with new configuration, this will override the existing configuration showing new channels on the screens.&lt;br /&gt;
====Example====&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
oMyPlugin.command('SideBar.configure', {&lt;br /&gt;
&lt;br /&gt;
	showOnStartup: false,&lt;br /&gt;
	position: 'left',&lt;br /&gt;
	expandOnHover: false,&lt;br /&gt;
	channels: [&lt;br /&gt;
		{&lt;br /&gt;
			name: 'ChannelSelector',&lt;br /&gt;
			clickCommand: 'ChannelSelector.open',&lt;br /&gt;
			clickOptions: {},&lt;br /&gt;
&lt;br /&gt;
			 //use your own static string or i18n query string for the below two display properties. &lt;br /&gt;
Example for i18n query string: '@i18n:sidebar.ChannelSelectorName' where 'sidebar' refers to plugin namespace and&lt;br /&gt;
ChannelSelectorName' name refers to the property key containing the actual text.&lt;br /&gt;
&lt;br /&gt;
			displayName: '@i18n:sidebar.ChannelSelectorName', &lt;br /&gt;
			displayTitle: 'Get assistance from one of our agents right away', // Your own static string&lt;br /&gt;
			readyEvent: 'ChannelSelector.ready',&lt;br /&gt;
			icon: 'agent',&lt;br /&gt;
			onClick: function($, CXBus, Common) {&lt;br /&gt;
				_genesys.widgets.bus.command('MyPlugin.open');&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
		...&lt;br /&gt;
	]&lt;br /&gt;
&lt;br /&gt;
}).done(function(e){&lt;br /&gt;
&lt;br /&gt;
	// Sidebar configured successfully&lt;br /&gt;
&lt;br /&gt;
}).fail(function(e){&lt;br /&gt;
&lt;br /&gt;
	// Sidebar failed to configure properly&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Options====&lt;br /&gt;
&lt;br /&gt;
{{{!}} class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
{{!}}-&lt;br /&gt;
!{{!}}Option&lt;br /&gt;
!{{!}}Type&lt;br /&gt;
!{{!}}Description&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{!}}showOnStartup&lt;br /&gt;
{{!}}{{!}}boolean&lt;br /&gt;
{{!}}{{!}}Shows the sidebar on the screen when Widgets is launched.&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{!}}position&lt;br /&gt;
{{!}}{{!}}string&lt;br /&gt;
{{!}}{{!}}Defines the position of sidebar on the screen.&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{!}}expandOnHover&lt;br /&gt;
{{!}}{{!}}boolean&lt;br /&gt;
{{!}}{{!}}Enables the expand or contract behavior of sidebar.&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{!}}channels&lt;br /&gt;
{{!}}{{!}}array&lt;br /&gt;
{{!}}{{!}}Array containing each channel configuration object. The order of channels are displayed based on the order defined here.&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{!}}channels[index].name&lt;br /&gt;
{{!}}{{!}}string&lt;br /&gt;
{{!}}{{!}}Name of the channel. It can be found in the namespace section documentation of each Widget. Used to identify official channels vs custom channels. If a reserved name is used here, Sidebar will apply default values for that channel. To override the default values or when defining a new custom channel, use the below following properties.&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{!}}channels[index].clickCommand&lt;br /&gt;
{{!}}{{!}}string&lt;br /&gt;
{{!}}{{!}}Change the default command that is triggered when clicked.&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{!}}channels[index].clickOptions&lt;br /&gt;
{{!}}{{!}}object&lt;br /&gt;
{{!}}{{!}}Pass valid command options that are used in above click command execution.&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{!}}channels[index].displayName&lt;br /&gt;
{{!}}{{!}}string or i18n query string&lt;br /&gt;
{{!}}{{!}}Change the default display name for this channel with your own static string or to achieve localization, use i18n query string. Syntax: @i18n:&amp;lt;nowiki&amp;gt;&amp;lt;plugin namespace&amp;gt;.&amp;lt;display key&amp;gt;&amp;lt;/nowiki&amp;gt;.&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{!}}channels[index].displayTitle&lt;br /&gt;
{{!}}{{!}}string or i18n query string&lt;br /&gt;
{{!}}{{!}}Change the default tooltip content for this channel with your own static string or to achieve localization, use i18n query string. Syntax: @i18n:&amp;lt;nowiki&amp;gt;&amp;lt;plugin namespace&amp;gt;.&amp;lt;display key&amp;gt;&amp;lt;/nowiki&amp;gt;.&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{!}}channels[index].readyEvent&lt;br /&gt;
{{!}}{{!}}string&lt;br /&gt;
{{!}}{{!}}Subscribes to this ready event published by a plugin.&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{!}}channels[index].icon&lt;br /&gt;
{{!}}{{!}}string&lt;br /&gt;
{{!}}{{!}}Change the default Icon for this channel. For the list of Icon names see ''Customize icons'' in {{Link-SomewhereInThisVersion|manual=Developer|topic=GWCCustomize|display text=Customize appearance}}.&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{!}}channels[index].onClick&lt;br /&gt;
{{!}}{{!}}function&lt;br /&gt;
{{!}}{{!}}Define a custom onclick function, this overrides clickCommand and clickOptions.&lt;br /&gt;
{{!}}}&lt;br /&gt;
|Status=No&lt;br /&gt;
}}{{Section&lt;br /&gt;
|sectionHeading=API events&lt;br /&gt;
|anchor=events&lt;br /&gt;
|alignment=Vertical&lt;br /&gt;
|structuredtext=Once you've registered your plugin on the bus, you can subscribe to and listen for published events. Here's how to use the global bus object to register a new plugin on the bus.&lt;br /&gt;
&lt;br /&gt;
{{NoteFormat|The global bus object is a debugging tool. When implementing Widgets on your own site, do not use the global bus object to register your custom plugins. Instead, see {{Link-AnywhereElse|product=WID|version=Current|manual=SDK|topic=GWCBusExtensions|display text=Genesys Widgets Extensions}} for more information about extending Genesys Widgets.|1}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;var oMyPlugin = window._genesys.widgets.bus.registerPlugin('MyPlugin');&lt;br /&gt;
&lt;br /&gt;
oMyPlugin.subscribe('SideBar.ready', function(e){ /* sample code */ });&amp;lt;/source&amp;gt;&lt;br /&gt;
{{{!}} class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
{{!}}-&lt;br /&gt;
!{{!}}Name&lt;br /&gt;
!{{!}}Description&lt;br /&gt;
!{{!}}Data&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{!}}ready&lt;br /&gt;
{{!}}{{!}}Sidebar is initialized and ready to accept commands.&lt;br /&gt;
{{!}}{{!}}n/a&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{!}}opened&lt;br /&gt;
{{!}}{{!}}Sidebar widget has appeared on screen. For desktop it is displayed on the sides of the screen and in mobiles at the bottom corner as a button.&lt;br /&gt;
{{!}}{{!}}n/a&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{!}}closed&lt;br /&gt;
{{!}}{{!}}Sidebar widget has been removed from the screen.&lt;br /&gt;
{{!}}{{!}}n/a&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{!}}expanded&lt;br /&gt;
{{!}}{{!}}Sidebar widget has expanded, showing channel icon and name.&lt;br /&gt;
{{!}}{{!}}n/a&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{!}}contracted&lt;br /&gt;
{{!}}{{!}}Sidebar widget has contracted back, showing channel icons only.&lt;br /&gt;
{{!}}{{!}}n/a&lt;br /&gt;
{{!}}}&lt;br /&gt;
|Status=No&lt;br /&gt;
}}&lt;br /&gt;
}}&lt;br /&gt;
====Resolutions====&lt;br /&gt;
&lt;br /&gt;
{{{!}} class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
{{!}}-&lt;br /&gt;
!{{!}}Status&lt;br /&gt;
!{{!}}When&lt;br /&gt;
!{{!}}Returns&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{!}}resolved&lt;br /&gt;
{{!}}{{!}}When configuration options are provided and set&lt;br /&gt;
{{!}}{{!}}n/a&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{!}}rejected&lt;br /&gt;
{{!}}{{!}}When no configuration options are provided&lt;br /&gt;
{{!}}{{!}}'Invalid configuration. Please ensure at least one channel is configured.'&lt;br /&gt;
{{!}}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===open===&lt;br /&gt;
Opens the Sidebar UI. In Desktop mode, it opens as an actual SideBar and shows the configured channels where as in mobile it opens as a button at the bottom to start.&lt;br /&gt;
====Example====&lt;br /&gt;
&amp;lt;source lang='javascript'&amp;gt;&lt;br /&gt;
oMyPlugin.command('SideBar.open');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Resolutions====&lt;br /&gt;
&lt;br /&gt;
{{{!}} class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
{{!}}-&lt;br /&gt;
!{{!}}Status&lt;br /&gt;
!{{!}}When&lt;br /&gt;
!{{!}}Returns&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{!}}resolved&lt;br /&gt;
{{!}}{{!}}When sidebar is successfully opened&lt;br /&gt;
{{!}}{{!}}n/a&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{!}}rejected&lt;br /&gt;
{{!}}{{!}}When sidebar is already opened&lt;br /&gt;
{{!}}{{!}}'Already opened'&lt;br /&gt;
{{!}}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===close===&lt;br /&gt;
Closes the Sidebar UI.&lt;br /&gt;
====Example====&lt;br /&gt;
&amp;lt;source lang='javascript'&amp;gt;&lt;br /&gt;
oMyPlugin.command('SideBar.close');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Resolutions====&lt;br /&gt;
&lt;br /&gt;
{{{!}} class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
{{!}}-&lt;br /&gt;
!{{!}}Status&lt;br /&gt;
!{{!}}When&lt;br /&gt;
!{{!}}Returns&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{!}}resolved&lt;br /&gt;
{{!}}{{!}}When sidebar is successfully closed&lt;br /&gt;
{{!}}{{!}}n/a&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{!}}rejected&lt;br /&gt;
{{!}}{{!}}When sidebar is already closed&lt;br /&gt;
{{!}}{{!}}'already closed'&lt;br /&gt;
{{!}}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===expand===&lt;br /&gt;
To show more details about the channels, Sidebar slides out from the sides of the screen on desktop machines but expands to full screen in mobile devices.&lt;br /&gt;
====Example====&lt;br /&gt;
&amp;lt;source lang='javascript'&amp;gt;&lt;br /&gt;
oMyPlugin.command('SideBar.expand');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Resolutions====&lt;br /&gt;
&lt;br /&gt;
{{{!}} class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
{{!}}-&lt;br /&gt;
!{{!}}Status&lt;br /&gt;
!{{!}}When&lt;br /&gt;
!{{!}}Returns&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{!}}resolved&lt;br /&gt;
{{!}}{{!}}When sidebar is successfully expanded&lt;br /&gt;
{{!}}{{!}}n/a&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{!}}rejected&lt;br /&gt;
{{!}}{{!}}When sidebar is already expanded&lt;br /&gt;
{{!}}{{!}}'sidebar already expanded'&lt;br /&gt;
{{!}}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===contract===&lt;br /&gt;
Retracts the expanded version of Sidebar, showing only the channel buttons on desktop machines and the sidebar launcher button on mobile devices.&lt;br /&gt;
====Example====&lt;br /&gt;
&amp;lt;source lang='javascript'&amp;gt;&lt;br /&gt;
oMyPlugin.command('SideBar.contract');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Resolutions====&lt;br /&gt;
&lt;br /&gt;
{{{!}} class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
{{!}}-&lt;br /&gt;
!{{!}}Status&lt;br /&gt;
!{{!}}When&lt;br /&gt;
!{{!}}Returns&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{!}}resolved&lt;br /&gt;
{{!}}{{!}}When sidebar is successfully contracted&lt;br /&gt;
{{!}}{{!}}n/a&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{!}}rejected&lt;br /&gt;
{{!}}{{!}}When sidebar is already contracted&lt;br /&gt;
{{!}}{{!}}sidebar already contracted&lt;br /&gt;
{{!}}}&lt;/div&gt;</summary>
		<author><name>Chrissyforrest</name></author>
		
	</entry>
	<entry>
		<id>https://all.docs.genesys.com/index.php?title=WID/Current/SDK/Console-combined&amp;diff=69457</id>
		<title>WID/Current/SDK/Console-combined</title>
		<link rel="alternate" type="text/html" href="https://all.docs.genesys.com/index.php?title=WID/Current/SDK/Console-combined&amp;diff=69457"/>
		<updated>2020-10-26T20:09:08Z</updated>

		<summary type="html">&lt;p&gt;Chrissyforrest: Published&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Article&lt;br /&gt;
|Standalone=No&lt;br /&gt;
|DisplayName=Console&lt;br /&gt;
|TocName=Console&lt;br /&gt;
|Context=Learn how to debug commands and events on the widget bus.&lt;br /&gt;
|ComingSoon=No&lt;br /&gt;
|Platform=GenesysEngage-cloud&lt;br /&gt;
|Role=Developer&lt;br /&gt;
|Section={{Section&lt;br /&gt;
|sectionHeading=Overview&lt;br /&gt;
|anchor=overview&lt;br /&gt;
|alignment=Vertical&lt;br /&gt;
|structuredtext=Use the Console Widget to debug commands and events on the widget bus. You can use dynamically populated lists to test, debug, or demo all commands. You can also create event watch lists that alert you when an event has fired. &lt;br /&gt;
&lt;br /&gt;
[[File:Console_Main.png|500px|Console example]]&lt;br /&gt;
&lt;br /&gt;
Console provides an easy-to-use interface for debugging the widget bus that complements the standard command-line methods. You can drag and drop the console anywhere on your screen, and when you refresh the page or move to another one, Console reappears right where you left it. It is a great tool for getting to know the widget bus, the API for each widget, and debugging issues.&lt;br /&gt;
===Usage===&lt;br /&gt;
Launch WebChat manually by using the following methods:&lt;br /&gt;
&lt;br /&gt;
*Call the '''Console.open''' {{Link-SomewhereInThisVersion|manual=SDK|topic=Console-combined|anchor=commands|display text=command}}&lt;br /&gt;
*Configure the settings to show Console when the browser window is opened.&lt;br /&gt;
*Create your own custom button or link to open Console (using the '''Console.open''' {{Link-SomewhereInThisVersion|manual=SDK|topic=Console-combined|anchor=commands|display text=command}})&lt;br /&gt;
|Status=No&lt;br /&gt;
}}{{Section&lt;br /&gt;
|sectionHeading=Configuration&lt;br /&gt;
|anchor=config&lt;br /&gt;
|alignment=Vertical&lt;br /&gt;
|structuredtext====Description===&lt;br /&gt;
Console option to open on initial loading.&lt;br /&gt;
&lt;br /&gt;
===Example===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
window._genesys.widgets.console = {open: true};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Options===&lt;br /&gt;
&lt;br /&gt;
{{{!}} class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
{{!}}-&lt;br /&gt;
!{{!}}Name&lt;br /&gt;
!{{!}}Type&lt;br /&gt;
!{{!}}Description&lt;br /&gt;
!{{!}}Default&lt;br /&gt;
!{{!}}Required&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{!}}open&lt;br /&gt;
{{!}}{{!}}boolean&lt;br /&gt;
{{!}}{{!}}Set to &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt; for console to open at start.&lt;br /&gt;
{{!}}{{!}}false&lt;br /&gt;
{{!}}{{!}}false&lt;br /&gt;
{{!}}}&lt;br /&gt;
|Status=No&lt;br /&gt;
}}{{Section&lt;br /&gt;
|sectionHeading=Localization&lt;br /&gt;
|anchor=localize&lt;br /&gt;
|alignment=Vertical&lt;br /&gt;
|structuredtext={{NoteFormat|For information on how to set up localization, please refer to {{Link-AnywhereElse|product=WID|version=Current|manual=Developer|topic=GWCInternat}}.|1}}&lt;br /&gt;
==Strings==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;{&lt;br /&gt;
	&amp;quot;ConsoleTitle&amp;quot;: &amp;quot;CXBus Console&amp;quot;,&lt;br /&gt;
	&amp;quot;Commands&amp;quot;: &amp;quot;Commands&amp;quot;,&lt;br /&gt;
	&amp;quot;Plugin&amp;quot;: &amp;quot;Plugin&amp;quot;,&lt;br /&gt;
	&amp;quot;ConsoleErrorButton&amp;quot;: &amp;quot;OK&amp;quot;,&lt;br /&gt;
	&amp;quot;Execute&amp;quot;: &amp;quot;Execute&amp;quot;,&lt;br /&gt;
	&amp;quot;Event&amp;quot;: &amp;quot;Event&amp;quot;,&lt;br /&gt;
	&amp;quot;SubscribeTo&amp;quot;: &amp;quot;Subscribe to&amp;quot;,&lt;br /&gt;
	&amp;quot;Unsubscribe&amp;quot;: &amp;quot;Unsubscribe&amp;quot;,&lt;br /&gt;
	&amp;quot;ReturnData&amp;quot;: &amp;quot;Return Data&amp;quot;,&lt;br /&gt;
	&amp;quot;EventsSubscriber&amp;quot;: &amp;quot;Events Subscriber&amp;quot;,&lt;br /&gt;
	&amp;quot;Watch&amp;quot;: &amp;quot;Watch&amp;quot;,&lt;br /&gt;
	&amp;quot;pluginNameEvent&amp;quot;: &amp;quot;PluginName.Event&amp;quot;,&lt;br /&gt;
	&amp;quot;ClearAll&amp;quot;: &amp;quot;Clear All&amp;quot;,&lt;br /&gt;
	&amp;quot;OptionsSample&amp;quot;: &amp;quot;JSON Formatted Options {'option': value}&amp;quot;&lt;br /&gt;
}&amp;lt;/source&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
|Status=No&lt;br /&gt;
}}{{Section&lt;br /&gt;
|sectionHeading=API commands&lt;br /&gt;
|anchor=commands&lt;br /&gt;
|alignment=Vertical&lt;br /&gt;
|structuredtext=Once you've registered your plugin on the bus, you can call commands on other registered plugins. Here's how to use the global bus object to register a new plugin on the bus.&lt;br /&gt;
&lt;br /&gt;
{{NoteFormat|The global bus object is a debugging tool. When implementing Widgets on your own site, do not use the global bus object to register your custom plugins. Instead, see {{Link-AnywhereElse|product=WID|version=Current|manual=SDK|topic=GWCBusExtensions|display text=Genesys Widgets Extensions}} for more information about extending Genesys Widgets.|1}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;var oMyPlugin = window._genesys.widgets.bus.registerPlugin('MyPlugin');&lt;br /&gt;
&lt;br /&gt;
oMyPlugin.command('Console.open');&amp;lt;/source&amp;gt;&lt;br /&gt;
===open===&lt;br /&gt;
Opens the Console UI.&lt;br /&gt;
====Example====&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
oMyPlugin.command('Console.open').done(function(e){&lt;br /&gt;
&lt;br /&gt;
	// Console opened successfully&lt;br /&gt;
&lt;br /&gt;
}).fail(function(e){&lt;br /&gt;
&lt;br /&gt;
	// Console failed to open&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Resolutions====&lt;br /&gt;
&lt;br /&gt;
{{{!}} class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
{{!}}-&lt;br /&gt;
!{{!}}Status&lt;br /&gt;
!{{!}}When&lt;br /&gt;
!{{!}}Returns&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{!}}resolved&lt;br /&gt;
{{!}}{{!}}Console is successfully opened&lt;br /&gt;
{{!}}{{!}}n/a&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{!}}rejected&lt;br /&gt;
{{!}}{{!}}Console is already open&lt;br /&gt;
{{!}}{{!}}'Already opened'&lt;br /&gt;
{{!}}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===close===&lt;br /&gt;
Closes the Console UI.&lt;br /&gt;
====Example====&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
oMyPlugin.command('Console.close').done(function(e){&lt;br /&gt;
&lt;br /&gt;
	// Console closed successfully&lt;br /&gt;
&lt;br /&gt;
}).fail(function(e){&lt;br /&gt;
&lt;br /&gt;
	// Console failed to close&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Resolutions====&lt;br /&gt;
&lt;br /&gt;
{{{!}} class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
{{!}}-&lt;br /&gt;
!{{!}}Status&lt;br /&gt;
!{{!}}When&lt;br /&gt;
!{{!}}Returns&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{!}}resolved&lt;br /&gt;
{{!}}{{!}}Console successfully closed&lt;br /&gt;
{{!}}{{!}}n/a&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{!}}rejected&lt;br /&gt;
{{!}}{{!}}Console is already closed&lt;br /&gt;
{{!}}{{!}}'Already closed'&lt;br /&gt;
{{!}}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===configure===&lt;br /&gt;
Modifies the Console configuration options. See the Console configuration page.&lt;br /&gt;
====Example====&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
oMyPlugin.command('Console.configure', {&lt;br /&gt;
&lt;br /&gt;
	open: false&lt;br /&gt;
&lt;br /&gt;
}).done(function(e){&lt;br /&gt;
&lt;br /&gt;
	// Console configured successfully&lt;br /&gt;
&lt;br /&gt;
}).fail(function(e){&lt;br /&gt;
&lt;br /&gt;
	// Console failed to configure&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Options====&lt;br /&gt;
&lt;br /&gt;
{{{!}} class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
{{!}}-&lt;br /&gt;
!{{!}}Option&lt;br /&gt;
!{{!}}Type&lt;br /&gt;
!{{!}}Description&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{!}}open&lt;br /&gt;
{{!}}{{!}}boolean&lt;br /&gt;
{{!}}{{!}}If setting is open: true, the console will automatically be open when Widgets is launched and the console is ready.&lt;br /&gt;
{{!}}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Resolutions====&lt;br /&gt;
&lt;br /&gt;
{{{!}} class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
{{!}}-&lt;br /&gt;
!{{!}}Status&lt;br /&gt;
!{{!}}When&lt;br /&gt;
!{{!}}Returns&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{!}}resolved&lt;br /&gt;
{{!}}{{!}}Console configuration is provided&lt;br /&gt;
{{!}}{{!}}n/a&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{!}}rejected&lt;br /&gt;
{{!}}{{!}}No configuration is provided&lt;br /&gt;
{{!}}{{!}}'Invalid Configuration'&lt;br /&gt;
{{!}}}&lt;br /&gt;
|Status=No&lt;br /&gt;
}}{{Section&lt;br /&gt;
|sectionHeading=API events&lt;br /&gt;
|anchor=events&lt;br /&gt;
|alignment=Vertical&lt;br /&gt;
|structuredtext=Once you've registered your plugin on the bus, you can subscribe to and listen for published events. Here's how to use the global bus object to register a new plugin on the bus.&lt;br /&gt;
&lt;br /&gt;
{{NoteFormat|The global bus object is a debugging tool. When implementing Widgets on your own site, do not use the global bus object to register your custom plugins. Instead, see {{Link-AnywhereElse|product=WID|version=Current|manual=SDK|topic=GWCBusExtensions|display text=Genesys Widgets Extensions}} for more information about extending Genesys Widgets.|1}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;var oMyPlugin = window._genesys.widgets.bus.registerPlugin('MyPlugin');&lt;br /&gt;
&lt;br /&gt;
oMyPlugin.subscribe('Console.ready', function(e){});&amp;lt;/source&amp;gt;&lt;br /&gt;
{{{!}} class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
{{!}}-&lt;br /&gt;
!{{!}}Name&lt;br /&gt;
!{{!}}Description&lt;br /&gt;
!{{!}}Data&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{!}}ready&lt;br /&gt;
{{!}}{{!}}Console is initialized and ready to accept commands.&lt;br /&gt;
{{!}}{{!}}n/a&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{!}}opened&lt;br /&gt;
{{!}}{{!}}The Console Widget has appeared on screen.&lt;br /&gt;
{{!}}{{!}}n/a&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{!}}closed&lt;br /&gt;
{{!}}{{!}}The Console Widget has been removed from the screen.&lt;br /&gt;
{{!}}{{!}}n/a&lt;br /&gt;
{{!}}}&lt;br /&gt;
|Status=No&lt;br /&gt;
}}&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Chrissyforrest</name></author>
		
	</entry>
	<entry>
		<id>https://all.docs.genesys.com/index.php?title=WID/Current/SDK/ChannelSelector-combined&amp;diff=69453</id>
		<title>WID/Current/SDK/ChannelSelector-combined</title>
		<link rel="alternate" type="text/html" href="https://all.docs.genesys.com/index.php?title=WID/Current/SDK/ChannelSelector-combined&amp;diff=69453"/>
		<updated>2020-10-26T19:51:43Z</updated>

		<summary type="html">&lt;p&gt;Chrissyforrest: Published&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Article&lt;br /&gt;
|Standalone=No&lt;br /&gt;
|DisplayName=ChannelSelector&lt;br /&gt;
|TocName=ChannelSelector&lt;br /&gt;
|Context=Learn how to provide your customers with a configurable list of channels as an entry point for contacting customer service.&lt;br /&gt;
|ComingSoon=No&lt;br /&gt;
|Platform=GenesysEngage-cloud&lt;br /&gt;
|Role=Developer&lt;br /&gt;
|Section={{Section&lt;br /&gt;
|sectionHeading=Overview&lt;br /&gt;
|alignment=Vertical&lt;br /&gt;
|structuredtext=The ChannelSelector Widget displays a configurable list of channels, as an entry point for customers to contact customer service. In addition to showing multiple channels, ChannelSelector can be configured to display the estimated wait time (EWT) for each channel. You can also use an EWT value to configure channels to hide, or to show, that they disabled. Channels are not limited to Genesys Widgets; you can add your own custom channels to launch applications or open new windows as necessary. &lt;br /&gt;
&lt;br /&gt;
[[File:Live assistance channels pec.png|455x455px]]&lt;br /&gt;
&lt;br /&gt;
Note the screenshots in the following section, and visit the {{Link-SomewhereInThisVersion|manual=SDK|topic=ChannelSelector-combined|anchor=config|display text=configuration}} section for more information.&lt;br /&gt;
===Usage===&lt;br /&gt;
Use the following methods to launch ChannelSelector manually:&lt;br /&gt;
&lt;br /&gt;
*Call the '''ChannelSelector.open''' {{Link-SomewhereInThisVersion|manual=SDK|topic=ChannelSelector-combined|anchor=commands|display text=command}}&lt;br /&gt;
*Create your own custom button or link to open ChannelSelector (using the &amp;quot;ChannelSelector.open&amp;quot; command)&lt;br /&gt;
&lt;br /&gt;
{{NoteFormat|By default ChannelSelector has no channels configured. The UI will appear empty if not configured. See the {{Link-SomewhereInThisVersion|manual=SDK|topic=ChannelSelector-combined|anchor=config|display text=configuration}} section for examples and information on how to set up your own custom channels. |}}&lt;br /&gt;
&lt;br /&gt;
===Customization===&lt;br /&gt;
You can customize and {{Link-AnywhereElse|product=WID|version=Current|manual=Developer|topic=GWCInternat|display text=localize}} all of the static text shown in the ChannelSelector Widget by adding entries into your {{Link-SomewhereInThisVersion|manual=SDK|topic=ChannelSelector-combined|anchor=config|display text=configuration}} and {{Link-SomewhereInThisVersion|manual=SDK|topic=ChannelSelector-combined|anchor=localize|display text=localization}} options. &lt;br /&gt;
&lt;br /&gt;
ChannelSelector supports Themes. You can create and register your own themes for Genesys Widgets.&lt;br /&gt;
===Namespace===&lt;br /&gt;
The Channel Selector plugin has the following namespaces tied to each of the following types:&lt;br /&gt;
{{{!}} class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: auto;&amp;quot;&lt;br /&gt;
{{!}}-&lt;br /&gt;
!{{!}}Type&lt;br /&gt;
!{{!}}Namespace&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{!}}{{Link-SomewhereInThisVersion|manual=SDK|topic=ChannelSelector-combined|anchor=config|display text=Configuration}}&lt;br /&gt;
{{!}}{{!}}channelselector&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{!}}i18n—{{Link-SomewhereInThisVersion|manual=SDK|topic=ChannelSelector-combined|anchor=localize|display text=Localization}}&lt;br /&gt;
{{!}}{{!}}channelselector&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{!}}CXBus—{{Link-SomewhereInThisVersion|manual=SDK|topic=ChannelSelector-combined|anchor=commands|display text=API commands}} &amp;amp; {{Link-SomewhereInThisVersion|manual=SDK|topic=ChannelSelector-combined|anchor=events|display text=API events}}&lt;br /&gt;
{{!}}{{!}}ChannelSelector&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{!}}CSS&lt;br /&gt;
{{!}}{{!}}.cx-channel-selector&lt;br /&gt;
{{!}}}&lt;br /&gt;
&lt;br /&gt;
===Mobile support===&lt;br /&gt;
ChannelSelector supports both desktop and mobile devices. Like all Genesys Widgets, there are two main modes: Desktop and Mobile. Desktop is employed for monitors, laptops, and tablets. Mobile is employed for smartphones. When a smartphone is detected, ChannelSelector switches to special full-screen templates that are optimized for both portrait and landscape orientations. &lt;br /&gt;
&lt;br /&gt;
Switching between Desktop and Mobile modes is done automatically by default. You may configure Genesys Widgets to switch between Desktop and Mobile modes manually if necessary. &lt;br /&gt;
===Screenshots===&lt;br /&gt;
'''Dark theme'''&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:GEC_CS_MaxUnAvl_dark_MobileLandscape.png|173x173px]]&lt;br /&gt;
[[File:GEC_CS_MaxUnAvl_dark.png|150x150px]]&lt;br /&gt;
[[File:GEC_CS_Avl_dark_MobileLandscape.png|176x176px]]&lt;br /&gt;
[[File:GEC_CS_Avl_dark.png|150x150px]]&lt;br /&gt;
[[File:GEC_CS_MaxUnAvl_dark_MobilePortrait.png|150x150px]]&lt;br /&gt;
[[File:GEC_CS_Min_dark.png|150x150px]]&lt;br /&gt;
[[File:GEC_CS_Avl_dark_MobilePortrait.png|150x150px]]&lt;br /&gt;
[[File:GEC_CS_Min_dark_MobileLandscape.png|181x181px]]&lt;br /&gt;
[[File:GEC_CS_Min_dark_MobilePortrait.png|150x150px]]&lt;br /&gt;
[[File:GEC_CS_Max_dark_MobileLandscape.png|186x186px]]&lt;br /&gt;
[[File:GEC_CS_Max_dark_MobilePortrait.png|150x150px]]&lt;br /&gt;
&lt;br /&gt;
'''Light theme'''&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:GEC CS Avl light MobilePortrait.png|170x170px]]&lt;br /&gt;
[[File:GEC_CS_Avl_light_MobileLandscape.png|188x188px]]&lt;br /&gt;
[[File:GEC_CS_Avl_light.png|155x155px]]&lt;br /&gt;
[[File:GEC_CS_Max_light_MobileLandscape.png|181x181px]]&lt;br /&gt;
[[File:GEC_CS_MaxUnAvl_light_MobileLandscape.png|189x189px]]&lt;br /&gt;
[[File:GEC_CS_Min_light.png|166x166px]]&lt;br /&gt;
[[File:GEC_CS_Min_light_MobileLandscape.png|183x183px]]&lt;br /&gt;
[[File:GEC_CS_MaxUnAvl_light.png|161x161px]]&lt;br /&gt;
[[File:GEC_CS_Max_light_MobilePortrait.png|150x150px]]&lt;br /&gt;
[[File:GEC_CS_MaxUnAvl_light_MobilePortrait.png|150x150px]]&lt;br /&gt;
[[File:GEC_CS_Min_light_MobilePortrait.png|150x150px]]&lt;br /&gt;
|Status=No&lt;br /&gt;
}}{{Section&lt;br /&gt;
|sectionHeading=Configuration&lt;br /&gt;
|anchor=config&lt;br /&gt;
|alignment=Vertical&lt;br /&gt;
|structuredtext=ChannelSelector shares the '''_genesys.widgets.channelselector''' configuration namespace. ChannelSelector has UI options to enable and disable channels, hide channels, add new channels, and display estimated wait time (EWT) details. All the channels are displayed based on the array of objects order defined in the channel's configuration. To hide a particular channel, simply remove the corresponding array object.&lt;br /&gt;
&lt;br /&gt;
{{NoteFormat|EWT can only be configured for WebChat, Callback, ClickToCall, and CallUs channels. It may not be applicable for other channels. If configured for the Send Message channel, it will always be shown as available regardless of any EWT value.|}}&lt;br /&gt;
&lt;br /&gt;
==Example==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
 window._genesys.widgets.channelselector = {&lt;br /&gt;
 &lt;br /&gt;
 	ewtRefreshInterval: 10,&lt;br /&gt;
 &lt;br /&gt;
 	channels: [{&lt;br /&gt;
 &lt;br /&gt;
 		enable: true, &lt;br /&gt;
 		clickCommand: 'CallUs.open', &lt;br /&gt;
 		displayName: 'Call Us', &lt;br /&gt;
 		i18n: 'CallusTitle', &lt;br /&gt;
 		icon: 'call-outgoing', &lt;br /&gt;
 		html: '&amp;lt;img src='http://placehold.it/100x100'&amp;gt;', &lt;br /&gt;
 		ewt: {&lt;br /&gt;
 			display: true, &lt;br /&gt;
 			queue: 'callus_ewt_test_eservices', &lt;br /&gt;
 			availabilityThresholdMin: 300, &lt;br /&gt;
 			availabilityThresholdMax: 480, &lt;br /&gt;
 			hideChannelWhenThresholdMax: false&lt;br /&gt;
 			}&lt;br /&gt;
 		}, &lt;br /&gt;
 &lt;br /&gt;
 		{&lt;br /&gt;
 		enable: true, &lt;br /&gt;
 		clickCommand: 'WebChat.open', &lt;br /&gt;
 		displayName: 'Web Chat', &lt;br /&gt;
 		i18n: 'ChatTitle', &lt;br /&gt;
 		icon: 'chat', &lt;br /&gt;
 		html: '', &lt;br /&gt;
 		ewt: {&lt;br /&gt;
 			display: true, &lt;br /&gt;
 			queue: 'chat_ewt_test_eservices', &lt;br /&gt;
 			availabilityThresholdMin: 300, &lt;br /&gt;
 			availabilityThresholdMax: 480, &lt;br /&gt;
 			hideChannelWhenThresholdMax: false&lt;br /&gt;
 			} &lt;br /&gt;
 		}, &lt;br /&gt;
 &lt;br /&gt;
 		{&lt;br /&gt;
 		enable: true, &lt;br /&gt;
 		clickCommand: 'Callback.open', &lt;br /&gt;
 		displayName: 'Receive a Call', &lt;br /&gt;
 		i18n: 'CallbackTitle', &lt;br /&gt;
 		icon: 'call-incoming', &lt;br /&gt;
 		html: '', &lt;br /&gt;
 		ewt: {&lt;br /&gt;
 			display: true, &lt;br /&gt;
 			queue: 'callback_ewt_test_eservices', &lt;br /&gt;
 			availabilityThresholdMin: 300, &lt;br /&gt;
 			availabilityThresholdMax: 480, &lt;br /&gt;
 			hideChannelWhenThresholdMax: false&lt;br /&gt;
 			}&lt;br /&gt;
 		}, &lt;br /&gt;
 &lt;br /&gt;
 	 };&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
===Options===&lt;br /&gt;
{{{!}} class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
{{!}}-&lt;br /&gt;
!{{!}}Name&lt;br /&gt;
!{{!}}Type&lt;br /&gt;
!{{!}}Description&lt;br /&gt;
!{{!}}Default&lt;br /&gt;
!{{!}}Required&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{!}}ewtRefreshInterval&lt;br /&gt;
{{!}}{{!}}number&lt;br /&gt;
{{!}}{{!}}EWT is updated for every time interval (seconds) defined here.&lt;br /&gt;
{{!}}{{!}}10&lt;br /&gt;
{{!}}{{!}}n/a&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{!}}channels[].enable&lt;br /&gt;
{{!}}{{!}}boolean&lt;br /&gt;
{{!}}{{!}}Enable/disable a channel.&lt;br /&gt;
{{!}}{{!}}true&lt;br /&gt;
{{!}}{{!}}n/a&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{!}}channels[].clickCommand&lt;br /&gt;
{{!}}{{!}}string&lt;br /&gt;
{{!}}{{!}}The CXBus command name for opening a particular Widget when this channel is clicked.&lt;br /&gt;
{{!}}{{!}}none&lt;br /&gt;
{{!}}{{!}}Always&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{!}}channels[].displayName&lt;br /&gt;
{{!}}{{!}}string&lt;br /&gt;
{{!}}{{!}}A channel name to display on ChannelSelector Widget.&lt;br /&gt;
{{!}}{{!}}none&lt;br /&gt;
{{!}}{{!}}Always&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{!}}channels[].i18n&lt;br /&gt;
{{!}}{{!}}string&lt;br /&gt;
{{!}}{{!}}To support localization of the channel display name, this takes a key parameter of the channelselector section in the language pack file. Overrides above displayName.&lt;br /&gt;
{{!}}{{!}}none&lt;br /&gt;
{{!}}{{!}}n/a&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{!}}channels[].icon&lt;br /&gt;
{{!}}{{!}}string&lt;br /&gt;
{{!}}{{!}}Select from one of the Genesys Widgets icons by specifying icon css class name.&lt;br /&gt;
{{!}}{{!}}none&lt;br /&gt;
{{!}}{{!}}Always&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{!}}channels[].html&lt;br /&gt;
{{!}}{{!}}string&lt;br /&gt;
{{!}}{{!}}Overrides and replaces the icon section of a channel with the html (image tag) defined here.&lt;br /&gt;
{{!}}{{!}}none&lt;br /&gt;
{{!}}{{!}}n/a&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{!}}channels[].ewt.display&lt;br /&gt;
{{!}}{{!}}boolean&lt;br /&gt;
{{!}}{{!}}To display EWT details.&lt;br /&gt;
{{!}}{{!}}true&lt;br /&gt;
{{!}}{{!}}n/a&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{!}}channels[].ewt.queue&lt;br /&gt;
{{!}}{{!}}string&lt;br /&gt;
{{!}}{{!}}EWT service channel virtual queue.&lt;br /&gt;
{{!}}{{!}}none&lt;br /&gt;
{{!}}{{!}}Always&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{!}}channels[].ewt.availabilityThresholdMin&lt;br /&gt;
{{!}}{{!}}number (seconds)&lt;br /&gt;
{{!}}{{!}}If EWT is greater than 0 minutes and less than this minimum threshold value (in minutes), then the EWT is shown with a yellow warning icon. {{NoteFormat|Comparison is made after converting the threshold value in seconds to minutes.|}}&lt;br /&gt;
{{!}}{{!}}300&lt;br /&gt;
{{!}}{{!}}n/a&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{!}}channels[].ewt.availabilityThresholdMax&lt;br /&gt;
{{!}}{{!}}number (seconds)&lt;br /&gt;
{{!}}{{!}}If EWT is greater than this minimum threshold value (in minutes) and less than the maximum threshold value (in minutes), then the EWT is shown with a red alert icon.{{NoteFormat|Comparison is made after converting the threshold value in seconds to minutes.|}}&lt;br /&gt;
{{!}}{{!}}480&lt;br /&gt;
{{!}}{{!}}n/a&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{!}}channels[].ewt.hideChannelWhenThresholdMax&lt;br /&gt;
{{!}}{{!}}boolean&lt;br /&gt;
{{!}}{{!}}Hides this channel when EWT is greater than the maximum threshold value.&lt;br /&gt;
{{!}}{{!}}true&lt;br /&gt;
{{!}}{{!}}n/a&lt;br /&gt;
{{!}}}&lt;br /&gt;
|Status=No&lt;br /&gt;
}}{{Section&lt;br /&gt;
|sectionHeading=Localization&lt;br /&gt;
|anchor=localize&lt;br /&gt;
|alignment=Vertical&lt;br /&gt;
|structuredtext={{NoteFormat|For information on how to set up localization, refer to {{Link-AnywhereElse|product=WID|version=Current|manual=Developer|topic=GWCInternat|display text=Localize widgets and services}}.|1}}&lt;br /&gt;
===Usage===&lt;br /&gt;
Use the '''channelselector''' namespace when you define localization strings for the ChannelSelector plugin in your i18n JSON file.&lt;br /&gt;
&lt;br /&gt;
The following example shows how to define new strings for the '''en''' (English) language. You can use any language codes you wish; there is no standard format. When selecting the active language in your configuration, you must match one of the language codes defined in your i18n JSON file. You must only define a language code once in your i18n JSON file. Inside each language object you must define new strings for each Widget.&lt;br /&gt;
===Example i18n JSON===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;{&lt;br /&gt;
	&amp;quot;en&amp;quot;: {&lt;br /&gt;
		&amp;quot;channelselector&amp;quot;: {&lt;br /&gt;
			&amp;quot;Title&amp;quot;: &amp;quot;Live Assistance&amp;quot;,&lt;br /&gt;
			&amp;quot;SubTitle&amp;quot;: &amp;quot;How would you like to get in touch?&amp;quot;,&lt;br /&gt;
			&amp;quot;WaitTimeTitle&amp;quot;: &amp;quot;Wait Time&amp;quot;,&lt;br /&gt;
			&amp;quot;AvailableTitle&amp;quot;: &amp;quot;Available&amp;quot;,&lt;br /&gt;
			&amp;quot;AriaAvailableTitle&amp;quot;: &amp;quot;Available&amp;quot;,&lt;br /&gt;
			&amp;quot;UnavailableTitle&amp;quot;: &amp;quot;Unavailable&amp;quot;,&lt;br /&gt;
			&amp;quot;CallbackTitle&amp;quot;: &amp;quot;Receive a Call&amp;quot;,&lt;br /&gt;
			&amp;quot;AriaClose&amp;quot;: &amp;quot;Live Assistance Close&amp;quot;,&lt;br /&gt;
			&amp;quot;AriaWarning&amp;quot;: &amp;quot;Warning&amp;quot;,&lt;br /&gt;
			&amp;quot;AriaAlert&amp;quot;: &amp;quot;Alert&amp;quot;,&lt;br /&gt;
			&amp;quot;minute&amp;quot;: &amp;quot;min&amp;quot;,&lt;br /&gt;
			&amp;quot;minutes&amp;quot;: &amp;quot;mins&amp;quot;,&lt;br /&gt;
			&amp;quot;AriaWindowLabel&amp;quot;: &amp;quot;Live Assistance Window&amp;quot;&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
|Status=No&lt;br /&gt;
}}{{Section&lt;br /&gt;
|sectionHeading=API commands&lt;br /&gt;
|anchor=commands&lt;br /&gt;
|alignment=Vertical&lt;br /&gt;
|structuredtext=Once you've registered your plugin on the bus, you can call commands on other registered plugins. Here's how to use the global bus object to register a new plugin on the bus.&lt;br /&gt;
&lt;br /&gt;
{{NoteFormat|The global bus object is a debugging tool. When implementing Widgets on your own site, do not use the global bus object to register your custom plugins. Instead, see {{Link-AnywhereElse|product=WID|version=Current|manual=SDK|topic=GWCBusExtensions|display text=Genesys Widgets Extensions}} for more information about extending Genesys Widgets.|1}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;var oMyPlugin = window._genesys.widgets.bus.registerPlugin('MyPlugin');&lt;br /&gt;
&lt;br /&gt;
oMyPlugin.command('ChannelSelector.open');&amp;lt;/source&amp;gt;&lt;br /&gt;
===close===&lt;br /&gt;
Closes the ChannelSelector UI.&lt;br /&gt;
====Example====&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
oMyPlugin.command('ChannelSelector.close').done(function(e){&lt;br /&gt;
&lt;br /&gt;
	// ChannelSelector closed successfully&lt;br /&gt;
&lt;br /&gt;
}).fail(function(e){&lt;br /&gt;
&lt;br /&gt;
	// ChannelSelector failed to close&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Resolutions====&lt;br /&gt;
&lt;br /&gt;
{{{!}} class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
{{!}}-&lt;br /&gt;
!{{!}}Status&lt;br /&gt;
!{{!}}When&lt;br /&gt;
!{{!}}Returns&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{!}}resolved&lt;br /&gt;
{{!}}{{!}}ChannelSelector is successfully closed&lt;br /&gt;
{{!}}{{!}}n/a&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{!}}rejected&lt;br /&gt;
{{!}}{{!}}ChannelSelector is already closed&lt;br /&gt;
{{!}}{{!}}Already closed&lt;br /&gt;
{{!}}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===open===&lt;br /&gt;
Opens the ChannelSelector UI.&lt;br /&gt;
====Example====&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
oMyPlugin.command('ChannelSelector.open').done(function(e){&lt;br /&gt;
&lt;br /&gt;
	// ChannelSelector opened successfully&lt;br /&gt;
&lt;br /&gt;
}).fail(function(e){&lt;br /&gt;
&lt;br /&gt;
	// ChannelSelector failed to open&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Resolutions====&lt;br /&gt;
&lt;br /&gt;
{{{!}} class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
{{!}}-&lt;br /&gt;
!{{!}}Status&lt;br /&gt;
!{{!}}When&lt;br /&gt;
!{{!}}Returns&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{!}}resolved&lt;br /&gt;
{{!}}{{!}}ChannelSelector Widget is successfully opened&lt;br /&gt;
{{!}}{{!}}n/a&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{!}}rejected&lt;br /&gt;
{{!}}{{!}}ChannelSelector Widget is already open&lt;br /&gt;
{{!}}{{!}}'Already open'&lt;br /&gt;
{{!}}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===configure===&lt;br /&gt;
Modifies the ChannelSelector configuration.&lt;br /&gt;
====Example====&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
oMyPlugin.command('ChannelSelector.configure', {&lt;br /&gt;
&lt;br /&gt;
	channels: [&lt;br /&gt;
		{&lt;br /&gt;
			enabled: true,&lt;br /&gt;
			clickCommand: 'CallUs.open',&lt;br /&gt;
			readyEvent: 'CallUs.ready',&lt;br /&gt;
			displayName: 'Call Us',&lt;br /&gt;
			i18n: 'CallusTitle',&lt;br /&gt;
			icon: 'call-outgoing',&lt;br /&gt;
			html:  '',&lt;br /&gt;
			ewt:{&lt;br /&gt;
&lt;br /&gt;
				display: true,&lt;br /&gt;
				queue:'chat_ewt_test_eservices',&lt;br /&gt;
				availabilityThresholdMin:60,&lt;br /&gt;
				availabilityThresholdMax:600&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
	]&lt;br /&gt;
&lt;br /&gt;
}).done(function(e){&lt;br /&gt;
&lt;br /&gt;
	// ChannelSelector configured successfully&lt;br /&gt;
&lt;br /&gt;
}).fail(function(e){&lt;br /&gt;
&lt;br /&gt;
	// ChannelSelector failed to configure&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Options====&lt;br /&gt;
&lt;br /&gt;
{{{!}} class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
{{!}}-&lt;br /&gt;
!{{!}}Option&lt;br /&gt;
!{{!}}Type&lt;br /&gt;
!{{!}}Description&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{!}}ewtRefreshInterval&lt;br /&gt;
{{!}}{{!}}number&lt;br /&gt;
{{!}}{{!}}EWT is updated for every time interval (seconds) is defined.&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{!}}channels&lt;br /&gt;
{{!}}{{!}}array&lt;br /&gt;
{{!}}{{!}}Array containing each channel configuration object. The order of channels is displayed based on the order defined here.&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{!}}channels[].enable&lt;br /&gt;
{{!}}{{!}}boolean&lt;br /&gt;
{{!}}{{!}}Enable/disable chat channel.&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{!}}channels[].clickCommand&lt;br /&gt;
{{!}}{{!}}string&lt;br /&gt;
{{!}}{{!}}The CXBus command name for opening a particular Widget when this channel is clicked.&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{!}}channels[].readyEvent&lt;br /&gt;
{{!}}{{!}}string&lt;br /&gt;
{{!}}{{!}}Subscribes to this ready event published by a plugin and enables the channel when that plugin is ready.&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{!}}channels[].displayName&lt;br /&gt;
{{!}}{{!}}string&lt;br /&gt;
{{!}}{{!}}A channel name to display in the ChannelSelector Widget.&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{!}}channels[].i18n&lt;br /&gt;
{{!}}{{!}}string&lt;br /&gt;
{{!}}{{!}}To support localization of channel display name, this takes a key parameter of the channelselector section in the language pack file. Overrides above displayName.&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{!}}channels[].icon&lt;br /&gt;
{{!}}{{!}}string&lt;br /&gt;
{{!}}{{!}}Select from one of the Genesys Widgets icons by specifying icon css class name.&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{!}}channels[].html&lt;br /&gt;
{{!}}{{!}}string&lt;br /&gt;
{{!}}{{!}}Overrides and replaces the icon section of a channel with the html (image tag) defined here.&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{!}}channels[].ewt.display&lt;br /&gt;
{{!}}{{!}}boolean&lt;br /&gt;
{{!}}{{!}}To display EWT details.&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{!}}channels[].ewt.queue&lt;br /&gt;
{{!}}{{!}}string&lt;br /&gt;
{{!}}{{!}}EWT service channel virtual queue name.&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{!}}channels[].ewt.availabilityThresholdMin&lt;br /&gt;
{{!}}{{!}}number (seconds)&lt;br /&gt;
{{!}}{{!}}If EWT is greater than 0 minutes and less than this minimum threshold value (in minutes), then the EWT is shown with a yellow warning icon.&lt;br /&gt;
 Note: Comparison is made after converting the threshold&lt;br /&gt;
 value in seconds to minutes.&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{!}}channels[].ewt.availabilityThresholdMax&lt;br /&gt;
{{!}}{{!}}number (seconds)&lt;br /&gt;
{{!}}{{!}}If EWT is greater than this minimum threshold value (in minutes) and less than the maximum threshold value (in minutes), then the EWT is shown with a red alert icon.&lt;br /&gt;
 Note: Comparison is made after converting the threshold&lt;br /&gt;
 value in seconds to minutes.&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{!}}channels[].ewt.hideChannelWhenThresholdMax&lt;br /&gt;
{{!}}{{!}}boolean&lt;br /&gt;
{{!}}{{!}}Hides this channel when EWT is greater than the maximum threshold value.&lt;br /&gt;
{{!}}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Resolutions====&lt;br /&gt;
&lt;br /&gt;
{{{!}} class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
{{!}}-&lt;br /&gt;
!{{!}}Status&lt;br /&gt;
!{{!}}When&lt;br /&gt;
!{{!}}Returns&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{!}}resolved&lt;br /&gt;
{{!}}{{!}}Configuration options are provided and set&lt;br /&gt;
{{!}}{{!}}n/a&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{!}}rejected&lt;br /&gt;
{{!}}{{!}}No configuration options are provided&lt;br /&gt;
{{!}}{{!}}'Invalid configuration'&lt;br /&gt;
{{!}}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===displayStats===&lt;br /&gt;
Displays estimated wait time (EWT) and availability details for each channel.&lt;br /&gt;
====Example====&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
oMyPlugin.command('ChannelSelector.displayStats').done(function(e){&lt;br /&gt;
&lt;br /&gt;
	// ChannelSelector displayed stats successfully&lt;br /&gt;
&lt;br /&gt;
}).fail(function(e){&lt;br /&gt;
&lt;br /&gt;
	// ChannelSelector failed to display stats&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Resolutions====&lt;br /&gt;
&lt;br /&gt;
{{{!}} class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
{{!}}-&lt;br /&gt;
!{{!}}Status&lt;br /&gt;
!{{!}}When&lt;br /&gt;
!{{!}}Returns&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{!}}resolved&lt;br /&gt;
{{!}}{{!}}EWT is displayed successfully&lt;br /&gt;
{{!}}{{!}}n/a&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{!}}rejected&lt;br /&gt;
{{!}}{{!}}StatsService fails to retrieve EWT data&lt;br /&gt;
{{!}}{{!}}'Unable to display EWT Stats in ChannelSelector'&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{!}}rejected&lt;br /&gt;
{{!}}{{!}}enableEwt config is disabled or when required channel plugins are not ready&lt;br /&gt;
{{!}}{{!}}'Either EWT config is disabled or plugins not yet ready'&lt;br /&gt;
{{!}}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===disableStats===&lt;br /&gt;
Clears the UI of any EWT. Disables EWT fetching for the defined time interval.&lt;br /&gt;
====Example====&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
oMyPlugin.command('ChannelSelector.disableStats').done(function(e){&lt;br /&gt;
&lt;br /&gt;
	// ChannelSelector disabled stats successfully&lt;br /&gt;
&lt;br /&gt;
}).fail(function(e){&lt;br /&gt;
&lt;br /&gt;
	// ChannelSelector failed to disable stats&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Resolutions====&lt;br /&gt;
&lt;br /&gt;
{{{!}} class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
{{!}}-&lt;br /&gt;
!{{!}}Status&lt;br /&gt;
!{{!}}When&lt;br /&gt;
!{{!}}Returns&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{!}}resolved&lt;br /&gt;
{{!}}{{!}}ChannelSelector Widget is successfully opened&lt;br /&gt;
{{!}}{{!}}n/a&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{!}}rejected&lt;br /&gt;
{{!}}{{!}}ChannelSelector Widget is not opened&lt;br /&gt;
{{!}}{{!}}'ChannelSelector not opened to disable stats details'&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{!}}rejected&lt;br /&gt;
{{!}}{{!}}EWT is disabled for all channels&lt;br /&gt;
{{!}}{{!}}'Stats already disabled'&lt;br /&gt;
{{!}}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===enableStats===&lt;br /&gt;
Displays EWT and availability details in the UI. Enables fetching EWT for the defined time interval.&lt;br /&gt;
====Example====&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
oMyPlugin.command('ChannelSelector.enableStats').done(function(e){&lt;br /&gt;
&lt;br /&gt;
	// ChannelSelector enabled stats successfully&lt;br /&gt;
&lt;br /&gt;
}).fail(function(e){&lt;br /&gt;
&lt;br /&gt;
	// ChannelSelector failed to enable stats&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Resolutions====&lt;br /&gt;
&lt;br /&gt;
{{{!}} class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
{{!}}-&lt;br /&gt;
!{{!}}Status&lt;br /&gt;
!{{!}}When&lt;br /&gt;
!{{!}}Returns&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{!}}resolved&lt;br /&gt;
{{!}}{{!}}ChannelSelector Widget is successfully opened&lt;br /&gt;
{{!}}{{!}}n/a&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{!}}rejected&lt;br /&gt;
{{!}}{{!}}EWT details are already displayed&lt;br /&gt;
{{!}}{{!}}'Stats already enabled'&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{!}}rejected&lt;br /&gt;
{{!}}{{!}}ChannelSelector Widget is not opened&lt;br /&gt;
{{!}}{{!}}'ChannelSelector not opened to enable stats details'&lt;br /&gt;
{{!}}}&lt;br /&gt;
|Status=No&lt;br /&gt;
}}{{Section&lt;br /&gt;
|sectionHeading=API events&lt;br /&gt;
|anchor=events&lt;br /&gt;
|alignment=Vertical&lt;br /&gt;
|structuredtext=Once you've registered your plugin on the bus, you can subscribe to and listen for published events. Here's how to use the global bus object to register a new plugin on the bus.&lt;br /&gt;
&lt;br /&gt;
{{NoteFormat|The global bus object is a debugging tool. When implementing Widgets on your own site, do not use the global bus object to register your custom plugins. Instead, see {{Link-AnywhereElse|product=WID|version=Current|manual=SDK|topic=GWCBusExtensions|display text=Genesys Widgets Extensions}} for more information about extending Genesys Widgets.|1}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;var oMyPlugin = window._genesys.widgets.bus.registerPlugin('MyPlugin');&lt;br /&gt;
&lt;br /&gt;
oMyPlugin.subscribe('ChannelSelector.ready', function(e){});&amp;lt;/source&amp;gt;&lt;br /&gt;
{{{!}} class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
{{!}}-&lt;br /&gt;
!{{!}}Name&lt;br /&gt;
!{{!}}Description&lt;br /&gt;
!{{!}}Data&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{!}}ready&lt;br /&gt;
{{!}}{{!}}ChannelSelector plugin is initialized and ready to accept commands&lt;br /&gt;
{{!}}{{!}}n/a&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{!}}opened&lt;br /&gt;
{{!}}{{!}}ChannelSelector Widget has appeared on screen&lt;br /&gt;
{{!}}{{!}}n/a&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}{{!}}closed&lt;br /&gt;
{{!}}{{!}}ChannelSelector Widget has been removed from the screen&lt;br /&gt;
{{!}}{{!}}n/a&lt;br /&gt;
{{!}}}&lt;br /&gt;
|Status=No&lt;br /&gt;
}}&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Chrissyforrest</name></author>
		
	</entry>
</feed>