Descripción de los conceptos del bot

Las interacciones de un bot pueden usar texto, voz, imágenes o vídeo. Procesa la entrada del usuario para comprender su solicitud y evalúa la entrada para realizar las tareas pertinentes. Un bot puede solicitar información o habilitar el acceso a los servicios y responde al usuario.

Ámbitos de bot

Los bots en Microsoft Teams pueden formar parte de una conversación uno a uno, de un chat de grupo o de un canal de un equipo. Cada ámbito proporciona oportunidades y dificultades únicas para su bot de conversación.

En un canal En un chat de grupo En un chat individual
Alcance masivo Menos miembros Manera tradicional
Interacciones individuales concisas @mention a bot Bots de Q&A
@mention a bot Similar al canal Bots que cuentan chistes y toman notas

En un canal

Los canales contienen conversaciones en subprocesos entre varias personas, incluso hasta 2000. Esto proporciona un alcance potencialmente masivo al bot, pero las interacciones individuales deben ser concretas. Las interacciones tradicionales de varios turnos no funcionan. En su lugar, debe buscar usar tarjetas o diálogos interactivos (denominados módulos de tareas en TeamsJS v1.x) o mover la conversación a una conversación uno a uno para recopilar mucha información. El bot solo tiene acceso a los mensajes en los que es @mentioned. Puede recuperar mensajes adicionales de la conversación con Microsoft Graph y los permisos a nivel de organización.

Los bots funcionan mejor en un canal en los siguientes casos:

  • Notificaciones, especialmente si se proporciona una tarjeta interactiva para que los usuarios puedan obtener información adicional.
  • Escenarios de comentarios, como sondeos y encuestas.
  • El ciclo de solicitud o respuesta única resuelve las interacciones y los resultados son útiles para varios miembros de la conversación.
  • Bots sociales o divertidos, donde hay imágenes de gatos geniales, se elige aleatoriamente un ganador, etc.

En un chat de grupo

Los chats de grupo son conversaciones entre tres o más personas que no se desarrollan en hilos. Tienden a tener menos miembros que un canal y son más transitorios. De forma similar a un canal, el bot solo tiene acceso a los mensajes donde está @mentioned directamente.

Los bots que funcionan mejor en un canal también funcionan mejor en un chat de grupo.

En un chat individual

Esta es la manera tradicional en la que un bot de conversación interactúa con un usuario. Algunos ejemplos de bots conversacionales individuales son:

  • Bots de Q&A
  • bots que inician flujos de trabajo en otros sistemas.
  • bots que cuentan chistes.
  • bots que toman notas. Antes de crear bots de chat uno a uno, considere si una interfaz basada en conversación es la mejor manera de presentar la funcionalidad.

Controlador de actividad y lógica de bot

Para crear una aplicación de bot que satisfaga sus necesidades, es esencial comprender el controlador de actividad y la lógica del bot de Microsoft Teams. Estos dos componentes clave funcionan juntos para organizar la lógica conversacional.

  • Controlador de actividad de Teams: procesa eventos e interacciones específicos de Teams, como la creación de canales, adiciones de miembros del equipo y otras acciones exclusivas del entorno de Teams. En el SDK de Teams v2, los controladores se registran directamente en una App instancia en lugar de mediante la herencia de clases.

  • Lógica del bot: el App objeto contiene la lógica conversacional del bot y es responsable de tomar decisiones basadas en la entrada del usuario. Las actividades entrantes se enrutan al controlador adecuado según el tipo de actividad y la coincidencia de patrones opcional.

Controlador de actividad de Teams

El controlador de actividad es el núcleo de la funcionalidad de un bot, la administración y el procesamiento de las interacciones del usuario. En el SDK de Teams v2:

  • Crea una instancia de un App objeto y registra controladores en él.
  • Los controladores reciben un objeto de contexto con tipo (IActivityContext en TypeScript, IContext<TActivity> en C#, ActivityContext[TActivity] en Python).
  • Las respuestas y los mensajes proactivos se envían a través de ctx.reply() o ctx.send().

Cuando un bot de Teams recibe una actividad, el SDK la enruta a través del controlador registrado. Los eventos específicos de Teams (ciclo de vida del canal, cambios de miembros, etc.) se exponen como eventos con nombre distintos, por lo que no es necesario inspeccionar channelData.eventType manualmente.

Nota:

Si una actividad de bot tarda más de 15 segundos en procesarse, Teams envía una solicitud de reintento al punto de conexión del bot, por lo que es posible que vea solicitudes duplicadas.

Fragmentos de código del controlador de actividad

En los fragmentos de código siguientes se muestran los controladores de actividad de Teams para los eventos de ciclo de vida del canal y del equipo.

Los bots se compilan mediante el @microsoft/teams.apps paquete . Cree una instancia de y App registre controladores con app.on(eventName, handler). El SDK enruta las actividades al controlador correcto en función de la cadena de nombre de evento.

channelCreated

import { App } from '@microsoft/teams.apps';

const app = new App();

app.on('channelCreated', async ({ activity }) => {
  const channel = activity.channelData.channel; // { id, name }
  const team    = activity.channelData.team;    // { id, name }
  // Code logic here
});

channelDeleted

app.on('channelDeleted', async ({ activity }) => {
  // Code logic here
});

channelRenamed

app.on('channelRenamed', async ({ activity }) => {
  // Code logic here
});

teamRenamed

app.on('teamRenamed', async ({ activity }) => {
  // Code logic here
});

membersAdded / membersRemoved

app.on('membersAdded', async ({ activity, send }) => {
  for (const member of activity.membersAdded) {
    await send(`Welcome, ${member.name}!`);
  }
});

app.on('membersRemoved', async ({ activity }) => {
  // Code logic here
});

messageUpdate / messageDelete

Las ediciones de mensajes se muestran como messageUpdate. Las eliminaciones temporales se exponen como messageDelete : activity.channelData.eventType será 'softDeleteMessage'.

app.on('messageUpdate', async ({ activity }) => {
  // Code logic here
});

app.on('messageDelete', async ({ activity }) => {
  // activity.channelData.eventType === 'softDeleteMessage' for soft deletes
  // Code logic here
});

Ejemplo de controlador de actividad de bot

El código siguiente proporciona un ejemplo de una actividad de bot:

import { App } from '@microsoft/teams.apps';

const app = new App();

app.on('message', async ({ activity, reply }) => {
  const senderName = activity.from.name;
  await send(`Hello <at>${senderName}</at>.`);
});

app.start().catch(console.error);

Lógica del bot

La lógica del bot incorpora las reglas fundamentales y los marcos de toma de decisiones que dictan las acciones e interacciones de un bot. Describe cómo interpreta el bot la entrada del usuario, formula respuestas y participa en conversaciones.

En el SDK de Teams v2, la lógica del bot procesa las actividades entrantes desde uno o varios canales de bot y genera actividades salientes. La instancia controla todo el App enrutamiento de actividad: registra los controladores y el SDK les envía actividades automáticamente.

Controladores de actividad principales

La lista de nombres de eventos admitidos por app.on() incluye lo siguiente:

Evento Cadena de nombre de evento Descripción
Cualquier tipo de actividad recibida 'activity' Controlador catch-all llamado para cada actividad.
Actividad de mensaje recibida 'message' Controlar los mensajes de texto entrantes. Use app.message(pattern, handler) para la coincidencia de expresiones regulares.
Actualización de conversación recibida 'conversationUpdate' Actividad de actualización de conversación sin formato.
Instalación agregada 'install.add' Se instaló el bot.
Instalación eliminada 'install.remove' Se ha desinstalado el bot.
Miembros agregados 'membersAdded' Uno o varios miembros se unieron a la conversación.
Miembros eliminados 'membersRemoved' Uno o más miembros dejaron la conversación.
Mensaje editado 'messageUpdate' Se editó un mensaje en la conversación.
Mensaje eliminado temporalmente 'messageDelete' Se eliminó temporalmente un mensaje (activity.channelData.eventType === 'softDeleteMessage').
Recibo de lectura recibido 'readReceipt' Se recibió un recibo de lectura.

Controladores de eventos específicos de Teams

app.on() admite las siguientes cadenas de nombre de evento específicas de Teams:

Evento Cadena de nombre de evento Descripción
channelCreated 'channelCreated' Se creó un canal de Teams.
channelDeleted 'channelDeleted' Se eliminó un canal de Teams.
channelRenamed 'channelRenamed' Se cambió el nombre de un canal de Teams.
channelRestored 'channelRestored' Se restauró un canal de Teams.
channelMemberAdded 'channelMemberAdded' Se agregó un miembro a un canal.
channelMemberRemoved 'channelMemberRemoved' Se quitó un miembro de un canal.
teamRenamed 'teamRenamed' Se cambió el nombre del equipo.
teamArchived 'teamArchived' El equipo se archivó.
teamDeleted 'teamDeleted' Se eliminó el equipo.
teamRestored 'teamRestored' El equipo se restauró.
Reunión iniciada 'meetingStart' Se ha iniciado una reunión.
Reunión finalizada 'meetingEnd' Una reunión ha terminado.
Participante unido 'meetingParticipantJoin' Un participante se unió a una reunión.
Participante a la izquierda 'meetingParticipantLeave' Un participante salió de una reunión.

Actividades de invocación de Teams

En la tabla siguiente se enumeran los controladores de actividad de invocación disponibles a través de app.on():

Tipo de invocación Cadena de nombre de evento Descripción
CardAction.Invoke 'card.action' Se recibió una actividad de invocación de acción de tarjeta (adaptiveCard/action).
signin/verifyState Controlado automáticamente por el SDK (flujo de OAuth) Actividad de estado de comprobación de inicio de sesión.
task/fetch 'dialog.open' Se ha capturado un cuadro de diálogo (módulo de tareas).
task/submit 'dialog.submit' Se envió un cuadro de diálogo (módulo de tareas).

Ahora que se ha familiarizado con los controladores de actividad del bot, veamos cómo se comportan los bots de forma diferente en función de la conversación y de los mensajes que recibe o envía.

Recomendaciones

Un amplio diálogo entre el bot y el usuario es una manera lenta y compleja de completar una tarea. Un bot que admite comandos excesivos, especialmente una amplia gama de comandos, no es correcto o los usuarios no los ven de forma positiva.

  • Evitar experiencias de varios turnos en el chat Un cuadro de diálogo extenso requiere que el desarrollador mantenga el estado. Para salir de este estado, un usuario debe agotar el tiempo de espera o seleccionar Cancelar. Además, el proceso es tedioso. Por ejemplo, consulte el siguiente escenario de conversación:

    USUARIO: Programe una reunión con Megan.

    BOT: he encontrado 200 resultados, incluidos el nombre y el apellido.

    USUARIO: Programe una reunión con Megan Bowen.

    BOT: Ok, ¿a qué hora le gustaría reunirse con Megan Bowen?

    USUARIO: 1:00 p.m.

    BOT: ¿En qué día?

  • Compatibilidad con seis comandos o menos frecuentes Dado que solo hay seis comandos visibles en el menú del bot actual, es poco probable que se use nada más con cualquier frecuencia. Bots que profundizan en un área específica en lugar de tratar de ser un asistente de trabajo amplio y funcionan mejor.

  • Optimizar el tamaño de knowledge base para una interacción más rápida Una de las desventajas de los bots es que es difícil mantener una gran knowledge base de recuperación con respuestas no clasificadas. Los bots son más adecuados para interacciones breves y rápidas y no para examinar listas largas en busca de una respuesta.

Nota:

La plataforma Teams solo admite la versión 1.2 de Seguridad de la capa de transporte (TLS). Asegúrese de configurar el entorno del bot en consecuencia.

Exploración de otras características del bot

Además de las características de bot convencionales, también puede explorar las características avanzadas disponibles en una aplicación de bot de Teams:

Ejemplo de código

Ejemplo de nombre Descripción TypeScript C# Python
Bot de conversación de Teams Esta aplicación muestra eventos de bot básicos. View View View