UNPKG

@aws-amplify/interactions

Version:

Interactions category of aws-amplify

1 lines 11.1 kB
{"version":3,"file":"AWSLexV2Provider.mjs","sources":["../../../src/lex-v2/AWSLexV2Provider.ts"],"sourcesContent":["// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nimport { IntentState, LexRuntimeV2Client, RecognizeTextCommand, RecognizeUtteranceCommand, } from '@aws-sdk/client-lex-runtime-v2';\nimport { getAmplifyUserAgentObject } from '@aws-amplify/core/internals/utils';\nimport { ConsoleLogger, fetchAuthSession } from '@aws-amplify/core';\nimport { v4 as uuid } from 'uuid';\nimport { convert, unGzipBase64AsJson } from '../utils';\nconst logger = new ConsoleLogger('AWSLexV2Provider');\nclass AWSLexV2Provider {\n constructor() {\n this._botsCompleteCallback = {};\n this.defaultSessionId = uuid();\n }\n /**\n * Send a message to a bot\n * @async\n * @param {AWSLexV2ProviderOption} botConfig - Bot configuration for sending the message\n * @param {string | InteractionsMessage} message - message to send to the bot\n * @return {Promise<InteractionsResponse>} A promise resolves to the response from the bot\n */\n async sendMessage(botConfig, message) {\n // check if credentials are present\n let session;\n try {\n session = await fetchAuthSession();\n }\n catch (error) {\n return Promise.reject(new Error('No credentials'));\n }\n const { region, aliasId, localeId, botId } = botConfig;\n const client = new LexRuntimeV2Client({\n region,\n credentials: session.credentials,\n customUserAgent: getAmplifyUserAgentObject(),\n });\n let response;\n // common base params for all requests\n const reqBaseParams = {\n botAliasId: aliasId,\n botId,\n localeId,\n sessionId: session.identityId ?? this.defaultSessionId,\n };\n if (typeof message === 'string') {\n response = await this._handleRecognizeTextCommand(botConfig, message, reqBaseParams, client);\n }\n else {\n response = await this._handleRecognizeUtteranceCommand(botConfig, message, reqBaseParams, client);\n }\n return response;\n }\n /**\n * Attach a onComplete callback function to a bot.\n * The callback is called once the bot's intent is fulfilled\n * @param {AWSLexV2ProviderOption} botConfig - Bot configuration to attach the onComplete callback\n * @param {InteractionsOnCompleteCallback} callback - called when Intent Fulfilled\n */\n onComplete({ name }, callback) {\n this._botsCompleteCallback[name] = callback;\n }\n /**\n * call onComplete callback for a bot if configured\n */\n _reportBotStatus(data, { name }) {\n const sessionState = data?.sessionState;\n // Check if state is fulfilled to resolve onFullfilment promise\n logger.debug('postContent state', sessionState?.intent?.state);\n const callback = this._botsCompleteCallback[name];\n if (!callback) {\n return;\n }\n switch (sessionState?.intent?.state) {\n case IntentState.READY_FOR_FULFILLMENT:\n case IntentState.FULFILLED:\n callback(undefined, data);\n break;\n case IntentState.FAILED:\n callback(new Error('Bot conversation failed'));\n break;\n default:\n break;\n }\n }\n /**\n * Format UtteranceCommandOutput's response\n * decompress attributes\n * update audioStream format\n */\n async _formatUtteranceCommandOutput(data) {\n return {\n ...data,\n messages: await unGzipBase64AsJson(data.messages),\n sessionState: await unGzipBase64AsJson(data.sessionState),\n interpretations: await unGzipBase64AsJson(data.interpretations),\n requestAttributes: await unGzipBase64AsJson(data.requestAttributes),\n inputTranscript: await unGzipBase64AsJson(data.inputTranscript),\n audioStream: data.audioStream\n ? await convert(data.audioStream)\n : undefined,\n };\n }\n /**\n * handle client's `RecognizeTextCommand`\n * used for sending simple text message\n */\n async _handleRecognizeTextCommand(botConfig, data, baseParams, client) {\n logger.debug('postText to lex2', data);\n const params = {\n ...baseParams,\n text: data,\n };\n try {\n const recognizeTextCommand = new RecognizeTextCommand(params);\n const resultData = await client.send(recognizeTextCommand);\n this._reportBotStatus(resultData, botConfig);\n return resultData;\n }\n catch (err) {\n return Promise.reject(err);\n }\n }\n /**\n * handle client's `RecognizeUtteranceCommand`\n * used for obj text or obj voice message\n */\n async _handleRecognizeUtteranceCommand(botConfig, data, baseParams, client) {\n const { content, options: { messageType }, } = data;\n logger.debug('postContent to lex2', data);\n let params;\n // prepare params\n if (messageType === 'voice') {\n if (typeof content !== 'object') {\n return Promise.reject(new Error('invalid content type'));\n }\n const inputStream = content instanceof Uint8Array ? content : await convert(content);\n params = {\n ...baseParams,\n requestContentType: 'audio/x-l16; sample-rate=16000; channel-count=1',\n inputStream,\n };\n }\n else {\n // text input\n if (typeof content !== 'string')\n return Promise.reject(new Error('invalid content type'));\n params = {\n ...baseParams,\n requestContentType: 'text/plain; charset=utf-8',\n inputStream: content,\n };\n }\n // make API call to lex\n try {\n const recognizeUtteranceCommand = new RecognizeUtteranceCommand(params);\n const resultData = await client.send(recognizeUtteranceCommand);\n const response = await this._formatUtteranceCommandOutput(resultData);\n this._reportBotStatus(response, botConfig);\n return response;\n }\n catch (err) {\n return Promise.reject(err);\n }\n }\n}\nexport const lexProvider = new AWSLexV2Provider();\n"],"names":["uuid"],"mappings":"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"}