Skip to content

Latest commit

 

History

History
 
 
Error in user YAML: (<unknown>): mapping values are not allowed in this context at line 2 column 58
---
page_type: sample
description: Microsoft Teams meeting extensibility sample: token passing
products:
- office-teams
- office
- office-365
languages:
- csharp
extensions:
contentType: samples
createdDate: "07-07-2021 13:38:27"
---

Meeting Token Generator

The Meeting Token Generator app is a sample Microsoft Teams app that extends meetings in Teams. Through this app, meeting participants can request a "token", which is generated sequentially so that each participant has a fair opportunity to interact. This can be useful in situations like scrum meetings, Q&A sessions, etc.

Key features

  • Display the current token that is being serviced in the meeting
  • Display the user list sorted by the token number in ascending order
  • Generate a token for the user upon request
  • Display the current user's token number
  • Mark a token as done by the user
  • Skip the current token for the organizer of the meeting

User interactions

  • Token - Requests a token for the user
  • Done - Acknowledges that the user is done with the token
  • Skip - Skips the current user and moves on to the next person in line for a token. This button is only shown to users with the meeting Organizer role.

Prerequisites

Tools

  • .NET Core SDK version 3.1

    # determine dotnet version
    dotnet --version
  • Nodejs version 10.21.0+ (use the LTS version)

    # determine dotnet version
    node --version
  • Ngrok (Only for devbox testing) Latest (any other tunneling software can also be used)

    # run ngrok locally
    ngrok http -host-header=localhost 3978

Technologies

We assume working knowledge of the following technologies to gain full understanding of the app

The app uses the Teams extensibility features described on the following pages:

Running the sample

Step 1: Register Azure AD applications

  1. Start an ngrok session as indicated above. Note the ngrok domain, as you will use this in the registration steps below, where it will be the value of WebAppDomain.

  2. Register your bot using bot channel registration in Azure AD portal, following the instructions here.

  3. Update the AAD app registration for tab SSO, following the instructions here. The "fully qualified domain name" in the instructions will be your ngrok domain.

  4. Set up the appsettings.json with the following keys:

    • "MicrosoftAppId": Application (client) ID of the bot's Azure AD application
    • "MicrosoftAppPassword": client secret of the bot's Azure AD application
    • "AzureAd"."TenantId": Tenant ID of the tenant where the app will be used. Note that the sample will only work in this tenant.
    • "AzureAd"."ApplicationId ": Set to the same value as MicrosoftAppId above.
    • "ContentBubbleUrl ": Content bubble iframe url (default. https://[WebAppDomain]/contentBubble.html). Remember that [WebAppDomain] will be your ngrok domain, so the content bubble URL will be similar to https://f631****.ngrok.io/contentBubble.html.
  5. Register a bot with Azure Bot Service, following the instructions [here](https://docs.microsoft.com/en-us/azure/bot-service/ bot-service-quickstart-registration?view=azure-bot-service-3.0).

  • Ensure that you've enabled the Teams Channel
  • While registering the bot, use https://<your_ngrok_url>/api/messages as the messaging endpoint.

    NOTE: When you create your bot you will create an App ID and App password - make sure you keep these for later.

Step 2: Add the following entry to the manifest.json (schema reference)

  1. Set manifestVersion to "devPreview"
  2. Add your bot configuration, with the app id of the bot generated from the previous steps
  3. Fill-in the following webApplicationInfo section, using MicrosoftAppId and WebAppDomain values from the previous section.
    "webApplicationInfo": {  
      "id": "[MicrosoftAppId]",  
      "resource": "api://[WebAppDomainName]/[MicrosoftAppId]"  
    }

Step 3: Build the client app

  1. Navigate to the App folder in a terminal
  2. Run npm install
  3. Run npm run build to build the app.

This generates the dist folder inside the app where the assets will generated/copied. The server will serve the static files from this location.

Step 4: Build and run the service

You can build and run the project from the command line or an IDE:

A) From a command line:

# run the server
cd TokenApp
dotnet run

B) From an IDE:

  1. Launch Visual Studio
  2. File > Open > Project/Solution
  3. Navigate to the TokenApp folder
  4. Select TokenApp.csproj file
  5. Press F5 to run the project

Step 5: Enable developer preview in your desktop Teams client

Follow these instructions to enable developer preview. Note that Developer preview mode must be enabled on each Teams client app or browser.

In-meeting tabs are only available in the Teams desktop client. They will not be visible when you run Teams in a web browser.

Step 6: Sideload the app in a Teams desktop client

  1. Create a .zip using the below files, which are in the Resources/Manifest folder.
  • manifest.json
  • icon-outline.png
  • icon-color.png
  1. Create a meeting with few test participants, ideally with a mix of Presenters and Attendees.
  2. Once meeting is created, go to the meeting details page and click on the "Add tab" (+) button.
  3. In the pop-up that opens, click on "Manage apps".
  4. Click on "Upload a custom app" and upload the .zip file that was created in the previous steps. This adds the app to the meeting.
  5. Click on the "Add tab" button again. Now in the app selection page, the app should be visible as a "Meeting optimized tab".
  6. Select the Meeting Token app.
  7. Now the app will be visible in the meeting chat.
  8. Start the meeting and the icon should be visible in the meeting control bar.

Troubleshooting

The sample app uses an in-memory store to maintain token information and the service URL for the tenant. If you restart the project, you must run the following command to recapture the service URL: @[BotName] reset

In your own projects, please use a durable storage mechanism to store the service URL for the tenant.

Further reading

Contributing

This project welcomes contributions and suggestions. Most contributions require you to agree to a Contributor License Agreement (CLA) declaring that you have the right to, and actually do, grant us the rights to use your contribution. For details, visit https://cla.opensource.microsoft.com.

When you submit a pull request, a CLA bot will automatically determine whether you need to provide a CLA and decorate the PR appropriately (e.g., status check, comment). Simply follow the instructions provided by the bot. You will only need to do this once across all repos using our CLA.

This project has adopted the Microsoft Open Source Code of Conduct. For more information see the Code of Conduct FAQ or contact [email protected] with any additional questions or comments.