Articles

Options for retirement of incoming webhook connector in Microsoft Teams

Update: Microsoft has extended the deadline for replacing existing connection URL’s to January 31, 2025.

Microsoft recently announced they will be retiring Office 365 connectors within Microsoft Teams. I was approached by a client on what this means to them as they use the “Incoming Webhook” connector extensively by having their CRM system post activity notifications to client specific Teams channels.

Regarding timing, all existing connections will continue to work until December 2025 (with a URL change required in December 2024). However, new incoming webhook connections can only be created until August 15, 2024.

Option 1 – Teams Workflow

As a direct replacement for incoming webhooks Microsoft points us to channel Workflows. Click the ellipses next to a channel and select Workflows, then Post to a channel when a webhook request is received.

You will be prompted for a Team and Channel, then presented with a URL to make the POST request. The application that was calling the incoming webhook can then just replace the old URL with the new workflow URL.

Behind the scenes Teams creates a cloud flow in Power Automate.

This is a good option for a reliable and cost-effective replacement for incoming webhooks you already have in place. The downside is that if you have many webhooks then this can be a time-consuming exercise, replacing each one with a new workflow. In Power Automate there will be a flow for every team and channel which may be a lot to manage.

Thinking about my client’s question, they have hundreds of teams each with multiple channels. This is an acceptable option to get them past the August 2024 deadline for onboarding new clients and creating new connections. This also gives them time to switch existing incoming webhooks by the December 2025 deadline.

Option 2 – Power Platform Workflow

But I was looking for a more data-driven approach where the CRM system could call a single API (or drop messages on a service bus) and provide a payload that includes the message, target team, and channel.

Improving on the previous option for a Teams workflow, we can create a single flow in Power Automate that can read the team id and channel id from the payload and post the message to the appropriate Teams channel.

This works well and is much easier to manage a single flow within Power Automate rather than one for every channel(which would be hundreds for my client). However, once you save this flow, you’ll see a diamond next to the flow indicating this is a premium flow. When evaluating this option please consider Power Automate Cloud Process pricing.

Option 3 – Azure Logic App

Looking for an even lower cost, data-driven solution I remembered that Azure Logic Apps can also post to Teams channels. Following the consumption plan Logic App pricing option this seems to be a much more affordable solution.

The Logic App designer interface is almost identical to Power Automate.  In this example I decided to use a service bus message queue as the trigger for the flow. The message body is read in base64 so must be converted to string which is why you see an extra step in my example.

This approach produced the same result as the Power Automate workflow at a much better price point.

Prepare and think ahead about which option is best for you

Everyone using the Microsoft Teams incoming webhook connector will need to address the feature retirement. As I’ve outlined there are several options and considerations to be made for each including workflow management and pricing. The decision on approach is ultimately up to your business based on technical expertise, support, and pricing.