> For the complete documentation index, see [llms.txt](https://docs.flxbl.io/flxbl/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.flxbl.io/flxbl/codev/integrations/notifications/teams.md).

# Microsoft Teams

The Microsoft Teams notifications integration posts build and release events to a Teams channel. When a build completes on merge, a build fails, or a release is deployed, codev sends an **Adaptive Card** to the channel behind a Teams **incoming webhook** — with the repository, commit, release candidates, work items, and a button linking back to the run.

You configure it under **Settings > Organization > Integrations > Microsoft Teams**. Only organization owners can manage it.

## What gets posted

codev sends a card for three events:

| Event                | When it fires                   | Card                                                        |
| -------------------- | ------------------------------- | ----------------------------------------------------------- |
| **Build succeeded**  | A build completes after a merge | Commit, release candidates, work items, **View build**      |
| **Build failed**     | A build fails                   | The same fields, **View failed build**                      |
| **Release deployed** | A release finishes deploying    | Release name, environment, domain, status, **View release** |

The **Notify on** setting controls which of these are delivered:

* **All builds & releases** — every event above.
* **Failures only** — only failed builds. Successful builds and successful deployments are skipped.

<figure><img src="/files/cJVDOO2SUK3aciVe9jmg" alt="A build-succeeded Adaptive Card posted to a Teams channel"><figcaption><p>A build event posted to the configured Teams channel — the card carries the commit, work items, and a link back to the run.</p></figcaption></figure>

<figure><img src="/files/KavfOSPO77g9nQwn4qsD" alt="A build-failed Adaptive Card posted to a Teams channel"><figcaption><p>A failed build posts the same fields with a <strong>View failed build</strong> action.</p></figcaption></figure>

## Create the incoming webhook in Microsoft Teams

Teams receives external webhooks through a channel **Workflows** automation. Creating one takes a minute and does not require admin rights on the team:

1. In Microsoft Teams, open the channel the notifications should post to, click the channel's **⋯** (More options) menu and choose **Workflows**.
2. Search the templates for **webhook** and pick **Send webhook alerts to a channel**.

<figure><img src="/files/ygr11ijeOGho3TwVHrjx" alt="The Teams Workflows template gallery filtered to webhook templates"><figcaption><p>The channel's Workflows dialog — search for <strong>webhook</strong> and choose <strong>Send webhook alerts to a channel</strong>.</p></figcaption></figure>

3. The team and channel are pre-selected from where you opened the dialog. Confirm them and click **Save**.

<figure><img src="/files/7vDEypYg3OW5xzYKNjSA" alt="The Send webhook alerts template with team and channel parameters"><figcaption><p>The template's parameters — the team and channel the webhook posts to.</p></figcaption></figure>

4. On the created workflow's page, click **Copy webhook link**. This is the URL codev posts to (`https://….logic.azure.com/…` or `https://….powerplatform.com/…`).

<figure><img src="/files/RPXqqYrNMiCHkgZb7ssH" alt="The created workflow with the Copy webhook link action"><figcaption><p>The created workflow — <strong>Copy webhook link</strong> yields the webhook URL to paste into codev.</p></figcaption></figure>

The webhook URL is a channel-posting credential — anyone holding it can post cards to that channel. codev stores it encrypted in the integrations credential store; it is never written into project configuration or returned by project reads.

{% hint style="info" %}
Classic Office 365 connector webhooks (`https://….webhook.office.com/…`) also work, but Microsoft is retiring connectors in favor of Workflows. New setups should use the Workflows path above.
{% endhint %}

## Configure the integration in codev

1. Go to **Settings > Organization > Integrations** and open the **Microsoft Teams** tile.
2. Paste the **Webhook URL**. It must be an `https://` URL.
3. Leave **Enable notifications** on, and pick a **Notify on** mode — **All builds & releases** or **Failures only**.
4. Under **Availability**, select **Specific project** and choose the project. Notification settings are per project, so a project must be selected.
5. Click **Add Integration**.

Saving stores the webhook URL as an encrypted credential and writes the enable flag and mode to the selected project's configuration (`notifications.teams`).

<figure><img src="/files/pMEBLq1RhMbMeT5NmDed" alt="The Microsoft Teams Webhook (Notifications) integration form"><figcaption><p>The Teams integration form — webhook URL, enable toggle, notify-on mode, and the project the settings apply to.</p></figcaption></figure>

## Changing the mode later

The enable flag and mode live in the project's configuration under `notifications.teams`:

```json
{
  "notifications": {
    "teams": {
      "enabled": true,
      "mode": "failures"
    }
  }
}
```

Edit them from the project's **Update Project** dialog (the configuration editor), or re-add the integration with the new mode. Setting `enabled` to `false` stops deliveries without removing the stored webhook credential.

## Troubleshooting

* **No cards arrive** — check that the project's configuration has `notifications.teams.enabled: true` and that the integration is scoped to that project. In **Failures only** mode, successful builds and deployments are skipped by design.
* **The workflow was deleted or turned off in Teams** — the webhook URL stops accepting posts. Recreate the workflow, copy the new link, and re-add the integration; the old credential is replaced.
* **The workflow's run history shows failures** — open the workflow in Teams (**channel ⋯ > Workflows**) and check its **Run history**; a failed run means Teams received the post but could not deliver the card.

{% content-ref url="/pages/4uZHFEGGOGb26NhSg55F" %}
[Slack](/flxbl/codev/integrations/notifications/slack.md)
{% endcontent-ref %}

{% content-ref url="/pages/GQ9RQsUxYj0j0ZcBrGUq" %}
[Integrations](/flxbl/codev/integrations/overview.md)
{% endcontent-ref %}


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.flxbl.io/flxbl/codev/integrations/notifications/teams.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
