This post was most recently updated on August 1st, 2019.Reading Time: 5 minutes.
This article is something of a combination of a technology overview and an opinion piece, detailing my thoughts about extending Microsoft Teams. To me, extending Microsoft Teams has pretty much only now become relevant.
Before, the palette was still quite unfinished, but now we’re definitely getting to a point where there are meaningful and cost-effective extension scenarios to cover most of the relevant use cases for most organizations.
Don’t take this for an inflammatory or disrespectful post – I’m writing this from my personal point of view, as someone who’s been following the space for a while. And I’m definitely hyped about the latest developments.
What makes extending Teams cool and important now?
Already before, you could create chatbots and all kinds of tabs, but for a lot of organizations, the introduction of Teams-integration in SPFx version 1.8 might be the first big thing, that makes it sensible for them to develop their own extensions for Teams.
Wait, what do I mean by that – there’s been a lot of things you can do for a long time already! Like Chatbots – they’re definitely useful, although only preferred by a subset of users. Tabs? Simple, often useful, even custom scenarios possible. Outgoing web hooks? Absolutely, for a number of scenarios. But what really finally makes the difference for me, is the opportunity to develop custom functionality for both SharePoint and Teams at once using SPFx. This way, you can cover multiple, widely used platforms with a one-time development work.
However, this post doesn’t go into the details of the technical implementation. That’s a topic for another article. In this one, I’ll give you an overview of extending Microsoft Teams.
How can I extend Microsoft Teams?
- Bots for conversational tasks
- Outgoing web hooks for calling external urls with a simple payload from Teams
- Connectors for importing data to your teams through notifications and actionable messages
- Activity feed integrations to push new messages to user’s activity feed
- Messaging extensions for enriching your messages with data pulled from other sources
- Your custom Tabs for showing pretty much any information in Teams channels
These different options work in fairly different ways – perhaps for simplicity’s sake, we could split them in different scenarios based on the type of interaction they and the users have. Note, that this is completely unofficial, and I just made the grouping up to organize my own thoughts.
I mean, that applies to most of the posts on this site anyway! :)
(1) Microsoft Teams extensions for conversational scenarios
Bots are definitely the most obvious case for conversational extensions (and probably the most hyped form of extensions in general), and they can power a number of interactive scenarios or simple automation tasks. Additionally, Outgoing web hooks are essentially a different flavor of bots – you can register your custom API to receive messages from Teams with Teams context, execute actions, and deliver responses back.
(2) Microsoft Teams extensions for capturing users’ attention
This category, at least for me, contains Activity Feed Integrations and Connectors, although the proactive messages from bots could be considered this type as well. This category of extensions is all about shoving data to your users’ faces – in a good way.
One, very classical example of bringing this external data into your teams as notifications is using a connector to subscribe to updates of a RSS feed. The connector configuration is shown below.
Connectors import data to your channels as notifications – see below!
Simple, but useful. Below, is an example of an Activity Feed extension:
(3) Microsoft Teams extensions for displaying external information and functionality directly in Teams
Messaging extensions enrich the messages with external information, and Tabs enable you to show (somewhat) interactive tabs for your different channels. These, to me, are the coolest kinds of extensions. Anyone can build a bot (yes, it is that easy!), and they’re useful, but the extremely seamless integration directly in the messages (in the case of Messaging Extensions) and the powerful things you can do with custom Tabs take the cake any day of the week. Plus they are worth a few screenshots.
Below, I’m showing an example of Messaging extension, where you can add images from online using Bing Image Search to your messages without leaving Teams – without actually leaving the message field!
While Messaging extensions are cool, the most flexible and rich experience can be – in my mind – achieved by using interactive tabs. This way, you can embed pretty much any custom SPFx webpart you’ve built for SharePoint to your Teams channel instead.
Below, I’m showing a simple screenshot of a custom SPFx webpart added to a Team’s General channel. The perhaps coolest part is, that this works both in the desktop client, browser and the (for the most part) the mobile app!
But how does this all happen in practice?
Using SPFx to craft a Teams tab
I’ll be posting about creating Teams extensions with SPFx later on – and I’ll be speaking about this topic at SharePoint Saturday Nashville on 15th of June 2019. I’ve prepared a couple of cool demos for the event – hopefully I’ll have time to post about them afterwards! It’s a free event, come check it out!
In the meantime, I’ve posted about creating a (non-SPFx) Teams tab before – you can check that out already, if you’re interested.
What do you think? Does this grouping of extensibility options make sense? (1) Conversational extensions, (2) pushing data to users and (3) displaying external data and functionality.
Oh – and there’s some useful links and resources below!
- Overview of extensibility
- More about Messaging Extensions
- Bot conversation opportunities
- Activity feed
- Technical steps for SPFx + Teams (more about this later):
He's been a developer from 2004 (starting with PHP and Java), and he's been bending and twisting SharePoint into different shapes since MOSS. Nowadays he's not only working on SharePoint, but also on .NET projects, Azure, Office 365 and a lot of other stuff.
This is his personal professional (e.g. professional, but definitely personal) blog.
Latest posts by Antti K. Koskela (see all)
- Azure DevOps – how to package a simple DLL? - October 17, 2019
- How to use UriHelper or NavigationManager in .NET Core 3.0 & Blazor? - October 17, 2019
- Azure DevOps build fails with “The nuget command failed with exit code(1) and error(Cannot determine the packages folder to restore NuGet packages.” - October 16, 2019