A simple workflow to create a To Do task from Microsoft Teams messages

(NOTE: Let me start off by saying that this topic has been covered before by others several times, so what I’m covering is not 100% new, but I think the approach is. I actually created this by copying an existing template for creating tasks in Planner and simply modified it.)

In Outlook we have the ability to flag messages, or even to drag them into folders and turn them into appointments or tasks. Unfortunately, the same functionality doesn’t exist natively in Microsoft Teams, but by building a simple workflow built in Power Automate we can achieve the desired result.

Here’s a short video showing the solution in action:

The prerequisites for this are:

  • Have used To Do previously
  • Are not afraid to import and customise a flow into Power Automate

How it works

As you can see in this image, the ability to create a task shows up under the More actions menu when clicking on the action menu for a message in a chat or a channel.

When pressing on the action, an adaptive card is presented, asking us to specify the task name and due date. After pressing submit, the workflow will create the task for us in To Do.

In To Do, the task has been created with the title and due date we specified in the previous step.

Additionally, a reminder has been set for the same date.

And in the notes section of the task additional information is presented:

  • Who the message was from
  • The message itself
  • A link to the message in case we need to go back for more context, access information, or just to reply

Building the workflow

Step 1 – Get task details

An Adaptive Card is used to present the title and date fields as seen in Figure 2. The workings of this Adaptive Card are shown later.

Step 2 – Create task

The second step takes the task title and due date information from the Adaptive Card in Step 1. The due date is also used as the reminder date.

It also takes key information from the message in Microsoft Teams such as the sender’s name, the message itself, and a hyperlink to the message.

With this information, the workflow creates the task for us as seen earlier.

NOTE: When configuring the workflow, make sure you specify a To Do list that suits you or create a dedicated one if easier.

The Adaptive Card shown referred to in the previous image simply asks for:

  • The task title – so that we can put some text that means something to us
  • The due date we want to complete this task by

Getting it for yourself

Installing the workflow in your account requires that you:

  1. Import the flow by pressing Import under the My flows page:

Once imported you can customise the workflow if you feel comfortable, or just save it and turn it on to start using it straight away.


Also published on Medium.

5 comments

  1. When trying to import your .zip package I downloaded from GitHub, power automate throws an error: The solution file is invalid. The compressed file must contain the following files at its root: solution.xml, customizations.xml, and [Content_Types].xml. Customization files exported from previous versions of Microsoft Dynamics 365 are not supported.

    looking through your nested folders, these files do not exist.

    I followed your instructions, according to the link on step 2. which takes to a microsoft doc page, I get the above error by going to make.powerapps.com > solutions > import

    Moreover, I see there is a built-in “tasks” app that allows you to do just this, without having to configure any flow..

    1. Sorry about that, I put the wrong instructions up which gave you the error. The blog post has been corrected.

      As for the built in “tasks” app, are you referring to “Tasks by Planner and To Do”? Because if so, that doesn’t have the functionality to create a task from a message.

  2. Excellent solution thanks, to allow this solution to be deployed across an organisation without relying on everyone having to import it, I found if you extend the Power Automate further adding a ‘List All To-Do List (v2)’ , then ‘Parse JSON’

    {
    “type”: “array”,
    “items”: {
    “type”: “object”,
    “properties”: {
    “@@odata.etag”: {
    “type”: “string”
    },
    “displayName”: {
    “type”: “string”
    },
    “isOwner”: {
    “type”: “boolean”
    },
    “isShared”: {
    “type”: “boolean”
    },
    “wellknownListName”: {
    “type”: “string”
    },
    “id”: {
    “type”: “string”
    }
    },
    “required”: [
    “@@odata.etag”,
    “displayName”,
    “isOwner”,
    “isShared”,
    “wellknownListName”,
    “id”
    ]
    }
    }

    then use a Condition with displayName = ‘Tasks’ and put the ID in a Variable, you can use that variable in your ‘Add a to-do (v3)’ To Do List field, then you can share the Flow with others using the Run Only option, and in there make sure connections are ‘provided by run only user’.

    The user just has to click two + buttons the first time they run the Flow in Teams, but it allows you to deploy without import across an organisation.

    1. That’s a fantastic solution, thanks Jonathan!
      Although thankfully the functionality will be natively baked into the Teams client soon anyway!

Leave a Reply to ILIAS SOUKALLARIS Cancel reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.