PSI Notify Bot
Shared Teams bot identity for all PSI automation alerts and notifications. One bot, many consumers.
What it is
A single Teams Bot Framework identity that any PSI internal automation can use to post messages into a Teams chat. Currently powers beta-deploy notifications for the ProApps CI/CD pipeline and the IT Critical Notifications operational alert channel. Designed for additional consumers (scheduled tasks, web apps, ad-hoc scripts) without per-consumer bot setup.
The same repo and Function App also host the IT Helper — a separate user-facing Teams identity for opening IT support cases with our MSP (the single-bot philosophy below applies to automation senders; a user-facing product warrants its own name and icon).
The Teams-side app is named “PSI Notify Bot.” The underlying Azure resources still use the original “Deploy” names — those are internal-only and not worth churning.
Azure resources
| Resource | Name | Group | Notes |
|---|---|---|---|
| Azure Bot | PSIDeployNotifyBot | PS-WEBAPPS | F0 free tier |
| App Registration | PSI.All Deploy Notifications | Azure AD | App ID 5f54d8fc-fca1-4c78-9894-c267018efadb, tenant a83ae943-0a50-49cc-83c3-479b7a44b7fb |
| Teams App | PSI Notify Bot | Org app catalog | Catalog ID eb9901e7-e87c-437d-803a-b766ec007a16, isNotificationOnly: true |
| Secrets vault | ps-certificates-kv | PS-RG-01 | All psi-notify--* secrets live here |
| Communication Service | psi-notify-acs | PS-WEBAPPS/PS-RG-01 | ACS for the voice/SMS wake-up tier; toll-free +1 833-639-2948 |
| Voice/SMS listener | psi-notify-listener | PS-WEBAPPS | Flex Consumption Function App; /api/voice/* Call Automation flow |
How to use it
See Teams Notifications for the full guide. Quick summary:
| Task | Where |
|---|---|
| Send a message to an existing chat | Send-NotifyMessage -ChatId -BodyHtml (module: psi-notify-bot/src/PSI.Notify.psd1) — or Bot Framework POST /v3/conversations/{id}/activities |
| Bootstrap a new persistent alert chat | C:\GIT\psi-notify-bot\scripts\Initialize-NotifyChat.ps1 |
| List active persistent chats | Table in Teams Notifications → Active persistent chats |
| Fetch bot credentials | az keyvault secret show --vault-name ps-certificates-kv --name psi-notify--<x> |
Consumers
| Consumer | Pattern | Chat |
|---|---|---|
| Deploy ProApps | Per-event group chat | One per [Beta] AppName vX.X.X.X |
egnyte-stp-sync | Persistent | IT Critical Notifications |
| PRGJSMES Get Help | Persistent | PRGJSMES Help (operator-initiated; resolve flow posts a follow-up card in-thread) |
csm-board Board Manager digests | Persistent | CSM Board Manager — first Python (send-only) consumer |
The live registry is the consumer table in the repo README.md + Teams Notifications → Consumers — check those before trusting this snapshot.
Voice & SMS wake-up tier (ACS)
For alerts that must wake someone up (e.g. mail to criticalalerts@progressivesurface.com), Teams isn’t enough — Teams mobile honors Do Not Disturb. A second path on Azure Communication Services adds an outbound voice call with TTS + press-1 acknowledgement (live) and SMS (pending toll-free verification). Full architecture, the Flex-Consumption Key Vault gotcha, and the iOS caller-screening caveat are in Teams Notifications → Voice & SMS.
What else lives in this repo
The repo hosts more than the Notify sender. The product roster (with owning docs for each) is
CLAUDE_ONBOARDING.md §1 in the repo — in brief:
- PSI Notify Bot — this page: the shared automation sender (
src/PSI.Notifymodule). - IT Helper — user-facing IT support bot (separate Teams identity, same
psi-notify-listenerbackend), including the HR new-user / position-change / termination intake flows. - AlertEngine — the critical-alert pipeline (
criticalalerts@/ REST → rules → Teams + ACS voice call- SMS). Architecture:
docs/alerting-system.mdin the repo. Governed by the PSI Alerting Standard — what qualifies as an alert, the four severity tiers, and the required Alert Envelope. The platform design that closes the gap between the standard and the engine as built (envelope validation, the resolve path, per-group Teams routing, the@progressivesurface/notifyclient family, and the Alert Console) isdocs/alert-platform-design.md.
- SMS). Architecture:
- HR provisioning (Tracks A/B) — internal execution of the HR new-user flow via Entra API-driven
inbound provisioning. Cross-repo initiative: execution in
psi-notify-bot(docs/hr-driven-provisioning-plan.md+docs/User Provisioning - on prem helper plan.md; GHE issue psi-notify-bot#42 is authoritative), policy in psi-portal (dbo.prov_*inalerts, editable at/admin/provisioning), plus tracking there (Onboarding Board / User Explorer / PC Store) and the on-prem post-task worker. The split is deliberate: the bot decides nothing about licences or groups, it reads the portal’s signed policy.
Status
Current state lives in living sources, not this page: the repo BUILD_LOG.md (authoritative change
history), gh pr list / gh issue list on the repo, and the psi-notify-listener Function App
settings for which feature flags are live.
See Also
Last updated: 2026-08-04 — added the repo product roster (IT Helper, AlertEngine, HR provisioning) and pointed status at living sources.