in lambda/fulfillment/lib/middleware/1_parse.js [77:110]
function getClientType(req) {
if (req._type == 'ALEXA') {
return req._type ;
}
// Try to determine which Lex client is being used based on patterns in the req - best effort attempt.
const voiceortext = (req._preferredResponseType == 'SSML') ? "Voice" : "Text" ;
//for LexV1 channels -- check for x-amz-lex:channel-type requestAttribute
//more information on deploying an Amazon Lex V1 Bot on a Messaging Platform: https://docs.aws.amazon.com/lex/latest/dg/example1.html
//for LexV2 channels -- check for x-amz-lex:channels:platform requestAttribute
//more information on deploying an Amazon Lex V2 Bot on a Messaging Platform: https://docs.aws.amazon.com/lexv2/latest/dg/deploying-messaging-platform.html
if ((_.get(req,"_event.requestAttributes.x-amz-lex:channel-type") == "Slack") || (_.get(req,"_event.requestAttributes.x-amz-lex:channels:platform") == "Slack")) {
return "LEX.Slack." + voiceortext ;
} else if ((_.get(req,"_event.requestAttributes.x-amz-lex:channel-type") == "Twilio-SMS") || (_.get(req,"_event.requestAttributes.x-amz-lex:channels:platform") == "Twilio")) {
return "LEX.TwilioSMS." + voiceortext ;
} else if (_.get(req,"_event.requestAttributes.x-amz-lex:accept-content-types")) {
return "LEX.AmazonConnect." + voiceortext ;
}
else if (_.get(req,"_event.requestAttributes.x-amz-lex:channels:platform") == "Genesys Cloud") {
return "LEX.GenesysCloud." + voiceortext;
}
else if (/^.*-.*-\d:.*-.*-.*-.*$/.test(_.get(req,"_event.userId"))){
// user id pattern to detect lex-web-uithrough use of cognito id as userId: e.g. us-east-1:a8e1f7b2-b20d-441c-9698-aff8b519d8d5
// TODO: add another clientType indicator for lex-web-ui?
return "LEX.LexWebUI." + voiceortext ;
} else {
// generic LEX client
return "LEX." + voiceortext ;
}
}