Создание и отправка диалоговых окон
Важно!
Примеры кода в этом разделе основаны на версии 4.6 и более поздних версиях пакета SDK Bot Framework. Если вы ищете документацию по более ранним версиям, см. раздел Расширения сообщений — пакет SDK версии 3 в папке Resources документации.
Модальное диалоговое окно (называемое модулем задач в TeamsJS версии 1.x) можно создать с помощью адаптивной карточки или встроенного веб-представления. Чтобы создать диалоговое окно, необходимо выполнить процесс, называемый первоначальным запросом вызова. В этом документе рассматриваются начальный запрос на вызов, свойства действия полезных данных при вызове диалогового окна из чата 1:1, групповой чат, канал (новая запись), канал (ответить на поток) и командное поле.
Примечание.
Если вы не заполняете диалоговое окно параметрами, определенными в манифесте приложения, необходимо создать диалоговое окно для пользователей с адаптивной карточкой или внедренным веб-представлением.
Запрос начального вызова
В процессе запроса начального вызова ваша служба получает объект Activity
типа composeExtensions/fetchTask
, и вы должны ответить с использованием объекта task
, содержащего адаптивную карточку или URL-адрес внедренного веб-представления. Вместе со стандартными свойствами действий бота полезные данные начального вызова содержат следующие метаданные запроса.
Имя свойства | Назначение |
---|---|
type |
Тип запроса. Должно применяться значение invoke . |
name |
Тип команды, выпущенной для вашей службы. Должно применяться значение composeExtension/fetchTask . |
from.id |
Идентификатор пользователя, отправившего запрос. |
from.name |
Имя пользователя, отправившего запрос. |
from.aadObjectId |
Идентификатор объекта Microsoft Entra пользователя, отправляющего запрос. |
channelData.tenant.id |
Идентификатор клиента Microsoft Entra. |
channelData.channel.id |
Идентификатор канала (если запрос был выполнен в канале). |
channelData.team.id |
Идентификатор команды (если запрос был выполнен в канале). |
value.commandId |
Содержит идентификатор вызванной команды. |
value.commandContext |
Контекст, инициировавший событие. Должно применяться значение compose . |
value.context.theme |
Тема клиента пользователя. Удобно при форматировании внедренного веб-представления. Должно применяться значение default , contrast или dark . |
Пример
Код запроса начального вызова приведен в следующем примере.
{
"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"
Свойства действия полезных данных при вызове диалогового окна из чата 1:1
Свойства действия полезных данных при вызове диалогового окна из чата 1:1 перечислены следующим образом:
Имя свойства | Назначение |
---|---|
type |
Тип запроса. Должно применяться значение invoke . |
name |
Тип команды, выпущенной для вашей службы. Должно применяться значение composeExtension/fetchTask . |
from.id |
Идентификатор пользователя, отправившего запрос. |
from.name |
Имя пользователя, отправившего запрос. |
from.aadObjectId |
Идентификатор объекта Microsoft Entra пользователя, отправляющего запрос. |
channelData.tenant.id |
Идентификатор клиента Microsoft Entra. |
channelData.source.name |
Имя источника, из которого вызывается диалоговое окно. |
ChannelData.legacy. replyToId |
Возвращает или устанавливает идентификатор сообщения, ответом на которое является данное сообщение. |
value.commandId |
Содержит идентификатор вызванной команды. |
value.commandContext |
Контекст, инициировавший событие. Должно применяться значение compose . |
value.context.theme |
Тема клиента пользователя. Удобно при форматировании внедренного веб-представления. Должно применяться значение default , contrast или dark . |
Пример
Свойства действия полезных данных при вызове диалогового окна из чата 1:1 приведены в следующем примере:
{
"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"
}
Свойства действия полезных данных при вызове диалогового окна из группового чата
Свойства действия полезных данных при вызове диалогового окна из группового чата перечислены следующим образом:
Имя свойства | Назначение |
---|---|
type |
Тип запроса. Должно применяться значение invoke . |
name |
Тип команды, выпущенной для вашей службы. Должно применяться значение composeExtension/fetchTask . |
from.id |
Идентификатор пользователя, отправившего запрос. |
from.name |
Имя пользователя, отправившего запрос. |
from.aadObjectId |
Идентификатор объекта Microsoft Entra пользователя, отправляющего запрос. |
channelData.tenant.id |
Идентификатор клиента Microsoft Entra. |
channelData.source.name |
Имя источника, из которого вызывается диалоговое окно. |
ChannelData.legacy. replyToId |
Возвращает или устанавливает идентификатор сообщения, ответом на которое является данное сообщение. |
value.commandId |
Содержит идентификатор вызванной команды. |
value.commandContext |
Контекст, инициировавший событие. Должно применяться значение compose . |
value.context.theme |
Тема клиента пользователя. Удобно при форматировании внедренного веб-представления. Должно применяться значение default , contrast или dark . |
Пример
Свойства действия полезных данных при вызове диалогового окна из группового чата приведены в следующем примере:
{
"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"
}
Свойства действия полезных данных при вызове диалогового окна из чата собрания
Свойства действия полезных данных при вызове диалогового окна из чата собрания приведены в следующем примере:
{
"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",
}
Свойства действия полезных данных при вызове диалогового окна из канала (новая запись)
Свойства действия полезных данных при вызове диалогового окна из канала (новая запись) перечислены следующим образом:
Имя свойства | Назначение |
---|---|
type |
Тип запроса. Должно применяться значение invoke . |
name |
Тип команды, выпущенной для вашей службы. Должно применяться значение composeExtension/fetchTask . |
from.id |
Идентификатор пользователя, отправившего запрос. |
from.name |
Имя пользователя, отправившего запрос. |
from.aadObjectId |
Идентификатор объекта Microsoft Entra пользователя, отправляющего запрос. |
channelData.tenant.id |
Идентификатор клиента Microsoft Entra. |
channelData.channel.id |
Идентификатор канала (если запрос был выполнен в канале). |
channelData.team.id |
Идентификатор команды (если запрос был выполнен в канале). |
channelData.source.name |
Имя источника, из которого вызывается диалоговое окно. |
ChannelData.legacy. replyToId |
Возвращает или устанавливает идентификатор сообщения, ответом на которое является данное сообщение. |
value.commandId |
Содержит идентификатор вызванной команды. |
value.commandContext |
Контекст, инициировавший событие. Должно применяться значение compose . |
value.context.theme |
Тема клиента пользователя. Удобно при форматировании внедренного веб-представления. Должно применяться значение default , contrast или dark . |
Пример
Свойства действия полезных данных при вызове диалогового окна из канала (новая запись) приведены в следующем примере:
{
"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"
}
Свойства действия полезных данных при вызове диалогового окна из канала (ответ на поток)
Свойства действия полезных данных при вызове диалогового окна из канала (ответ на поток) перечислены следующим образом:
Имя свойства | Назначение |
---|---|
type |
Тип запроса. Должно применяться значение invoke . |
name |
Тип команды, выпущенной для вашей службы. Должно применяться значение composeExtension/fetchTask . |
from.id |
Идентификатор пользователя, отправившего запрос. |
from.name |
Имя пользователя, отправившего запрос. |
from.aadObjectId |
Идентификатор объекта Microsoft Entra пользователя, отправляющего запрос. |
channelData.tenant.id |
Идентификатор клиента Microsoft Entra. |
channelData.channel.id |
Идентификатор канала (если запрос был выполнен в канале). |
channelData.team.id |
Идентификатор команды (если запрос был выполнен в канале). |
channelData.source.name |
Имя источника, из которого вызывается диалоговое окно. |
ChannelData.legacy. replyToId |
Возвращает или устанавливает идентификатор сообщения, ответом на которое является данное сообщение. |
value.commandId |
Содержит идентификатор вызванной команды. |
value.commandContext |
Контекст, инициировавший событие. Должно применяться значение compose . |
value.context.theme |
Тема клиента пользователя. Удобно при форматировании внедренного веб-представления. Должно применяться значение default , contrast или dark . |
Пример
Свойства действия полезных данных при вызове диалогового окна из канала (ответ на поток) приведены в следующем примере:
{
"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"
}
Свойства действия полезных данных при вызове диалогового окна из командного окна
Свойства действия полезных данных при вызове диалогового окна из командного окна перечислены следующим образом:
Имя свойства | Назначение |
---|---|
type |
Тип запроса. Должно применяться значение invoke . |
name |
Тип команды, выпущенной для вашей службы. Должно применяться значение composeExtension/fetchTask . |
from.id |
Идентификатор пользователя, отправившего запрос. |
from.name |
Имя пользователя, отправившего запрос. |
from.aadObjectId |
Идентификатор объекта Microsoft Entra пользователя, отправляющего запрос. |
channelData.tenant.id |
Идентификатор клиента Microsoft Entra. |
channelData.source.name |
Имя источника, из которого вызывается диалоговое окно. |
value.commandId |
Содержит идентификатор вызванной команды. |
value.commandContext |
Контекст, инициировавший событие. Должно применяться значение compose . |
value.context.theme |
Тема клиента пользователя. Удобно при форматировании внедренного веб-представления. Должно применяться значение default , contrast или dark . |
Пример
Свойства действия полезных данных при вызове диалогового окна из командного поля приведены в следующем примере:
{
"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"
}
Пример
Следующий раздел кода является примером запроса fetchTask
.
protected override async Task<MessagingExtensionActionResponse> OnTeamsMessagingExtensionFetchTaskAsync(ITurnContext<IInvokeActivity> turnContext, MessagingExtensionAction action, CancellationToken cancellationToken)
{
//handle fetch task
}
Запрос начального вызова из сообщения
При вызове бота из сообщения value
объект в исходном запросе на вызов должен содержать сведения о сообщении, из чего вызывается расширение сообщения. Массивы reactions
и mentions
являются необязательными. Они отсутствуют, если в исходном сообщении нет реакций или упоминаний.
В следующем разделе представлен пример объекта value
.
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
}
Отклик на fetchTask
Отвечайте на запрос вызова с использованием объекта task
, который содержит либо объект taskInfo
с адаптивной карточкой или URL-адресом веб-страницы, либо простое строковое сообщение.
Имя свойства | Назначение |
---|---|
type |
Может быть как для представления формы, так continue и message для простого всплывающего окна. |
value |
Объект taskInfo для формы или string для сообщения. |
Схема для объекта taskInfo:
Имя свойства | Назначение |
---|---|
title |
Заголовок диалогового окна. |
height |
Должно быть целым числом (в пикселях) или иметь значение small , medium , large . |
width |
Должно быть целым числом (в пикселях) или иметь значение small , medium , large . |
card |
Адаптивная карточка, определяющая форму (если она используется). |
url |
URL-адрес, который открывается внутри диалогового окна в виде внедренного веб-представления. |
fallbackUrl |
Если клиент не поддерживает функцию диалогового окна, этот URL-адрес открывается на вкладке браузера. |
Отклик на fetchTask с помощью адаптивной карточки
При использовании адаптивной карточки необходимо ответить task
объектом, value
содержащим адаптивную карточку.
Пример
В следующем разделе кода приведен пример fetchTask
ответа с помощью адаптивной карточки:
В этом примере в дополнение к пакету SDK Bot Framework используется пакет NuGet AdaptiveCards.
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 dialog",
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;
}
Создание диалогового окна с внедренным веб-представлением
При использовании внедренного веб-представления необходимо ответить объектом task
с объектом value
, содержащим URL-адрес веб-формы, которую требуется загрузить. Домены любого URL-адреса, который нужно загрузить, требуется включить в массив validDomains
манифеста приложения. Дополнительные сведения о создании внедренного веб-представления см. в документации по диалогу.
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 dialog",
Url = "https://contoso.com/msteams/taskmodules/newcustomer",
},
},
},
};
return response;
}
Запрос на установку бота для бесед
Если приложение содержит бота для общения, установите бот в беседе, а затем загрузите диалоговое окно. Бот полезен для получения дополнительного контекста для диалогового окна. Примером этого сценария является получение состава для заполнения элемента выбора людей или списка каналов в команде.
Когда расширение для сообщений получит вызов composeExtensions/fetchTask
, проверьте, установлен ли бот в текущем контексте, чтобы упростить поток. Например, проверьте поток с помощью вызова получения состава. Если бот не установлен, верните адаптивную карточку с действием, которое запрашивает у пользователя установку бота. У пользователя должно быть разрешение на установку приложений в этом расположении для проверки. Если установка приложения завершается неудачно, пользователь получает сообщение, предлагающее ему связаться с администратором.
Пример
Следующий раздел кода является примером отклика.
{
"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"
}
После установки бота для бесед он получает еще одно сообщение вызова с name = composeExtensions/submitAction
и value.data.msteams.justInTimeInstall = true
.
Пример
Следующий раздел кода является примером отклика задачи на вызов.
{
"value": {
"commandId": "giveKudos",
"commandContext": "compose",
"context": {
"theme": "default"
},
"data": {
"msteams": {
"justInTimeInstall": true
}
}
},
"conversation": {
"id": "19:7705841b240044b297123ad7f9c99217@thread.skype"
},
"name": "composeExtension/submitAction",
"imdisplayname": "Bob Smith"
}
Отклик задачи на вызов должен быть аналогичен отклику установленного бота.
Пример
Следующий раздел кода является примером JIT-установки приложения с адаптивной карточкой.
private static Attachment GetAdaptiveCardAttachmentFromFile(string fileName)
{
//Read the card json and create attachment.
string[] paths = { ".", "Resources", fileName };
var adaptiveCardJson = File.ReadAllText(Path.Combine(paths));
var adaptiveCardAttachment = new Attachment()
{
ContentType = "application/vnd.microsoft.card.adaptive",
Content = JsonConvert.DeserializeObject(adaptiveCardJson),
};
return adaptiveCardAttachment;
}
Пример кода
Название примера | Описание | .NET | Node.js | Python | Манифест |
---|---|---|---|---|---|
Действие расширения для сообщений Teams | В этом примере показано, как определить команды действий, создать диалоговое окно и ответить на действие отправки диалога. | Просмотр | Просмотр | Просмотр | Просмотр |
Предварительный просмотр действия расширения сообщений | В этом примере показано, как использовать предварительную версию действий в расширениях обмена сообщениями с помощью Bot Framework версии 4. | Просмотр | Просмотр | Н/Д | Просмотр |
Поиск в расширении для сообщений Teams | В этом примере показано, как создать расширение сообщений на основе поиска. Он выполняет поиск пакетов nudget и отображает результаты в расширении обмена сообщениями на основе поиска. | Просмотр | Просмотр | Просмотр | Просмотр |
Следующий этап
См. также
Platform Docs