Chat
574 TopicsThe Chat Notification Badge That Won't Die
I know there's another thread on this, but literally none of those solutions worked, so I'm a starting a new thread. My chat notification won't go away. All of my chats are read. Here's everything I've done to fix this already (note- It's a corporate computer so I can't mess with the anti-virus): Signed out of the app every (desktop, web, phone) Restarted my computer Cleared the cache data from all 13 different locations Changed the setting to close the app when I shut down Closed it in the Task Manager Turned off all of my notifications Clicked on every chat I've received over the last week The only thing that seemed to maybe be the culprit was a very large company meeting and I was the last to leave. There was a lot of chat in that meeting, though I didn't participate in any of it. The reason I think this was when I went to log into to Teams from my browser, as I started to type "Microsoft Teams" I noticed in the suggested sites that there was a chat message from that meeting. So obviously I've left the meeting. I've deleted that chat. I've even left the teams channel that hosts those meetings. For what it's worth, I don't have any notifications on the phone app (android). It's just on the desktop and the web. Please, for the love of god, help. It's slowly driving me insane and I don't have the mental capacity to deal with anything else that makes me insane during quarantine. š *jk- I'm fine. It's a joke*153KViews4likes54CommentsTeams Adaptive card Textrun is rendering markdown
I am making bot alarm message using adaptivecard. It is important for me to print out the user name and email accurately. So I tried to use TextRun to prevent markdowns from being supported.(https://adaptivecards.io/explorer/TextRun.html) But there is a problem that textrun is being marked down on ios mobile, tablet. this is my adaptive card json. {"type":"AdaptiveCard","$schema":"http://adaptivecards.io/schemas/adaptive-card.json","version":"1.3","body":[{"type":"TextBlock","text":"**Microsoft Entra ID**","size":"Large","wrap":true},{"type":"TextBlock","text":"user 5","size":"Medium","wrap":true},{"type":"RichTextBlock","inlines":[{"type":"TextRun","text":"- ``Use `code` in your Markdown file.(~~hspark~~@aaa.co.kr)\n","size":"Small"},{"type":"TextRun","text":"- + First item(test'email address removed for privacy reasons)\n","size":"Small"},{"type":"TextRun","text":"- ** test12041432(test'''email address removed for privacy reasons)\n","size":"Small"},{"type":"TextRun","text":"- > test12041435(test''email address removed for privacy reasons)\n","size":"Small"},{"type":"TextRun","text":"- 1. adsfsdafsdf *{}*asdfadsf*_~ark~(test'''email address removed for privacy reasons)","size":"Small"}]},{"type":"TextBlock","text":"user 5","size":"Medium","wrap":true},{"type":"RichTextBlock","inlines":[{"type":"TextRun","text":"- ``Use `code` in your Markdown file.``(~~hspark~~@aaa.co.kr)\n","size":"Small"},{"type":"TextRun","text":"- + First item(test'email address removed for privacy reasons)\n","size":"Small"},{"type":"TextRun","text":"- ** test12041432(test'''email address removed for privacy reasons)\n","size":"Small"},{"type":"TextRun","text":"- > test12041435(test''email address removed for privacy reasons)\n","size":"Small"},{"type":"TextRun","text":"- 1ASDFASDFSADFASD asdfadsfsd *{}*adsfasdf*_~ark~(test'''email address removed for privacy reasons)","size":"Small"}]}]} I used \ to escape markdown on textblock, but there was a phenomenon where \ for escape was output together on mobile (Android, ios) even though it was properly rendered on pc. i want to know: Is there any way to output properly without markdown on adaptive card? PC, mobile, table should be supported in all environments. and I think it's a bug that textrun is rendered as a markdown in ios environment so please solve it. that's adaptive card json rendering exapmle pc: ios mobile:ā ā ā and escape \ example: mobile: ā pc:ā āā ā725Views0likes3CommentsQuestions About Alternatives to Multi-Tenant Bots After July 31, 2025 Deprecation
Hello, As the ability to create multi-tenant bots in Azure will be discontinued after July 31, 2025, Iād like to ask if there are any viable alternatives available now? If I create a single-tenant bot and publish it to the Teams App Store, will users from other tenants still be able to interact with the bot? Additionally, will the bot be able to access their basic user profile information (only user name and aadObjectId) and conversation data? From my understanding, access tokens obtained using the client ID and client secret are tenant-scoped, meaning they are not valid across other tenants. As a result, the bot cannot access user information such as profile photos or email addresses from users in other tenants ā is that correct? I'd really appreciate any clarification or recommended best practices on this. Thank you!790Views0likes3CommentsMicrosoft Teams Bot OAuth login shows blank screen and closes without signing in
Iām building a Microsoft Teams bot using Azure AD OAuth (SSO) with Bot Framework. When I click Sign in, the OAuth popup in Teams shows a blank screen for a moment, then closes automatically without signing me in. What Iāve Done Added redirect URI in Azure App Registration: https://token.botframework.com/.auth/web/redirect Enabled Access tokens and ID tokens in App Registration ā Authentication. Configured OAuth connection in Bot Channels Registration (ConnectionName matches my bot code). Verified client ID, client secret, and tenant ID are correct. Code bot.js require("dotenv").config(); const { TeamsActivityHandler } = require("botbuilder"); const { Client } = require("@microsoft/microsoft-graph-client"); const { DialogSet, DialogTurnStatus, OAuthPrompt, WaterfallDialog } = require("botbuilder-dialogs"); require("isomorphic-fetch"); const OAUTH_PROMPT = "OAuthPrompt"; const MAIN_DIALOG = "MainDialog"; class BotActivityHandler extends TeamsActivityHandler { constructor(conversationState, userState) { super(); this.conversationState = conversationState; this.userState = userState; this.dialogState = this.conversationState.createProperty("DialogState"); this.dialogs = new DialogSet(this.dialogState); // OAuthPrompt for Teams SSO this.dialogs.add( new OAuthPrompt(OAUTH_PROMPT, { connectionName: process.env.CONNECTION_NAME, text: "Please sign in to continue", title: "Sign In", timeout: 300000, }) ); this.dialogs.add( new WaterfallDialog(MAIN_DIALOG, [ this.promptStep.bind(this), this.handleFileStep.bind(this), ]) ); this.onMessage(async (context, next) => { const text = (context.activity.text || "").trim().toLowerCase(); const dialogCtx = await this.dialogs.createContext(context); if (text.startsWith("/")) { // ...handle commands... } else { const results = await dialogCtx.continueDialog(); if (results.status === DialogTurnStatus.empty) { if (context.activity.attachments?.length > 0) { await dialogCtx.beginDialog(MAIN_DIALOG, { file: context.activity.attachments[0], }); } else { await context.sendActivity("Upload a file or type /help."); } } } await next(); }); } async promptStep(stepContext) { return await stepContext.beginDialog(OAUTH_PROMPT); } async handleFileStep(stepContext) { const tokenResponse = stepContext.result; if (!tokenResponse?.token) { await stepContext.context.sendActivity("Please sign in to access files."); return await stepContext.endDialog(); } const token = tokenResponse.token; // Use token with Microsoft Graph API // ... return await stepContext.endDialog(); } } module.exports.BotActivityHandler = BotActivityHandler; Problem OAuth popup appears, then closes without completing login. No token is returned to the bot. Questions Why does the OAuth popup in Teams close immediately without signing in? Where can I see detailed error logs for OAuth failures? Azure AD sign-in logs? Application Insights (do I need to configure Instrumentation Key in Bot Service)? Environment Bot Framework v4 (Node.js) Azure Bot Service Microsoft Teams channel Azure AD v2 OAuth121Views0likes2Comments[iOS][Adaptive Card] Issues with Adaptive Card rendering on iOS devices
Hi there, I've encountered some issues with Adaptive Card rendering on iOS devices, although these issues do not appear and work fine on desktop, web, and Android platforms. Issue 1: When specifying the image size within an Adaptive Card, the rendering on iOS devices is inconsistent, resulting in the appearance of an extra blank area. iOS Desktop And the card JSON is: { "type": "AdaptiveCard", "body": [ { "type": "TextBlock", "text": "I am a bot.", "wrap": true }, { "type": "Image", "url": "data:image/png;base64,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AQhAAAKJE0BgJW4CCgABCEAAAhCAQLoRQGClm0WpDwQgAAEIQAACiRNAYCVuAgoAAQhAAAIQgEC6EUBgpZtFqQ8EIAABCEAAAokTQGAlbgIKAAEIQAACEIBAuhFAYKWbRakPBCAAAQhAAAKJE0BgJW4CCgABCEAAAhCAQLoRQGClm0WpDwQgAAEIQAACiRNAYCVuAgoAAQhAAAIQgEC6EUBgpZtFqQ8EIAABCEAAAokTQGAlbgIKAAEIQAACEIBAuhFAYKWbRakPBCAAAQhAAAKJE0BgJW4CCgABCEAAAhCAQLoRQGClm0WpDwQgAAEIQAACiRNAYCVuAgoAAQhAAAIQgEC6EUBgpZtFqQ8EIAABCEAAAokTQGAlbgIKAAEIQAACEIBAuhFAYKWbRakPBCAAAQhAAAKJE0BgJW4CCgABCEAAAhCAQLoRQGClm0WpDwQgAAEIQAACiRNAYCVuAgoAAQhAAAIQgEC6EUBgpZtFqQ8EIAABCEAAAokTQGAlbgIKAAEIQAACEIBAuhFAYKWbRakPBCAAAQhAAAKJE0BgJW4CCgABCEAAAhCAQLoRQGClm0WpDwQgAAEIQAACiRNAYCVuAgoAAQhAAAIQgEC6EUBgpZtFqQ8EIAABCEAAAokTQGAlbgIKAAEIQAACEIBAuhFAYKWbRakPBCAAAQhAAAKJE0BgJW4CCgABCEAAAhCAQLoRQGClm0WpDwQgAAEIQAACiRNAYCVuAgoAAQhAAAIQgEC6EUBgpZtFqQ8EIAABCEAAAokTQGAlbgIKAAEIQAACEIBAuhFAYKWbRakPBCAAAQhAAAKJE0BgJW4CCgABCEAAAhCAQLoRQGClm0WpDwQgAAEIQAACiRNAYCVuAgoAAQhAAAIQgEC6EUBgpZtFqQ8EIAABCEAAAokTQGAlbgIKAAEIQAACEIBAuhFAYKWbRakPBCAAAQhAAAKJE0BgJW4CCgABCEAAAhCAQLoRQGClm0WpDwQgAAEIQAACiRNAYCVuAgoAAQhAAAIQgEC6EUBgpZtFqQ8EIAABCEAAAokTQGAlbgIKAAEIQAACEIBAuhFAYKWbRakPBCAAAQhAAAKJE0BgJW4CCgABCEAAAhCAQLoRQGClm0WpDwQgAAEIQAACiRNAYCVuAgoAAQhAAAIQgEC6EUBgpZtFqQ8EIAABCEAAAokTQGAlbgIKAAEIQAACEIBAuhFAYKWbRakPBCAAAQhAAAKJE0BgJW4CCgABCEAAAhCAQLoRQGClm0WpDwQgAAEIQAACiRNAYCVuAgoAAQhAAAIQgEC6EUBgpZtFqQ8EIAABCEAAAokTQGAlbgIKAAEIQAACEIBAuhFAYKWbRakPBCAAAQhAAAKJE0BgJW4CCgABCEAAAhCAQLoRQGClm0WpDwQgAAEIQAACiRNAYCVuAgoAAQhAAAIQgEC6EUBgpZtFqQ8EIAABCEAAAokTQGAlbgIKAAEIQAACEIBAuhFAYKWbRakPBCAAAQhAAAKJE0BgJW4CCgABCEAAAhCAQLoRQGClm0WpDwQgAAEIQAACiRNAYCVuAgoAAQhAAAIQgEC6EUBgpZtFqQ8EIAABCEAAAokTQGAlbgIKAAEIQAACEIBAuhFAYKWbRakPBCAAAQhAAAKJE0BgJW4CCgABCEAAAhCAQLoRQGClm0WpDwQgAAEIQAACiRNAYCVuAgoAAQhAAAIQgEC6EUBgpZtFqQ8EIAABCEAAAokTQGAlbgIKAAEIQAACEIBAuhFAYKWbRakPBCAAAQhAAAKJE0BgJW4CCgABCEAAAhCAQLoRQGClm0WpDwQgAAEIQAACiRNAYCVuAgoAAQhAAAIQgEC6EUBgpZtFqQ8EIAABCEAAAokTQGAlbgIKAAEIQAACEIBAuhFAYKWbRakPBCAAAQhAAAKJE0BgJW4CCgABCEAAAhCAQLoRQGClm0WpDwQgAAEIQAACiRNAYCVuAgoAAQhAAAIQgEC6EUBgpZtFqQ8EIAABCEAAAokTQGAlbgIKAAEIQAACEIBAuhFAYKWbRakPBCAAAQhAAAKJE0BgJW4CCgABCEAAAhCAQLoRQGClm0WpDwQgAAEIQAACiRNAYCVuAgoAAQhAAAIQgEC6EUBgpZtFqQ8EIAABCEAAAokTQGAlbgIKAAEIQAACEIBAuhFAYKWbRakPBCAAAQhAAAKJE0BgJW4CCgABCEAAAhCAQLoRQGClm0WpDwQgAAEIQAACiRNAYCVuAgoAAQhAAAIQgEC6EUBgpZtFqQ8EIAABCEAAAokTQGAlbgIKAAEIQAACEIBAuhFAYKWbRakPBCAAAQhAAAKJE/i/z497MyAUwwsAAAAASUVORK5CYII=", "width": "600px", "height": "300px" }, { "type": "ColumnSet", "columns": [ { "type": "Column", "width": "stretch", "items": [] }, { "type": "Column", "items": [ { "type": "TextBlock", "text": "Test Bot", "wrap": true, "isSubtle": true, "size": "Small", "weight": "Lighter" } ], "width": "auto", "verticalContentAlignment": "Center" } ] } ], "$schema": "http://adaptivecards.io/schemas/adaptive-card.json", "version": "1.6", "msTeams": { "width": "full" } } Issue 2: The Teams iOS client fails to properly render bold text in markdown when a single TextBlock contains both mention formatting and markdown elements. iOS Desktop Card JSON: { "type": "AdaptiveCard", "msteams": { "entities": [ { "type": "mention", "text": "<at>Zhongfang Zhou</at>", "mentioned": { "id": "29:1hRSk6kciBChF7eND3vFcDpybc1u0u-j4I9sCMr0j9WiD7a7XMGhYtOvCSZZxXQst83aOR_gimo5uEQPDOgP9vQ", "name": "Zhongfang Zhou" } } ] }, "body": [ { "type": "TextBlock", "text": "<at>Zhongfang Zhou</at> Hi, this is the **answer**.", "wrap": true }, { "type": "ColumnSet", "columns": [ { "type": "Column", "width": "stretch", "items": [] }, { "type": "Column", "items": [ { "type": "TextBlock", "text": "Test Bot", "wrap": true, "isSubtle": true, "size": "Small", "weight": "Lighter" } ], "width": "auto", "verticalContentAlignment": "Center" } ] } ], "$schema": "http://adaptivecards.io/schemas/adaptive-card.json", "version": "1.6", "msTeams": { "width": "full" } } Issue3: The Teams iOS client incorrectly renders all markdown text as bold when there are two TextBlocks, one containing mention formatting and the other containing markdown text. iOS Desktop Card JSON: { "type": "AdaptiveCard", "msteams": { "entities": [ { "type": "mention", "text": "<at>Zhongfang Zhou</at>", "mentioned": { "id": "29:1hRSk6kciBChF7eND3vFcDpybc1u0u-j4I9sCMr0j9WiD7a7XMGhYtOvCSZZxXQst83aOR_gimo5uEQPDOgP9vQ", "name": "Zhongfang Zhou" } } ] }, "body": [ { "type": "TextBlock", "text": "<at>Zhongfang Zhou</at>", "wrap": true }, { "type": "TextBlock", "text": "Hi, this is the **answer**.", "wrap": true }, { "type": "ColumnSet", "columns": [ { "type": "Column", "width": "stretch", "items": [] }, { "type": "Column", "items": [ { "type": "TextBlock", "text": "Test Bot", "wrap": true, "isSubtle": true, "size": "Small", "weight": "Lighter" } ], "width": "auto", "verticalContentAlignment": "Center" } ] } ], "$schema": "http://adaptivecards.io/schemas/adaptive-card.json", "version": "1.6", "msTeams": { "width": "full" } }2.4KViews1like6CommentsUnable to Add Tabs to Chats Consistently in Teams via GraphAPI
Expected Behavior: Tabs should be consistently added to chats when using the Graph API, provided all necessary permissions and conditions are met.Description We are encountering an issue when using the Microsoft Graph API to create chats and https://learn.microsoft.com/en-us/graph/api/chat-post-installedapps?view=graph-rest-1.0&tabs=http and https://learn.microsoft.com/en-us/graph/api/channel-post-tabs?view=graph-rest-1.0&tabs=http in Microsoft Teams. While we have the necessary permissions, the process of adding a tab to a chat works intermittently. Sometimes the tab is successfully added, but most of the time it fails, even though the app is installed correctly, with the following error: Failed to execute MsGraph backend request GetUserLicenseDetailsS2SRequest. Workload MsGraph_DirectoryServices. Request Url: https://graph.microsoft.com/v1.0/users/c0cfdd6b-d64d-42e1-8111-0881725f68ff/licenseDetails?$select=skuId,skuPartNumber,servicePlans, Request Method: GET, Response Status Code: NotFound, Response Headers: Strict-Transport-Security: max-age=31536000\r\nrequest-id: c86b5fbd-4224-486b-8f3e-8ad3f561a377\r\nclient-request-id: c86b5fbd-4224-486b-8f3e-8ad3f561a377\r\nx-ms-ags-diagnostic: {\"ServerInfo\":{\"DataCenter\":\"North Europe\",\"Slice\":\"E\",\"Ring\":\"4\",\"ScaleUnit\":\"011\",\"RoleInstance\":\"DB1PEPF00075073\"}}\r\nx-ms-resource-unit: 1\r\nDate: Tue, 22 Apr 2025 09:47:03 GMT\r\n, Reason Phrase: Not Found, Request ID 1F9FFBD00A5F489E9B7CABDCFB857858. Reproduction steps: Create an AAD App registration with required application permissions (to install apps and manage tabs in chats), ie at least the following: TeamsAppInstallation.ReadWriteAndConsentForChat.All TeamsTab.ReadWriteForChat.All Create a Teams application with a static tab with "groupChat" scope Install app in chat: POST https://graph.microsoft.com/v1.0/chats/:chatId/installedApps with body below Add (pin) tab to chat: POST https://graph.microsoft.com/v1.0/chats/:chatId/tabs with body below {"email address removed for privacy reasons" : "https://graph.microsoft.com/v1.0/appCatalogs/teamsApps/{{AppId}}"} Expected Behavior: Tabs should be consistently added to chats when using the Graph API, provided all necessary permissions and conditions are met. Current Behavior: The process of adding tabs to chats is unreliable. Sometimes the tab is added, but most times, the request fails without clear reasoning. All required permissions appear to be in place since it works occasionally. Note that this issue started to occur at the beginning of the month, around the 8th of April apparently, has anything changed around this date? Also note I also found traces of https://learn.microsoft.com/en-us/answers/questions/2259024/add-tab-to-chat-request-stopped-working-now-it-ret?source=docs in our logs but it is apparently resolved now.400Views2likes11CommentsFailed-Delete Message: Initiator (8:orgid:**) is not allowed to delete message
I am trying to delete a message inside Teams Channel using Graph API, the chat was generated using copilot agent. now i used this action to do the delete:- and this endpoint:- POST /teams/{teamsId}/channels/{channelId}/messages/{chatMessageId}/softDelete but we got this error message:- AclCheckFailed-Delete Message: Initiator (8:orgid:68******3ca) is not allowed to delete message Although the user who run the flow is teams owner + we have this setting enabled to allow owners to delete message:- any advice? Thanks87Views0likes1CommentUse AI to Automatically Translate Messages in Teams Chat
Microsoft Teams is widely used in international organizations, but currently, chat translation requires manual action for each message. Iād love to see an AI-powered feature that automatically translates messages in real time based on user preferences or system-detected language. Suggested Features: Auto-translate messages into the user's default language Option to view original text with one click Support for both 1:1 chats and group/channel conversations Allow users to opt-in/out or customize translation settings Smart detection of language context (e.g., if one person switches to Spanish, the system adapts)169Views0likes1CommentHow to Download Video Clip from Microsoft Teams Programmatically
Iām developing a bot app for Microsoft Teams, and part of its functionality involves handling videos recorded using the Teams widget(see screenshot attached). I am receiving a video clip link in the bot app's backend message. Where is this video file uploaded and how can I download the video clip using that link? I have attempted the SSO auth via Entra ID to fetch the auth token and attached it against the GET request to the video clip link as the bearer token. But still getting 401 errors? Need help and guidance in this matter. Thanks.291Views0likes6CommentsBot send individual chat to User
Hi Teams, I have Teams tab app and bot using TeamsActivityHandler (Typescript), and I have a logic is MS Bot will send private messages to user (It appears as a chat between bot and user) from Channel when I send a message with command Ex: In the Channel (team) have 5 members, when I send command like "MessageAllMembers", MS Bot will send individual message for each member (not Can you help me how to implement this logic or document about it? Thank so much1.5KViews0likes9Comments