Crie uma extensão de mensagem

Concluído

Nesta unidade, irá aprender a criar uma extensão de mensagem. Também irá aprender a executar e depurar a extensão de mensagens no Microsoft Teams com o Teams Toolkit.

Para criar uma extensão de mensagem, precisa dos seguintes componentes:

  • Recurso do Bot do Azure para registar o seu serviço Web como um bot com o Bot Framework
  • Serviço Web para processar interações do utilizador com a extensão de mensagem
  • Manifesto de aplicação para definir as capacidades de extensão de mensagens no Microsoft Teams

Configurar o recurso do Bot do Azure

O recurso do Bot do Azure é utilizado para registar o seu serviço Web como um bot no Bot Framework. É necessário um Microsoft Entra registo de aplicações para criar um recurso do Bot do Azure. O registo de aplicações fornece uma forma segura de autenticar e autorizar o bot. O serviço Web utiliza as credenciais de registo de aplicações Microsoft Entra para autenticar com o serviço de bot.

O fragmento de código seguinte mostra como criar um recurso do Bot do Azure com o Bicep:

resource botService 'Microsoft.BotService/botServices@2021-03-01' = {
  kind: 'azurebot'
  location: 'global'
  name: 'botService'
  properties: {
    displayName: 'Bot Service'
    endpoint: 'https://webservice.contoso.com/api/messages'
    msaAppId: '00000000-0000-0000-0000-000000000000'
  }
  sku: {
    name: botServiceSku
  }
}

A propriedade do ponto final especifica o ponto final de mensagens exposto no serviço Web que o serviço de bot utiliza para enviar pedidos quando um utilizador interage com a extensão da mensagem. A propriedade msaAppId especifica o ID de registo da aplicação Microsoft Entra utilizado para autenticar o serviço de bot com o serviço Web.

Captura de ecrã a mostrar o ecrã configuração do Bot no portal do Azure.

Os canais são utilizados para ligar o serviço de bot a plataformas de mensagens como o Microsoft Teams, Slack, Facebook Messenger e muito mais.

O fragmento de código seguinte mostra como configurar os canais Microsoft Teams e Microsoft 365 (Outlook e Microsoft 365 Copilot) no recurso do Bot do Azure:

resource botServiceMsTeamsChannel 'Microsoft.BotService/botServices/channels@2021-03-01' = {
  parent: botService
  location: 'global'
  name: 'MsTeamsChannel'
  properties: {
    channelName: 'MsTeamsChannel'
  }
}

resource botServiceM365ExtensionsChannel 'Microsoft.BotService/botServices/channels@2022-06-15-preview' = {
  parent: botService
  location: 'global'
  name: 'M365Extensions'
  properties: {
    channelName: 'M365Extensions'
  }
}

Captura de ecrã do ecrã Canais de bot no portal do Azure.

Configurar o serviço Web

O serviço Web é uma aplicação Web que contém o código de extensão da mensagem. O serviço Web é responsável por lidar com as interações do utilizador com a extensão de mensagem e utiliza o SDK do Bot Framework para comunicar com o serviço de bot.

Para lidar com as interações do utilizador, implemente:

  • Um ponto final de mensagens
  • Um Adaptador de Bot
  • Um Processador de Atividades de Bot

O ponto final de mensagens é utilizado para receber pedidos do serviço de bot. O ponto final de mensagens é exposto no serviço Web e transmite os pedidos para o Bot Adapter para processamento.

O fragmento de código seguinte mostra como configurar o ponto final de mensagens:

[Route("api/messages")]
[ApiController]
public class BotController : ControllerBase
{
    private readonly IBotFrameworkHttpAdapter Adapter;
    private readonly IBot Bot;

    public BotController(IBotFrameworkHttpAdapter adapter, IBot bot)
    {
        Adapter = adapter;
        Bot = bot;
    }

    [HttpPost, HttpGet]
    public async Task PostAsync()
    {
        await Adapter.ProcessAsync(Request, Response, Bot);
    }
}

O Bot Adapter é utilizado para ligar o serviço de bot ao serviço Web. O Bot Adapter é responsável por processar pedidos recebidos do serviço de bot e invocar o processador de atividade do bot. O serviço Web autentica-se com o serviço de bot com as credenciais de registo de aplicações Microsoft Entra utilizadas para registar o recurso do Bot do Azure no Bot Framework.

O fragmento de código seguinte mostra como configurar o Bot Adapter no serviço Web:

// Create the Bot Framework Authentication to be used with the Bot Adapter.
var config = builder.Configuration.Get<ConfigOptions>();
builder.Configuration["MicrosoftAppType"] = "MultiTenant";
builder.Configuration["MicrosoftAppId"] = config.BOT_ID;
builder.Configuration["MicrosoftAppPassword"] = config.BOT_PASSWORD;
builder.Services.AddSingleton<BotFrameworkAuthentication, ConfigurationBotFrameworkAuthentication>();

// Create the Bot Framework Adapter with error handling enabled.
builder.Services.AddSingleton<IBotFrameworkHttpAdapter, AdapterWithErrorHandler>();

// Create the bot as a transient. In this case the ASP Controller is expecting an IBot.
builder.Services.AddTransient<IBot, SearchApp>();

Para processar a consulta de pesquisa do utilizador e devolver resultados de pesquisa, implemente um Processador de Atividade de Bot que herda da classe TeamsActivityHandler fornecida pelo SDK do Bot Framework e substitua o método OnTeamsMessagingExtensionQueryAsync .

O fragmento de código seguinte mostra como configurar o Processador de Atividades do Bot no serviço Web:

public class SearchApp : TeamsActivityHandler
{
    protected override async Task<MessagingExtensionResponse> OnTeamsMessagingExtensionQueryAsync(ITurnContext<IInvokeActivity> turnContext, MessagingExtensionQuery query, CancellationToken cancellationToken)
    {
        var text = query?.Parameters?[0]?.Value as string ?? string.Empty;

        var card = await File.ReadAllTextAsync(Path.Combine(".", "Resources", "card.json"), cancellationToken);
        var template = new AdaptiveCards.Templating.AdaptiveCardTemplate(card);

        return new MessagingExtensionResponse
        {
            ComposeExtension = new MessagingExtensionResult
            {
                Type = "result",
                AttachmentLayout = "list",
                Attachments = [
                    new MessagingExtensionAttachment
                        {
                            ContentType = AdaptiveCard.ContentType,
                            Content = JsonConvert.DeserializeObject(template.Expand(new { text })),
                            Preview = new ThumbnailCard { Title = text }.ToAttachment()
                        }
                ]
            }
        };
    }
}

Configurar comando de pesquisa

O manifesto da aplicação é um ficheiro JSON que define os metadados e a configuração da aplicação. Define as funcionalidades que a aplicação fornece, como extensões de mensagens. O manifesto da aplicação está incluído no pacote de aplicação. O pacote de aplicações é um ficheiro ZIP que carrega para o Microsoft Teams para instalar a aplicação.

O fragmento de código seguinte mostra como um comando de pesquisa é definido no manifesto da aplicação:

"composeExtensions": [
  {
    "botId": "4cc3ac43-d581-403d-8bbf-ff9c0fbf3fb2",
    "commands": [
      {
        "id": "Search",
        "type": "query",
        "title": "Products",
        "description": "Find products by name",
        "initialRun": true,
        "fetchTask": false,
        "context": [
          "commandBox",
          "compose",
          "message"
        ],
        "parameters": [
          {
            "name": "ProductName",
            "title": "Product name",
            "description": "The name of the product as a keyword",
            "inputType": "text"
          }
        ]
      }
    ]
  }
]

Um comando pode conter um ou mais parâmetros. Um parâmetro é um campo que é apresentado na interface de utilizador. Neste exemplo, o comando tem um único parâmetro chamado ProductName. O parâmetro é um campo de texto que o utilizador preenche com o nome do produto que está a procurar.

Captura de ecrã a mostrar os resultados da pesquisa devolvidos por uma extensão de mensagem baseada em pesquisa no Microsoft Teams.

Kit de ferramentas do Teams para Visual Studio

O Teams Toolkit for Visual Studio é uma extensão que fornece ferramentas para criar, depurar e implementar aplicações do Microsoft Teams. O Teams Toolkit integra-se com o Visual Studio para simplificar o processo de desenvolvimento e proporcionar uma experiência totalmente integrada para a criação de aplicações do Microsoft Teams.

O Teams Toolkit estrutura uma solução que contém dois projetos, um projeto de serviço Web e um projeto de aplicação teams. O projeto de serviço Web contém o código da extensão da mensagem e o projeto da aplicação contém o manifesto da aplicação e outros recursos necessários para executar a aplicação no Microsoft Teams.

Captura de ecrã de uma solução no Visual Studio que contém um projeto de serviço Web e um projeto de aplicação do Teams criado com o Teams Toolkit.

O Teams Toolkit integra-se com a funcionalidade túneis Dev no Visual Studio para permitir a comunicação entre o serviço de bot e o serviço Web em execução local. Os túneis de programador expõem o serviço Web para além do computador para permitir que o serviço de bot o alcance.

Diagrama a mostrar o túnel Dev entre o serviço Bot e o serviço Web.