Difference between revisions of "DES/Current/Designer/Blocks"

From Genesys Documentation
Jump to: navigation, search
m (Text replacement - "\|Platform=([^\|]*)GenesysEngage-onpremises([\|]*)" to "|Platform=$1GenesysEngage-cloud$2")
(Published)
 
(11 intermediate revisions by 2 users not shown)
Line 1: Line 1:
 
{{Article
 
{{Article
 
|Standalone=No
 
|Standalone=No
|DisplayName=Using Blocks
+
|DisplayName=Using the blocks
|TocName=Using Blocks
+
|TocName=Using the blocks
|Context=Learn how to add blocks to the different {{Link-SomewhereInThisVersion|manual=Designer|topic=ApplicationPhases|display text=application phases}}.
+
|Context=Learn how functional blocks are used to build Designer applications.
 
|ComingSoon=No
 
|ComingSoon=No
 
|Platform=GenesysEngage-cloud
 
|Platform=GenesysEngage-cloud
 
|Role=Administrator
 
|Role=Administrator
 
|Application=Designer
 
|Application=Designer
|Prereq=
 
 
|Section={{Section
 
|Section={{Section
|sectionHeading=Build Logic
+
|sectionHeading=Build logic
|anchor=BuildLogic
+
|anchor=logic
 
|alignment=Vertical
 
|alignment=Vertical
|Media=
+
|structuredtext=The '''Palette''' contains all of the blocks that you can use in Designer. They are organized into groups according to their type of function. For example, the '''Routing''' section contains blocks related to routing functionality:
|image=
+
 
|structuredtext====Using the Palette===
+
[[File:des_palette_routing.png]]
The blocks are grouped into various {{Link-SomewhereInThisVersion|manual=Designer|topic=Blocks|display text=categories|anchor=BlockCat}} on the '''Palette'''. For example, here is the '''Routing''' blocks section of the palette:
+
 
 +
These pages contain more information about the blocks in each category:
 +
 
 +
*{{Link-SomewhereInThisManual|topic=LogicCtrlBlocks|anchor=top|display text=Logic and Control blocks}} add logical functions to applications, such as assigning variables, changing languages, or directing the application to other blocks.
 +
*{{Link-SomewhereInThisManual|topic=UserIntBlocks|anchor=top|display text=User Interaction blocks}} interact with callers in various ways, such as offering them a list of menu options or invoking a voice or chat bot.
 +
*{{Link-SomewhereInThisManual|topic=BusinessCtrlBlocks|anchor=top|display text=Business Control blocks }} control various operational aspects of your site, such as establishing and checking your hours of operation.
 +
*{{Link-SomewhereInThisManual|topic=RoutingBlocks|anchor=top|display text=Routing blocks}} specify how an interaction should be directed when certain conditions are met, such as transferring a customer to an agent.
 +
*{{Link-SomewhereInThisManual|topic=DataBlocks|anchor=top|display text=Data blocks}} manage various data-handling functions.
 +
*{{Link-SomewhereInThisManual|topic=ExtServBlocks|anchor=top|display text=External Services blocks}} manage how an application taps into an external service.
 +
*{{Link-SomewhereInThisManual|topic=ReportingBlocks|anchor=top|display text=Reporting blocks}} manage certain reporting functions within an application, such as starting or stopping an activity or indicating the progress of an application.
 +
*{{Link-SomewhereInThisManual|topic=CallbackBlocks|anchor=top|display text=Callback blocks}} manage how Designer interacts with Genesys Callback services.
 +
*{{Link-SomewhereInThisManual|topic=SurveyBlocks|anchor=top|display text=Survey blocks}} enable you to set up and offer surveys to customers.
  
[[File:des_palette_routing.png]]
 
  
 
You can drag any block from the '''Palette''' into the '''Application Flow''' and place it under the phase in which you want it to execute. If the block can be used in that phase, a placeholder block appears and you can drop the block to place it in that phase.
 
You can drag any block from the '''Palette''' into the '''Application Flow''' and place it under the phase in which you want it to execute. If the block can be used in that phase, a placeholder block appears and you can drop the block to place it in that phase.
Line 68: Line 77:
  
 
[[File:des_appflow_actions_showids.png]]
 
[[File:des_appflow_actions_showids.png]]
{{AnchorDiv|searching}}
+
===Limiting Application Indentation===
===Searching the application flow===
+
Although Designer allows you to use several levels of indentation, you might not be able to access the block properties element if you have more than 10 levels of indentation.
To search the blocks in the application flow, select '''Search''' from the '''Actions''' menu.  
+
 
 +
To prevent your application from becoming too deeply indented, use {{Link-SomewhereInThisManual|topic=Menu|anchor=top|display text=Menu}} and {{Link-SomewhereInThisManual|topic=Segmentation|anchor=top|display text=Segmentation}} blocks to jump to specific points in the application. This takes control back to the main ''trunk'' and prevents the application from being too indented and difficult to understand. '''Menu''' and '''Segmentation''' blocks that do not terminate the application within a reasonable depth should include a {{Link-SomewhereInThisManual|topic=GoTo|anchor=top|display text=Go To}} block to jump to a different part of the application.
 +
 
 +
{{NoteFormat|In certain cases, you might need to skip over certain parts of the main application. In these cases, use a '''Go To''' block to forward processing to the correct block in the application.}}
 +
|Status=No
 +
}}{{Section
 +
|sectionHeading=Search tools
 +
|anchor=searching
 +
|alignment=Vertical
 +
|structuredtext=To search the blocks in the application flow, select '''Search''' from the '''Actions''' menu.
  
 
The search box appears in the main navigation bar and you can start typing the search term you are looking for. As you type, the items on the page are filtered to show only those items that match the text you've entered. The results are highlighted in the application flow, and you can use the up/down buttons to jump to the next or previous result.
 
The search box appears in the main navigation bar and you can start typing the search term you are looking for. As you type, the items on the page are filtered to show only those items that match the text you've entered. The results are highlighted in the application flow, and you can use the up/down buttons to jump to the next or previous result.
  
If you click the '''More Options''' button, you can also select the '''Search by Block ID''' or '''Enable Deep Search''' options.  
+
If you click the '''More Options''' button, you can also select the '''Search by Block ID''' or '''Enable Deep Search''' options.
  
[[file:des_search_more_options.png]]
+
[[file:des_search_more_options.png|link=https://all.docs.genesys.com/File:Des_search_more_options.png]]
  
 
'''Search by Block ID''' can be useful if a particular block ID is flagged by Designer Analytics as having an issue. You can toggle the block IDs to be visible in the application flow and then use this search option to quickly locate the block in question.
 
'''Search by Block ID''' can be useful if a particular block ID is flagged by Designer Analytics as having an issue. You can toggle the block IDs to be visible in the application flow and then use this search option to quickly locate the block in question.
Line 82: Line 100:
 
The '''Enable Deep Search''' option enables you to search the entire application flow for a specific value or property.  For example, you might search for blocks that contain a certain virtual queue.
 
The '''Enable Deep Search''' option enables you to search the entire application flow for a specific value or property.  For example, you might search for blocks that contain a certain virtual queue.
  
For more about the search tools available in Designer, watch this video:
+
This video describes the search tools available in Designer:
 
 
{{#widget:Vimeo|id=321848592|width=500}}
 
 
 
===Limiting Application Indentation===
 
Although Designer allows you to use several levels of indentation, you might not be able to access the block properties element if you have more than 10 levels of indentation.
 
 
 
To prevent your application from becoming too deeply indented, use {{Link-SomewhereInThisManual|topic=Menu|anchor=top|display text=Menu}} and {{Link-SomewhereInThisManual|topic=Segmentation|anchor=top|display text=Segmentation}} blocks to jump to specific points in the application. This takes control back to the main ''trunk'' and prevents the application from being too indented and difficult to understand. '''Menu''' and '''Segmentation''' blocks that do not terminate the application within a reasonable depth should include a {{Link-SomewhereInThisManual|topic=GoTo|anchor=top|display text=Go To}} block to jump to a different part of the application.
 
  
{{NoteFormat|In certain cases, you might need to skip over certain parts of the main application. In these cases, use a '''Go To''' block to forward processing to the correct block in the application.}}
+
{{Video|id=321848592|width=500|Description=Designer search tools}}
|structuredtextwide=
 
|FAQHeading=
 
 
|Status=No
 
|Status=No
 
}}{{Section
 
}}{{Section
Line 99: Line 108:
 
|anchor=ECMAScriptExpressions
 
|anchor=ECMAScriptExpressions
 
|alignment=Vertical
 
|alignment=Vertical
|Media=
 
|image=
 
 
|structuredtext=Some block properties accept ECMAScript expressions that are executed by the application at runtime. This allows the application to perform dynamic operations, such as calling an ECMAScript function or combining the values of other variables.
 
|structuredtext=Some block properties accept ECMAScript expressions that are executed by the application at runtime. This allows the application to perform dynamic operations, such as calling an ECMAScript function or combining the values of other variables.
  
In general, block properties do not support ECMAScript expressions unless otherwise stated. If ECMAScript expressions are not supported, you must enter a value (a string that is taken as a literal). This value is not evaluated at runtime. For example, in the {{Link-SomewhereInThisManual|topic=PlayMessage|anchor=top|display text=Play Message block}}, the value of a TTS prompt is taken as a literal string.
+
For information about using ECMAScript in Designer, see {{Link-SomewhereInThisVersion|manual=Designer|topic=ECMAScript}}.
 +
|Status=No
 +
}}{{Section
 +
|sectionHeading=Busy Treatments
 +
|anchor=treatments
 +
|alignment=Vertical
 +
|structuredtext=A busy treatment is a special form of handling that occurs while a customer is waiting to be connected with an agent. For example, music can be played for callers or chat participants can be provided with regular updates about their estimated wait times.
 +
 
 +
Certain blocks allow you to specify audio files, messages, or self-service type {{Link-SomewhereInThisManual|topic=SharedModulesBar|anchor=top|display text=shared modules}} as busy treatments. When planning to add a busy treatment to your application, keep in mind that the interaction might be routed immediately or take a very long time. In certain scenarios, you might prefer to use a Shared Module instead of a Play Message block, as you can configure the module to adjust (or skip) the busy treatment messages depending on the Estimated Wait Time (see an {{Link-SomewhereInThisVersion|manual=Designer|topic=Blocks|anchor=sharedmod|display text=example}}).  
  
===Supported Properties===
+
===Routing blocks===
The following lists blocks properties that support ECMAScript expressions:
+
The {{Link-SomewhereInThisManual|topic=RouteCall|anchor=top|display text=Route Call}}, {{Link-SomewhereInThisVersion|manual=Designer|topic=Route|display text=Route Digital}}, and {{Link-SomewhereInThisManual|topic=RouteAgent|anchor=top|display text=Route Agent}} blocks have a '''Treatments''' tab where you can specify a busy treatment. 
  
*{{Link-SomewhereInThisVersion|manual=Designer|topic=Blocks|anchor=init|display text=Initialize phase}} - User Variables
+
If you choose to add an audio-based or text message treatment, a {{Link-SomewhereInThisManual|topic=PlayMessage|anchor=top|display text=Play Message}} block is automatically nested below the routing block. Use this block to select and configure the message options.
*{{Link-SomewhereInThisManual|topic=Activity|anchor=top|display text=Activity block}} - Values in key-value pairs
+
 
*{{Link-SomewhereInThisManual|topic=AssignVar|anchor=top|display text=Assign block}} - Assignments
+
{{NoteFormat|If multiple consecutive '''Play Message''' blocks are added beneath a routing block as treatments, Designer considers them as one single treatment.}}  
*{{Link-SomewhereInThisManual|topic=DataTable|anchor=top|display text=Data Table block}} - Lookup Key
 
*{{Link-SomewhereInThisManual|topic=Menu|anchor=Configuring_Menu_Option_Blocks|display text=Menu Option block}} - Set Variables
 
*{{Link-SomewhereInThisManual|topic=Milestone|anchor=top|display text=Milestone block}} - Values in key-value pairs
 
*{{Link-SomewhereInThisManual|topic=Return|anchor=top|display text=Return block}} - Assigning values to output variables
 
*{{Link-SomewhereInThisManual|topic=SharedMod|anchor=top|display text=Shared Module block}} - Assigning values to input variables
 
  
===Tips===
+
If you choose to add a module-based treatment, a {{Link-SomewhereInThisManual|topic=SharedMod|anchor=top|display text=Shared Module}} block is automatically nested below the routing block. Use this block to select the shared module that will be used as a busy treatment. Note that you can only select a Self Service shared module.
  
*See [http://www.ecmascript.org/docs.php ECMAScript Documentation] for more information on using ECMAScript expressions.
+
On the {{Link-SomewhereInThisVersion|manual=Designer|topic=Route|display text=Route Digital}} block, you can add a chat treatment. This automatically adds a nested {{Link-SomewhereInThisVersion|manual=Designer|topic=ChatMessage|display text=Chat Message}} block below the routing block. You can then use the block properties to set the treatment.
  
*Strings must be quoted. For example, <tt>'hello'</tt> is a string, whereas <tt>hello</tt> is a reference to a variable called '''hello'''.
+
Busy treatments defined in routing blocks will loop automatically until a certain condition is met &ndash; such as the call is routed, the customer disconnects, or the timeout specified in the routing block expires &ndash; at which point the next block in the application is triggered.
  
*Single quotes (<tt>'</tt>) are recommended, as opposed to double quotes (<tt>"</tt>).
+
{{NoteFormat|
 +
* When routing chat interactions, Designer waits for 100 milliseconds before starting busy treatments for chats (i.e. in-queue messages). This significantly improves the accuracy of Estimated Wait Time (EWT) and Position in Queue (PIQ) values that are typically used by these messages when providing updates to customers, but may also result in the application not sending busy treatment chat messages if routing completes almost immediately (i.e. within 100 ms).
 +
* After a busy treatment has been executed at least 10 times, Designer exits the routing block and moves to the next block if the average duration of the treatment is less than 1000 ms (for example, due to a missing audio file).}}
  
*When specifying an object in JSON notation, surround the JSON with parentheses. For example: <tt>({'abc': 'def'})</tt>.
+
===Start Treatment block===
 +
The {{Link-SomewhereInThisManual|topic=StartTreatment|anchor=top|display text=Start Treatment}} block also lets you specify a busy treatment, but it works a bit differently than the treatments used in the routing blocks.  
  
===Examples===
+
Typically, you would use this block in the Assisted Service phase when you want to start a busy treatment &mdash; for example, play an audio file to customers while they wait to speak with an agent &mdash; and then move on to the routing blocks, all without interrupting the playback to the customer.
Below are examples of how you might use an ECMAScript expression in a Designer application.
 
  
====Building a Dynamic TTS Prompt====
+
Things to keep in mind when using this option:
You can use the {{Link-SomewhereInThisManual|topic=AssignVar|anchor=top|display text=Assign block}} to concatenate a string to be spoken by the application. The expression below reads the caller's phone number or ID.
 
  
<tt>'You are calling from ' + ANI</tt>
+
*Don't define any additional treatments in the routing blocks that directly follow the '''Start Treatment''' block. You want the audio started by the '''Start Treatment''' block to continue playing while the routing blocks do their job. If a routing block starts another treatment, the treatment that is playing stops.
  
====Control the Application Flow====
+
*The selected '''Self Service Shared Module''' will continue to loop until a new treatment is started, the interaction is routed or terminated, or the Assisted Service phase in which the '''Start Treatment''' block was started is exited.
A {{Link-SomewhereInThisManual|topic=Segmentation|anchor=top|display text=Segmentation block}} can take ECMAScript expressions that evaluate to a Boolean value, and thus control the flow of the application. For example, you might want to inform your customers about upcoming seasonal events and you need a way to determine the current season and whether the event is occurring within the coming week. The expression below determines whether the call was received within seven days of the event, and whether the current season is summer or autumn.  
 
  
<tt>numDays > 7 && (isSummer {{!}} {{!}} isAutumn)</tt>
+
{{AnchorDiv|sharedmod}}
|structuredtextwide=
+
===Example of a Shared Module treatment===
|FAQHeading=
+
A potential use case is to execute a shared module based on a specified set of conditions that can change over time and respond to external factors. For example, you might use a shared module that can play one announcement for callers if the estimated wait time (EWT) is beyond a certain threshold, and another announcement for when they are the next caller in the queue.  
|Status=No
 
}}{{Section
 
|sectionHeading=ECMAScript User Functions
 
|anchor=ecmaFunctions
 
|alignment=Vertical
 
|Media=
 
|image=
 
|structuredtext=Designer also has built-in ECMAScripts that you can invoke from a Designer application, such as from an {{Link-SomewhereInThisManual|topic=AssignVar|anchor=top|display text=Assign}} or {{Link-SomewhereInThisManual|topic=Segmentation|anchor=top|display text=Segmentation}} block, to perform certain functions at runtime.  
 
  
===isDataTableValueValid===
+
To set up this feature:
  
You can use this function to determine if a value returned from a data table query is valid. For example, you might use the following function in an {{Link-SomewhereInThisManual|topic=AssignVar|anchor=top|display text=Assign}} block:
+
<ol>
 +
<li>In the application, create a user variable, <tt>ewt</tt>, and set its default value to <tt>0</tt>.</li>
  
<tt>isDataTableValueValid(''value'', ''datatype'')</tt>
+
<li>Create a '''Self Service''' type shared module.</li>
  
This function has two arguments:
+
<li>In the shared module, create a user variable, <tt>ewt</tt>, and set its default value to <tt>0</tt>.</li>
  
*''value'' is a single value returned from a data table query
+
[[File:des_routecall_treatments6.png]]
*''datatype'' is the data type of the data table column, such as 'string', 'boolean', 'integer', 'announcement', or 'numeric' (this argument is optional)
 
  
 +
<li>In the '''Self Service''' phase of the shared module, add a '''Segmentation''' block. Add the conditions as shown below:</li>
  
If the data table value is valid, the script returns <tt>true</tt>. Here is a list of values that this function can return:
+
[[File:des_routecall_treatments3.png]]
  
*<tt>isDataTableValueValid(varStr, 'string')</tt> on a valid (or empty) string returns <tt>true</tt>. Anything else returns <tt>false</tt>.
+
<li>Add two '''Play Message''' blocks as child blocks of the condition blocks, and add an '''Assign Variables''' block at the end. Your shared module should appear as shown below:</li>
*<tt>isDataTableValueValid(varNum, 'numeric')</tt> on a valid number or <tt>0</tt> returns <tt>true</tt>. Anything else returns <tt>false</tt>.
 
*<tt>isDataTableValueValid(varNum, 'integer')</tt> on a valid integer or <tt>0</tt> returns <tt>true</tt>. Anything else returns <tt>false</tt>.
 
*<tt>isDataTableValueValid(varBool, 'boolean')</tt> on <tt>true</tt> or <tt>false</tt> returns <tt>true</tt>. Anything else returns <tt>false</tt>.
 
*<tt>isDataTableValueValid(varAudio, 'announcement')</tt> on a valid (or null) announcement returns <tt>true</tt>. Anything else returns <tt>false</tt>.
 
|structuredtextwide=
 
|FAQHeading=
 
|Status=No
 
}}{{Section
 
|sectionHeading=Busy Treatments
 
|anchor=treatments
 
|alignment=Vertical
 
|Media=
 
|image=
 
|structuredtext=A busy treatment is a special form of voice call handling that tells Designer what to do while a caller is waiting for their call to be connected with an agent. For example, you can play music for callers or provide them with updates about their estimated wait times.
 
  
Certain blocks allow you to specify audio files or self-service type {{Link-SomewhereInThisManual|topic=SharedModulesBar|anchor=top|display text=shared modules}} as busy treatments.
+
[[File:des_routecall_treatments1.png]]
  
===Route Call and Route Agent blocks===
+
<li>Configure the first '''Play Message''' block. An example is below:</li>
The {{Link-SomewhereInThisManual|topic=RouteCall|anchor=top|display text=Route Call}} and {{Link-SomewhereInThisManual|topic=RouteAgent|anchor=top|display text=Route Agent}} blocks both have a '''Treatments''' tab where you can specify an audio file or a shared module as a busy treatment.  
 
  
If you choose to add an audio-based treatment, a {{Link-SomewhereInThisManual|topic=PlayMessage|anchor=top|display text=Play Message}} block is automatically nested below the routing block. Use this block to select and configure the audio options.
+
[[File:des_routecall_treatments4.png]]
  
{{NoteFormat|If multiple consecutive '''Play Message''' blocks are added beneath a routing block as treatments, Designer considers them as one single treatment.}}
+
<li>Configure the second '''Play Message''' block. An example is below:</li>
  
If you choose to add a module-based treatment, a {{Link-SomewhereInThisManual|topic=SharedMod|anchor=top|display text=Shared Module}} block is automatically nested below the routing block. Use this block to select the shared module that will be used as a busy treatment. Note that you can only select a Self Service shared module.
+
[[File:des_routecall_treatments5.png]]
  
Busy treatments defined in routing blocks will loop automatically until a certain condition is met &ndash; such as the call is routed, the caller hangs up, or the timeout specified in the routing block expires &ndash; at which point the next block in the application is triggered.
+
<li>Configure the '''Assign Variables''' block as shown below:</li>
  
{{NoteFormat|After a busy treatment has been executed at least 10 times, Designer exits the routing block and moves to the next block if the average duration of the treatment is less than 1000 ms (for example, due to a missing audio file).}}
+
[[File:des_routecall_treatments2.png]]
  
===Start Treatment block===
+
<li>In your application, select the '''Route Call''' block and click the '''Treatments''' tab.</li>
The {{Link-SomewhereInThisManual|topic=StartTreatment|anchor=top|display text=Start Treatment}} block also lets you specify a busy treatment, but it works a bit differently than the treatments used in the routing blocks.  
 
  
Typically, you would use this block in the Assisted Service phase when you want to start a busy treatment &mdash; for example, play an audio file to callers while they wait to speak with an agent &mdash; and then move on to the routing blocks, all without interrupting the playback to the caller.
+
<li>Click '''Add Module'''. A child '''Shared Module''' block appears beneath the '''Route Call''' block.</li>
  
Things to keep in mind when using this option:
+
<li>In the child '''Shared Module''' block, select the shared module that you created in Step 2.</li>
  
*'''Don't define any additional treatments in the routing blocks that directly follow the Start Treatment block.'''
+
</ol>
*:You want the audio started by the '''Start Treatment''' block to continue playing while the routing blocks do their job. If a routing block starts another treatment, the treatment that is playing stops.
 
  
*'''The Start Treatment block does not loop a module automatically.'''  
+
The application passes '''ewt''' to the shared module, along with the system variables, which includes '''EWT'''. The shared module compares '''ewt''' and '''EWT''' in the '''Segmentation''' block and executes a '''Play Message''' block, depending on which variable is larger. At the end, the shared module sets '''ewt''' to '''EWT''' before returning to the application.
*:If you want to set up looping, you might need to use a {{Link-SomewhereInThisManual|topic=GoTo|anchor=top|display text=GoTo}} block in the module or find another way to loop it back. For example, you might add additional logic in the module to detect which mode it is being used in. This will expose an input parameter that controls whether the module loops internally or not. Or, you could clone the module and have a different looping logic defined in the cloned module. (However, take note that this option creates copies of the same logical module and might make maintenance more difficult.)
 
|structuredtextwide=
 
|FAQHeading=
 
 
|Status=No
 
|Status=No
 
}}{{Section
 
}}{{Section
Line 214: Line 197:
 
|anchor=validation
 
|anchor=validation
 
|alignment=Vertical
 
|alignment=Vertical
|Media=
 
|image=
 
 
|structuredtext=Designer enforces a drag-and-drop policy to ensure that you can only place blocks into applicable phases. In rare scenarios, a block might be placed in an invalid phase. In these cases, the validation process that occurs after you click '''Publish''' will report this failure with an error that includes the blocks placed into invalid phases.
 
|structuredtext=Designer enforces a drag-and-drop policy to ensure that you can only place blocks into applicable phases. In rare scenarios, a block might be placed in an invalid phase. In these cases, the validation process that occurs after you click '''Publish''' will report this failure with an error that includes the blocks placed into invalid phases.
  
Line 233: Line 214:
 
{{NoteFormat|When nesting blocks, Genesys recommends that you do not go beyond ten (10) levels. Otherwise, you will receive a validation warning.|2}}
 
{{NoteFormat|When nesting blocks, Genesys recommends that you do not go beyond ten (10) levels. Otherwise, you will receive a validation warning.|2}}
 
</onlyinclude>
 
</onlyinclude>
|structuredtextwide=
 
|FAQHeading=
 
|Status=No
 
}}{{Section
 
|sectionHeading=Block Categories
 
|anchor=BlockCat
 
|alignment=Vertical
 
|Media=
 
|image=
 
|structuredtext=The blocks are grouped into the following categories:
 
 
*{{Link-SomewhereInThisManual|topic=LogicCtrlBlocks|anchor=top|display text=Logic and Control Blocks}}
 
*{{Link-SomewhereInThisManual|topic=UserIntBlocks|anchor=top|display text=User Interaction Blocks}}
 
*{{Link-SomewhereInThisManual|topic=BusinessCtrlBlocks|anchor=top|display text=Business Control Blocks}}
 
*{{Link-SomewhereInThisManual|topic=RoutingBlocks|anchor=top|display text=Routing Blocks}}
 
*{{Link-SomewhereInThisManual|topic=DataBlocks|anchor=top|display text=Data Blocks}}
 
*{{Link-SomewhereInThisManual|topic=ExtServBlocks|anchor=top|display text=External Services Blocks}}
 
*{{Link-SomewhereInThisManual|topic=ReportingBlocks|anchor=top|display text=Reporting Blocks}}
 
*{{Link-SomewhereInThisManual|topic=CallbackBlocks|anchor=top|display text=Callback Blocks}}
 
*{{Link-SomewhereInThisManual|topic=SurveyBlocks|anchor=top|display text=Survey Blocks}}
 
|structuredtextwide=
 
|FAQHeading=
 
 
|Status=No
 
|Status=No
 
}}
 
}}
 
}}
 
}}

Latest revision as of 18:48, July 14, 2021

This topic is part of the manual Designer User's Guide for version Current of Designer.

Learn how functional blocks are used to build Designer applications.

Related documentation:

Build logic

The Palette contains all of the blocks that you can use in Designer. They are organized into groups according to their type of function. For example, the Routing section contains blocks related to routing functionality:

Des palette routing.png

These pages contain more information about the blocks in each category:

  • Logic and Control blocks add logical functions to applications, such as assigning variables, changing languages, or directing the application to other blocks.
  • User Interaction blocks interact with callers in various ways, such as offering them a list of menu options or invoking a voice or chat bot.
  • Business Control blocks control various operational aspects of your site, such as establishing and checking your hours of operation.
  • Routing blocks specify how an interaction should be directed when certain conditions are met, such as transferring a customer to an agent.
  • Data blocks manage various data-handling functions.
  • External Services blocks manage how an application taps into an external service.
  • Reporting blocks manage certain reporting functions within an application, such as starting or stopping an activity or indicating the progress of an application.
  • Callback blocks manage how Designer interacts with Genesys Callback services.
  • Survey blocks enable you to set up and offer surveys to customers.


You can drag any block from the Palette into the Application Flow and place it under the phase in which you want it to execute. If the block can be used in that phase, a placeholder block appears and you can drop the block to place it in that phase.

Des dragndrop.png

After placing a block, its details are shown in the Property view and you can configure the block and provide your application logic.

Click a block in the Application Flow at any time to select it, highlight it, and show its details.

Des blockhighlight.png

Each block has a default description, which you can edit to add your own description or comment.

Des block comment.png

You can place child blocks underneath some blocks. Child blocks are indented underneath their parent block. With the Menu and Segmentation blocks, this indicates that several outcomes are possible but only one path is followed when the application runs.

Des menuindent.png

In the above image:

  1. A user hears a menu prompt.
  2. The user enters input corresponding to one of the available menu options.
  3. The child blocks of that menu option execute before the application continues with the next block after the Menu block.

In this case, if the user chooses Menu Option 2, the Change Language block runs, followed by Assign Variables, and then the menu completes and moves onto User Input. The child blocks under Menu Option 1 and Menu Option 3 do not execute in this scenario.

In general, an indentation on the Application Flow canvas indicates that a decision or branch occurs, and one of several mutually exclusive paths is followed.

It is also possible for Menu or Segmentation blocks to be nested within one another - that is, a top-level menu option can lead to a second menu. This is indicated with multiple levels of indentation on the Application Flow. Once an option or a branch completes, the application returns one level higher and continues execution.

Tip
When you save your application, Designer also remembers if a group of nested blocks was expanded or collapsed. So the next time the application is opened for editing, the blocks appear in the same state as they were during the last save.

Moving and arranging blocks

To rearrange the order of blocks, you can drag and drop blocks around the Application Flow. Moving a parent block also moves any child blocks under it, so you can move entire groups of blocks together in one operation.

Des groupdrag.png

You can also move groups of blocks by clicking the arrows that appear when you hover over a block. This is useful if an application becomes large enough that dragging and dropping is unfeasible. These arrows show allowable operations on a block: up and down to move a block backward and forward within a phase, and left and right to change the indentation of a block underneath a parent block.

Des blockhover.png

You can also use the Copy and Paste functions (under Actions) to copy a block to another location in the flow, or to another module or application. Copying a parent block also copies any child blocks under it, so you can copy entire groups of blocks together in one operation. Keep in mind that blocks can only be copied to locations where that type of block is permitted.

Des copy paste.png

Under Actions, you can select Show Block ID or Show Block Type to toggle the visibility of those attributes. For example:

Des appflow actions showids.png

Limiting Application Indentation

Although Designer allows you to use several levels of indentation, you might not be able to access the block properties element if you have more than 10 levels of indentation.

To prevent your application from becoming too deeply indented, use Menu and Segmentation blocks to jump to specific points in the application. This takes control back to the main trunk and prevents the application from being too indented and difficult to understand. Menu and Segmentation blocks that do not terminate the application within a reasonable depth should include a Go To block to jump to a different part of the application.

Important
In certain cases, you might need to skip over certain parts of the main application. In these cases, use a Go To block to forward processing to the correct block in the application.

Search tools

To search the blocks in the application flow, select Search from the Actions menu.

The search box appears in the main navigation bar and you can start typing the search term you are looking for. As you type, the items on the page are filtered to show only those items that match the text you've entered. The results are highlighted in the application flow, and you can use the up/down buttons to jump to the next or previous result.

If you click the More Options button, you can also select the Search by Block ID or Enable Deep Search options.

Des search more options.png

Search by Block ID can be useful if a particular block ID is flagged by Designer Analytics as having an issue. You can toggle the block IDs to be visible in the application flow and then use this search option to quickly locate the block in question.

The Enable Deep Search option enables you to search the entire application flow for a specific value or property. For example, you might search for blocks that contain a certain virtual queue.

This video describes the search tools available in Designer:

ECMAScript Expressions

Some block properties accept ECMAScript expressions that are executed by the application at runtime. This allows the application to perform dynamic operations, such as calling an ECMAScript function or combining the values of other variables.

For information about using ECMAScript in Designer, see ECMAScript Expressions.

Busy Treatments

A busy treatment is a special form of handling that occurs while a customer is waiting to be connected with an agent. For example, music can be played for callers or chat participants can be provided with regular updates about their estimated wait times.

Certain blocks allow you to specify audio files, messages, or self-service type shared modules as busy treatments. When planning to add a busy treatment to your application, keep in mind that the interaction might be routed immediately or take a very long time. In certain scenarios, you might prefer to use a Shared Module instead of a Play Message block, as you can configure the module to adjust (or skip) the busy treatment messages depending on the Estimated Wait Time (see an example).

Routing blocks

The Route Call, Route Digital, and Route Agent blocks have a Treatments tab where you can specify a busy treatment.

If you choose to add an audio-based or text message treatment, a Play Message block is automatically nested below the routing block. Use this block to select and configure the message options.

Important
If multiple consecutive Play Message blocks are added beneath a routing block as treatments, Designer considers them as one single treatment.

If you choose to add a module-based treatment, a Shared Module block is automatically nested below the routing block. Use this block to select the shared module that will be used as a busy treatment. Note that you can only select a Self Service shared module.

On the Route Digital block, you can add a chat treatment. This automatically adds a nested Chat Message block below the routing block. You can then use the block properties to set the treatment.

Busy treatments defined in routing blocks will loop automatically until a certain condition is met – such as the call is routed, the customer disconnects, or the timeout specified in the routing block expires – at which point the next block in the application is triggered.

Important
  • When routing chat interactions, Designer waits for 100 milliseconds before starting busy treatments for chats (i.e. in-queue messages). This significantly improves the accuracy of Estimated Wait Time (EWT) and Position in Queue (PIQ) values that are typically used by these messages when providing updates to customers, but may also result in the application not sending busy treatment chat messages if routing completes almost immediately (i.e. within 100 ms).
  • After a busy treatment has been executed at least 10 times, Designer exits the routing block and moves to the next block if the average duration of the treatment is less than 1000 ms (for example, due to a missing audio file).

Start Treatment block

The Start Treatment block also lets you specify a busy treatment, but it works a bit differently than the treatments used in the routing blocks.

Typically, you would use this block in the Assisted Service phase when you want to start a busy treatment — for example, play an audio file to customers while they wait to speak with an agent — and then move on to the routing blocks, all without interrupting the playback to the customer.

Things to keep in mind when using this option:

  • Don't define any additional treatments in the routing blocks that directly follow the Start Treatment block. You want the audio started by the Start Treatment block to continue playing while the routing blocks do their job. If a routing block starts another treatment, the treatment that is playing stops.
  • The selected Self Service Shared Module will continue to loop until a new treatment is started, the interaction is routed or terminated, or the Assisted Service phase in which the Start Treatment block was started is exited.

Example of a Shared Module treatment

A potential use case is to execute a shared module based on a specified set of conditions that can change over time and respond to external factors. For example, you might use a shared module that can play one announcement for callers if the estimated wait time (EWT) is beyond a certain threshold, and another announcement for when they are the next caller in the queue.

To set up this feature:

  1. In the application, create a user variable, ewt, and set its default value to 0.
  2. Create a Self Service type shared module.
  3. In the shared module, create a user variable, ewt, and set its default value to 0.
  4. Des routecall treatments6.png

  5. In the Self Service phase of the shared module, add a Segmentation block. Add the conditions as shown below:
  6. Des routecall treatments3.png

  7. Add two Play Message blocks as child blocks of the condition blocks, and add an Assign Variables block at the end. Your shared module should appear as shown below:
  8. Des routecall treatments1.png

  9. Configure the first Play Message block. An example is below:
  10. Des routecall treatments4.png

  11. Configure the second Play Message block. An example is below:
  12. Des routecall treatments5.png

  13. Configure the Assign Variables block as shown below:
  14. Des routecall treatments2.png

  15. In your application, select the Route Call block and click the Treatments tab.
  16. Click Add Module. A child Shared Module block appears beneath the Route Call block.
  17. In the child Shared Module block, select the shared module that you created in Step 2.

The application passes ewt to the shared module, along with the system variables, which includes EWT. The shared module compares ewt and EWT in the Segmentation block and executes a Play Message block, depending on which variable is larger. At the end, the shared module sets ewt to EWT before returning to the application.

Validation

Designer enforces a drag-and-drop policy to ensure that you can only place blocks into applicable phases. In rare scenarios, a block might be placed in an invalid phase. In these cases, the validation process that occurs after you click Publish will report this failure with an error that includes the blocks placed into invalid phases.

You can update many options without regenerating the code:

  • In the Business Hours block, you can:
    • change business hours of operation.
    • determine whether to terminate the call if it is outside business hours.
    • change the closed message (prompts).
  • Update the Emergency block.
  • Update prompts in the Menu block.
  • Update prompts in the Play Message block.
  • Specify the audio in the Play Audio tab of the Route Call block.
  • Update the Special Day block.
  • Update the input and retry prompts in the User Input block.
Tip
When nesting blocks, Genesys recommends that you do not go beyond ten (10) levels. Otherwise, you will receive a validation warning.
Retrieved from "https://all.docs.genesys.com/DES/Current/Designer/Blocks (2025-08-22 23:37:13)"
Comments or questions about this documentation? Contact us for support!