acme). If a tenant has no Teams vendor, the default workspace vendor is used — which would be your bot, the thing they rejected.
The modeling is the same as Send as your bot: channels on objects, DMs on users (per-tenant profiles when someone belongs to more than one customer), and a SuprSend tenant per customer account. This page only changes who owns the bot.
It assumes you know how to create a Teams app. Here, they run those steps in their Azure tenant (or you run them in a subscription they own).
1. They create the app in their directory
Point their IT at Create a Teams app. Differences:- Entra supported account types can stay single-directory (
AzureADMyOrg). This bot does not need to leave their tenant. - Azure Bot App Type is still Single tenant for anything created after 31 July 2025.
- They send you Application (client) ID, client secret, Directory (tenant) ID, and the Teams app package (so their admins can install it from their org catalog).
--sign-in-audience AzureADMyOrg and --app-type SingleTenant. The CLI on the setup page applies; swap the audience.
They still have to install the app in the team that owns #incidents and, for DMs, in personal scope. BotNotInConversationRoster is the same @mention fix.
2. Put their credentials on a tenant vendor
Create the SuprSend tenant for this customer if it doesn’t exist.
There isn’t a public API for this vendor form today. Set it in the dashboard. Tenant-vendor API access is beta — email support@suprsend.com if you need it.
Save and check Access Token. Empty +
AADSTS700016 means the Tenant ID isn’t the directory the bot is registered in. A filled token plus 401 on send usually means App Type is wrong.
The workspace (default tenant) vendor can stay as your bot for customers who install your app. Only accounts that bring their own bot get a tenant vendor. At send time, passing
tenant_id: "acme" selects Acme’s vendor.3. Store destinations the same way
Channels on the service object, DMs on the user. Because every send for this tenant goes through their vendor, whose home Tenant ID is their directory,tenant_id on $ms_teams is optional here — if you leave it out, SuprSend picks it up from that vendor. Including it is harmless and keeps the entries identical to the your-bot path. For a first test, copy conversation_id from ⋯ → Copy link on #incidents (decode %3A and %40) and Maya’s Entra object ID for a DM.
incoming_webhook on these recipients. Webhooks ignore tenant vendors and fire for every URL on the profile.
4. Trigger with that tenant
api-prod, and DMs Maya using her per-tenant $ms_teams.
The message in
#incidents comes from their app name, not yours. Logs → Messages shows the tenant as acme.If something fails
Posts still come from your bot
Posts still come from your bot
The trigger didn’t pass
tenant_id, or that tenant has no Teams vendor. Without a tenant vendor, SuprSend uses the default workspace vendor.AADSTS700016
AADSTS700016
Tenant ID on the vendor form isn’t the directory where they registered the bot.
Next
Tenant vendors
How per-tenant credentials override the default vendor.
User-tenant mapping
Store Maya’s Teams identity on Acme only.