gitea icon indicating copy to clipboard operation
gitea copied to clipboard

MS Teams webhooks: deprecated O365 webhook will break on August 15th, 2024 / October 1st, 2024

Open sommerf-lf opened this issue 1 year ago • 13 comments
trafficstars

Description

Source Microsoft I couldn't find any mention of this in any issue or PR. Can't be repreduced, as it is not deprecated yet, but the warning already exists: see screenshot However a Workflow can replace this, which needs a change of the payload sent.

Gitea Version

1.22.0

Can you reproduce the bug on the Gitea demo site?

No

Log Gist

No response

Screenshots

image

Git Version

No response

Operating System

No response

How are you running Gitea?

not relevant

Database

None

sommerf-lf avatar Jul 11 '24 15:07 sommerf-lf

Documentation for new workflow post message: https://learn.microsoft.com/en-us/connectors/teams/?tabs=text1#microsoft-teams-webhook

sommerf-lf avatar Jul 11 '24 15:07 sommerf-lf

https://www.theregister.com/2024/07/09/users_rage_as_microsoft_announces/ is also related. Less then 3 months until they drop the functionality seems far too short of a period.

silverwind avatar Jul 11 '24 17:07 silverwind

to clearify:

  • will break at October 1st, 2024
  • can't create new endpoints at August 15th, 2024

sommerf-lf avatar Jul 11 '24 18:07 sommerf-lf

i got a same error #31645

sw2io avatar Jul 17 '24 02:07 sw2io

Update from microsoft:

Update 07/17/2024: Due to customer feedback received around the footer message, it will be removed from the cards that are posted within Microsoft Teams.

It will still break, just not show the error warning any more

sommerf-lf avatar Jul 18 '24 00:07 sommerf-lf

Deprecation was extended to December 2025 with a URL change, otherwise December 2024.

https://devblogs.microsoft.com/microsoft365dev/retirement-of-office-365-connectors-within-microsoft-teams/

silverwind avatar Jul 23 '24 18:07 silverwind

If other system administrators are having difficulties locating the affected teams: I have written a small tool in Golang that uses the Graph API to output the affected teams.

Teams Webhook Finder

This has helped us enormously, as Microsoft does not offer its own solution for reading the affected channels and teams. We have over 350 teams in our company, which we would otherwise have had to search through manually.

bbenouarets avatar Jul 24 '24 18:07 bbenouarets

There is also a neat Powershell Script which could list also other Connectors in Teams: https://github.com/12Knocksinna/Office365itpros/blob/master/Report-TeamsApps.PS1 https://office365itpros.com/2024/07/10/teams-office-connectors/

Teams Webhook Finder

PehDeh avatar Jul 25 '24 05:07 PehDeh

There is also a neat Powershell Script which could list also other Connectors in Teams:

https://github.com/12Knocksinna/Office365itpros/blob/master/Report-TeamsApps.PS1

https://office365itpros.com/2024/07/10/teams-office-connectors/

Teams Webhook Finder

That is correct. However, there are various dependencies. Modules must be installed and PowerShell is also required. With the Teams Webhook Finder, all I have is a small config and an executable file. In addition, the cmdlets used to list the app definitions are only in preview, which does not guarantee a reliable application.

bbenouarets avatar Jul 25 '24 05:07 bbenouarets

You can create a new webhook in workflow, and it seems that the API is the same, they just added the permission control. https://support.microsoft.com/en-us/office/post-a-workflow-when-a-webhook-request-is-received-in-microsoft-teams-8ae491c7-0394-4861-ba59-055e33f75498

yp05327 avatar Aug 13 '24 04:08 yp05327

The API isn't exactly the same, it seems that the new structure expects the payload to be wrapped in an array. See the following error that occurs when Workflows attempts to create a card:

ExpressionEvaluationFailed. The execution of template action 'Send_each_adaptive_card' failed: the result of the evaluation of 'foreach' expression '@triggerOutputs()?['body']?['attachments']' is of type 'Null'. The result must be a valid array.

Annoyingly, teams responds with a 202 and then fails to post the event to a channel. To see the error you need to go into Manage Workflow and view the event history.

jordanweschler avatar Aug 20 '24 13:08 jordanweschler

I didn't find any documents about this new webhook api. Does MS have it?

yp05327 avatar Aug 21 '24 04:08 yp05327

I found this page: https://learn.microsoft.com/en-us/connectors/teams/?tabs=text1%2Cdotnet#microsoft-teams-webhook

jordanweschler avatar Aug 26 '24 12:08 jordanweschler

It is not compatibility. So it will be a bug in the future.

see: https://github.com/prometheus/alertmanager/issues/3920

yp05327 avatar Aug 27 '24 00:08 yp05327

Hello everyone, I was able to find a possible workaround for this problem:

All you need to do is:

  1. create the workflow from the template: [When a Teams webhook request is received].
  2. edit the template
  3. delete all the steps under the action [When a Teams webhook request is received].
  4. add the action [Initialize variable] and edit it as in the picture: PS: don't forget the type=object: Screenshot 2024-08-29 alle 15 46 10
  5. add the json that extracts the parameters coming from the webhook and converts them to: [AdaptiveCard] so that they can be printed correctly on teams
{
  "$schema": "http://adaptivecards.io/schemas/adaptive-card.json",
  "type": "AdaptiveCard",
  "msteams": {
    "width": "Full"
  },
  "body": [
    {
      "type": "TextBlock",
      "text": "@{triggerBody()?['title']}",
      "size": "ExtraLarge",
      "weight": "Bolder"
    },
    {
      "type": "FactSet",
      "facts": [
        {
          "title": "Repository:",
          "value": "@{triggerBody()?['sections'][0]['facts'][0]['value']}"
        },
        {
          "title": "@{triggerBody()?['sections'][0]['facts'][1]['name']}",
          "value": "@{triggerBody()?['sections'][0]['facts'][1]['value']}"
        },
        {
          "title": "Author:",
          "value": "@{triggerBody()?['sections'][0]['activitySubtitle']}"
        }
      ]
    }
  ],
  "actions": [
    {
      "type": "Action.OpenUrl",
      "title": "View in Gitea",
      "url": "@{triggerBody()?['potentialAction'][0]['targets'][0]['uri']}"
    }
  ]
}
  1. add the action [Publish card in a chat or channel] and set the message of the previous action as [Adaptive Card] Screenshot 2024-08-29 alle 15 46 41
  2. after doing this save and test.

The end result will look like this: Screenshot 2024-08-29 alle 16 41 13

I hope it will be useful for you, Riccardo.

thecicco avatar Aug 29 '24 14:08 thecicco

@thecicco i tried your tip but got this error: Delivery: Post "https://prod-xx.westeurope.logic.azure.com:443/workflows/xxxxxxxxxxxxxxxxxxxxxxxxxxxx/triggers/manual/paths/invoke?api-version=2016-06-01&sp=%2Ftriggers%2Fmanual%2Frun&sv=1.0&sig=xxxxxxxxxxxxxx": context deadline exceeded (Client.Timeout exceeded while awaiting headers) Do you have any ideas?

PehDeh avatar Mar 21 '25 06:03 PehDeh

Any news on updating the webhook feature with microsoft teams? Or at least, please provide a working workaround solution. The suggested solution above does not work.

SupremeVoid avatar Aug 22 '25 22:08 SupremeVoid

I found a working solution. I didnt get it to work with an adaptive card but at least a normal message being posted into a channel.

  1. Add a microsoft teams webhook in your repository
  2. Check all the boxes for events that you want
  3. Create a workflow for your desired Teams channel. Choose the "Post to a channel when a webhook request is received"
  4. Give it a proper name
  5. Choose the team and the channel
  6. Click create
  7. Click on the workflow in the list, then edit on the top right
  8. Select the first element and copy the HTTP-POST-URL and paste it in the webhook you are creating on your repository in gitea.
  9. In the workflow editor, delete all but the first actions/elements
  10. Add the "Post message in a chat or channel"
  11. Select the "Flow-Bot" for who the publisher of the message should be
  12. choose the team and channel again
  13. Now the most important part. In the Message field. you want to add an expression for every field of the JSON that you get from the webhook message. (Check the messages being sent in the webhook history on the bottom). Click into the field, then choose expression in the popup on the right. Type your expression
  14. Example:
{triggerBody()?['title']}

By: {triggerBody()?['sections'][0]?['activityTitle']}
Repository: {triggerBody()?['sections'][0]?['facts'][0]?['value']}
Pull Request: #{triggerBody()?['sections'][0]?['facts'][1]?['value']}
Details: {coalesce(triggerBody()?['sections'][0]?['text'], 'No details provided')}
[View in Gitea]({triggerBody()?['potentialAction'][0]?['targets'][0]?['uri']})
  1. Save the workflow and test it out.

Cheers 🍻

SupremeVoid avatar Aug 29 '25 21:08 SupremeVoid