Updates from: 06/09/2021 03:23:38
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.
-* 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.
+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 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": "Microsoft/MeetingStart",
- "type": "event",
- "timestamp": "2021-04-29T16:10:41.1252256Z",
- "id": "123",
- "channelId": "msteams",
- "serviceUrl": "https://microsoft.com",
- "from": {
- "id": "userID",
- "name": "",
- "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": "Microsoft/MeetingEnd",
- "type": "event",
- "timestamp": "2021-04-29T16:17:17.4388966Z",
- "id": "123",
- "channelId": "msteams",
- "serviceUrl": "https://microsoft.com",
- "from": {
- "id": "user id",
- "name": "",
- "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 `Microsoft/MeetingStart` or `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 Link Unfurling https://github.com/MicrosoftDocs/msteams-docs/commits/master/msteams-platform/messaging-extensions/how-to/link-unfurling.md
This document guides you on how to add link unfurling to your app manifest using App studio and manually. With link unfurling your app can register to receive an `invoke` activity when URLs with a particular domain are pasted into the compose message area. The `invoke` contains the full URL that was pasted into the compose message area, and you can respond with a card that the user can unfurl, providing additional information or actions. This works similar to a search command with the URL serving as the search term. > [!NOTE]
-> Currently, link unfurling is not supported on Mobile clients.
+> * Currently, link unfurling is not supported on Mobile clients.
+> * The link unfurling result is cached for 30 minutes.
The Azure DevOps messaging extension uses link unfurling to look for URLs pasted into the compose message area pointing to a work item. In the following image, a user has pasted a URL for a work item in Azure DevOps, which the messaging extension has resolved into a card:
platform Whats New https://github.com/MicrosoftDocs/msteams-docs/commits/master/msteams-platform/whats-new.md
Discover Microsoft Teams platform features that are introduced in Microsoft Buil
| -- | | | |05/26/2021| Build tabs with Adaptive Cards. |[Build tabs](tabs/how-to/build-adaptive-card-tabs.md)| |05/25/2021| Updated Teams Toolkit for [Visual Studio Code](https://marketplace.visualstudio.com/items?itemName=TeamsDevApp.ms-teams-vscode-extension) and [Visual Studio](https://marketplace.visualstudio.com/items?itemName=msft-vsteamstoolkit.vsteamstoolkit&ssr=false#overview). | [Get started with Teams app development](~/get-started/prerequisites.md) |
-|05/25/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) |
|05/25/2021| New Developer Portal for Teams introduced for managing your Teams apps. | [Developer Portal for Teams](concepts/build-and-test/teams-developer-portal.md) | |05/25/2021| Together Mode feature combines participants into a single virtual scene and places their video streams in pre-determined seats. | [Together Mode](~/apps-in-teams-meetings/teams-together-mode.md) | |05/24/2021| Bots can be enabled to receive all channel messages using resource-specific consent (RSC).|[Receive all messages with RSC](~/bots/how-to/conversations/channel-messages-with-rsc.md), [bot conversation overview](~/bots/how-to/conversations/conversation-basics.md), [channel and group conversations](~/bots/how-to/conversations/channel-and-group-conversations.md), and [developer preview manifest schema](~/resources/schem) |
Developer preview is a public program that provides early access to unreleased T
| -- | | | |05/26/2021|Build tabs with Adaptive Cards|[Build tabs](tabs/how-to/build-adaptive-card-tabs.md)| |05/25/2021| Updated Teams Toolkit for [Visual Studio Code](https://marketplace.visualstudio.com/items?itemName=TeamsDevApp.ms-teams-vscode-extension) and [Visual Studio](https://marketplace.visualstudio.com/items?itemName=msft-vsteamstoolkit.vsteamstoolkit&ssr=false#overview). | [Get started with Teams app development](~/get-started/prerequisites.md) |
-|05/25/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) |
|05/25/2021| New Developer Portal for Teams introduced for managing your Teams apps. | [Developer Portal for Teams](concepts/build-and-test/teams-developer-portal.md) | |05/25/2021| Together Mode feature combines participants into a single virtual scene and places their video streams in pre-determined seats. | [Together Mode](~/apps-in-teams-meetings/teams-together-mode.md) | |05/24/2021|Bots can be enabled to receive all channel messages using resource-specific consent (RSC).|[Receive all messages with RSC](~/bots/how-to/conversations/channel-messages-with-rsc.md), [bot conversation overview](~/bots/how-to/conversations/conversation-basics.md), [channel and group conversations](~/bots/how-to/conversations/channel-and-group-conversations.md), and [developer preview manifest schema](~/resources/schem) |