Microsoft Teams Beta

Developer notes for the Teams upstream connector: how Triage’s diagnostic runs as a bot in Teams, rendered with Adaptive Cards and authenticated with Microsoft Entra ID. This documents the platform surface the Intake Gateway builds on — the gateway itself is in How upstream connectors work.

Reference
Teams platform at a glance

The public platform facts the Intake Gateway’s Teams renderer relies on, each grounded in Microsoft’s developer documentation (see Developer references).

Bot runtimeAn Azure Bot resource on the Bot Framework; the bot exposes a single HTTPS messaging endpoint that receives Bot Framework Activity objects.
App packageA Teams app package (manifest.json plus colour and outline icons) declaring a bot in personal scope, published to the tenant’s org catalog or side-loaded as a custom app; distribution is governed by Teams admin policy.
AuthenticationSingle sign-on with Microsoft Entra ID — the user is already signed in to Teams, and the bot obtains a token via OAuth 2.0 on-behalf-of exchange, with no separate login.
Question renderingAdaptive Cards. Teams supports Adaptive Card v1.5 or earlier for bot-sent cards; the Teams mobile app supports up to v1.2, so the gateway targets a mobile-safe subset.
Inputs & submitInput.ChoiceSet for the answer options, Action.Submit to post the answer back to the bot, and Action.OpenUrl for the deep link on the completion card.
Lock in placeThe bot edits the message it sent (update activity), replacing the question card with a locked card that has no input elements — the ‘answers lock, no back button’ property, enforced structurally.
Back-syncProactive messages let the bot post into the thread after the fact (the deep link once composerID’s publish receipt lands, or an enrichment request), using a stored conversation reference.
TenancyOne admin consent per tenant authorises the app and its Entra permissions; per-tenant diagnostic configuration lives in Triage, not in the app package.
The integration
How the diagnostic runs in Teams
StepWhat happens on the platform
1The requester opens the Triage bot (personal scope). Teams delivers a Bot Framework message Activity to the gateway’s HTTPS messaging endpoint.
2The gateway performs Entra ID SSO token exchange to obtain the requester’s verified identity — silently, because they are already signed in to Teams.
3The gateway sends the first question as an Adaptive Card (Input.ChoiceSet + Action.Submit).
4On submit, Teams posts the answer Activity; the gateway updates the same message to the locked card and sends the next question.
5On the final answer the gateway calls the Triage decision core; the Intent Record is minted and the completion card (channel, confidence, intent:// chip) is sent.
6When composerID publishes downstream, a proactive message updates the completion card with an Action.OpenUrl deep link to the created record.
Primary sources
Developer references

Microsoft’s official Teams developer documentation. The facts on this page are grounded in these pages and in the vendor-published docs repository (MicrosoftDocs/msteams-docs).

The gateway’s Teams renderer and its contract tests live in upstream/teams_cards.py in this repository — see the reference implementation.