TITLE: [MUSIC]
JOEY GLOCKE: Hello and welcome
to Building Apps
for Microsoft Teams Connect Shared Channels.
I'm Joey Glocke, I'm a Principal PM Manager
on the Microsoft Teams Platform.
Today we're excited to walk you
through best practices for building
Teams Apps on these unique,
powerful, collaborative contexts.
For the agenda today,
my colleague Arun is going to talk to you-all
about how shared channels work in teams in general.
From there, I'll talk about
the nuances for how to both develop
and manage Teams Apps in these powerful contexts.
To get started, I'll pass it off to
Arun for an overview of shared channels.
ARUN DAS: Thank you, Joey.
Hello, everyone,
I'm Arun Das, Principal Product Manager
in Microsoft Teams.
I'm excited to talk about
Microsoft Teams Connect shared channels.
Businesses are operating in vibrant environments,
where the connection with partners,
vendors and customers is
a critical component of business success.
But on average, business decision makers,
are working with 11 external partners in a typical week.
They tell us that when
external collaboration is optimized,
it can improve visibility, accountability and trust.
With Microsoft Teams Connect,
we are making it easier for our customers to collaborate
seamlessly with people across
and outside the organization.
Microsoft Teams Connect offers two core capabilities.
Chats powered by external access,
allows you to start a chat with
anyone outside your organization,
helping you have a real time and
secure conversation for faster result.
Shared channels powered by B2
direct connect on the other hand,
offer a shared space for a more structured,
deeper and long term
collaboration with your external partners.
May it be working with an external consultant
or partnering with an external agency.
Share channels help your team work
effectively across all boundaries.
Shared channels is currently in
public preview and will be
generally available later this year.
Now let's talk about shared channels a bit more.
Channels are where work happens.
While standard and private channels
provide members within a team,
spaces for fully open
and private collaboration respectively,
shared channels provide a collaboration space
which transcends team and organization boundaries.
Using shared channels, you can collaborate with
internal and external partners like never before.
To collaborate in an external shared channel,
users do not have no tenant switch.
These external channels show up
alongside the rest of
your teams from your own organization.
You don't need to add
an external partner to your entire team,
just add them to shared channel and
avoid oversharing your content.
You don't need to create a whole in your team to
bolster collaboration with your partners.
Create a shared channel in your existing team
and start collaborating right away.
If you don't want to burden yourself with
managing access to the share channel, no problem.
We have got you covered.
Share your channel with the team
and the channel's membership will
automatically be kept in
sync with the team it was shared with.
As users move in and out of those teams,
they automatically get or lose
access to the shared channel without you
having to worry about granting or
revoking access to individual users.
On a shared channel, you can bring
aboard an individual or an entire team.
These individuals and teams,
can be either from your org
or from an external Azure AD org.
You can share the channel with multiple orgs.
Now let's roll a demo to see shared channels in action.
TITLE: [MUSIC]
SPEAKER 1: Here, we're about
to launch a new product.
Using shared channels,
you can create a shared workspace across
multiple companies where we can share timeline updates,
assign tasks, brainstorm, launch strategy and more.
From the Managed Channel page,
we can see the teams and
members that have been invited to
the channel, including external organizations.
We can easily invite additional members
to the channel using their e-mail address,
allowing everyone to collaborate
securely like one extended team.
Conversing, meeting, sharing files securely and more.
When a third party uploads
and shares a file to the channel,
all stakeholders can open the document
and co-author the brief in real time.
With shared channels, users can be productive with
one seamless experience in Teams
without anyone needing to switch tenants.
The team can initiate a call from the channel,
where everyone can join the meeting directly or catch up
on the recording and chat
asynchronously at a time that works best for them.
TITLE: [MUSIC]
ARUN DAS: As you have seen in the demo,
shared channel supports
seamless collaboration with external partners.
You can share and go author documents in real time,
schedule meetings or call on demands.
Collaborate on apps, and partner
with as many organizations as you need to.
All of this is built on foundation of
M365 security and compliance capabilities, and trust.
Back to you Joey, to talk
about apps and shared channels.
JOEY GLOCKE: Great. Thanks, Arun.
Now that we know a little bit more about
how shared channels work in general,
let's dive into this more detail about
how Teams Apps work in these unique environments.
The first thing to keep in mind,
is that until now,
channels inherited their roster
directly from the parent team that they lived in.
If you look at the diagram here,
you can see Team Yellow,
for example, has three people in it.
A simple way to look at our channel model
as an app developer,
was to assume that everybody
involved in all of those channels and
those three yellow boxes
were those three people in team yellow.
Well, now, with the power of shared channels,
this can dramatically change.
You have the option as a user creating a shared channel
to share that channel with
individuals from within your own company,
you can share that channel with
individuals across another company.
You can also share this channel with
other teams inside or outside your company.
In the diagram here, you can see
the team red and even team green,
outside company lines have
this yellow channel shared into them
as if it's part of their team structure.
This obviously is a big change
for app developers because until now,
if you assumed that the membership of where you were
running is just the same as your parent team,
you'd have a subset of that information correct.
To that end, we've made some changes to our Teams
JavaScript SDK to account
for this and you'll see them here on this slide.
The biggest change to note is that the parent
Teams Group ID which you might
retrieve to get membership again for standard channels,
is actually going to be blank for
these new channel types.
You'd be able to check
the channel type of property in the JavaScript SDK,
to see that we're in that shared channel
and you'll be able to account for that accordingly.
While the parent teams group ID is blank.
On this slide, you'll see we've made a couple of
new additions to help you accommodate
for shared channels.
We'll give you the ID required to make graph calls
to retrieve all members who
are added directly to this shared channel,
as well as all shared two teams.
What I mean by that is,
if you remember the diagram from a few slides ago,
you'll be able to see all of the members that were
part of Team Yellow and maybe even part
of those purple individuals who
were added to the shared channel directly.
But then you also have visibility into Team Green,
and Team Red, of which
this channel was actually shared to.
With this, you have the full roster
of information for a shared channel.
Apart from that, our apps work very much the same.
Our platform has done a lot of work to
abstract away some of the additional complexities here,
like authentication tokens for
users across organizations,
but what you have to most be aware of
is that your app is now
going to be expected to retrieve
this membership in a way that,
meets whatever business logic your app requires.
If you need the full membership,
you'll have to use the graph calls
you see on this screen,
and the JavaScript,
the context properties you see
on this screen to go and grab that.
With that, let's watch
a quick demo of Shared Channels Apps in Action.
TITLE: [MUSIC]
JOEY GLOCKE: I'm going to play this here
and what you'll see,
is I have two tenants,
it's actually a split screen.
We have a tenant with the little red monster
on the left,
and we have the tenant with a little
yellow bumblebee on the right.
We're going to have a cool app
that works on our platform,
it's actually a shared coding app so that I can run
a coding snippet in real time in a tab
and people can collaborate
in real time inside that snippet.
What you're seeing here in this demo is
a user add that app to a shared channel,
and this is a user in the yellow bumblebee tag.
They even share this channel
out to the red monster tenant,
where another user comes in and can discover A,
if this is all this information being shared across
organizational lines in the shared channel and also,
this team is using an app inside this shared channel.
It's the shared coding app.
At the end of this demo,
what you're actually going to see,
is that the red monster user on
the left and the yellow bumblebee user on the right,
are collaborating in real time inside Teams,
inside its tab that's hosted by this shared coding app.
What you'll see, is when
the user on one side updates some code,
the user on the other side is going to
see that update in real time.
Again, across collaborative boundaries.
It's pretty powerful stuff and
it's a first for our teams platform.
TITLE: [MUSIC].
JOEY GLOCKE: We saw how tabs work
in shared channels.
We saw a good demo of an app
that's already got this functionality built in.
We talked little bit about
the primary change in
the difference between
shared channels and standard channels,
which is the membership of the channel.
Because your app is going to
have to accommodate for this,
we've also built another mechanism for you.
By default, we'll expect that
your apps work in all of our channel types,
that's standard channels,
private channels, and shared channels.
But now in our Teams app manifest,
you'll be able to declare exactly
which channel type you intend to support with your apps.
If you want to build an app specific
for shared channels, you can.
Go on and build one specific
for private channels, you can.
If you want to build it to work
the same way across the board, it's possible.
You can also decide to disable either of
these unique channel types if your app shouldn't
be working in that context.
To that end, you'll see we have a new property
here called shared supported channel types,
and you'll have an enum that you can use to define where
you decide to support yourself
in shared channels or not.
This will be available to you very shortly.
We talked about really the important developer tools
at play with our Teams platform and shared channels.
Now, let's talk a little bit about
how these apps actually get managed.
Because while maybe you're just interested
in developing for shared channels,
most of our organization's customers want to know
how apps work when we're opening up a new channel type;
a new collaborative context across organizational line.
I think of this as a very simple sentiment,
which is basically house rules and you'll see
this called out in the red highlight of this slide.
What I mean by house rules is,
if you created the shared channel,
then your tenant and your parent team,
the team that created the shared channel,
those app rosters and policies will
apply no matter where you share this channel externally.
Whether you share to other individuals,
other teams in your organization,
or whether you share it across organizational lines,
the same truth applies.
The roster of apps available in
that shared channel comes from the parent team,
and the policies that take effect for apps in
those shared channels come from
the parent tenant or the tenant
that created the shared channel.
To that end, you need to understand that your apps,
if you're building third party apps,
will need to be available and
the tenant that creates the shared channel.
If you're a line of business app developer,
then your line of business apps
may run in shared channels,
even if that channel is shared out
externally to other organizations.
As long as the team and
tenant created the channel, your app will be there.
Of course, if you recall a few slides ago,
you have the ability to opt-out of shared
channels if you don't intend
your app to run in these environments.
Admins also have the ability to control
their apps in whether they get exposed
in both their environment and in
shared channels using our Teams app permission policies.
To recap, we've talked about how to
develop apps for shared channels,
we've talked about how the app lifecycle and management
practices work for teams apps and share channels.
Now, let's talk a little bit about
our Graph API components in these channel types.
As I mentioned earlier,
if you want to retrieve membership for
the roster of individuals active in the shared channel,
you're going to need to use the Graph API to do so.
Our JavaScript SDK will tell you
the information you need to make the right graph calls,
but you should be aware that there are a set of
new graph calls and I have them
highlighted in bold here.
These APIs are going to tell you-all
the pertinent information you need
to know to have your app run
successfully in a shared channel.
They're going to tell you things like
which teams these channels are shared out
to or what your direct members
of this shared channel are.
With the information we have called out here,
you'll be able to derive
the full membership but not only that,
but other unique contexts that exist in shared channels.
As you can see, we have
APIs that list incoming channels for a team,
list all channels of the team,
get shared with team info.
What I mean by that is remember that description of
team yellow creating a yellow shared channel
and sharing it out to team green,
you'll be able to get that info with this call.
Then of course, you can list the membership of
the shared channel with these APIs
as I mentioned earlier.
On this slide, you can see a couple of
other unique new APIs that are specific to channels.
The first is access checks,
so you can check member access to shared channels
just to see what types of permissions
the current user is operating with.
Again, you'll be able to get
the current user accessing your app like you
would normally through our team's JavaScript SDK.
You'll also be able to get a list of
teams the user is associated with,
which is similar to join teams,
but also includes teams user has
access to via this shared channel.
Now this is pretty specific,
but it's pertinent information depending
on what business logic your app needs,
and we have the right graph calls out there
available to make these calls.
I talked about all of the new APIs that are available,
talked a little bit about what
permissions you're going to need
to call them, and as you can see here,
new permission scopes have actually been
introduced to make the calls for shared channels APIs.
You can see them highlighted in bold at
the bottom depending on
what your apps business logic needs,
and you can see the descriptions of these permissions.
You'll need to make sure that
an IT admin has approved access to
the permissions that you define in
your app manifest and in your web app correspondingly.
This is no significant change
to how Graph API permissions work today,
I just want to call out and
highlight a couple of new ones
that are pertinent relevant to shared channels.
We've talked about a lot of
things over the last few minutes.
We've talked about how you can develop the tabs SDK,
we've talked about how
your app lifecycle will be
managed over time in a shared channel,
we've talked about all the Graph APIs available
to you to retrieve Cloud resources and
get the context you need to run your app
effectively inside of teams.
Now, let's talk a little bit more
about what the roadmap is and what
the current state of our platform
is inside of shared channels.
As you can see, and as
a rule mentioned at the top of the call,
shared channels in public preview now.
Similarly, we have a handful of
app components available today in developer preview.
This is our tabs,
our app capability, our JavaScript SDK,
so all the changes that I mentioned throughout
this conversation are now
available today in our JavaScript SDK.
Our manifest has been updated to let you opt in or
out of shared channels and declare
exactly where your app should run.
You should be able to find that now.
We support Microsoft apps,
third-party apps, and
line-of-business apps, and shared chats.
Our team is working hard on bringing bots and
message extensions and connectors
support to shared channels over time,
and you'll see updates to our bot SDKs,
our message extension services and connector
capabilities to include
shared channels in the months to come.
With that, thank you very much for taking
the time to learn about this powerful new Teams feature.
You're going to find plenty of documentation on this and
blog post entries as we move towards GA,
telling you how to build effective and
useful apps for shared channels,
and we're excited to see what you build. Thanks.