| page_type | sample | ||||
|---|---|---|---|---|---|
| description | Demonstrating on how to implement sequential flow, user specific view and upto date adaptive cards in bot. | ||||
| products |
|
||||
| languages |
|
||||
| extensions |
|
||||
| urlFragment | officedev-microsoft-teams-samples-bot-sequential-flow-adaptive-cards-csharp |
This sample illustrates sequential workflow, user specific views and upto date adaptive cards bot and the list of incident created can be seen in messaging extension and can share a specific incident to the chat/team.
Please find below demo manifest which is deployed on Microsoft Azure and you can try it yourself by uploading the app manifest (.zip file link below) to your teams and/or as a personal app. (Sideloading must be enabled for your tenant, see steps here).
Sequential workflow adaptive cards: Manifest
- Microsoft Teams is installed and you have an account
- .NET Core SDK version 6.0
- dev tunnel or ngrok latest version or equivalent tunnelling solution
-
Register a new application in the Microsoft Entra ID – App Registrations portal.
-
Setup for Bot
- Register a Microsoft Entra ID aap registration in Azure portal.
- Also, register a bot with Azure Bot Service, following the instructions here.
- Ensure that you've enabled the Teams Channel
- While registering the bot, use
https://<your_tunnel_domain>/api/messagesas the messaging endpoint.
NOTE: When you create your app registration, you will create an App ID and App password - make sure you keep these for later.
-
Setup NGROK
-
Run ngrok - point to port 3978
ngrok http 3978 --host-header="localhost:3978"Alternatively, you can also use the
dev tunnels. Please follow Create and host a dev tunnel and host the tunnel with anonymous user access command as shown below:devtunnel host -p 3978 --allow-anonymous
- Setup for code
-
Clone the repository
git clone https://github.com/OfficeDev/Microsoft-Teams-Samples.git
-
Modify the
/appsettings.jsonand fill in the following details:{{YOUR-MICROSOFT-APP-ID}}- Generated from Step 1 is the application app id{{YOUR-MICROSOFT-APP-SECRET}}- Generated from Step 1, also referred to as Client secret
-
If you are using Visual Studio
-
Launch Visual Studio
-
File -> Open -> Project/Solution
-
Navigate to
samples/bot-sequential-flow-adaptive-cards/csharp/folder -
Select
SequentialUserSpecificFlow.csprojfile -
Run your app, either from Visual Studio with
F5or usingdotnet runin the appropriate folder.
- Setup Manifest for Teams
-
This step is specific to Teams.
- Edit the
manifest.jsoncontained in the ./Manifest folder to replace your Microsoft App Id (that was created when you registered your app registration earlier) everywhere you see the place holder string{{Microsoft-App-Id}}(depending on the scenario the Microsoft App Id may occur multiple times in themanifest.json) - Edit the
manifest.jsonforvalidDomainsand replace{{domain-name}}with base Url of your domain. E.g. if you are using ngrok it would behttps://1234.ngrok-free.appthen your domain-name will be1234.ngrok-free.appand if you are using dev tunnels then your domain will be like:12345.devtunnels.ms. - Zip up the contents of the
Manifestfolder to create amanifest.zip(Make sure that zip file does not contains any subfolder otherwise you will get error while uploading your .zip package)
- Edit the
-
Upload the manifest.zip to Teams (in the Apps view click "Upload a custom app")
- Go to Microsoft Teams. From the lower left corner, select Apps
- From the lower left corner, choose Upload a custom App
- Go to your project directory, the ./AppManifest folder, select the zip folder, and choose Open.
- Select Add in the pop-up dialog box. Your app is uploaded to Teams.
Note: If you are facing any issue in your app, please uncomment this line and put your debugger for local debug.
sequenceDiagram
participant Teams User B
participant Teams User A
participant Teams Client
Teams User A->>+Teams Client: Enters create incident bot commands
Sample App->>+Teams Client: loads card with option
Teams User A->>+Teams Client: Enters required details and assigns to user B
Sample App-->>Teams Client: Posts the incidet card with auto-refresh for user A and user B
Teams Client->>Teams User A: loads incident card with loading indicator
Teams Client->>Sample App: Automatically invokes refresh action
Sample App-->>Teams User A: Responds with Updated AC for the user A
Teams User B->>Teams Client: User opens the chat
Teams Client-->>Teams User B: Loads the incident base card
Teams Client->>Sample App: Automatically invokes refresh action
Sample App-->>Teams User B: Responds with card for user B with option to approve/reject
sequenceDiagram
participant Teams User B
participant Teams User A
participant Teams Client
Teams User A->>+Teams Client: Clicks on Incidents ME action in a group chat
opt App not installed flow
Teams Client-->>Teams User A: App install dialog
Teams User A->>Teams Client: Installs app
end
Teams Client->>+Sample App: Launches Task Module
Sample App-->>-Teams Client: Loads existing incidents created using Bot
Teams User A->>Teams Client: Selects incident to share in chat
Teams Client->>Sample App: Invoke action callback composeExtension/submitAction
Sample App-->>Teams Client: Posts Base card with auto-refresh for user A and user B
Teams Client->>Teams User A: loads incident card with loading indicator
Teams Client->>Sample App: Automatically invokes refresh action
Sample App-->>Teams User A: Responds with Updated AC for the user A
Teams User B->>Teams Client: User opens the chat
Teams Client-->>Teams User B: Loads the incident base card
Teams Client->>Sample App: Automatically invokes refresh action
Sample App-->>Teams User B: Responds with card for user B with option to approve/reject
- In Teams, Once the app is successfully installed in a group chat, ping the bot by @mentioning it. Bot will reply with a card showing that the person has initiated the incident.
- Using refresh activity only the person who has initiated will be able to proceed further by entering the details of the incident and assign it to a person from the group chat, while others in the group chat will still be able to see only the initiated card.
- User who has initiated the incident will be able to enter the details using the series of cards in a sequential flow and submit it for the further approval/rejection process.
- Once the details are submitted and assigned to a person from the group chat, it will send an updated card to the chat with all the entered details.
- Now, only the person assigned to will be able to either approve or reject it.
- After the approval/rejection of the card, the final updated card will be sent to the group chat.
-
On selecting app from messaging extension,it checks whether bot is installed in chat/team. If not installed, user will get a option for justInTimeInstallation card.
-
After successful installation, list of all incident will be available in messaging extension.
-
User can select any incident from the list and can share to that chat/team.











