Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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 | – |