AWSTemplateFormatVersion: "2010-09-09" Metadata: AWS::CloudFormation::Interface: ParameterGroups: - Label: default: "Amazon Connect Configuration" Parameters: - ConnectInstanceId - ConnectInstanceName - ChatFlowId - QueueId - Label: default: "General Configuration" Parameters: - DestinationPhoneNumber - ContactEmailAddress - Currency - Language ParameterLabels: ChatFlowId: default: "Chat Flow ID" DestinationPhoneNumber: default: "Phone Number" ConnectInstanceId: default: "Connect Instance ID" ConnectInstanceName: default: "Connect Instance Alias" QueueId: default: "Queue ID" Currency: default: "What is your currency?" Language: default: "What is your prefered language?" ContactEmailAddress: default: "Contact Email Address" Mappings: RegionMap: us-east-1: S3BucketAssetsMain: multichannel-customer-engagement-us-east-1 us-west-2: S3BucketAssetsMain: multichannel-customer-engagement-us-west-2 eu-central-1: S3BucketAssetsMain: multichannel-customer-engagement-eu-central-1 ap-southeast-1: S3BucketAssetsMain: multichannel-customer-engagement-ap-southeast-1 Parameters: ConnectInstanceName: Type: String Description: "Connect Instance Alias - From Amazon Connect Console" ConnectInstanceId: Type: String Description: "Connect Instance ID - It comes in a format similar to 11111111-1111-1111-1111-111111111111" ChatFlowId: Type: String Description: "Chat Flow ID - It's the flow that you created in the Amazon Connect setup - It comes in a format similar to 22222222-2222-2222-2222-222222222222" QueueId: Type: String Description: "Queue ID - It comes with this format 99999999-9999-9999-9999-999999999999" DestinationPhoneNumber: Type: String Description: "Phone Number to receive SMS messages (PIN code), use your country code (e.g. +573001234567)" ContactEmailAddress: Type: String Description: "Provide a valid email address to receive notifications (PIN code). e.g. username@domain.com" Currency: Type: String Default: USD Language: Type: String Default: en AllowedValues: - en - es Resources: stackAgentPortalFrontEnd: Type: AWS::CloudFormation::Stack Properties: TemplateURL: !Join - '' - - 'https://' - !FindInMap [RegionMap, !Ref "AWS::Region", S3BucketAssetsMain] - '.s3.amazonaws.com/cloudformation/agent-portal-front-end.yaml' Parameters: S3BucketAssets: !FindInMap [RegionMap, !Ref "AWS::Region", S3BucketAssetsMain] stackCustomerPortalFrontEnd: Type: AWS::CloudFormation::Stack Properties: TemplateURL: !Join - '' - - 'https://' - !FindInMap [RegionMap, !Ref "AWS::Region", S3BucketAssetsMain] - '.s3.amazonaws.com/cloudformation/customer-portal-front-end.yaml' Parameters: S3BucketAssets: !FindInMap [RegionMap, !Ref "AWS::Region", S3BucketAssetsMain] stackAlexaLexBackend: DependsOn: - stackAgentPortalFrontEnd - stackCustomerPortalFrontEnd Type: AWS::CloudFormation::Stack Properties: TemplateURL: !Join - '' - - 'https://' - !FindInMap [RegionMap, !Ref "AWS::Region", S3BucketAssetsMain] - '.s3.amazonaws.com/cloudformation/alexaLexDynamo-backend.yaml' Parameters: ChatFlowId: !Ref ChatFlowId DestinationPhoneNumber: !Ref DestinationPhoneNumber ContactEmailAddress: !Ref ContactEmailAddress ConnectInstanceId: !Ref ConnectInstanceId QueueId: !Ref QueueId Currency: !Ref Currency Language: !Ref Language S3BucketAssets: !FindInMap [RegionMap, !Ref "AWS::Region", S3BucketAssetsMain] stackVoiceAnalytics: Type: AWS::CloudFormation::Stack Properties: TemplateURL: !Join - '' - - 'https://' - !FindInMap [RegionMap, !Ref "AWS::Region", S3BucketAssetsMain] - '.s3.amazonaws.com/cloudformation/voiceAnalytics.yaml' Parameters: ConnectInstanceName : !Ref ConnectInstanceName TableInteractionsVoice: !GetAtt stackAlexaLexBackend.Outputs.DynamoDBTableCustomerInteractionsVoice Language: !Ref Language S3BucketAssets: !FindInMap [RegionMap, !Ref "AWS::Region", S3BucketAssetsMain] stackConnectChatBackend: Type: AWS::CloudFormation::Stack Properties: TemplateURL: !Join - '' - - 'https://' - !FindInMap [RegionMap, !Ref "AWS::Region", S3BucketAssetsMain] - '.s3.amazonaws.com/cloudformation/connect-chat-backend.yaml' Parameters: ComprehendTranscriptLambdaArn: !GetAtt stackVoiceAnalytics.Outputs.comprehendTranscriptLambdaArn ExecuteTranscriptionStateMachineArn: !GetAtt stackVoiceAnalytics.Outputs.executeTranscriptionStateMachineArn CustomerPortalUrl: !GetAtt stackCustomerPortalFrontEnd.Outputs.DomainName ConnectChatFlowId: !Ref ChatFlowId ConnectInstanceId: !Ref ConnectInstanceId ConnectS3BucketName: !GetAtt stackVoiceAnalytics.Outputs.S3Bucket TranscriptPath: "/ChatTranscripts" S3BucketAssets: !FindInMap [RegionMap, !Ref "AWS::Region", S3BucketAssetsMain] stackAPIGatewayBackend: Type: AWS::CloudFormation::Stack Properties: TemplateURL: !Join - '' - - 'https://' - !FindInMap [RegionMap, !Ref "AWS::Region", S3BucketAssetsMain] - '.s3.amazonaws.com/cloudformation/apiGateway-backend.yaml' Parameters: TableCustomerInfo: !GetAtt stackAlexaLexBackend.Outputs.DynamoDBTableCustomerInfo TableAppInteractions: !GetAtt stackAlexaLexBackend.Outputs.DynamoDBTableCustomerInteractionsApp TableVoiceInteraction: !GetAtt stackAlexaLexBackend.Outputs.DynamoDBTableCustomerInteractionsVoice TableChatInteraction: !GetAtt stackAlexaLexBackend.Outputs.DynamoDBTableCustomerInteractionsChat LambdaConnectChatARN: !GetAtt stackConnectChatBackend.Outputs.initiateChatLambda S3BucketAssets: !FindInMap [RegionMap, !Ref "AWS::Region", S3BucketAssetsMain] stackCognitoAppClientSettings: Type: AWS::CloudFormation::Stack Properties: TemplateURL: !Join - '' - - 'https://' - !FindInMap [RegionMap, !Ref "AWS::Region", S3BucketAssetsMain] - '.s3.amazonaws.com/cloudformation/cognito-appClientSettings.yaml' Parameters: CognitoUserPoolId: !GetAtt stackAPIGatewayBackend.Outputs.CognitoUserPool CognitoCustomerPortalClientId: !GetAtt stackAPIGatewayBackend.Outputs.CognitoAppClientCustomer CallbackLogOutCustomerURL: !GetAtt stackCustomerPortalFrontEnd.Outputs.DomainName CognitoAgentPortalClientId: !GetAtt stackAPIGatewayBackend.Outputs.CognitoAppClientAgent CallbackLogOutAgentURL: !GetAtt stackAgentPortalFrontEnd.Outputs.DomainName S3BucketAssets: !FindInMap [RegionMap, !Ref "AWS::Region", S3BucketAssetsMain] stackCustomerPortalFrontEndSettings: Type: AWS::CloudFormation::Stack Properties: TemplateURL: !Join - '' - - 'https://' - !FindInMap [RegionMap, !Ref "AWS::Region", S3BucketAssetsMain] - '.s3.amazonaws.com/cloudformation/customer-portal-config.yaml' Parameters: S3BucketAssets: !FindInMap [RegionMap, !Ref "AWS::Region", S3BucketAssetsMain] CustomerPortalS3Bucket: !GetAtt stackCustomerPortalFrontEnd.Outputs.BucketName AgentPortalS3Bucket: !GetAtt stackAgentPortalFrontEnd.Outputs.BucketName CustomerPortalUrl: !GetAtt stackCustomerPortalFrontEnd.Outputs.DomainName AgentPortalUrl: !GetAtt stackAgentPortalFrontEnd.Outputs.DomainName CognitoIdentityPoolId: !GetAtt stackAPIGatewayBackend.Outputs.CognitoIdP CognitoCustomerPortalClientId: !GetAtt stackAPIGatewayBackend.Outputs.CognitoAppClientCustomer CognitoAgentPortalClientId: !GetAtt stackAPIGatewayBackend.Outputs.CognitoAppClientAgent CognitoDomain: !GetAtt stackAPIGatewayBackend.Outputs.UrlCustomDomainCognito ConnectInstanceId: !Ref ConnectInstanceId ConnectChatFlowId: !Ref ChatFlowId ApiGatewayEndpoint: !GetAtt stackAPIGatewayBackend.Outputs.URIApiGateway KinesisStreamName: !GetAtt stackAPIGatewayBackend.Outputs.KinesisClickStreamName PinpointAppId: !GetAtt stackAPIGatewayBackend.Outputs.pinpointAppId CognitoUserPoolId: !GetAtt stackAPIGatewayBackend.Outputs.CognitoUserPool Outputs: AgentDomainName: Value: !GetAtt stackAgentPortalFrontEnd.Outputs.DomainName Description: Web site endpoint for Agent Portal CustomerDomainName: Value: !GetAtt stackCustomerPortalFrontEnd.Outputs.DomainName Description: Web site endpoint for Customer Portal S3ConnectBucket: Value: !GetAtt stackVoiceAnalytics.Outputs.S3Bucket Description: S3 Bucket to store call recording/transcript/comprehend outputs AlexaLambdaBackendARN: Value: !GetAtt stackAlexaLexBackend.Outputs.LambdaAlexa Description: This is the Lambda ARN you will require to setup your Alexa Skill