Ответ на команду поиска
Важно!
Примеры кода в этом разделе основаны на версии 4.6 и более поздних версиях пакета SDK Bot Framework. Если вы ищете документацию по более ранним версиям, см. раздел Расширения сообщений — пакет SDK версии 3 в папке Resources документации.
После отправки пользователем команды поиска веб-служба получает composeExtension/query
сообщение вызова, содержащее value
объект с параметрами поиска. Вызов активируется со следующими условиями:
- Как символы вводятся в поле поиска.
-
initialRun
в манифесте приложения задано значение true, и вы получите сообщение о вызове, как только будет вызвана команда поиска. Дополнительные сведения см. в статье Запрос по умолчанию.
В этом документе описано, как реагировать на запросы пользователей в виде карточек и предварительных просмотров, а также об условиях, при которых Microsoft Teams выдает запрос по умолчанию.
Параметры запроса находятся в объекте value
запроса, который включает следующие свойства:
Имя свойства | Назначение |
---|---|
commandId |
Имя команды, вызываемой пользователем, соответствующее одной из команд, объявленных в манифесте приложения. |
parameters |
Массив параметров. Каждый объект параметра содержит имя параметра, а также значение параметра, предоставленное пользователем. |
queryOptions |
Параметры разбиения на страницы:skip : количество пропусков для этого запросаcount : количество возвращаемых элементов. |
protected override async Task<MessagingExtensionResponse> OnTeamsMessagingExtensionQueryAsync(ITurnContext<IInvokeActivity> turnContext, MessagingExtensionQuery query, CancellationToken cancellationToken)
{
// Code to handle the query.
}
Реагирование на запросы пользователей
Когда пользователь выполняет запрос, Microsoft Teams отправляет к вашей службе синхронный HTTP-запрос. На этом этапе у кода есть 5
секунды для предоставления HTTP-ответа на запрос. В течение этого времени служба может выполнять больше подстановки или любую другую бизнес-логику, необходимую для обслуживания запроса.
Служба должна ответить результатами, соответствующими запросу пользователя. В ответе должен быть указан код 200 OK
состояния HTTP и допустимый объект приложения или JSON со следующими свойствами:
Имя свойства | Назначение |
---|---|
composeExtension |
Конверт ответа верхнего уровня. |
composeExtension.type |
Тип ответа. Поддерживаются следующие типы:result : отображает список результатов поиска.auth : запрашивает проверку подлинности пользователя.config : предлагает пользователю настроить расширение сообщений.message : отображает текстовое сообщение. |
composeExtension.attachmentLayout |
Задает макет вложений. Используется для ответов типа result . Поддерживаются следующие типы: list : список объектов карточек, содержащих поля эскизов, заголовков и текстовых полей.grid : сетка эскизов изображений |
composeExtension.attachments |
Массив допустимых объектов вложений. Используется для ответов типа result . Поддерживаются следующие типы: application/vnd.microsoft.card.thumbnail application/vnd.microsoft.card.hero application/vnd.microsoft.teams.card.o365connector application/vnd.microsoft.card.adaptive |
composeExtension.suggestedActions |
Предлагаемые действия. Используется для ответов типа auth или config . |
composeExtension.text |
Отображаемое сообщение. Используется для ответов типа message . |
Ответ конфигурации
Ответ конфигурации — это данные, возвращаемые сервером или приложением для настройки и включения расширения сообщений на платформе обмена сообщениями. Следующий код является примером конфигурации расширения сообщений:
{
"name": "composeExtension/submitAction",
"type": "invoke",
"timestamp": "2024-03-08T14:10:47.575Z",
"localTimestamp": "2024-03-08T19:40:47.575+05:30",
"id": "f:7dfe18de-94e3-9f38-5d44-adeb31cd8243",
"channelId": "msteams",
"serviceUrl": "https://smba.trafficmanager.net/amer/",
"from": {
"id": "29:1PBlnIsEROUYzpFjULDVodMHrnpujmfhBdQAf0pcO1EkaDkhI0_Pj_ql-jZUYOGdSc3_KcqaIIjzbleraVJ2Z3g",
"name": "MOD Administrator",
"aadObjectId": "ce9def33-d7fc-444c-8728-be1f95e6b6f2"
},
"conversation": {
"isGroup": true,
"conversationType": "groupChat",
"tenantId": "4ad59956-0f88-4b88-a9d0-570b6eb4e66b",
"id": "19:1dd50ba7-e5bd-46ea-b34e-80a415148de7_ce9def33-d7fc-444c-8728-be1f95e6b6f2@unq.gbl.spaces"
},
"recipient": {
"id": "28:9a2b01fc-88c1-40e1-bf87-5079c8e35626",
"name": "PSDAzureBot"
},
"entities": [
{
"locale": "en-GB",
"country": "GB",
"platform": "Web",
"timezone": "Asia/Calcutta",
"type": "clientInfo"
}
],
"channelData": {
"tenant": {
"id": "4ad59956-0f88-4b88-a9d0-570b6eb4e66b"
},
"source": {
"name": "compose"
}
},
"value": {
"commandId": "razorView",
"commandContext": "compose",
"data": {
"Title": "Welcome to RazorView!",
"DisplayData": " Today's date is 8-3-2024, Friday"
},
"context": {
"theme": "default"
}
},
"locale": "en-GB",
"localTimezone": "Asia/Calcutta"
}
Следующий ответ — это ответ конфигурации, который появляется при взаимодействии пользователя с расширением compose:
{
"composeExtension": {
"type": "config",
"suggestedActions": {
"actions": [
{
"type": "openUrl",
"value": "https://7a03-2405-201-a00c-7191-b472-ff64-112d-f806.ngrok-free.app"
}
]
}
}
}
Типы и предварительные версии карточек ответа
Примечание.
Результаты поиска расширения сообщений не поддерживают заполнение.
Teams поддерживает следующие типы карточек:
- Карточка эскиза
- Карточка главного имиджевого баннера
- Карточка соединителя для групп Microsoft 365
- Адаптивная карточка
Чтобы лучше понять карточки и ознакомиться с ними, ознакомьтесь со сведениями о карточках.
Сведения об использовании типов эскизов и карточек-героев см. в статье Добавление карточек и действий с карточками.
Дополнительные сведения о карточке соединителя для групп Microsoft 365 см. в разделе Использование карточек соединителей для групп Microsoft 365.
Список результатов отображается в пользовательском интерфейсе Microsoft Teams с предварительным просмотром каждого элемента. Предварительная версия создается одним из двух способов:
-
preview
Использование свойства в объектеattachment
. Вложениеpreview
может быть только карточкой "Герой" или "Эскиз". - Извлечение из основных
title
свойствattachment
,text
иimage
объекта . Основные свойства используются только в том случае,preview
если свойство не указано.
Для карточки "Герой" или "Эскиз", за исключением действия вызова, другие действия, такие как кнопка и касание, не поддерживаются в карточке предварительного просмотра.
Чтобы отправить адаптивную карточку или карточку соединителя для групп Microsoft 365, необходимо включить предварительную версию. Свойство preview
должно быть карточкой "Герой" или "Эскиз". Если не указать свойство предварительного просмотра в объекте attachment
, предварительный просмотр не создается.
Для карточек главного элемента и эскизов не требуется указывать свойство предварительного просмотра. Предварительный просмотр создается по умолчанию.
Пример ответа
protected override async Task<MessagingExtensionResponse> OnTeamsMessagingExtensionQueryAsync(ITurnContext<IInvokeActivity> turnContext, MessagingExtensionQuery query, CancellationToken cancellationToken)
{
var text = query?.Parameters?[0]?.Value as string ?? string.Empty;
// Searches NuGet for a package.
var obj = JObject.Parse(await (new HttpClient()).GetStringAsync($"https://azuresearch-usnc.nuget.org/query?q=id:{text}&prerelease=true"));
var packages = obj["data"].Select(item => (item["id"].ToString(), item["version"].ToString(), item["description"].ToString()));
// We take every row of the results and wrap them in cards wrapped in in MessagingExtensionAttachment objects.
// The Preview is optional, if it includes a Tap, that will trigger the OnTeamsMessagingExtensionSelectItemAsync event back on this bot.
var attachments = packages.Select(package => new MessagingExtensionAttachment
{
ContentType = HeroCard.ContentType,
Content = new HeroCard { Title = package.Item1 },
Preview = new HeroCard { Title = package.Item1, Tap = new CardAction { Type = "invoke", Value = package } }.ToAttachment()
})
.ToList();
// The list of MessagingExtensionAttachments must we wrapped in a MessagingExtensionResult wrapped in a MessagingExtensionResponse.
return new MessagingExtensionResponse
{
ComposeExtension = new MessagingExtensionResult
{
Type = "result",
AttachmentLayout = "list",
Attachments = attachments
}
};
}
Включение и обработка действий касания
protected override Task<MessagingExtensionResponse> OnTeamsMessagingExtensionSelectItemAsync(ITurnContext<IInvokeActivity> turnContext, JObject query, CancellationToken cancellationToken)
{
// The Preview card's Tap should have a Value property assigned, this will be returned to the bot in this event.
var (packageId, version, description, projectUrl, iconUrl) = query.ToObject<(string, string, string, string, string)>();
var card = new ThumbnailCard
{
Title = "Card Select Item",
Subtitle = description
};
var attachment = new MessagingExtensionAttachment
{
ContentType = ThumbnailCard.ContentType,
Content = card,
};
return Task.FromResult(new MessagingExtensionResponse
{
ComposeExtension = new MessagingExtensionResult
{
Type = "result",
AttachmentLayout = "list",
Attachments = new List<MessagingExtensionAttachment> { attachment }
}
});
}
Запрос по умолчанию
Если в манифесте задано значение initialRun
, true
Microsoft Teams выдает запрос по умолчанию , когда пользователь впервые открывает расширение сообщения. Ваша служба может ответить на этот запрос набором предварительно заполненных результатов. Это полезно, если команда поиска требует проверки подлинности или настройки, отображая недавно просмотрированные элементы, избранное или любую другую информацию, которая не зависит от введенных пользователем данных.
Запрос по умолчанию имеет ту же структуру, что и любой обычный запрос пользователя, при этом name
для поля задано значение initialRun
и value
задано значение , true
как показано в следующем объекте:
{
"type": "invoke",
"name": "composeExtension/query",
"value": {
"commandId": "searchCmd",
"parameters": [
{
"name": "initialRun",
"value": "true"
}
],
"queryOptions": {
"skip": 0,
"count": 25
}
},
⋮
}
Пример кода
Название примера | Описание | .NET | Node.js | Манифест |
---|---|---|---|---|
Поиск в расширении для сообщений Teams | В этом примере показано, как создать расширение сообщений на основе поиска. Он выполняет поиск пакетов nudget и отображает результаты в расширении обмена сообщениями на основе поиска. | Просмотр | Просмотр | Просмотр |
Проверка подлинности и конфигурация расширения сообщений Teams | В этом примере показано расширение сообщений, которое имеет страницу конфигурации, принимает поисковые запросы и возвращает результаты после входа пользователя. В нем также демонстрируется распаковка ссылки нулевой установки приложения вместе с распаковкой обычной ссылки | Просмотр | Просмотр | Просмотр |
Следующий этап
См. также
Platform Docs