Communication

Microsoft keeps retiring the easy way into Teams. We build the one that survives

A Teams message works the same way a Slack one does: the right event, in the right channel, next to the calendar and the documents your team already lives in. For an organisation on Microsoft 365, that is often the more honest choice than adding a second chat tool just for notifications.

What makes Teams its own conversation is Microsoft's own history with it. The old Office 365 connectors that many tutorials still describe are being retired, on a schedule Microsoft has already announced and quietly moved more than once. Which route a connection uses today decides whether it is still working next year — a question that does not exist for most of the tools in this bank.

  • Power Automate or Adaptive Cards, not the retired connector
  • Buttons and fields, not a plain text line
  • From €1,700 plus service fees
The tool

What Microsoft Teams is, and why the route matters more than the message

Teams is Microsoft's chat and meeting tool, and for most organisations on Microsoft 365 it is not really a standalone choice: it comes with the licence, sits next to Outlook, SharePoint and OneDrive, and is where the company already spends its day. Connecting to it rarely means just Teams — usually the rest of the Microsoft stack is also in play, from Dynamics 365 as the CRM to SharePoint as the document store to Entra ID for who sees what.

For posting a message, Microsoft offers two supported routes: a Power Automate flow, the low-code option most organisations already have, and a direct call using Adaptive Cards for anything needing its own layout, fields or buttons. The Office 365 connector that used to be the standard answer is on its way out, and building against it now is building on borrowed time.

What goes wrong

Three things that go wrong with Teams connections specifically

Two of these are the same alert-fatigue and dead-message problems Slack has. The third is not, and it is the one that is specific to Microsoft.

A connector built two years ago quietly stopped working

Somebody set up an Office 365 connector in 2023, following a tutorial that was correct at the time. Microsoft announces retirement, moves the date, retires it anyway, and the messages stop with no error visible in Teams — just a channel gone quiet, which looks exactly like a quiet week.

What you see instead

Built on Power Automate or a direct Adaptive Card call from the start, with a heartbeat that flags it if the flow itself stops running — not just if one message fails to send.

Every Dynamics update posts to one channel, and it becomes background noise

Once Dynamics 365 is wired to Teams, it is tempting to post every record change: a lead created, a case updated, a field edited. Within days the channel scrolls past faster than anyone reads it, and a genuinely blocked deal gets the same weight as an automatic timestamp update.

What you see instead

A threshold per record type — a deal moving to a late stage, a case open longer than a day — with the rest into a weekly digest instead of a live feed.

The message is a wall of text because Adaptive Cards were never used

A quick Power Automate flow often posts a plain text block: everything on one line, no structure, no button. It technically delivers the information, and nobody can act without opening three other tabs to check the record it is about.

What you see instead

An Adaptive Card with the fields laid out — customer, amount, status — and a button that opens the record in Dynamics or the CRM directly, the same discipline as a Slack Block Kit message.

The bill for doing it by hand

What a dead or noisy Teams connection actually costs

The Microsoft-specific cost differs from the noise cost. A connector that quietly stopped working is not a minutes-a-day cost — it is a step function: zero for months, then a full afternoon tracing why a process has not said anything since March, plus whatever was missed in between.

The noise cost runs the same arithmetic as Slack: at a hundred messages a day and ten seconds each, that is roughly 15 to 20 minutes a person, every working day, on updates that asked nothing of anyone. Both are avoidable with the same fix — build on a route Microsoft is not retiring, and post only what crosses a threshold.

  • A retired connector found only when someone asks why a channel has gone quiet: a half day of tracing, plus whatever was missed.
  • A hundred low-value Dynamics updates a day: 15 to 20 minutes of reading per person.
  • A plain-text message with no button: a second, manual lookup in Dynamics for every single one.
What we build

We build the thing on the other end too

Teams almost never arrives alone: once we are asked for a Teams message, Dynamics, SharePoint or Entra sign-in is usually already part of the same conversation, and worth scoping together rather than one connection at a time.

A connection needs two ends. Plenty of agencies will build you the API call and hand you a JSON payload; that is the easy half. The harder half is what the data lands in — a website, a webshop, a portal your customers log into, an internal tool that replaces a spreadsheet. JKC builds both ends, which is why the connections we build tend to keep working: nothing about the receiving side is a black box to us.

API integrations

The connection itself: authentication, field mapping, rate limits, retries and a queue that survives the other system being down for an hour. Built against the documented API where there is one, and against whatever the vendor really offers where there is not.

Websites

WordPress sites that read from your systems instead of repeating them by hand: a careers page fed by your HR system, a team page that follows your payroll, prices and availability that are the real ones.

Webshops

WooCommerce shops where the order is the last time anyone types it: it becomes an invoice in your accounting package, a label at your carrier, a stock mutation in your warehouse, and a line in your CRM, on its own.

Web applications

When the process does not fit any standard product: a customer portal, a quoting tool, a planning board, a dashboard that reads three systems at once. Built on your data, with your systems as the source instead of a copy of them.

What can be connected

What can trigger a Teams message, and what it carries

As with Slack, almost everything here is 'in'. The difference is the route each row needs — some work through Power Automate alone, others need a direct Adaptive Card call for a working button.

  • Dynamics 365 record changes above a threshold (into the tool)

    A deal moved to a late stage, a case open longer than agreed, posted with the record's key fields and a link into Dynamics.

  • Form submissions and webshop orders (into the tool)

    A website form or a WooCommerce order with the fields filled in, so sales or support can act without opening the CMS or shop admin.

  • Approvals and status changes from inside the card (out of the tool)

    An Adaptive Card button that approves a request, assigns a case or changes a status, writing the result back through the source system's API.

  • SharePoint document events (into the tool)

    A new document in a shared library, or one awaiting approval, with a link — useful where SharePoint is already the filing system and Teams is where people notice things.

  • A weekly digest for everything under the threshold (into the tool)

    The record changes and form submissions worth knowing in aggregate, so the live channel stays reserved for what needs same-day attention.

Rows one and three usually need the direct Adaptive Card route rather than Power Automate alone, because that is where the buttons live — worth knowing before a quote assumes the cheaper route will do everything.

How it works

How a connection gets built at JKC

The same four steps every time, whichever tool it is. Nothing here is a workshop you pay for: step one exists because scoping a connection wrong is the single most expensive thing that can happen to it.

  1. 1. We look at what is actually being retyped

    Not "which fields exist" but "which fields does somebody currently move by hand, how often, and what breaks when they get it wrong". Most projects turn out to need two or three flows, not a full two-way sync of everything. That conversation is what keeps the quote where it is.

  2. 2. We pick the route, and say why

    A maintained connector from the vendor, a platform like Make or Zapier, or a custom integration against the API. Cheapest first, not custom first: if a supported plugin does exactly what you need, that is the answer and we will tell you so. Custom is for the cases where the off-the-shelf option would need so much configuring that it becomes the fragile option.

  3. 3. We build it to survive the other system

    Every connection ships with retries, a queue and an idempotency key, so an order that arrives while the other side is down is delivered later rather than lost, and a retry does not create a second invoice. On a test environment first where the vendor offers one, so the first thing your real administration sees is a working connection.

  4. 4. We hand it over with the failure modes written down

    Which alerts you will get, what each one means, what to do about it, and who to call. Plus the credentials in your own name, in your own vault — not in ours. A connection nobody but us can maintain is a connection you do not own.

After it goes live

A connection that fails silently is worse than no connection

This is the part most quotes leave out. A connection that stops working without telling anyone is worse than manual work, because with manual work at least somebody notices when it does not get done. Every connection JKC builds is monitored, and the monitoring is not an upsell — it is in the service fee.

An alert per failed message, not a monthly report

A message that does not get through raises an alert the same hour, with the record it was about. Not a dashboard you have to remember to look at.

Replay, not re-enter

Anything that failed sits in a queue and can be sent again once the cause is fixed, in order. Nobody goes back through yesterday to find the four orders that did not land.

We watch the vendor's changes, so you do not have to

APIs get versioned, deprecated and rate-limited. When a vendor announces a change that affects your connection, adjusting to it is part of the service fee, not a new project.

What it costs

From €1,700, and the biggest variable is who built the other end

For Teams specifically: if Power Automate alone covers what you need, that is the cheaper build and we will say so; a direct Adaptive Card integration with working buttons sits a step above it, closer to what a Slack app with Block Kit costs. Either way it usually rides along with a Dynamics or SharePoint project rather than standing on its own.

A connection starts from €1,700 plus a monthly service fee, which covers the monitoring, the queue and keeping up with the vendor's API changes. Work outside a fixed scope is €95 per hour.

What moves the number is not the tool — it is how well the system on the other end is known. If JKC built your website, your webshop or your web application, we already know its data model, its edge cases and where its stock numbers really come from, and a connection into it is mostly configuration and testing. If it is a system we have never opened, we start with a short technical check of both sides and quote after that, so you are not paying hourly for us to work out the basics.

Two more things that move it, in our experience more than anything else: whether the tool has a real API or only a CSV export, and whether the sync has to go both ways. One-way is roughly half the work of two-way, because two-way means deciding, per field, which system wins when they disagree — and that decision is the expensive part, not the code.

Questions

Frequently asked questions about connecting Microsoft Teams

Technically, in some tenants, for now — but we will not build new work on it. Microsoft has been retiring Office 365 connectors on a rolling schedule that has already moved once, and a connection built on a deprecated route is a connection with a known expiry date we cannot predict.

Power Automate or a direct Adaptive Card call are the two routes Microsoft is steering everyone toward, and they are what we build against.

Free, 10 minutes

Not sure where the manual hours actually go?

That is what the Growth Scan is for. Ten minutes, no sales call attached: you get back where the double work sits, which connection would pay for itself first, and which one honestly would not.