Skip to content

Teams channel — initiative plan ​

Audience: Leadership, product, engineering
Status: In the product (Workflows webhook). An Ascendly Teams app/bot is later.
Engineering detail: design-log/2026-08-22-teams-channel-broadcast.md in the monorepo


What this is ​

A dedicated Microsoft Teams channel (for example #ascendly) where Ascendly posts operational notices. Each post is a card with a title and message. People reply in that thread in Teams. Ascendly does not read replies.

Two ways a post is created:

SourceExample
AutomaticWeekly locking is approaching → one “Week locking soon” card
ManualAn admin writes subject + body at System → Teams

This is a shared notice board, not personal chat. The in-app bell and email stay as they are. There is no per-user Teams toggle.

v1 sends through a Teams Workflows webhook (channel → Workflows → paste URL in Ascendly). Cards appear from Workflows, not an Ascendly app icon, until a bot is connected later.


Why not 1:1 messages first ​

Personal alerts already have inbox + email. A channel is the gap: one place for company-wide Ascendly concerns, discussable in a thread.

1:1 DMs, embedding Ascendly as a Teams tab, and talking to the assistant in Teams are later.


What posts vs what does not ​

On the channel:

  • Weekly / monthly lock approaching (one post per lock period)
  • Missing evaluations for the team — counts by department, no employee names
  • Admin-composed announcements (level 5)

Stay in inbox / email only:

  • “An entry was submitted / deleted for you”
  • ATW request submitted / approved / rejected
  • Eval follow-up pings
  • Birthday greetings

A shared channel must not become a firehose or leak private scorecard events.


How to connect ​

  1. Create the destination channel and restrict membership as needed.
  2. Channel … → Workflows → Post to a channel when a webhook request is received.
  3. Super admin pastes the HTTPS URL at System → Teams (/system/teams). Treat the URL as a password.
  4. Send a test card. Automated lock and missing-eval posts stay off until Enable automated Teams posts is on at System → Teams and Also post to the Teams channel is on for the allowlisted types at System → Notifications.

Optional ops override: TEAMS_WEBHOOK_URL on the API and Worker (Mongo URL is unused while the env var is set).


What already exists ​

SurfaceRole
NotificationsPer-person inbox + email; type catalog; Teams allowlist checkbox
System → EmailLevel 5 broadcast to selected employees
System → TeamsWebhook connection, automated-posts switch (off by default), test, compose, post history

Teams is a destination for selected events and for compose — not a second notification product.


Phases ​

PhaseFocusStatusOutcome
Webhook v1Connection, test, compose, allowlist, historyLiveSuper admin posts to one channel; lock and missing-evals post once per event
Bot laterAzure Bot + Teams app packageNot startedPosts appear as Ascendly with native thread subjects

Later (not this surface) ​

  • Azure Bot / Graph posting
  • 1:1 DMs (would need Google → Entra identity mapping)
  • Teams tab or Nella in Teams
  • Multiple channels
  • Per-user Teams delivery prefs