Skip to main content
This page covers posting into a single Microsoft Teams channel using a Workflows incoming webhook. You still create the Teams app and save the vendor — App ID, password, App Type, and Tenant ID. SuprSend does not send Teams without those credentials, including on this path. What you skip is installing your app in the customer’s tenant. The destination is a webhook URL. Microsoft’s Workflows app (the flow bot, powered by Power Automate) is what posts in the channel — usually as Workflows, or on behalf of the person who created the flow, not as your product. Let’s say you are building a product like GitHub. Acme wants deploy events for the acme/api repository to land in their #deploys channel, and that’s all they want — no DMs from your app. An admin who can edit #deploys creates a webhook and pastes the URL into your product. In SuprSend, that channel is a connection on an object that models the repository. The object is the recipient of the workflow. If you also need to DM people, post in several channels as a bot they can @mention, or appear as an installed app, use Send as your bot instead.

Teams channels are connections on objects

Objects let you model any resource in your system — a repository, a project, a service. Each object lives in a type (think of it as a table) and has an id unique inside that type. For this GitHub-style flow, each repository becomes an object in a repositories type. The webhook URL is stored as $ms_teams on that object, not on a human user. If Maya leaves Acme, #deploys should still receive acme/api events.
You don’t need a SuprSend tenant for a webhook. The URL is self-contained. Reach for a tenant when you later add a bot, branding, or tenant vendors for that customer.

1. Save the vendor

Follow Create a Teams app and add the vendor through Add the vendor in SuprSend. You need the same App ID, password, App Type, and Tenant ID as a bot send.

2. Create a Workflows webhook in Teams

Office 365 connectors are retired. Create the URL with Workflows. In #deploys, open Workflows.
Workflows in a Teams channel more-options menu
Search for webhook and pick Send webhook alerts to a channel. Choose the channel, save, then Copy webhook link.
Copy webhook link from a Teams Workflows flow
Copy it while it’s on screen. The URL embeds a sig= and is usually shown once. These templates don’t need a premium Power Automate licence. In your product this is a settings field: “Paste your Teams webhook URL.” You are not building OAuth.

3. Store the URL on the object

If add_ms_teams includes a webhook URL and bot fields (conversation_id, user_id), only the webhook is kept. Precedence is incoming_webhook.url > conversation_id > user_id. Don’t mix them on the same object.
Incoming webhooks are not bound to a tenant vendor. If the same users belong to multiple tenants and you route other channels through each customer’s own providers, don’t put webhooks on those shared profiles — SuprSend posts to every webhook on the recipient, regardless of tenant vendor. Keep the URL on the repository object instead.

4. Trigger a workflow with the object as recipient

Add a Microsoft Teams step to a workflow such as new-deploy. The object is the recipient, so template variables like {{recipient.name}} resolve against the repository. A Workflows webhook accepts Adaptive Cards only. Plain text and MessageCard are not rendered, so the MS Teams template must produce an Adaptive Card on this path. Use Adaptive Card version 1.4 or 1.5. Version 1.6 renders through the bot but fails silently through a Workflows webhook — the request is accepted and nothing appears in the channel.
MS Teams template producing an Adaptive Card for a Workflows webhook
If you already have a plain-text template, wrap it in a single TextBlock so the same template works over the bot and the webhook:
Or build the Workflows flow yourself with a condition on the incoming payload — cards one way, text the other:
Power Automate flow that posts Adaptive Cards or plain text from a Teams webhook
  1. Trigger: When a Teams webhook request is received
  2. Add a Condition, with this expression on the left and is greater than 0 on the right:
  3. If yesPost card in a chat or channel, set Adaptive Card to:
  4. If noPost message in a chat or channel, set the message to:
The condition counts attachments on the request. SuprSend sends a card there and plain text in text. coalesce supplies an empty array when attachments is absent, which stops the expression erroring on a text-only payload. See MS Teams templates for authoring.
#deploys shows the post. Logs → Messages has the Teams delivery for the acme/api object.

If something fails

That’s a retired Office 365 connector. Microsoft began the rollout on 18 May 2026. Create a Workflows webhook and replace incoming_webhook.url on the object. The field accepts either URL shape, so migration is a URL swap. You don’t have to rewrite the card.
Confirm the Workflows flow is on #deploys, the URL includes sig=, and the workflow triggered the acme/api object. Check Logs → Messages.
Don’t create new Office 365 connector URLs. The incoming_webhook field accepts either URL shape, so migration is a URL swap — but the template still has to be an Adaptive Card 1.4 or 1.5.

Next

Write the Teams template

Markdown or Adaptive Card for the webhook post.

Need DMs as well?

Register a bot and store channels on objects, people on users.