> ## Documentation Index
> Fetch the complete documentation index at: https://www.integrate.io/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# ETL: Microsoft Teams Hooks

> Set up a Microsoft Teams hook to post Integrate.io ETL job, cluster, and schedule notifications to a Teams channel through a Workflows webhook.

A Microsoft Teams hook posts Integrate.io ETL notifications to a Teams channel as cards. Each card shows what happened (for example, a failed job), the key details, and buttons that open the job, package, cluster, or schedule in Integrate.io ETL. The hook delivers to a **Teams Workflows** webhook, which you create in the channel in a few clicks. No app install or admin consent is needed in Integrate.io ETL.

## Before You Start

* You need to be an account administrator in Integrate.io ETL. Service hooks are defined at the account level.
* In Microsoft Teams, you need permission to add a workflow to the channel that should receive the notifications.
* Use a standard channel. Workflows can't post to private channels.
* Use a **Workflows** webhook URL. Office 365 connector "Incoming Webhook" URLs (`webhook.office.com`) were retired by Microsoft and are rejected.

## Get a Webhook URL in Microsoft Teams

**Step 1**

In Microsoft Teams, open the channel that should receive notifications.

**Step 2**

Select **More options (…)** next to the channel name, then select **Workflows**.

**Step 3**

Choose the **Send webhook alerts to a channel** template, then follow the prompts and save the workflow.

**Step 4**

Copy the webhook link the workflow shows when it is saved. You will paste it into Integrate.io ETL in the next section.

> [!WARNING]
>
> Treat the webhook link like a password. It contains a signature (`sig=`), and anyone who has the link can post messages to your channel. Integrate.io ETL stores it encrypted and does not write it to its logs.

## Create the Microsoft Teams Hook

**Step 1**

Click your avatar, then click **Account settings**.

**Step 2**

Click **Service Hooks** from the left pane menu.

**Step 3**

Click **+ new hook**.

**Step 4**

In the list, choose **Microsoft Teams**.

**Step 5**

Fill in the fields:

| Field | Description |
| :- | :- |
| Name | A label that identifies the hook in your list of service hooks. |
| Teams Workflows webhook URL | The webhook link you copied from the Teams workflow. It must be an `https` link on a Microsoft Workflows host (`powerplatform.com`, `powerautomate.com`, or `logic.azure.com`). |

**Step 6**

Select the events you want to be notified about:

* **All Job Notifications:** All events below.
  * **Job Submitted:** Job was submitted by user or schedule for execution.
  * **Job Started:** Job execution started.
  * **Job Stopped:** Job stopped by user.
  * **Job Completed:** Job completed successfully.
  * **Job Failed:** Job completed with failure.
* **All Cluster Notifications:** All events below.
  * **Cluster Requested:** Cluster creation requested by user or schedule.
  * **Cluster Available:** Cluster is available and jobs can be run on it.
  * **Cluster Terminated:** Cluster is terminated.
  * **Cluster Idled:** No activity on the cluster for a specified interval.
  * **Cluster Error:** Cluster error occurred and jobs can't be executed on it.
* **All Schedule Notifications:** All events below.
  * **Schedule Created:** Schedule was created.
  * **Schedule Activated:** Schedule was enabled.
  * **Schedule Deactivated:** Schedule was disabled.
  * **Schedule Deleted:** Schedule was deleted.
  * **Schedule Skipped:** A scheduled run was skipped and no job was created. See [Service Hooks](https://www.integrate.io/docs/etl/service-hooks.md#schedule-skipped-notifications) for details.

**Step 7**

Optionally, limit the hook to specific packages or package groups. See [Scoping hooks to packages or package groups](https://www.integrate.io/docs/etl/service-hooks.md#scoping-hooks-to-packages-or-package-groups) for how filters are applied.

**Step 8**

By default, the hook is created **active**, but you can disable it if you wish.

**Step 9**

Click **Create Service Hook** to save your changes.

**Step 10**

Trigger a ping to test the hook. A card titled **Integrate.io is connected** appears in the channel.

If the URL is not a Workflows webhook link, the hook is not saved and the URL field shows an error.

## What the Cards Show

| Event type | Card title | Details | Buttons |
| :- | :- | :- | :- |
| Job | Event and package name, for example "Job Failed: Daily orders" | Job ID, status, package, cluster, who triggered it, start and finish times, duration. Failed jobs also include the error message. | View job, View package |
| Cluster | Event and cluster name | Cluster ID, status, nodes, region | View cluster |
| Schedule | Event and schedule name | Schedule ID, status, next run, last run | View schedule |

Titles are colored by outcome: failures and errors are red, completed jobs and available clusters are green, and stopped, idled, terminated, skipped, or deactivated events are amber.

Teams also adds a line under each card that names the person who created the workflow, in the form "\[name] used a Workflow template to send this card".

Teams limits a message to about 28 KB. If a job's error message is very long, the card shortens it, and drops it entirely if needed. Use **View job** to read the full error.

## Delivery and Retries

| Situation | What Integrate.io ETL does |
| :- | :- |
| Teams accepts the message | Delivery succeeds. Workflows webhooks answer with HTTP 202, which counts as success. |
| Teams is throttling (HTTP 429), returns a server error (5xx), or can't be reached | Retries up to 4 times, waiting longer each time (from about 15 seconds up to about 2 minutes). If Teams asks for a specific wait (`Retry-After`), that wait is used, up to 10 minutes. |
| The workflow was deleted or turned off (HTTP 404) | Not retried. Create a new workflow and update the hook's URL. |
| The signature was rejected (HTTP 401 or 403) | Not retried. Copy the webhook link from the workflow again and update the hook. |
| The workflow rejected the card (HTTP 400) | Not retried. Check that the workflow posts the card it receives to the channel. |

Integrate.io ETL does not follow redirects from the webhook URL.

## FAQ

**Q: Can I use an Office 365 connector "Incoming Webhook" URL?**

No. Microsoft retired Office 365 connectors, and `webhook.office.com` URLs are rejected. Create a Workflows webhook with the **Send webhook alerts to a channel** template instead.

**Q: Can I send notifications to more than one channel?**

Yes. Create one Microsoft Teams hook per channel, each with that channel's workflow URL. You can choose different events and package filters for each hook.

**Q: I clicked ping but no card appeared. What should I check?**

Open the workflow in Teams and confirm it is turned on and its run history shows the request. If the workflow was deleted or recreated, copy the new link and update the hook.

**Q: Someone else may have seen our webhook URL. What should I do?**

Delete the workflow in Teams, create a new one, and update the hook with the new URL. The old link stops working once the workflow is removed.

## Related

> [card] [Service Hooks](https://www.integrate.io/docs/etl/service-hooks.md)

> [card] [Slack Hooks](https://www.integrate.io/docs/etl/slack-hooks.md)

> [card] [PagerDuty Hooks](https://www.integrate.io/docs/etl/pagerduty-hooks.md)

> [card] [Email Hooks](https://www.integrate.io/docs/etl/email-hooks.md)


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.