Partager via


Configurer les assistants Azure pour qu’ils réaffectent les conversations et y mettent fin

Nonte

Le bot Copilot Studio est renommé en assistant Copilot (assistant ou assistant IA). L’agent humain est désormais renommé Conseiller du service clientèle (représentant du service ou représentant). Vous pouvez rencontrer des références aux anciens et nouveaux termes pendant que nous mettons à jour l’interface utilisateur du produit, la documentation et le contenu de la formation.

Cet article explique comment vous pouvez programmer un agent d’IA (agent) dans Azure pour acheminer une conversation vers un représentant du service clientèle (représentant du service ou représentant) dans Dynamics 365 Contact Center. Il décrit également comment programmer l’assistant pour mettre fin à la conversation.

Important

  • Les assistants ne peuvent recevoir de conversations que s’ils sont ajoutés aux flux de travail de type transmission (Push).
  • Les agents IA ne sont pas pris en charge en mode consultation.

Prérequis

  • Vous devez disposer d’un agent dans Azure qui est configuré et intégré à Dynamics 365 Contact Center. Pour en savoir plus, consultez Intégrer un assistant Azure
  • L’acheminement basé sur les compétences doit être activé.

Réaffecter une conversation à un représentant

Dans Dynamics 365 Contact Center, un agent peut faire remonter la conversation en cours à un représentant. L’acheminement des conversations dépend de la règle d’acheminement configurée pour le flux de travail.

Lorsque le représentant accepte la demande d’escalade et que la conversation est transférée depuis l’agent IA, les détails du client et du dossier sont automatiquement identifiés. L’agent aligne les conversations en utilisant les variables de contexte du Contact Center de Dynamics 365 associées à la conversation. L’agent peut envoyer une liste de variables de contexte et de valeurs associées au Centre de Contact Dynamics 365, accompagnée de la demande d’escalade. L’agent peut également définir des éléments contextuels qui peuvent être utilisés par les modèles de recherche de compétences pour identifier de nouvelles compétences et les ajouter à la liste de compétences existantes pour la conversation. Dynamics 365 Contact Center met alors à jour les variables de contexte avec les valeurs spécifiées, puis relance le moteur de routage. Le système s’assure que la conversation escaladée est dirigée vers la bonne file d’attente. En savoir plus sur les éléments contextuels et les noms des variables dans Link Customer et Case-to Conversation lorsque l’agent escalade ou termine les conversations.

Une fois que le représentant a accepté la demande de réaffectation, la transcription de la conversation de l’assistant avec le client est visible sur le widget de conversation du représentant. Le représentant peut alors poursuivre la conversation avec le client.

Nonte

Le résumé de la conversation n’est pas visible pour le client.

Mettre fin à une conversation

L’agent Azure peut choisir de mettre fin à la conversation s’il estime que les questions du client ont été répondues, ou si le client ne répond plus. L’agent peut envoyer une EndConversation demande au centre de contact Dynamics 365.

Exemple de code

Cette section comprend des exemples de code que vous pouvez utiliser pour configurer un bot Azure pour qu’il réaffecte les conversations et y mette fin.

  1. Implémentez une classe de commande pour modéliser les tâches liées à l’escalade et à la fin des conversations.

  2. Implémentez une classe cliente omnichannel pour définir le contexte de commande.

    L’exemple de code est le suivant.

    /// <summary>
    /// Send end of conversation context to user and agent.
    /// </summary>
    public static async Task EndConversationAsync(ITurnContext turnContext, CancellationToken cancellationToken)
    {
        IActivity customerFacingActivity = Activity.CreateMessageActivity();
        customerFacingActivity.Text = "Thanks for talking with me. Have a good day. Bye.";
        BridgeBotMessage(customerFacingActivity);
    
        IActivity agentFacingActivity = Activity.CreateMessageActivity();
        agentFacingActivity.Text = "Ending the conversation as per customer request.";
        AddContext(CommandType.EndConversation, agentFacingActivity);
    
        List<IActivity> messageActivities = new List<IActivity>
        {
            customerFacingActivity,
            agentFacingActivity
        };
    
        await turnContext.SendActivitiesAsync(messageActivities.ToArray(), cancellationToken);
    }
    
    /// <summary>
    /// Send escalation context to user and agent.
    /// </summary>
    public static async Task EscalateConversationAsync(ITurnContext turnContext, IContextManager contextManager, CancellationToken cancellationToken)
    {
        IActivity customerFacingActivity = Activity.CreateMessageActivity();
        customerFacingActivity.Text = "Perfect I’ll transfer you now";
        BridgeBotMessage(customerFacingActivity);
    
        IActivity agentFacingActivity = Activity.CreateMessageActivity();
        agentFacingActivity.Text = GetEscalationSummary(turnContext, contextManager);
        AddContext(CommandType.Escalate, agentFacingActivity, contextManager.GetContext(turnContext.Activity.Conversation.Id));
    
        List<IActivity> messageActivities = new List<IActivity>
        {
            customerFacingActivity,
            agentFacingActivity
        };
    
        await turnContext.SendActivitiesAsync(messageActivities.ToArray(), cancellationToken);
    }
    
  3. Appelez la méthode client appropriée dans la classe Bot ActivityHandler.

  4. Modifiez les critères des commandes Escalate et EndConversation en fonction de vos besoins.

  5. Ajoutez l’instruction OmnichannelBotClient.BridgeBotMessage(turnContext.Activity); de code dans votre code de bot pour envoyer des messages au centre de contact Dynamics 365. Cette méthode doit être appelée pour chaque message d’activité envoyé au client.

    L’exemple de code est le suivant.

    protected async Task OnMessageActivityAsync(ITurnContext turnContext, ITurnState turnState, CancellationToken cancellationToken)
    {
        ArgumentNullException.ThrowIfNull(turnContext);
        var text = turnContext.Activity.Text?.ToLower(CultureInfo.InvariantCulture);
        var responseActivity = Activity.CreateMessageActivity();
        Responses.BuildCustomerFileAttachmentResponse(turnContext, responseActivity);
    
        if (string.IsNullOrEmpty(text))
        {
            if (turnContext.Activity.Value is JsonElement jsonElement)
            {
                var activityResponseValue = turnContext.Activity.Value;
                responseActivity.Text = $"You replied with value: {Environment.NewLine}{activityResponseValue}";
            }
        }
        else if (text.StartsWith("echo:", StringComparison.OrdinalIgnoreCase))
        {
            responseActivity.Text = text.Replace("echo:", "", StringComparison.OrdinalIgnoreCase);
        }
        else if (text.Contains("ac ", StringComparison.OrdinalIgnoreCase))
        {
            Responses.BuildAdaptiveCardResponse(responseActivity, text);
        }
        else
        {
            switch (text)
            {
                case Commands.Agent:
                    await OmnichannelAgentClient.EscalateConversationAsync(turnContext, _contextManager, cancellationToken);
                    return;
                case Commands.AnimationCard:
                case Commands.AudioCard:
                case Commands.FaultySigninCard:
                case Commands.HeroCard:
                case Commands.HeroCardIMBack:
                case Commands.HtmlList:
                case Commands.Markdown:
                case Commands.ReceiptCard:
                case Commands.SigninCard:
                case Commands.ThumbnailCard:
                case Commands.VideoCard:
                    Responses.BuildStructuredCardResponse(responseActivity, text);
                    break;
                case Commands.AttachmentFromC2:
                    responseActivity.Text = $"Attachment type has been identified";
                    break;
                case Commands.Debug:
                    Responses.BuildDebugContextResponseText(_contextManager, turnContext, responseActivity);
                    break;
                case Commands.EndChat:
                    await OmnichannelAgentClient.EndConversationAsync(turnContext, cancellationToken);
                    break;
    
                case Commands.Help:
                    Responses.BuildHelpResponse(responseActivity);
                    break;
                default:
                    Responses.BuildDidNotUnderstandResponse(responseActivity, text);
                    break;
            }
        }
        await OmnichannelAgentClient.BridgeAndSendActivityAsync(turnContext, responseActivity, cancellationToken);
    }
    

    Le dictionnaire contextVars contient toutes les paires de noms et de valeurs des variables de contexte que vous souhaitez mettre à jour dans le cadre de la requête d’escalade. Ici, BotHandoffTopic est la variable de contexte et CreditCard est la valeur de la variable de contexte. S’il existe une file représentative avec la règle BotHandoffTopic égale à CreditCar, alors ce chat escaladé est dirigé vers cette file.

    Le nom de la variable de contexte est du type Chaîne. La valeur de la variable de contexte doit être de type Entier ou Chaîne et doit être passée en tant que Dictionary <string, object>lors de l’escalade. L’exemple de code est le suivant.

    Dictionary<string, Object> keyValues = new Dictionary<string, object>()
    {
        { "BotHandoffTopic", "CreditCard" },
        { "IDNumber", 101}
    }
    

L’agent peut également envoyer un résumé d’escalade visible pour le représentant seulement après qu’il ait accepté la demande de chat escaladée. Pour envoyer le résumé, définissez le texte de l’activité dans le message d’escalade.

Intégrer un assistant Azure
Ajouter des variables de contexte
Service de robot Azure
Connecter un agent aux canaux
Intégrer votre propre canal personnalisé à l’aide de Direct Line
Meilleures pratiques pour la configuration des agents Azure et Copilot Studio