Updates from: 06/24/2021 03:14:18
Service Microsoft Docs article Related commit history on GitHub Change details
platform Create Apps For Teams Meetings https://github.com/MicrosoftDocs/msteams-docs/commits/master/msteams-platform/apps-in-teams-meetings/create-apps-for-teams-meetings.md
Before you work with apps for Teams meetings, you must have an understanding of
* For your app to update in real time, it must be up-to-date based on event activities in the meeting. These events can be within the in-meeting dialog box and other stages across the meeting lifecycle. For the in-meeting dialog box, see completion `bot Id` parameter in `NotificationSignal` API.
-After you have gone through the prerequisites, you can use the meeting apps API references `GetUserContext`, `GetParticipant`, and `NotificationSignal` that enable you to access information using attributes and display relevant content.
+* Meeting Details API must have a bot registration and bot ID. It requires Bot SDK to get `TurnContext`.
+
+* For real-time meeting events, you must be familiar with the `TurnContext` object available through the Bot SDK. The `Activity` object in `TurnContext` contains the payload with the actual start and end time. Real-time meeting events require a registered bot ID from the Teams platform.
+
+After you have gone through the prerequisites, you can use the meeting apps API references `GetUserContext`, `GetParticipant`, `NotificationSignal`, and Meeting Details API that enable you to access information using attributes and display relevant content.
## Meeting apps API references
The following table provides a list of these APIs:
|**GetUserContext**| This API enables you to get contextual information to display relevant content in a Teams tab. |_**microsoftTeams.getContext( ( ) => { /*...*/ } )**_|Microsoft Teams Client SDK| |**GetParticipant**| This API allows a bot to fetch participant information by meeting ID and participant ID. |**GET** _**/v1/meetings/{meetingId}/participants/{participantId}?tenantId={tenantId}**_ |Microsoft Bot Framework SDK| |**NotificationSignal** | This API enables you to provide meeting signals that are delivered using the existing conversation notification API for user-bot chat. It allows you to signal based on user action that shows an in-meeting dialog box. |**POST** _**/v3/conversations/{conversationId}/activities**_|Microsoft Bot Framework SDK|
+|**Meeting Details** | This API enables you to get static meeting metadata. |**GET** _**/v1/meetings/{meetingId}**_| Bot SDK |
### GetUserContext API
The `NotificationSignal` API includes the following response codes:
| **403** | The app is unable to send the signal. This can happen due to various reasons such as the tenant admin disables the app, the app is blocked during live site migration, and so on. In this case, the payload contains a detailed error message. | | **404** | The meeting chat does not exist. |
+### Meeting Details API
+
+> [!NOTE]
+> This feature is currently available in [public developer preview](../resources/dev-preview/developer-preview-intro.md) only.
+
+The Meeting Details API enables your app to get static meeting metadata. These are data points that do not change dynamically.
+The API is available through Bot Services.
+
+#### Query parameter
+
+The Meeting Details API includes the following query parameter:
+
+|Value|Type|Required|Description|
+|||-||
+|**meetingId**| String | Yes | The meeting identifier is available through Bot Invoke and Teams Client SDK. |
+
+#### Example
+
+The Meeting Details API includes the following examples:
+
+# [C#](#tab/dotnet)
+
+```csharp
+var connectorClient = parameters.TurnContext.TurnState.Get<IConnectorClient>();
+var creds = connectorClient.Credentials as AppCredentials;
+var bearerToken = await creds.GetTokenAsync().ConfigureAwait(false);
+var request = new HttpRequestMessage(HttpMethod.Get, new Uri(new Uri(connectorClient.BaseUri.OriginalString), $"v1/meetings/{meetingId}"));
+request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", bearerToken);
+HttpResponseMessage response = await (connectorClient as ServiceClient<ConnectorClient>).HttpClient.SendAsync(request, CancellationToken.None).ConfigureAwait(false);
+string content;
+if (response.Content != null)
+{
+ content = await response.Content.ReadAsStringAsync().ConfigureAwait(false);
+}
+```
+
+# [JavaScript](#tab/javascript)
+
+Not available
+
+# [JSON](#tab/json)
+
+```http
+GET /v1/meetings/{meetingId}
+```
+++
+The JSON response body for Meeting Details API is as follows:
+
+```json
+{
+ "details": {
+ "id": "meeting ID",
+ "msGraphResourceId": "",
+ "scheduledStartTime": "2020-08-21T02:30:00+00:00",
+ "scheduledEndTime": "2020-08-21T03:00:00+00:00",
+ "joinUrl": "https://teams.microsoft.com/l/xx",
+ "title": "All Hands",
+ "type": "Scheduled"
+ },
+ "conversation": {
+ "isGroup": true,
+ ΓÇ£conversationTypeΓÇ¥: ΓÇ£groupchatΓÇ¥,
+ "id": "meeting chat ID"
+ },
+ "organizer": {
+ "id": "<organizer user ID>",
+ "aadObjectId": "<AAD ID>",
+ "tenantId": "<Tenant ID>"
+ }
+}
+```
+
+## Real-time Teams meeting events
+
+> [!NOTE]
+> This feature is currently available in [public developer preview](../resources/dev-preview/developer-preview-intro.md) only.
+
+The user can receive real-time meeting events. As soon as any app is associated with a meeting, the actual meeting start and meeting end time are shared with the bot.
+
+Actual start and end time of a meeting are different from the scheduled start and end time. The meeting details API provides the scheduled start and end time while the event provides the actual start and end time.
+
+### Example of meeting start event payload
+
+The following code provides an example of meeting start event payload:
+
+```json
+{
+ "name": "application/vnd.microsoft.meetingStart",
+ "type": "event",
+ "timestamp": "2021-04-29T16:10:41.1252256Z",
+ "id": "123",
+ "channelId": "msteams",
+ "serviceUrl": "https://microsoft.com",
+ "from": {
+ "id": "userID",
+ "aadObjectId": "aadOnjectId"
+ },
+ "conversation": {
+ "isGroup": true,
+ "tenantId": "tenantId",
+ "id": "thread id"
+ },
+ "recipient": {
+ "id": "user Id",
+ "name": "user name"
+ },
+ "entities": [
+ {
+ "locale": "en-US",
+ "country": "US",
+ "type": "clientInfo"
+ }
+ ],
+ "channelData": {
+ "tenant": {
+ "id": "channel id"
+ },
+ "source": null,
+ "meeting": {
+ "id": "meeting id"
+ }
+ },
+ "value": {
+ "MeetingType": "Scheduled",
+ "Title": "Meeting Start/End Event",
+ "Id":"meeting id",
+ "JoinUrl": "url"
+ "StartTime": "2021-04-29T16:17:17.4388966Z"
+ },
+ "locale": "en-US"
+}
+```
+
+### Example of meeting end event payload
+
+The following code provides an example of meeting end event payload:
+
+```json
+{
+ "name": "application/vnd.microsoft.meetingEnd",
+ "type": "event",
+ "timestamp": "2021-04-29T16:17:17.4388966Z",
+ "id": "123",
+ "channelId": "msteams",
+ "serviceUrl": "https://microsoft.com",
+ "from": {
+ "id": "user id",
+ "aadObjectId": "aadObjectId"
+ },
+ "conversation": {
+ "isGroup": true,
+ "tenantId": "tenantId",
+ "id": "thread id"
+ },
+ "recipient": {
+ "id": "user id",
+ "name": "user name"
+ },
+ "entities": [
+ {
+ "locale": "en-US",
+ "country": "US",
+ "type": "clientInfo"
+ }
+ ],
+ "channelData": {
+ "tenant": {
+ "id": "channel id"
+ },
+ "source": null,
+ "meeting": {
+ "id": "meeting Id"
+ }
+ },
+ "value": {
+ "MeetingType": "Scheduled",
+ "Title": "Meeting Start/End Event in Canary",
+ "Id": "19:meeting_NTM3ZDJjOTUtZGRhOS00MzYxLTk5NDAtMzY4M2IzZWFjZGE1@thread.v2",
+ "JoinUrl": "url",
+ "EndTime": "2021-04-29T16:17:17.4388966Z"
+ },
+ "locale": "en-US"
+}
+```
+
+### Example of getting metadata of a meeting
+
+Your bot receives the event through the `OnEventActivityAsync` handler.
+
+To deserialize the json payload, a model object is introduced to get the metadata of a meeting. The metadata of a meeting resides in the `value` property in the event payload. The `MeetingStartEndEventvalue` model object is created, whose member variables correspond to the keys under the `value` property in the event payload.
+
+The following code shows how to capture the metadata of a meeting that is `MeetingType`, `Title`, `Id`, `JoinUrl`, `StartTime`, and `EndTime` from a meeting start and end event:
+
+```csharp
+protected override async Task OnEventActivityAsync(
+ITurnContext<IEventActivity> turnContext, CancellationToken cancellationToken)
+{
+ // Event Name is either 'application/vnd.microsoft.meetingStart' or 'application/vnd.microsoft.meetingEnd'
+ var meetingEventName = turnContext.Activity.Name;
+ // Value contains meeting information (ex: meeting type, start time, etc).
+ var meetingEventInfo = turnContext.Activity.Value as JObject;
+ var meetingEventInfoObject =
+meetingEventInfo.ToObject<MeetingStartEndEventValue>();
+ // Create a very simple adaptive card with meeting information
+var attachmentCard = createMeetingStartOrEndEventAttachment(meetingEventName,
+meetingEventInfoObject);
+ await turnContext.SendActivityAsync(MessageFactory.Attachment(attachmentCard));
+}
+```
+
+The MeetingStartEndEventvalue.cs includes the following code:
+
+```csharp
+public class MeetingStartEndEventValue
+{
+ public string Id { get; set; }
+ public string Title { get; set; }
+ public string MeetingType { get; set; }
+ public string JoinUrl { get; set; }
+ public string StartTime { get; set; }
+ public string EndTime { get; set; }
+}
+```
+ ## Code sample |Sample name | Description | .NET | Node.js |
platform Visual Studio Overview https://github.com/MicrosoftDocs/msteams-docs/commits/master/msteams-platform/toolkit/visual-studio-overview.md
description: Get started building great custom apps directly within Visual Studi
keywords: teams visual studio toolkit localization_priority: Normal -+ # Build apps with the Teams Toolkit and Visual Studio
The Microsoft Teams Toolkit enables you to create custom Teams apps directly wit
1. [Enable developer preview](../resources/dev-preview/developer-preview-intro.md#enable-developer-preview).
-1. Make sure that the **<span>ASP.NE</span>T and web development module** has been added to your Visual Studio instance. You can check by following the steps in the [modify Visual Studio by adding or removing workloads and component](/visualstudio/install/modify-visual-studio?view=vs-2019&preserve-view=true) documentation.
+2. Make sure that the **<span>ASP.NET</span> and web development module** has been added to your Visual Studio instance. For more information, see [Modify Visual Studio by adding or removing workloads and components](/visualstudio/install/modify-visual-studio?view=vs-2019&preserve-view=true).
![Visual studio asp.net module](../assets/images/visual-studio-web-dev-module.png)
-3. If you want to test your app by deploying it from Visual Studio, you must have Internet Information Services (IIS)) installed in your development environment. Visual Studio does not include IIS and it is not included in the default Windows 10, Windows 8, or Windows 7 configuration; however, you can download the latest version from the [Microsoft download center](https://www.microsoft.com/download/details.aspx?id=48264).
-
-![IIS download page view](../assets/images/iis.png)
- ## Install the Teams Toolkit
-The Microsoft Teams Toolkit for Visual Studio is available for download from the [Visual Studio Marketplace](https://marketplace.visualstudio.com/items?itemName=TeamsDevApp.vsteamstemplate) or directly from the **Extensions** menu within Visual Studio. From the Visual Studio Marketplace also download [Teams Toolkit for Visual Studio 2019](https://marketplace.visualstudio.com/items?itemName=msft-vsteamstoolkit.vsteamstoolkit).
+The Microsoft Teams Toolkit for Visual Studio is available for download from the [Visual Studio Marketplace](https://marketplace.visualstudio.com/items?itemName=msft-vsteamstoolkit.vsteamstoolkit) or directly from the **Extensions** menu within Visual Studio.
-## Using the toolkit
+## Use the toolkit
- [Set up a new project](#set-up-a-new-teams-project) - [Configure your app](#configure-your-app)-- [Package your app](#package-your-app)-- [Install and run your app in Teams](#install-and-run-your-app-locally)
+- [Run your app in Teams](#install-and-run-your-app-locally)
- [Validate your app](#validate-your-app) - [Publish your app](#publish-your-app-to-teams) ## Set up a new Teams project
-![Teams toolkit installed](../assets/images/teamstoolkiticon.png)
-
-1. Select **Create New Project**.
-
- ![Create new project](../assets/images/createnewproject.png)
-
-1. Choose the quickstart tool for **Microsoft Teams App** and select **Next**.
-1. In the **Configure your new project** page, enter the **Project name**, **Location**, and **Solution name**.
-1. Select the **Place solution and project in the same directory** checkbox.
-1. In the **Add Capabilities** pop-up window, choose one or more capabilities for your project setup.
-1. Select the **Next** button to complete the configuration process.
-1. In the **Add Capabilities** pop-up window, choose the properties for each selected capability.
-1. Select **Finish**. The **Microsoft Teams Toolkit** landing page is shown.
-
- ![Teams toolkit landing page](../assets/images/Teamstoolkitpage.png)
+1. Launch Visual Studio 2019.
+2. Select **Create a new project**.
+3. Search for **Microsoft Teams App** and select **Next**.
+4. In the **Configure your new project**, enter the **Project name**, **Location**, and **Solution name**.
+5. Select **Next** to enter a name for the app.
+6. In the Additional Information screen, enter an **Application Name** and **Developer or Company name** for your Teams app.
## Configure your app At its core, the Teams app embraces three components:
- 1. The Microsoft Teams client including web, desktop, or mobile, where users interact with your app.
- 1. A server that responds to requests for content that is displayed in Teams, for example, HTML tab content or a bot adaptive card.
- 1. A Teams app package consists of three files:
+- The Microsoft Teams client (web, desktop or mobile) where users interact with your app.
+- A server that responds to requests for content displayed in Teams. For example, HTML tab content or a bot adaptive card.
+- A Teams app package consists of three files:
- - The manifest.json
- - A [color icon](../resources/schem#icons) for your app to display in the public or organization app catalog.
- - An [outline icon](../resources/schem#icons) for display on the Teams activity bar.
+ > [!div class="checklist"]
+ >
+ > - The manifest.json
+ > - A [color icon](../resources/schem#icons) for your app to display in the public or organization app catalog.
+ > - An [outline icon](../resources/schem#icons) for display on the Teams activity bar.
When an app is installed, the Teams client parses the manifest file to determine needed information like the name of your app and the URL where the services are located.
When an app is installed, the Teams client parses the manifest file to determine
### Configuration steps
-1. To configure your app, on the **Microsoft Teams Toolkit** landing page, select **Edit app package**.
-1. From the **My Environments** drop-down menu, select **development**.
-1. In the **App details** page, edit your app's property fields.
-
- Editing the fields in the App details page updates the contents of the manifest.json file that will ship as part of the app package. For more information, see [Teams Toolkit manifest](https://aka.ms/teams-toolkit-manifest).
+1. To configure your app, select the **Project > TeamsFx > Configure for SSO...** menu.
-## Package your app
-
-Modifying the **app details** page or updating the **manifest**, or **.env** files in your app's **.publish** folder will automatically generate your **Development.zip** file. The Development.zip file includes three required files, the **manifest.json** and [two icons](../concepts/build-and-test/apps-package.md#app-icons).
+When prompted, sign in to your Microsoft account that has an M365 tenant.
## Install and run your app locally
-1. From the **Solution Configurations** dropdown menu, select **Deploy** as shown in the following image:
-
- ![Solution configurations menu](../assets/images/solution-configurations.png)
-
-1. Select the **IIS Express + Teams** button.
-
- The app installation dialog box appears in the Teams client.
+Press F5 to start debugging. The app installation dialog box appears in the Teams client.
## Validate your app
-The **Validate** page allows you to check your app package before submitting your app to AppSource. Simply upload the manifest package and the validation tool will check your app against all manifest related test cases. For each failed tests, the description provides a documentation link to help you fix the error. For the tests that are hard to automate, the **Preliminary checklist** details 7 of the most common failed test cases as well as link to a complete submission checklist.
+The **Project > TeamsFx Validate > Teams Manifest** menu allows you to check that your app package is valid.
## Publish your app to Teams
-* On your project home page, you can upload your app to a team, submit your app to your company custom app store for users in your organization, or submit your app to App Source for all Teams users.
-
-* Your IT admin will review these submissions.
+In the [Teams Developer Portal](https://dev.teams.microsoft.com/home), you can upload your app to a team, submit your app to your company custom app store for users in your organization, or submit your app to App Source for all Teams users.
-* You can return to the **Publish** page to check on your submission status and learn if your app was approved or rejected by your IT admin. This is also where you can submit updates to your app or cancel any currently active submissions.
+- Your IT admin will review these submissions.
+- You can return to the **Publish** page to check on your submission status and learn if your app was approved or rejected by your IT admin. This is also where you can submit updates to your app or cancel any currently active submissions.
## Next step > [!div class="nextstepaction"]
-> [Maintaining and supporting your published app](../concepts/deploy-and-publish/appsource/post-publish/overview.md)
->
+> [Build and run your first Microsoft Teams app with Blazor](../get-started/first-app-blazor.md)
platform Whats New https://github.com/MicrosoftDocs/msteams-docs/commits/master/msteams-platform/whats-new.md
Developer preview is a public program that provides early access to unreleased T
| **Date** | **Notes** | **Changed topics** | | -- | | |
+|06/23/2021| Meeting Details API and real-time Teams meeting events. | [Create apps for Teams meetings](~/apps-in-teams-meetings/create-apps-for-teams-meetings.md#meeting-details-api) |
|06/21/2021|Uninstall behavior for personal app with bot | [Uninstall behavior updates in personal apps with bots](bots/how-to/conversations/subscribe-to-conversation-events.md#uninstall-behavior-for-personal-app-with-bot)| |06/16/2021| Resource-specific consent for chats. |[Resource-specific consent](graph-api/rsc/resource-specific-consent.md), [Test resouce-specific consent permissions in Teams](graph-api/rsc/test-resource-specific-consent.md)| |05/26/2021|Build tabs with Adaptive Cards|[Build tabs](tabs/how-to/build-adaptive-card-tabs.md)|