Создание и отправка модуля задачCreate and send the task module

Важно!

Примеры кода, приведенные в этом разделе, основаны на 4,6 и более поздних версиях пакета SDK Bot.The code samples in this section are based on 4.6 and later versions of the Bot Framework SDK. Если вы ищете документацию по более ранним версиям, ознакомьтесь с разделом Messaging Extensions – v3 SDK в папке resources этой документации.If you're looking for documentation for earlier versions, see the Messaging Extensions - v3 SDK section in the Resources folder of the documentation.

Если вы не заполняете модуль задач параметрами, определенными в манифесте приложения, вам потребуется создать модуль задачи, который будет представлен пользователям.If you are not populating your task module with parameters defined in your app manifest, you'll need to create the task module to be presented to your users. Можно использовать либо адаптивную карту, либо встроенное веб-представление.You can use either an Adaptive Card or an embedded web view.

Начальный запрос вызоваThe initial invoke request

При использовании этого метода служба получает Activity объект типа composeExtension/fetchTask, и вам потребуется ответить на task объект, содержащий либо адаптивную карту, либо URL-адрес встроенного веб-представления.Using this method you service will receive an Activity object of type composeExtension/fetchTask, and you'll need to respond with a task object containing either the adaptive card or a URL to the embedded web view. В дополнение к стандартным свойствам действия Bot, начальная полезная нагрузка вызова содержит следующие метаданные запроса:In addition to the standard bot activity properties, the initial invoke payload contains the following request metadata:

Имя свойстваProperty name НазначениеPurpose
type Тип запроса; должно быть invoke.Type of request; must be invoke.
name Тип команды, выданной службе.Type of command that is issued to your service. Будет composeExtension/fetchTask.Will be composeExtension/fetchTask.
from.id Идентификатор пользователя, отправившего запрос.ID of the user that sent the request.
from.name Имя пользователя, отправившего запрос.Name of the user that sent the request.
from.aadObjectId Идентификатор объекта Azure Active Directory пользователя, отправившего запрос.Azure Active Directory object id of the user that sent the request.
channelData.tenant.id Идентификатор клиента Azure Active Directory.Azure Active Directory tenant ID.
channelData.channel.id Идентификатор канала (если запрос был сделан в канале).Channel ID (if the request was made in a channel).
channelData.team.id Идентификатор группы (если запрос был сделан в канале).Team ID (if the request was made in a channel).
value.commandId Содержит идентификатор вызываемой команды.Contains the Id of the command that was invoked.
value.commandContext Контекст, который инициировал событие.The context that triggered the event. Будет compose.Will be compose.
value.context.theme Тема клиента пользователя, которая полезна для встроенного форматирования веб-представления.The user's client theme, useful for embedded web view formatting. Будет иметь default contrast или dark.Will be default, contrast or dark.

Пример запроса ФетчтаскExample fetchTask request

protected override async Task<MessagingExtensionActionResponse> OnTeamsMessagingExtensionFetchTaskAsync(ITurnContext<IInvokeActivity> turnContext, MessagingExtensionAction action, CancellationToken cancellationToken)
{
  //handle fetch task
}

Запрос начального вызова из сообщенияInitial invoke request from a message

Когда Bot вызывается из сообщения, а не из области создания или панели команд, value объект в исходном запросе будет содержать сведения о сообщении, из которого было вызвано расширение системы обмена сообщениями.When your bot is invoked from a message rather than the compose area or the command bar, the value object in the initial request will contain the details of the message your messaging extension was invoked from. Ниже приведен пример этого объекта.An example of this object is below. reactions Массивы mentions и массивы являются необязательными и не будут представлены, если в исходном сообщении нет реакции или упоминаний.The reactions and mentions arrays are optional, and will not be present if there are no reactions or mentions in the original message.

protected override async Task<MessagingExtensionActionResponse> OnTeamsMessagingExtensionFetchTaskAsync(ITurnContext<IInvokeActivity> turnContext, MessagingExtensionAction action, CancellationToken cancellationToken)
{
  var messageText = action.MessagePayload.Body.Content;
  var fromId = action.MessagePayload.From.User.Id;

  //finish handling the fetchTask
}

Ответ на ФетчтаскRespond to the fetchTask

Ответьте на запрос Invoke с task объектом, который содержит taskInfo объект со адаптивной картой или URL-адресом или простым строковым сообщением.Respond to the invoke request with a task object that contains either a taskInfo object with the adaptive card or web URL, or a simple string message.

Имя свойстваProperty name НазначениеPurpose
type Может быть либо continue представление формы, либо message простое всплывающее окно.Can be either continue to present a form, or message for a simple popup.
value Либо taskInfo объект для формы, либо сообщение string для сообщения.Either a taskInfo object for a form, or a string for a message.

Схема для объекта Таскинфо:The schema for the taskInfo object is:

Имя свойстваProperty name НазначениеPurpose
title Название модуля задачи.The title of the task module.
height Может быть либо целым числом (в пикселях) small, mediumлибо large,,.Can be either an integer (in pixels), or small, medium, large.
width Может быть либо целым числом (в пикселях) small, mediumлибо large,,.Can be either an integer (in pixels), or small, medium, large.
card Адаптивная карточка, определяющая форму (если она используется).The adaptive card defining the form (if using one).
url URL-адрес, который должен быть открыт в модуле задач как Внедренное представление веб-сайта.The URL to be opened inside of the task module as an embedded web view.
fallbackUrl Если клиент не поддерживает функцию модуля задач, этот URL-адрес открывается на вкладке браузера.If a client does not support the task module feature, this URL is opened in a browser tab.

С помощью адаптивной карточкиWith an adaptive card

При использовании адаптивной карты необходимо ответить на task объект с value объектом, содержащим адаптивную карточку.When using an adaptive card, you'll need to respond with a task object with the value object containing an adaptive card.

Пример ответа Фетчтаск с помощью адаптивной карточкиExample fetchTask response with an adaptive card

В этом примере используется пакет NuGet адаптивекардс в дополнение к пакету SDK для Bot Framework.This sample uses the AdaptiveCards NuGet package in addition to the Bot Framework SDK.

protected override async Task<MessagingExtensionActionResponse> OnTeamsMessagingExtensionFetchTaskAsync(ITurnContext<IInvokeActivity> turnContext, MessagingExtensionAction action, CancellationToken cancellationToken)
{
  string placeholder = "Not invoked from message";

  if (action.MessagePayload != null)
  {
      var messageText = action.MessagePayload.Body.Content;
      var fromId = action.MessagePayload.From.User.Id;
      placeholder = "Invoked from message";
  }

  var response = new MessagingExtensionActionResponse()
  {
    Task = new TaskModuleContinueResponse()
    {
      Value = new TaskModuleTaskInfo()
      {
        Height = "small",
        Width = "small",
        Title = "Example task module",
        Card = new Attachment()
        {
          ContentType = AdaptiveCard.ContentType,
          Content = new AdaptiveCard("1.0")
          {
            Body = new List<AdaptiveElement>()
            {
              new AdaptiveTextInput() { Id = "FormField1", Placeholder = placeholder},
              new AdaptiveTextInput() { Id = "FormField2", Placeholder = "FormField2"},
              new AdaptiveTextInput() { Id = "FormField3", Placeholder = "FormField3"},
            },
            Actions = new List<AdaptiveAction>()
            {
              new AdaptiveSubmitAction()
              {
                Type = AdaptiveSubmitAction.TypeName,
                Title = "Submit",
              },
            },
          },
        },
      },
    },
  };
  return response;
}

С внедренным представлением веб-сайтаWith an embedded web view

При использовании внедренного веб-представления необходимо ответить на task объект с value объектом, содержащим URL-адрес веб-формы, которую нужно загрузить.When using an embedded web view, you'll need to respond with a task object with the value object containing the URL to the web form you'd like to load. Домены любого URL-адреса, который вы хотите загрузить, должны быть validDomains включены в массив манифеста приложения.The domains of any URL you want to load must be included in the validDomains array in your app's manifest. В документации модуля задачи представлены полные сведения о создании внедренного веб-представления.See the task module documentation for complete information on building your embedded web view.

protected override async Task<MessagingExtensionActionResponse> OnTeamsMessagingExtensionFetchTaskAsync(ITurnContext<IInvokeActivity> turnContext, MessagingExtensionAction action, CancellationToken cancellationToken)
{
  string placeholder = "Not invoked from message";

  if (action.MessagePayload != null)
  {
      var messageText = action.MessagePayload.Body.Content;
      var fromId = action.MessagePayload.From.User.Id;
      placeholder = "Invoked from message";
  }

  var response = new MessagingExtensionActionResponse()
  {
    Task = new TaskModuleContinueResponse()
    {
      Value = new TaskModuleTaskInfo()
      {
        Height = "small",
        Width = "small",
        Title = "Example task module",
        Url = "https://contoso.com/msteams/taskmodules/newcustomer",
        },
      },
    },
  };
  return response;
}

Дальнейшие действияNext steps

Если вы разрешите пользователям отправку ответа из модуля задач, необходимо обработать действие отправки.If you allow your users to send a response back from the task module, you'll need to handle the submit action.

Дополнительные сведенияLearn more

Попробуйте это в кратком руководстве:Try it out in a quickstart: