import { Callback, Handler } from "../handler"; export type LexHandler = Handler; export type LexCallback = Callback; export interface LexEventSlots { [name: string]: string | undefined | null; } export interface LexEventSessionAttributes { [key: string]: string | undefined; } export interface LexEventRequestAttributes { [key: string]: string | undefined; } // Lex // https://docs.aws.amazon.com/lambda/latest/dg/invoking-lambda-function.html#supported-event-source-lex export interface LexEvent { currentIntent: { name: string; slots: LexEventSlots; slotDetails: LexSlotDetails; confirmationStatus: 'None' | 'Confirmed' | 'Denied'; }; bot: { name: string; alias: string; version: string; }; userId: string; inputTranscript: string; invocationSource: 'DialogCodeHook' | 'FulfillmentCodeHook'; outputDialogMode: 'Text' | 'Voice'; messageVersion: '1.0'; sessionAttributes: LexEventSessionAttributes; requestAttributes: LexEventRequestAttributes | null; } export interface LexSlotResolution { value: string; } export interface LexSlotDetail { // "at least 1 but no more than 5 items" resolutions: [LexSlotResolution, LexSlotResolution?, LexSlotResolution?, LexSlotResolution?, LexSlotResolution?]; originalValue: string; } export interface LexSlotDetails { [name: string]: LexSlotDetail; } export interface LexGenericAttachment { title: string; subTitle: string; imageUrl: string; attachmentLinkUrl: string; buttons: Array<{ text: string; value: string; }>; } export interface LexDialogActionBase { type: 'Close' | 'ElicitIntent' | 'ElicitSlot' | 'ConfirmIntent'; message?: { contentType: 'PlainText' | 'SSML' | 'CustomPayload'; content: string; } | undefined; responseCard?: { version: number; contentType: 'application/vnd.amazonaws.card.generic'; genericAttachments: LexGenericAttachment[]; } | undefined; } export interface LexDialogActionClose extends LexDialogActionBase { type: 'Close'; fulfillmentState: 'Fulfilled' | 'Failed'; } export interface LexDialogActionElicitIntent extends LexDialogActionBase { type: 'ElicitIntent'; } export interface LexDialogActionElicitSlot extends LexDialogActionBase { type: 'ElicitSlot'; intentName: string; slots: { [name: string]: string | null }; slotToElicit: string; } export interface LexDialogActionConfirmIntent extends LexDialogActionBase { type: 'ConfirmIntent'; intentName: string; slots: { [name: string]: string | null }; } export interface LexDialogActionDelegate { type: 'Delegate'; slots: { [name: string]: string | null }; } export type LexDialogAction = | LexDialogActionClose | LexDialogActionElicitIntent | LexDialogActionElicitSlot | LexDialogActionConfirmIntent | LexDialogActionDelegate; export interface LexResult { sessionAttributes?: { [key: string]: string } | undefined; dialogAction: LexDialogAction; }