diff --git a/.github/Generate-SampleList.ps1 b/.github/Generate-SampleList.ps1 index a77a46490..b3fb21390 100644 --- a/.github/Generate-SampleList.ps1 +++ b/.github/Generate-SampleList.ps1 @@ -30,7 +30,7 @@ param ( ) begin { - $sourceFile = "$(Get-Location)\..\README.md" + $sourceFile = Join-Path -Path (Get-Location) -ChildPath ".." | Join-Path -ChildPath "README.md" # ------------------------------------------------------------------------------ @@ -65,7 +65,7 @@ begin { exit } - $BaseDir = "$(Get-Location)\.." + $BaseDir = Join-Path -Path (Get-Location) -ChildPath ".." $assetsFolder = "assets" $samplesFolderName = "samples" $content = Get-Content -Path $sourceFile -Raw @@ -203,7 +203,7 @@ process { '@ - $sampleFiles = Get-ChildItem -Path "$(Get-Location)\Samples" -Filter "sample.json" -Recurse + $sampleFiles = Get-ChildItem -Path (Join-Path -Path (Get-Location) -ChildPath "Samples") -Filter "sample.json" -Recurse diff --git a/templates/metadata-schema.json b/.github/metadata-schema.json similarity index 100% rename from templates/metadata-schema.json rename to .github/metadata-schema.json diff --git a/.github/samples.json b/.github/samples.json index 0f4684d9f..afa4bf588 100644 --- a/.github/samples.json +++ b/.github/samples.json @@ -1,4 +1,176 @@ [ + { + "name": "pnp-copilot-pro-dev-cea-techpulse", + "title": "TechPulse - Custom Engine Agent for Real-Time Technology News", + "shortDescription": "An intelligent tech news companion powered by Microsoft 365 Agents SDK and Model Context Protocol (MCP)", + "url": "https://github.com/pnp/copilot-pro-dev-samples/tree/main/samples/cea-techpulse", + "downloadUrl": "https://pnp.github.io/download-partial/?url=https://github.com/pnp/copilot-pro-dev-samples/tree/main/samples/cea-techpulse", + "creationDateTime": "2025-09-26", + "updateDateTime": "2025-10-16", + "products": [ + "Microsoft 365 Copilot" + ], + "metadata": [ + { + "key": "PLATFORM", + "value": "Node.js" + }, + { + "key": "LANGUAGE", + "value": "TypeScript, JavaScript" + }, + { + "key": "API-PLUGIN", + "value": "No" + }, + { + "key": "GRAPH-CONNECTOR", + "value": "No" + } + ], + "thumbnails": [ + { + "type": "gif", + "order": 100, + "url": "https://raw.githubusercontent.com/pnp/copilot-pro-dev-samples/refs/heads/main/samples/cea-techpulse/assets/techPulse.gif", + "alt": "Declarative Agent with API Plugin for Microsoft 365 Copilot Sample" + } + ], + "authors": [ + { + "gitHubAccount": "AjayJ12-MSFT", + "pictureUrl": "https://github.com/AjayJ12-MSFT.png", + "name": "Ajay Jadhav" + } + ], + "Folder": "cea-techpulse" + }, + { + "name": "officedev-microsoft-365-copilot-samples-cext-trey-research-csharp", + "title": "Trey Research C#", + "shortDescription": "This sample demonstrates how to create an agent that interacts with a consulting API to provide information about consultants and projects.", + "url": "https://github.com/OfficeDev/Microsoft-365-Copilot-Samples/tree/main/samples/cext-trey-research-csharp", + "downloadUrl": "https://pnp.github.io/download-partial/?url=https://github.com/OfficeDev/Microsoft-365-Copilot-Samples/tree/main/samples/cext-trey-research-csharp", + "creationDateTime": "2025-04-16", + "updateDateTime": "2025-04-16", + "products": [ + "Microsoft 365 Copilot" + ], + "metadata": [ + { + "key": "PLATFORM", + "value": ".NET" + }, + { + "key": "LANGUAGE", + "value": "csharp" + }, + { + "key": "TEAMS-PACKAGE", + "value": "Yes" + } + ], + "thumbnails": [ + { + "type": "image", + "order": 50, + "url": "https://github.com/OfficeDev/Microsoft-365-Copilot-Samples/raw/main/samples/cext-trey-research-csharp/assets/preview.png", + "alt": "Screenshot of the Trey Research sample" + } + ], + "authors": [ + { + "gitHubAccount": "bobgerman", + "pictureUrl": "https://github.com/bobgerman.png", + "name": "Bob German" + } + ], + "Folder": "cext-trey-research-csharp" + }, + { + "name": "officedev-microsoft-365-copilot-samples-cext-trey-research-python", + "title": "Trey Research Python", + "shortDescription": "This sample demonstrates how to create an agent that interacts with a consulting API to provide information about consultants and projects.", + "url": "https://github.com/OfficeDev/Microsoft-365-Copilot-Samples/tree/main/samples/cext-trey-research-python", + "downloadUrl": "https://pnp.github.io/download-partial/?url=https://github.com/OfficeDev/Microsoft-365-Copilot-Samples/tree/main/samples/cext-trey-research-python", + "creationDateTime": "2025-04-16", + "updateDateTime": "2025-04-16", + "products": [ + "Microsoft 365 Copilot" + ], + "metadata": [ + { + "key": "LANGUAGE", + "value": "python" + }, + { + "key": "TEAMS-PACKAGE", + "value": "Yes" + } + ], + "thumbnails": [ + { + "type": "image", + "order": 50, + "url": "https://github.com/OfficeDev/Microsoft-365-Copilot-Samples/raw/main/samples/cext-trey-research-python/assets/preview.png", + "alt": "Screenshot of the Trey Research sample" + } + ], + "authors": [ + { + "gitHubAccount": "bobgerman", + "pictureUrl": "https://github.com/bobgerman.png", + "name": "Bob German" + } + ], + "Folder": "cext-trey-research-python" + }, + { + "name": "pnp-copilot-pro-dev-da-adaptive-card-dialog", + "title": "Adaptive Card dialog", + "shortDescription": "A declarative agent demonstrating how to open dialog boxes from Adaptive Cards in Microsoft 365 Copilot", + "url": "https://github.com/pnp/copilot-pro-dev-samples/tree/main/samples/da-adaptive-card-dialog", + "downloadUrl": "https://pnp.github.io/download-partial/?url=https://github.com/pnp/copilot-pro-dev-samples/tree/main/samples/da-adaptive-card-dialog", + "creationDateTime": "2026-01-06", + "updateDateTime": "2026-01-06", + "products": [ + "Microsoft 365 Copilot" + ], + "metadata": [ + { + "key": "PLATFORM", + "value": "Copilot" + }, + { + "key": "LANGUAGE", + "value": "JavaScript" + }, + { + "key": "API-PLUGIN", + "value": "Yes" + }, + { + "key": "GRAPH-CONNECTOR", + "value": "No" + } + ], + "thumbnails": [ + { + "type": "image", + "order": 100, + "url": "https://raw.githubusercontent.com/pnp/copilot-pro-dev-samples/refs/heads/main/samples/da-adaptive-card-dialog/assets/AdaptiveCardsDialogBox.gif", + "alt": "Declarative Agent with API Plugin for Microsoft 365 Copilot Sample" + } + ], + "authors": [ + { + "gitHubAccount": "v-ypradhan", + "pictureUrl": "https://github.com/v-ypradhan.png", + "name": "Yugal Pradhan" + } + ], + "Folder": "da-adaptive-card-dialog" + }, { "name": "pnp-copilot-pro-dev-da-azureopenai", "title": "Call chat completions from Azure Open AI - No code!", @@ -309,6 +481,52 @@ ], "Folder": "da-CLIForM365-helper" }, + { + "name": "pnp-copilot-pro-dev-da-community-samples-agent", + "title": "Microsoft 365 Community Sample Agent", + "shortDescription": "Agent that connects to the Sample Solution Gallery APIs, using MCP to allow users to find samples within an agent.", + "url": "https://github.com/pnp/copilot-pro-dev-samples/tree/main/samples/da-community-samples-agent", + "downloadUrl": "https://pnp.github.io/download-partial/?url=https://github.com/pnp/copilot-pro-dev-samples/tree/main/samples/da-community-samples-agent", + "creationDateTime": "2025-12-07", + "updateDateTime": "2025-12-07", + "products": [ + "Microsoft 365 Copilot" + ], + "metadata": [ + { + "key": "PLATFORM", + "value": "Declarative Agent" + }, + { + "key": "LANGUAGE", + "value": "JSON" + }, + { + "key": "API-PLUGIN", + "value": "Yes" + }, + { + "key": "GRAPH-CONNECTOR", + "value": "No" + } + ], + "thumbnails": [ + { + "type": "image", + "order": 100, + "url": "https://github.com/pnp/copilot-pro-dev-samples/raw/main/samples/da-community-samples-agent/assets/Example.png", + "alt": "Declarative agent doing that connects to the Sample Solution Gallery APIs, using MCP to allow users to find samples within an agent." + } + ], + "authors": [ + { + "gitHubAccount": "pkbullock", + "pictureUrl": "https://github.com/pkbullock.png", + "name": "Paul Bullock" + } + ], + "Folder": "da-community-samples-agent" + }, { "name": "pnp-copilot-pro-dev-da-docfinder", "title": "Document Finder Declarative Agent for Microsoft 365 Copilot Sample", @@ -457,6 +675,58 @@ ], "Folder": "da-geolocator-game" }, + { + "name": "pnp-copilot-pro-dev-da-HRHelpdesk", + "title": "HR Heldpdesk Declarative Agent", + "shortDescription": "HR Helpdesk is a template Declarative Agent designed to help employees troubleshoot their issues using insights from ServiceNow KB, and if not successful create a case in the right Centre of Excellence/table without much burden on the end user.", + "url": "https://github.com/pnp/copilot-pro-dev-samples/tree/main/samples/da-HRHelpdesk", + "downloadUrl": "https://pnp.github.io/download-partial/?url=https://github.com/pnp/copilot-pro-dev-samples/tree/main/samples/da-HRHelpdesk", + "creationDateTime": "2025-10-14", + "updateDateTime": "2025-10-14", + "products": [ + "Microsoft 365 Copilot" + ], + "metadata": [ + { + "key": "PLATFORM", + "value": "Node.js" + }, + { + "key": "API-PLUGIN", + "value": "Yes" + }, + { + "key": "GRAPH-CONNECTOR", + "value": "No" + } + ], + "thumbnails": [ + { + "type": "image", + "order": 100, + "url": "https://github.com/pnp/copilot-pro-dev-samples/raw/main/samples/da-HRHelpdesk/assets/hrhelpdesk.png", + "alt": "HR Helpdesk" + } + ], + "authors": [ + { + "gitHubAccount": "sebastienlevert", + "pictureUrl": "https://github.com/sebastienlevert.png", + "name": "Sébastien Levert" + }, + { + "gitHubAccount": "akhilsaivalluri", + "pictureUrl": "https://github.com/akhilsaivalluri.png", + "name": "Akhil Sai Valluri" + }, + { + "gitHubAccount": "garrytrinder", + "pictureUrl": "https://github.com/garrytrinder.png", + "name": "Garry Trinder" + } + ], + "Folder": "da-HRHelpdesk" + }, { "name": "pnp-copilot-pro-dev-IdeaCoach", "title": "Idea Coach Declarative Agent for Microsoft 365 Copilot Sample", @@ -503,6 +773,58 @@ ], "Folder": "da-IdeaCoach" }, + { + "name": "pnp-copilot-pro-dev-da-ITHelpdesk", + "title": "IT Helpdesk Declarative Agent", + "shortDescription": "IT Helpdesk Agent is a Declarative Agent designed to assist employees with IT issues through (a) guided, conversational troubleshooting, (b) outage detection, and ticket creation for escalation – powered through ServiceNow offerings (Knowledge, Catalogue and Tickets). ", + "url": "https://github.com/pnp/copilot-pro-dev-samples/tree/main/samples/da-ITHelpdesk", + "downloadUrl": "https://pnp.github.io/download-partial/?url=https://github.com/pnp/copilot-pro-dev-samples/tree/main/samples/da-ITHelpdesk", + "creationDateTime": "2025-10-14", + "updateDateTime": "2025-10-14", + "products": [ + "Microsoft 365 Copilot" + ], + "metadata": [ + { + "key": "PLATFORM", + "value": "Node.js" + }, + { + "key": "API-PLUGIN", + "value": "Yes" + }, + { + "key": "GRAPH-CONNECTOR", + "value": "No" + } + ], + "thumbnails": [ + { + "type": "image", + "order": 100, + "url": "https://github.com/pnp/copilot-pro-dev-samples/raw/main/samples/da-ITHelpdesk/assets/ithelpdesk.png", + "alt": "IT Helpdesk" + } + ], + "authors": [ + { + "gitHubAccount": "sebastienlevert", + "pictureUrl": "https://github.com/sebastienlevert.png", + "name": "Sébastien Levert" + }, + { + "gitHubAccount": "akhilsaivalluri", + "pictureUrl": "https://github.com/akhilsaivalluri.png", + "name": "Akhil Sai Valluri" + }, + { + "gitHubAccount": "garrytrinder", + "pictureUrl": "https://github.com/garrytrinder.png", + "name": "Garry Trinder" + } + ], + "Folder": "da-ITHelpdesk" + }, { "name": "pnp-copilot-pro-dev-LearningCoach", "title": "Learning Coach Declarative Agent for Microsoft 365 Copilot Sample", @@ -602,6 +924,52 @@ ], "Folder": "da-m365-roadmap-tracker" }, + { + "name": "pnp-copilot-pro-dev-da-microsoftdocssearchagent", + "title": "Microsoft Learn Search Agent", + "shortDescription": "An agent that helps users search and retrieve content from Microsoft Learn. ", + "url": "https://github.com/pnp/copilot-pro-dev-samples/tree/main/samples/da-microsoftdocssearchagent", + "downloadUrl": "https://pnp.github.io/download-partial/?url=https://github.com/pnp/copilot-pro-dev-samples/tree/main/samples/da-microsoftdocssearchagent", + "creationDateTime": "2025-12-15", + "updateDateTime": "2025-12-15", + "products": [ + "Microsoft 365 Copilot" + ], + "metadata": [ + { + "key": "PLATFORM", + "value": "Node.js" + }, + { + "key": "LANGUAGE", + "value": "JSON" + }, + { + "key": "API-PLUGIN", + "value": "Yes" + }, + { + "key": "GRAPH-CONNECTOR", + "value": "No" + } + ], + "thumbnails": [ + { + "type": "image", + "order": 100, + "url": "https://github.com/pnp/copilot-pro-dev-samples/raw/main/samples/da-microsoftdocssearchagent/assets/preview.png", + "alt": "Declarative agent that helps users search and retrieve content from Microsoft Learn." + } + ], + "authors": [ + { + "gitHubAccount": "pkbullock", + "pictureUrl": "https://github.com/pkbullock.png", + "name": "Paul Bullock" + } + ], + "Folder": "da-microsoftdocssearchagent" + }, { "name": "pnp-copilot-pro-dev-myadvancedcommsbuddy", "title": "My Advanced Communication Buddy - Declarative Agent with API Plugin for Microsoft 365 Copilot Sample", diff --git a/.github/workflows/no-zip-in-samples.yml b/.github/workflows/no-zip-in-samples.yml new file mode 100644 index 000000000..0de595dd4 --- /dev/null +++ b/.github/workflows/no-zip-in-samples.yml @@ -0,0 +1,53 @@ +name: Block zip files in samples + +on: + pull_request: + paths: + - "samples/**" + +env: + WORKFLOW_DISABLED: true + +permissions: + contents: read + pull-requests: write + issues: write + +jobs: + check-zip-files: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Scan for zip files + id: zip_check + run: | + set -euo pipefail + if find samples -type f -name "*.zip" -print -quit | grep -q .; then + echo "found=true" >> "$GITHUB_OUTPUT" + echo "paths<> "$GITHUB_OUTPUT" + find samples -type f -name "*.zip" -print >> "$GITHUB_OUTPUT" + echo "EOF" >> "$GITHUB_OUTPUT" + else + echo "found=false" >> "$GITHUB_OUTPUT" + fi + + - name: Comment on PR if zip files found + if: steps.zip_check.outputs.found == 'true' + uses: actions/github-script@v7 + with: + script: | + const paths = `${{ steps.zip_check.outputs.paths }}`.trim(); + const body = [ + "Zip files are not allowed in `samples/**`. Please remove the following:", + "", + paths ? paths.split("\n").map(p => `- ${p}`).join("\n") : "- (no paths reported)" + ].join("\n"); + + await github.rest.issues.createComment({ + owner: context.repo.owner, + repo: context.repo.repo, + issue_number: context.issue.number, + body + }); diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 4cb0d8e29..99b0614e6 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,6 +1,6 @@ # Contribution Guidance -This is a community repository for sample Microsoft 365 Copilot agents developed using code-first approaches using tools such as Visual Studio Code and Teasm Toolkit. +This is a community repository for sample Microsoft 365 Copilot agents developed using code-first approaches using tools such as Visual Studio Code and Microsoft 365 Agents Toolkit, and now support for Copilot Studio samples. If you'd like to contribute to this repository, please read the following guidelines. Contributors are more than welcome to share their learnings with others in this centralized location. @@ -83,8 +83,9 @@ Each sample should be in its own folder within the /samples directory. Your fold | Prefix | Description | | --- | --- | | cea- | These are Custom engine agents that interact with users in the Bizchat chat surface via the Azure Bot Framework | -| da - | These are Declarative agents that run using Microsoft 365 Copilot's AI and orchestration and may include API plugins and Graph connectors | +| da- | These are Declarative agents that run using Microsoft 365 Copilot's AI and orchestration and may include API plugins and Graph connectors | | msgext- | These are agents implemented as Microsoft 365 Message extensions | +| mcs- | Indiciate this agent is Microsoft Copilot Studio | ### 2. README.md file @@ -92,8 +93,8 @@ Your sample folder should contain a `README.md` file for your contribution. Plea | If your sample is | use this template | | --- | --- | -| built with Teams Toolkit for VS Code | [README.md](/samples/_SAMPLE_templates/ttk-vs-code-sample/README.md) | -| built with Teams Toolkit for Visual Studio | [README.md](/samples/_SAMPLE_templates/ttk-vs-sample/README.md) | +| built with Microsoft 365 Agents Toolkit for VS Code | [README.md](/samples/_SAMPLE_templates/ttk-vs-code-sample/README.md) | +| built with Microsoft 365 Agents Toolkit for Visual Studio | [README.md](/samples/_SAMPLE_templates/ttk-vs-sample/README.md) | | something else | [README.md](/samples/_SAMPLE_templates/any-sample/README.md) | Please copy the template to your project and update it accordingly. Your `README.md` must be named exactly `README.md` -- with capital letters -- as this is the information we use to make your sample public. @@ -158,11 +159,78 @@ The preview image must be located in the `/assets/` folder in the root your solu Your sample should include a clearly marked folder containing a Teams/M365 `manifest.json` file and well-formed application icons along with any additional files such as declarative agent and API plugin JSON files. - * If the manifest works as-is, you may optionally include an installable Teams application package (zip archive containing these files). +* If the manifest works as-is, you may optionally include an installable Teams application package (zip archive containing these files). - * If the `manifest.json` requires modification before use, please do not include a zip archive. Instead, include instructions in your `README.md` file explaining how to modify the manifest and create the Teams application package +* If the `manifest.json` requires modification before use, please do not include a zip archive. Instead, include instructions in your `README.md` file explaining how to modify the manifest and create the Teams application package -### 7. Telemetry +### 7. Microsoft Copilot Studio Samples + +There are one type of Copilot Studio Agent within this repository: + +1. ✅ Copilot Studio using Solution Export +2. ❌ Copilot Studio using Cloned with Visual Studio Code. (Not Recommended at this time) + +#### Sample Setup applies to both methods + +The intended folder structure for a MCS samples would look like this: + +- mcs-MyNewAgent + - assets + - src + - README.md + +Quick way to scaffold the sample: + + ```powershell + # Navigste to samples folder + cd samples + cp -R ../templates/mcs-copilot-studio mcs-MyNewAgent + cd mcs-MyNewAgent +``` + +#### Copilot Studio using Solution Export + +Submitting a Microsoft Copilot Studio (MCS) Samples using the Clone Method + +> Note: Package/zip files, for security reasons we will only accept the contents of these packages rather than the package files. + +To get the source quickly, please use the following commands using the [Power Platform CLI](https://learn.microsoft.com/en-us/power-platform/developer/cli/introduction), alternatively to install the CLI quickly in the terminal, you can use the [Power Platform Tools for Visual Studio Code (as this installs the Power Platform CLI as well)](https://marketplace.visualstudio.com/items?itemName=microsoft-IsvExpTools.powerplatform-vscode): + + - Ensure you are authenticated with [```pac auth```](https://learn.microsoft.com/en-us/power-platform/developer/cli/reference/auth) + + - Add your agent to a solution package e.g. MyAgent + + - Export Solution Contents + + ```powershell + # Navigste to samples folder + cd samples + cp -R ../templates/mcs-copilot-studio mcs-MyNewAgent + cd mcs-MyNewAgent + + pac solution clone --name --outputDirectory . --packagetype Unmanaged + + ``` + +Ensure that all the solution files are located in the root of the scaffolded sample location e.g. /samples/mcs-MyNewAgent +See example agent: [mcs-BlogPostHelper](/samples/mcs-BlogPostHelper) + +Thats it, proceed to Finalising the sample + +#### Finalising the sample + +**Updating the Readme.md file** + +- Rename the file from ```README-template.md``` to ```README.md``` +- Read and complete the commented out sections within README file. + +**Updating the assets/sample.json file** + +- Rename the file from ```template-sample.json``` to ```sample.json``` +- Complete the sections within the sample.json file. Tip: there are tokens such as ```YOUR_AGENT_FOLDER``` that will help you complete this quicker. + + +### 8. Telemetry The README template contains a specific tracking image at the end of the file with an `img` tag, where the `src` attribute points to `https://m365-visitor-stats.azurewebsites.net/copilot-pro-dev-samples/samples/`. This is a transparent image which is used to track how many visits each sample receives in GitHub. diff --git a/README.md b/README.md index 21a287cde..74aff86a3 100644 --- a/README.md +++ b/README.md @@ -10,6 +10,7 @@ This repository contains [Microsoft 365 Copilot](https://learn.microsoft.com/mic | Title | Description | Author | |-------|-------------|--------| +| [Adaptive Card dialog](./samples/da-adaptive-card-dialog) | A declarative agent demonstrating how to open dialog boxes from Adaptive Cards in Microsoft 365 Copilot | Yugal Pradhan | | [Agent PostPilot](./samples/da-PostPilotAgent) | Agent helps write LinkedIn post to announce Prompt of the week | Rabia Williams | | [Azure Open AI Agent using TypeSpec for Microsoft 365 Copilot](./samples/da-typespec-azureopenai) | This sample demonstrates how to build a declarative agent for Microsoft 365 Copilot using TypeSpec for Microsoft 365 Copilot that allows to connect to Azure Open AI API as an API plugin to send queries. | Reshmee | | [Blog Post Helper Declarative Agent for Microsoft 365 Copilot Sample](./samples/da-BlogPostHelper) | Blog post helper declarative agent to help in the creation process. | Paul Bullock | @@ -27,16 +28,20 @@ This repository contains [Microsoft 365 Copilot](https://learn.microsoft.com/mic | [Declarative for Microsoft 365 Copilot with an API plugin connected to an API secured with OAuth](./samples/da-repairs-oauth) | This sample demonstrates how to build a declarative agent for Microsoft 365 Copilot that answers questions about repairs. The agent uses an API plugin to connect to an API secured with OAuth. The project contains an Azure Function that serves as the API and uses the built-in Azure App Service authentication and authorization capabilities (also referred to as Easy Auth) to secure access to APIs. | Waldek Mastykarz | | [Document Finder Declarative Agent for Microsoft 365 Copilot Sample](./samples/da-DocFinder) | First Party Declarative Agent Document Finder shared as a sample | Jeremy Thake | | [ESA, The Environment Sustainability Agent using Microsoft 365 Copilot](./samples/da-environmentSustainability) | This sample showcases how to build a declarative agent for Microsoft 365 Copilot connected to a SharePoint site as knowledge base, named ESA, the Environment Sustainability Agent. ESA is an intelligent assistant developed to assist organizations in monitoring and optimizing their environmental impact. | Rabia Williams | -| [Finding and apply for volunteer opportunities using Microsoft 365 Copilot with SharePoint List and Azure Ai Search - No code!](./samples/da-volunteeringapp) | This sample demonstrates how to build a declarative agent for Microsoft 365 Copilot that allows you to find and apply for volunteer opportunities using Microsoft 365 Copilot with SharePoint List and Azure Ai Search integration and authentication. | Reshmee Auckloo, Lee Ford | | [Finding and apply for volunteer opportunities using Microsoft 365 Copilot with SharePoint List and Azure Ai Search - No code!](./samples/da-typespec-AzureAISearch_MsGraph-volunteeringapp) | This sample demonstrates how to build a declarative agent for Microsoft 365 Copilot using TypeSpec that allows you to find and apply for volunteer opportunities using Microsoft 365 Copilot with SharePoint List and Azure Ai Search integration and authentication. | Reshmee Auckloo, Lee Ford | +| [Finding and apply for volunteer opportunities using Microsoft 365 Copilot with SharePoint List and Azure Ai Search - No code!](./samples/da-volunteeringapp) | This sample demonstrates how to build a declarative agent for Microsoft 365 Copilot that allows you to find and apply for volunteer opportunities using Microsoft 365 Copilot with SharePoint List and Azure Ai Search integration and authentication. | Reshmee Auckloo, Lee Ford | | [Geo Locator Game](./samples/da-geolocator-game) | This sample demonstrates how to create a Geo Locator Game declarative agent using Microsoft 365 Copilot. | Ayca Bas, Garry Trinder | | [GitHub Issues Agent using TypeSpec for Microsoft 365 Copilot](./samples/da-typespec-github) | This sample demonstrates how to build a declarative agent for Microsoft 365 Copilot using TypeSpec for Microsoft 365 Copilot that allows you ground responses in WebSearch, use CodeInterpreter and use the GitHub API as an API plugin to retrieve issues. | Sébastien Levert | | [Graph QnA agent for Microsoft 365 Copilot](./samples/da-qna-graphapi-plugin) | Copilot declarative agent makes direct calls to Microsoft Graph | Franck Cornu | +| [HR Heldpdesk Declarative Agent](./samples/da-HRHelpdesk) | HR Helpdesk is a template Declarative Agent designed to help employees troubleshoot their issues using insights from ServiceNow KB, and if not successful create a case in the right Centre of Excellence/table without much burden on the end user. | Sébastien Levert, Akhil Sai Valluri, Garry Trinder | | [Idea Coach Declarative Agent for Microsoft 365 Copilot Sample](./samples/da-IdeaCoach) | First Party Declarative Agent Idea Coach shared as a sample | Eric Scherlinger | +| [IT Helpdesk Declarative Agent](./samples/da-ITHelpdesk) | IT Helpdesk Agent is a Declarative Agent designed to assist employees with IT issues through (a) guided, conversational troubleshooting, (b) outage detection, and ticket creation for escalation – powered through ServiceNow offerings (Knowledge, Catalogue and Tickets). | Sébastien Levert, Akhil Sai Valluri, Garry Trinder | | [Learning Coach Declarative Agent for Microsoft 365 Copilot Sample](./samples/da-LearningCoach) | First Party Declarative Agent Learning Coach shared as a sample | Julie Chudakova | -| [Manage repairs using Microsoft 365 Copilot](./samples/da-typespec-repairs-apikey) | This sample demonstrates how to build a declarative agent for Microsoft 365 Copilot using TypeSpec for Microsoft 365 Copilot that allows you to read, create, update and delete items from a Repairs system. The agent uses an API plugin to connect to an API-key protected API. | Sébastien Levert | | [Manage repairs using Microsoft 365 Copilot](./samples/da-typespec-repairs) | This sample demonstrates how to build a declarative agent for Microsoft 365 Copilot using TypeSpec for Microsoft 365 Copilot that allows you to read, create, update and delete items from a Repairs system. The agent uses an API plugin to connect to an anonymous API. | Sébastien Levert | +| [Manage repairs using Microsoft 365 Copilot](./samples/da-typespec-repairs-apikey) | This sample demonstrates how to build a declarative agent for Microsoft 365 Copilot using TypeSpec for Microsoft 365 Copilot that allows you to read, create, update and delete items from a Repairs system. The agent uses an API plugin to connect to an API-key protected API. | Sébastien Levert | | [Manage repairs using Microsoft 365 Copilot using OAuth 2.0 authentication](./samples/da-typespec-repairs-oauth) | This sample demonstrates how to build a declarative agent for Microsoft 365 Copilot using TypeSpec for Microsoft 365 Copilot that allows you to read, create, update and delete items from a Repairs system. The agent uses an API plugin to connect to an OAuth protected API. This sample is connecting to an already configured API. | Sébastien Levert | +| [Microsoft 365 Community Sample Agent](./samples/da-community-samples-agent) | Agent that connects to the Sample Solution Gallery APIs, using MCP to allow users to find samples within an agent. | Paul Bullock | +| [Microsoft Learn Search Agent](./samples/da-microsoftdocssearchagent) | An agent that helps users search and retrieve content from Microsoft Learn. | Paul Bullock | | [My Advanced Communication Buddy - Declarative Agent with API Plugin for Microsoft 365 Copilot Sample](./samples/da-MyAdvancedCommsBuddy) | First Party Declarative Agent Career Coach shared as a sample | Paul Bullock | | [My Communication Buddy](./samples/da-MyCommsBuddy) | Declarative Agent designed to assist user in creating corporate communications | Paul Bullock | | [PM Spec Reviewer](./samples/da-PMSpecReviewer) | A Microsoft Teams app that helps Product Managers review product specifications using AI assistance. | Sid Mathur | @@ -54,7 +59,10 @@ This repository contains [Microsoft 365 Copilot](https://learn.microsoft.com/mic | [SharePoint Agents Finder declarative agent](./samples/da-sp-agents-finder) | SharePoint Agents Finder uses the Microsoft Graph API as a Copilot plugin in a declarative agent, leveraging the Microsoft Graph Search API /search/query endpoint to retrieve information about SharePoint Agents and event any file in Microsoft 365. | Mohammad Amer | | [Tasks Agent using TypeSpec for Microsoft 365 Copilot that connects to the Microsoft Graph APIs](./samples/da-typespec-todo) | This sample demonstrates how to build a declarative agent for Microsoft 365 Copilot using TypeSpec for Microsoft 365 Copilot that connects to the Tasks endpoints of the Microsoft Graph API through an API plugin. | Sébastien Levert | | [Tech Support agent using TypeSpec for Microsoft 365 Copilot](./samples/da-typespec-tech-support) | This sample demonstrates how to build a declarative agent for Microsoft 365 Copilot using TypeSpec for Microsoft 365 Copilot that allows you ground responses in WebSearch, SharePoint and Copilot connectors | Sébastien Levert | +| [TechPulse - Custom Engine Agent for Real-Time Technology News](./samples/cea-techpulse) | An intelligent tech news companion powered by Microsoft 365 Agents SDK and Model Context Protocol (MCP) | Ajay Jadhav | | [The M365 Roadmap Features Tracker agent shows how users can easily stay up to date with the latest Microsoft 365 roadmap features.](./samples/da-m365-roadmap-tracker) | The M365 Roadmap Features Tracker agent shows how users can easily stay up to date with the latest Microsoft 365 roadmap features. It integrates a Microsoft Graph Connector to monitor and deliver the latest updates, offering a hands-free solution for staying informed. | Mohammad Amer | +| [Trey Research C#](./samples/cext-trey-research-csharp) | This sample demonstrates how to create an agent that interacts with a consulting API to provide information about consultants and projects. | Bob German | +| [Trey Research Python](./samples/cext-trey-research-python) | This sample demonstrates how to create an agent that interacts with a consulting API to provide information about consultants and projects. | Bob German | | [Trey Research TS Auth](./samples/da-trey-research-auth) | This sample demonstrates how to create an agent that interacts with a protected consulting API to provide information about consultants and projects. | Bob German, Garry Trinder | | [Trey Research TypeScript](./samples/da-trey-research) | This sample demonstrates how to create an agent that interacts with a consulting API to provide information about consultants and projects. | Bob German, Garry Trinder | | [Trey Research TypeSpec](./samples/da-typespec-trey-research) | This sample demonstrates how to create an agent that interacts with a consulting API to provide information about consultants and projects. | Bob German, Rabia Williams | @@ -87,3 +95,5 @@ This repository has adopted the [Microsoft Open Source Code of Conduct](https:// + + diff --git a/samples/da-microsoftdocssearchagent/assets/sample.json b/samples/da-microsoftdocssearchagent/assets/sample.json index 83148819e..8f76841b8 100644 --- a/samples/da-microsoftdocssearchagent/assets/sample.json +++ b/samples/da-microsoftdocssearchagent/assets/sample.json @@ -2,7 +2,7 @@ { "name": "pnp-copilot-pro-dev-da-microsoftdocssearchagent", "source": "pnp", - "title": "YOUR-SAMPLE-TITLE", + "title": "Microsoft Learn Search Agent", "shortDescription": "An agent that helps users search and retrieve content from Microsoft Learn. ", "url": "https://github.com/pnp/copilot-pro-dev-samples/tree/main/samples/da-microsoftdocssearchagent", "downloadUrl": "https://pnp.github.io/download-partial/?url=https://github.com/pnp/copilot-pro-dev-samples/tree/main/samples/da-microsoftdocssearchagent", @@ -10,7 +10,7 @@ "An agent that helps users search and retrieve content from Microsoft Learn. " ], "creationDateTime": "2025-12-15", - "updateDateTime": "2024-10-03", + "updateDateTime": "2025-12-15", "products": [ "Microsoft 365 Copilot" ], diff --git a/samples/mcs-BlogPostHelper/BlogHelperAgent.cdsproj b/samples/mcs-BlogPostHelper/BlogHelperAgent.cdsproj new file mode 100644 index 000000000..0c94dfe18 --- /dev/null +++ b/samples/mcs-BlogPostHelper/BlogHelperAgent.cdsproj @@ -0,0 +1,54 @@ + + + + $(MSBuildExtensionsPath)\Microsoft\VisualStudio\v$(VisualStudioVersion)\PowerApps + + + + + + + 03feaf8e-5c2a-4fd7-8060-129e4dc5875f + v4.6.2 + + net462 + PackageReference + src + + + + + + + + + + + + + + + + + + + + + + + PreserveNewest + + + + + + + diff --git a/samples/mcs-BlogPostHelper/README.md b/samples/mcs-BlogPostHelper/README.md new file mode 100644 index 000000000..241e934eb --- /dev/null +++ b/samples/mcs-BlogPostHelper/README.md @@ -0,0 +1,77 @@ + + +# Blog Post Helper for Copilot Studio + +## Summary + +This sample helps users that often create blog post to help with elements of the creation process to get posts created quicker using capabilities within Declarative Agents. + +Common features that the agent can help with: + + - Suggest an introduction based on a topic + - Review existing articles, or Find content that I would reference quickly. + +> Note: This agent is built with Copilot Studio, as an equivelant variation of ```da-BlogPostHelper``` sample and and advising example of how to import a Copilot Studio agent + +## Contributors + +* [Paul Bullock](https://github.com/pkbullock.png) + +## Version history + +Version|Date|Comments +-------|----|-------- +1.0|Feburary 01, 2026|Initial release + +## Prerequisites + +* Microsoft 365 tenant with Microsoft 365 Copilot +* Access to Copilot Studio + +## Minimal path to awesome + +**Import Solution into Copilot Studio** + +This sample uses the Power Platform CLI to import samples, for documenation and installation instructions please visit: [What is Microsoft Power Platform CLI? | Microsoft Learn](https://learn.microsoft.com/en-us/power-platform/developer/cli/introduction) + +- Ensure you are authenticated with ```pac auth``` + +```powershell + +cd samples/mcs-BlogPostHelper + +# Package up the solution, note the SRC part is important to pack. +pac solution pack --zipfile mcs-BlogPostHelper.zip --folder ./src + +# Import into specific environment use -env, or leave blank for defualt environment +pac env list +pac solution import --path ./mcs-BlogPostHelper.zip -env ba171802-488b-ed1b-b121-e778530363a2 + +``` + +## Features + +Extended description of the contents of the sample. What elements does it include? What concepts does illustrate? + +Using this sample you can extend Microsoft 365 Copilot with an agent that: + +* Helps build blog posts +* This is just a simple agent for testing the Copilot Samples process. + +## Help + +We do not support samples, but this community is always willing to help, and we want to improve these samples. We use GitHub to track issues, which makes it easy for community members to volunteer their time and help resolve issues. + +You can try looking at [issues related to this sample](https://github.com/pnp/copilot-pro-dev-samples/issues?q=label%3A%22sample%3A%20mcs-BlogPostHelper%22) to see if anybody else is having the same issues. + +If you encounter any issues using this sample, [create a new issue](https://github.com/pnp/copilot-pro-dev-samples/issues/new). + +Finally, if you have an idea for improvement, [make a suggestion](https://github.com/pnp/copilot-pro-dev-samples/issues/new). + +## Disclaimer + +**THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT.** + +![](https://m365-visitor-stats.azurewebsites.net/copilot-pro-dev-samples/mcs-BlogPostHelper) diff --git a/templates/pending-image.png b/samples/mcs-BlogPostHelper/assets/pending-image.png similarity index 100% rename from templates/pending-image.png rename to samples/mcs-BlogPostHelper/assets/pending-image.png diff --git a/samples/mcs-BlogPostHelper/assets/sample.json b/samples/mcs-BlogPostHelper/assets/sample.json new file mode 100644 index 000000000..9533cbc22 --- /dev/null +++ b/samples/mcs-BlogPostHelper/assets/sample.json @@ -0,0 +1,64 @@ +[ + { + "name": "pnp-copilot-pro-dev-mcs-BlogPostHelper", + "source": "pnp", + "title": "Blog Post Helper", + "shortDescription": "A Copilot Studio agent that assists in creating and managing blog posts.", + "url": "https://github.com/pnp/copilot-pro-dev-samples/tree/main/samples/mcs-BlogPostHelper", + "downloadUrl": "https://pnp.github.io/download-partial/?url=https://github.com/pnp/copilot-pro-dev-samples/tree/main/samples/mcs-BlogPostHelper", + "longDescription": [ + "A Copilot Studio agent that assists in creating and managing blog posts." + ], + "creationDateTime": "2026-02-14", + "updateDateTime": "2026-02-14", + "products": [ + "Microsoft 365 Copilot", + "Microsoft Copilot Studio" + ], + "metadata": [ + { + "key": "PLATFORM", + "value": "Copilot Studio" + }, + { + "key": "LANGUAGE", + "value": "None" + }, + { + "key": "API-PLUGIN", + "value": "No" + }, + { + "key": "GRAPH-CONNECTOR", + "value": "No" + } + ], + "thumbnails": [ + { + "type": "image", + "order": 100, + "url": "https://github.com/pnp/copilot-pro-dev-samples/raw/main/samples/mcs-BlogPostHelper/assets/pending-image.png", + "alt": "Copilot Studio agent placeholder image for the moment" + } + ], + "authors": [ + { + "gitHubAccount": "pkbullock", + "pictureUrl": "https://github.com/pkbullock.png", + "name": "Paul Bullock" + } + ], + "references": [ + { + "name": "Microsoft 365 Copilot extensibility", + "description": "Learn more about what Microsoft 365 Copilot and how you can extend it.", + "url": "https://learn.microsoft.com/microsoft-365-copilot/extensibility/" + }, + { + "name": "Microsoft Copilot Studio", + "description": "Discover how to build AI-driven agents and workflows easily with Microsoft Copilot Studio with online training courses, docs, and videos. Learn how to quickly and simply integrate chat into your website.", + "url": "https://learn.microsoft.com/en-us/microsoft-copilot-studio/" + } + ] + } +] \ No newline at end of file diff --git a/samples/mcs-BlogPostHelper/src/Other/Customizations.xml b/samples/mcs-BlogPostHelper/src/Other/Customizations.xml new file mode 100644 index 000000000..37b3487bb --- /dev/null +++ b/samples/mcs-BlogPostHelper/src/Other/Customizations.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + 1033 + + \ No newline at end of file diff --git a/samples/mcs-BlogPostHelper/src/Other/Solution.xml b/samples/mcs-BlogPostHelper/src/Other/Solution.xml new file mode 100644 index 000000000..b277c1f41 --- /dev/null +++ b/samples/mcs-BlogPostHelper/src/Other/Solution.xml @@ -0,0 +1,83 @@ + + + + BlogHelperAgent + + + + + 1.0.0.0 + 0 + + paulbullock + + + + + + + pkbagent + 89470 + +
+ 1 + 1 + + + + + + + + + + + + + + + + 1 + + + + + + + + +
+
+ 2 + 1 + + + + + + + + + + + + + + + + 1 + + + + + + + + +
+
+
+ + +
+
\ No newline at end of file diff --git a/samples/mcs-BlogPostHelper/src/botcomponents/cr7f7_blogHelperAgent.BotSettingsComponent.Feedback/botcomponent.xml b/samples/mcs-BlogPostHelper/src/botcomponents/cr7f7_blogHelperAgent.BotSettingsComponent.Feedback/botcomponent.xml new file mode 100644 index 000000000..be0d87fbe --- /dev/null +++ b/samples/mcs-BlogPostHelper/src/botcomponents/cr7f7_blogHelperAgent.BotSettingsComponent.Feedback/botcomponent.xml @@ -0,0 +1,9 @@ + + 18 + 0 + + cr7f7_blogHelperAgent + + 0 + 1 + \ No newline at end of file diff --git a/samples/mcs-BlogPostHelper/src/botcomponents/cr7f7_blogHelperAgent.BotSettingsComponent.Feedback/data b/samples/mcs-BlogPostHelper/src/botcomponents/cr7f7_blogHelperAgent.BotSettingsComponent.Feedback/data new file mode 100644 index 000000000..39c71d46d --- /dev/null +++ b/samples/mcs-BlogPostHelper/src/botcomponents/cr7f7_blogHelperAgent.BotSettingsComponent.Feedback/data @@ -0,0 +1,2 @@ +kind: DefaultFeedbackCollection +disclaimer: \ No newline at end of file diff --git a/samples/mcs-BlogPostHelper/src/botcomponents/cr7f7_blogHelperAgent.gpt.default/botcomponent.xml b/samples/mcs-BlogPostHelper/src/botcomponents/cr7f7_blogHelperAgent.gpt.default/botcomponent.xml new file mode 100644 index 000000000..6602ff601 --- /dev/null +++ b/samples/mcs-BlogPostHelper/src/botcomponents/cr7f7_blogHelperAgent.gpt.default/botcomponent.xml @@ -0,0 +1,11 @@ + + 15 + Declarative agent that supports the authoring, reviews and creation of blog posts. + 0 + Blog helper agent (CS) + + cr7f7_blogHelperAgent + + 0 + 1 + \ No newline at end of file diff --git a/samples/mcs-BlogPostHelper/src/botcomponents/cr7f7_blogHelperAgent.gpt.default/data b/samples/mcs-BlogPostHelper/src/botcomponents/cr7f7_blogHelperAgent.gpt.default/data new file mode 100644 index 000000000..717d53a38 --- /dev/null +++ b/samples/mcs-BlogPostHelper/src/botcomponents/cr7f7_blogHelperAgent.gpt.default/data @@ -0,0 +1,84 @@ +kind: GptComponentMetadata +displayName: Blog helper agent (CS) +instructions: |- + You are a declarative agent that assists users in authoring, reviewing, and creating blog posts. You should support image creation and code interpretation to enhance the content creation process. + + Examples of Capabilities and kinds of requests from the user: + + Blog Post Authoring + + - Assist users in drafting blog posts by providing writing prompts, structure suggestions, and content ideas. + - Offer grammar and style suggestions to improve readability and engagement. + - Generate introductory and concluding paragraphs based on the main content. + + Blog Post Reviewing: + + - Review and provide feedback on draft blog posts, focusing on clarity, coherence, and overall quality. + - Highlight areas for improvement and suggest edits. + - Check for plagiarism and ensure originality. + + Image Creation such as blog post headers: + + - Generate relevant images based on the blog post content. + - Provide options for different styles and formats (e.g., infographics, illustrations, charts). + - Ensure images are high-quality and appropriately licensed for use. + + Code Interpretation: + + - Interpret and format code snippets included in blog posts. + - Provide syntax highlighting and error checking for various programming languages. + - Suggest improvements or optimizations for the code. + + Instructions for Use + + Starting a New Blog Post: + + - Prompt the user to provide a topic or main idea. + - Offer a structured outline to guide the writing process. + - Suggest relevant keywords and phrases to include. + + Reviewing a Draft: + + - Analyze the draft for grammar, style, and coherence. + - Provide detailed feedback and suggest specific edits. + - Highlight any potential plagiarism issues and suggest rephrasing. + + Interpreting Code + + - Detect code snippets within the blog post. + - Apply syntax highlighting and check for errors. + - Offer suggestions for improving the code's efficiency and readability. + + Example Workflow + User: "I want to write a blog post about the benefits of using AI in Microsoft 365." + Agent: "Great! Here's a suggested outline: Introduction, Benefits of AI in Microsoft 365, Case Studies, Challenges and Considerations, Conclusion. Would you like to start with the introduction?" + User: "Yes, please." + Agent: "Here's a draft introduction: 'Artificial Intelligence (AI) is revolutionizing the IT industry by improving diagnostics, plans, and outcomes. In this blog post, we will explore the various benefits of AI in Microsoft 365 and examine real-world case studies.' How does this sound?" + User: "Looks good. Can you add an image of a blog robot?" + Agent: "Sure! Here are three options for images of blog robots. Which one would you like to use?" + User: "I'll go with the second one." + Agent: "Image added. Now, let's move on to the next section: Benefits of AI in Microsoft 365. Here are some key points to include..." +gptCapabilities: + webBrowsing: false + codeInterpreter: true + +conversationStarters: + - title: Example of blog post summary + text: Summerise the blog post called `Understanding the user experience of using an agent in SharePoint in Teams chat` + + - title: Show a code sample + text: In the blog post titled 'The many ways to set UK Locale in SharePoint', get a list of code samples and display in table format with title and description of each sample + + - title: Find a blog about... + text: Find a blog post titled 'Understanding the user experience of using an agent in SharePoint in Teams chat' and show a list of sample code? + + - title: Find and Review + text: Find & Review the blog post titled 'Extending your Graph Connector to a Microsoft 365 Copilot Agent', check for grammer errors + + - title: Create an Introduction + text: I want to create a new post and would like you to suggest an introduction about to [post about declarative agents] + +aISettings: + model: {} + extensionData: + lastUsedCustomModel: {} \ No newline at end of file diff --git a/samples/mcs-BlogPostHelper/src/botcomponents/cr7f7_blogHelperAgent.knowledge.PublicSiteSearchSource.0/botcomponent.xml b/samples/mcs-BlogPostHelper/src/botcomponents/cr7f7_blogHelperAgent.knowledge.PublicSiteSearchSource.0/botcomponent.xml new file mode 100644 index 000000000..be13c0432 --- /dev/null +++ b/samples/mcs-BlogPostHelper/src/botcomponents/cr7f7_blogHelperAgent.knowledge.PublicSiteSearchSource.0/botcomponent.xml @@ -0,0 +1,11 @@ + + 16 + This knowledge source searches information on the web found in https://pkbullock.com/ website + 0 + https://pkbullock.com/ + + cr7f7_blogHelperAgent + + 0 + 1 + \ No newline at end of file diff --git a/samples/mcs-BlogPostHelper/src/botcomponents/cr7f7_blogHelperAgent.knowledge.PublicSiteSearchSource.0/data b/samples/mcs-BlogPostHelper/src/botcomponents/cr7f7_blogHelperAgent.knowledge.PublicSiteSearchSource.0/data new file mode 100644 index 000000000..9513c4362 --- /dev/null +++ b/samples/mcs-BlogPostHelper/src/botcomponents/cr7f7_blogHelperAgent.knowledge.PublicSiteSearchSource.0/data @@ -0,0 +1,4 @@ +kind: KnowledgeSourceConfiguration +source: + kind: PublicSiteSearchSource + site: https://pkbullock.com/ \ No newline at end of file diff --git a/samples/mcs-BlogPostHelper/src/botcomponents/cr7f7_blogHelperAgent.topic.ConversationStart/botcomponent.xml b/samples/mcs-BlogPostHelper/src/botcomponents/cr7f7_blogHelperAgent.topic.ConversationStart/botcomponent.xml new file mode 100644 index 000000000..c1c669a9f --- /dev/null +++ b/samples/mcs-BlogPostHelper/src/botcomponents/cr7f7_blogHelperAgent.topic.ConversationStart/botcomponent.xml @@ -0,0 +1,11 @@ + + 9 + This system topic triggers when the agent receives an Activity indicating the beginning of a new conversation. If you do not want the agent to initiate the conversation, disable this topic. + 0 + Conversation Start + + cr7f7_blogHelperAgent + + 0 + 1 + \ No newline at end of file diff --git a/samples/mcs-BlogPostHelper/src/botcomponents/cr7f7_blogHelperAgent.topic.ConversationStart/data b/samples/mcs-BlogPostHelper/src/botcomponents/cr7f7_blogHelperAgent.topic.ConversationStart/data new file mode 100644 index 000000000..d1c6cd6d0 --- /dev/null +++ b/samples/mcs-BlogPostHelper/src/botcomponents/cr7f7_blogHelperAgent.topic.ConversationStart/data @@ -0,0 +1,12 @@ +kind: AdaptiveDialog +beginDialog: + kind: OnConversationStart + id: main + actions: + - kind: SendActivity + id: sendMessage_M0LuhV + activity: + text: + - Hello, I'm {System.Bot.Name}, a virtual assistant. Just so you are aware, I sometimes use AI to answer your questions. If you provided a website during creation, try asking me about it! Next try giving me some more knowledge by setting up generative AI. + speak: + - Hello and thank you for calling {System.Bot.Name}. Please note that some responses are generated by AI and may require verification for accuracy. How may I help you today? \ No newline at end of file diff --git a/samples/mcs-BlogPostHelper/src/botcomponents/cr7f7_blogHelperAgent.topic.EndofConversation/botcomponent.xml b/samples/mcs-BlogPostHelper/src/botcomponents/cr7f7_blogHelperAgent.topic.EndofConversation/botcomponent.xml new file mode 100644 index 000000000..0b9ca709e --- /dev/null +++ b/samples/mcs-BlogPostHelper/src/botcomponents/cr7f7_blogHelperAgent.topic.EndofConversation/botcomponent.xml @@ -0,0 +1,12 @@ + + 9 + This system topic is only triggered by a redirect action, +and guides the user through rating their conversation with the agent. + 0 + End of Conversation + + cr7f7_blogHelperAgent + + 0 + 1 + \ No newline at end of file diff --git a/samples/mcs-BlogPostHelper/src/botcomponents/cr7f7_blogHelperAgent.topic.EndofConversation/data b/samples/mcs-BlogPostHelper/src/botcomponents/cr7f7_blogHelperAgent.topic.EndofConversation/data new file mode 100644 index 000000000..a8ae38e2c --- /dev/null +++ b/samples/mcs-BlogPostHelper/src/botcomponents/cr7f7_blogHelperAgent.topic.EndofConversation/data @@ -0,0 +1,75 @@ +kind: AdaptiveDialog +startBehavior: CancelOtherTopics +beginDialog: + kind: OnSystemRedirect + id: main + actions: + - kind: Question + id: 41d42054-d4cb-4e90-b922-2b16b37fe379 + conversationOutcome: ResolvedImplied + alwaysPrompt: true + variable: init:Topic.SurveyResponse + prompt: Did that answer your question? + entity: BooleanPrebuiltEntity + + - kind: ConditionGroup + id: condition-0 + conditions: + - id: condition-0-item-0 + condition: =Topic.SurveyResponse = true + actions: + - kind: CSATQuestion + id: csat_1 + conversationOutcome: ResolvedConfirmed + + - kind: SendActivity + id: sendMessage_8r29O0 + activity: Thanks for your feedback. + + - kind: Question + id: question_1 + alwaysPrompt: true + variable: init:Topic.Continue + prompt: Can I help with anything else? + entity: BooleanPrebuiltEntity + + - kind: ConditionGroup + id: condition-1 + conditions: + - id: condition-1-item-0 + condition: =Topic.Continue = true + actions: + - kind: SendActivity + id: sendMessage_4eOE6h + activity: Go ahead. I'm listening. + + elseActions: + - kind: SendActivity + id: yHBz55 + activity: Ok, goodbye. + + - kind: EndConversation + id: jh1GMT + + elseActions: + - kind: Question + id: PM68ot + alwaysPrompt: true + variable: init:Topic.TryAgain + prompt: Sorry I wasn't able to help better. Would you like to try again? + entity: BooleanPrebuiltEntity + + - kind: ConditionGroup + id: KNxYBf + conditions: + - id: DPveFP + condition: =Topic.TryAgain = false + actions: + - kind: BeginDialog + id: cngqi4 + dialog: cr7f7_blogHelperAgent.topic.Escalate + + elseActions: + - kind: SendActivity + id: GrVHEW + activity: Go ahead. I'm listening. \ No newline at end of file diff --git a/samples/mcs-BlogPostHelper/src/botcomponents/cr7f7_blogHelperAgent.topic.Escalate/botcomponent.xml b/samples/mcs-BlogPostHelper/src/botcomponents/cr7f7_blogHelperAgent.topic.Escalate/botcomponent.xml new file mode 100644 index 000000000..e7165ad7d --- /dev/null +++ b/samples/mcs-BlogPostHelper/src/botcomponents/cr7f7_blogHelperAgent.topic.Escalate/botcomponent.xml @@ -0,0 +1,13 @@ + + 9 + This system topic is triggered when the user indicates they would like to speak to a representative. +You can configure how the agent will handle human hand-off scenarios in the agent settings.. +If your agent does not handle escalations, this topic should be disabled. + 0 + Escalate + + cr7f7_blogHelperAgent + + 0 + 1 + \ No newline at end of file diff --git a/samples/mcs-BlogPostHelper/src/botcomponents/cr7f7_blogHelperAgent.topic.Escalate/data b/samples/mcs-BlogPostHelper/src/botcomponents/cr7f7_blogHelperAgent.topic.Escalate/data new file mode 100644 index 000000000..5e3cab082 --- /dev/null +++ b/samples/mcs-BlogPostHelper/src/botcomponents/cr7f7_blogHelperAgent.topic.Escalate/data @@ -0,0 +1,60 @@ +kind: AdaptiveDialog +startBehavior: CancelOtherTopics +beginDialog: + kind: OnEscalate + id: main + intent: + displayName: Escalate + includeInOnSelectIntent: false + triggerQueries: + - Talk to agent + - Talk to a person + - Talk to someone + - Call back + - Call customer service + - Call me please + - Call support + - Call technical support + - Can an agent call me + - Can I call + - Can I get in touch with someone else + - Can I get real agent support + - Can I get transferred to a person to call + - Can I have a call in number Or can I be called + - Can I have a representative call me + - Can I schedule a call + - Can I speak to a representative + - Can I talk to a human + - Can I talk to a human assistant + - Can someone call me + - Chat with a human + - Chat with a representative + - Chat with agent + - Chat with someone please + - Connect me to a live agent + - Connect me to a person + - Could some one contact me by phone + - Customer agent + - Customer representative + - Customer service + - I need a manager to contact me + - I need customer service + - I need help from a person + - I need to speak with a live argent + - I need to talk to a specialist please + - I want to talk to customer service + - I want to proceed with live support + - I want to speak with a consultant + - I want to speak with a live tech + - I would like to speak with an associate + - I would like to talk to a technician + - Talk with tech support member + + actions: + - kind: SendActivity + id: sendMessage_s39DCt + conversationOutcome: Escalated + activity: |- + Escalating to a representative is not currently configured for this agent, however this is where the agent could provide information about how to get in touch with someone another way. + + Is there anything else I can help you with? \ No newline at end of file diff --git a/samples/mcs-BlogPostHelper/src/botcomponents/cr7f7_blogHelperAgent.topic.Fallback/botcomponent.xml b/samples/mcs-BlogPostHelper/src/botcomponents/cr7f7_blogHelperAgent.topic.Fallback/botcomponent.xml new file mode 100644 index 000000000..5320f1872 --- /dev/null +++ b/samples/mcs-BlogPostHelper/src/botcomponents/cr7f7_blogHelperAgent.topic.Fallback/botcomponent.xml @@ -0,0 +1,11 @@ + + 9 + This system topic triggers when the user's utterance does not match any existing topics. + 0 + Fallback + + cr7f7_blogHelperAgent + + 0 + 1 + \ No newline at end of file diff --git a/samples/mcs-BlogPostHelper/src/botcomponents/cr7f7_blogHelperAgent.topic.Fallback/data b/samples/mcs-BlogPostHelper/src/botcomponents/cr7f7_blogHelperAgent.topic.Fallback/data new file mode 100644 index 000000000..7ac34fab2 --- /dev/null +++ b/samples/mcs-BlogPostHelper/src/botcomponents/cr7f7_blogHelperAgent.topic.Fallback/data @@ -0,0 +1,19 @@ +kind: AdaptiveDialog +beginDialog: + kind: OnUnknownIntent + id: main + actions: + - kind: ConditionGroup + id: conditionGroup_LktzXw + conditions: + - id: conditionItem_tlGIVo + condition: =System.FallbackCount < 3 + actions: + - kind: SendActivity + id: sendMessage_QZreqo + activity: I'm sorry, I'm not sure how to help with that. Can you try rephrasing? + + elseActions: + - kind: BeginDialog + id: 5aXj5M + dialog: cr7f7_blogHelperAgent.topic.Escalate \ No newline at end of file diff --git a/samples/mcs-BlogPostHelper/src/botcomponents/cr7f7_blogHelperAgent.topic.Goodbye/botcomponent.xml b/samples/mcs-BlogPostHelper/src/botcomponents/cr7f7_blogHelperAgent.topic.Goodbye/botcomponent.xml new file mode 100644 index 000000000..1b59b8f58 --- /dev/null +++ b/samples/mcs-BlogPostHelper/src/botcomponents/cr7f7_blogHelperAgent.topic.Goodbye/botcomponent.xml @@ -0,0 +1,11 @@ + + 9 + This topic triggers when the user says goodbye. By default, it does not end the conversation. If you would like to end the conversation when the user says goodbye, you can add an "End of Conversation" action to this topic, or redirect to the "End of Conversation" system topic. + 0 + Goodbye + + cr7f7_blogHelperAgent + + 0 + 1 + \ No newline at end of file diff --git a/samples/mcs-BlogPostHelper/src/botcomponents/cr7f7_blogHelperAgent.topic.Goodbye/data b/samples/mcs-BlogPostHelper/src/botcomponents/cr7f7_blogHelperAgent.topic.Goodbye/data new file mode 100644 index 000000000..f91603951 --- /dev/null +++ b/samples/mcs-BlogPostHelper/src/botcomponents/cr7f7_blogHelperAgent.topic.Goodbye/data @@ -0,0 +1,39 @@ +kind: AdaptiveDialog +startBehavior: CancelOtherTopics +beginDialog: + kind: OnRecognizedIntent + id: main + intent: + displayName: Goodbye + includeInOnSelectIntent: false + triggerQueries: + - Bye + - Bye for now + - Bye now + - Good bye + - No thank you. Goodbye. + - See you later + + actions: + - kind: Question + id: question_zf2HhP + variable: Topic.EndConversation + prompt: Would you like to end our conversation? + entity: BooleanPrebuiltEntity + + - kind: ConditionGroup + id: condition_DGc1Wy + conditions: + - id: condition_DGc1Wy-item-0 + condition: =Topic.EndConversation = true + actions: + - kind: BeginDialog + id: dn94DC + dialog: cr7f7_blogHelperAgent.topic.EndofConversation + + - id: condition_DGc1Wy-item-1 + condition: =Topic.EndConversation = false + actions: + - kind: SendActivity + id: sendMessage_LdLhmf + activity: Go ahead. I'm listening. \ No newline at end of file diff --git a/samples/mcs-BlogPostHelper/src/botcomponents/cr7f7_blogHelperAgent.topic.Greeting/botcomponent.xml b/samples/mcs-BlogPostHelper/src/botcomponents/cr7f7_blogHelperAgent.topic.Greeting/botcomponent.xml new file mode 100644 index 000000000..f7d3dd2ac --- /dev/null +++ b/samples/mcs-BlogPostHelper/src/botcomponents/cr7f7_blogHelperAgent.topic.Greeting/botcomponent.xml @@ -0,0 +1,11 @@ + + 9 + This topic is triggered when the user greets the agent. + 0 + Greeting + + cr7f7_blogHelperAgent + + 0 + 1 + \ No newline at end of file diff --git a/samples/mcs-BlogPostHelper/src/botcomponents/cr7f7_blogHelperAgent.topic.Greeting/data b/samples/mcs-BlogPostHelper/src/botcomponents/cr7f7_blogHelperAgent.topic.Greeting/data new file mode 100644 index 000000000..ce02e8fbc --- /dev/null +++ b/samples/mcs-BlogPostHelper/src/botcomponents/cr7f7_blogHelperAgent.topic.Greeting/data @@ -0,0 +1,25 @@ +kind: AdaptiveDialog +beginDialog: + kind: OnRecognizedIntent + id: main + intent: + displayName: Greeting + includeInOnSelectIntent: false + triggerQueries: + - Good afternoon + - Good morning + - Hello + - Hey + - Hi + + actions: + - kind: SendActivity + id: sendMessage_abmysR + activity: + text: + - Hello, how can I help you today? + speak: + - Hello, how can I help? + + - kind: CancelAllDialogs + id: cancelAllDialogs_01At22 \ No newline at end of file diff --git a/samples/mcs-BlogPostHelper/src/botcomponents/cr7f7_blogHelperAgent.topic.MultipleTopicsMatched/botcomponent.xml b/samples/mcs-BlogPostHelper/src/botcomponents/cr7f7_blogHelperAgent.topic.MultipleTopicsMatched/botcomponent.xml new file mode 100644 index 000000000..ee7d92cf3 --- /dev/null +++ b/samples/mcs-BlogPostHelper/src/botcomponents/cr7f7_blogHelperAgent.topic.MultipleTopicsMatched/botcomponent.xml @@ -0,0 +1,11 @@ + + 9 + This system topic triggers when the agent matches multiple Topics with the incoming message and needs to clarify which one should be triggered. + 0 + Multiple Topics Matched + + cr7f7_blogHelperAgent + + 0 + 1 + \ No newline at end of file diff --git a/samples/mcs-BlogPostHelper/src/botcomponents/cr7f7_blogHelperAgent.topic.MultipleTopicsMatched/data b/samples/mcs-BlogPostHelper/src/botcomponents/cr7f7_blogHelperAgent.topic.MultipleTopicsMatched/data new file mode 100644 index 000000000..0fbd798ec --- /dev/null +++ b/samples/mcs-BlogPostHelper/src/botcomponents/cr7f7_blogHelperAgent.topic.MultipleTopicsMatched/data @@ -0,0 +1,43 @@ +kind: AdaptiveDialog +beginDialog: + kind: OnSelectIntent + id: main + triggerBehavior: Always + actions: + - kind: SetVariable + id: setVariable_M6434i + variable: init:Topic.IntentOptions + value: =System.Recognizer.IntentOptions + + - kind: SetTextVariable + id: setTextVariable_0 + variable: Topic.NoneOfTheseDisplayName + value: None of these + + - kind: EditTable + id: sendMessage_g5Ls09 + changeType: Add + itemsVariable: Topic.IntentOptions + value: "={ DisplayName: Topic.NoneOfTheseDisplayName, TopicId: \"NoTopic\", TriggerId: \"NoTrigger\", Score: 1.0 }" + + - kind: Question + id: question_zf2HhP + interruptionPolicy: + allowInterruption: false + + alwaysPrompt: true + variable: System.Recognizer.SelectedIntent + prompt: "To clarify, did you mean:" + entity: + kind: DynamicClosedListEntity + items: =Topic.IntentOptions + + - kind: ConditionGroup + id: conditionGroup_60PuXb + conditions: + - id: conditionItem_rs7GgM + condition: =System.Recognizer.SelectedIntent.TopicId = "NoTopic" + actions: + - kind: ReplaceDialog + id: YZXRDb + dialog: cr7f7_blogHelperAgent.topic.Fallback \ No newline at end of file diff --git a/samples/mcs-BlogPostHelper/src/botcomponents/cr7f7_blogHelperAgent.topic.OnError/botcomponent.xml b/samples/mcs-BlogPostHelper/src/botcomponents/cr7f7_blogHelperAgent.topic.OnError/botcomponent.xml new file mode 100644 index 000000000..93fe0fba7 --- /dev/null +++ b/samples/mcs-BlogPostHelper/src/botcomponents/cr7f7_blogHelperAgent.topic.OnError/botcomponent.xml @@ -0,0 +1,11 @@ + + 9 + This system topic triggers when the agent encounters an error. When using the test chat pane, the full error description is displayed. + 0 + On Error + + cr7f7_blogHelperAgent + + 0 + 1 + \ No newline at end of file diff --git a/samples/mcs-BlogPostHelper/src/botcomponents/cr7f7_blogHelperAgent.topic.OnError/data b/samples/mcs-BlogPostHelper/src/botcomponents/cr7f7_blogHelperAgent.topic.OnError/data new file mode 100644 index 000000000..29bec5995 --- /dev/null +++ b/samples/mcs-BlogPostHelper/src/botcomponents/cr7f7_blogHelperAgent.topic.OnError/data @@ -0,0 +1,45 @@ +kind: AdaptiveDialog +startBehavior: UseLatestPublishedContentAndCancelOtherTopics +beginDialog: + kind: OnError + id: main + actions: + - kind: SetVariable + id: setVariable_timestamp + variable: init:Topic.CurrentTime + value: =Text(Now(), DateTimeFormat.UTC) + + - kind: ConditionGroup + id: condition_1 + conditions: + - id: bL4wmY + condition: =System.Conversation.InTestMode = true + actions: + - kind: SendActivity + id: sendMessage_XJBYMo + activity: |- + Error Message: {System.Error.Message} + Error Code: {System.Error.Code} + Conversation Id: {System.Conversation.Id} + Time (UTC): {Topic.CurrentTime} + + elseActions: + - kind: SendActivity + id: sendMessage_dZ0gaF + activity: + text: + - |- + An error has occurred. + Error code: {System.Error.Code} + Conversation Id: {System.Conversation.Id} + Time (UTC): {Topic.CurrentTime}. + speak: + - An error has occurred, please try again. + + - kind: LogCustomTelemetryEvent + id: 9KwEAn + eventName: OnErrorLog + properties: "={ErrorMessage: System.Error.Message, ErrorCode: System.Error.Code, TimeUTC: Topic.CurrentTime, ConversationId: System.Conversation.Id}" + + - kind: CancelAllDialogs + id: NW7NyY \ No newline at end of file diff --git a/samples/mcs-BlogPostHelper/src/botcomponents/cr7f7_blogHelperAgent.topic.ResetConversation/botcomponent.xml b/samples/mcs-BlogPostHelper/src/botcomponents/cr7f7_blogHelperAgent.topic.ResetConversation/botcomponent.xml new file mode 100644 index 000000000..d21b91093 --- /dev/null +++ b/samples/mcs-BlogPostHelper/src/botcomponents/cr7f7_blogHelperAgent.topic.ResetConversation/botcomponent.xml @@ -0,0 +1,10 @@ + + 9 + 0 + Reset Conversation + + cr7f7_blogHelperAgent + + 0 + 1 + \ No newline at end of file diff --git a/samples/mcs-BlogPostHelper/src/botcomponents/cr7f7_blogHelperAgent.topic.ResetConversation/data b/samples/mcs-BlogPostHelper/src/botcomponents/cr7f7_blogHelperAgent.topic.ResetConversation/data new file mode 100644 index 000000000..3d427e1db --- /dev/null +++ b/samples/mcs-BlogPostHelper/src/botcomponents/cr7f7_blogHelperAgent.topic.ResetConversation/data @@ -0,0 +1,16 @@ +kind: AdaptiveDialog +startBehavior: UseLatestPublishedContentAndCancelOtherTopics +beginDialog: + kind: OnSystemRedirect + id: main + actions: + - kind: SendActivity + id: sendMessage_OPsT1O + activity: What can I help you with? + + - kind: ClearAllVariables + id: clearAllVariables_73bTFR + variables: ConversationScopedVariables + + - kind: CancelAllDialogs + id: cancelAllDialogs_12Gt21 \ No newline at end of file diff --git a/samples/mcs-BlogPostHelper/src/botcomponents/cr7f7_blogHelperAgent.topic.Search/botcomponent.xml b/samples/mcs-BlogPostHelper/src/botcomponents/cr7f7_blogHelperAgent.topic.Search/botcomponent.xml new file mode 100644 index 000000000..d590c7d29 --- /dev/null +++ b/samples/mcs-BlogPostHelper/src/botcomponents/cr7f7_blogHelperAgent.topic.Search/botcomponent.xml @@ -0,0 +1,11 @@ + + 9 + Create generative answers from knowledge sources. + 0 + Conversational boosting + + cr7f7_blogHelperAgent + + 0 + 1 + \ No newline at end of file diff --git a/samples/mcs-BlogPostHelper/src/botcomponents/cr7f7_blogHelperAgent.topic.Search/data b/samples/mcs-BlogPostHelper/src/botcomponents/cr7f7_blogHelperAgent.topic.Search/data new file mode 100644 index 000000000..9081f12fe --- /dev/null +++ b/samples/mcs-BlogPostHelper/src/botcomponents/cr7f7_blogHelperAgent.topic.Search/data @@ -0,0 +1,20 @@ +kind: AdaptiveDialog +beginDialog: + kind: OnUnknownIntent + id: main + priority: -1 + actions: + - kind: SearchAndSummarizeContent + id: search-content + variable: Topic.Answer + userInput: =System.Activity.Text + + - kind: ConditionGroup + id: has-answer-conditions + conditions: + - id: has-answer + condition: =!IsBlank(Topic.Answer) + actions: + - kind: EndDialog + id: end-topic + clearTopicQueue: true \ No newline at end of file diff --git a/samples/mcs-BlogPostHelper/src/botcomponents/cr7f7_blogHelperAgent.topic.Signin/botcomponent.xml b/samples/mcs-BlogPostHelper/src/botcomponents/cr7f7_blogHelperAgent.topic.Signin/botcomponent.xml new file mode 100644 index 000000000..ebdec740e --- /dev/null +++ b/samples/mcs-BlogPostHelper/src/botcomponents/cr7f7_blogHelperAgent.topic.Signin/botcomponent.xml @@ -0,0 +1,11 @@ + + 9 + This system topic triggers when the agent needs to sign in the user or require the user to sign in + 0 + Sign in + + cr7f7_blogHelperAgent + + 0 + 1 + \ No newline at end of file diff --git a/samples/mcs-BlogPostHelper/src/botcomponents/cr7f7_blogHelperAgent.topic.Signin/data b/samples/mcs-BlogPostHelper/src/botcomponents/cr7f7_blogHelperAgent.topic.Signin/data new file mode 100644 index 000000000..c4067bc3a --- /dev/null +++ b/samples/mcs-BlogPostHelper/src/botcomponents/cr7f7_blogHelperAgent.topic.Signin/data @@ -0,0 +1,19 @@ +kind: AdaptiveDialog +beginDialog: + kind: OnSignIn + id: main + actions: + - kind: ConditionGroup + id: conditionGroup_ypjGKL + conditions: + - id: conditionItem_7XYIIR + condition: =System.SignInReason = SignInReason.SignInRequired + actions: + - kind: SendActivity + id: sendMessage_1jHUNO + activity: Hello! To be able to help you, I'll need you to sign in. + + - kind: OAuthInput + id: gOjhZA + title: Login + text: To continue, please login \ No newline at end of file diff --git a/samples/mcs-BlogPostHelper/src/botcomponents/cr7f7_blogHelperAgent.topic.StartOver/botcomponent.xml b/samples/mcs-BlogPostHelper/src/botcomponents/cr7f7_blogHelperAgent.topic.StartOver/botcomponent.xml new file mode 100644 index 000000000..0c144544d --- /dev/null +++ b/samples/mcs-BlogPostHelper/src/botcomponents/cr7f7_blogHelperAgent.topic.StartOver/botcomponent.xml @@ -0,0 +1,10 @@ + + 9 + 0 + Start Over + + cr7f7_blogHelperAgent + + 0 + 1 + \ No newline at end of file diff --git a/samples/mcs-BlogPostHelper/src/botcomponents/cr7f7_blogHelperAgent.topic.StartOver/data b/samples/mcs-BlogPostHelper/src/botcomponents/cr7f7_blogHelperAgent.topic.StartOver/data new file mode 100644 index 000000000..badd72d7f --- /dev/null +++ b/samples/mcs-BlogPostHelper/src/botcomponents/cr7f7_blogHelperAgent.topic.StartOver/data @@ -0,0 +1,35 @@ +kind: AdaptiveDialog +beginDialog: + kind: OnRecognizedIntent + id: main + intent: + displayName: Start Over + includeInOnSelectIntent: false + triggerQueries: + - let's begin again + - start over + - start again + - restart + + actions: + - kind: Question + id: question_zguoVV + alwaysPrompt: false + variable: init:Topic.Confirm + prompt: Are you sure you want to restart the conversation? + entity: BooleanPrebuiltEntity + + - kind: ConditionGroup + id: conditionGroup_lvx2zV + conditions: + - id: conditionItem_sVQtHa + condition: =Topic.Confirm = true + actions: + - kind: BeginDialog + id: 0YKYsy + dialog: cr7f7_blogHelperAgent.topic.ResetConversation + + elseActions: + - kind: SendActivity + id: sendMessage_lk2CyQ + activity: Ok. Let's carry on. \ No newline at end of file diff --git a/samples/mcs-BlogPostHelper/src/botcomponents/cr7f7_blogHelperAgent.topic.ThankYou/botcomponent.xml b/samples/mcs-BlogPostHelper/src/botcomponents/cr7f7_blogHelperAgent.topic.ThankYou/botcomponent.xml new file mode 100644 index 000000000..ad2ef47b3 --- /dev/null +++ b/samples/mcs-BlogPostHelper/src/botcomponents/cr7f7_blogHelperAgent.topic.ThankYou/botcomponent.xml @@ -0,0 +1,11 @@ + + 9 + This topic triggers when the user says thank you. + 0 + Thank you + + cr7f7_blogHelperAgent + + 0 + 1 + \ No newline at end of file diff --git a/samples/mcs-BlogPostHelper/src/botcomponents/cr7f7_blogHelperAgent.topic.ThankYou/data b/samples/mcs-BlogPostHelper/src/botcomponents/cr7f7_blogHelperAgent.topic.ThankYou/data new file mode 100644 index 000000000..9b816ed3d --- /dev/null +++ b/samples/mcs-BlogPostHelper/src/botcomponents/cr7f7_blogHelperAgent.topic.ThankYou/data @@ -0,0 +1,17 @@ +kind: AdaptiveDialog +beginDialog: + kind: OnRecognizedIntent + id: main + intent: + displayName: Thank you + includeInOnSelectIntent: false + triggerQueries: + - thanks + - thank you + - thanks so much + - ty + + actions: + - kind: SendActivity + id: sendMessage_9iz6v7 + activity: You're welcome. \ No newline at end of file diff --git a/samples/mcs-BlogPostHelper/src/bots/cr7f7_blogHelperAgent/bot.xml b/samples/mcs-BlogPostHelper/src/bots/cr7f7_blogHelperAgent/bot.xml new file mode 100644 index 000000000..8c54ac650 --- /dev/null +++ b/samples/mcs-BlogPostHelper/src/bots/cr7f7_blogHelperAgent/bot.xml @@ -0,0 +1,12 @@ + + 2 + 1 + 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 + 0 + 1033 + Blog helper agent (CS) + 0 + {"lastFinishedPublishOperation":{"$kind":"PublishResultDetails","operationStart":"2026-02-15T12:15:15.4125417Z","operationEnd":"2026-02-15T12:15:24.2164594Z","status":"Succeeded"},"contentVersion":2,"$kind":"BotSynchronizationDetails","lastPublishedDetails":{"$kind":"SuccessfulPublishResultDetails","authenticationMode":"Integrated"},"lastPublishedOnUtc":"2026-02-15T12:15:20.2832058","currentSynchronizationState":{"$kind":"SynchronizationState","botRegistration":{"$kind":"BotRegistrationDetails","botRegistrationIdConsumptionTime":"2026-02-15T12:15:01Z","applicationId":"d78436b3-f9c3-4b24-8296-01c086a88dfc","isAppAvailableInTenant":true},"provisioningStatus":"Provisioned","state":"Synchronizing"},"lastSynchronizedOnUtc":"2026-02-15T12:15:13.3045903Z"} + + 4 + \ No newline at end of file diff --git a/samples/mcs-BlogPostHelper/src/bots/cr7f7_blogHelperAgent/configuration.json b/samples/mcs-BlogPostHelper/src/bots/cr7f7_blogHelperAgent/configuration.json new file mode 100644 index 000000000..615798ad0 --- /dev/null +++ b/samples/mcs-BlogPostHelper/src/bots/cr7f7_blogHelperAgent/configuration.json @@ -0,0 +1,33 @@ +{ + "$kind": "BotConfiguration", + "channels": [ + { + "$kind": "ChannelDefinition", + "channelId": "MsTeams" + } + ], + "settings": { + "GenerativeActionsEnabled": true + }, + "isAgentConnectable": true, + "gPTSettings": { + "$kind": "GPTSettings", + "defaultSchemaName": "cr7f7_blogHelperAgent.gpt.default" + }, + "isLightweightBot": false, + "aISettings": { + "$kind": "AISettings", + "useModelKnowledge": true, + "isFileAnalysisEnabled": true, + "isSemanticSearchEnabled": true, + "contentModeration": "High", + "optInUseLatestModels": false + }, + "recognizer": { + "$kind": "GenerativeAIRecognizer" + }, + "analyticsSettings": { + "$kind": "AnalyticsSettings", + "includeNodeLevelDetailsInTranscript": true + } +} \ No newline at end of file diff --git a/templates/README-template.md b/templates/da-declarative-agent/README-template.md similarity index 91% rename from templates/README-template.md rename to templates/da-declarative-agent/README-template.md index a6f04ca3b..3ca4aaea8 100644 --- a/templates/README-template.md +++ b/templates/da-declarative-agent/README-template.md @@ -1,3 +1,7 @@ + + # Title of the sample -* Clone this repository (or [download this solution as a .ZIP file](https://pnp.github.io/download-partial/?url=https://github.com/pnp/copilot-pro-dev-samples/tree/main/samples/YOUR-SOLUTION-NAME) then unzip it) +* Clone this repository (or [download this solution as a .ZIP file](https://pnp.github.io/download-partial/?url=https://github.com/pnp/copilot-pro-dev-samples/tree/main/samples/YOUR_AGENT_FOLDER) then unzip it) * ...provide further instructions ## Features @@ -114,7 +117,7 @@ Or: We do not support samples, but this community is always willing to help, and we want to improve these samples. We use GitHub to track issues, which makes it easy for community members to volunteer their time and help resolve issues. -You can try looking at [issues related to this sample](https://github.com/pnp/copilot-pro-dev-samples/issues?q=label%3A%22sample%3A%20YOUR-SOLUTION-NAME%22) to see if anybody else is having the same issues. +You can try looking at [issues related to this sample](https://github.com/pnp/copilot-pro-dev-samples/issues?q=label%3A%22sample%3A%20YOUR_AGENT_FOLDER%22) to see if anybody else is having the same issues. If you encounter any issues using this sample, [create a new issue](https://github.com/pnp/copilot-pro-dev-samples/issues/new). @@ -124,4 +127,4 @@ Finally, if you have an idea for improvement, [make a suggestion](https://github **THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT.** -![](https://m365-visitor-stats.azurewebsites.net/copilot-pro-dev-samples/OUR-SAMPLE-FOLDER-NAME) +![](https://m365-visitor-stats.azurewebsites.net/copilot-pro-dev-samples/YOUR_AGENT_FOLDER) diff --git a/templates/da-declarative-agent/assets/pending-image.png b/templates/da-declarative-agent/assets/pending-image.png new file mode 100644 index 000000000..aaf8e8445 Binary files /dev/null and b/templates/da-declarative-agent/assets/pending-image.png differ diff --git a/templates/sample-template.json b/templates/da-declarative-agent/assets/template-sample.json similarity index 86% rename from templates/sample-template.json rename to templates/da-declarative-agent/assets/template-sample.json index 8d373c2b5..76c83d0b1 100644 --- a/templates/sample-template.json +++ b/templates/da-declarative-agent/assets/template-sample.json @@ -1,16 +1,16 @@ [ { - "name": "pnp-copilot-pro-dev-YOUR-SAMPLE-NAME", + "name": "pnp-copilot-pro-dev-YOUR_AGENT_FOLDER", "source": "pnp", "title": "YOUR-SAMPLE-TITLE", "shortDescription": "YOUR-SHORT-DESCRIPTION", - "url": "https://github.com/pnp/copilot-pro-dev-samples/tree/main/samples/YOUR-SAMPLE-NAME", - "downloadUrl": "https://pnp.github.io/download-partial/?url=https://github.com/pnp/copilot-pro-dev-samples/tree/main/samples/YOUR-SAMPLE-NAME", + "url": "https://github.com/pnp/copilot-pro-dev-samples/tree/main/samples/YOUR_AGENT_FOLDER", + "downloadUrl": "https://pnp.github.io/download-partial/?url=https://github.com/pnp/copilot-pro-dev-samples/tree/main/samples/YOUR_AGENT_FOLDER", "longDescription": [ "YOUR-SHORT-DESCRIPTION" ], - "creationDateTime": "2024-10-03", - "updateDateTime": "2024-10-03", + "creationDateTime": "2026-02-14", + "updateDateTime": "2026-02-14", "products": [ "Microsoft 365 Copilot" ], @@ -36,7 +36,7 @@ { "type": "image", "order": 100, - "url": "https://github.com/pnp/copilot-pro-dev-samples/raw/main/samples/YOUR-SAMPLE-NAME/assets/YOUR-IMAGE-NAME-HERE", + "url": "https://github.com/pnp/copilot-pro-dev-samples/raw/main/samples/YOUR_AGENT_FOLDER/assets/YOUR-IMAGE-NAME-HERE", "alt": "Declarative agent doing x" }, { diff --git a/templates/mcs-copilot-studio/README-template.md b/templates/mcs-copilot-studio/README-template.md new file mode 100644 index 000000000..fdb406824 --- /dev/null +++ b/templates/mcs-copilot-studio/README-template.md @@ -0,0 +1,147 @@ + + +# Title of the sample + + + +## Summary + +Short summary on the contents of the sample. What does the agent do? How does it help users? What type of skills and knowledge does it have? + + + +## Contributors + + +* [Author Name](LinkToYourGitHubProfile) + +## Version history + +Version|Date|Comments +-------|----|-------- +1.0|Feburary 01, 2026|Initial release + +## Prerequisites + +* Microsoft 365 tenant with Microsoft 365 Copilot +* ...add more prerequisites + +## Minimal path to awesome + + + +### Copilot Studio using Solution Import + +This sample uses the Power Platform CLI to import samples, for documenation and installation instructions please visit: [What is Microsoft Power Platform CLI? | Microsoft Learn](https://learn.microsoft.com/en-us/power-platform/developer/cli/introduction) + +- Ensure you are authenticated with ```pac auth``` + + +```powershell + +# Package up the solution +pac solution pack --zipfile .zip --folder ./mcs-YOUR_AGENT_FOLDER/src + +# Import into Power Platform (default enviroment) +pac solution import --path .zip + +# Import into specific environment +pac env list +pac solution import --path .zip -env + +``` + +That's it. + +## Features + +Extended description of the contents of the sample. What elements does it include? What concepts does illustrate? + +Using this sample you can extend Microsoft 365 Copilot with an agent that: + +* objective 1 +* objective 2 +* objective 3 + + + +## Help + + + +We do not support samples, but this community is always willing to help, and we want to improve these samples. We use GitHub to track issues, which makes it easy for community members to volunteer their time and help resolve issues. + +You can try looking at [issues related to this sample](https://github.com/pnp/copilot-pro-dev-samples/issues?q=label%3A%22sample%3A%20YOUR_AGENT_FOLDER%22) to see if anybody else is having the same issues. + +If you encounter any issues using this sample, [create a new issue](https://github.com/pnp/copilot-pro-dev-samples/issues/new). + +Finally, if you have an idea for improvement, [make a suggestion](https://github.com/pnp/copilot-pro-dev-samples/issues/new). + +## Disclaimer + +**THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT.** + +![](https://m365-visitor-stats.azurewebsites.net/copilot-pro-dev-samples/YOUR_AGENT_FOLDER) diff --git a/templates/mcs-copilot-studio/assets/pending-image.png b/templates/mcs-copilot-studio/assets/pending-image.png new file mode 100644 index 000000000..aaf8e8445 Binary files /dev/null and b/templates/mcs-copilot-studio/assets/pending-image.png differ diff --git a/templates/mcs-copilot-studio/assets/template-sample.json b/templates/mcs-copilot-studio/assets/template-sample.json new file mode 100644 index 000000000..a7c3d481d --- /dev/null +++ b/templates/mcs-copilot-studio/assets/template-sample.json @@ -0,0 +1,70 @@ +[ + { + "name": "pnp-copilot-pro-dev-YOUR_AGENT_FOLDER", + "source": "pnp", + "title": "YOUR-SAMPLE-TITLE", + "shortDescription": "YOUR-SHORT-DESCRIPTION", + "url": "https://github.com/pnp/copilot-pro-dev-samples/tree/main/samples/YOUR_AGENT_FOLDER", + "downloadUrl": "https://pnp.github.io/download-partial/?url=https://github.com/pnp/copilot-pro-dev-samples/tree/main/samples/YOUR_AGENT_FOLDER", + "longDescription": [ + "YOUR-SHORT-DESCRIPTION" + ], + "creationDateTime": "2026-02-14", + "updateDateTime": "2026-02-14", + "products": [ + "Microsoft 365 Copilot", + "Microsoft Copilot Studio" + ], + "metadata": [ + { + "key": "PLATFORM", + "value": "Copilot Studio" + }, + { + "key": "LANGUAGE", + "value": "None" + }, + { + "key": "API-PLUGIN", + "value": "No" + }, + { + "key": "GRAPH-CONNECTOR", + "value": "No" + } + ], + "thumbnails": [ + { + "type": "image", + "order": 100, + "url": "https://github.com/pnp/copilot-pro-dev-samples/raw/main/samples/YOUR_AGENT_FOLDER/assets/YOUR-IMAGE-NAME-HERE", + "alt": "Copilot Studio agent doing x" + }, + { + "type": "video", + "order": 101, + "url": "https://www.youtube.com/embed/FS-_0KENJkI", + "alt": "Copilot Studio agent doing x" + } + ], + "authors": [ + { + "gitHubAccount": "YOUR-GITHUB-ACCOUNT", + "pictureUrl": "https://github.com/YOUR-GITHUB-ACCOUNT.png", + "name": "YOUR-NAME" + } + ], + "references": [ + { + "name": "Microsoft 365 Copilot extensibility", + "description": "Learn more about what Microsoft 365 Copilot and how you can extend it.", + "url": "https://learn.microsoft.com/microsoft-365-copilot/extensibility/" + }, + { + "name": "Microsoft Copilot Studio", + "description": "Discover how to build AI-driven agents and workflows easily with Microsoft Copilot Studio with online training courses, docs, and videos. Learn how to quickly and simply integrate chat into your website.", + "url": "https://learn.microsoft.com/en-us/microsoft-copilot-studio/" + } + ] + } +] \ No newline at end of file