Compartilhar via


Criar um cliente .NET para se conectar à extensão do Serviço de Aplicativo do Direct Line

A partir de 1º de setembro de 2023, é altamente recomendável empregar o método de Marca de Serviço do Azure para isolamento de rede. A utilização do DL-ASE deve ser limitada a cenários altamente específicos. Antes de implementar essa solução em um ambiente de produção, recomendamos consultar sua equipe de suporte para obter orientação.

APLICA-SE A: SDK v4

Este artigo descreve como criar um cliente .NET em C# que se conecta à extensão do serviço de aplicativo do Direct Line. Leia também este artigo complementar Configurar bot do .NET da extensão.

Pré-requisitos

  • Uma conta do Azure.
  • Um bot implantado no portal do Azure.

Obter a chave secreta do Direct Line

  1. No navegador, acesse o portal do Azure.
  2. No portal do Azure, localize o recurso do Bot do Azure.
  3. Em Configurações, selecione Canais.
  4. Se ele ainda não estiver habilitado, selecione canal do Direct Line para habilitá-lo.
  5. Select Direct Line em Canais depois de ativá-lo.
  6. Acesse a seção Sites. Normalmente, há um Default_Site a menos que você o tenha excluído ou renomeado.
  7. Selecione o botão Mostrar link (ícone de olho) para revelar uma das chaves e, em seguida, copie e salve o valor dela. Você usará esse valor na seção Criar um cliente do Direct Line C#.

Observação

Esse valor é o segredo do cliente do Direct Line usado para se conectar à extensão do serviço de aplicativo do Direct Line. Você pode criar sites adicionais se desejar e pode usar esses valores de segredo também.

Criar um cliente do Direct Line em C#

As interações com a extensão do serviço de aplicativo do Direct Line acontecem de modo diferente do Direct Line tradicional, pois a maior parte da comunicação ocorre em um WebSocket. O cliente do Direct Line atualizado inclui classes auxiliares para abrir e fechar um WebSocket, enviar comandos por meio do WebSocket e receber atividades de volta do bot. Esta seção descreve como criar um cliente em C# simples para interagir com um bot.

  1. No Visual Studio, crie um projeto do Aplicativo de Console NET Core.

  2. Clone o cliente do Direct Line do repositório GitHub e inclua-o em seu projeto.

  3. Crie um cliente e gere um token usando um segredo. Esta etapa é o mesmo que criar qualquer outro cliente do Direct Line em C#, exceto pelo ponto de extremidade que você precisa usar em seu bot, ao qual é acrescentado o caminho .bot/, conforme mostrado a seguir. Não se esqueça do / no final.

    string endpoint = "https://<your_bot_name>.azurewebsites.net/.bot/";
    string secret = "<your_bot_direct_line_secret_key>";
    
    var tokenClient = new DirectLineClient(
        new Uri(endpoint),
        new DirectLineClientCredentials(secret));
    var conversation = await tokenClient.Tokens.GenerateTokenForNewConversationAsync();
    

    Observe o seguinte:

    • O valor do ponto de extremidade é a URL do bot que você obteve quando implantou o bot no Azure. Para obter mais informações, confira Configurar o bot do .NET da extensão.
    • O valor secreto mostrado como YOUR_BOT_SECRET é o valor que você salvou anteriormente na seção de sites.
  4. Depois que tiver uma referência de conversa da geração de um token, você poderá usar a ID dessa conversa para abrir um WebSocket com a nova propriedade StreamingConversations no DirectLineClient. Para fazer isso, você precisa criar um retorno de chamada que será invocado quando o bot quiser enviar ActivitySets ao cliente:

    public static void ReceiveActivities(ActivitySet activitySet)
    {
        if (activitySet != null)
        {
            foreach (var a in activitySet.Activities)
            {
                if (a.Type == ActivityTypes.Message && a.From.Id.Contains("bot"))
                {
                    Console.WriteLine($"<Bot>: {a.Text}");
                }
            }
        }
    }
    
  5. Agora, você está pronto para abrir o WebSocket na propriedade StreamingConversations usando o token da conversa, conversationId, e seu retorno de chamada ReceiveActivities:

    var client = new DirectLineClient(
        new Uri(endpoint),
        new DirectLineClientCredentials(conversation.Token));
    
    await client.StreamingConversations.ConnectAsync(
        conversation.ConversationId,
        ReceiveActivities);
    
  6. Agora, o cliente agora pode ser usado para iniciar uma conversa e enviar Activities ao bot:

    
    var startConversation = await client.StreamingConversations.StartConversationAsync();
    var from = new ChannelAccount() { Id = "123", Name = "Fred" };
    var message = Console.ReadLine();
    
    while (message != "end")
    {
        try
        {
            var response = await client.StreamingConversations.PostActivityAsync(
                startConversation.ConversationId,
                new Activity()
                {
                    Type = "message",
                    Text = message,
                    From = from
                });
        }
        catch (OperationException ex)
        {
            Console.WriteLine(
                $"OperationException when calling PostActivityAsync: ({ex.StatusCode})");
        }
        message = Console.ReadLine();
    }