Mention a channel with Flow

Twitter is always great for the latest information on the Microsoft stack. But it is also great for inspiration from the community. Lately I have been following John Liu his Flow hacks. His tweet inspired me to create an at mention channel Flow example.

What the hack?

One of the things which was challenging in Flow was the use of the Microsoft Teams post message action. I have been struggling with this action to use for more advanced things like at-mentioning.

And then I saw this tweet from John:

At-mention channel

My first attempt was of course to test his solution, which worked great. After that I wanted to try something different. I created a Flow which at-mentions the whole channel.

channelatmentioning_test

The Flow will use a manual trigger. After that the Flow initializes three variables.

Channel post url variables

Channel post url

Just like in John his example I am using the Invoke an HTTP request.

First make sure that you the Invoke an HTTP request action connection is using https://graph.microsoft.com as the Base Resource URL and Azure AD Resource URI values like in the screenshot below.

basesourceurl

After you have done that you can use the ChannelPostUrl variable for the URL of the request and the code snippet below for the body.

mentionachannelflowv2

Update 28-06-20: The following code snippet, has a small quote typo. The code widget I am using in this blog adds additional quotes. For some reason it has to many quotes to the channel id reference in the tag. It should be id=\"0\".

Update 25-06-21: The following code snippet was invalid since a couple of days. pchaturvedi85 made me aware of that on GitHub.

Update 19-09-21: Thanks to Vlad and Josh for pointing out I accidently removed the conversationIdentityType property. Updated the codesnippet again.

Mark as important

While testing with the body of this request I was wondering if I could also make a message important. I know it is not directly related but it has a similar markup style in Microsoft Teams.

channelimportant_test

It is very easy. Just set the importance attribute to high.

Happy testing!

You may also like...

28 Responses

  1. Jeremy Gregg says:

    HI – thanks for this post – really helpful.

    I’ve implemented it for one of my Teams sites, but I keep getting an error: “Unable to read JSON request payload. Please ensure Content-Type header is set and payload is of valid JSON format.”

    The only thing I’ve changed vs. your code is that I’ve substituted my channel name in place of “SharePoint Site Collections” in your code. I’m sure the JSON is correct therefore – so, can this error thrown for some other reason?

    Hope you can help!

  2. Matt says:

    Jeremy, I ran into the same thing. You need to alter the escape characters from the sample:

    “content”: “These ones -> Around me”,

  3. Andrey says:

    I did not understand. Could you clarify please what characters and from where should I alter?
    Still have the same error: “Unable to read JSON request payload. Please ensure Content-Type header is set and payload is of valid JSON format.”

  4. Dennis says:

    @Jeremy & @Andrey,

    I think there is a small typo in the code snippet. For some reason it has added to many quotes to the channel id reference in the tag. It should be id=\"0\". I tested the json code snippet in the Graph Explorer, https://developer.microsoft.com/en-us/graph/graph-explorer.

    This is probably a good place to test this kind of json code snippets 🙂

  5. Jonathan Cavey says:

    Hello @Dennis, is there any way to do this within a adaptive card within flow? I for some reason can not use the method you have posted. Thank you

  6. Dennis says:

    @Jonathan,good question. Haven’t tried that before. I will test it soon 🙂

  7. Kondal says:

    @Jeremy @Dennis
    I’m new to this . Not sure what I’m doing wrong
    When i run this by updating my channel name i get the error as teamGroupId needs to be a valid GUID.

    I even tried running with the ID manually but it still failed.

    {
    “body”: {
    “content”: “This is Flow mention channel test, General”,
    “contentType”: “html”
    },
    “mentions”: [
    {
    “id”: 0,
    “mentionText”: “General”,
    “mentioned”: {
    “conversation”: {
    “id”: “5a99a50fxxxxxxxxxxxxxxx”,
    “displayName”: “General”,
    “conversationIdentityType@odata.type”: “#Microsoft.Teams.GraphSvc.conversationIdentityType”,
    “conversationIdentityType”: “channel”
    }
    }
    }
    ]
    }

  8. Dennis says:

    @Kondal, what’s your ChannelPost Url value?

    Structure should be something like this:
    https://graph.microsoft.com/v1.0/teams/{team-id}/channels/{channel-id}/messages

    So for example:

    https://graph.microsoft.com/v1.0/teams/81bf333c-xxxxx-xxxx-xxxx-xxxxxxxxxx/channels/19:xxxxxxxxxxxxxxxxxxxxxxx@thread.tacv2/messages

  9. Anu C. says:

    thank you for sharing. I followed the example above with the graph api and it worked.

  10. Sig says:

    what about authentication? It asks me for an access token

  11. Brett says:

    Is there any way to do this without Azure AD premium?

  12. Daniel says:

    Super rookie here but eventually got it to work !! Thanks for this !!

    Wondering if it’s also possible to use it to (1) Reply to a conversation (Like Post a reply to a message V2 (Preview) and (2) post the message as the flow bot ?

  13. Niksa says:

    hi @Dennis,
    thank you for your tips and code for this.
    I just want to be sure am I missing something – I did this as you did, it works, the mentioning is posted in the channel but what I want to know is this:

    1. Is it me or the notifications for your channel mention method are not working, or that’s not working because of MS still?
    2. If they should be working , what am I doing wrong?
    Thanks,
    Niksa

  14. Carol says:

    Hi Dennis,
    Thanks for your sharing!
    But I faced an issue to authenticate, error saying: Access token validation failure. Invalid audience.
    What I got from response was: Bearer realm=””, authorization_uri=”https://login.microsoftonline.com/common/oauth2/authorize”, client_id=”00000003-0000-0000-c000-000000000000″
    It seems we did not setup logon directing in this flow, is it meant in Azure? Then could you advice how we should do it?

    Thanks~!
    Carol

  15. Alex says:

    is it possible to work without autorization&

  16. Tony says:

    How would you include a [today’s date yyyy-mm-dd] variable in the json file as a subject line for the message? Is this possible?

  17. Tony says:

    Realize you can probably just do today’s date as another variable.

  18. Prashant says:

    Hi Dennis,

    Power Automate has started throwing “Invalid request body was sent.” message since June 18th 2021. Do you know of any changes Microsoft may have done to the graph api that’s making the header invalid?

    Thanks,
    Prashant

  19. Keegan says:

    Hi Dennis, I have been using this for months and it works great, but just this morning it comes up with an error:
    Error: Action ‘Invoke_an_HTTP_request_2’ failed
    Error details: Invalid request body was sent.
    Any suggestions for this? Thanks!

  20. Dennis says:

    @Prashant & @Keegan,

    The codesnippet is invalid now because the schema has changed.

    pchaturvedi85 made me aware of that:
    https://gist.github.com/expiscornovus/bc7953b79faba66e0cb7d09a47d2f026#gistcomment-3791644

  21. Vlad says:

    A followup, you should not remove “conversationIdentityType”: “channel” param it is valid MS Graph resource type https://docs.microsoft.com/en-us/graph/api/resources/teamworkconversationidentity?view=graph-rest-1.0 if you remove it breaks the experience, you won’t be able to click on mentioned channel and got to channel. Because by default “conversationIdentityType”: “team” not a channel and it tries to look for a name of teams vs. provided channel.

  22. Josh says:

    Having just gone through this process, I want to clarify Vlad’s above point. He is saying you should remove
    “conversationIdentityType@odata.type”: “#Microsoft.Teams.GraphSvc.conversationIdentityType”
    but NOT
    “conversationIdentityType”: “channel”

    The block that works for the current implementation/schema is as follows:

    {
    “id”: 0,
    “mentionText”: “General”,
    “mentioned”: {
    “conversation”: {
    “id”: “5a99a50fxxxxxxxxxxxxxxx”,
    “displayName”: “General”,
    “conversationIdentityType”: “channel”
    }}}

  23. Dennis says:

    Hi Josh, thanks for spotting that error.

    You and Vlad are right, I think I removed a bit too much after the last adjustment 🙂

  24. Charlélie says:

    Hello
    Is it possible to do the same thing inside an Adaptive Card.
    I tried to mix your way + this link (https://docs.microsoft.com/en-us/microsoftteams/platform/task-modules-and-cards/cards/cards-format?tabs=adaptive-md%2Cconnector-html#format-cards-with-html) but it doesn’t work…

  25. Dennis says:

    Hi Charlélie,

    I haven’t tried mentioning a channel in an adaptive card, I will have a look. I did try mentioning a user in an adaptive card:
    https://www.expiscornovus.com/2020/11/15/how-to-create-a-terms-of-use-message/

    Maybe that blog helps you get started?

  26. Jatin says:

    Hi Dennis,
    Have you tried mentioning teams tag in an adaptive card?

  1. January 31, 2021

    […] Automate is frustratingly limited. Mentioning a team or a channel is not possible at all (at least without using the HTTP connector, which requires a paid premium license) and the “official” way of using the “Get […]

  2. June 25, 2021

    […] I had a couple of queries about mentioning in Microsoft Teams. I revisited the Mention a channel with flow post because of the Invalid request body was sent error. And I also created this new blog about […]

Leave a Reply

Your email address will not be published. Required fields are marked *

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