Creare un client .NET per Connessione all'estensione servizio app Direct Line

A partire dal 1° settembre 2023, è consigliabile usare il metodo tag del servizio di Azure per l'isolamento della rete. L'utilizzo di DL-A edizione Standard deve essere limitato a scenari altamente specifici. Prima di implementare questa soluzione in un ambiente di produzione, è consigliabile consultare il team di supporto per indicazioni.

SI APPLICA A: SDK v4

Questo articolo descrive come creare un client .NET in C# che si connette all'estensione servizio app Direct Line. Leggere anche questo articolo complementare Configurare un bot .NET per l'estensione.

Prerequisiti

Ottenere la chiave privata Direct Line

  1. Nel browser passare al portale di Azure.
  2. Nella portale di Azure individuare la risorsa azure Bot.
  3. Selezionare Canali in Impostazioni.
  4. Se non è già abilitato, selezionare il canale Direct Line per abilitarlo.
  5. Selezionare Direct Line dai canali dopo averlo abilitato.
  6. Passare alla sezione Siti . In genere è presente un Default_Site a meno che non sia stato eliminato o rinominato.
  7. Selezionare il pulsante Mostra collegamento (icona a forma di occhio) per visualizzare una delle chiavi, quindi copiare e salvare il valore. Questo valore verrà usato nella sezione Creare un client Direct Line C#.

Nota

Questo valore è il segreto client Direct Line usato per connettersi all'estensione servizio app Direct Line. È possibile creare siti aggiuntivi se si desidera e usare anche questi valori segreti.

Creare un client Direct Line C#

Le interazioni con l'estensione direct line servizio app si verificano in modo diverso rispetto a direct line tradizionale perché la maggior parte delle comunicazioni avviene tramite un WebSocket. Il client Direct Line aggiornato include classi helper per l'apertura e la chiusura di un WebSocket, l'invio di comandi tramite WebSocket e la ricezione di attività dal bot. Questa sezione descrive come creare un semplice client C# per interagire con un bot.

  1. In Visual Studio creare un nuovo progetto di applicazione console .NET Core.

  2. Clonare il client Direct Line dal repository GitHub e includerlo nel progetto.

  3. Creare un client e generare un token usando un segreto. Questo passaggio equivale alla compilazione di qualsiasi altro client Direct Line C#, ad eccezione dell'endpoint che è necessario usare nel bot, aggiunto con il percorso .bot/ come illustrato di seguito. Non dimenticare la barra finale (/).

    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();
    

    Tenere presente quanto segue:

    • Il valore dell'endpoint è l'URL del bot ottenuto durante la distribuzione del bot in Azure. Per altre informazioni, vedere Configurare un bot .NET per l'estensione.
    • Il valore del segreto visualizzato come YOUR_BOT_SECRET corrisponde al valore salvato in precedenza dalla sezione sites.
  4. Quando si dispone di un riferimento a una conversazione dalla generazione di un token, è possibile usare l'ID della conversazione per aprire un WebSocket con la nuova proprietà StreamingConversations sul DirectLineClient. A questo scopo è necessario creare un callback che verrà richiamato quando il bot vuole inviare ActivitySets al client:

    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. A questo momento è possibile aprire WebSocket nella StreamingConversations proprietà usando il token della conversazione, conversationIde il ReceiveActivities callback:

    var client = new DirectLineClient(
        new Uri(endpoint),
        new DirectLineClientCredentials(conversation.Token));
    
    await client.StreamingConversations.ConnectAsync(
        conversation.ConversationId,
        ReceiveActivities);
    
  6. Il client può ora essere usato per avviare una conversazione e inviare Activities al 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();
    }