Escuchar eventos

Un evento es un concepto fundamental en la creación de agentes: representa algo digno de mención que sucede en Microsoft Teams o en la aplicación. Estos eventos pueden originarse desde el usuario (por ejemplo, instalar o desinstalar la aplicación, enviar un mensaje, enviar un formulario) o desde el servidor de aplicaciones (por ejemplo, inicio, error en un controlador).

Diagrama de flujo que muestra las actividades de Teams y los eventos de inicio de sesión que llegan al servidor de aplicaciones, que envía eventos entrantes y salientes a un controlador de eventos registrado con app.event().

El SDK de Teams facilita la suscripción a estos eventos y responde adecuadamente. Puede registrar controladores de eventos para realizar acciones personalizadas cuando se produzcan eventos específicos, como registrar errores, desencadenar flujos de trabajo o enviar mensajes de seguimiento.

Estos son los eventos para los que puede empezar a crear controladores:

Nombre del evento Descripción
start Se desencadena cuando se inicia la aplicación. Es útil para la configuración o el registro durante el arranque.
sign_in Se desencadena durante un flujo de inicio de sesión a través de Teams.
error Se desencadena cuando se produce un error no controlado en la aplicación. Ideal para diagnósticos.
activity Se desencadena para todas las actividades entrantes de Teams (mensajes, comandos, etc.).
activity_response Se desencadena cuando la aplicación envía una respuesta a una actividad. Útil para el registro.
activity_sent Se desencadena cuando se envía una actividad (no necesariamente en respuesta).

Nota:

El registro del controlador de eventos se usa @app.event("<event_name>") con una función asincrónica que recibe un objeto de evento específico para el tipo de evento (por ejemplo, ErrorEvent, ActivityEvent).

Nombre del evento Descripción
start Se desencadena cuando se inicia la aplicación. Es útil para la configuración o el registro durante el arranque.
signin Se desencadena durante un flujo de inicio de sesión a través de Teams.
error Se desencadena cuando se produce un error no controlado en la aplicación. Ideal para diagnósticos.
activity Un cajón de sastre para las actividades entrantes de Teams (mensajes, comandos, etc.).
activity.response Se desencadena cuando la aplicación envía una respuesta a una actividad. Útil para el registro.
activity.sent Se desencadena cuando se envía una actividad (no necesariamente en respuesta).

Ejemplo 1

Podemos suscribirnos a los errores que se producen en la aplicación.

@app.event("error")
async def handle_error(event: ErrorEvent):
    print(f"Error occurred: {event.error}")
    # Or alternatively, send it to an observability platform
app.event('error', ({ error }) => {
  app.log.error(error);
  // Or Alternatively, send it to an observability platform
});

Ejemplo 2

Cuando un usuario inicie sesión con OAuth o SSO, use la Graph API para capturar su perfil y saludarlo.

from microsoft_teams.graph import get_graph_client

graph = app.add_oauth_flow("graph")

@graph.on_signin
async def handle_signin(event: SignInEvent):
    client = get_graph_client(event.token_response.token)
    me = await client.me.get()
    await event.activity_ctx.send(f"👋 Hello {me.display_name}")

Sugerencia

El evento de toda sign_in la aplicación se desencadena para todas las conexiones. Para reaccionar a solo uno, use su controlador de @flow.on_signin flujo como se muestra arriba. Consulte Autenticar usuarios en Microsoft Teams.

Cuando un usuario inicia sesión con OAuth o SSO, use la API de Graph para capturar su perfil y saludarlo.

import { Client as GraphClient } from '@microsoft/teams.graph';
import * as endpoints from '@microsoft/teams.graph-endpoints';

const graph = app.addOAuthFlow('graph');

graph.onSignInComplete(async (ctx, token) => {
  const client = new GraphClient({ token: () => token.token }, { baseUrlRoot: app.graphBaseUrl });
  const me = await client.call(endpoints.me.get);
  await ctx.send(`👋 Hello ${me.displayName}`);
});

Sugerencia

El evento de toda signin la aplicación se desencadena para todas las conexiones. Para reaccionar a solo uno, use la devolución de onSignInComplete llamada de su flujo como se muestra arriba. Consulte el Ver Autenticar usuarios en Microsoft Teams.