botbuilder-teams-messagingextensions
Version:
Microsoft Bot Builder Framework v4 middleware for Microsoft Teams Messaging Extensions
150 lines (149 loc) • 6.81 kB
TypeScript
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>;
}