microsoft-graph-comms-samples

Changelog for Microsoft Graph Communications SDK and Samples

This changelog covers what’s changed in Microsoft Graph Communications SDK and its associated samples.

Oct 2020

Mar 2020

Feb 2020

Jan 2020

Dec 2019

Nov 2019

Change type Version Description
Addition beta Added new action updateRecordingStatus to call entity.
Addition beta Added new complex type incomingContext.
Addition beta Added new property incomingContext to call entity.
Addition beta Added new property endpointType to participantInfo complex type.
Addition beta Added new property endpointType to invitationParticipantInfo complex type.
Addition beta Added new property recordingStatus to recordingInfo complex type.
Deletion beta Removed property status from recordingInfo complex type.
Deletion beta Removed inheritance of participantInfo from invitationParticipantInfo complex type.

Oct 2019

Sept 2019

Communications 1.1.0-prerelease.1511 Changes

June 2019

May 2019

Communications 1.1.0-prerelease.581 Changes

The Communications SDKs are now decoupled from the Microsoft.Graph SDK.  New nugets have been released to as version 1.1.0-prerelease.* to signal breaking changes due to objects being moved to Microsoft.Graph. 

Microsoft.Graph.Communications.Core:

This library no longer contains any Calls contracts… it now references Microsoft.Graph 1.14.0 and Microsoft.Graph.Core 1.15.0-preview.2 and only contains shared contracts not present in Microsoft.Graph.  It also contains serialization/deserialization helpers and extensions methods to help with the Calling APIs (IdentitySet.GetGuest/IdentitySet.SetGuest/etc…).  The frameworks have been bumped up to net461 and netstandard2.0 so the core SDK can leverage Microsoft.Graph.Communications.Common.  Customers using this SDK now have to move to the one containing their specific contracts (below).

Microsoft.Graph.Communications.Core.Calls:

Calls wire SDK (contains all the calls and online meetings contracts).  Note that some object names have changed as not to conflict with Microsoft.Graph names.

DefaultContainerClient => CallsGraphServiceClient
Notification => CommsNotification
Notifications => CommsNotifications

Microsoft.Graph.Communications.Calls:

Now references Microsoft.Graph.Communications.Core.Calls and Microsoft.Graph.Communications.Client

Naming conventions of these SDKs were changed as they are namespaced and do not need the Call prefix:

ICallParticipantCollection => IParticipantCollection
ICallParticipant => IParticipant

Misc changes

January 2019

API Update
ICall.PlayPromptAsync and ICall.RecordAsync Fixed OData deserialization on the SDK side to create the expected type when the graph endpoint returns a base type. This patch will fix the 2 API calls here until graph metadata is adjusted to return the correct types.

Stateful SDK

Moved resource deletions from the global queue to the resource queue

When the stateful SDK receives a notification it validates it, queues it up for dispatching to events, and returns 202 Accepted immediately as not to hold up the response. The stateful SDK then has a number of background queues for processing inbound notifications, one global queue and one queue per top level resource (I.E. call). In the past the global queue handled additions and deletions, but with this release the deletions have been moved to the resource queue. This change will ensure that all notifications are sequential, and removes potential bottlenecks on the main queue.

December 2018

API Update
ICall.RecordAsync Updated to return recordResourceLocation and recordResourceAccessToken. The access token is required to be sent as a bearer token to download the recording.
VideoSocket.SetSendBandwidthLimit Sets the bandwidth limit on the send stream of the VideoSocket.
VideoSocket.SetReceiveBandwidthLimit Sets the bandwidth limit on the receive stream of the VideoSocket.

November 2018

SDK package names have been updated to avoid confusion with Microsoft Graph SDK. When upgrading to the latest version (1.0.0-prerelease.494) in the original package names, you will encounter build warning CS0618. The warning message shows the actions you need to take to upgrade to the new packages.

Original nuget package New nuget package
Microsoft.Graph.Calls Microsoft.Graph.Communications.Calls
Microsoft.Graph.Calls.Media Microsoft.Graph.Communications.Calls.Media
Microsoft.Graph.Core.Stateful Microsoft.Graph.Communications.Common
Microsoft.Graph.CoreSDK Microsoft.Graph.Communications.Core
Microsoft.Graph.StatefulClient Microsoft.Graph.Communications.Client

Namespaces have been updated to match the assembly and package names. In addition, the top level interfaces have been renamed to match the new naming scheme.

Original namespace New namespace
Microsoft.Graph.Calls Microsoft.Graph.Communications.Calls
Microsoft.Graph.Calls.Media Microsoft.Graph.Communications.Calls.Media
Microsoft.Graph.Core Microsoft.Graph.Communications.Common
Microsoft.Graph.CoreSDK Microsoft.Graph.Communications.Core
Microsoft.Graph.StatefulClient Microsoft.Graph.Communications.Client
IStatefulClient ICommunicationsClient
StatefulClientBuilder CommunicationsClientBuilder

This release cleans up interfaces where some members have been renamed or removed. Older names are retained for backward compatibility, it is expected to be removed over the next releases.

Deprecated items Replacement
AudioRoutingGroup.Owner no longer used
Call.Error Call.ResultInfo
Call.Transfer(TransferTarget,…) Call.Transfer(TransferTarget)
CommsOperation.ErrorInfo CommsOperation.ResultInfo
MeetingParticipantInfo.SipProxyAddress no longer used
OnlineMeeting.CanceledTime OnlineMeeting.CanceledDateTime
OnlineMeeting.CreationTime OnlineMeeting.CreationDateTime
OnlineMeeting.EndTime OnlineMeeting.EndDateTime
OnlineMeeting.ExpirationTime OnlineMeeting.ExpirationDateTime
OnlineMeeting.MeetingInfo OnlineMeeting.Participants.Organizer
OnlineMeeting.StartTime OnlineMeeting.StartDateTime
Participant.SubscribeVideoAsync Call.GetLocalMediaSession().VideoSocket.Subscribe

September 2018

  1. Updated to https://graph.microsoft.com/beta endpoint for Microsoft Ignite 2018 release.
  2. Updated to public nuget version of Graph Comms SDK. Note new version scheme: 1.0.0-prerelease.48

August 2018

Core SDK

Removed properties from some graph owned contracts:

Stateful SDK

July 2018

Core SDK

No changes

Stateful SDK

Added proper handling of the operation response.

/// <summary>
/// Interface to a VideoSocket.
/// </summary>
public interface IVideoSocket : IDisposable
 
/// <summary>
/// Video Subscription API for the conference scenario, once the MediaReceiveStatus is raised with active status,
/// it is possible to call this api to subscribe to a specific video using the media source id.
/// </summary>
/// <param name="preferredVideoResolution">The requested video resolution,
/// The received video buffers should have the requested resolution if the bandwidth constraints and sender capabilities are satisfied</param>
void Subscribe(VideoResolution preferredVideoResolution, uint MediaSourceId);
 
/// <summary>
/// Subscribe API for the 1:1 case. No need to specify the media source id
/// </summary>
void Subscribe(VideoResolution preferredVideoResolution);
 
void Unsubscribe();

Note: The VideoSocket.Subscribe method will throw an InvalidOperationException if it is called too early, before the media session is established/active. The bot can monitor the (also new) VideoSocket.VideoReceiveStatusChanged event to see when the VideoSocket reports MediaReceiveStatus.Active, to know when it can start making video subscription requests.

Release dates and notes:

May 2018

Core SDK

Updated to latest SDK version. This includes minor bug fixes and contract changes.

Stateful SDK

Added logic to handle failed call deletion, or any time a stale call needs to be removed from SDK memory.

// Manually remove the call from SDK state.
// This will trigger the ICallCollection.OnUpdated event with the removed resource.
this.Client.Calls().TryForceRemove(callLegId, out ICall call);

March 2018

Core SDK

No changes

Stateful SDK

If bots wish to shut down cleanly, we recommend the following:

try
{
  // Terminate all existing calls and wait for confirmation.
  // Terminate media platform, terminate background threads, dispose objects.
  await this.Client
    .TerminateAsync(false, new TimeSpan(hours: 0, minutes: 1, seconds: 0))
    .ConfigureAwait(false);
}
catch (Exception)
{
  // Terminate with error.
}

// Perform graceful termination logic.