Erstellen und Senden von Dialogen

Sie können ein modales Dialogfeld (in TeamsJS v1.x als Aufgabenmodul bezeichnet) mithilfe einer adaptiven Karte oder einer eingebetteten Webansicht erstellen. Zum Erstellen eines Dialogfelds müssen Sie den Prozess durchführen, der als anfängliche Aufrufanforderung bezeichnet wird. Dieses Dokument behandelt die anfängliche Aufrufanforderung, die Eigenschaften der Nutzlastaktivität, wenn ein Dialog aus einem 1:1-Chat, Gruppenchat, Kanal (neuer Beitrag), Kanal (Antwort auf Thread) und Befehlsfeld aufgerufen wird.

Hinweis

Wenn Sie das Dialogfeld nicht mit im App-Manifest definierten Parametern füllen, müssen Sie das Dialogfeld für Benutzer entweder mit einer adaptiven Karte oder einer eingebetteten Webansicht erstellen.

Hinweis

Agents bieten eine flexiblere, intelligentere und zukunftsfähigere Erfahrung, die umfangreichere Denkprozesse, eine einfachere Entwicklung und eine bessere Abstimmung mit den sich entwickelnden Teams und der Microsoft 365-Plattform ermöglicht. Es wird empfohlen, Agents zu untersuchen und zu erstellen.

Weitere Informationen finden Sie unter Erstellen deklarativer Agents und Build-Agents in Teams.

Wenn Sie über eine Bot-basierte Nachrichtenerweiterung verfügen, können Sie diese auch als Agent erweitern .

Die anfängliche Aufrufanforderung

Im Rahmen der anfänglichen Aufrufanforderung empfängt Ihr Dienst ein Activity-Objekt vom Typ composeExtensions/fetchTask, und Sie müssen mit einem task-Objekt antworten, das entweder eine adaptive Karte oder eine URL zur eingebetteten Webansicht enthält. Neben den standardmäßigen Bot-Aktivitätseigenschaften enthält die anfängliche Aufrufnutzlast die folgenden Anforderungsmetadaten:

Eigenschaftenname Zweck
type Anforderungstyp. Muss invoke sein.
name Art des Befehls, der für Ihren Dienst ausgegeben wird. Muss composeExtension/fetchTask sein.
from.id ID des Benutzers, der die Anforderung gesendet hat.
from.name Name des Benutzers, der die Anforderung gesendet hat.
from.aadObjectId Microsoft Entra-Objekt-ID des Benutzers, der die Anforderung gesendet hat.
channelData.tenant.id Microsoft Entra-Mandanten-ID.
channelData.channel.id Kanal-ID (wenn die Anforderung in einem Kanal erfolgt ist).
channelData.team.id Team-ID (wenn die Anforderung in einem Kanal erfolgt ist).
value.commandId Enthält die ID des Befehls, der aufgerufen wurde.
value.commandContext Der Kontext, der das Ereignis ausgelöst hat. Muss compose sein.
value.context.theme Das Clientdesign des Benutzers; nützlich für die Formatierung eingebetteter Webansichten. Muss default, contrast oder dark sein.

Beispiel

Der Code für die anfängliche Aufrufanforderung ist im folgenden Beispiel angegeben:

{
  "type": "invoke",
  "id": "f:bc319b1d-571a-194d-9ffb-11d7ab37c9ff",
  "from": {
    "id": "29:1aBjVi5MwCFfhPIV03E5uDdfpBFXp_2Yz-sjrvVg12oavg96cqpE_DiMhOpmN9zHeZpYbJcuUEKuSDy2AYWPz1A",
    "name": "Olo Brockhouse",
    "aadObjectId": "b130c271-d2eb-45f9-83ab-9eb3fe3788bc"
  }
  "channelData": {
    "tenant": {
      "id": "0d9b645f-597b-41f0-a2a3-ef103fbd91bb"
    },
    "source": {
      "name": "compose"
    }
  },
  "value": {
    "commandId": "Test",
    "commandContext": "compose",
    "requestId": "fe50f49e5c74440bb2ebf07f49e9553c",
    "context": {
      "theme": "default"
    }
  },
  "name": "composeExtension/fetchTask"

Eigenschaften von Nutzlastaktivitäten, wenn ein Dialog aus einem 1:1-Chat aufgerufen wird

Die Eigenschaften der Nutzlastaktivität beim Aufrufen eines Dialogs aus einem 1:1-Chat sind wie folgt aufgeführt:

Eigenschaftenname Zweck
type Anforderungstyp. Muss invoke sein.
name Art des Befehls, der für Ihren Dienst ausgegeben wird. Muss composeExtension/fetchTask sein.
from.id ID des Benutzers, der die Anforderung gesendet hat.
from.name Name des Benutzers, der die Anforderung gesendet hat.
from.aadObjectId Microsoft Entra-Objekt-ID des Benutzers, der die Anforderung gesendet hat.
channelData.tenant.id Microsoft Entra-Mandanten-ID.
channelData.source.name Der Quellname, von dem aus das Dialogfeld aufgerufen wird.
ChannelData.legacy. replyToId Ruft die ID der Nachricht ab, auf die diese Nachricht eine Antwort ist, oder legt sie fest.
value.commandId Enthält die ID des Befehls, der aufgerufen wurde.
value.commandContext Der Kontext, der das Ereignis ausgelöst hat. Muss compose sein.
value.context.theme Das Clientdesign des Benutzers; nützlich für die Formatierung eingebetteter Webansichten. Muss default, contrast oder dark sein.

Beispiel

Die Eigenschaften der Nutzlastaktivität beim Aufrufen eines Dialogs aus einem 1:1-Chat werden im folgenden Beispiel angegeben:

{
  "type": "invoke",
  "id": "f:bc319b1d-571a-194d-9ffb-11d7ab37c9ff",
  "from": {
    "id": "29:1aBjVi5MwCFfhPIV03E5uDdfpBFXp_2Yz-sjrvVg12oavg96cqpE_DiMhOpmN9zHeZpYbJcuUEKuSDy2AYWPz1A",
    "name": "Olo Brockhouse",
    "aadObjectId": "b130c271-d2eb-45f9-83ab-9eb3fe3788bc"
  }
  "channelData": {
    "tenant": {
      "id": "0d9b645f-597b-41f0-a2a3-ef103fbd91bb"
    },
    "source": {
      "name": "compose"
    }
  },
  "value": {
    "commandId": "Test",
    "commandContext": "compose",
    "requestId": "fe50f49e5c74440bb2ebf07f49e9553c",
    "context": {
      "theme": "default"
    }
  },
  "name": "composeExtension/fetchTask"
}

Eigenschaften von Nutzlastaktivitäten, wenn ein Dialogfeld aus einem Gruppenchat aufgerufen wird

Die Eigenschaften der Nutzlastaktivität beim Aufrufen eines Dialogfelds aus einem Gruppenchat sind wie folgt aufgelistet:

Eigenschaftenname Zweck
type Anforderungstyp. Muss invoke sein.
name Art des Befehls, der für Ihren Dienst ausgegeben wird. Muss composeExtension/fetchTask sein.
from.id ID des Benutzers, der die Anforderung gesendet hat.
from.name Name des Benutzers, der die Anforderung gesendet hat.
from.aadObjectId Microsoft Entra-Objekt-ID des Benutzers, der die Anforderung gesendet hat.
channelData.tenant.id Microsoft Entra-Mandanten-ID.
channelData.source.name Der Quellname, von dem aus das Dialogfeld aufgerufen wird.
ChannelData.legacy. replyToId Ruft die ID der Nachricht ab, auf die diese Nachricht eine Antwort ist, oder legt sie fest.
value.commandId Enthält die ID des Befehls, der aufgerufen wurde.
value.commandContext Der Kontext, der das Ereignis ausgelöst hat. Muss compose sein.
value.context.theme Das Clientdesign des Benutzers; nützlich für die Formatierung eingebetteter Webansichten. Muss default, contrast oder dark sein.

Beispiel

Die Eigenschaften der Nutzlastaktivität beim Aufrufen eines Dialogfelds aus einem Gruppenchat werden im folgenden Beispiel angegeben:

{
  "type": "invoke",
  "id": "f:bf72031f-a17e-f99c-48dc-5c0714950d87",
  "from": {
    "id": "29:1aBjVi5MwCFfhPIV03E5uDdfpBFXp_2Yz-sjrvVg12oavg96cqpE_DiMhOpmN9zHeZpYbJcuUEKuSDy2AYWPz1A",
    "name": "Olo Brockhouse",
    "aadObjectId": "b130c271-d2eb-45f9-83ab-9eb3fe3788bc"
  },
  "conversation": {
    "isGroup": true,
    "conversationType": "groupChat",
    "id": "19:d77be72390a1416e9644261e9064fa00@thread.skype",
    "tenantId": "0d9b645f-597b-41f0-a2a3-ef103fbd91bb"
  },
  "channelData": {
    "tenant": {
      "id": "0d9b645f-597b-41f0-a2a3-ef103fbd91bb"
    },
    "source": {
      "name": "compose"
    }
  },
  "value": {
    "commandId": "Test",
    "commandContext": "compose",
    "requestId": "213167a1e3b6428b93e186ea5407c759",
    "context": {
      "theme": "default"
    }
  },
  "name": "composeExtension/fetchTask"
}

Eigenschaften von Nutzlastaktivitäten, wenn ein Dialogfeld aus einem Besprechungschat aufgerufen wird

Die Eigenschaften der Nutzlastaktivität beim Aufrufen eines Dialogfelds aus einem Besprechungschat sind im folgenden Beispiel angegeben:

{
   "type": "invoke",
   "id": "f:4d271f11-4eed-622f-e820-6d82bf91692f",
   "channelId": "msteams",
   "from": {
      "id": "29:1yLsdbTM1UjxqqD8cjduNUCI1jm8xZaH3lx9u5JQ04t2bknuTCkP45TXdfROTOWk1LzN1AqTgFZUEqHIVGn_qUA",
      "name": "MOD Administrator",
      "aadObjectId": "ef16aa89-5b26-4a2c-aebb-761b551577c0"
   },
   "conversation": {
      "tenantId": "c9f9aafd-64ac-4f38-8e05-12feba3fb090",
      "id": "19:meeting_NTk4ZDY4ZmYtOWEzZS00OTRkLThhY2EtZmUzZmUzMDQyM2M0@thread.v2",
      "name": "Test meeting"
   },   
   "channelData": {
      "tenant": {
         "id": "c9f9aafd-64ac-4f38-8e05-12feba3fb090"
      },
      "source": {
         "name": "compose"
      },
      "meeting": {
         "id": "MCMxOTptZWV0aW5nX05UazRaRFk0Wm1ZdE9XRXpaUzAwT1RSa0xUaGhZMkV0Wm1VelptVXpNRFF5TTJNMEB0aHJlYWQudjIjMA=="
      }
   },
   "value": {
      "commandId": "Test",
      "commandContext": "compose",
      "requestId": "c46a6b53573f42b5bc801716e5ccc960",
      "context": {
         "theme": "default"
      }
   },
   "name": "composeExtension/fetchTask",
}

Eigenschaften der Nutzlastaktivität beim Aufrufen eines Dialogfelds aus einem Kanal (neuer Beitrag)

Die Eigenschaften der Nutzlastaktivität beim Aufrufen eines Dialogfelds aus einem Kanal (neuer Beitrag) sind wie folgt aufgeführt:

Eigenschaftenname Zweck
type Anforderungstyp. Muss invoke sein.
name Art des Befehls, der für Ihren Dienst ausgegeben wird. Muss composeExtension/fetchTask sein.
from.id ID des Benutzers, der die Anforderung gesendet hat.
from.name Name des Benutzers, der die Anforderung gesendet hat.
from.aadObjectId Microsoft Entra-Objekt-ID des Benutzers, der die Anforderung gesendet hat.
channelData.tenant.id Microsoft Entra-Mandanten-ID.
channelData.channel.id Kanal-ID (wenn die Anforderung in einem Kanal erfolgt ist).
channelData.team.id Team-ID (wenn die Anforderung in einem Kanal erfolgt ist).
channelData.source.name Der Quellname, von dem aus das Dialogfeld aufgerufen wird.
ChannelData.legacy. replyToId Ruft die ID der Nachricht ab, auf die diese Nachricht eine Antwort ist, oder legt sie fest.
value.commandId Enthält die ID des Befehls, der aufgerufen wurde.
value.commandContext Der Kontext, der das Ereignis ausgelöst hat. Muss compose sein.
value.context.theme Das Clientdesign des Benutzers; nützlich für die Formatierung eingebetteter Webansichten. Muss default, contrast oder dark sein.

Beispiel

Die Eigenschaften der Nutzlastaktivität beim Aufrufen eines Dialogfelds aus einem Kanal (neuer Beitrag) werden im folgenden Beispiel angegeben:

{
  "type": "invoke",
  "id": "f:a5fbb109-c989-c449-ee83-71ac99919d4b",
  "from": {
    "id": "29:1aBjVi5MwCFfhPIV03E5uDdfpBFXp_2Yz-sjrvVg12oavg96cqpE_DiMhOpmN9zHeZpYbJcuUEKuSDy2AYWPz1A",
    "name": "Olo Brockhouse",
    "aadObjectId": "b130c271-d2eb-45f9-83ab-9eb3fe3788bc"
  },
  "conversation": {
    "isGroup": true,
    "conversationType": "channel",
    "id": "19:6decf54d86d945e4b3924b63a9161a78@thread.skype",
    "name": "parsable",
    "tenantId": "0d9b645f-597b-41f0-a2a3-ef103fbd91bb"
  },
  "channelData": {
    "channel": {
      "id": "19:6decf54d86d945e4b3924b63a9161a78@thread.skype"
    },
    "team": {
      "id": "19:acca514e83cb497e960e0b014d405336@thread.skype"
    },
    "tenant": {
      "id": "0d9b645f-597b-41f0-a2a3-ef103fbd91bb"
    },
    "source": {
      "name": "compose"
    }
  },
  "value": {
    "commandId": "Test",
    "commandContext": "compose",
    "requestId": "5336640edc7748b28ce2df43f5b45963",
    "context": {
      "theme": "default"
    }
  },
  "name": "composeExtension/fetchTask"
}

Eigenschaften der Nutzlastaktivität beim Aufrufen eines Dialogfelds aus einem Kanal (Antwort auf Thread)

Die Eigenschaften der Nutzlastaktivität beim Aufrufen eines Dialogfelds aus einem Kanal (Antwort auf den Thread) sind wie folgt aufgelistet:

Eigenschaftenname Zweck
type Anforderungstyp. Muss invoke sein.
name Art des Befehls, der für Ihren Dienst ausgegeben wird. Muss composeExtension/fetchTask sein.
from.id ID des Benutzers, der die Anforderung gesendet hat.
from.name Name des Benutzers, der die Anforderung gesendet hat.
from.aadObjectId Microsoft Entra-Objekt-ID des Benutzers, der die Anforderung gesendet hat.
channelData.tenant.id Microsoft Entra-Mandanten-ID.
channelData.channel.id Kanal-ID (wenn die Anforderung in einem Kanal erfolgt ist).
channelData.team.id Team-ID (wenn die Anforderung in einem Kanal erfolgt ist).
channelData.source.name Der Quellname, von dem aus das Dialogfeld aufgerufen wird.
ChannelData.legacy. replyToId Ruft die ID der Nachricht ab, auf die diese Nachricht eine Antwort ist, oder legt sie fest.
value.commandId Enthält die ID des Befehls, der aufgerufen wurde.
value.commandContext Der Kontext, der das Ereignis ausgelöst hat. Muss compose sein.
value.context.theme Das Clientdesign des Benutzers; nützlich für die Formatierung eingebetteter Webansichten. Muss default, contrast oder dark sein.

Beispiel

Die Eigenschaften der Nutzlastaktivität beim Aufrufen eines Dialogfelds aus einem Kanal (Antwort auf den Thread) werden im folgenden Beispiel angegeben:

{
  "type": "invoke",
  "id": "f:19ccc884-c792-35ef-2f40-d0ff43dcca71",
  "from": {
    "id": "29:1aBjVi5MwCFfhPIV03E5uDdfpBFXp_2Yz-sjrvVg12oavg96cqpE_DiMhOpmN9zHeZpYbJcuUEKuSDy2AYWPz1A",
    "name": "Olo Brockhouse",
    "aadObjectId": "b130c271-d2eb-45f9-83ab-9eb3fe3788bc"
  },
  "conversation": {
    "isGroup": true,
    "conversationType": "channel",
    "id": "19:6decf54d86d945e4b3924b63a9161a78@thread.skype;messageid=1611060744833",
    "name": "parsable",
    "tenantId": "0d9b645f-597b-41f0-a2a3-ef103fbd91bb"
  },
  "channelData": {
    "channel": {
      "id": "19:6decf54d86d945e4b3924b63a9161a78@thread.skype"
    },
    "team": {
      "id": "19:acca514e83cb497e960e0b014d405336@thread.skype"
    },
    "tenant": {
      "id": "0d9b645f-597b-41f0-a2a3-ef103fbd91bb"
    },
    "source": {
      "name": "compose"
    }
  },
  "value": {
    "commandId": "TEst",
    "commandContext": "message",
    "requestId": "7f7d22efe5414818becebcec649a7912",
    "messagePayload": {
      "linkToMessage": "https://teams.microsoft.com/l/message/19:6decf54d86d945e4b3924b63a9161a78@thread.skype/1611060744833",
      "id": "1611060744833",
      "replyToId": null,
      "createdDateTime": "2021-01-19T12:52:24.833Z",
      "lastModifiedDateTime": null,
      "deleted": false,
      "summary": null,
      "importance": "normal",
      "locale": "en-us",
      "body": {
        "contentType": "html",
        "content": "<div><div><at id=\"0\">Testing outgoing Webhook-Nikitha</at> - Hi</div>\n</div>"
      },
      "from": {
        "device": null,
        "conversation": null,
        "user": {
          "userIdentityType": "aadUser",
          "id": "b130c271-d2eb-45f9-83ab-9eb3fe3788bc",
          "displayName": "Olo Brockhouse"
        },
        "application": null
      },
      "reactions": [],
      "mentions": [
        {
          "id": 0,
          "mentionText": "Testing outgoing Webhook-Nikitha",
          "mentioned": {
            "device": null,
            "conversation": null,
            "user": null,
            "application": {
              "applicationIdentityType": "webhook",
              "id": "b8c1c68c-e290-4bdd-81c3-266f310751dc",
              "displayName": "Testing outgoing Webhook-Nikitha"
            }
          }
        }
      ],
      "attachments": []
    },
    "context": {
      "theme": "default"
    }
  },
  "name": "composeExtension/fetchTask"
}

Eigenschaften von Nutzlastaktivitäten, wenn ein Dialogfeld über ein Befehlsfeld aufgerufen wird

Die Eigenschaften der Nutzlastaktivität beim Aufrufen eines Dialogfelds über ein Befehlsfeld sind wie folgt aufgelistet:

Eigenschaftenname Zweck
type Anforderungstyp. Muss invoke sein.
name Art des Befehls, der für Ihren Dienst ausgegeben wird. Muss composeExtension/fetchTask sein.
from.id ID des Benutzers, der die Anforderung gesendet hat.
from.name Name des Benutzers, der die Anforderung gesendet hat.
from.aadObjectId Microsoft Entra-Objekt-ID des Benutzers, der die Anforderung gesendet hat.
channelData.tenant.id Microsoft Entra-Mandanten-ID.
channelData.source.name Der Quellname, von dem aus das Dialogfeld aufgerufen wird.
value.commandId Enthält die ID des Befehls, der aufgerufen wurde.
value.commandContext Der Kontext, der das Ereignis ausgelöst hat. Muss compose sein.
value.context.theme Das Clientdesign des Benutzers; nützlich für die Formatierung eingebetteter Webansichten. Muss default, contrast oder dark sein.

Beispiel

Die Eigenschaften der Nutzlastaktivität beim Aufrufen eines Dialogfelds über ein Befehlsfeld werden im folgenden Beispiel angegeben:

{
  "type": "invoke",
  "id": "f:172560f1-95f9-3189-edb2-b7612cd1a3cd",
    "id": "29:1aBjVi5MwCFfhPIV03E5uDdfpBFXp_2Yz-sjrvVg12oavg96cqpE_DiMhOpmN9zHeZpYbJcuUEKuSDy2AYWPz1A",
    "name": "Olo Brockhouse",
    "aadObjectId": "b130c271-d2eb-45f9-83ab-9eb3fe3788bc"
  },
  "conversation": {
    "isGroup": true,
    "conversationType": "channel",
    "id": "19:6decf54d86d945e4b3924b63a9161a78@thread.skype",
    "name": "parsable",
    "tenantId": "0d9b645f-597b-41f0-a2a3-ef103fbd91bb"
  },
  "channelData": {
    "channel": {
      "id": "19:6decf54d86d945e4b3924b63a9161a78@thread.skype"
    },
    "team": {
      "id": "19:acca514e83cb497e960e0b014d405336@thread.skype"
    },
    "tenant": {
      "id": "0d9b645f-597b-41f0-a2a3-ef103fbd91bb"
    },
    "source": {
      "name": "compose"
    }
  },
  "value": {
    "commandId": "TEst",
    "commandContext": "compose",
    "requestId": "d2ce690cdc2b4920a538e75882610a30",
    "context": {
      "theme": "default"
    }
  },
  "name": "composeExtension/fetchTask"
}

Beispiel

Der folgende Codeabschnitt ist ein Beispiel für eine fetchTask-Anforderung:

using Microsoft.Teams.Apps.MessageExtensions;

// ...

teams.OnFetchTask(async (context, cancellationToken) =>
{
    // Handle fetch task
  MessageExtensionAction? action = context.Activity.Value;
  string? commandId = action?.CommandId;

  return MessageExtensionActionResponse.CreateBuilder().Build();
});

Anfängliche Aufrufanforderung aus einer Nachricht

Wenn Ihr Bot aus einer Nachricht aufgerufen wird, muss das value Objekt in der anfänglichen Aufrufanforderung die Details der Nachricht enthalten, aus der Ihre Nachrichtenerweiterung aufgerufen wird. Die Arrays reactions und mentions sind optional und nicht vorhanden, wenn die ursprüngliche Nachricht keine Reaktionen oder Erwähnungen enthält. Der folgende Abschnitt ist ein Beispiel für das value-Objekt:

using Microsoft.Teams.Apps.MessageExtensions;

// ...

teams.OnFetchTask(async (context, cancellationToken) =>
{
  MessageExtensionAction? action = context.Activity.Value;

  var messageText = action?.MessagePayload?.Body?.Content;
  var fromId = action?.MessagePayload?.From?.User?.Id;

  return MessageExtensionActionResponse.CreateBuilder().Build();
});

Reagieren auf fetchTask

Antworten Sie auf die Aufrufanforderung mit einem task-Objekt, das ein taskInfo-Objekt mit der adaptiven Karte oder einer Web-URL oder eine einfache Zeichenfolgennachricht enthält.

Eigenschaftenname Zweck
type Kann entweder continue zum Präsentieren eines Formulars oder message für ein einfaches Popup verwendet werden.
value Entweder ein taskInfo-Objekt für ein Formular oder ein string-Objekt für eine Nachricht.

Das Schema für das taskInfo-Objekt ist wie folgt:

Eigenschaftenname Zweck
title Der Titel des Dialogfeldes.
height Muss entweder eine ganze Zahl (in Pixel) sein oder small, medium oder large lauten.
width Muss entweder eine ganze Zahl (in Pixel) sein oder small, medium oder large lauten.
card Die adaptive Karte, die das Formular definiert (falls verwendet).
url Die URL, die innerhalb des Dialogfelds als eingebettete Webansicht geöffnet werden soll.
fallbackUrl Wenn ein Client die Dialogfunktion nicht unterstützt, wird diese URL in einem Browsertab geöffnet.

Reagieren auf fetchTask mit einer adaptiven Karte

Wenn Sie eine adaptive Karte verwenden, müssen Sie mit einem task Objekt antworten, wobei das value Objekt eine adaptive Karte enthält.

Beispiel

Der folgende Codeabschnitt ist ein Beispiel für die fetchTask Antwort mit einer adaptiven Karte:

In diesem Beispiel wird das Paket Microsoft.Teams.Cards verwendet, das im Teams SDK enthalten ist.

using System.Text.Json;
using Microsoft.Teams.Apps.MessageExtensions;
using Microsoft.Teams.Apps.Schema;
using Microsoft.Teams.Apps.TaskModules;
using Microsoft.Teams.Cards;

// ...

teams.OnFetchTask(async (context, cancellationToken) =>
{
    string placeholder = "Not invoked from message";

  MessageExtensionAction? action = context.Activity.Value;

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

    var card = new AdaptiveCard
    {
        Version = "1.5",
        Body = new List<CardElement>
        {
            new TextInput { Id = "FormField1", Placeholder = placeholder },
            new TextInput { Id = "FormField2", Placeholder = "FormField2" },
            new TextInput { Id = "FormField3", Placeholder = "FormField3" }
        },
        Actions = new List<Cards.Action>
        {
            new SubmitAction { Title = "Submit" }
        }
    };

    TeamsAttachment attachment = TeamsAttachment.CreateBuilder()
      .WithAdaptiveCard(JsonSerializer.SerializeToElement(card))
      .Build();

    return MessageExtensionActionResponse.CreateBuilder()
      .WithTask(TaskModuleResponse.CreateBuilder()
        .WithType(TaskModuleResponseTypes.Continue)
        .WithTitle("Example dialog")
        .WithHeight(TaskModuleSizes.Small)
        .WithWidth(TaskModuleSizes.Small)
        .WithCard(attachment))
      .Build();
});

Erstellen eines Dialogfelds mit einer eingebetteten Webansicht

Wenn Sie eine eingebettete Webansicht verwenden, müssen Sie mit einem task-Objekt mit dem value-Objekt antworten, das die URL zu dem Webformular enthält, das geladen werden soll. Die Domänen aller URLs, die geladen werden sollen, müssen im validDomains-Array im Manifest Ihrer App enthalten sein. Weitere Informationen zum Erstellen einer eingebetteten Webansicht finden Sie in der Dialogdokumentation.

using Microsoft.Teams.Apps.MessageExtensions;
using Microsoft.Teams.Apps.TaskModules;

// ...

teams.OnFetchTask(async (context, cancellationToken) =>
{
    await Task.CompletedTask;

    return MessageExtensionActionResponse.CreateBuilder()
        .WithTask(TaskModuleResponse.CreateBuilder()
            .WithType(TaskModuleResponseTypes.Continue)
            .WithTitle("Example dialog")
            .WithHeight(TaskModuleSizes.Small)
            .WithWidth(TaskModuleSizes.Small)
            .WithUrl("https://contoso.com/msteams/taskmodules/newcustomer"))
        .Build();
});

Anfordern der Installation Ihres Unterhaltungs-Bots

Wenn die App einen Unterhaltungsbot enthält, installieren Sie den Bot in der Unterhaltung, und laden Sie dann das Dialogfeld. Der Bot ist nützlich, um zusätzlichen Kontext für den Dialog zu erhalten. Ein Beispiel für dieses Szenario ist das Abrufen einer Liste zum Befüllen eines Personenauswahl-Steuerelements oder der Liste der Kanäle in einem Team.

Wenn die Nachrichtenerweiterung den composeExtensions/fetchTask-Aufruf empfängt, überprüfen Sie, ob der Bot im aktuellen Kontext installiert ist, um den Fluss zu erleichtern. Überprüfen Sie z. B. den Fluss durch das Abrufen einer Liste. Wenn der Bot nicht installiert ist, geben Sie eine adaptive Karte mit einer Aktion zurück, die den Benutzer auffordert, den Bot zu installieren. Der Benutzer muss über die Berechtigung zum Installieren der Apps an diesem Speicherort für die Überprüfung verfügen. Wenn die App-Installation fehlschlägt, erhält der Benutzer eine Nachricht, in der er aufgefordert wird, sich an den Administrator zu wenden.

Beispiel

Der folgende Codeabschnitt ist ein Beispiel für die Antwort:

{
  "type": "AdaptiveCard",
  "body": [
    {
      "type": "TextBlock",
      "text": "Looks like you haven't used Disco in this team/chat"
    }
  ],
  "actions": [
    {
      "type": "Action.Submit",
      "title": "Continue",
      "data": {
        "msteams": {
          "justInTimeInstall": true
        }
      }
    }
  ],
  "version": "1.0"
}

Nach der Installation des Unterhaltungs-Bots folgt eine weitere Aufrufnachricht mit name = composeExtensions/submitAction und value.data.msteams.justInTimeInstall = true.

Beispiel

Der folgende Codeabschnitt ist ein Beispiel für die Aufgabenantwort auf den Aufruf:

{
  "value": {
    "commandId": "giveKudos",
    "commandContext": "compose",
    "context": {
      "theme": "default"
    },
    "data": {
      "msteams": {
        "justInTimeInstall": true
      }
    }
  },
  "conversation": {
    "id": "19:7705841b240044b297123ad7f9c99217@thread.skype"
  },
  "name": "composeExtension/submitAction",
  "imdisplayname": "Bob Smith"
}

Die Aufgabenantwort auf den Aufruf muss der des installierten Bots ähneln.

Beispiel

Der folgende Codeabschnitt ist ein Beispiel für die Just-in-Time-Installation einer App mit adaptiver Karte:

using Microsoft.Teams.Cards;

// ...

var installCard = new AdaptiveCard
{
    Body = new List<CardElement>
    {
        new TextBlock("Looks like you haven't used Disco in this team/chat")
    },
    Actions = new List<Cards.Action>
    {
        new SubmitAction
        {
            Title = "Continue",
            Data = new Dictionary<string, object>
            {
                ["msteams"] = new Dictionary<string, object>
                {
                    ["justInTimeInstall"] = true
                }
            }
        }
    }
};

Codebeispiel

Beispielname Beschreibung .NET Node.js Python Manifest
Teams-Nachrichtenerweiterungen – Aktion Dieses Beispiel zeigt, wie Action-Based Messaging-Erweiterungen für Microsoft Teams erstellt werden, mit denen Benutzer Inhalte interaktiv erstellen können. Es bietet Bots, Nachrichtenerweiterungen und eine nahtlose Integration in Benutzereingaben für eine erweiterte Funktionalität. View View View View
Vorschau der Aktion für die Nachrichtenerweiterung Diese Beispiel-App veranschaulicht, wie Sie Aktionsvorschauen in Teams-Messagingerweiterungen verwenden können, sodass Benutzer Karten aus Eingaben in einem Aufgabenmodul erstellen können. Es zeigt Bot-Interaktionen, die die Benutzerbindung verbessern, indem sie Benutzern Nachrichten zuordnen. View View – View
Teams Nachrichtenerweiterungen – Suche Dieses Beispiel zeigt, wie eine Messaging-Erweiterung in Microsoft Teams erstellt wird, mit der Benutzer Suchvorgänge durchführen und Ergebnisse abrufen können. View View View –

Nächster Schritt

Siehe auch