Conversations pilotées par les événements à l’aide d’un gestionnaire d’activités
Article
16 minutes de lecture
S’APPLIQUE À : Kit de développement logiciel (SDK) v4
Un gestionnaire d’activités est un moyen piloté par les événements d’organiser la logique conversationnelle de votre bot.
Chaque type ou sous-type d’activité différent représente un type différent d’événement conversationnel.
En cache, le gestionnaire de tour du bot appelle le gestionnaire d’activité individuel pour le type d’activité qu’il a reçu.
Par exemple, si le bot reçoit une activité de message, le gestionnaire de tours voit cette activité entrante et l’envoie au gestionnaire d’activité d’activité de message activé. Lors de la création de votre bot, la logique de votre bot pour la gestion et la réponse aux messages s’effectue dans ce cas sur le gestionnaire d’activité de message . De même, votre logique de gestion des membres ajoutés à la conversation s’affiche dans votre gestionnaire sur les membres ajoutés , qui est appelé chaque fois qu’un membre est ajouté à la conversation.
Pour d’autres façons d’organiser votre logique de bot, consultez la section logique du bot dans le fonctionnement des bots.
Pour implémenter votre logique pour ces gestionnaires, vous allez remplacer ces méthodes dans votre bot, par exemple dans la section exemple de gestionnaire d’activités ci-dessous. Pour chacun de ces gestionnaires, il n’existe aucune implémentation de base. Il vous suffit donc d’ajouter la logique souhaitée dans votre remplacement.
Dans certaines situations, vous souhaiterez remplacer le gestionnaire de tour de base, comme l’enregistrement de l’état à la fin d’un tour. Dans ce cas, veillez à appeler d’abord await base.OnTurnAsync(turnContext, cancellationToken); pour vous assurer que l’implémentation de base est OnTurnAsync exécutée avant votre code supplémentaire. Cette implémentation de base est, entre autres, responsable de l’appel du reste des gestionnaires d’activités tels que OnMessageActivityAsync.
JavaScript ActivityHandler utilise un émetteur d’événements et un modèle d’écouteur.
Par exemple, utilisez la onMessage méthode pour inscrire un écouteur d’événements pour les activités de message. Vous pouvez inscrire plusieurs écouteurs. Lorsque le bot reçoit une activité de message, le gestionnaire d’activités voit cette activité entrante et l’envoie onMessage à chacun des écouteurs d’activité, dans l’ordre dans lequel ils ont été inscrits.
Lors de la création de votre bot, la logique de votre bot pour la gestion et la réponse aux messages s’affiche dans les onMessage écouteurs. De même, votre logique de gestion des membres ajoutés à la conversation s’exécute dans vos onMembersAdded écouteurs, qui sont appelés chaque fois qu’un membre est ajouté à la conversation.
Pour ajouter ces écouteurs, vous allez les inscrire dans votre bot, comme indiqué dans la section logique bot ci-dessous. Pour chaque écouteur, incluez votre logique de bot, puis veillez à appeler next() à la fin. En appelant next() , assurez-vous que l’écouteur suivant est exécuté.
Veillez à enregistrer l’état avant la fin du tour. Pour ce faire, remplacez la méthode du gestionnaire run d’activités et enregistrez l’état une fois la méthode du run parent terminée.
Il n’existe pas de situations courantes où vous souhaiterez remplacer le gestionnaire de tour de base. Faites donc attention si vous essayez de le faire.
Il existe un gestionnaire spécial appelé onDialog. Le onDialog gestionnaire s’exécute à la fin, après l’exécution du reste des gestionnaires et n’est pas lié à un certain type d’activité. Comme avec tous les gestionnaires ci-dessus, veillez à appeler next() pour vous assurer que le reste du processus se termine.
Pour implémenter votre logique pour ces gestionnaires, vous allez remplacer ces méthodes dans votre bot, par exemple dans la section exemple de gestionnaire d’activités ci-dessous. Il n’existe aucune implémentation de base pour chacun de ces gestionnaires. Ajoutez donc la logique souhaitée dans votre remplacement.
Dans certaines situations, vous souhaiterez remplacer le gestionnaire de tour de base, comme l’enregistrement de l’état à la fin d’un tour. Dans ce cas, veillez d’abord à appeler super.onTurn(turnContext); pour vous assurer que l’implémentation de base est onTurn exécutée avant votre code supplémentaire. Cette implémentation de base est, entre autres, responsable de l’appel du reste des gestionnaires d’activités tels que onMessageActivity.
Lors de la création de votre bot, la logique de votre bot pour la gestion et la réponse aux messages s’affiche dans ce on_message_activity gestionnaire. De même, votre logique de gestion des membres ajoutés à la conversation s’affiche dans votre on_members_added gestionnaire, qui est appelé chaque fois qu’un membre est ajouté à la conversation.
Par exemple, si le bot reçoit une activité de message, le gestionnaire de tours voit cette activité entrante et l’envoie au on_message_activity gestionnaire d’activités.
Pour implémenter votre logique pour ces gestionnaires, vous allez remplacer ces méthodes dans votre bot, par exemple dans la section exemple de gestionnaire d’activités ci-dessous. Pour chacun de ces gestionnaires, il n’existe aucune implémentation de base. Il vous suffit donc d’ajouter la logique souhaitée dans votre remplacement.
Dans certaines situations, vous souhaiterez remplacer le gestionnaire de tour de base, comme l’enregistrement de l’état à la fin d’un tour. Dans ce cas, veillez à appeler d’abord await super().on_turn(turnContext); pour vous assurer que l’implémentation de base est on_turn exécutée avant votre code supplémentaire. Cette implémentation de base est, entre autres, responsable de l’appel du reste des gestionnaires d’activités tels que on_message_activity.
Gestion des activités
La logique du bot traite les activités entrantes à partir d’un ou plusieurs canaux et génère des activités sortantes en réponse.
La logique principale du bot est définie dans le code du bot. Pour implémenter un bot en tant que gestionnaire d’activités, dérivez votre classe de bot à partir de ActivityHandlerlaquelle implémente l’interface IBot . ActivityHandler définit différents gestionnaires pour différents types d’activités, tels que OnMessageActivityAsync, et OnMembersAddedAsync. Ces méthodes sont protégées, mais peuvent être substituées, car nous dérivations de ActivityHandler.
Les gestionnaires définis sont ActivityHandler les suivants :
Événement
Gestionnaire
Description
Tout type d’activité reçu
OnTurnAsync
Appelle l’un des autres gestionnaires, en fonction du type d’activité reçue.
Activité de message reçue
OnMessageActivityAsync
Remplacez-la pour gérer une message activité.
Activité de mise à jour de conversation reçue
OnConversationUpdateActivityAsync
Sur une conversationUpdate activité, appelle un gestionnaire si des membres autres que le bot ont rejoint ou quitté la conversation.
Les membres non-bot ont rejoint la conversation
OnMembersAddedAsync
Remplacez cette option pour gérer les membres qui rejoignent une conversation.
Les membres non-bot ont quitté la conversation
OnMembersRemovedAsync
Remplacez cette option pour gérer les membres quittant une conversation.
Activité d’événement reçue
OnEventActivityAsync
Sur une event activité, appelle un gestionnaire spécifique au type d’événement.
Activité d’événement de réponse de jeton reçue
OnTokenResponseEventAsync
Remplacez-la pour gérer les événements de réponse de jeton.
Activité d’événement sans réponse de jeton reçue
OnEventAsync
Remplacez-la pour gérer d’autres types d’événements.
Activité de réaction de message reçue
OnMessageReactionActivityAsync
Sur une messageReaction activité, appelle un gestionnaire si une ou plusieurs réactions ont été ajoutées ou supprimées d’un message.
Réactions de message ajoutées à un message
OnReactionsAddedAsync
Remplacez cette option pour gérer les réactions ajoutées à un message.
Réactions de message supprimées d’un message
OnReactionsRemovedAsync
Remplacez cette option pour gérer les réactions supprimées d’un message.
Activité de mise à jour d’installation reçue
OnInstallationUpdateActivityAsync
Sur une installationUpdate activité, appelle un gestionnaire en fonction de l’installation ou de la désinstallation du bot.
Bot installé
OnInstallationUpdateAddAsync
Remplacez-la pour ajouter une logique pour le moment où le bot est installé au sein d’une unité d’organisation.
Bot désinstallé
OnInstallationUpdateRemoveAsync
Remplacez-la pour ajouter une logique pour le moment où le bot est désinstallé au sein d’une unité d’organisation.
Autre type d’activité reçu
OnUnrecognizedActivityTypeAsync
Remplacez-la pour gérer n’importe quel type d’activité autrement non géré.
Ces différents gestionnaires ont un turnContext qui fournit des informations sur l’activité entrante, qui correspond à la requête HTTP entrante. Les activités peuvent être de différents types, de sorte que chaque gestionnaire fournit une activité fortement typée dans son paramètre de contexte de tour ; dans la plupart des cas, OnMessageActivityAsync sera toujours géré et est généralement le plus courant.
Comme dans les versions 4.x précédentes de ce framework, il existe également la possibilité d’implémenter la méthode OnTurnAsyncpublique. Actuellement, l’implémentation de base de cette méthode gère la vérification des erreurs, puis appelle chacun des gestionnaires spécifiques (comme les deux que nous définissons dans cet exemple) en fonction du type d’activité entrante. Dans la plupart des cas, vous pouvez laisser cette méthode seule et utiliser les gestionnaires individuels, mais si votre situation nécessite une implémentation personnalisée de OnTurnAsync, il s’agit toujours d’une option.
Important
Si vous remplacez la OnTurnAsync méthode, vous devez appeler base.OnTurnAsync pour obtenir l’implémentation de base afin d’appeler tous les autres On<activity>Async gestionnaires ou d’appeler ces gestionnaires vous-même. Sinon, ces gestionnaires ne seront pas appelés et ce code ne sera pas exécuté.
La logique principale du bot est définie dans le code du bot. Pour implémenter un bot en tant que gestionnaire d’activités, étendez ActivityHandler. ActivityHandler définit différents événements pour différents types d’activités, et vous pouvez modifier le comportement de votre bot en inscrivant des écouteurs d’événements, par exemple avec onMessage et onConversationUpdate.
Utilisez ces méthodes pour inscrire des écouteurs pour chaque type d’événement :
Événement
Méthode d’inscription
Description
Tout type d’activité reçu
onTurn
Inscrit un écouteur pour le moment où une activité est reçue.
Activité de message reçue
onMessage
Inscrit un écouteur pour le moment où une message activité est reçue.
Activité de mise à jour de conversation reçue
onConversationUpdate
Inscrit un écouteur pour le moment où une conversationUpdate activité est reçue.
Les membres ont rejoint la conversation
onMembersAdded
Inscrit un écouteur pour le moment où les membres ont rejoint la conversation, y compris le bot.
Les membres ont quitté la conversation
onMembersRemoved
Inscrit un écouteur pour le moment où les membres ont quitté la conversation, y compris le bot.
Activité de réaction de message reçue
onMessageReaction
Inscrit un écouteur pour le moment où une messageReaction activité est reçue.
Réactions de message ajoutées à un message
onReactionsAdded
Inscrit un écouteur pour le moment où les réactions sont ajoutées à un message.
Réactions de message supprimées d’un message
onReactionsRemoved
Inscrit un écouteur pour le moment où les réactions sont supprimées d’un message.
Activité d’événement reçue
onEvent
Inscrit un écouteur pour le moment où une event activité est reçue.
Activité d’événement de réponse de jeton reçue
onTokenResponseEvent
Inscrit un écouteur pour la réception d’un tokens/response événement.
Activité de mise à jour d’installation reçue
onInstallationUpdate
Inscrit un écouteur pour le moment où une installationUpdate activité est reçue.
Bot installé
onInstallationUpdateAdd
Inscrit un écouteur pour le moment où le bot est installé au sein d’une unité d’organisation.
Bot désinstallé
onInstallationUpdateRemove
Inscrit un écouteur pour le moment où le bot est désinstallé au sein d’une unité d’organisation.
Autre type d’activité reçu
onUnrecognizedActivityType
Inscrit un écouteur lorsqu’un gestionnaire pour le type d’activité spécifique n’est pas défini.
Les gestionnaires d’activités sont terminés
onDialog
Appelé une fois les gestionnaires applicables terminés.
Appelez la next fonction de continuation à partir de chaque gestionnaire pour permettre la poursuite du traitement. S’il next n’est pas appelé, le traitement de l’activité se termine.
La logique principale du bot est définie dans le code du bot. Pour implémenter un bot en tant que gestionnaire d’activités, dérivez votre classe de bot à partir de ActivityHandlerlaquelle implémente l’interface Bot . ActivityHandler définit différents gestionnaires pour différents types d’activités, tels que onMessageActivity, et onMembersAdded. Ces méthodes sont protégées, mais peuvent être substituées, car nous dérivations de ActivityHandler.
Les gestionnaires définis sont ActivityHandler les suivants :
Événement
Gestionnaire
Description
Tout type d’activité reçu
onTurn
Appelle l’un des autres gestionnaires, en fonction du type d’activité reçue.
Activité de message reçue
onMessageActivity
Remplacez-la pour gérer une message activité.
Activité de mise à jour de conversation reçue
onConversationUpdateActivity
Sur une conversationUpdate activité, appelle un gestionnaire si des membres autres que le bot ont rejoint ou quitté la conversation.
Les membres non-bot ont rejoint la conversation
onMembersAdded
Remplacez cette option pour gérer les membres qui rejoignent une conversation.
Les membres non-bot ont quitté la conversation
onMembersRemoved
Remplacez cette option pour gérer les membres quittant une conversation.
Activité d’événement reçue
onEventActivity
Sur une event activité, appelle un gestionnaire spécifique au type d’événement.
Activité d’événement de réponse de jeton reçue
onTokenResponseEvent
Remplacez-la pour gérer les événements de réponse de jeton.
Activité d’événement sans réponse de jeton reçue
onEvent
Remplacez-la pour gérer d’autres types d’événements.
Activité de réaction de message reçue
onMessageReactionActivity
Sur une messageReaction activité, appelle un gestionnaire si une ou plusieurs réactions ont été ajoutées ou supprimées d’un message.
Réactions de message ajoutées à un message
onReactionsAdded
Remplacez cette option pour gérer les réactions ajoutées à un message.
Réactions de message supprimées d’un message
onReactionsRemoved
Remplacez cette option pour gérer les réactions supprimées d’un message.
Activité de mise à jour d’installation reçue
onInstallationUpdate
Sur une installationUpdate activité, appelle un gestionnaire en fonction de l’installation ou de la désinstallation du bot.
Bot installé
onInstallationUpdateAdd
Remplacez-la pour ajouter une logique pour le moment où le bot est installé au sein d’une unité d’organisation.
Bot désinstallé
onInstallationUpdateRemove
Remplacez-la pour ajouter une logique pour le moment où le bot est désinstallé au sein d’une unité d’organisation.
Autre type d’activité reçu
onUnrecognizedActivityType
Remplacez-la pour gérer n’importe quel type d’activité autrement non géré.
Ces différents gestionnaires ont un turnContext qui fournit des informations sur l’activité entrante, qui correspond à la requête HTTP entrante. Les activités peuvent être de différents types, de sorte que chaque gestionnaire fournit une activité fortement typée dans son paramètre de contexte de tour ; dans la plupart des cas, onMessageActivity sera toujours géré et est généralement le plus courant.
Il existe également la possibilité d’implémenter la méthode onTurnpublique. Actuellement, l’implémentation de base de cette méthode gère la vérification des erreurs, puis appelle chacun des gestionnaires spécifiques (comme les deux que nous définissons dans cet exemple) en fonction du type d’activité entrante. Dans la plupart des cas, vous pouvez laisser cette méthode seule et utiliser les gestionnaires individuels, mais si votre situation nécessite une implémentation personnalisée de onTurn, il s’agit toujours d’une option.
Important
Si vous remplacez la onTurn méthode, vous devez appeler super.onTurn pour obtenir l’implémentation de base afin d’appeler tous les autres on<activity> gestionnaires ou d’appeler ces gestionnaires vous-même. Sinon, ces gestionnaires ne seront pas appelés et ce code ne sera pas exécuté.
La logique principale du bot est définie dans le code du bot. Pour implémenter un bot en tant que gestionnaire d’activités, dérivez votre classe de ActivityHandlerbot, qui à son tour dérive de la classe abstraite Bot . ActivityHandler définit différents gestionnaires pour différents types d’activités, tels que on_message_activity et on_members_added. Ces méthodes sont protégées, mais peuvent être substituées, car nous dérivations de ActivityHandler.
Les gestionnaires définis sont ActivityHandler les suivants :
Événement
Gestionnaire
Description
Tout type d’activité reçu
on_turn
Appelle l’un des autres gestionnaires, en fonction du type d’activité reçue.
Activité de message reçue
on_message_activity
Remplacez-la pour gérer une message activité.
Activité de mise à jour de conversation reçue
on_conversation_update_activity
Sur une conversationUpdate activité, appelle un gestionnaire si des membres autres que le bot ont rejoint ou quitté la conversation.
Les membres non-bot ont rejoint la conversation
on_members_added_activity
Remplacez cette option pour gérer les membres qui rejoignent une conversation.
Les membres non-bot ont quitté la conversation
on_members_removed_activity
Remplacez cette option pour gérer les membres quittant une conversation.
Activité d’événement reçue
on_event_activity
Sur une event activité, appelle un gestionnaire spécifique au type d’événement.
Activité d’événement de réponse de jeton reçue
on_token_response_event
Remplacez-la pour gérer les événements de réponse de jeton.
Activité d’événement sans réponse de jeton reçue
on_event_activity
Remplacez-la pour gérer d’autres types d’événements.
Activité de réaction de message reçue
on_message_reaction_activity
Sur une messageReaction activité, appelle un gestionnaire si une ou plusieurs réactions ont été ajoutées ou supprimées d’un message.
Réactions de message ajoutées à un message
on_reactions_added
Remplacez cette option pour gérer les réactions ajoutées à un message.
Réactions de message supprimées d’un message
on_reactions_removed
Remplacez cette option pour gérer les réactions supprimées d’un message.
Activité de mise à jour d’installation reçue
on_installation_update
Sur une installationUpdate activité, appelle un gestionnaire selon que le bot a été installé ou non.
Bot installé
on_installation_update_add
Remplacez-la pour ajouter une logique pour le moment où le bot est installé au sein d’une unité d’organisation.
Bot désinstallé
on_installation_update_remove
Remplacez-la pour ajouter une logique pour le moment où le bot est désinstallé au sein d’une unité d’organisation.
Autre type d’activité reçu
on_unrecognized_activity_type
Remplacez-la pour gérer n’importe quel type d’activité autrement non géré.
Ces différents gestionnaires ont un turn_context qui fournit des informations sur l’activité entrante, qui correspond à la requête HTTP entrante. Les activités peuvent être de différents types, de sorte que chaque gestionnaire fournit une activité fortement typée dans son paramètre de contexte de tour ; dans la plupart des cas, on_message_activity sera toujours géré et est généralement le plus courant.
Comme dans les versions 4.x précédentes de ce framework, il existe également la possibilité d’implémenter la méthode on_turnpublique. Actuellement, l’implémentation de base de cette méthode gère la vérification des erreurs, puis appelle chacun des gestionnaires spécifiques (comme les deux que nous définissons dans cet exemple) en fonction du type d’activité entrante. Dans la plupart des cas, vous pouvez laisser cette méthode seule et utiliser les gestionnaires individuels, mais si votre situation nécessite une implémentation personnalisée de on_turn, il s’agit toujours d’une option.
Important
Si vous remplacez la on_turn méthode, vous devez appeler super().on_turn pour obtenir l’implémentation de base afin d’appeler tous les autres on_<activity> gestionnaires ou d’appeler ces gestionnaires vous-même. Sinon, ces gestionnaires ne seront pas appelés et ce code ne sera pas exécuté.
Exemple de gestionnaire d’activités
Par exemple, vous pouvez gérer les membres ajoutés pour accueillir les utilisateurs à une conversation et gérer les messages pour renvoyer les messages qu’ils envoient au bot.
public class EchoBot : ActivityHandler
{
protected override async Task OnMessageActivityAsync(ITurnContext<IMessageActivity> turnContext, CancellationToken cancellationToken)
{
var replyText = $"Echo: {turnContext.Activity.Text}";
await turnContext.SendActivityAsync(MessageFactory.Text(replyText, replyText), cancellationToken);
}
protected override async Task OnMembersAddedAsync(IList<ChannelAccount> membersAdded, ITurnContext<IConversationUpdateActivity> turnContext, CancellationToken cancellationToken)
{
var welcomeText = "Hello and welcome!";
foreach (var member in membersAdded)
{
if (member.Id != turnContext.Activity.Recipient.Id)
{
await turnContext.SendActivityAsync(MessageFactory.Text(welcomeText, welcomeText), cancellationToken);
}
}
}
}
class EchoBot extends ActivityHandler {
constructor() {
super();
// See https://aka.ms/about-bot-activity-message to learn more about the message and other activity types.
this.onMessage(async (context, next) => {
const replyText = `Echo: ${ context.activity.text }`;
await context.sendActivity(MessageFactory.text(replyText, replyText));
// By calling next() you ensure that the next BotHandler is run.
await next();
});
this.onMembersAdded(async (context, next) => {
const membersAdded = context.activity.membersAdded;
const welcomeText = 'Hello and welcome!';
for (let cnt = 0; cnt < membersAdded.length; ++cnt) {
if (membersAdded[cnt].id !== context.activity.recipient.id) {
await context.sendActivity(MessageFactory.text(welcomeText, welcomeText));
}
}
// By calling next() you ensure that the next BotHandler is run.
await next();
});
}
}
class EchoBot(ActivityHandler):
async def on_members_added_activity(
self, members_added: [ChannelAccount], turn_context: TurnContext
):
for member in members_added:
if member.id != turn_context.activity.recipient.id:
await turn_context.send_activity("Hello and welcome!")
async def on_message_activity(self, turn_context: TurnContext):
return await turn_context.send_activity(
MessageFactory.text(f"Echo: {turn_context.activity.text}")
)
Étapes suivantes
Le canal Microsoft Teams introduit certaines activités spécifiques à Teams que votre bot devra prendre en charge pour fonctionner correctement avec Teams. Pour comprendre les concepts clés du développement de bots pour Microsoft Teams, consultez le fonctionnement des bots Microsoft Teams
Un gestionnaire d’activités est un bon moyen de concevoir un bot qui n’a pas besoin de suivre l’état conversationnel entre les tours. La bibliothèque de dialogues fournit des moyens de gérer une conversation de longue durée avec l’utilisateur.