Skip to main content
@frogbotai/piece-microsoft-teams connects an agent to Microsoft Teams through an Azure Bot. Mention the bot in a channel or group chat, or message it in a personal chat, and the agent replies in the same conversation. When the agent uses the question tool, participants answer on an Adaptive Card in the conversation.

Connect an agent

The instance slug defaults to microsoft-teams. Give each instance its own slug when you connect more than one bot. See factory options for slug, auth, oauth, and scopes.

Register the bot

  1. In Azure, create an Azure Bot with a Microsoft Entra application. Record the application ID as appId and create a client secret for appPassword.
  2. Match the bot type to the Entra application. FrogBot defaults to multi-tenant. For a single-tenant bot, which works only in its own tenant, set botAppType: 'SingleTenant' and botTenantId to that tenant’s ID.
  3. Set the bot’s Messaging endpoint to https://your-app.example.com/api/webhooks/<instance>. Messages, card submissions, and installs all arrive at this URL.
  4. Under Channels, add Microsoft Teams.
FrogBot checks the signature on every request from Teams before reading it. A request signed for another bot gets 401.

Install the Teams app

A Teams app manifest links your Azure Bot to Teams. Add a bots entry with the same application ID and the scopes you want:
Package the manifest with its icons, then upload it in the Teams admin center or, where your tenant allows custom apps, from Apps > Manage your apps > Upload an app. Install it in each team or chat where the agent should work.

Who can answer

FrogBot looks up the person who submits a card in the conversation’s member list, the same list Teams uses for @mentions, and reads their email address. It matches that address to a FrogBot user, then runs the agent’s access check for that user. Anyone who passes can answer, including a teammate who did not start the conversation. Being a member of the Teams channel is not enough on its own. A person without access gets a private notice, and the question stays open. People whose Teams account has no email, such as some guest accounts, have no FrogBot user; the default agent access denies them with a notice saying their account could not be matched. Write an access function if unmatched people should be able to answer. The member lookup needs no Microsoft Graph permission. If it fails, FrogBot uses the profile Teams cached from the person’s earlier messages, and then Microsoft Graph, which works only if you granted the bot’s application the User.Read.All application permission.

What participants see

Every question in a call appears on one card with Submit and Dismiss buttons. Option descriptions appear after the option’s label. Questions, options, and typed answers appear exactly as written; Markdown is not formatted. A typed answer replaces the choice on a one-choice question and is added to the choices on a several-choice question. When a question does not allow a typed answer, Teams asks for a choice before it sends the card. When the agent asks several questions in separate calls, FrogBot posts one card at a time and posts the next card after the current one is answered. After an answer, the card is replaced in place with each question, the answer, and Answered by <name>, and the agent continues in the same conversation. Dismiss replaces the card with Dismissed by <name> and stops the turn. The first answer wins. Questions are answered only in Teams. The FrogBot admin chat shows the conversation read-only. Notices about access and late answers are Teams targeted messages in channels and group chats, which only the person they are for sees. In a personal chat, where only you and the bot are present, they are ordinary messages. If Teams cannot deliver a notice, FrogBot logs the failure and the card stays as it was.

Supported clients

Cards use Adaptive Cards 1.5, which current Teams clients support. FrogBot checks every submission itself, so a client that skips a required-choice check still gets a clear message on the card.

Limits and failures

FrogBot acknowledges a card submission once it has recorded the answer and updated the card. The agent’s next step runs as a job, so a slow model does not delay the submission.

Troubleshooting