How to create crisis communications app for Microsoft Teams

The world is currently facing one of it’s biggest challenges in modern era because of ongoing coronavirus outbreak. Many organisations has been forced to move to 100% remote working mode whenever possible and situation has been a real challenge for company communications also. The need for efficient communication is bigger than ever.

This blog is all about how to easily create an crisis communications app for Microsoft Teams without any coding needs to support your company crisis communications. The main idea is to create modern communication site to your Intranet to host information, news and other “crisis content” itself and then expose this information through customized Microsoft Teams App easily for all your company employees.

The high level steps required for this approach

  • Allow “Apps Studio” Teams App usage from Teams Admin Center if needed
  • Add “App Studio” for yourself as an Teams application
  • Provision or produce a crisis management communication site
  • Create a separate COVID-19 Teams App with App Studio
  • Add App to Teams App catalog and deploy app to Teams left trail automatically through Teams Setup Policy
  1. Allow Apps Studio Teams App usage from Teams Admin Center if needed

It may be the Teams administrators or ICT department has blocked your access to Microsoft App Studio. If you go to Teams App catalog, search for App Studio and got no results then this is the case. If you can find the app you can ignore this step.

For Admins Teams allows quite dedicated control of which users can use and which apps so next thing is to check (or ask your Teams Admins to check) Teams Apps settings from Teams Admin Center https://admin.teams.microsoft.com/.

Make sure in ‘Manage apps’ the App Studio is and allowed application. and from Organisation wide app settings it’s already good to check your company allows usage of custom apps.

In ‘Permission Policies’ you can setup different app policies for different user groups in Teams. For desired user group – for all employees (Global policy by default) or only for professional Teams users for example (create and apply custom policy for this) – make sure App Studio is listed as allowed app.

  1. Add App Studio for yourself as an application

After Administrator has allowed you the usage of App studio you are ready to use it. So find it from Teams App catalog and add it as personal app. You will probably wan’t to add and pin it to your Teams left rail apps.

  1. Provision and/or produce (or find existing ) crisis management communication site

Now your company probably already has a communication site on top of SharePoint Online to be used as crisis communication site. If not Microsoft offers a free template to provision modern communication site to start gathering crisis information into one place. Overall it could be beneficial to check different site and page layout options from SharePoint Lookbook to get ideas how to build a cool looking and easily accessible crisis site for your employees.

Check the template and if you have a Office365 tenant admin role/rights you are also able to provision this template site directly from the SharePoint Lookbook to your own tenant through provisioning engine.

https://lookbook.microsoft.com/details/8f8337d2-b1f6-4a84-91a4-9081f841f0f6

  1. Create a separate COVID-19 Teams App with App Studio

Now we have all the basic bits and pieces in place to start creating our first very own Teams App through Teams App Studio. AS first step let’s access to app studio and start creating a new app from Manifest editor tab.

After this we have to enter very basic information related to our App. You can use given values or add more precise information if you feel so. I think the most important information is actually “Short Name” parameter of your app. This is name visible for end users and Teams left trail for example has very limited space for app name. If you use COVID-19 it will fit nicely to left trail and so on.

In App details section the couple of important things. As developer name it good to give either your own name or actual company name to make application more recognizable. Since we are nor officially publishing this app the partner information etc. can be left empty and app urls etc. can be fake urls or point to some general Terms of use page of your organisation. Adding a visual branding element and icon for application is important to make it recognizable so add icons with the correct size in place. I would prefer storing images as transparent png to make sure they looks good in every situation.

Now we will generate actual application. We are going to create an app with several tabs in place. So navigate to Tabs on left navigation and start adding tabs.

First Teams requires an configuration Url parameter for application and tab but it’s actually not so relevant so you can give basically any address you want. Make sure Scope you select is “Teams” and select “Runs the tab as and app page”

Now we can start adding the actual personal tabs and app content. Idea on this demo is to add tabs for each country in organisation to give them easy access to crisis communication in their own language so now add needed information for each tab

  • Name = Name of the tab visible in application
  • Entity ID = Any non reserved ID like 1000 (to start with)
  • Content URL = Link to communication site you want to expose for end users *
  • Website URL = Link to communication site you want to expose for end users

* To get Url work with Teams desktop client also in addition to browser you need to add following postfix to url where ‘dest’ parameter is actually depending of your actual site URL: https://<your tenant>.sharepoint.com/sites/COVID-19/_layouts/15/teamslogon.aspx?SPFX=true&dest=/sites/COVID-19

Also make sure all organisation users have read access to these sites exposed.

The end result for me is to have separate tabs for all country organisations we have in our company

To finalize the setup of application and functionality of Teams client app we still have to setup domains and permissions. Put following settings in place:

  • AAD App ID: 00000003-0000-0ff1-ce00-000000000000
  • Single-Sign-On: https://<your tenant>.sharepoint.com
  1. Deploy App to Teams App catalog

Now you are ready to deploy and make newly created app available for anyone in your company.

In your App Studio left navigation access to step “Test and distribute”. Select download and you will get nice and clean zip package to save.

After this step you can exit from App Studio and access Teams App catalog from lower left corner of your Teams interface. Then select Upload a custom App and upload it for you whole organisation.

After this step the newly created app should be available in Teams app catalog as organisation app (Built for <your tenant name>) for every user in your organisation. They are able to add it themselves and pin it to left trail app if it is allowed in Teams policies of yours.

As an end result we have created a new custom Teams app with four separate tabs in place to deliver crisis communication information through Teams to different country organisations we have.

  1. Modify Teams Setup Policy to add app automatically to users Teams client left trail

Now you can’t be sure users are able to find or they have time to add important application with themselves to their Teams UI and navigation through instructions for process. It may be good idea to force addition of this crisis app to all users’ left navigation in Teams.

You are able to achieve this through Teams Setup Policies. So access a setup policy and select policy which applies all your employees (like global policy by default does). Now click “Add apps” and you should be able to see your custom uploaded app as selectable option. Notice it may take hours (2-24h to be exact) before your custom app is visible in application listing. After application is available add it to selected policy’s pinned apps in the order you want.

After policy comes effective (again it may take 2-24h) the end result should be all yours employees will get your crisis communication app on their left trail automatically and they are able to access crisis information really easily through Microsoft Teams interface.

Hope this gives your company a new ideas how to make sure users are easily able to access the crisis information (or any other information) which may be crucial to your organisation.

How to migrate your Power Automates to Azure Logic Apps and why?

It’s really easy to implement and use Microsoft Power Automate (previously named as Microsoft Flow) to support your or your team’s daily work. You can use different triggers and ready made connectors to automate processes, react to any input and move data in context of Microsoft solutions. Also hundreds of 3rd party software is supported and Power Automate alongside with other Power Platform products allows you to achieve complex solutions easily even without any actual integration or coding skills.

However Power Automates can easily be really complex ones and in some point (especially if you have developer or architect background) you may start to miss a better editor than browser based UI and maybe also a better support for versioning and deployment etc.

Then it may be correct time to check what Azure Logic Apps has to offer for you. Power Automate is actually a almost same thing as Azure Logic App but it’s separated to Office 365 context to be available within Office 365 licensing model.

Possible why’s to start using Azure Logic Apps?

  • Export / Import to create Logic App from Power Automate is fairly easy and automatic operation.
  • Starting to work directly with Azure Logic apps is easy if you have a basic knowledge from Azure components, available Azure subscription and contribute rights at least to one Azure resource group
  • All Azure extensibility options, monitoring, logging and other Azure services are available to support your Logic App approach – Azure Key Vault at least to mention to store you Logic App related secrets
  • You can actually use Visual Studio 2019 or Visual Studio Code to modify or deploy your Logic Apps (Azure Logic Apps Tools for Visual Studio or Azure Logic Apps extension are required)
  • DevOps (version control and automated deployment) and better manageability – Power Platform is advancing all the time but still it lacks complete DevOps story and capabilities
  • Logic App pricing model (pay-as-you-go / per action) differs from Power Automate (Licensing with seeded, per app or per user options) and it could be beneficial to compare these approaches in terms of overall costs
  • Allows usage of Azure Integration Accounts for approaches which can benefit from them

How to import Power Automate as Azure Logic App?

In my case Logic App is handling Microsoft Teams related data through GraphAPI on top of SharePoint custom list.

1. Go to Power Automate center and export your current Power Automate in JSON form – Open your Power Automate and select Export | Logic Apps template .json

2. Access your Azure portal and select “Create a resource” and find option “Template deployment” and select “Create | Build your own template in the editor”

3. Now upload your exported JSON file to editor with “Load file” option and press save to define necessary information for your Logic App

4. If deployment goes fine that’s all and you can start develop your Logic Apps in Azure. One step however is to re-authenticate Azure API connections (former Power Automate connections) used by Logic App in App Edit mode. All connections requiring re-authentication are highlighted and you have to enter credentials or select already created working connection.

5. Please note in addition to Azure default Logic app editor you can now use Visual Studio Code Or Visual Studio 2019 to connect and manage your Logic Apps. It seems this approach actually offer a more stable way compared to browsers to modify your Logic Apps.

6. Instead of Azure template deployment, you can also create a Visual Studio “Azure Resource Group” typed project and select Logic App template to connect and deploy Logic App to your Azure subscription. You can replace the highlighted file with your Power Automate export(s) and deploy your project to Azure directly.

Encountered issues & Considerations

  • All connectors from Power Automate are not necessary available in Logic Apps. You can import Power Automates that have equivalent connectors in Azure Logic Apps. For example, the Button trigger, the Approval connector, and Notification connector are specific to only Power Automate https://docs.microsoft.com/en-us/azure/connectors/apis-list
  • By default for Logic Apps “Apply to each” loops enables concurrency which causes issues when using for Logic App variables with SharePoint Update item connector for example. So setting concurrency “Degree of Parallelism” setting from apply to each control settings to 1 helps but this will have a effect for performance
  • It seems that in my case multiple SharePoint API connections within single Logic App JSON definition causes error in deployment. If needed you can clear the extra connections from Power Automate UI and export the JSON manifest again. Alternatively you can manually clear these “extra references” from JSON (with Notepad++ for example) to get Power Automate imported correctly. It should be fairly easy to identify and change connection references from JSON file.

So if you have a wider workflow needs (real enterprise scenarios with premium connector needs for example) in your hands on Office 365/Azure cloud environment and you are thinking to use or already using Power Automate, it could be worth to check what Azure Logic apps has to offer and could this be more viable approach for you.

Productivity cloud feature announcements highlights from MS Ignite 2019

This blog lists some Ignite announcements highlights and adds some considerations in context of Microsoft Teams, SharePoint Online, Yammer and Power Platform as a part of productivity cloud. All of these components can be considered as the key building elements of modern workplace and “the world’s productivity cloud” like Microsoft is now branding the Microsoft 365.

Microsoft 365 
The world's productivity cloud

Remember all Ignite 2019 keynotes and already kept sessions can be viewed through the event main site https://www.microsoft.com/en-us/ignite

Microsoft Teams announcements

All Teams announcements: https://techcommunity.microsoft.com/t5/Microsoft-Teams-Blog/What-s-New-in-Microsoft-Teams-Ignite-2019/ba-p/937025

Private channels

Private channels was by far the most awaited new feature for the Microsoft Teams and its starts to rollout as we speak. Basically it allows to restrict visibility of channel and it’s discussions, tabs and files for the subset of team members, owners or guest users to engage more private collaboration.

If we consider a team which has guest users from other organization for example this could be extremely handy feature to get all collaboration and files inside same team. Likewise it works in case where internal team like HR want’s to collaborate internally and publish information for whole company within same team. Private channels may actually significantly lower the amount of required teams in organization overall since there is no need to create separate teams anymore and in that perpective make the governance easier.

However there are some considerations. How private channels works is whole different story compared to “normal” channels. When creating a private channel, in the background the whole SharePoint site collection is actually created per private channel to manage user permission and host files effectively. This means if single team is consisting of 6 normal channels and 2 private channels for example it requires actually 3 SharePoint site collections to host this single team on backgound. There are also some restrictions and differences with functionalities compared to normal channels discussed here https://docs.microsoft.com/en-us/MicrosoftTeams/private-channels.

Second consideration for private channels is that there is even bigger need to make sure end users and both team owners and members knows how to act correctly in different usage scenarios. It’s extremely important that they on required level understands the difference between private channel and separate team and which is more efficient way to work on case exact. So update your playbooks in this area and think how your organization should instruct the usage!

And by the way it seems private channel related site collections are currently not visible in SharePoint admin center at all.

Multiwindow capabilities

Multiwindow capability was by far the second most wanted feature for Microsoft Teams. Well its finally here or more closely it will be in early next year. What this basically means is that you can popout teams meetings and/or chats to separate windows to make usage easier in case you have many ongoing activities at same time. Huge usability improvement since this has been a real issue i would say.

SharePoint Online

All SharePoint announcements: https://techcommunity.microsoft.com/t5/Microsoft-SharePoint-Blog/The-intelligent-intranet-powered-by-Microsoft-365-Microsoft/ba-p/975037

Audience Targeting for Navigation

Audience targeting for modern news and content pages is currently rollling out worlwide. It allows you to target news and content pages for Office 365 Groups or Active directory groups through news or search highlights webpart and is extremely handy feature to create more personalized (news) content for hub sites or new SharePoint Home Site.

It’s quite natural to get targeting feature for navigation also to get more complete implementation for targeting as a whole. Release is expected on December.

Multilingual page publishing for Modern SharePoint

In modern SharePoint creating multilingual implementations required previously creation of separate communication site structures and hub sites for each of languages. Through multilingual approach content editors can start producing content with various languages to same communication site for news or content pages. This feature allows to create multilingual Intranet to single communication site / hub site structure with sime considerations. When user enters to page with multilingual content available the users’ preferred language version is presented automatically. Release is expected on December.

Power Platform

All Powerplatform announcements: https://cloudblogs.microsoft.com/dynamics365/bdm/2019/11/04/announcing-rpa-enhanced-security-no-code-virtual-agents-and-more-for-microsoft-power-platform/

Flow is now called Power Automate

First thing is that Flow got renamed as Power Automate. According Microsoft this naming is better aligned with Power Platform but this may require a bit time to get used to it.

Availability of UI Flows

There is now option available to interact with other applications UI through Power Automate. You can record actions for desktop or web browser applications you are using as Power Automate steps. Let’s take and example: Your organization is using an old software as business critical system and it constantly requires manual work to get things done. Since Power Automate doesn’t have connector for your custom software and it’s too expensive to develop REST api for the old software the working solution is to automate actual user actions in UI level.

This is actually a really good feature and bring Power Automate to different league what becomes to usablity and compliteness of vision in this area. Now Power Automate can really be a single automation platform in many companies.

We must remember these features are now in preview state and there are some restrictions what can be done. However this is a good start.

New Yammer

Full Yammer announcement: https://techcommunity.microsoft.com/t5/Yammer-Blog/The-New-Yammer/ba-p/976855

New Yammer is coming during year 2020. Please notice you can participate private preview starting on december through this link https://aka.ms/TheNewYammer. There are a lot of improvements. The UI is completely rewritten to match current standards. They are renaming Yammer groups as communities and what’s the best there will be new Yammer teams app available also. Still previous thinking is valid: Yammer is definitely meant for outer loop messaging and sharing knowledge within organization while  Teams is a inner loop tool to enable day to day collaboration. I would say Yammer is targeted for bigger customer but may work well in smaller companies also if organization type especially supports it.

Participating for MS Ignite 2019 at Orlando as a first timer?

Ignite 2019 is almost here. It will take place on 4-8.11.2019 at Orlando on Orange County Convention Center (OCCC).

First of all the event is huge – a real heavy weighter… If you have participated previously to some European conferences (ESPC, Collaboration Summit etc.) they are “nice and tiny” events compared to Ignite itself. Ignite is definitely one of the main events for Microsoft’s fiscal year. There will be around 25000-30000+ participants, speakers, Microsoft people, different organizing parties etc. so really lot of people with “Microsoft spirit” is packed to Orlando during Ignite takes place and it’s simply great.

As a first timer the most common error as a participant is to get all possible important and “must go” sessions in your calendar, try to actually participate all of them and basically do nothing else. This is a path to get frustrated and completely overwhelmed with the amount of information. It will be exhausting even physically since it’s normal changing room inside event venue from wing to another may easily take 30min to walk in a crowd. Through this approach you will make sure not to get benefits out from event itself. Also remember this year all the sessions will be live-streamed and recorded so it’s easy to get back them if and when needed.

I tried to list some hints in how to conquer Ignite:

Make sure you are well prepared

Even I just said it doesn’t make sense to book your schedule full of different sessions, it still good to check session scheduler beforehand to get idea what is happening and when – Select a real must haves for you and also download the Ignite mobile app to have sessions in your pocket. There are also a lot of different events, official and unofficial ones during Ignite during evenings so it would be good to check those also. There is probably some kind of WhatsApp, Teams or Kaizala group to organize within participants from your company or country (in case of smaller country like Finland 🙂 Make sure you are part of it. Also when arriving Orlando from Europe or even further you gonna need at least one day to survive from jetlag so be in place at saturday evening at the latest local time. And since you are in the United States it’s good time to download Uber App and also check is your hotel one of the official Ignite hotels where shuttle rides to OCCC are available. Don’t count you can walk to venue at all even you are staying “pretty close” to OCCC.

Book only “real must have” sessions for you calendar

It may sound a bit strange after paying many thousand dollars/euros from flights, hotels and tickets and I say make sure to not participate too many sessions. Think about it – 5 days in a row, from 9 AM to 6PM full of sessions with a lot of other events, discussions, blogging and maybe some parties. Simply not gonna happen. All sessions will be recorded or streamed, walking venue end to end will easily take 30min and amount of information will be overwhelming. I would say book max couple of must have sessions for each day and then use rest of the time for next bullets 🙂

Social aspect is what makes Ignite

As a finns we never speak. We simply are not extroverts and even introvert may be a bit too much to describe us in this aspect 🙂 However Ignite is all about good discussions with same minded people! Seeing each others, discussing about the upcoming or published features, sharing knowledge, being with the friends, participating different evening events, connecting to new people etc. so make sure you take every chance you have to make this aspect happen.

Expo (now called The Hub) – The heart of Ignite

Hub area is a heart of Ignite. The is always people walking around and you can take interesting discussions with different company presenters, Microsoft people, with random people or sometimes even with Microsoft product group people. Make sure you have gathered questions which are important to you and take a chance to ask questions. You can also agree some discussions with people you want to meet. So instead of sitting in sessions the hub will be a good area to hang around. Oh and there are plenty of SWAG here 😉

Take a time for yourself

5 days in a row with jetlag, endless sessions, evening parties etc. is just too much for everyone to handle. Just admit that for yourself. So take your private time when it feels even a bit you need it and dont be sorry! Maybe an afternoon off, enjoy the summer, heat, sun and give your head time to reflect thoughts and information you have received. You know what works best for you in this area.

You are in Florida!

You really are in sunny Florida! There is bunch of things to do in Orlando itself and Miami, Tampa or Kennedy Space Center for example are mostly within driving distance. So make sure you book some “outdoor” time also to make sure you catch your vitamin D dose. And not forget the huge Ignite 2019 official attendee celebration will happen on Thursday evening in Universal Studios Orlando.

As a summary and really interesting and busy week is waiting for us just behind the corner… Be prepared!

Links:

Get your classic SharePoint Online based Intranet news directly to Teams interface by using MS Flow

Lets assume you are a fanatic Microsoft Teams user and Teams is your number one interface for your daily tasks. However your organization is still partly using a classic SharePoint Online approach for Intranet and “official” organizational news are still created as a classic blog posts which was a really common approach before modern SharePoint Online and modern news model few years ago. As a Teams user you don’t want to order email based notifications / alerts about news or use some other ways to access them.

This is a quite simple way to get notified about new news items directly to your MS Teams interface by using MS Flow, MS Flow Bot, Adaptive Cards and SharePoint connector.

The Flow requires actually only four steps:

We will use ‘when an item is created’ event as trigger in case of blog site template based news. What you have to know in this example is the blog site address (News site) and the blog list name which is always ‘posts’ in this scenario.

Then we are reading users’ own profile to get user email for Teams Flow bot. Just select ‘Get my profile (V2)’ action and there are no additional properties for this action.

News converting action ‘Html to text’ is required when reading rich text content from SharePoint blog post body since adaptive cards can’t be used with html content directly. Also this step is really simple:

Finally we are forming and posting adaptive card to Teams through Flow Bot.

Adaptive Cards is a fairly new concept which can be used in many different occasions and platforms. In this case we are using it with Microsoft Teams and you can access adaptive card designer in Url https://adaptivecards.io/designer . This makes planning of your adaptive card fairly easy. Just make sure you have select ‘Microsoft Teams’ as a host app (Yes, dark mode is also included) and after you are ready with formatting, adding actions and other components you want just use ‘Copy card JSON’ button to get your ready made JSON to clipboard.

Now you can paste your adaptive card JSON to Teams Flow Bot action message field which is used to create actual adaptive card. This action is still preview but works quite nicely. As recipient use email retrieved from ‘Get my profile (V2)’ action. Please notice there is also action available to post adaptive card directly to Teams channel with Flow Bot if you need more general approach. To form adaptive card content you can and you should now use dynamic content from SharePoint trigger. Also be careful when modifying JSON – The editor itself is still not so intuitive to use…

The only trickier part is to form news abstract since probably you don’t want to view whole news content in adaptive card. In this case I’m using Flow expression to get first 300 character from news body and after that I’m adding ‘…’ through concat function. Also notice I’m using blog post body ‘Html to Text’ conversion result instead of actual html so full expression here is concat(substring(body(‘Html_to_text’),0,300), ‘…’). This step is only needed when we are using rich text or html formats within adaptive cards.

As a result whenever a new organizational news is published as a blog item in classic SharePoint Online I can get a direct message from Flow bot to my MS Teams client. Also I added action button to open actual news item if needed.

Through this approach you can actually get notification to Teams client from any of the SharePoint list based actions if needed to support your own or your teams work. With little bit different SharePoint trigger you can get the same result out either from classic publishing pages (in case your organizational news are based for them) or even from modern SharePoint news if your organization is already using them.

Let’s hope this post will give you ideas how to use flow and adaptive cards in real world scenarios. Now take advantage of your licenses and start using Flow 😉