aws-lex-web-ui
aws-lex-web-ui copied to clipboard
Updated master.yml with my own Bot info still deploys the Order Flowers bot
Hello,
I have configured the master.yml to suit my Lex bot and have deployed it via CloudFormation, however, it still results in the Order Flowers default bot. I am probably missing something crucial, but I've looked through the template many times and can't find what.
`AWSTemplateFormatVersion: 2010-09-09 Description: | Master Lex Web UI CloudFormation template (v0.19.5) The Lex Web Ui can be deployed to operate against either a Lex V2 Bot OR a Lex V1 Bot BUT NOT BOTH. Please configure either the Lex V2 bot information OR the Lex V1 bot information and leave the other version input parameters as defaulted. A deployment of Lex Web Ui can not be switched between V2 and V1 by updating the stack with different parameters. It deploys: - S3 buckets to host the web application - CodeBuild project to build the configuration and deploy to S3 - Optional Lex Bot (based on OrderFlowers example) - Optional Cognito Identity Pool for unauthenticated identities - Optional Lambda function to delete S3 buckets - CloudWatch Logs groups related to Lambda functions - Associated IAM roles
Parameters: LexV2BotId: Description: > Bot ID (not bot name) of an existing Lex V2 Bot to be used by the web ui. NOTE: You must also enter your Bot alias ID in the LexV2BotAliasId field below. DO NOT MODIFY this value if configuring a V1 Bot. Type: String Default: 'WNDVSKTNZ8' MaxLength: 50 AllowedPattern: '(^$|^[a-zA-Z0-9]+(([a-zA-Z0-9]+)*|([a-zA-Z0-9]+)*|_))' ConstraintDescription: > Must conform with the permitted Lex V2 Bot name pattern.
LexV2BotLocaleId:
Description: >
Specify your bot's supported locale ids. By default this list contains only en_US. Other Lex V2
supported values are de_DE, en_AU, en_GB, es_419, es_ES, es_US, fr_CA, fr_FR, it_IT, ja_JP. A comma
separated list of values can be supplied with the first value in the list being the default value. The
remaining items can be selected in the Lex Web Ui menu.
See "https://docs.aws.amazon.com/lexv2/latest/dg/lex2.0.pdf"
for details on supported languages and locales. DO NOT MODIFY this value if
configuring a V1 Bot.
Type: String
Default: 'en_US'
MinLength: 2
MaxLength: 50
BotName:
Description: >
Name of an existing Lex Bot to be used by the web ui. NOTE: You must
also enter your published bot alias in the BotAlias field below. DO NOT MODIFY this value if
configuring a V2 Bot.
Type: String
Default: 'VigInvestigations'
MinLength: 0
MaxLength: 50
AllowedPattern: '(^$|^[a-zA-Z]+((_[a-zA-Z]+)*|([a-zA-Z]+_)*|_))'
ConstraintDescription: >
Must conform with the permitted Lex Bot name pattern.
BotAlias:
Description: >
WARNING: For production deployments, use your bot's published alias here.
The $LATEST alias should only be used for manual testing. Amazon Lex limits
the number of runtime requests that you can make to the $LATEST version of
the bot. DO NOT MODIFY this value if configuring a V2 Bot.
Type: String
Default: 'VigInvestigationsAlias'
MinLength: 2
MaxLength: 50
AllowedPattern: '(^$|^[$a-zA-Z]+((_[$a-zA-Z]+)*|([$a-zA-Z]+_)*|_))'
ConstraintDescription: >
Must conform with the permitted Lex Alias name pattern.
BotNamePrefix:
Type: String
Description: >
If Lex Version 2 BotId is left empty AND the Lex Version 1 BotName is left empty,
a Lex V1 Bot based on the OrderFlowers sample will be automatically created.
Specify a prefix to add to Lex resource names when using the sample bot.
Ignored if you provide your own bot. Must conform to the
permitted Lex Bot name syntax (alpha characters).
Default: WebUi
MinLength: 3
MaxLength: 32
AllowedPattern: '^[a-zA-Z\._]+$'
ConstraintDescription: >
Must conform with the permitted Lex Bot name pattern.
ShouldDeleteBot:
Type: String
Default: true
AllowedValues:
- true
- false
Description: >
If set to True, the Optional Sample Lex bot and associated resources will
be deleted when the stack is deleted. Otherwise, the bot
will be preserved. Only applies if the bot is created by
this stack.
EnableCognitoLogin:
Type: String
Default: false
AllowedValues:
- true
- false
Description: >
If set to True, a menu with a login action will be displayed
in the Lex Web Ui. This feature uses Cognito User Pools with
hosted login pages. After login, the menu will switch to logout.
ForceCognitoLogin:
Type: String
Default: false
AllowedValues:
- true
- false
Description: >
If set to True, the menu with a login action will not be displayed
in the Lex Web Ui, and the Cognito login will be executed automatically. This implicitly sets
EnableCognitoLogin to be true.
SaveHistory:
Type: String
Default: false
AllowedValues:
- true
- false
Description: >
This is an optional parameter, if set to True, the history of the chat is maintained over sessions.
A item to clean the chat will appear at the menu.
ShouldEnableLiveChat:
Type: String
Default: false
AllowedValues:
- true
- false
Description: >
This is an optional parameter, if set to True, the AWS Connect live Chat functionality will be available.
A item to start a live chat will appear at the menu.
CodeBuildName:
Type: String
Description: >
Name of the CodeBuild project to be created. Used to
configure and directly deploy the web app to S3. Must be
unique per region
Default: lex-web-ui
MinLength: 2
MaxLength: 255
AllowedPattern: '^[A-Za-z0-9][A-Za-z0-9\-_]{1,254}$'
ConstraintDescription: >
Should start with Alphanumeric. May contain alphanumeric, undescore
and dash.
WebAppParentOrigin:
Type: String
Description: >
Browser origin (e.g. http://mysite.example.com:8080)
of an existing site where you want to place the chat bot UI.
This is an optional parameter. If left empty, the sample parent page
will be hosted in the same S3 bucket as the iframe
Default: ''
AllowedPattern: '(^$|^https?://[\w\.-]+(:\d+)?$)'
ConstraintDescription: Empty or valid browser origin
WebAppPath:
Type: String
Default: '/parent.html'
Description: >
Path to the page (or pages) under WebAppParentOrigin used to host
the chatbot UI. Multiple paths can be specified as a comma separated
list.
CognitoIdentityPoolId:
Type: String
Description: >
Id of an existing Cognito Identity Pool. This is an optional
parameter. If left empty, a Cognito Identity Pool will be
automatically created. The pool ID is used by the web ui
to get AWS credentials for making calls to Lex and Polly.
Default: ''
AllowedPattern: '(^$|^[\w-]+:[0-9a-f-]+$)'
ConstraintDescription: Empty or a valid Cognito Identity Pool ID
CognitoIdentityPoolName:
Type: String
Description: >
Name of Cognito identity pool to be created to provide
AWS credentials to the web ui. Only used if the
CognitoIdentityPoolId parameter is left empty (default).
Default: Lex Web UI
MinLength: 1
MaxLength: 128
AllowedPattern: '^[\w ]+$'
ConstraintDescription: Alphanumeric and spaces.
CleanupBuckets:
Type: String
Default: true
AllowedValues:
- true
- false
Description: >
If set to True, buckets created for the Pipeline and to store the
web application will be deleted on CloudFormation stack delete.
If set to False, S3 buckets will be retained.
EnableMarkdownSupport:
Type: String
Default: true
AllowedValues:
- true
- false
Description: >
If set to True, enable optional Markdown formatting.
Warning: Improper use of the Markdown/html feature can open you up to a cross-site
scripting (XSS) attack from insecure Bots. Make sure you trust the Bot being used
by the LexWebUi.
ReInitSessionAttributesOnRestart:
Type: String
Default: false
AllowedValues:
- true
- false
Description: >
If set to True, session attributes sent on each request to Lex are reset. Use a value
of false, if session attributes need to be supported on subsequent Lex requests. The
default is false.
ShouldLoadIframeMinimized:
Type: String
Default: false
AllowedValues:
- true
- false
Description: >
If set to True and running embedded as an Iframe on a web page, minimize the
LexWebUi when first launched. If set to False, the Iframe will be maximized
on the hosting page.
ShowResponseCardTitle:
Type: String
Default: false
AllowedValues:
- true
- false
Description: >
If set to True, the ResponseCard title is displayed in the UI. When set to false,
a ResponseCard title is not displayed in the UI. Default is false. Note at the
present time this is a global setting. Should the UI need to display some form
of a title, use the optional sub-title property of a ResponseCard.
# Sub-templates and source artifacts are hosted in this bucket.
# The content of this bucket is maintained outside of this template
# by using the Makefile under the build directory of this project.
# See the README.md file for instructions on how to use your own bucket.
BootstrapBucket:
Type: String
Default: aws-bigdata-blog
Description: >
S3 bucket containing pre-staged nested templates and source artifacts
BootstrapPrefix:
Type: String
Default: artifacts/aws-lex-web-ui/artifacts
Description: >
S3 prefix where the templates and source are stored under
WebAppConfBotInitialText:
Type: String
Default: >
You can ask me for help ordering flowers. Just type "Buy
flowers" or click on the mic and say it.
Description: First bot message displayed in the chatbot UI
WebAppConfBotInitialSpeech:
Type: String
Default: Say 'Buy Flowers' to get started.
Description: >
Message spoken by bot when the microphone is first pressed in
a conversation
WebAppConfBotInitialUtterance:
Type: String
Default: ''
Description: >
Text to use to send as first utterance to bot
WebAppConfNegativeFeedback:
Type: String
Default: Thumbs down
Description: >
This optional parameter defines the message to be sent by the user upon pressing
a feedback button signaling a negative feedback.
If left empty feedback buttons will be disabled on the UI.
WebAppConfPositiveFeedback:
Type: String
Default: Thumbs up
Description: >
This optional parameter defines the message to be sent by the user upon pressing
a feedback button signaling a positive feedback.
If left empty feedback buttons will be disabled on the UI.
WebAppConfHelp:
Type: String
Default: Help
Description: >
This is an optional parameter, when defined with a value, a help button will display on the chat bot toolbar.
When pressed the button will send the entered string to the bot as a help message. If left empty
the help button will be disabled.
WebAppConfToolbarTitle:
Type: String
Default: Order Flowers
Description: Title displayed in the chatbot UI toolbar
retryOnLexPostTextTimeout:
Type: String
Default: false
AllowedValues:
- true
- false
Description: >
When set to true, operations against the Lex PostText API that result in a timeout
will be retried up the the defined retry count. This is useful to enable if 30 second
timeouts in Lex are frequently observed and subsequent operations will must likely succeed.
retryCountPostTextTimeout:
Type: Number
Default: 1
Description: >
Defines the number of times the lex-web-ui will retry the Lex PostText API operation when an exception
is detected.
ConnectContactFlowId:
Type: String
Description: >
Connect Contract Flow Id
Default: ''
ConnectInstanceId:
Type: String
Description: >
Connect Instance Id
Default: ''
ConnectPromptForNameMessage:
Type: String
Description: >
Message to display prompting the user for a name
Default: Before starting a live chat, please tell me your name?
ConnectWaitForAgentMessage:
Type: String
Description: >
Message to display every message interval while waiting for an agent to connect
Default: Thanks for waiting. An agent will be with you when available.
ConnectAttachChatTranscript:
Type: String
Default: false
AllowedValues:
- true
- false
Description: >
Attach chat transcript as file. This only works if you enable attachments in Amazon Connect.
ConnectAgentJoinedMessage:
Type: String
Description: >
Message to play when an agent joins the chat. {Agent} will be replaced with the Agent's name.
Default: "{Agent} has joined."
ConnectAgentLeftMessage:
Type: String
Description: >
Message to play when an agent leaves the chat. {Agent} will be replaced with the Agent's name.
Default: "{Agent} has left."
ConnectChatEndedMessage:
Type: String
Description: >
Message to play when a chat session has ended.
Default: "Chat ended."
ConnectWaitForAgentMessageIntervalInSeconds:
Type: Number
Description: >
Interval in seconds between successive ConnectWaitForAgentMessage. 0 to disable interval.
Default: 60
ConnectLiveChatTerms:
Type: String
Description: >
Command separated list of terms that can be used to start Live Chat mode
Default: "live chat"
Metadata: AWS::CloudFormation::Interface: ParameterGroups: - Label: default: Deployment Parameters Parameters: - CodeBuildName - CleanupBuckets - BootstrapBucket - BootstrapPrefix - Label: default: Lex V1 Bot Configuration Parameters Parameters: - BotName - BotAlias - Label: default: Lex V2 Bot Configuration Parameters Parameters: - LexV2BotId - LexV2BotAliasId - LexV2BotLocaleId - Label: default: Optional Sample Bot Parameters: - BotNamePrefix - ShouldDeleteBot - Label: default: Bot Behavior Parameters Parameters: - EnableCognitoLogin - ForceCognitoLogin - EnableMarkdownSupport - ReInitSessionAttributesOnRestart - ShowResponseCardTitle - SaveHistory - retryOnLexPostTextTimeout - retryCountPostTextTimeout - Label: default: Cognito Parameters Parameters: - CognitoIdentityPoolId - CognitoIdentityPoolName - Label: default: Web Application Parameters Parameters: - WebAppParentOrigin - WebAppPath - WebAppConfBotInitialText - WebAppConfBotInitialSpeech - WebAppConfBotInitialUtterance - WebAppConfNegativeFeedback - WebAppConfPositiveFeedback - WebAppConfHelp - WebAppConfToolbarTitle - ShouldLoadIframeMinimized - Label: default: Connect Live Chat Parameters Parameters: - ShouldEnableLiveChat - ConnectLiveChatTerms - ConnectInstanceId - ConnectContactFlowId - ConnectPromptForNameMessage - ConnectWaitForAgentMessage - ConnectWaitForAgentMessageIntervalInSeconds - ConnectAgentJoinedMessage - ConnectAgentLeftMessage - ConnectChatEndedMessage - ConnectAttachChatTranscript Conditions: IsLexV2: !Not [ !Equals ['WNDVSKTNZ8', ''] ] NeedsBot: !And [ !Equals [!Ref BotName, ''], !Equals ['WNDVSKTNZ8', ''] ] NeedsCognito: !Equals [!Ref CognitoIdentityPoolId, ''] NeedsParentOrigin: !Equals [!Ref WebAppParentOrigin, ''] ShouldForceCognitoLogin: !Equals [!Ref ForceCognitoLogin, true] EnableLiveChat: !Equals [!Ref ShouldEnableLiveChat, true]
Resources: Bot: Type: AWS::CloudFormation::Stack Condition: NeedsBot Properties: TimeoutInMinutes: 15 TemplateURL: !Sub "https://${BootstrapBucket}.s3.${AWS::Region}.amazonaws.com/${BootstrapPrefix}/templates/lexbot.yaml" Parameters: NamePrefix: !Ref BotNamePrefix ShouldDeleteBot: !Ref ShouldDeleteBot CustomResourceCodeBucket: !Ref BootstrapBucket CustomResourceCodeObject: !Sub "${BootstrapPrefix}/custom-resources-v0.19.5.zip"
CognitoIdentityPool:
Type: AWS::CloudFormation::Stack
Condition: NeedsCognito
Properties:
TemplateURL: !Sub "https://${BootstrapBucket}.s3.${AWS::Region}.amazonaws.com/${BootstrapPrefix}/templates/cognito.yaml"
Parameters:
CognitoIdentityPoolName: !Ref CognitoIdentityPoolName
ForceCognitoLogin: !Ref ForceCognitoLogin
LexBotName:
!If
- NeedsBot
- !GetAtt Bot.Outputs.BotName
- !Ref BotName
LexV2BotId: 'WNDVSKTNZ8'
LexV2BotAliasId: 'VigInvestigationsAlias'
ShouldEnableLiveChat: !Ref ShouldEnableLiveChat
##########################################################################
# Simplified deployment using CodeBuild to build config and push to S3
##########################################################################
CodeBuildDeploy:
Type: AWS::CloudFormation::Stack
Properties:
TemplateURL: !Sub "https://${BootstrapBucket}.s3.${AWS::Region}.amazonaws.com/${BootstrapPrefix}/templates/codebuild-deploy.yaml"
Parameters:
ResourcePrefix: !Ref "AWS::StackName"
CodeBuildName: !Ref CodeBuildName
SourceBucket: !Ref BootstrapBucket
SourcePrefix: !Ref BootstrapPrefix
SourceObject: !Sub "${BootstrapPrefix}/src-v0.19.5.zip"
CustomResourceCodeObject: !Sub "${BootstrapPrefix}/custom-resources-v0.19.5.zip"
InitiateChatLambdaCodeObject: !Sub "${BootstrapPrefix}/initiate-chat-lambda-v0.19.5.zip"
CleanupBuckets: !Ref CleanupBuckets
BotName:
!If
- IsLexV2
- 'WNDVSKTNZ8'
- !If
- NeedsBot
- !GetAtt Bot.Outputs.BotName
- !Ref BotName
BotAlias: !Ref BotAlias
LexV2BotId: 'WNDVSKTNZ8'
LexV2BotAliasId: 'VigInvestigationsAlias'
LexV2BotLocaleId: 'en_US'
CognitoIdentityPoolId:
!If
- NeedsCognito
- !GetAtt CognitoIdentityPool.Outputs.CognitoIdentityPoolId
- !Ref CognitoIdentityPoolId
ParentOrigin: !Ref WebAppParentOrigin
WebAppConfBotInitialText: !Ref WebAppConfBotInitialText
WebAppConfBotInitialSpeech: !Ref WebAppConfBotInitialSpeech
WebAppConfBotInitialUtterance: !Ref WebAppConfBotInitialUtterance
WebAppConfNegativeFeedback: !Ref WebAppConfNegativeFeedback
WebAppConfPositiveFeedback: !Ref WebAppConfPositiveFeedback
WebAppConfHelp: !Ref WebAppConfHelp
WebAppConfToolbarTitle: !Ref WebAppConfToolbarTitle
SaveHistory: !Ref SaveHistory
ShouldEnableLiveChat: !Ref ShouldEnableLiveChat
ShouldEnableCognitoLogin:
!If
- ShouldForceCognitoLogin
- true
- !Ref EnableCognitoLogin
ShouldForceCognitoLogin: !Ref ForceCognitoLogin
ReInitSessionAttributesOnRestart: !Ref ReInitSessionAttributesOnRestart
EnableMarkdownSupport: !Ref EnableMarkdownSupport
ShouldLoadIframeMinimized: !Ref ShouldLoadIframeMinimized
ShowResponseCardTitle: !Ref ShowResponseCardTitle
CognitoAppUserPoolClientId:
!If
- NeedsCognito
- !GetAtt CognitoIdentityPool.Outputs.CognitoUserPoolClientId
- "UserMustSupply"
CognitoUserPoolId:
!If
- NeedsCognito
- !GetAtt CognitoIdentityPool.Outputs.CognitoUserPoolId
- "UserMustSupply"
retryOnLexPostTextTimeout: !Ref retryOnLexPostTextTimeout
retryCountPostTextTimeout: !Ref retryCountPostTextTimeout
ConnectContactFlowId: !Ref ConnectContactFlowId
ConnectInstanceId: !Ref ConnectInstanceId
ConnectPromptForNameMessage: !Ref ConnectPromptForNameMessage
ConnectWaitForAgentMessage: !Ref ConnectWaitForAgentMessage
ConnectWaitForAgentMessageIntervalInSeconds: !Ref ConnectWaitForAgentMessageIntervalInSeconds
ConnectAgentJoinedMessage: !Ref ConnectAgentJoinedMessage
ConnectAgentLeftMessage: !Ref ConnectAgentLeftMessage
ConnectChatEndedMessage: !Ref ConnectChatEndedMessage
ConnectAttachChatTranscript: !Ref ConnectAttachChatTranscript
ConnectLiveChatTerms: !Ref ConnectLiveChatTerms
Timestamp: 1658170487
CognitoIdentityPoolConfig:
Type: AWS::CloudFormation::Stack
Condition: NeedsCognito
Properties:
TemplateURL: !Sub "https://${BootstrapBucket}.s3.${AWS::Region}.amazonaws.com/${BootstrapPrefix}/templates/cognitouserpoolconfig.yaml"
Parameters:
CloudFrontUrl: !GetAtt CodeBuildDeploy.Outputs.WebAppBase
WebAppUrl: !Ref WebAppParentOrigin
WebAppPath: !Ref WebAppPath
CodeBuildProjectName: !GetAtt CodeBuildDeploy.Outputs.CodeBuildProject
CognitoUserPool: !GetAtt CognitoIdentityPool.Outputs.CognitoUserPoolId
CognitoUserPoolClient: !GetAtt CognitoIdentityPool.Outputs.CognitoUserPoolClientId
Timestamp: 1658170487
Outputs: BotName: Condition: NeedsBot Description: > Name of the Lex bot created by the stack Value: !GetAtt Bot.Outputs.BotName
CodeBuildUrl:
Description: >
Monitor the pipeline URL to see when the application has been fully
built and deployed.
Value: !Sub "https://console.aws.amazon.com/codebuild/home?region=${AWS::Region}#/projects/${CodeBuildDeploy.Outputs.CodeBuildProject}/view"
WebAppUrl:
Description: >
URL of the stand-alone sample web application.
This page will be available after the pipeline/deployment completes.
Value: !GetAtt CodeBuildDeploy.Outputs.WebAppUrl
WebAppDomainName:
Description: >
DomainName of the web application
Value: !GetAtt CodeBuildDeploy.Outputs.WebAppDomainName
Export:
Name: !Join [":", [!Ref "AWS::StackName", WebAppDomainName]]
WebAppBucket:
Description: >
S3 bucket hosting lexwebui artifacts
Value: !GetAtt CodeBuildDeploy.Outputs.WebAppBucket
Export:
Name: !Join [":", [!Ref "AWS::StackName", WebAppBucket]]
ParentPageUrl:
Condition: NeedsParentOrigin
Description: >
URL of the iframe based sample web application
This page will be available after the pipeline/deployment completes.
Value: !GetAtt CodeBuildDeploy.Outputs.ParentPageUrl
LoaderScriptUrl:
Description: >
URL of the loader script
This script will be available after the pipeline/deployment completes.
Value: !GetAtt CodeBuildDeploy.Outputs.LoaderScriptUrl
SnippetUrl:
Description: >
URL of a page showing the snippet to load the chatbot UI as
an iframe
Value: !GetAtt CodeBuildDeploy.Outputs.SnippetUrl
CognitoIdentityPoolId:
Condition: NeedsCognito
Description: Cognito Identity Pool Id
Value: !GetAtt CognitoIdentityPool.Outputs.CognitoIdentityPoolId
CognitoUserPoolPubKey:
Condition: NeedsCognito
Description: Include Cognito User Pool Public Key URL in stack outputs (needed for QnABot token auth)
Value: !Sub https://cognito-idp.${AWS::Region}.amazonaws.com/${CognitoIdentityPool.Outputs.CognitoUserPoolId}/.well-known/jwks.json
CognitoUserPoolClientId:
Condition: NeedsCognito
Description: Cognito User Pool Client Id
Value: !GetAtt CognitoIdentityPool.Outputs.CognitoUserPoolClientId
Export:
Name: !Join [":", [!Ref "AWS::StackName", CognitoUserPoolClientId]]`
Here is my YAML file with my bot info: https://github.com/ViggoMode2021/Lex-Ui_Sample/blob/main/bot.yml
Thank you!
@ViggoMode2021 Are you targeting a Lex V1 or Lex V2 bot? Be sure to supply values for either one or the other but not both. If you are targeting Lex V2 you need to supply LexV2BotId, LexV2BotAliasId, LexV2BotLocaleId and leave BotName and BotAlias defaulted as '' as they will target a Lex V1 bot. If you are targeting a Lex V1 bot you need to supply BotName and BotAlias and leave the other three the way they are originally set. If you have already deployed and the WebUiOrderFlowers bot has been created, I would delete the stack and start over.
Its much easier just to click on the appropriate launch stack button for your region in the blog post under getting started and fill in either the Lex V1 or Lex V2 parameters.
Yes, I've done it both with the yml file that I edited directly and via the launch stack button in the blog post. It is a Lex V2 bot but everytime I launch it and ask it a question that I implemented for my chatbot like 'What's your name?', I get the response 'Sorry, I was unable to process your message. Try again later.'. I'm not sure what else to do, but I appreciate your response.
Thank you
@ViggoMode2021 Usually this means something on the backend is failing. Do you have any Lambda functions attached to your Lex intents? Using the browser debugger, you can see the specific error being returned in the response from Lex that results in the 'I was unable to process your message'. In the browser, after you submit your question, you'll see a post request (recognizeText) sent to Lex V2. This post request in the browser debugger once completed will have a Response. This response will contain a good indication as to what failed on the back end.