Skip to content
JScheper.com
JScheper.com

BizApps, Powerplatform and AI

  • Home
  • Blog
  • Contact
JScheper.com

BizApps, Powerplatform and AI

bring johan to life in Copilot Studio

Bringing AI Agent Johan in Copilot Studio to life🤖

Posted on June 5, 2026June 5, 2026 By Jeroen Scheper

The data is done. The model is trained. Now it is time to bring AI Agent Johan in Copilot Studio to life.

In the previous posts I covered why the 2024 model was limited and how I rebuilt the data layer from scratch with 7,666 training rows across 182 nations. Then I showed how AI Builder was used to train the prediction model on that dataset. Both posts were about building the engine in the background. This one is about putting the steering wheel on and let Johan predict ⚽. This is the post where Johan stops being a spreadsheet and a model and becomes an actual agent you can talk to.

What we are building

A user opens Copilot Studio, asks AI Agent Johan a question about an upcoming Netherlands match, and gets back a structured prediction including the predicted result, the confidence score, a narrative summary that explains why Johan thinks what he thinks and to conclude a random famous quote from the men himself.

To make that all happen, four components need to work together:

  • Copilot Studio – the conversational interface and topic logic
  • Power Automate – the flow that calls the AI Builder model and formats the output
  • AI Prompt – the prompt that allows Johan to generate a summary of his expectation of the game
  • Dataverse – the memory that allows to store team stats and famous quotes from Johan

Step 1: Setting up AI Agent Johan in Copilot Studio

The first thing to do in Copilot Studio is create a new agent. I named it Johan and gave it a short description to set the scope: a prediction agent for the FIFA World Cup 2026 focused on the Netherlands 🐯.

The Instruction is important. This is where you determine how Johan responds, what tone he uses, and what he knows about himself. I kept the system prompt focused:

You are AI Agent Johan, a FIFA World Cup 2026 prediction agent named after Johan Cruyff, the greatest Dutch footballer of all time. You predict the outcome of Netherlands matches using an AI Builder prediction model trained on historical international tournament data. You speak with confidence but acknowledge uncertainty where it exists. You always provide a prediction, a confidence score, and a brief explanation of the key factors behind your prediction.

AI Agent Johan in Copilot Studio

Step 2: Creating the prediction topic called Predict Match

The first that AI Agent Johan in Copilot Studio needs is a Topic. This the logic that handles a particular type of conversation. For Johan, the primary topic is the prediction request so when a user asks something like “what does Johan predict for the Netherlands?”, this topic takes over.

In our scenario for Johan, there are four parts of the topic that I would like to discuss:

  • Trigger
  • Topic
  • Entities
  • Adaptive Card

Trigger phrases
I set up several trigger phrases so Johan recognises when a prediction is being requested:

  • predict the match
  • how will Netherlands perform
  • Expectation of the Netherlands
  • Predict
  • Give me a prediction

Copilot Studio’s natural language matching means you do not need to list every possible phrasing so a handful of representative triggers is enough. In my scenario I have also disabled all Custom and System topics to make sure that are not triggering.

Entities
Before AI Agent Johan can predict anything, he needs to know the opponent and in what stage of the tournament the game is. I set up two input variables that the topic collects through conversation:

  • Opponent — the team the Netherlands are playing
  • Tournament Stage — which stage of the tournament (Group / R32 / R16 / QF / SF / Final)

These are asked as simple questions. The quesion will try to identify the Identify. I created to entities, WorldCupTeam and TournamentStage and I created these via Agents > Settings > Entities. For each of the countries I have also added Synonyms so you do not rely only on the exact country name. As you can see below, for example Japan are also called or known as:

  • Samurai Blue
  • Nippon Daihyō

For the Tournament stage I have selected the Select options for user to match the list so the user can just select one instead of typing.

Calling the Power Automate flow
Once both variables are collected, the topic calls the Power Automate flow as an action, passes the following parameters as the input:

  • Opponent name
  • Tournament stage
  • HomeAway Neutral

At the moment this last parameter is “hardcoded” since I am prediction the Netherland games only for now.

The details of the Power Automate Flow will be discussed later in this article.

The Power Automate Flow is receiving four parameters back that will be used by AI Agent Johan in Copilot Studio again.

  • Result, either Won, Draw or Lost
  • Confidence score
  • Game Summary
  • Famous Quote

Adaptive Card
The adaptive card will be used by AI Agent Johan in Copilot Studio to share all of that information in a nice way back to the user. The Adaptive Card is what I have added and updated the JSON with some help of AI to the below.

{
  type: "AdaptiveCard",
  '$schema': "https://adaptivecards.io/schemas/adaptive-card.json",
  version: "1.5",
  body: [
    {
      type: "Container",
      style: "accent",
      bleed: true,
      items: [
        {
          type: "TextBlock",
          text: "🤖 AI Agent Johan — Prediction result",
          weight: "Bolder",
          size: "Medium",
          color: "Light",
          wrap: true
        }
      ]
    },
    {
      type: "ColumnSet",
      spacing: "Medium",
      columns: [
        {
          type: "Column",
          width: "stretch",
          style: "good",
          items: [
            {
              type: "TextBlock",
              text: "🏆",
              size: "ExtraLarge",
              horizontalAlignment: "Center",
              spacing: "Small"
            },
            {
              type: "TextBlock",
              text: "RESULT",
              size: "Small",
              weight: "Bolder",
              horizontalAlignment: "Center",
              color: "Good",
              isSubtle: true,
              spacing: "None"
            },
            {
              type: "TextBlock",
              text: Topic.AIPredictedResult,
              size: "Large",
              weight: "Bolder",
              horizontalAlignment: "Center",
              color: "Good",
              spacing: "None"
            }
          ]
        },
        {
          type: "Column",
          width: "stretch",
          style: "emphasis",
          items: [
            {
              type: "TextBlock",
              text: "📊",
              size: "ExtraLarge",
              horizontalAlignment: "Center",
              spacing: "Small"
            },
            {
              type: "TextBlock",
              text: "CONFIDENCE",
              size: "Small",
              weight: "Bolder",
              horizontalAlignment: "Center",
              color: "Accent",
              isSubtle: true,
              spacing: "None"
            },
            {
              type: "TextBlock",
              text: Topic.AIConfidence,
              size: "Large",
              weight: "Bolder",
              horizontalAlignment: "Center",
              color: "Accent",
              spacing: "None"
            }
          ]
        }
      ]
    },
    {
      type: "Container",
      style: "emphasis",
      spacing: "Medium",
      items: [
        {
          type: "TextBlock",
          text: "📋 Summary",
          weight: "Bolder",
          size: "Small",
          isSubtle: true
        },
        {
          type: "TextBlock",
          text: Topic.AIGameSummary,
          wrap: true,
          spacing: "Small"
        }
      ]
    },
    {
      type: "Container",
      style: "default",
      spacing: "Medium",
      items: [
        {
          type: "ColumnSet",
          columns: [
            {
              type: "Column",
              width: "auto",
              items: [
                {
                  type: "TextBlock",
                  text: "⚽",
                  size: "ExtraLarge"
                }
              ]
            },
            {
              type: "Column",
              width: "stretch",
              items: [
                {
                  type: "TextBlock",
                  text: "Johan says..",
                  size: "Small",
                  weight: "Bolder",
                  isSubtle: true
                },
                {
                  type: "TextBlock",
                  text: Topic.AIFamousQuote,
                  wrap: true,
                  isSubtle: true,
                  italic: true,
                  spacing: "None"
                }
              ]
            }
          ]
        }
      ]
    }
  ]
}

Step 3: The Power Automate flow

This is where the actual prediction happens. The flow is triggered by the by AI Agent Johan in Copilot Studio action and does three things:

Look up the current form data The flow queries the Dataverse Teams table for both the Netherlands and the opponent. This retrieves the current values for goals scored last 5, goals conceded last 5, win streak, current FIFA ranking. These are the same columns the AI Builder model was trained on, and they need to reflect the current state going into the tournament — not the historical averages from the training data.

For the World Cup predictions, I updated the Teams table manually before the tournament started with the latest form data for all teams. For the Netherlands this meant updating the stats based on their most recent five official international games before the tournament. Same for every opponent. Later I hope to enhance AI Agent Johan in Copilot Studio to predict any match so all teams need to be updated.

Call the AI Builder prediction model With all the input columns populated, the flow calls the AI Builder custom prediction model. The inputs passed are:

InputValue
OpponentTeam name from variable
Home / Away / NeutralNeutral (World Cup matches in USA/Mexico/Canada)
Tournament stageFrom variable (Group / R32 / R16 / QF / SF / Final)
FIFA ranking differenceNetherlands ranking minus opponent ranking
FIFA ranking TeamFrom Teams table (Netherlands)
Goals scored last 5From Teams table (Netherlands)
Goals conceded last 5From Teams table (Netherlands)
Win streakFrom Teams table (Netherlands)
Opponent goals scored last 5From Teams table (opponent)
Opponent goals conceded last 5From Teams table (opponent)
Opponent win streakFrom Teams table (opponent)
Opponent FIFA rankingFrom Teams table (opponent)

The model returns two values: the predicted result (Win / Draw / Loss) and the confidence scores.

The Run a prompt action is used by Johan to write an match preview article with the information from the custom AI Prediction model. Below you can see the prompt that I configured for Johan to also return.

The last section of the Power Automate Flow is to select a random quote from the famous Johan himself. This is a list of 50 of them and they are stored in Dataverse.

When you play a match, it is statistically proven that players actually have the ball three minutes on average. So the most important thing is: what do you do during those 87 minutes when you do not have the ball?

The full architecture

Putting all four posts together, with AI Agent Johan in Copilot Studio being the last one, the complete setup for AI Agent Johan 🤖 looks like this:

LayerTechnologyRole
DataExcel / KaggleSource data — 7,666 historical match rows, 182 nations
StorageDataverseTeams table
Historical Matches table
Quotes Johan table
PredictionAI BuilderCustom prediction model — Win / Draw / Loss with confidence score
OrchestrationPower AutomateLooks up form data, calls model, Get famous quote from Johan, formats output
InterfaceCopilot StudioConversational agent, topic logic, generative narrative

Each layer does one job and hands off to the next. Johan’s brain is in AI Builder. His memory is in Dataverse. His voice is in Copilot Studio.

What is coming next

From here, it is all about the actual tournament. In the next posts you will see AI Agent Johan in action. The Netherlands open their World Cup campaign soon against Japan, and Johan will have a prediction ready the day before every group stage match.

Full schedule of the World Cup tournament you can find on the FIFA website.

Copilot Studio Agents AI Builder AI Prompting Artificial Intelligence Power Automate AI Agent JohanAI Prediction ModelKNVBOns OranjeWorld Cup 2026

Post navigation

Previous post
Next post

Related Posts

Agents AI Agent Johan is on fire

AI Agent Johan is on fire: Netherlands vs. Tunisia — can he make it two in a row?

Posted on June 25, 2026June 25, 2026

After the 5-1 demolition of Sweden, AI Agent Johan is on fire 🔥. He got his revenge after the Japan draw, and now it is time for the final group stage game: Netherlands 🐯 vs. Tunisia. Can Johan close out the group stage with a perfect prediction record? This blog…

Read More
AI Builder Confidence of AI grows

Confidence of AI grows, Dutch Team will make it to the Semifinal

Posted on July 5, 2024July 17, 2024

The Quarterfinals are about to start, the Netherlands will play tomorrow against Turkey. After predicting the game against Romania correctly, the confidence of AI grows. Will it be right again is the big question. When you look at the history of this match, it was always very close. Please find…

Read More
AI Builder prioritize seasonal sales using ai

Prioritize seasonal sales using AI

Posted on January 22, 2025January 21, 2025

In the past, I wrote about the UEFA Euro soccer championship and used the AI Builder prediction model to predict how well the Dutch team would perform (URL to post). That made me wonder if I could find a use case to apply a custom prediction model to one of…

Read More

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

ABOUT ME

  • LinkedIn
  • Mail
  • GitHub
  • YouTube
"BizApps and PowerPlatform dude with a passion for AI, sitting relaxt in his black shirt on a bounty white beach with palm trees, a azure blue ocean in the background and enjoying a good coffee "

~GenAI - DALL.E 3 and GPT 3.5

Subscribe

Please wait...

Thank you for subscribing!

Search

Categories

  • Agents
  • AI Builder
  • AI Prompting
  • Artificial Intelligence
  • Copilot
  • Copilot Studio
  • Customer Insights
  • Customer Service
  • Dataverse
  • Field Services
  • Generative AI
  • Model-driven Apps
  • Personal Development
  • Power Apps
  • Power Automate
  • Power BI
  • Power Platform
  • Reporting
  • Sales
  • SharePoint

Archive

  • July 2026
  • June 2026
  • May 2026
  • March 2026
  • February 2026
  • January 2026
  • December 2025
  • November 2025
  • October 2025
  • August 2025
  • July 2025
  • June 2025
  • May 2025
  • April 2025
  • March 2025
  • February 2025
  • January 2025
  • December 2024
  • November 2024
  • October 2024
  • September 2024
  • August 2024
  • July 2024
  • June 2024
  • May 2024
© 2024 - All rights reserved | Jeroen Scheper | Privacy Policy