Erstellen und Senden des AufgabenmodulsCreate and send the task module

Wichtig

Die Codebeispiele in diesem Abschnitt basieren auf 4,6 und höheren Versionen des bot Framework SDK.The code samples in this section are based on 4.6 and later versions of the Bot Framework SDK. Wenn Sie nach einer Dokumentation für frühere Versionen suchen, lesen Sie den Abschnitt Messaging Extensions-V3 SDK im Ordner Resources der Dokumentation.If you're looking for documentation for earlier versions, see the Messaging Extensions - v3 SDK section in the Resources folder of the documentation.

Wenn Sie Ihr Aufgabenmodul nicht mit Parametern auffüllen, die in Ihrem App-Manifest definiert sind, müssen Sie das Aufgabenmodul erstellen, das den Benutzern angezeigt werden soll.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. Sie können entweder eine Adaptive Karte oder eine eingebettete Webansicht verwenden.You can use either an Adaptive Card or an embedded web view.

Die anfängliche Invoke-AnforderungThe initial invoke request

Wenn Sie diese Methode verwenden, erhalten Sie Activity ein Objekt vom composeExtension/fetchTaskTyp, und Sie müssen mit einem task Objekt Antworten, das entweder die Adaptive Karte oder eine URL zur eingebetteten Webansicht enthält.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. Zusätzlich zu den Eigenschaften der standardmäßigen bot-Aktivität enthält die anfängliche Invoke-Nutzlast die folgenden Anforderungs Metadaten:In addition to the standard bot activity properties, the initial invoke payload contains the following request metadata:

EigenschaftennameProperty name ZweckPurpose
type Typ der Anforderung; muss sein invoke.Type of request; must be invoke.
name Der Typ des Befehls, der für den Dienst ausgestellt wird.Type of command that is issued to your service. Wird composeExtension/fetchTask.Will be composeExtension/fetchTask.
from.id Die ID des Benutzers, der die Anforderung gesendet hat.ID of the user that sent the request.
from.name Der Name des Benutzers, der die Anforderung gesendet hat.Name of the user that sent the request.
from.aadObjectId Azure Active Directory Objekt-ID des Benutzers, der die Anforderung gesendet hat.Azure Active Directory object id of the user that sent the request.
channelData.tenant.id Azure Active Directory Mandanten-ID.Azure Active Directory tenant ID.
channelData.channel.id Kanal-ID (wenn die Anforderung in einem Kanal erfolgt ist).Channel ID (if the request was made in a channel).
channelData.team.id Team-ID (wenn die Anforderung in einem Kanal erfolgt ist).Team ID (if the request was made in a channel).
value.commandId Enthält die ID des aufgerufenen Befehls.Contains the Id of the command that was invoked.
value.commandContext Der Kontext, der das Ereignis ausgelöst hat.The context that triggered the event. Wird compose.Will be compose.
value.context.theme Das Client Design des Benutzers, nützlich für die eingebettete Webansicht-Formatierung.The user's client theme, useful for embedded web view formatting. defaultIst contrast oder dark.Will be default, contrast or dark.

Beispiel für eine fetchTask-AnforderungExample fetchTask request

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

Anfängliche Invoke-Anforderung aus einer NachrichtInitial invoke request from a message

Wenn Ihr bot aus einer Nachricht anstatt aus dem verfassenbereich oder der Befehlsleiste aufgerufen wird, enthält value das Objekt in der anfänglichen Anforderung die Details der Nachricht, aus der Ihre Messaging-Erweiterung aufgerufen wurde.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. Ein Beispiel für dieses Objekt ist unten.An example of this object is below. Die reactions - mentions und-Arrays sind optional und werden nicht angezeigt, wenn in der ursprünglichen Nachricht keine Reaktionen oder Erwähnungen vorhanden sind.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
}

Antworten auf die fetchTaskRespond to the fetchTask

Antworten Sie auf die Invoke-Anforderung task mit einem Objekt, das taskInfo entweder ein Objekt mit der adaptiven Karte oder die weburl oder eine einfache Zeichenfolgennachricht enthält.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.

EigenschaftennameProperty name ZweckPurpose
type Kann entweder continue zum Darstellen eines Formulars oder message für ein einfaches Popup-Objekt sein.Can be either continue to present a form, or message for a simple popup.
value Entweder ein taskInfo Objekt für ein Formular oder ein string für eine Nachricht.Either a taskInfo object for a form, or a string for a message.

Das Schema für das taskInfo-Objekt lautet:The schema for the taskInfo object is:

EigenschaftennameProperty name ZweckPurpose
title Der Titel des Aufgabenmoduls.The title of the task module.
height Kann eine ganze Zahl (in Pixeln) oder small, medium, largesein.Can be either an integer (in pixels), or small, medium, large.
width Kann eine ganze Zahl (in Pixeln) oder small, medium, largesein.Can be either an integer (in pixels), or small, medium, large.
card Die Adaptive Karte, die das Formular definiert (sofern eine verwendet wird).The adaptive card defining the form (if using one).
url Die URL, die innerhalb des Aufgabenmoduls als eingebettete Webansicht geöffnet werden soll.The URL to be opened inside of the task module as an embedded web view.
fallbackUrl Wenn ein Client das Feature "Aufgabenmodul" nicht unterstützt, wird diese URL in einer Browserregister Karte geöffnet.If a client does not support the task module feature, this URL is opened in a browser tab.

Mit einer adaptiven KarteWith an adaptive card

Wenn Sie eine Adaptive Karte verwenden, müssen Sie mit einem task Objekt mit dem Objekt value Antworten, das eine Adaptive Karte enthält.When using an adaptive card, you'll need to respond with a task object with the value object containing an adaptive card.

Beispiel für eine fetchTask-Antwort mit einer adaptiven KarteExample fetchTask response with an adaptive card

In diesem Beispiel wird das AdaptiveCards-NuGet-Paket zusätzlich zum bot Framework SDK verwendet.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;
}

Mit einer eingebetteten WebansichtWith an embedded web view

Bei Verwendung einer eingebetteten Webansicht müssen Sie mit einem task Objekt mit dem value Objekt Antworten, das die URL zu dem Webformular enthält, das Sie laden möchten.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. Die Domänen einer beliebigen URL, die Sie laden möchten, müssen in dem validDomains Array im App-Manifest enthalten sein.The domains of any URL you want to load must be included in the validDomains array in your app's manifest. Ausführliche Informationen zum Erstellen Ihrer eingebetteten Webansicht finden Sie in der Dokumentation zum Aufgabenmodul .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;
}

Weitere SchritteNext steps

Wenn Sie zulassen, dass Ihre Benutzer eine Antwort vom Aufgabenmodul zurücksenden können, müssen Sie die Submit-Aktion behandeln.If you allow your users to send a response back from the task module, you'll need to handle the submit action.

Weitere InformationenLearn more

Testen Sie es in einem Schnellstart:Try it out in a quickstart: