Forum Widgets
Latest Discussions
CSS Properties being stripped from Teams Chat messages from Bot
Hi Team, We've noticed that certain CSS properties are no longer appearing in HTML messages when sent to Teams Chat. Previously, our bot styled messages using display and border properties, but now these properties are missing from the HTML when we inspect the page. Steps to Reproduce: Start the Echo bot from the sample templates (I used Teams Toolkit to deploy it to Teams or run it in the Test tool). In the TeamsBot.ts file, modify the onMessage function by replacing await context.sendActivity(...) with the following code. This example adds styling to an echo message. const a: Partial<Activity> = { text: `<span style="display: block; color: red; border-radius: 4px; padding: 4px; border: 1px solid red; ">Echoo:</span> <span style="display: block;">${txt}</span>`, textFormat: TextFormatTypes.Xml }; await context.sendActivity(a); Note: I also tried sending the HTML directly with context.sendActivity(...) without setting the textFormat property in the Activity, and observed the same result. Run the bot in the Test tool and Teams to compare behavior. Observed behavior: In the Test tool: All styles are applied as expected. In Teams: Only the color property is applied, while display, padding, and border properties are ignored (stripped out of the HTML). Here’s an example of the HTML output in Teams: <div dir="auto" id="content-1730973548675" aria-label="Echoo: test styles properties" class="fui-Primitive ___16zla5h f1oy3dpc fqtknz5 fyvcxda"> <span style="color: red;">Echoo:</span> <span>test styles properties</span> </div> Could you provide insights on whether this change is intended, and if there are any workarounds for preserving these CSS properties in Teams messages? Thank you!CedricZimmermannFeb 19, 2025Brass Contributor412Views11likes2CommentsAdaptive card do not render image on Teams Desktop
Hello Community, We are facing a challenge with the image rendering in our Adaptive cards only in the Teams Desktop application. All is working fine with the Teams on the Web, and when we test it in the designer. The images are stored in our SharePoint. Will this be the problem ? See bellow our json adaptive card, and some screenshots { "$schema": "http://adaptivecards.io/schemas/adaptive-card.json", "version": "1.3", "type": "AdaptiveCard", "body": [ { "type": "Container", "items": [ { "type": "ColumnSet", "columns": [ { "type": "Column", "width": "stretch", "items": [ { "type": "TextBlock", "text": "Request No. ", "wrap": true, "size": "Small", "isSubtle": true, "horizontalAlignment": "Right" } ], "backgroundImage": { "horizontalAlignment": "Right" }, "horizontalAlignment": "Right" }, { "type": "Column", "width": "auto", "items": [ { "type": "TextBlock", "text": "44", "wrap": true, "size": "Small", "isSubtle": true, "horizontalAlignment": "Right" } ], "horizontalAlignment": "Right" } ], "horizontalAlignment": "Right" }, { "type": "ColumnSet", "columns": [ { "type": "Column", "width": "stretch", "items": [ { "type": "TextBlock", "wrap": true, "text": " Urgent - New Support Request", "horizontalAlignment": "Center", "size": "ExtraLarge", "weight": "Bolder", "color": "Warning", "spacing": "None", "height": "stretch" } ] } ] } ] }, { "type": "Container", "items": [ { "type": "ColumnSet", "columns": [ { "type": "Column", "width": "auto", "items": [ { "type": "TextBlock", "text": "Requested by ", "wrap": true, "weight": "Bolder" } ], "verticalContentAlignment": "Center" }, { "type": "Column", "width": "auto", "items": [ { "type": "Image", "size": "Small", "style": "Person", "url": "data:image/png;base64" } ] }, { "type": "Column", "width": "stretch", "items": [ { "type": "TextBlock", "text": " Doe, John", "wrap": true } ], "verticalContentAlignment": "Center" } ] }, { "type": "ColumnSet", "columns": [ { "type": "Column", "width": "auto", "items": [ { "type": "TextBlock", "text": "Location", "wrap": true, "weight": "Bolder" }, { "type": "TextBlock", "text": "Urgent", "wrap": true, "weight": "Bolder", "color": "Accent" }, { "type": "TextBlock", "text": "Issue With", "wrap": true, "weight": "Bolder" } ] }, { "type": "Column", "width": "stretch", "items": [ { "type": "TextBlock", "text": "France", "wrap": true, "weight": "Bolder" }, { "type": "TextBlock", "text": "Yes", "wrap": true, "color": "Accent" }, { "type": "TextBlock", "text": "Office", "wrap": true } ] } ] }, { "type": "ColumnSet", "columns": [ { "type": "Column", "width": "auto", "items": [ { "type": "TextBlock", "text": "Description", "wrap": true, "weight": "Bolder" }, { "type": "TextBlock", "text": "This is my error please help me", "wrap": true } ] } ] } ], "separator": true }, { "type": "Container", "items": [ { "type": "ColumnSet", "columns": [ { "type": "Column", "width": "stretch", "items": [ { "type": "TextBlock", "text": "Attachements", "wrap": true, "isSubtle": true }, { "type": "ImageSet", "imageSize": "Large", "images": [ { "type": "Image", "url": "SharePointURL", "selectAction": { "type": "Action.OpenUrl", "url": "SharePointURL" } }, { "type": "Image", "url": "SharePointURL", "selectAction": { "type": "Action.OpenUrl", "url": "SharePointURL" } } ] } ] } ] } ] }, { "type": "ActionSet", "horizontalAlignment": "Left", "actions": [ { "type": "Action.ShowCard", "title": "Complete", "card": { "type": "AdaptiveCard", "body": [ { "type": "TextBlock", "text": "What was the error?", "wrap": true }, { "type": "Input.Text", "isMultiline": true, "id": "error" }, { "type": "TextBlock", "text": "What was the solution?", "wrap": true }, { "type": "Input.Text", "isMultiline": true, "id": "solution" } ], "actions": [ { "type": "Action.Submit", "title": "Send", "id": "send", "associatedInputs": "auto", "data": { "action": "complete", "request": "44", "link": "Link to the SharePoint List", "issuewith": "Office" } } ], "verticalContentAlignment": "Top" }, "id": "complete" }, { "type": "Action.Submit", "title": "Handle", "id": "handle", "data": { "action": "handle", "request": "44", "link": "Link to the SharePoint List", "issuewith": "Office" } }, { "type": "Action.Submit", "title": "Create a task", "id": "task", "associatedInputs": "auto", "data": { "action": "task", "request": "44", "link": "Link to the SharePoint List", "issuewith": "Office" } } ], "height": "stretch", "separator": true } ] } Thank you for you help.2.5KViews1like9CommentsHow to get teams channel message from reply of a message id in ms graph?
Hi, I'm currently using the Microsoft Graph API to develop an app. I use https://graph.microsoft.com/v1.0/search/query to search for messages. I receive the results, which include both the original message and reply message. I want to use the message ID to retrieve the detailed message using this API: /teams/{team-id}/channels/{channel-id}/messages/{message-id}. If the message is the main message, it returns the details. However, if it's a reply, it returns a 404 error. Does this mean I need to obtain the main message ID from the reply? Is there any API or practical way I can use to retrieve it? Thank you!bayusaurusFeb 17, 2025Copper Contributor76Views1like3CommentsSend a message to a user with tab app url
I built a tab app in teams, which include approval workflow feature. Then i need to send notification message to some users, for example approval notification, which include approval url that can navigate to the certain page with some parameters. How could i do this in teams?robert1203Feb 15, 2025Copper Contributor470Views0likes3CommentsScan a document or save a picture directly to a Teams folder
Is there a way to scan a document such as a receipt directly to a Teams folder from a phone or tablet? I tried using Office Lens, but my options are only OneDrive and OneNote. I am trying to make it easy for my employees to scan receipts into their respective Team folders, but can't seem to locate an easy one-click method. I get that I can scan to OneDrive, then upload, butSolvedTonyYoungFeb 15, 2025Copper Contributor30KViews0likes7CommentsAzure Bot working from local using teams toolkit, but not when hosted on AWS
Hi Everyone, I need help in debugging an issue I am facing while using the Azure bot on the teams channel. I have created a Teams Meeting bot using the botbuilder framework in python and tested it using the teams toolkit. It works fine using the toolkit. I also used an ngrok domain in the messaging endpoint in the configuration page of the bot and that works too. Now we took this bot logic and hosted it on AWS ECS. The api/messages endpoint is reachable through postman. But when the request comes from teams, our server just hangs and it becomes unreachable and eventually restarts. I have tried to add some logs and I am able to print the activity, auth header and the request body the teams sends to the API. I have ensured all the env variables are correct. Also, for the server to be reachable from the teams channel to AWS, we had to whitelist a few ips. Only then the server on AWS was reachable. Steps to reproduce the server restarts.: 1) I zip my manifest file and upload the custom app to a teams meeting. 2) When I add the app to the meeting, it counts as an event and teams calls the api/messages endpoint. I am able to see the logs for this event. 3) After I add the app, I open the custom app tab and the content comes up as expected. The issue starts after this step. 4) I start the meeting, teams sends an event (meetingstart) to the API and then the server just hangs. No logs are printed and then the server restarts and nothing is tracked. The bot in that meeting does not work anymore. Because when you start a meeting again, the server restarts. The same thing works fine on local and it checks for these teams events and performs the logic within that function. We are clueless on what's happening here as there are no logs either. Is there something we need to cross check when trying to host it on a server instead of running it on local using a teams toolkit.? The request gets sent to SETTINGS = BotFrameworkAdapterSettings(CONFIG.APP_ID, CONFIG.APP_PASSWORD) ADAPTER = BotFrameworkAdapter(SETTINGS) # Listen for incoming requests on /api/messages @app.post("/api/messages", response_model=None) async def messages(req: Request) -> Response: # Main bot message handler. if "application/json" in req.headers["Content-Type"]: body = await req.json() else: return Response(status_code=HTTPStatus.UNSUPPORTED_MEDIA_TYPE) activity = Activity().deserialize(body) auth_header = req.headers["Authorization"] if "Authorization" in req.headers else "" print(auth_header) response = await ADAPTER.process_activity(activity, auth_header, BOT.on_turn) if response: return JSONResponse(content=response.body, status_code=response.status) return Response(status_code=HTTPStatus.OK) It fails at line 15 I believe, as I have tried to comment the line to see if the restarts happen. It did not restart then. So the issue is clearly with line 15. Hoping for a reply from anyone. Thank you.ChaitanyaSai370Feb 14, 2025Copper Contributor517Views0likes4CommentsSeeking Best Practices for Performance Testing Bots in Microsoft Teams
Teams Meeting Bot This bot is automatically installed in all scheduled meetings across the organization. It interacts with the Microsoft Graph API via the 'api/messages' endpoint in the Bot Framework to retrieve meeting transcripts. These transcripts are then processed by an LLM model to generate a summarized version of the meeting. Chatbot This is a personal Teams chatbot built using the Bot Framework. It streams real-time responses from an LLM model based on user queries. We are planning a performance test for these bots. What would be the standard procedure to achieve this? Looking forward to your insights.35Views0likes2CommentsOutlook plugin: Updating manifest doesn't work, Update TenantAppDefinition failed
Hello, I raised this request to the official MS customer service already and they couldn't help. The problem is as follows: We are developing an Outlook Add-In using the 'new' JSON manifest way. So far, we deployed our plugin to the Azure BLOB storage destination as it's specified by Teams Toolkit. Also, we were able to register it in the MS Teams Admin Center. Now we wanted to make some changes to our icons registration in the manifest file and ran into an unknown exception. For testing, we reverted those changes and only increased the version number. However, the error message remained as-is, although the same manifest worked some time (maybe 1-2 weeks maybe) ago. There were no changes to the manifest file since then, except an increase in the version number. The manifest can be submitted without any issues if the "ribbons" part is completely removed. However, it passes all validations described in https://learn.microsoft.com/en-us/office/dev/add-ins/testing/troubleshoot-manifest . All icons match the specifications. The same happens if we submit it as a new app. This is the error message that we could intercept in the browser's DEV Tools when submitting the manifest in the appPackage to MS Teams Admin Center (manage existing app). Sensitive info was removed: { "error": { "code": "BadRequest", "message": "Update TenantAppDefinition failed, UserId: 'beefbeef-beef-beef-beef-beefbeefbeef', TenantId: 'beefbeef-beef-beef-beef-beefbeefbeef', Exception: 'Microsoft.SkypeSpaces.MiddleTier.Common.ServiceException: Failed to execute settings store request: https://emea.settings.teams.internal.office.com/v1.0/settings/teams/apps/beefbeef-beef-beef-beef-beefbeefbeef/definitionv2, StatusCode: 400, ReasonPhrase: Schema validation errors, X-MSEdge-Ref: beefbeef-beef-beef-beef-beefbeefbeef\r\n at Microsoft.SkypeSpaces.MiddleTier.BackendServices.SettingsStore.SettingsStore.ExecuteRequestAsync(HttpRequestMessage requestMessage, String requestName, String entityType, String facet, Boolean throwOn404) in C:\\a\\_work\\1\\s\\Source\\BackendServices\\BackendServices\\SettingsStore\\SettingsStore.cs:line 339\r\n at Microsoft.SkypeSpaces.MiddleTier.BackendServices.SettingsStore.SettingsStore.PutSettingAsync(String entityType, String entityId, String facet, String value, String ifMatch, String tenantIdForRegionLookup) in C:\\a\\_work\\1\\s\\Source\\BackendServices\\BackendServices\\SettingsStore\\SettingsStore.cs:line 146\r\n at Microsoft.SkypeSpaces.MiddleTier.BackendServices.SettingsStore.SettingsStore.PutSettingAsync(String entityType, String entityId, String facet, String value, String ifMatch) in C:\\a\\_work\\1\\s\\Source\\BackendServices\\BackendServices\\SettingsStore\\SettingsStore.cs:line 118\r\n at Microsoft.SkypeSpaces.MiddleTier.BackendServices.SettingsStore.SettingsStore.PutSettingAsync(String entityType, String entityId, String facet, String value) in C:\\a\\_work\\1\\s\\Source\\BackendServices\\BackendServices\\SettingsStore\\SettingsStore.cs:line 100\r\n at Microsoft.SkypeSpaces.MiddleTier.Provider.SettingsStore.RegionalSettingsStoreProvider.SetAppDefinitionAsync(String appId, AppDefinitionItem appDefinition) in C:\\a\\_work\\1\\s\\Source\\Provider\\Provider\\SettingsStore\\RegionalSettingsStoreProvider.cs:line 1910\r\n at Microsoft.Teams.MiddleTier.Apps.AppDefinitionsStore.Commands.CustomAppDefinitionWriter.<>c__DisplayClass10_0.<<UpdateAsync>b__0>d.MoveNext() in C:\\a\\_work\\1\\s\\Source\\Modules\\Apps\\MiddleTier.Apps\\AppDefinitionsStore\\Commands\\CustomAppDefinitionWriter.cs:line 103\r\n--- End of stack trace from previous location ---\r\n at Microsoft.SkypeSpaces.MiddleTier.Common.InstrumentedAsyncFunc`1.ExecuteAsync()\r\n at Microsoft.Teams.MiddleTier.Apps.AppDefinitionsStore.Commands.CustomAppDefinitionWriter.UpdateAsync(CustomAppDefinitionWriteContext context) in C:\\a\\_work\\1\\s\\Source\\Modules\\Apps\\MiddleTier.Apps\\AppDefinitionsStore\\Commands\\CustomAppDefinitionWriter.cs:line 113\r\n at Microsoft.Teams.MiddleTier.Apps.AppDefinitionsStore.Commands.CustomTenantAppDefinitionWriter.UpdateAsync(CustomAppDefinitionWriteContext context) in C:\\a\\_work\\1\\s\\Source\\Modules\\Apps\\MiddleTier.Apps\\AppDefinitionsStore\\Commands\\CustomTenantAppDefinitionWriter.cs:line 56\r\n at Microsoft.Teams.MiddleTier.Apps.Providers.AppsProviderTenant.UpdateTenantAppDefinitionAsync(AppDefinitionItem appDefinitionItem, ZipArchive appPackage) in C:\\a\\_work\\1\\s\\Source\\Modules\\Apps\\MiddleTier.Apps\\Providers\\AppsProviderTenant.cs:line 1733'Failed to execute settings store request: https://emea.settings.teams.internal.office.com/v1.0/settings/teams/apps/beefbeef-beef-beef-beef-beefbeefbeef/definitionv2, StatusCode: 400, ReasonPhrase: Schema validation errors, X-MSEdge-Ref: beefbeef-beef-beef-beef-beefbeefbeef", "innerError": { "code": "BadRequest", "message": "Update TenantAppDefinition failed, UserId: 'beefbeef-beef-beef-beef-beefbeefbeef', TenantId: 'beefbeef-beef-beef-beef-beefbeefbeef', Exception: 'Microsoft.SkypeSpaces.MiddleTier.Common.ServiceException: Failed to execute settings store request: https://emea.settings.teams.internal.office.com/v1.0/settings/teams/apps/beefbeef-beef-beef-beef-beefbeefbeef/definitionv2, StatusCode: 400, ReasonPhrase: Schema validation errors, X-MSEdge-Ref: beefbeef-beef-beef-beef-beefbeefbeef\r\n at Microsoft.SkypeSpaces.MiddleTier.BackendServices.SettingsStore.SettingsStore.ExecuteRequestAsync(HttpRequestMessage requestMessage, String requestName, String entityType, String facet, Boolean throwOn404) in C:\\a\\_work\\1\\s\\Source\\BackendServices\\BackendServices\\SettingsStore\\SettingsStore.cs:line 339\r\n at Microsoft.SkypeSpaces.MiddleTier.BackendServices.SettingsStore.SettingsStore.PutSettingAsync(String entityType, String entityId, String facet, String value, String ifMatch, String tenantIdForRegionLookup) in C:\\a\\_work\\1\\s\\Source\\BackendServices\\BackendServices\\SettingsStore\\SettingsStore.cs:line 146\r\n at Microsoft.SkypeSpaces.MiddleTier.BackendServices.SettingsStore.SettingsStore.PutSettingAsync(String entityType, String entityId, String facet, String value, String ifMatch) in C:\\a\\_work\\1\\s\\Source\\BackendServices\\BackendServices\\SettingsStore\\SettingsStore.cs:line 118\r\n at Microsoft.SkypeSpaces.MiddleTier.BackendServices.SettingsStore.SettingsStore.PutSettingAsync(String entityType, String entityId, String facet, String value) in C:\\a\\_work\\1\\s\\Source\\BackendServices\\BackendServices\\SettingsStore\\SettingsStore.cs:line 100\r\n at Microsoft.SkypeSpaces.MiddleTier.Provider.SettingsStore.RegionalSettingsStoreProvider.SetAppDefinitionAsync(String appId, AppDefinitionItem appDefinition) in C:\\a\\_work\\1\\s\\Source\\Provider\\Provider\\SettingsStore\\RegionalSettingsStoreProvider.cs:line 1910\r\n at Microsoft.Teams.MiddleTier.Apps.AppDefinitionsStore.Commands.CustomAppDefinitionWriter.<>c__DisplayClass10_0.<<UpdateAsync>b__0>d.MoveNext() in C:\\a\\_work\\1\\s\\Source\\Modules\\Apps\\MiddleTier.Apps\\AppDefinitionsStore\\Commands\\CustomAppDefinitionWriter.cs:line 103\r\n--- End of stack trace from previous location ---\r\n at Microsoft.SkypeSpaces.MiddleTier.Common.InstrumentedAsyncFunc`1.ExecuteAsync()\r\n at Microsoft.Teams.MiddleTier.Apps.AppDefinitionsStore.Commands.CustomAppDefinitionWriter.UpdateAsync(CustomAppDefinitionWriteContext context) in C:\\a\\_work\\1\\s\\Source\\Modules\\Apps\\MiddleTier.Apps\\AppDefinitionsStore\\Commands\\CustomAppDefinitionWriter.cs:line 113\r\n at Microsoft.Teams.MiddleTier.Apps.AppDefinitionsStore.Commands.CustomTenantAppDefinitionWriter.UpdateAsync(CustomAppDefinitionWriteContext context) in C:\\a\\_work\\1\\s\\Source\\Modules\\Apps\\MiddleTier.Apps\\AppDefinitionsStore\\Commands\\CustomTenantAppDefinitionWriter.cs:line 56\r\n at Microsoft.Teams.MiddleTier.Apps.Providers.AppsProviderTenant.UpdateTenantAppDefinitionAsync(AppDefinitionItem appDefinitionItem, ZipArchive appPackage) in C:\\a\\_work\\1\\s\\Source\\Modules\\Apps\\MiddleTier.Apps\\Providers\\AppsProviderTenant.cs:line 1733'Failed to execute settings store request: https://emea.settings.teams.internal.office.com/v1.0/settings/teams/apps/beefbeef-beef-beef-beef-beefbeefbeef/definitionv2, StatusCode: 400, ReasonPhrase: Schema validation errors, X-MSEdge-Ref: beefbeef-beef-beef-beef-beefbeefbeef", "details": [], "date": "2025-02-07T13:18:12", "request-id": "beefbeef-beef-beef-beef-beefbeefbeef", "client-request-id": "beefbeef-beef-beef-beef-beefbeefbeef" } } } This is our manifest (also with sensitive info being removed): { "$schema": "https://developer.microsoft.com/json-schemas/teams/v1.17/MicrosoftTeams.schema.json", "id": "beefbeef-beef-beef-beef-beefbeefbeef", "manifestVersion": "1.17", "version": "1.0.6", "name": { "short": "Outlook Addin name (dev)", "full": "Outlook Addin name" }, "description": { "short": "Outlook Addin name (dev)", "full": "Outlook Addin name" }, "developer": { "name": "OurCompany", "websiteUrl": "https://www.OurCompany.de", "privacyUrl": "https://www.OurCompany.de/privacy", "termsOfUseUrl": "https://www.OurCompany.de/servicesagreement" }, "icons": { "outline": "assets/logoOutlined.png", "color": "assets/logo.png" }, "accentColor": "#230201", "localizationInfo": { "defaultLanguageTag": "en-us", "additionalLanguages": [] }, "webApplicationInfo": { "id": "beefbeef-beef-beef-beef-beefbeefbeef", "resource": "api://CENSORED/beefbeef-beef-beef-beef-beefbeefbeef" }, "authorization": { "permissions": { "resourceSpecific": [ { "name": "MailboxItem.Read.User", "type": "Delegated" }, { "name": "Group.Read.All", "type": "Delegated" }, { "name": "Channel.ReadBasic.All", "type": "Delegated" }, { "name": "Sites.ReadWrite.All", "type": "Delegated" }, { "name": "Tasks.ReadWrite.All", "type": "Delegated" }, { "name": "Tasks.ReadWrite.Shared", "type": "Delegated" }, { "name": "Group-Conversation.ReadWrite.All", "type": "Delegated" } ] } }, "validDomains": ["OurCompany.de"], "extensions": [ { "requirements": { "scopes": ["mail"], "capabilities": [ { "name": "Mailbox", "minVersion": "1.3" } ] }, "runtimes": [ { "requirements": { "capabilities": [ { "name": "Mailbox", "minVersion": "1.3" } ] }, "id": "TaskPaneRuntime", "type": "general", "code": { "page": "https://censored.web.core.windows.net/taskpane.html" }, "lifetime": "short", "actions": [ { "id": "TaskPaneRuntimeShow", "type": "openPage", "pinnable": false, "view": "dashboard" } ] } ], "ribbons": [ { "contexts": ["mailRead"], "tabs": [ { "builtInTabId": "TabDefault", "groups": [ { "id": "msgReadGroup", "label": "Outlook Addin name", "icons": [ { "size": 16, "url": "https://censored.web.core.windows.net/assets/icon-16.png" }, { "size": 32, "url": "https://censored.web.core.windows.net/assets/icon-32.png" }, { "size": 80, "url": "https://censored.web.core.windows.net/assets/icon-80.png" } ], "controls": [ { "id": "msgReadOpenPaneButton", "type": "button", "label": "Outlook Addin name (dev)", "icons": [ { "size": 16, "url": "https://censored.web.core.windows.net/assets/icon-16.png" }, { "size": 32, "url": "https://censored.web.core.windows.net/assets/icon-32.png" }, { "size": 80, "url": "https://censored.web.core.windows.net/assets/icon-80.png" } ], "supertip": { "title": "Show Outlook Addin name", "description": "Opens a pane displaying Outlook Addin name." }, "actionId": "TaskPaneRuntimeShow" } ] } ] } ] } ] } ] } Is there anything we can do to further investigate the issue?Anonymous42Feb 13, 2025Copper Contributor153Views0likes7CommentsHow to create sub-channels under channels already created?
Looking for some options on how to create sub-channels under existing channels. Currently channels can only be created under the Team but when trying to add a sub-channel to a specific channel this is possible.AHBG-31Feb 12, 2025Copper Contributor79KViews1like5Comments
Resources
Tags
- microsoft teams1,675 Topics
- developer1,301 Topics
- Meetings228 Topics
- Chat215 Topics
- Administrator135 Topics
- Settings103 Topics
- Calling101 Topics
- files64 Topics
- teams53 Topics
- devices52 Topics