Every agile team knows the “Support Hero” role, that one person designated to handle the interruptions of the day, bug reports, and urgent requests. In our team, we used a messy spreadsheet to track the rotation. People forgot whose turn it was, someone would be on leave, and the whole thing was a low-grade, daily friction point.
One day, a teammate had a brilliant idea: “What if we made it fun? What if we gamified it?”
He quickly prototyped an gacha bot using Power Automate that would randomly select the hero of the day. It was a huge hit. It turned a daily chore into a fun moment of team engagement. It was a perfect example of a small automation making a big impact on our culture.
Over time, as team members changed and responsibilities shifted, that original gacha bot was lost. The fun morning ritual disappeared, and we went back to the old, boring way. We all felt the difference.
Recently, I decided it was time to bring that spark back. I took the original, brilliant concept and decided to re-build it from the ground up as a robust, reusable, and shareable solution.
This post is a tribute to that original idea, and a detailed, step-by-step guide on how you can build a similar gacha bot for your own team. Let’s make our daily routines fun again.
How it Works: The Daily Gacha Ritual
Before we open the hood and look at the Power Automate engine, let me walk you through what my team actually experiences every morning at 10:00 AM.
It all starts with a message from the bot to the Microsoft Teams group of our team. The message says the following.
Hi, Louisa. You are the lucky Support Hero today.
This is the moment of suspense. Everyone sees the ping. Louisa, one of our teammates, is now in the spotlight.
However, what if Louisa is on vacation, sipping a drink on a beach in Bali? The bot is prepared. Immediately following the announcement, it posts a second message which is an interactive Adaptive Card:
Is our teammate mentioned above working today?
[] Yes.
[] No.
[] I volunteer!
[Submit Status]
This is where the team interaction happens.
- If Louisa is around , she proudly clicks ‘Yes.’ The card updates to say ‘Louisa has accepted the quest!’ and the ritual is over.
- If Louisa is on leave , anyone on the team can click ‘No.’ This immediately triggers the bot to run the gacha again, announcing a new hero.
- And my favourite part is that if someone else, for example Austin, is feeling particularly heroic that day, he can click ‘ I volunteer! ‘ This lets him steal the spotlight and take on the role, giving Louisa a day off. The card updates to say ‘A new hero has emerged! Austin has volunteered for the quest!'”
Within a minute, the daily chore is assigned, not through a boring spreadsheet, but through a fun, interactive, and slightly dramatic team ritual. It is a small thing, but it starts our day with a smile and a sense of shared fun.
Now that you have seen what it does, let’s build it.
Step 1: Define The Trigger
First, I setup a “Schedule cloud flow” so that every morning 10am, a message will be sent to the Teams on who is the lucky one.
Second, I will name the flow and define its starting date and time. As shown in the following screenshot, we will set the occurrence to be every day, starting from 1st Oct 2025, 00:00.
Please take note that in the step above, the “12am” is the beginning time, not the time when this job will be executed daily. So in the first node of the flow itself, I have to define at what time the gacha bot will start and at which timezone. Since our daily support needs to be done in the morning, we will make it run at 10am everyday, as shown in the screenshot below.
Step 2: Define Variables and Controls
After that, we add a new “ Initialize Variable ” node where we can define name of all the teammates.
We also need another variable to later store the response of the user on the adaptive card, as shown in the screenshot below.
Since this gacha only makes sense during weekday, so I need a “ Condition ” block to check whether the day is a weekday or not. If it is a weekend, the bot will not send any message.
As shown in the screenshot above, what I do is checking the value of dayOfWeek(convertFromUtc(utcNow(), 'Singapore Standard Time')).
Since there is nothing to be done when it is a weekend, so we will leave the “False” block as empty. For the “True” block, we will have a “ Do Until ” block because the gacha bot needs to keep on selecting a name until someone clicks “Yes” or “Volunteer”. Hence, as shown in the screenshot below, the loop will loop until responseChoice is not “No”.
Step 3: Inside the Loop
There are three important “ Compose ” data operations.
-
Generate Random Index : To generate a random number from 0 to the number of the team members.
rand(0, length(variables('teamMembers'))) -
Select Random Teammate Object : The random number is used to pick the hero from the array.
variables('teamMembers')[int(outputs('Compose:_Generate_Random_Index'))] -
Get Name of Hero : Get the name of the person from the array.
outputs('Compose:_Select_Random_Teammate_Object')['name']
After the three data operations are added, the flow now looks as shown below.
According the our designed workflow, after a hero is selected, we can send a message with the “ Post message in a chat or channel ” action to inform the team who is being selected by the gacha bot.
Next we need to post an adaptive card to Microsoft Teams and wait for a response. In our case, since the adaptive card is posted to group chat, we need to put an entire JSON below to the Message field.
{
"type": "AdaptiveCard",
"$schema": "http://adaptivecards.io/schemas/adaptive-card.json",
"version": "1.4",
"body": [
{
"type": "TextBlock",
"text": "Daily Check-In",
"wrap": true,
"size": "Large",
"weight": "Bolder"
},
{
"type": "TextBlock",
"text": "Please pick an option accordingly.",
"wrap": true
},
{
"type": "Input.ChoiceSet",
"id": "userChoice",
"style": "expanded",
"isMultiSelect": false,
"label": "Is our teammate mentioned above working today?",
"choices": [
{
"title": "Yes.",
"value": "Yes"
},
{
"title": "No.",
"value": "No"
},
{
"title": "I volunteer!",
"value": "Volunteer"
}
]
}
],
"actions": [
{
"type": "Action.Submit",
"title": "Submit Status"
}
]
}
In short, the “ Post adaptive card and wait for a response ” action will be setup as shown in the following screenshot.
Step 4: Handle the User’s Response
Right after the adaptive card, I setup a “Switch” control to handle the user’s response.
If the response is “Yes”, there will be a confirmation sent to the Microsoft Teams group chat. If the response is “Volunteer”, before a confirmation message is sent, the bot needs to know who responds so that it can indicate the volunteer’s name. To do so, I use a “Get user profile (V2)” action with body/responder/userPrincipalName as the UPN, as shown in the screenshot below.
The Office 365 Users node will give us the friendly display name of the person who volunteers, as shown in the screenshot below.
Your Turn
So, what have we really built here? On the surface, it is just a simple Power Automate flow. However, the real product is not the bot. Instead, it is the daily moment of shared fun. We did not just automate a chore but we engineered a small spark of joy and human connection into our daily routine. We used technology to solve a human problem, not just a technical one.
Now, it is your turn.
Your mission, should you choose to accept it, is to find the single most boring, repetitive chore that your own team has to deal with. Find that small, grey corner of the life of your team, and ask yourself: “How can I make this fun?”
Together, we learn better.














Top comments (0)