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
- Un account di Azure.
- Un bot distribuito nel portale di Azure .
Ottenere la chiave privata Direct Line
- Nel browser passare al portale di Azure.
- Nella portale di Azure individuare la risorsa azure Bot.
- Selezionare Canali in Impostazioni.
- Se non è già abilitato, selezionare il canale Direct Line per abilitarlo.
- Selezionare Direct Line dai canali dopo averlo abilitato.
- Passare alla sezione Siti . In genere è presente un Default_Site a meno che non sia stato eliminato o rinominato.
- 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.
In Visual Studio creare un nuovo progetto di applicazione console .NET Core.
Clonare il client Direct Line dal repository GitHub e includerlo nel progetto.
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.
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
sulDirectLineClient
. A questo scopo è necessario creare un callback che verrà richiamato quando il bot vuole inviareActivitySets
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}"); } } } }
A questo momento è possibile aprire WebSocket nella
StreamingConversations
proprietà usando il token della conversazione,conversationId
e ilReceiveActivities
callback:var client = new DirectLineClient( new Uri(endpoint), new DirectLineClientCredentials(conversation.Token)); await client.StreamingConversations.ConnectAsync( conversation.ConversationId, ReceiveActivities);
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(); }