Skapa .NET-klient för att Anslut till Direct Line App Service-tillägget
Från och med den 1 september 2023 rekommenderar vi starkt att du använder Azure Service Tag-metoden för nätverksisolering. Användningen av DL-ASE bör begränsas till mycket specifika scenarier. Innan du implementerar den här lösningen i en produktionsmiljö rekommenderar vi att du ber supportteamet om vägledning.
GÄLLER FÖR: SDK v4
Den här artikeln beskriver hur du skapar en .NET-klient i C# som ansluter till Direct Line App Service-tillägget. Läs även den här tilläggsartikeln Konfigurera .NET-robot för tillägg.
Förutsättningar
- Ett Azure-konto.
- En robot som distribueras till Azure-portalen .
Hämta den direkta radhemlighetsnyckeln
- I en webbläsare går du till Azure-portalen.
- Leta upp din Azure Bot-resurs i Azure-portalen.
- Välj Kanaler under Inställningar.
- Om den inte redan är aktiverad väljer du direct line-kanalen för att aktivera den.
- Välj Direktrad från Kanaler när du har aktiverat den.
- Gå till avsnittet Webbplatser . Det finns vanligtvis en Default_Site om du inte har tagit bort eller bytt namn på den.
- Välj knappen Visa länk (ögonikon) för att visa en av nycklarna och kopiera och spara dess värde. Du använder det här värdet i avsnittet Skapa en C#-direktradsklient.
Kommentar
Det här värdet är din Direct Line-klienthemlighet som används för att ansluta till Direct Line App Service-tillägget. Du kan skapa ytterligare webbplatser om du vill och även använda dessa hemliga värden.
Skapa en C#-direktradsklient
Interaktioner med Direct Line App Service-tillägget sker annorlunda än traditionell direktlinje eftersom de flesta kommunikationer sker via en WebSocket. Den uppdaterade Direct Line-klienten innehåller hjälpklasser för att öppna och stänga en WebSocket, skicka kommandon via WebSocket och ta emot aktiviteter tillbaka från roboten. I det här avsnittet beskrivs hur du skapar en enkel C#-klient för att interagera med en robot.
Skapa ett nytt .NET Core-konsolprogramprojekt i Visual Studio.
Klona Direct Line-klienten från GitHub-lagringsplatsen och inkludera den i projektet.
Skapa en klient och generera en token med hjälp av en hemlighet. Det här steget är detsamma som att skapa andra C#-direktradsklienter förutom den slutpunkt som du behöver använda i roboten , som läggs till med .bot/ -sökvägen som du ser härnäst. Glöm inte slutet /.
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();
Observera följande:
- Slutpunktsvärdet är robotens URL som du fick när du distribuerade roboten till Azure. Mer information finns i Konfigurera .NET-robot för tillägg.
- Det hemliga värdet som visas som YOUR_BOT_SECRET är det värde som du sparade tidigare från avsnittet webbplatser.
När du har en konversationsreferens från att generera en token kan du använda det här konversations-ID:t för att öppna en WebSocket med den nya
StreamingConversations
egenskapen påDirectLineClient
. För att göra detta måste du skapa ett återanrop som anropas när roboten vill skickaActivitySets
till klienten: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}"); } } } }
Nu är du redo att öppna WebSocket på
StreamingConversations
egenskapen med hjälp av konversationens token ,conversationId
och återanropetReceiveActivities
:var client = new DirectLineClient( new Uri(endpoint), new DirectLineClientCredentials(conversation.Token)); await client.StreamingConversations.ConnectAsync( conversation.ConversationId, ReceiveActivities);
Klienten kan nu användas för att starta en konversation och skicka
Activities
till roboten: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(); }