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 arepositories 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.
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.


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
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.
4. Trigger a workflow with the object as recipient
Add a Microsoft Teams step to a workflow such asnew-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.

TextBlock so the same template works over the bot and the webhook:

- Trigger: When a Teams webhook request is received
-
Add a Condition, with this expression on the left and is greater than
0on the right: -
If yes — Post card in a chat or channel, set Adaptive Card to:
-
If no — Post message in a chat or channel, set the message to:
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
An old office.com / webhook.office.com URL stopped delivering
An old office.com / webhook.office.com URL stopped delivering
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.Nothing shows up in the channel
Nothing shows up in the channel
Confirm the Workflows flow is on
#deploys, the URL includes sig=, and the workflow triggered the acme/api object. Check Logs → Messages.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.