Publicera en copilot i Azure Bot Service-kanaler

Du kan ansluta din copilot till befintliga Azure Bot Service-kanaler , vilket kan vara användbart om du vill ansluta din copilot till slutanvändare på Azure Bot Service-kanaler.

För att du ska kunna lägga till copilot på Azure Bot Service-kanaler krävs avsevärd utvecklarexpertis. Den här artikeln är avsett för IT-administratörer eller utvecklare som har erfarenhet av utveckling och skrivning av kod.

Dricks

Du behöver inte följa det här dokumentet om du vill lägga till Copilot Studio copilot på webbplatsen, Facebook eller Microsoft Teams. Om målet är att ansluta till ett anpassat webbaserat eller lokalt program kan dina utvecklare få mer information i Publicera en copilot i mobila eller anpassade program.

Viktigt

Instruktioner i det här avsnittet kräver programvaruutveckling från dig eller dina utvecklare. Den är avsedd för erfarna IT-proffs, t.ex. IT-administratörer eller IT-utvecklare med en gedigen förståelse för utvecklarverktyg, verktyg samt IDE:er.

Förutsättningar

Kodexempel

Kodfragment som används i det här dokumentet kommer från vidarebefordran av exempelkoden för robot.

Referenser

Anvisningarna i det här dokumentet refererar till följande dokument:

Skapa eller använda en befintlig Azure Bot Service-robot

Du behöver en Azure Bot Service-robot som kan vidarebefordra samtal mellan dina Copilot Studio-copilot och Azure Bot Service-kanaler.

Vidarebefordra robotdiagram.

Relä - robot exempelkoden är en bra utgångspunkt om du inte har ett befintligt Azure-Bot Service robot. Den bygger på Microsoft Bot Framework robotexempelkod som kan kompileras och distribueras till Azure Bot Service. Exempelkoden är avsedd att användas som utgångspunkt och inte är avsedd att användas i tillverkningen direkt. Du måste lägga till kod och optimering för att matcha dina affärsbehov.

Om du redan har en Azure Bot Service-robot måste du lägga till en Copilot Studio-koppling och kod för att hantera sessioner med konversationer. Du kan distribuera robot till Azure Bot Service och ansluta till kanaler med Azure-portalen.

Hämta dina Copilot Studio copilot-parametrar

Om du vill ansluta till den andrepilot som du skapade med Copilot Studio måste du hämta andrepilotens namn och slutpunkt för token.

  1. Kopiera namnet på copilot till Copilot Studio.

    Hämta robotens namn.

  2. I navigeringsmenyn, under Inställningar, väljer du Kanaler.

  3. Välj den kanal du vill ansluta till. I scenario använder Slack som exempel.

    Slack-kanal.

  4. Om du vill kopiera och spara värdet tokenslutpunkt väljer du Kopiera. Du behöver din slutpunkt för att ansluta din copilot till Azure Bot Service-kanalen.

    Hämta robotparametrar.

Hantera konversationssessioner med Copilot Studio-copilot

Det kan finnas flera konversationer mellan Azure Bot Service-kanaler och Direct Line-anslutningen med din Copilot Studio-copilot.

Din Azure-Bot Service robot måste mappa och vidarebefordra konversationen från Azure Bot Service kanalen till konversationen Direct Line med copiloten Copilot Studio och vice versa.

Exempel på exempelkod

I följande exempel används exempel från vidarebefordran av exempelkoden för robot.

  1. Starta en konversation på alla nya externa Azure Bot Service-kanaler konversationens start, starta en Copilot Studio copilot-konversation. Se Hämta Direct Line-token och Använda Direct Line för att kommunicera med copilot för instruktioner om hur man startar en ny konversation med roboten.

    using (var httpRequest = new HttpRequestMessage())
    {   
        httpRequest.Method = HttpMethod.Get;
        UriBuilder uriBuilder = new UriBuilder(TokenEndPoint);
        httpRequest.RequestUri = uriBuilder.Uri;
        using (var response = await s_httpClient.SendAsync(httpRequest))
        {
            var responseString = await response.Content.ReadAsStringAsync();
            string token = SafeJsonConvert.DeserializeObject<DirectLineToken>(responseString).Token;
        }
    }
    
    /// <summary>
    /// class for serialization/deserialization DirectLineToken
    /// </summary>
    public class DirectLineToken
    {
        public string Token { get; set; }
    }
    
     // Use the retrieved token to create a DirectLineClient instance
     using (var directLineClient = new DirectLineClient(token))
     {
         var conversation = await directLineClient.Conversations.StartConversationAsync();
         string conversationtId = conversation.ConversationId;
     }
    
  2. Om du vill hantera flera sessioner måste du upprätthålla en mappning av externa Azure Bot Service-kanalkonversationer till motsvarande Copilot Studio copilot-konversation. En Copilot Studio copilot-konversation kan identifieras med och vara ansluten med två egenskaper: ConversationtId och Token.

    Dictionary<string, PowerVirtualAgentsConversation> ConversationRouter = new Dictionary<string, PowerVirtualAgentsConversation>();  
    

    Om du vill hantera konversations livscykeln uppdaterar du Direct Line token eller rensar bort inaktiva konversationer. Läs mer om tokenuppdatering på uppdatera Direct Line token. En Copilot Studio copilot-konversation för att stödja uppdatering av Direct Line token definieras på följande sätt:

    /// <summary>
    /// Data model class for Copilot Studio copilot conversation
    /// </summary>
    public class PowerVirtualAgentsConversation
    {
        public string ConversationtId { get; set; } // The Copilot Studio copilot conversation ID retrieved from step 1
    
        public string Token { get; set; } // The DirectLine token retrieved from step 1
    
        public string WaterMark { get; set; } // Identify turn in a conversation
    
        public DateTime LastTokenRefreshTime { get; set; } = DateTime.Now; // Timestamp of last token refresh
    
        public DateTime LastConversationUpdateTime { get; set; } = DateTime.Now; // Timestamp of last active user message sent to copilot
    }
    
  3. När en ny Copilot Studio copilot-konversation startar lägger du till ett nyckelvärdespar (external_Azure_Bot_Service_channel_conversationID, PowerVirtualAgentsConversation) i mappningstabellen.

    // After new Copilot Studio copilot conversation starts
    ConversationRouter[external_Azure_Bot_Service_channel_conversationID] = new PowerVirtualAgentsConversation()
      {
        Token = token,
        ConversationtId = conversationId,
        WaterMark = null,
        LastConversationUpdateTime = DateTime.Now,
        LastTokenRefreshTime = DateTime.Now,
      }; 
    
  4. Om du vill fortsätta på en befintlig konversation klickar du på ett nytt externt Azure Bot Service-kanalmeddelande som togs emot, hämtar den befintliga konversationen från mappningstabellen, vidarebefordrar den externa konversationsaktiviteten till Copilot Studio-copilot och får svar.

    I följande exempel visas vidarebefordring av konversation genom åsidosätta metoden ActivityHandler.OnMessageActivityAsync((ITurnContext<IMessageActivity>, CancellationToken)

    // Invoked when a message activity is received from the user
    // Send the user message to Copilot Studio copilot and get response
    protected override async Task OnMessageActivityAsync(ITurnContext<IMessageActivity> turnContext, CancellationToken cancellationToken)
    {
        // Retrieve copilot conversation from mapping table
        // If not exists for the given external conversation ID, start a new Copilot Studio copilot conversation
        ConversationRouter.TryGetValue(externalCID, out PowerVirtualAgentsConversation currentConversation) ?
                currentConversation : /*await StartBotConversationAsync(externalCID)*/;
    
        // Create DirectLine client with the token associated to current conversation
        DirectLineClient client = new DirectLineClient(currentConversation.Token);
    
        // Send user message using directlineClient
        await client.Conversations.PostActivityAsync(currentConversation.ConversationtId, new DirectLineActivity()
        {
          Type = DirectLineActivityTypes.Message,
          From = new ChannelAccount { Id = turnContext.Activity.From.Id, Name = turnContext.Activity.From.Name },
          Text = turnContext.Activity.Text,
          TextFormat = turnContext.Activity.TextFormat,
          Locale = turnContext.Activity.Locale,
        });
    
        // Update LastConversationUpdateTime for session management
        currentConversation.LastConversationUpdateTime = DateTime.Now;
    }  
    
  5. Se Använda Direct Line för att kommunicera med copilot för information om hur man får svar från Copilot Studio-copilot. När Copilot Studio-copilot svar tas emot läser du Parsa konversationens nyttolast från copilot för hur du ska tolka svaret på det externa Azure Bot Service-kanalsvaret.

Exempel på hur du tolkar svar finns i vidarebefordran av exempelkoden för robot ResponseConverter.cs.

Distribuera till Azure Bot Service

När du har en Azure Bot Service Relay vidarebefordringsrobot klar måste du distribuera roboten till din Azure Bot Service.

Ange Azure Bot Service-kanaler

Du kan konfigurera de kanaler som du vill ansluta till genom att logga in på Azure Portal och välja den Azure Bot Service-resursgrupp som du distribuerade till. Visa de specifika anvisningarna för varje kanal i Azure Bot Service-kanaler.