go-gitea / gitea

Git with a cup of tea! Painless self-hosted all-in-one software development service, including Git hosting, code review, team collaboration, package registry and CI/CD
https://gitea.com
MIT License
44.04k stars 5.4k forks source link

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

Open sommerf-lf opened 2 months ago

sommerf-lf commented 2 months ago

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 commented 2 months ago

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

silverwind commented 2 months ago

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.

sommerf-lf commented 2 months ago

to clearify:

sw2io commented 1 month ago

i got a same error

31645

sommerf-lf commented 1 month ago

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

silverwind commented 1 month ago

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/

bbenouarets commented 1 month ago

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.

PehDeh commented 1 month ago

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

bbenouarets commented 1 month ago

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.

yp05327 commented 3 weeks ago

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

jordanweschler commented 2 weeks ago

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.

yp05327 commented 2 weeks ago

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

jordanweschler commented 2 weeks ago

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

yp05327 commented 1 week ago

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

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

thecicco commented 1 week ago

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']}"
    }
  ]
}

6) 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 7) 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.