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
- No navegador, acesse o portal do Azure.
- No portal do Azure, localize o recurso do Bot do Azure.
- Em Configurações, selecione Canais.
- Se ele ainda não estiver habilitado, selecione canal do Direct Line para habilitá-lo.
- Select Direct Line em Canais depois de ativá-lo.
- Acesse a seção Sites. Normalmente, há um Default_Site a menos que você o tenha excluído ou renomeado.
- 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.
No Visual Studio, crie um projeto do Aplicativo de Console NET Core.
Clone o cliente do Direct Line do repositório GitHub e inclua-o em seu projeto.
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.
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
noDirectLineClient
. Para fazer isso, você precisa criar um retorno de chamada que será invocado quando o bot quiser enviarActivitySets
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}"); } } } }
Agora, você está pronto para abrir o WebSocket na propriedade
StreamingConversations
usando o token da conversa,conversationId
, e seu retorno de chamadaReceiveActivities
:var client = new DirectLineClient( new Uri(endpoint), new DirectLineClientCredentials(conversation.Token)); await client.StreamingConversations.ConnectAsync( conversation.ConversationId, ReceiveActivities);
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(); }