- Pipeline failure alerts (dbt / Snowflake task failures)
- Data quality alerts pushed through Genesis enrichment
- Scheduled daily / weekly report delivery
- SLA breach notifications
- Surface-a-finding-for-review cards for human attention
If you need inbound interaction (Genesis reading messages users post in Teams), this connector does not cover it — that requires a separate inbound surface. See Activate Eve in Teams (Bot Framework) for the bot path that handles
@-mentions and direct messages. Adaptive Card Action.Execute callbacks on that path are pending end-to-end verification and must not be treated as supported. See Microsoft Teams (Graph connection) for the delegated-OAuth path that sends as a specific human user.Relationship to the other Microsoft Teams paths
Genesis ships three distinct paths for Teams integration. They are complementary and can coexist in the same deployment.
For most customer alerting use cases, the webhook connector is the right tool — human attribution is incorrect for automated notifications, and outbound alerting does not need a full two-way bot.
Prerequisites
- A Microsoft 365 tenant with Microsoft Teams
- A Teams channel where notifications should land (for example,
#Genesis Alerts) - Permission in that channel to create a Workflow (most users can; some tenants restrict via Power Platform DLP policies)
- A Genesis user with admin access to the Secrets management surface
Setup
1
Create the Workflow in Microsoft Teams
In the target Teams channel:
- Click the ··· (More options) menu next to the channel name → Workflows
- Search for and select the template “Send webhook alerts to channel” (or “Post to a channel when a webhook request is received” in some Teams versions — both work)
- Name the workflow descriptively, e.g. “Genesis Alerts webhook”
- Confirm the team and channel the workflow will post into
- Click Add workflow → Done
2
Copy the webhook URL
From the Workflows panel (Teams left rail → Workflows → select the workflow you just created):
- Click Copy webhook link
- The URL looks like
https://default<TENANT_ID>.<REGION>.environment.api.powerplatform.com/powerautomate/automations/direct/workflows/<WORKFLOW_ID>/triggers/manual/paths/invoke?...sig=<SIGNATURE>
3
Store the URL as a Genesis Secret
The webhook URL is consumed as a Secret reference, not a Connection. There is no “Microsoft Teams Webhook” entry in the Connections page.
- Genesis dashboard
- HTTP endpoint
- Programmatic (in-cluster)
- Open the Genesis dashboard → Secrets (or API Keys, depending on dashboard version)
- Click New Secret
- Name: must start with
secret_. Pick a descriptive suffix that names the destination, e.g.secret_contoso_genesis_alertsorsecret_data_pipeline_alerts_channel - Value: paste the full webhook URL from step 2
- Save
4
Teach the bot which secret to use
The agent invokes the webhook tool by passing the secret reference name as the
webhook_url argument. The agent learns the mapping from (routing intent) → (secret reference name) via one of:- Bot persona / instructions (recommended): bake the mapping into the bot’s system prompt. Example: “When posting an alert about a pipeline failure, post to
secret_contoso_genesis_alerts.” - Per-call argument: the agent decides which secret to use at runtime based on context. Less reliable; persona-baked routing is preferred for stable operational workflows.
secret_critical_alerts + secret_data_pipeline_alerts + secret_scheduled_reports), each gets its own secret and the bot persona routes by intent.5
Test the connection
From a bot conversation:A successful response confirms the URL resolves, the hostname is allow-listed, and the Workflow accepts the POST. The test will not post a visible message to the channel.To verify visual delivery, ask the bot to send a real notification:The notification card should appear in the channel within a few seconds.
Actions reference
The agent-facing actions are exposed onteams_webhook_tools. The typed actions (SEND_ALERT, SEND_SCHEDULED_REPORT, SEND_APPROVAL_HANDOFF) are preferred over SEND_ADAPTIVE_CARD for their respective use cases — the agent passes typed parameters and the builder produces a well-formed, semantically-validated card.
Genesis branding scope: typed cards (
SEND_ALERT, SEND_SCHEDULED_REPORT, SEND_APPROVAL_HANDOFF) are wrapped with a Genesis-branded shell: a logo image at the top, a colored header bar keyed off severity or action type, and a “Sent by Genesis” footer. Branding is intentionally scoped to typed cards only — SEND_MESSAGE, SEND_NOTIFICATION, and raw SEND_ADAPTIVE_CARD payloads remain pass-through, since callers there author the card shape directly.SEND_APPROVAL_HANDOFF is display-only. The *.api.powerplatform.com webhook delivery path cannot receive Action.Submit round-trips, so no Approve / Reject buttons are emitted. The card instructs the reader to reply in Genesis to record the decision. Round-trip card-button callbacks require Bot Framework and are tracked as a separate deferred capability.Additional Tool Groups → Microsoft Teams Webhook Tools.
Wiring it up to actually fire automatically
Once the connector is set up and a bot persona knows which secret to use, you still need something to trigger the bot to fire the webhook — an alert that has to be typed by a human every time isn’t very useful. See Automate Teams Alerts via the Scheduler for the recommended scheduler-based pattern, a worked starter for a dbt-failure alerter, design considerations (cadence, deduplication, failure modes), and an honest catalog of what does not work today (SnowflakeTASK → Genesis HTTP, generic inbound webhooks, composite tool emission, reactive observability — each with its workaround).
Webhook URL governance
The webhook URL is bearer-token-equivalent: any party who holds it can post to the channel. Treat accordingly.Naming convention
Use descriptive, target-disambiguated suffixes after the mandatorysecret_ prefix:
- ✅
secret_contoso_genesis_alerts - ✅
secret_data_pipeline_alerts_channel - ✅
secret_critical_ops_handoff - ❌
secret_teams_webhook(which Teams channel? which customer?) - ❌
secret_url_1(no context)
Rotation
Microsoft does not impose a fixed expiry on Workflow webhook URLs. Rotation is operator-driven and recommended:- Annually as part of routine secret hygiene
- Immediately if the URL is exposed (committed to source control, pasted in an email, etc.)
- At ownership transfer when the human who created the Workflow leaves the team
- In Teams → Workflows panel → the relevant workflow → click the ··· (More options) menu
- Select Edit → there’s typically a regenerate URL option (or delete + recreate the workflow)
- Update the Genesis Secret’s value to the new URL via the dashboard or
PUT /api/secrets/{secret_name} - The next agent invocation picks up the new URL transparently — no Genesis restart required
Ownership and blast radius
The Workflow in Teams is owned by the Microsoft 365 user who created it. If that user leaves the customer’s organization, the Workflow may be disabled. Recommended practice:- Service account: create the Workflow under a shared service-account user that survives individual employee turnover
- Document ownership: in your customer’s runbook, record which Microsoft 365 user owns each Workflow and the contact responsible for rotation
Delivery assurance and observability
The webhook tool ships with bounded retries and per-attempt logging.Retries
Webhook sends retry up to 3 attempts with exponential backoff + jitter, bounded by a 21-second wall-clock budget. Retries fire on 5xx responses and network errors.Per-attempt log records
Every send attempt writes a row totool_observability_facts with:
tool_name = 'teams_webhook_action'tool_action— for exampleSEND_ALERT,SEND_NOTIFICATIONresult_json— the full webhook response envelope (delivery status, HTTP code, attempt count, error excerpt if any)- Timestamps for each attempt
Querying recent deliveries
Agents can callteams_webhook_recent_deliveries to surface the last N deliveries with optional filtering by delivery_status (completed / failed). Useful for operator diagnostics (“did the alert about the dbt failure land at 09:14 actually go through?”).
Failure visibility
Failed sends emit observability rows but do not raise to the agent’s conversation by default. For operator-visible alerting on persistent failures, routetool_observability_facts into your existing operational dashboard or use the OTEL metrics surface.
Troubleshooting
“Invalid webhook host” error
“Invalid webhook host” error
The hostname did not match the allow-list. Supported hostname patterns:
*.api.powerplatform.com— current Microsoft 365 Workflows (preferred; this is whatSend webhook alerts to channelproduces)*.logic.azure.com— legacy Azure Logic Apps (still functional)*.webhook.office.com— deprecated O365 Connectors (still allowed for backward compatibility; emits a deprecation warning in the response)
HTTP 401 / 403 from the Workflow
HTTP 401 / 403 from the Workflow
The signature in the URL has been rotated or the workflow has been deleted/disabled. Verify the Workflow is active in Teams and regenerate the URL if needed.
HTTP 4xx with body about Adaptive Card validation
HTTP 4xx with body about Adaptive Card validation
The Adaptive Card JSON failed Microsoft’s parser. Use the typed actions (
SEND_ALERT, SEND_SCHEDULED_REPORT, SEND_APPROVAL_HANDOFF) rather than SEND_ADAPTIVE_CARD to let Genesis’s semantic validator catch most issues before they reach Microsoft.Webhook URL accidentally committed to source control
Webhook URL accidentally committed to source control
- Rotate the URL immediately (see Rotation)
- Update the Genesis Secret value
- The exposed URL is now invalid; no further action needed
Sender attribution shows a human user's name
Sender attribution shows a human user's name
If the Workflow’s “Send as” setting is configured for impersonation (some templates do this), the message will appear posted by the user who created the Workflow rather than by the Workflow bot. To fix: edit the Workflow → change the “Post as” setting to “Flow bot” or equivalent.
Related
- Automate Teams Alerts via the Scheduler — the trigger layer; recommended scheduler-based pattern + worked starter
- Activate Eve in Teams (Bot Framework) — the bot-attributed inbound message path; Adaptive Card callbacks are pending end-to-end verification
- Microsoft Teams (Graph connection) — the delegated-OAuth path that sends as a specific human user
- Additional Tool Groups → Microsoft Teams Webhook Tools — full parameter list for each action

