Crear aplicaciones para reuniones de Teams

Requisitos previos y consideraciones

  • Las aplicaciones en reuniones requieren algunos conocimientos básicos sobre el desarrollo de aplicaciones de Teams. Una aplicación de una reunión puede incluir pestañas, botsy características de extensiones de mensajería, y requerirá actualizaciones en el manifiesto de la aplicación de Teams para indicar que la aplicación está disponible para reuniones

  • Para que la aplicación funcione en el ciclo de vida de la reunión como una pestaña, debe admitir pestañas configurables en el ámbito de groupchat (consulta cómo crear una pestaña de grupo). La compatibilidad con groupchat el ámbito habilitará la aplicación en chats previos a la reunión y posteriores a la reunión.

  • Los parámetros de dirección URL de la API de reunión pueden requerir y el tenantId están disponibles como parte del SDK de cliente de Teams y la actividad meetingId userId de bots. Además, se puede recuperar información confiable para el identificador de usuario y el identificador de inquilino mediante la autenticación sso de pestaña.

  • Algunas API de reunión, como , requieren un registro de bot y GetParticipant un identificador para generar tokens de autenticación.

  • Debe cumplir con las directrices generales de diseño de pestañas de Teams para escenarios previos y posteriores a la reunión. Para obtener experiencias durante las reuniones, consulte las directrices de diseño de la pestaña en la reunión y del cuadro de diálogo en la reunión.

  • Para que la aplicación se actualice en tiempo real, debe estar actualizada en función de las actividades del evento en la reunión. Estos eventos pueden estar dentro del cuadro de diálogo en la reunión (consulte el parámetro de finalización en ) y bot Id Notification Signal API otras superficies durante el ciclo de vida de la reunión.

Referencia de API de aplicaciones de reunión

API Descripción Solicitud Origen
GetUserContext Obtenga información contextual para mostrar contenido relevante en una pestaña de Teams. microsoftTeams.getContext( ( ) => { /... / } ) SDK de cliente de Microsoft Teams
GetParticipant Esta API permite que un bot obtenga información de un participante por identificador de reunión e identificador de participante. GET /v1/meetings/{meetingId}/participants/{participantId}?tenantId={tenantId} Microsoft Bot Framework SDK
NotificationSignal Las señales de reunión se entregarán mediante la siguiente API de notificación de conversación existente (para chat de bot de usuario). Esta API permite a los desarrolladores señalar en función de la acción del usuario final para mostrar en caso de que se muestre una burbuja de diálogo en la reunión. POST /v3/conversations/{conversationId}/activities Microsoft Bot Framework SDK

GetUserContext

Consulte nuestro artículo Obtener contexto para la documentación de la pestaña de Teams para obtener instrucciones sobre cómo identificar y recuperar información contextual para el contenido de la pestaña. Como parte de la extensibilidad de reuniones, se ha agregado un nuevo valor para la carga de respuesta:

meetingId: se usa en una pestaña cuando se ejecuta en el contexto de la reunión.

GetParticipant API

Nota

  • No almacenar en caché los roles de los participantes, ya que el organizador de la reunión puede cambiar un rol en cualquier momento.

  • Actualmente, Teams no admite listas de distribución grandes ni tamaños de lista de más de 350 participantes para la GetParticipant API.

Parámetros de consulta

Valor Tipo Obligatorio Descripción
meetingId string El identificador de reunión está disponible a través de Bot Invoke y el SDK de cliente de Teams.
participantId string El participantId es el identificador de usuario. Está disponible en sso de pestaña, invocación de bot y SDK de cliente de Teams. Se recomienda encarecidamente obtener un participantId del SSO de la pestaña.
tenantId string El tenantId es necesario para los usuarios del espacio empresarial. Está disponible en sso de pestaña, invocación de bot y SDK de cliente de Teams. Se recomienda encarecidamente obtener un tenantId del SSO de pestaña.

Ejemplo

protected override async Task OnMessageActivityAsync(ITurnContext<IMessageActivity> turnContext, CancellationToken cancellationToken)
{
  TeamsMeetingParticipant participant = GetMeetingParticipantAsync(turnContext, "yourMeetingId", "yourParticipantId", "yourTenantId");
  TeamsChannelAccount member = participant.User;
  MeetingParticipantInfo meetingInfo = participant.Meeting;
  ConversationAccount conversation = participant.Conversation;

  await turnContext.SendActivityAsync(MessageFactory.Text($"The participant role is: {meetingInfo.Role}"), cancellationToken);
}

Códigos de respuesta

  • 403: La aplicación no puede obtener información de participantes. Esta es la respuesta de error más común y se desencadena si la aplicación no está instalada en la reunión. Por ejemplo, si la aplicación está deshabilitada por el administrador de inquilinos o bloqueada durante la migración de sitios en directo.
  • 200: La información de los participantes se recuperó correctamente.
  • 401: Token no válido.
  • 404: No se encuentra el participante.
  • 500: La reunión ha expirado (más de 60 días desde que finalizó la reunión) o el participante no tiene permisos en función de su rol.

Próximamente

  • 404: La reunión ha expirado o no se encuentra el participante.

NotificationSignal API

Nota

Cuando se invoca un cuadro de diálogo en la reunión, también se presentará el mismo contenido como mensaje de chat.

Parámetros de consulta

Valor Tipo Obligatorio Descripción
conversationId string El identificador de conversación está disponible como parte de la invocación de bot

Ejemplo

Nota

El completionBotId parámetro del parámetro es opcional en el ejemplo de carga externalResourceUrl solicitada. Bot ID se declara en el manifiesto y el bot recibe un objeto de resultado.

  • Los parámetros de ancho y alto externalResourceUrl deben estar en píxeles. Consulte las directrices de diseño para asegurarse de que las dimensiones se encuentran dentro de los límites permitidos.
  • La dirección URL es la página cargada como un <iframe> cuadro de diálogo en la reunión. El dominio debe estar en la matriz de la validDomains aplicación en el manifiesto de la aplicación.
Activity activity = MessageFactory.Text("This is a meeting signal test");

activity.ChannelData = new TeamsChannelData
  {
    Notification = new NotificationInfo()
                    {
                        AlertInMeeting = true,
                        ExternalResourceUrl = "https://teams.microsoft.com/l/bubble/APP_ID?url=<url>&height=<height>&width=<width>&title=<title>&completionBotId=BOT_APP_ID"
                    }
  };
await turnContext.SendActivityAsync(activity).ConfigureAwait(false);

Códigos de respuesta

  • 201: la actividad con señal se envía correctamente
  • 401: token no válido
  • 201: La actividad con señal se envía correctamente.
  • 401: Token no válido.
  • 403: La aplicación no puede enviar la señal. Esto puede ocurrir debido a diversos motivos, como que el administrador de inquilinos deshabilite la aplicación, la aplicación se bloquee durante la migración de sitios en directo, y así sucesivamente. En este caso, la carga contiene un mensaje de error detallado.
  • 404: El chat de la reunión no existe.

Habilitar la aplicación para reuniones de Teams

Actualizar el manifiesto de la aplicación

Las funcionalidades de la aplicación de reuniones se declaran en el manifiesto de la aplicación a través de los -> ámbitos configurableTabs y las matrices de contexto. El ámbito define a quién y el contexto define dónde estará disponible la aplicación.

Nota

Usa el esquema de manifiesto de Developer Preview para probar esto en el manifiesto de la aplicación.


"configurableTabs": [
    {
      "configurationUrl": "https://contoso.com/teamstab/configure",
      "canUpdateConfiguration": true,
      "scopes": [
        "team",
        "groupchat"
      ],
      "context":[
        "channelTab",
        "privateChatTab",
        "meetingChatTab",
        "meetingDetailsTab",
        "meetingSidePanel"
     ]
    }
  ]

Context (propiedad)

La pestaña context y las propiedades funcionan en armonía para permitirte determinar dónde quieres que aparezca la scopes aplicación. Las pestañas del team ámbito o pueden tener más de un groupchat contexto. Los valores posibles para la propiedad context son los siguientes:

  • channelTab: una pestaña en el encabezado de un canal de equipo.
  • privateChatTab: una pestaña en el encabezado de un chat de grupo entre un conjunto de usuarios que no está en el contexto de un equipo o reunión.
  • meetingChatTab: una pestaña en el encabezado de un chat de grupo entre un conjunto de usuarios en el contexto de una reunión programada.
  • meetingDetailsTab: una pestaña en el encabezado de la vista de detalles de la reunión del calendario.
  • meetingSidePanel: un panel en la reunión abierto a través de la barra unificada (barra u).

Nota

La propiedad "Context" no se admite actualmente y, por lo tanto, se omitirá en los clientes móviles

Configurar la aplicación para escenarios de reunión

Nota

  • Para que la aplicación esté visible en la galería de pestañas, debe admitir pestañas configurables y el ámbito de chat en grupo.

  • Los clientes móviles solo admiten pestañas en superficies de reuniones previas y posteriores. Las experiencias en la reunión (cuadro de diálogo y pestaña en la reunión) en dispositivos móviles estarán disponibles próximamente. Siga las instrucciones para pestañas en dispositivos móviles al crear las pestañas para móviles.

Antes de una reunión

Los usuarios con roles de organizador o moderador agregan pestañas a una reunión con el botón más ➕ en las páginas de detalles de chat y reunión. Las extensiones de mensajería se agregan a través del menú de puntos suspensivos o desbordamiento ●●● ubicado debajo del área de redacción de mensajes en el chat. Los bots se agregan a un chat de reunión con la tecla @ " y seleccionando Obtener bots.

✔ La identidad del usuario debe confirmarse a través del SSO de pestañas. Después de esta autenticación, la aplicación puede recuperar el rol de usuario a través de la API GetParticipant.

✔ en función del rol de usuario, la aplicación ahora tendrá la capacidad de presentar experiencias específicas de roles. Por ejemplo, una aplicación de sondeo puede permitir que solo los organizadores y los presentadores creen un nuevo sondeo.

NOTA: Las asignaciones de roles se pueden cambiar mientras una reunión está en curso. Vea Roles en una reunión de Teams.

Durante una reunión

sidePanel

✔ en el manifiesto de la aplicación, agrega sidePanel a la matriz de contexto como se ha descrito anteriormente.

✔ en la reunión, así como en todos los escenarios, la aplicación se representará en una pestaña de reunión de 320 píxeles de ancho. La pestaña debe estar optimizada para esto. Consulta la interfaz , FrameContext

✔Referir al SDK de Teams para usar la API userContext para enrutar las solicitudes en consecuencia.

✔ consulte el flujo de autenticación de Teams para ver las pestañas. El flujo de autenticación para pestañas es muy similar al flujo de autenticación para sitios web. Por lo tanto, las pestañas pueden usar OAuth 2.0 directamente. Vea también , plataforma de identidad de Microsoft y flujo de código de autorización de OAuth 2.0.

✔ extensión de mensaje debe funcionar según lo esperado cuando un usuario está en una vista en la reunión y debe poder publicar tarjetas de extensión de mensaje de redacción.

✔ AppName en la reunión: la información sobre herramientas debe mostrar el nombre de la aplicación en la barra U de la reunión.

Diálogo en la reunión

✔ debe cumplir las directrices de diseño del cuadro de diálogo en la reunión.

✔ consulte el flujo de autenticación de Teams para ver las pestañas.

✔ usar la API de notificación para indicar que es necesario desencadenar una notificación de burbuja.

✔ como parte de la carga de la solicitud de notificación, incluya la dirección URL donde se hospeda el contenido que se va a presentar.

✔ cuadro de diálogo En reunión no debe usar el módulo de tareas.

Nota

  • Estas notificaciones son persistentes por naturaleza. Debe invocar la función submitTask() para descartar automáticamente después de que un usuario realiza una acción en la vista web. Este es un requisito para el envío de aplicaciones. Vea también, SDK de Teams: módulo de tareas.

  • Si quieres que la aplicación admita usuarios anónimos, la carga inicial de la solicitud de invocación debe basarse en los metadatos de solicitud (id. del usuario) en el objeto, no en los metadatos de solicitud (id. de Azure Active Directory del from.id from from.aadObjectId usuario). Vea Usar módulos de tareas en pestañas y Crear y enviar el módulo de tareas.

Después de una reunión

Las configuraciones posteriores a la reunión y previas a la reunión son equivalentes.

Ejemplo de aplicación de reunión