Поделиться через


Ответ на команду поиска

Важно!

Примеры кода в этом разделе основаны на версии 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-запрос. На этом этапе у кода есть пять секунд, чтобы предоставить 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.

Ответ конфигурации

Ответ config — это данные, возвращаемые сервером или приложением для настройки и включения расширения сообщений на платформе обмена сообщениями. Когда пользователь настраивает расширение сообщений в первый раз, используется ответ, config чтобы предложить пользователю настроить расширение сообщений и предоставить любую необходимую конфигурацию.

В следующем фрагменте config кода показан ответ, который появляется при взаимодействии пользователя с расширением сообщения:

{
    "composeExtension": {
        "suggestedActions": {
            "actions": [
                {
                    "type": "openUrl",
                    "title": "Open URL",
                    "value": "https://<your-subdomain>"
                }
            ]
        },
        "type": "config"
    },
    "responseType": "composeExtension"
}

Ответ включает в себя следующее config :

  • Свойство value , содержащее URL-адрес для открытия страницы конфигурации в диалоговом окне Teams, которое позволяет пользователям вводить необходимые сведения и отправлять конфигурацию. Вот несколько примеров value свойства:
    • https://<your-subdomain>.ngrok-free.app/searchSettings.html
    • https://<your-subdomain>.devtunnels.ms/searchSettings.html.
  • Поле type в параметре composeExtensionconfig, указывающее характер этого ответа в качестве конфигурации.
  • Объект responseType , определяющий этот ответ, предназначен для composeExtension приложения.

Снимок экрана: ответ конфигурации для расширения сообщений.

Инициализируйте пакет SDK Для Teams на странице конфигурации и используйте authentication.notifySuccess() для отправки собранных данных конфигурации обратно в Teams. submitConfig() функция демонстрирует структурирование и возврат значений конфигурации после завершения процесса настройки пользователем.

Чтобы завершить процесс настройки расширения сообщений, выполните следующие действия.

  1. В URL-адресе, указанном в свойстве value , должна размещаться веб-страница, которая открывает URL-адрес в виде диалогового окна Teams при активации конфигурации расширения сообщений.

  2. Если требуется проверка подлинности, страница должна использовать проверку подлинности Teams и вызывать authentication.notifySuccess() ее при успешном входе.

  3. После сбора введенных пользователем данных страница должна уведомить Teams об успешной настройке путем вызова notifySuccess(configData) , который отправляет значения конфигурации обратно в Teams:

      microsoftTeams.app.initialize();
    
      function submitConfig() {
          const configData = {
              setting1: "User-selected value",
              setting2: "Another value"
          };
    
          microsoftTeams.authentication.notifySuccess(configData);
      }
    
  4. После notifySuccess() выполнения окно конфигурации автоматически закрывается, а расширение сообщений настроено успешно.

result Тип ответа

Список результатов отображается в пользовательском интерфейсе Microsoft Teams с предварительным просмотром каждого элемента. Предварительная версия создается одним из двух способов:

  • preview Использование свойства в объекте attachment . Вложение preview может быть только героем или эскизом карта.
  • Извлечение из основных titleсвойств attachment , textи image объекта . Основные свойства используются только в том случае, preview если свойство не указано.

Примечание.

Результаты поиска расширения сообщений не поддерживают заполнение.

Teams поддерживает следующие типы карта:

Карта "Герой" или "Эскиз"

Для карта-главного элемента или эскиза, за исключением действия вызова, другие действия, такие как кнопка и касание, не поддерживаются в предварительной версии карта. Для карточек героев и эскизов предварительный просмотр создается по умолчанию, и указывать свойство не требуется preview . Чтобы узнать о карточках и узнать, как использовать эскизы и герои карта типов, ознакомьтесь с картами и добавлением карточек и карта действий.

Адаптивная карточка или соединитель карта

Чтобы отправить адаптивную карточку или карта соединителя для Группы Microsoft 365, необходимо включить предварительную версию. Свойство preview должно быть героем или эскизом карта, а соответствующая карта создается в качестве предварительного просмотра. preview Если свойство не указано в объектеattachment, предварительный просмотр не создается. Дополнительные сведения см. в статье Использование карточек соединителей для Группы Microsoft 365.

Пример ответа

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 В этом примере показано, как создать расширение сообщений в Teams, которое позволяет пользователям выполнять поиск пакетов NuGet и получать результаты в виде карта. Просмотр Просмотр Просмотр
Проверка подлинности и конфигурация расширения сообщений Teams В этом примере показано, как реализовать проверку подлинности в расширении сообщений для Teams, обеспечивая безопасный доступ и взаимодействие с пользователем. Просмотр Просмотр Просмотр

Следующий этап

См. также