UNPKG

botbuilder-teams-messagingextensions

Version:

Microsoft Bot Builder Framework v4 middleware for Microsoft Teams Messaging Extensions

150 lines (149 loc) 6.81 kB
import { Middleware, TaskModuleMessageResponse, TurnContext, AppBasedLinkQuery, MessagingExtensionAction, MessagingExtensionQuery, MessagingExtensionResult, TaskModuleContinueResponse, AdaptiveCardInvokeAction } from "botbuilder-core"; export interface AdaptiveCardRequestValue { action: AdaptiveCardInvokeAction; trigger: "automatic" | "manual"; } export interface AdaptiveCardResponseAdaptiveCardBody { statusCode: 200; type: "application/vnd.microsoft.card.adaptive"; value: Record<string, unknown>; } export interface AdaptiveCardResponseMessageBody { statusCode: 200; type: "application/vnd.microsoft.activity.message"; value: string; } export interface AdaptiveCardResponseInvalidRequestBody { statusCode: 400; type: "application/vnd.microsoft.error"; value: Error; } export declare type AdaptiveCardResponseBody = AdaptiveCardResponseAdaptiveCardBody | AdaptiveCardResponseMessageBody | AdaptiveCardResponseInvalidRequestBody; /** * Defines the processor for the Messaging Extension Middleware */ export interface IMessagingExtensionMiddlewareProcessor { /** * Processes incoming queries (composeExtension/query) * @param context the turn context * @param value the value of the query * @returns {Promise<MessagingExtensionResult>} */ onQuery?(context: TurnContext, value: MessagingExtensionQuery): Promise<MessagingExtensionResult>; /** * Process incoming requests for Messaging Extension settings (composeExtension/querySettingUrl) * @param context the turn context * @returns {Promise<{ title: string, value: string }} */ onQuerySettingsUrl?(context: TurnContext): Promise<{ title: string; value: string; }>; /** * Processes incoming setting updates (composeExtension/setting) * @param context the turn context * @returns {Promise<void>} */ onSettings?(context: TurnContext): Promise<void>; /** * Processes incoming link queries (composeExtension/queryLink) * @param context the turn context * @param value the value of the query * @returns {Promise<MessagingExtensionResult>} */ onQueryLink?(context: TurnContext, value: AppBasedLinkQuery): Promise<MessagingExtensionResult>; /** * Processes incoming link actions (composeExtension/submitAction) * @param context the turn context * @param value the value of the query * @returns {Promise<MessagingExtensionResult>} */ onSubmitAction?(context: TurnContext, value: MessagingExtensionAction): Promise<MessagingExtensionResult>; /** * Processes incoming link actions (composeExtension/submitAction) where the `botMessagePreviewAction` is set to `send` * @param context the turn context * @param value the value of the query * @returns {Promise<MessagingExtensionResult>} */ onBotMessagePreviewSend?(context: TurnContext, value: MessagingExtensionAction): Promise<MessagingExtensionResult>; /** * Processes incoming link actions (composeExtension/submitAction) where the `botMessagePreviewAction` is set to `edit` * @param context the turn context * @param value the value of the query * @returns {Promise<TaskModuleContinueResponse>} */ onBotMessagePreviewEdit?(context: TurnContext, value: MessagingExtensionAction): Promise<TaskModuleContinueResponse>; /** * Processes incoming fetch task actions (`composeExtension/fetchTask`) * @param context the turn context * @param value commandContext * @returns {Promise<MessagingExtensionResult | TaskModuleContinueResponse>} Promise object is either a `MessagingExtensionResult` for `conf` or `auth` or a `TaskModuleContinueResponse` for `message` or `continue` */ onFetchTask?(context: TurnContext, value: MessagingExtensionAction): Promise<MessagingExtensionResult | TaskModuleContinueResponse | TaskModuleMessageResponse>; /** * Handles Action.Submit from adaptive cards * * Note: this is experimental and it does not filter on the commandId which means that if there are * multiple registered message extension processors all will receive this command. You should ensure to * add a specific identifier to your adaptivecard. * @param context the turn context * @param value the card data * @returns {Promise<void>} */ onCardButtonClicked?(context: TurnContext, value: any): Promise<void>; /** * Handles when an item is selected from the result list * * Note: this is experimental and it does not filter on the commandId which means that if there are * multiple registered message extension processors all will receive this command. You should ensure to * add a specific identifier to your invoke action. * @param context the turn context * @param value object passed in to invoke action * @returns {Promise<MessagingExtensionResult>} */ onSelectItem?(context: TurnContext, value: any): Promise<MessagingExtensionResult>; /** * Handles Universal Bot Actions * Examples: * public async onActionExecute(context: TurnContext, value: AdaptiveCardRequestValue): Promise<AdaptiveCardResponseBody> { * return { * statusCode: 200, * type: "application/vnd.microsoft.activity.message", * value: "A message" * }; * } * or * public async onActionExecute(context: TurnContext, value: AdaptiveCardRequestValue): Promise<AdaptiveCardResponseBody> { * return { * statusCode: 200, * type: "application/vnd.microsoft.card.adaptive", * value: adaptiveCardObject * }; * } * See https://docs.microsoft.com/en-us/microsoftteams/platform/task-modules-and-cards/cards/universal-actions-for-adaptive-cards/work-with-universal-actions-for-adaptive-cards#adaptivecardaction-invoke-activity * @param context * @param value * @returns */ onActionExecute?(context: TurnContext, value: AdaptiveCardRequestValue): Promise<AdaptiveCardResponseBody>; } /** * A Messaging Extension Middleware for Microsoft Teams */ export declare class MessagingExtensionMiddleware implements Middleware { private commandId; private processor; /** * Default constructor * @param commandId The commandId of the Messaging Extension to process, * or `undefined` to process all incoming requests * @param processor The processor */ constructor(commandId: string | undefined, processor: IMessagingExtensionMiddlewareProcessor); /** * Bot Framework `onTurn` method * @param context the turn context * @param next the next function */ onTurn(context: TurnContext, next: () => Promise<void>): Promise<void>; }