Compartir a través de


Conversaciones impulsadas por eventos usando un controlador de actividad

SE APLICA A: SDK v4

Un controlador de actividad es una manera controlada por eventos para organizar la lógica conversacional del bot. Cada tipo o subtipo de actividad diferente representa un tipo diferente de evento conversacional. De forma encubierta, el controlador de turnos del bot llama al controlador de actividad individual para el tipo de actividad que haya recibido.

Por ejemplo, si el bot recibe una actividad de mensaje, el controlador de turnos vería dicha actividad entrante y la enviaría al controlador de actividad de actividad en mensaje. Al crear el bot, la lógica del bot para controlar los mensajes y responderlos a mensajes se incluirá en este controlador en actividad de mensaje. Del mismo modo, la lógica para manejar la adición de miembros se incluirá en tu controlador cuando se añaden miembros, que se activa cada vez que se añade un miembro a la conversación.

Para conocer otras formas de organizar la lógica del bot, consulte la sección lógica del bot en cómo funcionan los bots.

Nota:

Para crear agentes con su elección de servicios de inteligencia artificial, orquestación y conocimientos, considere la posibilidad de usar el SDK de agentes de Microsoft 365. El SDK de agentes admite C#, JavaScript o Python. Puede obtener más información sobre el SDK de agentes en aka.ms/agents. Si busca una plataforma de agente basada en SaaS, considere Microsoft Copilot Studio. Si tiene un bot existente creado con Bot Framework SDK, puede actualizar el bot al SDK de agentes. Puede revisar los cambios principales y las actualizaciones en la guía de migración del Bot Framework SDK al SDK de Agentes. Las incidencias de soporte técnico del SDK de Bot Framework ya no se atenderán a partir del 31 de diciembre de 2025.

Para implementar la lógica de estos controladores, deberá reemplazar estos métodos en el bot como se muestra en la sección Controlador de actividad de ejemplo más adelante. En estos controladores no hay implementación base, por lo que se puede agregar la lógica que se desee en la invalidación.

Hay ciertas situaciones en las que puede desear invalidar el controlador de base, como por ejemplo cuando se guarda el estado al final de un turno. Al hacerlo, asegúrese de llamar en primer lugar a await base.OnTurnAsync(turnContext, cancellationToken); para asegurarse de que la implementación base de OnTurnAsync se ejecuta antes que el código adicional. Dicha implementación base es, entre otras cosas, la encargada de llamar al resto de los controladores de actividad como OnMessageActivityAsync.

Gestión de actividades

La lógica del bot procesa las actividades entrantes de uno o varios canales y genera actividades salientes como respuesta.

La lógica principal del bot se define en el código del bot. Para implementar un bot como controlador de actividad, derive la clase de bot de ActivityHandler, que implementa la interfaz IBot. ActivityHandler define varios controladores para diferentes tipos de actividades, como OnMessageActivityAsync, y OnMembersAddedAsync. Estos métodos están protegidos, pero se pueden invalidar, ya que se derivan de ActivityHandler.

Los controladores definidos en ActivityHandler son:

Evento Controlador Descripción
Cualquier tipo de actividad recibida OnTurnAsync Llama a uno de los otros controladores, en función del tipo de actividad que reciba.
Actividad de mensaje recibida OnMessageActivityAsync Se invalida para controlar un actividad message.
Actividad de actualización de conversación recibida OnConversationUpdateActivityAsync En una actividad conversationUpdate, llama a un controlador si cualquiera de los miembros, que no sea el bot, se une a la conversación, o la abandona.
Miembros que no son el bot se han unido a la conversación OnMembersAddedAsync Se invalida para controlar a los miembros que se unen a una conversación.
Miembros que no son bots han abandonado la conversación OnMembersRemovedAsync Se invalida para controlar a los miembros que abandonan una conversación.
Actividad de evento recibida OnEventActivityAsync En una actividad event, llama a un controlador específico del tipo de evento.
Actividad de evento token-respuesta recibida OnTokenResponseEventAsync Se invalida para controlar los eventos de respuesta del token.
Actividad de evento no token-respuesta recibida OnEventAsync Se invalida para controlar otros tipos de eventos.
Actividad de reacción de mensajes recibida OnMessageReactionActivityAsync En una actividad messageReaction, llama a un controlador si se han agregado o quitado una o más reacciones de un mensaje.
Reacciones de mensajes agregadas a un mensaje OnReactionsAddedAsync Invalide esto para controlar las reacciones agregadas a un mensaje.
Reacciones de mensajes eliminadas de un mensaje OnReactionsRemovedAsync Invalide esto para controlar las reacciones eliminadas de un mensaje.
Actividad recibida de actualización de la instalación OnInstallationUpdateActivityAsync En una actividad installationUpdate, llama a un controlador en función de si el bot se instaló o desinstaló.
Bot instalado OnInstallationUpdateAddAsync Invalide esta opción para agregar lógica para cuando el bot esté instalado dentro de una unidad organizativa.
Bot desinstalado OnInstallationUpdateRemoveAsync Invalide esta opción para agregar lógica para cuando el bot esté desinstalado dentro de una unidad organizativa.
Otro tipo de actividad recibida OnUnrecognizedActivityTypeAsync Se invalida para controlar cualquier tipo de actividad que no se controle de otra forma.

Estos controladores tienen un objeto turnContext que proporciona información acerca de la actividad entrante, que corresponde a la solicitud HTTP entrante. Las actividades pueden ser de diversos tipos, por lo que cada controlador proporciona una actividad fuertemente tipada en su parámetro de contexto de turno; en la mayoría de los casos, OnMessageActivityAsync siempre se controlará y, por lo general, es el más común.

Al igual que en versiones anteriores de 4.x de este marco, también existe la opción de implementar el método público OnTurnAsync. Actualmente, la implementación base de este método controla la comprobación de errores y, después, llama a cada uno de los controladores específicos (por ejemplo, los dos que se definen en este ejemplo) en función del tipo de actividad entrante. En la mayoría de los casos, puede dejar el método tal como está y usar los controladores individuales, pero si su situación requiere una implementación personalizada de OnTurnAsync, sigue siendo una opción.

Importante

Si invalida el método OnTurnAsync, deberá llamar a base.OnTurnAsync para obtener la implementación base para llamar a los restantes controladores de On<activity>Async, o bien llamar a los controladores personalmente. De lo contrario, no se llamará a dichos controladores y el código no se ejecutará.

Controlador de actividad de ejemplo

Por ejemplo, puede gestionar cuando se añaden miembros para dar la bienvenida a los usuarios a una conversación y gestionar cuando se envían mensajes para repetir los mensajes que envían al 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);
            }
        }
    }
}

Pasos siguientes

  • El canal de Microsoft Teams presenta algunas actividades específicas de Teams que el bot tendrá que admitir para trabajar correctamente con Teams. Para comprender los conceptos clave del desarrollo de bots para Microsoft Teams, consulte Cómo funcionan los bots de Microsoft Teams.
  • Un controlador de actividad es una buena manera de diseñar un bot que no necesita realizar un seguimiento del estado conversacional entre turnos. La biblioteca de diálogos proporciona maneras de administrar una conversación de larga duración con el usuario.