From 258b9d81a29fb1e713ed0627b8ece72d815490e4 Mon Sep 17 00:00:00 2001 From: Tien Suwandy Date: Tue, 11 May 2021 21:46:40 -0700 Subject: [PATCH] Orchestrator samples reorganization (#6289) * Orchestrator reorganization 1. Moved ModelTuning from botbuilder-samples repo 2. Delete OrchestratorDispatch Composer sample (moved to botbuilder-samples repo) * Update FAQ.md --- Orchestrator/README.md | 2 +- .../Samples/CLI/ModelTuning/README.md | 159 + .../Samples/CLI/ModelTuning/common.fixed.lu | 50 + .../Samples/CLI/ModelTuning/common.lu | 45 + .../Samples/CLI/ModelTuning/common.test.lu | 31 + .../Samples/CLI/ModelTuning/comparedLU.png | Bin 0 -> 216746 bytes Orchestrator/Samples/CLI/ModelTuning/demo.cmd | 84 + .../Samples/CLI/ModelTuning/reportafter.png | Bin 0 -> 15534 bytes .../Samples/CLI/ModelTuning/reportbefore.png | Bin 0 -> 40071 bytes .../Composer/OrchestratorDispatch/.gitignore | 2 - .../OrchestratorDispatch/BotReadMe.md | 27 - .../Controllers/BotController.cs | 76 - .../Controllers/SkillController.cs | 62 - .../OrchestratorDispatch/Nuget.config | 7 - .../OrchestratorDispatch.botproj | 11 - .../OrchestratorDispatch.csproj | 18 - .../OrchestratorDispatch.dialog | 277 - .../Composer/OrchestratorDispatch/Program.cs | 33 - .../Properties/launchSettings.json | 27 - .../Composer/OrchestratorDispatch/README.md | 52 - ...function-template-with-preexisting-rg.json | 355 - .../new-rg-parameters.json | 42 - .../preexisting-rg-parameters.json | 39 - .../DeploymentTemplates/qna-template.json | 217 - .../template-with-new-rg.json | 183 - .../template-with-preexisting-rg.json | 391 - .../OrchestratorDispatch/Scripts/README.md | 193 - .../OrchestratorDispatch/Scripts/deploy.ps1 | 241 - .../OrchestratorDispatch/Scripts/package.json | 23 - .../Scripts/provisionComposer.js | 818 -- .../Composer/OrchestratorDispatch/Startup.cs | 56 - .../PartnersDialog/PartnersDialog.dialog | 244 - .../en-us/PartnersDialog.en-us.qna | 0 .../en-us/PartnersDialog.en-us.lg | 71 - .../en-us/PartnersDialog.en-us.lu | 54 - .../PartnersDialog.en-us.lu.dialog | 8 - .../recognizers/PartnersDialog.lu.dialog | 8 - .../recognizers/PartnersDialog.lu.qna.dialog | 6 - .../knowledge-base/en-us/emptyBot.en-us.qna | 0 .../generated/OrchestratorDispatch.en-us.blu | 35 - .../OrchestratorDispatch.en-us.lu | 75 - .../OrchestratorDispatch.en-us.qna | 69 - .../interruption/PartnersDialog.en-us.lu | 98 - .../interruption/PartnersDialog.en-us.qna | 62 - .../luis.settings.composer.westus.json | 7 - .../generated/orchestrator.settings.json | 10 - .../qnamaker.settings.composer.westus.json | 7 - .../en-us/OrchestratorDispatch.en-us.qna | 1 - .../source/ComposerKB.source.en-us.qna | 23 - .../en-us/OrchestratorDispatch.en-us.lg | 51 - .../language-generation/en-us/common.en-us.lg | 2 - .../en-us/OrchestratorDispatch.en-us.lu | 30 - .../create-azure-resource-command-line.png | Bin 13842 -> 0 bytes .../OrchestratorDispatch/media/diagram.png | Bin 60091 -> 0 bytes .../media/publish-az-login.png | Bin 16726 -> 0 bytes .../OrchestratorDispatch.en-us.lu.dialog | 7 - .../OrchestratorDispatch.en-us.qna.dialog | 7 - .../OrchestratorDispatch.lu.dialog | 8 - .../OrchestratorDispatch.lu.qna.dialog | 7 - .../OrchestratorDispatch.qna.dialog | 8 - .../OrchestratorDispatch/schemas/readme.md | 98 - .../OrchestratorDispatch/schemas/sdk.schema | 10398 ---------------- .../OrchestratorDispatch/schemas/sdk.uischema | 1409 --- .../schemas/update-schema.ps1 | 27 - .../schemas/update-schema.sh | 31 - .../settings/cross-train.config.json | 23 - .../OrchestratorDispatch/wwwroot/default.htm | 364 - Orchestrator/Samples/README.md | 4 - Orchestrator/docs/BFOrchestratorUsage.md | 2 +- Orchestrator/docs/FAQ.md | 2 +- 70 files changed, 372 insertions(+), 16405 deletions(-) create mode 100644 Orchestrator/Samples/CLI/ModelTuning/README.md create mode 100644 Orchestrator/Samples/CLI/ModelTuning/common.fixed.lu create mode 100644 Orchestrator/Samples/CLI/ModelTuning/common.lu create mode 100644 Orchestrator/Samples/CLI/ModelTuning/common.test.lu create mode 100644 Orchestrator/Samples/CLI/ModelTuning/comparedLU.png create mode 100644 Orchestrator/Samples/CLI/ModelTuning/demo.cmd create mode 100644 Orchestrator/Samples/CLI/ModelTuning/reportafter.png create mode 100644 Orchestrator/Samples/CLI/ModelTuning/reportbefore.png delete mode 100644 Orchestrator/Samples/Composer/OrchestratorDispatch/.gitignore delete mode 100644 Orchestrator/Samples/Composer/OrchestratorDispatch/BotReadMe.md delete mode 100644 Orchestrator/Samples/Composer/OrchestratorDispatch/Controllers/BotController.cs delete mode 100644 Orchestrator/Samples/Composer/OrchestratorDispatch/Controllers/SkillController.cs delete mode 100644 Orchestrator/Samples/Composer/OrchestratorDispatch/Nuget.config delete mode 100644 Orchestrator/Samples/Composer/OrchestratorDispatch/OrchestratorDispatch.botproj delete mode 100644 Orchestrator/Samples/Composer/OrchestratorDispatch/OrchestratorDispatch.csproj delete mode 100644 Orchestrator/Samples/Composer/OrchestratorDispatch/OrchestratorDispatch.dialog delete mode 100644 Orchestrator/Samples/Composer/OrchestratorDispatch/Program.cs delete mode 100644 Orchestrator/Samples/Composer/OrchestratorDispatch/Properties/launchSettings.json delete mode 100644 Orchestrator/Samples/Composer/OrchestratorDispatch/README.md delete mode 100644 Orchestrator/Samples/Composer/OrchestratorDispatch/Scripts/DeploymentTemplates/function-template-with-preexisting-rg.json delete mode 100644 Orchestrator/Samples/Composer/OrchestratorDispatch/Scripts/DeploymentTemplates/new-rg-parameters.json delete mode 100644 Orchestrator/Samples/Composer/OrchestratorDispatch/Scripts/DeploymentTemplates/preexisting-rg-parameters.json delete mode 100644 Orchestrator/Samples/Composer/OrchestratorDispatch/Scripts/DeploymentTemplates/qna-template.json delete mode 100644 Orchestrator/Samples/Composer/OrchestratorDispatch/Scripts/DeploymentTemplates/template-with-new-rg.json delete mode 100644 Orchestrator/Samples/Composer/OrchestratorDispatch/Scripts/DeploymentTemplates/template-with-preexisting-rg.json delete mode 100644 Orchestrator/Samples/Composer/OrchestratorDispatch/Scripts/README.md delete mode 100644 Orchestrator/Samples/Composer/OrchestratorDispatch/Scripts/deploy.ps1 delete mode 100644 Orchestrator/Samples/Composer/OrchestratorDispatch/Scripts/package.json delete mode 100644 Orchestrator/Samples/Composer/OrchestratorDispatch/Scripts/provisionComposer.js delete mode 100644 Orchestrator/Samples/Composer/OrchestratorDispatch/Startup.cs delete mode 100644 Orchestrator/Samples/Composer/OrchestratorDispatch/dialogs/PartnersDialog/PartnersDialog.dialog delete mode 100644 Orchestrator/Samples/Composer/OrchestratorDispatch/dialogs/PartnersDialog/knowledge-base/en-us/PartnersDialog.en-us.qna delete mode 100644 Orchestrator/Samples/Composer/OrchestratorDispatch/dialogs/PartnersDialog/language-generation/en-us/PartnersDialog.en-us.lg delete mode 100644 Orchestrator/Samples/Composer/OrchestratorDispatch/dialogs/PartnersDialog/language-understanding/en-us/PartnersDialog.en-us.lu delete mode 100644 Orchestrator/Samples/Composer/OrchestratorDispatch/dialogs/PartnersDialog/recognizers/PartnersDialog.en-us.lu.dialog delete mode 100644 Orchestrator/Samples/Composer/OrchestratorDispatch/dialogs/PartnersDialog/recognizers/PartnersDialog.lu.dialog delete mode 100644 Orchestrator/Samples/Composer/OrchestratorDispatch/dialogs/PartnersDialog/recognizers/PartnersDialog.lu.qna.dialog delete mode 100644 Orchestrator/Samples/Composer/OrchestratorDispatch/dialogs/emptyBot/knowledge-base/en-us/emptyBot.en-us.qna delete mode 100644 Orchestrator/Samples/Composer/OrchestratorDispatch/generated/OrchestratorDispatch.en-us.blu delete mode 100644 Orchestrator/Samples/Composer/OrchestratorDispatch/generated/interruption/OrchestratorDispatch.en-us.lu delete mode 100644 Orchestrator/Samples/Composer/OrchestratorDispatch/generated/interruption/OrchestratorDispatch.en-us.qna delete mode 100644 Orchestrator/Samples/Composer/OrchestratorDispatch/generated/interruption/PartnersDialog.en-us.lu delete mode 100644 Orchestrator/Samples/Composer/OrchestratorDispatch/generated/interruption/PartnersDialog.en-us.qna delete mode 100644 Orchestrator/Samples/Composer/OrchestratorDispatch/generated/luis.settings.composer.westus.json delete mode 100644 Orchestrator/Samples/Composer/OrchestratorDispatch/generated/orchestrator.settings.json delete mode 100644 Orchestrator/Samples/Composer/OrchestratorDispatch/generated/qnamaker.settings.composer.westus.json delete mode 100644 Orchestrator/Samples/Composer/OrchestratorDispatch/knowledge-base/en-us/OrchestratorDispatch.en-us.qna delete mode 100644 Orchestrator/Samples/Composer/OrchestratorDispatch/knowledge-base/source/ComposerKB.source.en-us.qna delete mode 100644 Orchestrator/Samples/Composer/OrchestratorDispatch/language-generation/en-us/OrchestratorDispatch.en-us.lg delete mode 100644 Orchestrator/Samples/Composer/OrchestratorDispatch/language-generation/en-us/common.en-us.lg delete mode 100644 Orchestrator/Samples/Composer/OrchestratorDispatch/language-understanding/en-us/OrchestratorDispatch.en-us.lu delete mode 100644 Orchestrator/Samples/Composer/OrchestratorDispatch/media/create-azure-resource-command-line.png delete mode 100644 Orchestrator/Samples/Composer/OrchestratorDispatch/media/diagram.png delete mode 100644 Orchestrator/Samples/Composer/OrchestratorDispatch/media/publish-az-login.png delete mode 100644 Orchestrator/Samples/Composer/OrchestratorDispatch/recognizers/OrchestratorDispatch.en-us.lu.dialog delete mode 100644 Orchestrator/Samples/Composer/OrchestratorDispatch/recognizers/OrchestratorDispatch.en-us.qna.dialog delete mode 100644 Orchestrator/Samples/Composer/OrchestratorDispatch/recognizers/OrchestratorDispatch.lu.dialog delete mode 100644 Orchestrator/Samples/Composer/OrchestratorDispatch/recognizers/OrchestratorDispatch.lu.qna.dialog delete mode 100644 Orchestrator/Samples/Composer/OrchestratorDispatch/recognizers/OrchestratorDispatch.qna.dialog delete mode 100644 Orchestrator/Samples/Composer/OrchestratorDispatch/schemas/readme.md delete mode 100644 Orchestrator/Samples/Composer/OrchestratorDispatch/schemas/sdk.schema delete mode 100644 Orchestrator/Samples/Composer/OrchestratorDispatch/schemas/sdk.uischema delete mode 100644 Orchestrator/Samples/Composer/OrchestratorDispatch/schemas/update-schema.ps1 delete mode 100644 Orchestrator/Samples/Composer/OrchestratorDispatch/schemas/update-schema.sh delete mode 100644 Orchestrator/Samples/Composer/OrchestratorDispatch/settings/cross-train.config.json delete mode 100644 Orchestrator/Samples/Composer/OrchestratorDispatch/wwwroot/default.htm delete mode 100644 Orchestrator/Samples/README.md diff --git a/Orchestrator/README.md b/Orchestrator/README.md index 5dd1f91ffa..78a532b3c4 100644 --- a/Orchestrator/README.md +++ b/Orchestrator/README.md @@ -135,7 +135,7 @@ C# .NET Core 3.1 - [NodeJS samples][13] - [BF Orchestrator Command Usage][23] -See the [School skill navigator](https://github.com/microsoft/BotBuilder-Samples/tree/main/experimental/orchestrator/Composer/01.school-skill-navigator#school-skill-navigator-bot) for an example of using Orchestrator commandlets to improve the quality of a .lu training set and using Composer to build a bot from examples in .lu format. +See the [School skill navigator](https://github.com/microsoft/BotBuilder-Samples/tree/main/composer-samples/csharp_dotnetcore/projects/OrchestratorSchoolNavigator) for an example of using Orchestrator commandlets to improve the quality of a .lu training set and using Composer to build a bot from examples in .lu format. [1]:https://luis.ai [2]:https://qnamaker.ai diff --git a/Orchestrator/Samples/CLI/ModelTuning/README.md b/Orchestrator/Samples/CLI/ModelTuning/README.md new file mode 100644 index 0000000000..2624c4af46 --- /dev/null +++ b/Orchestrator/Samples/CLI/ModelTuning/README.md @@ -0,0 +1,159 @@ +# Improve Language Model with BF CLI + +The following sample illustrates how to evaluate and improve a simple language model using the Orchestrator report. You may adopt this process simply by editing the [demo.cmd](./demo.cmd) script to use your language model files. + +## Prerequisites + +* [Bot Framework CLI][5] +* [Bot Framework CLI Orchestrator plugin][1] +* An understanding of [Orchestrator][6] feature usage. + +## Walkthrough + +The following files make up this illustration: + +``` +demo.cmd: Script run evaluation and produces report +common.lu: Bot Language Model LU +common.test.lu: A test set containing examples not present in original LU +common.fixed.lu: A corrected Language Model based on evaluation run +``` + +Assume a bot with a simple language model in [common.lu](./common.lu) file as follows: + +``` +# Help +- help +- i need help +- please help +- can you please help +- what do you do +- what is this bot for + + +# BuySurface +- How can I buy {ProductType=Surface PRO} +- I want to buy {ProductType=Surface PRO} +- I want to buy {ProductType=Surface laptop} +- Can I buy {ProductType=Surface PRO} online + +# USConstitution +- Tell me about the US Constitution +- US Constitution +- Info on the Constitution +- tell me about the Constitution +- constitution knowledgebase +- constitution faq +- what do you know about the constitution +- The united states constitution + +# Restart +- restart +- reset +- start over +- menu +- top menu + +# Finance +- pay my bills +- transfer funds +- what's my balance +- get $500 cash + +# LUIS +- luis + +# Orchestrator +- Orchestrator +- Orch + +``` + +This evaluation examines how the Orchestrator engine can generalize language understanding from a few examples to include phrases never seen before. Hence, for proper language evaluation, the test file [common.test.lu](./common.test.lu) should contain utterances not present in the original "training" set: + +``` +# Help +- help +- do you have help +- any assistance in this bot? + +# BuySurface +- Looking for a computer made by MSFT +- what kind of MS products do you have? + +# USConstitution +- Where can I read our founding fathers famous document? +- Is there an analysis of the bill of rights? +- What is that proclamation thing? + +# Restart +- reset +- go to the beginning + +# Finance +- can i pay with credit card? +- do you use Zelle? +- what is my bank borrowing limit? + +# LUIS +- Language Understanding Inteligent Service + +# Orchestrator +- Conductor + +``` + +Next, run the [demo.cmd](./demo.cmd) script. + +In first run you need to download the Orchestrator basemodel so execute ```demo.cmd getmodel``` which will download the model and run the test. Consequent runs can reuse the same basemodel (hint: see ```bf orchestrator:basemodel:list``` for alternate models). Also, if you wish to compare to [LUIS](https://luis.ai) results, edit the script with your LUIS application info. + +This will produce a report in report folder such as follows: + +![Before Correction](./reportbefore.png) + +Notice how 5 utterances were misclassified. For example ```do you use Zelle?``` was classified as *Help* (with low score of 0.2998) instead of *Finance*. Also, note that what led to this misclassification is that the nearest example scored 0.5669 under the *Help* label. + +The observation shows that the concepts for those misclassified utterances are not present in the original common.lu language model. To correct, we'll add representative examples in the original common.lu file. Note how we don't add the exact utterances, only representative examples: + +![Compared LU](./comparedLU.png) + +The corrected file is available for reference as [common.fixed.lu](./common.fixed.lu). You may copy it over the common.lu. + +Now, re-run the test ```demo.cmd``` and view the resulting report: + + + +![Report After](./reportafter.png) + +## Summary + +This walkthrough showed how to improve your bot's language model before ever deploying it. It uses BF CLI to test the language model, and use the resulting report to correct the language model. One should construct a language model with as many examples representing expected user utterances. However, it also illustrates how one does not need to account for all utterance permutations, rather only to present concepts within those utterances. The Orchestrator engine generalizes and can accurately detect similar utterances. + +## Additional Reading + +- [Orchestrator Documentation][6] +- [BF CLI Orchestrator Command Usage][4] +- [Report Interpretation][3] +- [LU File Format][2] + + + +[1]: https://aka.ms/bforchestratorcli "Orchestrator Plugin" +[2]: https://docs.microsoft.com/en-us/azure/bot-service/file-format/bot-builder-lu-file-format?view=azure-bot-service-4.0 "LU file format" +[3]: https://aka.ms/bforchestratorreport "report interpretation" +[4]: https://github.com/microsoft/botframework-sdk/blob/main/Orchestrator/docs/BFOrchestratorUsage.md "BF Orchestrator usage" +[5]: https://github.com/microsoft/botframework-cli +[6]: https://aka.ms/bf-orchestrator + + + + + + + + + + + + + diff --git a/Orchestrator/Samples/CLI/ModelTuning/common.fixed.lu b/Orchestrator/Samples/CLI/ModelTuning/common.fixed.lu new file mode 100644 index 0000000000..431b2e0518 --- /dev/null +++ b/Orchestrator/Samples/CLI/ModelTuning/common.fixed.lu @@ -0,0 +1,50 @@ +# Help +- help +- i need help +- please help +- can you please help +- what do you do +- what is this bot for + + +# BuySurface +- How can I buy {ProductType=Surface PRO} +- I want to buy {ProductType=Surface PRO} +- I want to buy {ProductType=Surface laptop} +- Can I buy {ProductType=Surface PRO} online +- Types of MS products? + +# USConstitution +- Tell me about the US Constitution +- US Constitution +- Info on the Constitution +- tell me about the Constitution +- constitution knowledgebase +- constitution faq +- what do you know about the constitution +- The united states constitution + +# Restart +- restart +- reset +- start over +- menu +- top menu + +# Finance +- pay my bills +- transfer funds +- what's my balance +- get $500 cash +- use Zelle +- borrowing limits? + +# LUIS +- luis +- Language Understanding + +# Orchestrator +- Orchestrator +- Orch +- Conductor organizer + diff --git a/Orchestrator/Samples/CLI/ModelTuning/common.lu b/Orchestrator/Samples/CLI/ModelTuning/common.lu new file mode 100644 index 0000000000..db2017c247 --- /dev/null +++ b/Orchestrator/Samples/CLI/ModelTuning/common.lu @@ -0,0 +1,45 @@ +# Help +- help +- i need help +- please help +- can you please help +- what do you do +- what is this bot for + + +# BuySurface +- How can I buy {ProductType=Surface PRO} +- I want to buy {ProductType=Surface PRO} +- I want to buy {ProductType=Surface laptop} +- Can I buy {ProductType=Surface PRO} online + +# USConstitution +- Tell me about the US Constitution +- US Constitution +- Info on the Constitution +- tell me about the Constitution +- constitution knowledgebase +- constitution faq +- what do you know about the constitution +- The united states constitution + +# Restart +- restart +- reset +- start over +- menu +- top menu + +# Finance +- pay my bills +- transfer funds +- what's my balance +- get $500 cash + +# LUIS +- luis + +# Orchestrator +- Orchestrator +- Orch + diff --git a/Orchestrator/Samples/CLI/ModelTuning/common.test.lu b/Orchestrator/Samples/CLI/ModelTuning/common.test.lu new file mode 100644 index 0000000000..9067fffc01 --- /dev/null +++ b/Orchestrator/Samples/CLI/ModelTuning/common.test.lu @@ -0,0 +1,31 @@ +# Help +- help +- do you have help +- any assistance in this bot? + + +# BuySurface +- Looking for a computer made by MSFT +- what kind of MS products do you have? + +# USConstitution +- Where can I read our founding fathers famous document? +- Is there an analysis of the bill of rights? +- What is that proclamation thing? + +# Restart +- reset +- go to the beginning + +# Finance +- can i pay with credit card? +- do you use Zelle? +- what is my bank borrowing limit? + + +# LUIS +- Language Understanding Inteligent Service + +# Orchestrator +- Conductor + diff --git a/Orchestrator/Samples/CLI/ModelTuning/comparedLU.png b/Orchestrator/Samples/CLI/ModelTuning/comparedLU.png new file mode 100644 index 0000000000000000000000000000000000000000..cbc3b6c4ff9c37f0c25bcb6d68b9f0bdf066f585 GIT binary patch literal 216746 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

{$V_O|M6FP;AQMT4&mSMP9Zy)ZtCcs59QZASc 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 SF*XSV_>mBi6)qFh_x&%OtVa(3 literal 0 HcmV?d00001 diff --git a/Orchestrator/Samples/CLI/ModelTuning/demo.cmd b/Orchestrator/Samples/CLI/ModelTuning/demo.cmd new file mode 100644 index 0000000000..9b7150d9d6 --- /dev/null +++ b/Orchestrator/Samples/CLI/ModelTuning/demo.cmd @@ -0,0 +1,84 @@ +@echo off +@echo ORCHESTRATOR EVALUATION DEMO + +@rem set SEED for different test sets +set SEED=common +set BLU=generated\%SEED%.blu +set LUFILE=%SEED%.lu +@rem test file contains sample utterances that are not in main LU file. +set TESTFILE=%SEED%.test.lu +@rem proper test +@rem set TESTFILE=%SEED%.test.lu + + +set LUISKEY= +set LUISAPP= +set LUISHOST= + +set SKIPLUIS=0 +set QUERYRUN=0 + +if "%LUISKEY%" == "" ( + @echo Skipping comparison with LUIS. Fill in LUIS info to compare results. + set SKIPLUIS=1 +) + +@rem set QUERY to run a single utterance test +set QUERY="what is the american declaration of independence?" + +if "%1" == "qonly" ( + set QUERYRUN=1 + goto QUERYONLY +) + +@rem model folder needs to be downloaded only once. +if "%1" == "getmodel" ( + if EXIST model rd /s /q model +) + +@echo cleaning folders +if EXIST report ( +rd /s /q report && md report +) +if EXIST generated ( + rd /s /q generated && md generated +) + + +@rem Only need to retrieve model once +IF NOT EXIST .\model ( +@rem see bf orchestrator:basemodel:get --help to get the non-default model +@rem see available models via bf orchestrator:basemodel:list + @echo getting base model + md model + call bf orchestrator:basemodel:get --out model +) +@echo Create orchestrator snapshot .blu file +call bf orchestrator:create --model model --out %BLU% --in %LUFILE% + +@echo running orchestrator test to generate a report (see report folder) +call bf orchestrator:test --in %BLU% --model ./model --out report --test %TESTFILE% + +if "%SKIPLUIS%" == "0" ( + @echo running LUIS test... + call bf luis:test --subscriptionKey %LUISKEY% --endpoint %LUISHOST% --appId %LUISAPP% --in %TESTFILE% --out report/luisresult.txt +) + +:QUERYONLY +@rem Illustrates how to query for only a single utterance. Edit %QUERY% above. +if "%QUERYRUN%" == "1" ( + + echo Orchestrator single utterance query: + echo bf orchestrator:query --in %BLU% --model model --query %QUERY% + call bf orchestrator:query --in %BLU% --model model --query %QUERY% + + + if "%SKIPLUIS%" == "0" ( + echo LUIS single utterance query: + echo bf luis:application:query --appId LUISAPP --endpoint LUISHOST --subscriptionKey LUISKEY --query %QUERY% + call bf luis:application:query --appId %LUISAPP% --endpoint %LUISHOST% --subscriptionKey %LUISKEY% --query %QUERY% + ) +) + +:DONE + diff --git a/Orchestrator/Samples/CLI/ModelTuning/reportafter.png b/Orchestrator/Samples/CLI/ModelTuning/reportafter.png new file mode 100644 index 0000000000000000000000000000000000000000..53d6db628b501915a6c32016ee8d0cc9d334cb0c GIT binary patch literal 15534 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 _adapters = new Dictionary(); - private readonly IBot _bot; - private readonly ILogger _logger; - - public BotController( - IConfiguration configuration, - IEnumerable adapters, - IBot bot, - ILogger logger) - { - _bot = bot ?? throw new ArgumentNullException(nameof(bot)); - _logger = logger; - - var adapterSettings = configuration.GetSection(AdapterSettings.AdapterSettingsKey).Get>() ?? new List(); - adapterSettings.Add(AdapterSettings.CoreBotAdapterSettings); - - foreach (var adapter in adapters ?? throw new ArgumentNullException(nameof(adapters))) - { - var settings = adapterSettings.FirstOrDefault(s => s.Enabled && s.Type == adapter.GetType().FullName); - - if (settings != null) - { - _adapters.Add(settings.Route, adapter); - } - } - } - - [HttpPost] - [HttpGet] - [Route("api/{route}")] - public async Task PostAsync(string route) - { - if (string.IsNullOrEmpty(route)) - { - _logger.LogError($"PostAsync: No route provided."); - throw new ArgumentNullException(nameof(route)); - } - - if (_adapters.TryGetValue(route, out IBotFrameworkHttpAdapter adapter)) - { - if (_logger.IsEnabled(LogLevel.Debug)) - { - _logger.LogInformation($"PostAsync: routed '{route}' to {adapter.GetType().Name}"); - } - - // Delegate the processing of the HTTP POST to the appropriate adapter. - // The adapter will invoke the bot. - await adapter.ProcessAsync(Request, Response, _bot).ConfigureAwait(false); - } - else - { - _logger.LogError($"PostAsync: No adapter registered and enabled for route {route}."); - throw new KeyNotFoundException($"No adapter registered and enabled for route {route}."); - } - } - } -} diff --git a/Orchestrator/Samples/Composer/OrchestratorDispatch/Controllers/SkillController.cs b/Orchestrator/Samples/Composer/OrchestratorDispatch/Controllers/SkillController.cs deleted file mode 100644 index 9174a2dfb5..0000000000 --- a/Orchestrator/Samples/Composer/OrchestratorDispatch/Controllers/SkillController.cs +++ /dev/null @@ -1,62 +0,0 @@ -using System; -using System.Threading.Tasks; -using Microsoft.AspNetCore.Mvc; -using Microsoft.Bot.Builder; -using Microsoft.Bot.Builder.Integration.AspNet.Core; -using Microsoft.Bot.Schema; -using Microsoft.Extensions.Logging; - -namespace OrchestratorDispatch.Controllers -{ - ///

- /// A controller that handles skill replies to the bot. - /// - [ApiController] - [Route("api/skills")] - public class SkillController : ChannelServiceController - { - private readonly ILogger _logger; - - public SkillController(ChannelServiceHandlerBase handler, ILogger logger) - : base(handler) - { - _logger = logger; - } - - public override Task ReplyToActivityAsync(string conversationId, string activityId, Activity activity) - { - try - { - if (_logger.IsEnabled(LogLevel.Debug)) - { - _logger.LogDebug($"ReplyToActivityAsync: conversationId={conversationId}, activityId={activityId}"); - } - - return base.ReplyToActivityAsync(conversationId, activityId, activity); - } - catch (Exception ex) - { - _logger.LogError(ex, $"ReplyToActivityAsync: {ex}"); - throw; - } - } - - public override Task SendToConversationAsync(string conversationId, Activity activity) - { - try - { - if (_logger.IsEnabled(LogLevel.Debug)) - { - _logger.LogDebug($"SendToConversationAsync: conversationId={conversationId}"); - } - - return base.SendToConversationAsync(conversationId, activity); - } - catch (Exception ex) - { - _logger.LogError(ex, $"SendToConversationAsync: {ex}"); - throw; - } - } - } -} diff --git a/Orchestrator/Samples/Composer/OrchestratorDispatch/Nuget.config b/Orchestrator/Samples/Composer/OrchestratorDispatch/Nuget.config deleted file mode 100644 index 8753d366a2..0000000000 --- a/Orchestrator/Samples/Composer/OrchestratorDispatch/Nuget.config +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/Orchestrator/Samples/Composer/OrchestratorDispatch/OrchestratorDispatch.botproj b/Orchestrator/Samples/Composer/OrchestratorDispatch/OrchestratorDispatch.botproj deleted file mode 100644 index 8d9f634240..0000000000 --- a/Orchestrator/Samples/Composer/OrchestratorDispatch/OrchestratorDispatch.botproj +++ /dev/null @@ -1,11 +0,0 @@ -{ - "$schema": "https://raw.githubusercontent.com/microsoft/BotFramework-Composer/main/Composer/packages/server/schemas/botproject.schema", - "name": "OrchestratorDispatch", - "skills": { - "theSkill": { - "manifest": "https://theskill.azurewebsites.net/manifests/TheSkill-2-1-manifest.json", - "remote": true, - "endpointName": "Prod" - } - } -} \ No newline at end of file diff --git a/Orchestrator/Samples/Composer/OrchestratorDispatch/OrchestratorDispatch.csproj b/Orchestrator/Samples/Composer/OrchestratorDispatch/OrchestratorDispatch.csproj deleted file mode 100644 index df986f72b1..0000000000 --- a/Orchestrator/Samples/Composer/OrchestratorDispatch/OrchestratorDispatch.csproj +++ /dev/null @@ -1,18 +0,0 @@ - - - - netcoreapp3.1 - OutOfProcess - f24230a7-de92-41e1-a10c-5c5f4b350bb4 - - - - PreserveNewest - - - - - - - - \ No newline at end of file diff --git a/Orchestrator/Samples/Composer/OrchestratorDispatch/OrchestratorDispatch.dialog b/Orchestrator/Samples/Composer/OrchestratorDispatch/OrchestratorDispatch.dialog deleted file mode 100644 index 73d780cb60..0000000000 --- a/Orchestrator/Samples/Composer/OrchestratorDispatch/OrchestratorDispatch.dialog +++ /dev/null @@ -1,277 +0,0 @@ -{ - "$kind": "Microsoft.AdaptiveDialog", - "$designer": { - "name": "OrchestratorDispatch", - "description": "", - "id": "A79tBe" - }, - "autoEndDialog": true, - "defaultResultProperty": "dialog.result", - "triggers": [ - { - "$kind": "Microsoft.OnConversationUpdateActivity", - "$designer": { - "id": "376720" - }, - "actions": [ - { - "$kind": "Microsoft.Foreach", - "$designer": { - "id": "518944", - "name": "Loop: for each item" - }, - "itemsProperty": "turn.Activity.membersAdded", - "actions": [ - { - "$kind": "Microsoft.IfCondition", - "$designer": { - "id": "641773", - "name": "Branch: if/else" - }, - "condition": "string(dialog.foreach.value.id) != string(turn.Activity.Recipient.id)", - "actions": [ - { - "$kind": "Microsoft.SendActivity", - "$designer": { - "id": "859266", - "name": "Send a response" - }, - "activity": "${SendActivity_Welcome()}" - }, - { - "$kind": "Microsoft.SendActivity", - "$designer": { - "id": "7MNTfM" - }, - "activity": "${SendActivity_7MNTfM()}" - } - ] - } - ] - }, - { - "$kind": "Microsoft.TextInput", - "$designer": { - "id": "sL5okG" - }, - "disabled": false, - "maxTurnCount": 30, - "alwaysPrompt": true, - "allowInterruptions": true, - "prompt": "${TextInput_Prompt_sL5okG()}", - "unrecognizedPrompt": "", - "invalidPrompt": "", - "property": "dialog.response" - }, - { - "$kind": "Microsoft.SendActivity", - "$designer": { - "id": "Zy3DnL" - }, - "activity": "${SendActivity_Zy3DnL()}" - } - ] - }, - { - "$kind": "Microsoft.OnQnAMatch", - "$designer": { - "id": "TDfQbW" - }, - "actions": [ - { - "$kind": "Microsoft.SendActivity", - "$designer": { - "id": "VJYzMf" - }, - "activity": "${SendActivity_VJYzMf()}" - }, - { - "$kind": "Microsoft.IfCondition", - "$designer": { - "id": "02rejJ" - }, - "condition": "count(turn.recognized.answers[0].context.prompts) > 0", - "actions": [ - { - "$kind": "Microsoft.SetProperty", - "$designer": { - "id": "CybRJX" - }, - "property": "dialog.qnaContext", - "value": "=turn.recognized.answers[0].context.prompts" - }, - { - "$kind": "Microsoft.TextInput", - "$designer": { - "id": "PcQgSy" - }, - "maxTurnCount": 3, - "alwaysPrompt": true, - "allowInterruptions": false, - "prompt": "${TextInput_Prompt_HGB0yC()}", - "property": "turn.qnaMultiTurnResponse" - }, - { - "$kind": "Microsoft.SetProperty", - "$designer": { - "id": "XyTPCZ" - }, - "property": "turn.qnaMatchFromContext", - "value": "=where(dialog.qnaContext, item, item.displayText == turn.qnaMultiTurnResponse)" - }, - { - "$kind": "Microsoft.DeleteProperty", - "$designer": { - "id": "dLd5CS" - }, - "property": "dialog.qnaContext" - }, - { - "$kind": "Microsoft.IfCondition", - "$designer": { - "id": "dDQVFz" - }, - "condition": "turn.qnaMatchFromContext && count(turn.qnaMatchFromContext) > 0", - "actions": [ - { - "$kind": "Microsoft.SetProperty", - "$designer": { - "id": "gLHgkE" - }, - "property": "turn.qnaIdFromPrompt", - "value": "=turn.qnaMatchFromContext[0].qnaId" - } - ] - }, - { - "$kind": "Microsoft.EmitEvent", - "$designer": { - "id": "8HeqE7" - }, - "eventName": "activityReceived", - "eventValue": "=turn.activity" - } - ], - "elseActions": [ - { - "$kind": "Microsoft.SendActivity", - "$designer": { - "id": "Fmz0Iy" - }, - "activity": "${SendActivity_ESxCuC()}" - } - ] - } - ] - }, - { - "$kind": "Microsoft.OnIntent", - "$designer": { - "id": "Uu57gW", - "name": "PartnersInfo" - }, - "intent": "PartnersInfo", - "actions": [ - { - "$kind": "Microsoft.BeginDialog", - "$designer": { - "id": "TU9sPg" - }, - "activityProcessed": true, - "dialog": "PartnersDialog" - } - ], - "condition": "turn.recognized.score > 0.7" - }, - { - "$kind": "Microsoft.OnUnknownIntent", - "$designer": { - "id": "drtUJk" - }, - "actions": [ - { - "$kind": "Microsoft.SendActivity", - "$designer": { - "id": "xjrS5L" - }, - "activity": "${SendActivity_xjrS5L()}" - } - ] - }, - { - "$kind": "Microsoft.OnIntent", - "$designer": { - "id": "JYVSpD", - "name": "None" - }, - "intent": "None", - "actions": [ - { - "$kind": "Microsoft.SendActivity", - "$designer": { - "id": "v8rqlc" - }, - "activity": "${SendActivity_v8rqlc()}" - } - ] - }, - { - "$kind": "Microsoft.OnIntent", - "$designer": { - "id": "ggt6ci", - "name": "exit" - }, - "intent": "exit", - "actions": [ - { - "$kind": "Microsoft.SendActivity", - "$designer": { - "id": "bzZc9B" - }, - "activity": "${SendActivity_bzZc9B()}" - }, - { - "$kind": "Microsoft.EndDialog", - "$designer": { - "id": "42pVbi" - } - } - ], - "condition": "turn.recognized.score > 0.7" - }, - { - "$kind": "Microsoft.OnIntent", - "$designer": { - "id": "4SkTnT", - "name": "TheSkill" - }, - "intent": "TheSkill", - "actions": [ - { - "$kind": "Microsoft.SendActivity", - "$designer": { - "id": "EZm3u2" - }, - "activity": "${SendActivity_EZm3u2()}" - }, - { - "$kind": "Microsoft.BeginSkill", - "$designer": { - "id": "Gss1qy" - }, - "activityProcessed": true, - "botId": "=settings.MicrosoftAppId", - "skillHostEndpoint": "=settings.skillHostEndpoint", - "connectionName": "=settings.connectionName", - "allowInterruptions": true, - "skillEndpoint": "=settings.skill['theSkill'].endpointUrl", - "skillAppId": "=settings.skill['theSkill'].msAppId" - } - ], - "condition": "turn.recognized.score > 0.7" - } - ], - "generator": "OrchestratorDispatch.lg", - "id": "OrchestratorDispatch", - "recognizer": "OrchestratorDispatch.lu.qna" -} diff --git a/Orchestrator/Samples/Composer/OrchestratorDispatch/Program.cs b/Orchestrator/Samples/Composer/OrchestratorDispatch/Program.cs deleted file mode 100644 index 746d426581..0000000000 --- a/Orchestrator/Samples/Composer/OrchestratorDispatch/Program.cs +++ /dev/null @@ -1,33 +0,0 @@ -using System; -using Microsoft.AspNetCore.Hosting; -using Microsoft.Bot.Builder.Dialogs.Adaptive.Runtime.Extensions; -using Microsoft.Extensions.Configuration; -using Microsoft.Extensions.Hosting; - -namespace OrchestratorDispatch -{ - public class Program - { - public static void Main(string[] args) - { - CreateHostBuilder(args).Build().Run(); - } - - public static IHostBuilder CreateHostBuilder(string[] args) => - Host.CreateDefaultBuilder(args) - .ConfigureAppConfiguration((hostingContext, builder) => - { - var applicationRoot = AppDomain.CurrentDomain.BaseDirectory; - var environmentName = hostingContext.HostingEnvironment.EnvironmentName; - var settingsDirectory = "settings"; - - builder.AddBotRuntimeConfiguration(applicationRoot, settingsDirectory, environmentName); - - builder.AddCommandLine(args); - }) - .ConfigureWebHostDefaults(webBuilder => - { - webBuilder.UseStartup(); - }); - } -} \ No newline at end of file diff --git a/Orchestrator/Samples/Composer/OrchestratorDispatch/Properties/launchSettings.json b/Orchestrator/Samples/Composer/OrchestratorDispatch/Properties/launchSettings.json deleted file mode 100644 index 9bde1adc04..0000000000 --- a/Orchestrator/Samples/Composer/OrchestratorDispatch/Properties/launchSettings.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "iisSettings": { - "windowsAuthentication": false, - "anonymousAuthentication": true, - "iisExpress": { - "applicationUrl": "http://localhost:3978", - "sslPort": 0 - } - }, - "profiles": { - "IIS Express": { - "commandName": "IISExpress", - "launchBrowser": true, - "environmentVariables": { - "ASPNETCORE_ENVIRONMENT": "Development" - } - }, - "BotProject": { - "commandName": "Project", - "launchBrowser": true, - "applicationUrl": "http://localhost:3978", - "environmentVariables": { - "ASPNETCORE_ENVIRONMENT": "Development" - } - } - } -} \ No newline at end of file diff --git a/Orchestrator/Samples/Composer/OrchestratorDispatch/README.md b/Orchestrator/Samples/Composer/OrchestratorDispatch/README.md deleted file mode 100644 index d35f9a4c47..0000000000 --- a/Orchestrator/Samples/Composer/OrchestratorDispatch/README.md +++ /dev/null @@ -1,52 +0,0 @@ -# Dispatch with Orchestrator Sample - -The following bot demonstrates a simple Bot with Orchestrator as top dispatcher to the following: - -* Remote skill -* LUIS dialog -* QnAMaker KB - - - -## Setup - -The bot depends on external services, namely LUIS, QnAMaker, and the remote skill which is already deployed for demonstration purposes. - -### Steps - -1. Start Composer and load this project. -2. Configure LUIS and QnAMaker keys. -3. Configure Microsoft App Id & password. -4. Get the Orchestrator package in package manager. -5. Build/run, note your bot port. -6. Setup tunneling to localhost using ngrok (or other technology) using the noted port. -7. Specify in Skill Configuration the skill callback URL e.g. https://tunnel-id.ngrok.io/api/skills (assuming ngrok). -8. Build/run again -9. Test your bot - - - -## Demo Patterns - -You may try the following: - -* Type: "The skill" to invoke and interact with the skill. -* Type: "tell me about Composer" or "custom actions" to trigger QnA KB response. -* Type: "partners info" to invoke the LUIS dialog, then type "healthbot" to trigger LUIS recognition. - -### Diagram - -![](./media/diagram.png) - -## Other Observations - -### Parent/Skill Intent Collisions - -When calling *TheSkill*'s "Aks a question" you will be interacting with the skill's LUIS recognizer via the parent bot. In this case, there can be intent recognition "collision" where if the intent is also detected by the parent, it'll take over the conversation. Thus, since in this case both parent and skill have same triggers, collisions will happen and the conversation will be interrupted by the parent. - -For example: - -* *skills*: parent to invoke the skill; the skill about skill info -* *composer*: info about composer in parent via QnAMaker; in skill via LUIS dialog -* *exit*: both parent and skill implement a trigger for exit. Parent will override skill's trigger. -* *contact*: will only be recognized by skill. To prevent low score detection at parent, an intent condition of > 0.7 was specified. \ No newline at end of file diff --git a/Orchestrator/Samples/Composer/OrchestratorDispatch/Scripts/DeploymentTemplates/function-template-with-preexisting-rg.json b/Orchestrator/Samples/Composer/OrchestratorDispatch/Scripts/DeploymentTemplates/function-template-with-preexisting-rg.json deleted file mode 100644 index 6d2a3d04a6..0000000000 --- a/Orchestrator/Samples/Composer/OrchestratorDispatch/Scripts/DeploymentTemplates/function-template-with-preexisting-rg.json +++ /dev/null @@ -1,355 +0,0 @@ -{ - "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#", - "contentVersion": "1.0.0.0", - "parameters": { - "name": { - "type": "string", - "defaultValue": "[resourceGroup().name]" - }, - "appId": { - "type": "string", - "metadata": { - "description": "Active Directory App ID, set as MicrosoftAppId in the Web App's Application Settings." - } - }, - "appSecret": { - "type": "string", - "metadata": { - "description": "Active Directory App Password, set as MicrosoftAppPassword in the Web App's Application Settings. Defaults to \"\"." - } - }, - "useCosmosDb": { - "type": "bool", - "defaultValue": true - }, - "useAppInsights": { - "type": "bool", - "defaultValue": true - }, - "shouldCreateAuthoringResource": { - "type": "bool", - "defaultValue": true - }, - "shouldCreateLuisResource": { - "type": "bool", - "defaultValue": true - }, - "cosmosDbName": { - "type": "string", - "defaultValue": "[resourceGroup().name]" - }, - "botId": { - "type": "string", - "metadata": { - "description": "The globally unique and immutable bot ID. Also used to configure the displayName of the bot, which is mutable." - } - }, - "botSku": { - "defaultValue": "F0", - "type": "string", - "metadata": { - "description": "The pricing tier of the Bot Service Registration. Acceptable values are F0 and S1." - } - }, - "luisAuthoringKey": { - "type": "string", - "defaultValue": "" - }, - "newAppServicePlanName": { - "type": "string", - "defaultValue": "[resourceGroup().name]", - "metadata": { - "description": "The name of the new App Service Plan." - } - }, - "newAppServicePlanSku": { - "type": "object", - "defaultValue": { - "name": "S1", - "tier": "Standard", - "size": "S1", - "family": "S", - "capacity": 1 - }, - "metadata": { - "description": "The SKU of the App Service Plan. Defaults to Standard values." - } - }, - "appServicePlanLocation": { - "type": "string", - "metadata": { - "description": "The location of the App Service Plan." - } - }, - "existingAppServicePlan": { - "type": "string", - "defaultValue": "", - "metadata": { - "description": "Name of the existing App Service Plan used to create the Web App for the bot." - } - }, - "newWebAppName": { - "type": "string", - "defaultValue": "[resourceGroup().name]", - "metadata": { - "description": "The globally unique name of the Web App. Defaults to the value passed in for \"botId\"." - } - }, - "appInsightsName": { - "type": "string", - "defaultValue": "[resourceGroup().name]" - }, - "location": { - "type": "string", - "defaultValue": "[resourceGroup().location]" - }, - "appInsightsLocation": { - "type": "string", - "defaultValue": "[resourceGroup().location]" - }, - "useStorage": { - "type": "bool", - "defaultValue": true - }, - "storageAccountName": { - "type": "string", - "defaultValue": "[resourceGroup().name]" - }, - "luisServiceName": { - "type": "string", - "defaultValue": "[concat(resourceGroup().name, '-luis')]" - }, - "luisServiceAuthoringSku": { - "type": "string", - "defaultValue": "F0" - }, - "luisServiceRunTimeSku": { - "type": "string", - "defaultValue": "S0" - }, - "luisServiceLocation": { - "type": "string", - "defaultValue": "[resourceGroup().location]" - } - }, - "variables": { - "defaultAppServicePlanName": "[if(empty(parameters('existingAppServicePlan')), 'createNewAppServicePlan', parameters('existingAppServicePlan'))]", - "useExistingAppServicePlan": "[not(equals(variables('defaultAppServicePlanName'), 'createNewAppServicePlan'))]", - "servicePlanName": "[if(variables('useExistingAppServicePlan'), parameters('existingAppServicePlan'), parameters('newAppServicePlanName'))]", - "resourcesLocation": "[parameters('appServicePlanLocation')]", - "cosmosDbAccountName": "[toLower(take(replace(parameters('cosmosDbName'), '_', ''), 31))]", - "webAppName": "[if(empty(parameters('newWebAppName')), parameters('botId'), parameters('newWebAppName'))]", - "siteHost": "[concat(variables('webAppName'), '.azurewebsites.net')]", - "botEndpoint": "[concat('https://', variables('siteHost'), '/api/messages')]", - "storageAccountName": "[toLower(take(replace(replace(parameters('storageAccountName'), '-', ''), '_', ''), 24))]", - "LuisAuthoringAccountName": "[concat(parameters('luisServiceName'), '-Authoring')]" - }, - "resources": [ - { - "comments": "Create a Web App using an App Service Plan", - "type": "Microsoft.Web/sites", - "apiVersion": "2015-08-01", - "location": "[variables('resourcesLocation')]", - "kind": "functionapp", - "name": "[variables('webAppName')]", - "properties": { - "name": "[variables('webAppName')]", - "kind": "functionapp", - "httpsOnly": true - }, - "resources": [ - { - "name": "appsettings", - "type": "config", - "apiVersion": "2015-08-01", - "dependsOn": [ - "[concat('Microsoft.Web/Sites/', variables('webAppName'))]" - ], - "properties": { - "FUNCTIONS_EXTENSION_VERSION": "~3", - "FUNCTIONS_WORKER_RUNTIME": "dotnet", - "APPINSIGHTS_INSTRUMENTATIONKEY": "[reference(resourceId('microsoft.insights/components/', parameters('appInsightsName')), '2015-05-01').InstrumentationKey]", - "MicrosoftAppId": "[parameters('appId')]", - "MicrosoftAppPassword": "[parameters('appSecret')]" - } - } - ] - }, - { - "comments": "CosmosDB for bot state.", - "type": "Microsoft.DocumentDB/databaseAccounts", - "kind": "GlobalDocumentDB", - "apiVersion": "2015-04-08", - "name": "[variables('cosmosDbAccountName')]", - "location": "[parameters('location')]", - "properties": { - "databaseAccountOfferType": "Standard", - "locations": [ - { - "locationName": "[parameters('location')]", - "failoverPriority": 0 - } - ] - }, - "condition": "[parameters('useCosmosDb')]" - }, - { - "type": "Microsoft.DocumentDB/databaseAccounts/sqlDatabases", - "apiVersion": "2020-03-01", - "name": "[concat(variables('cosmosDbAccountName'), '/botstate-db')]", - "dependsOn": [ - "[resourceId('Microsoft.DocumentDB/databaseAccounts', variables('cosmosDbAccountName'))]" - ], - "properties": { - "resource": { - "id": "botstate-db" - }, - "options": {} - }, - "condition": "[parameters('useCosmosDb')]" - }, - { - "type": "Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers", - "apiVersion": "2020-03-01", - "name": "[concat(variables('cosmosDbAccountName'), '/botstate-db/botstate-container')]", - "dependsOn": [ - "[resourceId('Microsoft.DocumentDB/databaseAccounts/sqlDatabases', variables('cosmosDbAccountName'), 'botstate-db')]", - "[resourceId('Microsoft.DocumentDB/databaseAccounts', variables('cosmosDbAccountName'))]" - ], - "properties": { - "resource": { - "id": "botstate-container", - "indexingPolicy": { - "indexingMode": "consistent", - "automatic": true, - "includedPaths": [ - { - "path": "/*" - } - ], - "excludedPaths": [ - { - "path": "/\"_etag\"/?" - } - ] - }, - "partitionKey": { - "paths": [ - "/id" - ], - "kind": "Hash" - }, - "conflictResolutionPolicy": { - "mode": "LastWriterWins", - "conflictResolutionPath": "/_ts" - } - }, - "options": {} - }, - "condition": "[parameters('useCosmosDb')]" - }, - { - "apiVersion": "2017-12-01", - "type": "Microsoft.BotService/botServices", - "name": "[parameters('botId')]", - "location": "global", - "kind": "bot", - "sku": { - "name": "[parameters('botSku')]" - }, - "properties": { - "name": "[parameters('botId')]", - "displayName": "[parameters('botId')]", - "endpoint": "[variables('botEndpoint')]", - "msaAppId": "[parameters('appId')]", - "developerAppInsightsApplicationId": null, - "developerAppInsightKey": null, - "publishingCredentials": null, - "storageResourceId": null - }, - "dependsOn": [ - "[resourceId('Microsoft.Web/sites/', variables('webAppName'))]" - ] - }, - { - "comments": "app insights", - "type": "Microsoft.Insights/components", - "kind": "web", - "apiVersion": "2015-05-01", - "name": "[parameters('appInsightsName')]", - "location": "[parameters('appInsightsLocation')]", - "properties": { - "Application_Type": "web" - }, - "condition": "[parameters('useAppInsights')]" - }, - { - "comments": "storage account", - "type": "Microsoft.Storage/storageAccounts", - "kind": "StorageV2", - "apiVersion": "2018-07-01", - "name": "[variables('storageAccountName')]", - "location": "[parameters('location')]", - "sku": { - "name": "Standard_LRS" - }, - "condition": "[parameters('useStorage')]" - }, - { - "comments": "Cognitive service authoring key for all LUIS apps.", - "apiVersion": "2017-04-18", - "name": "[variables('LuisAuthoringAccountName')]", - "location": "[parameters('luisServiceLocation')]", - "type": "Microsoft.CognitiveServices/accounts", - "kind": "LUIS.Authoring", - "sku": { - "name": "[parameters('luisServiceAuthoringSku')]" - }, - "condition": "[parameters('shouldCreateAuthoringResource')]" - }, - { - "comments": "Cognitive service endpoint key for all LUIS apps.", - "type": "Microsoft.CognitiveServices/accounts", - "kind": "LUIS", - "apiVersion": "2017-04-18", - "name": "[parameters('luisServiceName')]", - "location": "[parameters('luisServiceLocation')]", - "sku": { - "name": "[parameters('luisServiceRunTimeSku')]" - }, - "condition": "[parameters('shouldCreateLuisResource')]" - } - ], - "outputs": { - "ApplicationInsights": { - "type": "object", - "value": { - "InstrumentationKey": "[if(parameters('useAppInsights'), reference(resourceId('Microsoft.Insights/components', parameters('appInsightsName'))).InstrumentationKey, '')]" - } - }, - "cosmosDb": { - "type": "object", - "value": { - "cosmosDBEndpoint": "[if(parameters('useCosmosDb'), reference(resourceId('Microsoft.DocumentDB/databaseAccounts', variables('cosmosDbAccountName'))).documentEndpoint, '')]", - "authKey": "[if(parameters('useCosmosDb'), listKeys(resourceId('Microsoft.DocumentDB/databaseAccounts', variables('cosmosDbAccountName')), '2015-04-08').primaryMasterKey, '')]", - "databaseId": "botstate-db", - "containerId": "botstate-container" - } - }, - "blobStorage": { - "type": "object", - "value": { - "connectionString": "[if(parameters('useStorage'), concat('DefaultEndpointsProtocol=https;AccountName=', variables('storageAccountName'), ';AccountKey=', listKeys(resourceId('Microsoft.Storage/storageAccounts', variables('storageAccountName')), '2018-07-01').keys[0].value, ';EndpointSuffix=core.windows.net'), '')]", - "container": "transcripts" - } - }, - "luis": { - "type": "object", - "value": { - "endpointKey": "[if(parameters('shouldCreateLuisResource'), listKeys(resourceId('Microsoft.CognitiveServices/accounts', parameters('luisServiceName')),'2017-04-18').key1, '')]", - "authoringKey": "[if(parameters('shouldCreateAuthoringResource'), listKeys(resourceId('Microsoft.CognitiveServices/accounts', variables('LuisAuthoringAccountName')),'2017-04-18').key1, parameters('luisAuthoringKey'))]", - "region": "[parameters('luisServiceLocation')]" - } - } - } -} diff --git a/Orchestrator/Samples/Composer/OrchestratorDispatch/Scripts/DeploymentTemplates/new-rg-parameters.json b/Orchestrator/Samples/Composer/OrchestratorDispatch/Scripts/DeploymentTemplates/new-rg-parameters.json deleted file mode 100644 index ead3390932..0000000000 --- a/Orchestrator/Samples/Composer/OrchestratorDispatch/Scripts/DeploymentTemplates/new-rg-parameters.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentParameters.json#", - "contentVersion": "1.0.0.0", - "parameters": { - "groupLocation": { - "value": "" - }, - "groupName": { - "value": "" - }, - "appId": { - "value": "" - }, - "appSecret": { - "value": "" - }, - "botId": { - "value": "" - }, - "botSku": { - "value": "" - }, - "newAppServicePlanName": { - "value": "" - }, - "newAppServicePlanSku": { - "value": { - "name": "S1", - "tier": "Standard", - "size": "S1", - "family": "S", - "capacity": 1 - } - }, - "newAppServicePlanLocation": { - "value": "" - }, - "newWebAppName": { - "value": "" - } - } -} \ No newline at end of file diff --git a/Orchestrator/Samples/Composer/OrchestratorDispatch/Scripts/DeploymentTemplates/preexisting-rg-parameters.json b/Orchestrator/Samples/Composer/OrchestratorDispatch/Scripts/DeploymentTemplates/preexisting-rg-parameters.json deleted file mode 100644 index b6f5114fcc..0000000000 --- a/Orchestrator/Samples/Composer/OrchestratorDispatch/Scripts/DeploymentTemplates/preexisting-rg-parameters.json +++ /dev/null @@ -1,39 +0,0 @@ -{ - "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentParameters.json#", - "contentVersion": "1.0.0.0", - "parameters": { - "appId": { - "value": "" - }, - "appSecret": { - "value": "" - }, - "botId": { - "value": "" - }, - "botSku": { - "value": "" - }, - "newAppServicePlanName": { - "value": "" - }, - "newAppServicePlanSku": { - "value": { - "name": "S1", - "tier": "Standard", - "size": "S1", - "family": "S", - "capacity": 1 - } - }, - "appServicePlanLocation": { - "value": "" - }, - "existingAppServicePlan": { - "value": "" - }, - "newWebAppName": { - "value": "" - } - } -} \ No newline at end of file diff --git a/Orchestrator/Samples/Composer/OrchestratorDispatch/Scripts/DeploymentTemplates/qna-template.json b/Orchestrator/Samples/Composer/OrchestratorDispatch/Scripts/DeploymentTemplates/qna-template.json deleted file mode 100644 index 9bac519926..0000000000 --- a/Orchestrator/Samples/Composer/OrchestratorDispatch/Scripts/DeploymentTemplates/qna-template.json +++ /dev/null @@ -1,217 +0,0 @@ -{ - "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#", - "contentVersion": "1.0.0.0", - "parameters": { - "name": { - "type": "string", - "defaultValue": "[resourceGroup().name]" - }, - "newAppServicePlanName": { - "type": "string", - "defaultValue": "[resourceGroup().name]", - "metadata": { - "description": "The name of the new App Service Plan." - } - }, - "newAppServicePlanSku": { - "type": "object", - "defaultValue": { - "name": "S1", - "tier": "Standard", - "size": "S1", - "family": "S", - "capacity": 1 - }, - "metadata": { - "description": "The SKU of the App Service Plan. Defaults to Standard values." - } - }, - "appServicePlanLocation": { - "type": "string", - "metadata": { - "description": "The location of the App Service Plan." - } - }, - "existingAppServicePlan": { - "type": "string", - "defaultValue": "", - "metadata": { - "description": "Name of the existing App Service Plan used to create the Web App for the bot." - } - }, - "appInsightsName": { - "type": "string", - "defaultValue": "[resourceGroup().name]" - }, - "appInsightsLocation": { - "type": "string", - "defaultValue": "[resourceGroup().location]" - }, - "qnaMakerServiceName": { - "type": "string", - "defaultValue": "[concat(parameters('name'), '-qna')]" - }, - "qnaMakerServiceSku": { - "type": "string", - "defaultValue": "S0" - }, - "qnaMakerServiceLocation": { - "type": "string", - "defaultValue": "westus" - }, - "qnaMakerSearchName": { - "type": "string", - "defaultValue": "[concat(parameters('name'), '-search')]" - }, - "qnaMakerSearchSku": { - "type": "string", - "defaultValue": "standard" - }, - "qnaMakerSearchLocation": { - "type": "string", - "defaultValue": "[resourceGroup().location]" - }, - "qnaMakerWebAppName": { - "type": "string", - "defaultValue": "[concat(parameters('name'), '-qnahost')]" - }, - "qnaMakerWebAppLocation": { - "type": "string", - "defaultValue": "[resourceGroup().location]" - } - }, - "variables": { - "defaultAppServicePlanName": "[if(empty(parameters('existingAppServicePlan')), 'createNewAppServicePlan', parameters('existingAppServicePlan'))]", - "useExistingAppServicePlan": "[not(equals(variables('defaultAppServicePlanName'), 'createNewAppServicePlan'))]", - "servicePlanName": "[if(variables('useExistingAppServicePlan'), parameters('existingAppServicePlan'), parameters('newAppServicePlanName'))]", - "resourcesLocation": "[parameters('appServicePlanLocation')]", - "qnaMakerSearchName": "[toLower(replace(parameters('qnaMakerSearchName'), '_', ''))]", - "qnaMakerWebAppName": "[replace(parameters('qnaMakerWebAppName'), '_', '')]" - }, - "resources": [ - { - "apiVersion": "2018-02-01", - "name": "1d41002f-62a1-49f3-bd43-2f3f32a19cbb", - "type": "Microsoft.Resources/deployments", - "properties": { - "mode": "Incremental", - "template": { - "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#", - "contentVersion": "1.0.0.0", - "resources": [] - } - } - }, - { - "comments": "Create a new App Service Plan if no existing App Service Plan name was passed in.", - "type": "Microsoft.Web/serverfarms", - "condition": "[not(variables('useExistingAppServicePlan'))]", - "name": "[variables('servicePlanName')]", - "apiVersion": "2018-02-01", - "location": "[variables('resourcesLocation')]", - "sku": "[parameters('newAppServicePlanSku')]", - "properties": { - "name": "[variables('servicePlanName')]" - } - }, - { - "comments": "app insights", - "type": "Microsoft.Insights/components", - "kind": "web", - "apiVersion": "2015-05-01", - "name": "[parameters('appInsightsName')]", - "location": "[parameters('appInsightsLocation')]", - "properties": { - "Application_Type": "web" - } - }, - { - "comments": "Cognitive service key for all QnA Maker knowledgebases.", - "type": "Microsoft.CognitiveServices/accounts", - "kind": "QnAMaker", - "apiVersion": "2017-04-18", - "name": "[parameters('qnaMakerServiceName')]", - "location": "[parameters('qnaMakerServiceLocation')]", - "sku": { - "name": "[parameters('qnaMakerServiceSku')]" - }, - "properties": { - "apiProperties": { - "qnaRuntimeEndpoint": "[concat('https://',reference(resourceId('Microsoft.Web/sites', variables('qnaMakerWebAppName'))).hostNames[0])]" - } - }, - "dependsOn": [ - "[resourceId('Microsoft.Web/Sites', variables('qnaMakerWebAppName'))]", - "[resourceId('Microsoft.Search/searchServices/', variables('qnaMakerSearchName'))]", - "[resourceId('microsoft.insights/components/', parameters('appInsightsName'))]" - ] - }, - { - "comments": "Search service for QnA Maker service.", - "type": "Microsoft.Search/searchServices", - "apiVersion": "2015-08-19", - "name": "[variables('qnaMakerSearchName')]", - "location": "[parameters('qnaMakerSearchLocation')]", - "sku": { - "name": "[parameters('qnaMakerSearchSku')]" - }, - "properties": { - "replicaCount": 1, - "partitionCount": 1, - "hostingMode": "default" - } - }, - { - "comments": "Web app for QnA Maker service.", - "type": "Microsoft.Web/sites", - "apiVersion": "2016-08-01", - "name": "[variables('qnaMakerWebAppName')]", - "location": "[parameters('qnaMakerWebAppLocation')]", - "properties": { - "enabled": true, - "name": "[variables('qnaMakerWebAppName')]", - "hostingEnvironment": "", - "serverFarmId": "[concat('/subscriptions/', Subscription().SubscriptionId,'/resourcegroups/', resourceGroup().name, '/providers/Microsoft.Web/serverfarms/', variables('servicePlanName'))]", - "siteConfig": { - "cors": { - "allowedOrigins": ["*"] - } - } - }, - "dependsOn": ["[resourceId('Microsoft.Web/serverfarms/', variables('servicePlanName'))]"], - "resources": [ - { - "apiVersion": "2016-08-01", - "name": "appsettings", - "type": "config", - "dependsOn": [ - "[resourceId('Microsoft.Web/Sites', variables('qnaMakerWebAppName'))]", - "[resourceId('Microsoft.Insights/components', parameters('appInsightsName'))]", - "[resourceId('Microsoft.Search/searchServices/', variables('qnaMakerSearchName'))]" - ], - "properties": { - "AzureSearchName": "[variables('qnaMakerSearchName')]", - "AzureSearchAdminKey": "[listAdminKeys(resourceId('Microsoft.Search/searchServices/', variables('qnaMakerSearchName')), '2015-08-19').primaryKey]", - "UserAppInsightsKey": "[reference(resourceId('Microsoft.Insights/components/', parameters('appInsightsName')), '2015-05-01').InstrumentationKey]", - "UserAppInsightsName": "[parameters('appInsightsName')]", - "UserAppInsightsAppId": "[reference(resourceId('Microsoft.Insights/components/', parameters('appInsightsName')), '2015-05-01').AppId]", - "PrimaryEndpointKey": "[concat(variables('qnaMakerWebAppName'), '-PrimaryEndpointKey')]", - "SecondaryEndpointKey": "[concat(variables('qnaMakerWebAppName'), '-SecondaryEndpointKey')]", - "DefaultAnswer": "No good match found in KB.", - "EnableMultipleTestIndex": "true", - "QNAMAKER_EXTENSION_VERSION": "latest" - } - } - ] - } - ], - "outputs": { - "qna": { - "type": "object", - "value": { - "endpoint": "[concat('https://', reference(resourceId('Microsoft.Web/sites', variables('qnaMakerWebAppName'))).hostNames[0])]", - "subscriptionKey": "[listKeys(resourceId('Microsoft.CognitiveServices/accounts', parameters('qnaMakerServiceName')),'2017-04-18').key1]" - } - } - } -} diff --git a/Orchestrator/Samples/Composer/OrchestratorDispatch/Scripts/DeploymentTemplates/template-with-new-rg.json b/Orchestrator/Samples/Composer/OrchestratorDispatch/Scripts/DeploymentTemplates/template-with-new-rg.json deleted file mode 100644 index 06b8284158..0000000000 --- a/Orchestrator/Samples/Composer/OrchestratorDispatch/Scripts/DeploymentTemplates/template-with-new-rg.json +++ /dev/null @@ -1,183 +0,0 @@ -{ - "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#", - "contentVersion": "1.0.0.0", - "parameters": { - "groupLocation": { - "type": "string", - "metadata": { - "description": "Specifies the location of the Resource Group." - } - }, - "groupName": { - "type": "string", - "metadata": { - "description": "Specifies the name of the Resource Group." - } - }, - "appId": { - "type": "string", - "metadata": { - "description": "Active Directory App ID, set as MicrosoftAppId in the Web App's Application Settings." - } - }, - "appSecret": { - "type": "string", - "metadata": { - "description": "Active Directory App Password, set as MicrosoftAppPassword in the Web App's Application Settings." - } - }, - "botId": { - "type": "string", - "metadata": { - "description": "The globally unique and immutable bot ID. Also used to configure the displayName of the bot, which is mutable." - } - }, - "botSku": { - "type": "string", - "metadata": { - "description": "The pricing tier of the Bot Service Registration. Acceptable values are F0 and S1." - } - }, - "newAppServicePlanName": { - "type": "string", - "metadata": { - "description": "The name of the App Service Plan." - } - }, - "newAppServicePlanSku": { - "type": "object", - "defaultValue": { - "name": "S1", - "tier": "Standard", - "size": "S1", - "family": "S", - "capacity": 1 - }, - "metadata": { - "description": "The SKU of the App Service Plan. Defaults to Standard values." - } - }, - "newAppServicePlanLocation": { - "type": "string", - "metadata": { - "description": "The location of the App Service Plan. Defaults to \"westus\"." - } - }, - "newWebAppName": { - "type": "string", - "defaultValue": "", - "metadata": { - "description": "The globally unique name of the Web App. Defaults to the value passed in for \"botId\"." - } - } - }, - "variables": { - "appServicePlanName": "[parameters('newAppServicePlanName')]", - "resourcesLocation": "[parameters('newAppServicePlanLocation')]", - "webAppName": "[if(empty(parameters('newWebAppName')), parameters('botId'), parameters('newWebAppName'))]", - "siteHost": "[concat(variables('webAppName'), '.azurewebsites.net')]", - "botEndpoint": "[concat('https://', variables('siteHost'), '/api/messages')]" - }, - "resources": [ - { - "name": "[parameters('groupName')]", - "type": "Microsoft.Resources/resourceGroups", - "apiVersion": "2018-05-01", - "location": "[parameters('groupLocation')]", - "properties": { - } - }, - { - "type": "Microsoft.Resources/deployments", - "apiVersion": "2018-05-01", - "name": "storageDeployment", - "resourceGroup": "[parameters('groupName')]", - "dependsOn": [ - "[resourceId('Microsoft.Resources/resourceGroups/', parameters('groupName'))]" - ], - "properties": { - "mode": "Incremental", - "template": { - "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#", - "contentVersion": "1.0.0.0", - "parameters": {}, - "variables": {}, - "resources": [ - { - "comments": "Create a new App Service Plan", - "type": "Microsoft.Web/serverfarms", - "name": "[variables('appServicePlanName')]", - "apiVersion": "2018-02-01", - "location": "[variables('resourcesLocation')]", - "sku": "[parameters('newAppServicePlanSku')]", - "properties": { - "name": "[variables('appServicePlanName')]" - } - }, - { - "comments": "Create a Web App using the new App Service Plan", - "type": "Microsoft.Web/sites", - "apiVersion": "2015-08-01", - "location": "[variables('resourcesLocation')]", - "kind": "app", - "dependsOn": [ - "[resourceId('Microsoft.Web/serverfarms/', variables('appServicePlanName'))]" - ], - "name": "[variables('webAppName')]", - "properties": { - "name": "[variables('webAppName')]", - "serverFarmId": "[variables('appServicePlanName')]", - "siteConfig": { - "appSettings": [ - { - "name": "WEBSITE_NODE_DEFAULT_VERSION", - "value": "10.14.1" - }, - { - "name": "MicrosoftAppId", - "value": "[parameters('appId')]" - }, - { - "name": "MicrosoftAppPassword", - "value": "[parameters('appSecret')]" - } - ], - "cors": { - "allowedOrigins": [ - "https://botservice.hosting.portal.azure.net", - "https://hosting.onecloud.azure-test.net/" - ] - } - } - } - }, - { - "apiVersion": "2017-12-01", - "type": "Microsoft.BotService/botServices", - "name": "[parameters('botId')]", - "location": "global", - "kind": "bot", - "sku": { - "name": "[parameters('botSku')]" - }, - "properties": { - "name": "[parameters('botId')]", - "displayName": "[parameters('botId')]", - "endpoint": "[variables('botEndpoint')]", - "msaAppId": "[parameters('appId')]", - "developerAppInsightsApplicationId": null, - "developerAppInsightKey": null, - "publishingCredentials": null, - "storageResourceId": null - }, - "dependsOn": [ - "[resourceId('Microsoft.Web/sites/', variables('webAppName'))]" - ] - } - ], - "outputs": {} - } - } - } - ] -} \ No newline at end of file diff --git a/Orchestrator/Samples/Composer/OrchestratorDispatch/Scripts/DeploymentTemplates/template-with-preexisting-rg.json b/Orchestrator/Samples/Composer/OrchestratorDispatch/Scripts/DeploymentTemplates/template-with-preexisting-rg.json deleted file mode 100644 index 5541f92962..0000000000 --- a/Orchestrator/Samples/Composer/OrchestratorDispatch/Scripts/DeploymentTemplates/template-with-preexisting-rg.json +++ /dev/null @@ -1,391 +0,0 @@ -{ - "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#", - "contentVersion": "1.0.0.0", - "parameters": { - "name": { - "type": "string", - "defaultValue": "[resourceGroup().name]" - }, - "appId": { - "type": "string", - "metadata": { - "description": "Active Directory App ID, set as MicrosoftAppId in the Web App's Application Settings." - } - }, - "appSecret": { - "type": "string", - "metadata": { - "description": "Active Directory App Password, set as MicrosoftAppPassword in the Web App's Application Settings. Defaults to \"\"." - } - }, - "useCosmosDb": { - "type": "bool", - "defaultValue": true - }, - "useAppInsights": { - "type": "bool", - "defaultValue": true - }, - "shouldCreateAuthoringResource": { - "type": "bool", - "defaultValue": true - }, - "shouldCreateLuisResource": { - "type": "bool", - "defaultValue": true - }, - "cosmosDbName": { - "type": "string", - "defaultValue": "[resourceGroup().name]" - }, - "botId": { - "type": "string", - "metadata": { - "description": "The globally unique and immutable bot ID. Also used to configure the displayName of the bot, which is mutable." - } - }, - "botSku": { - "defaultValue": "F0", - "type": "string", - "metadata": { - "description": "The pricing tier of the Bot Service Registration. Acceptable values are F0 and S1." - } - }, - "luisAuthoringKey": { - "type": "string", - "defaultValue": "" - }, - "newAppServicePlanName": { - "type": "string", - "defaultValue": "[resourceGroup().name]", - "metadata": { - "description": "The name of the new App Service Plan." - } - }, - "newAppServicePlanSku": { - "type": "object", - "defaultValue": { - "name": "S1", - "tier": "Standard", - "size": "S1", - "family": "S", - "capacity": 1 - }, - "metadata": { - "description": "The SKU of the App Service Plan. Defaults to Standard values." - } - }, - "appServicePlanLocation": { - "type": "string", - "metadata": { - "description": "The location of the App Service Plan." - } - }, - "existingAppServicePlan": { - "type": "string", - "defaultValue": "", - "metadata": { - "description": "Name of the existing App Service Plan used to create the Web App for the bot." - } - }, - "newWebAppName": { - "type": "string", - "defaultValue": "[resourceGroup().name]", - "metadata": { - "description": "The globally unique name of the Web App. Defaults to the value passed in for \"botId\"." - } - }, - "appInsightsName": { - "type": "string", - "defaultValue": "[resourceGroup().name]" - }, - "location": { - "type": "string", - "defaultValue": "[resourceGroup().location]" - }, - "appInsightsLocation": { - "type": "string", - "defaultValue": "[resourceGroup().location]" - }, - "useStorage": { - "type": "bool", - "defaultValue": true - }, - "storageAccountName": { - "type": "string", - "defaultValue": "[resourceGroup().name]" - }, - "luisServiceName": { - "type": "string", - "defaultValue": "[concat(resourceGroup().name, '-luis')]" - }, - "luisServiceAuthoringSku": { - "type": "string", - "defaultValue": "F0" - }, - "luisServiceRunTimeSku": { - "type": "string", - "defaultValue": "S0" - }, - "luisServiceLocation": { - "type": "string", - "defaultValue": "[resourceGroup().location]" - } - }, - "variables": { - "defaultAppServicePlanName": "[if(empty(parameters('existingAppServicePlan')), 'createNewAppServicePlan', parameters('existingAppServicePlan'))]", - "useExistingAppServicePlan": "[not(equals(variables('defaultAppServicePlanName'), 'createNewAppServicePlan'))]", - "servicePlanName": "[if(variables('useExistingAppServicePlan'), parameters('existingAppServicePlan'), parameters('newAppServicePlanName'))]", - "resourcesLocation": "[parameters('appServicePlanLocation')]", - "cosmosDbAccountName": "[toLower(take(replace(parameters('cosmosDbName'), '_', ''), 31))]", - "webAppName": "[if(empty(parameters('newWebAppName')), parameters('botId'), parameters('newWebAppName'))]", - "siteHost": "[concat(variables('webAppName'), '.azurewebsites.net')]", - "botEndpoint": "[concat('https://', variables('siteHost'), '/api/messages')]", - "storageAccountName": "[toLower(take(replace(replace(parameters('storageAccountName'), '-', ''), '_', ''), 24))]", - "LuisAuthoringAccountName": "[concat(parameters('luisServiceName'), '-Authoring')]" - }, - "resources": [ - { - "apiVersion": "2018-02-01", - "name": "1d41002f-62a1-49f3-bd43-2f3f32a19cbb", - "type": "Microsoft.Resources/deployments", - "properties": { - "mode": "Incremental", - "template": { - "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#", - "contentVersion": "1.0.0.0", - "resources": [] - } - } - }, - { - "comments": "Create a new App Service Plan if no existing App Service Plan name was passed in.", - "type": "Microsoft.Web/serverfarms", - "condition": "[not(variables('useExistingAppServicePlan'))]", - "name": "[variables('servicePlanName')]", - "apiVersion": "2018-02-01", - "location": "[variables('resourcesLocation')]", - "sku": "[parameters('newAppServicePlanSku')]", - "properties": { - "name": "[variables('servicePlanName')]" - } - }, - { - "comments": "Create a Web App using an App Service Plan", - "type": "Microsoft.Web/sites", - "apiVersion": "2015-08-01", - "location": "[variables('resourcesLocation')]", - "kind": "app", - "dependsOn": [ - "[resourceId('Microsoft.Web/serverfarms/', variables('servicePlanName'))]" - ], - "name": "[variables('webAppName')]", - "properties": { - "name": "[variables('webAppName')]", - "serverFarmId": "[variables('servicePlanName')]", - "siteConfig": { - "webSocketsEnabled": true, - "appSettings": [ - { - "name": "WEBSITE_NODE_DEFAULT_VERSION", - "value": "10.14.1" - }, - { - "name": "MicrosoftAppId", - "value": "[parameters('appId')]" - }, - { - "name": "MicrosoftAppPassword", - "value": "[parameters('appSecret')]" - } - ], - "cors": { - "allowedOrigins": [ - "https://botservice.hosting.portal.azure.net", - "https://hosting.onecloud.azure-test.net/" - ] - } - } - } - }, - { - "comments": "CosmosDB for bot state.", - "type": "Microsoft.DocumentDB/databaseAccounts", - "kind": "GlobalDocumentDB", - "apiVersion": "2015-04-08", - "name": "[variables('cosmosDbAccountName')]", - "location": "[parameters('location')]", - "properties": { - "databaseAccountOfferType": "Standard", - "locations": [ - { - "locationName": "[parameters('location')]", - "failoverPriority": 0 - } - ] - }, - "condition": "[parameters('useCosmosDb')]" - }, - { - "type": "Microsoft.DocumentDB/databaseAccounts/sqlDatabases", - "apiVersion": "2020-03-01", - "name": "[concat(variables('cosmosDbAccountName'), '/botstate-db')]", - "dependsOn": [ - "[resourceId('Microsoft.DocumentDB/databaseAccounts', variables('cosmosDbAccountName'))]" - ], - "properties": { - "resource": { - "id": "botstate-db" - }, - "options": {} - }, - "condition": "[parameters('useCosmosDb')]" - }, - { - "type": "Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers", - "apiVersion": "2020-03-01", - "name": "[concat(variables('cosmosDbAccountName'), '/botstate-db/botstate-container')]", - "dependsOn": [ - "[resourceId('Microsoft.DocumentDB/databaseAccounts/sqlDatabases', variables('cosmosDbAccountName'), 'botstate-db')]", - "[resourceId('Microsoft.DocumentDB/databaseAccounts', variables('cosmosDbAccountName'))]" - ], - "properties": { - "resource": { - "id": "botstate-container", - "indexingPolicy": { - "indexingMode": "consistent", - "automatic": true, - "includedPaths": [ - { - "path": "/*" - } - ], - "excludedPaths": [ - { - "path": "/\"_etag\"/?" - } - ] - }, - "partitionKey": { - "paths": [ - "/id" - ], - "kind": "Hash" - }, - "conflictResolutionPolicy": { - "mode": "LastWriterWins", - "conflictResolutionPath": "/_ts" - } - }, - "options": {} - }, - "condition": "[parameters('useCosmosDb')]" - }, - { - "apiVersion": "2018-07-12", - "type": "Microsoft.BotService/botServices", - "name": "[parameters('botId')]", - "location": "global", - "kind": "azurebot", - "sku": { - "name": "[parameters('botSku')]" - }, - "properties": { - "name": "[parameters('botId')]", - "displayName": "[parameters('botId')]", - "endpoint": "[variables('botEndpoint')]", - "msaAppId": "[parameters('appId')]", - "openWithHint": "bfcomposer://", - "developerAppInsightsApplicationId": null, - "developerAppInsightKey": null, - "publishingCredentials": null, - "storageResourceId": null - }, - "dependsOn": [ - "[resourceId('Microsoft.Web/sites/', variables('webAppName'))]" - ] - }, - { - "comments": "app insights", - "type": "Microsoft.Insights/components", - "kind": "web", - "apiVersion": "2015-05-01", - "name": "[parameters('appInsightsName')]", - "location": "[parameters('appInsightsLocation')]", - "properties": { - "Application_Type": "web" - }, - "condition": "[parameters('useAppInsights')]" - }, - { - "comments": "storage account", - "type": "Microsoft.Storage/storageAccounts", - "kind": "StorageV2", - "apiVersion": "2018-07-01", - "name": "[variables('storageAccountName')]", - "location": "[parameters('location')]", - "sku": { - "name": "Standard_LRS" - }, - "condition": "[parameters('useStorage')]" - }, - { - "comments": "Cognitive service authoring key for all LUIS apps.", - "apiVersion": "2017-04-18", - "name": "[variables('LuisAuthoringAccountName')]", - "location": "[parameters('luisServiceLocation')]", - "type": "Microsoft.CognitiveServices/accounts", - "kind": "LUIS.Authoring", - "sku": { - "name": "[parameters('luisServiceAuthoringSku')]" - }, - "condition": "[parameters('shouldCreateAuthoringResource')]" - }, - { - "comments": "Cognitive service endpoint key for all LUIS apps.", - "type": "Microsoft.CognitiveServices/accounts", - "kind": "LUIS", - "apiVersion": "2017-04-18", - "name": "[parameters('luisServiceName')]", - "location": "[parameters('luisServiceLocation')]", - "sku": { - "name": "[parameters('luisServiceRunTimeSku')]" - }, - "condition": "[parameters('shouldCreateLuisResource')]" - } - ], - "outputs": { - "ApplicationInsights": { - "type": "object", - "value": { - "InstrumentationKey": "[if(parameters('useAppInsights'), reference(resourceId('Microsoft.Insights/components', parameters('appInsightsName'))).InstrumentationKey, '')]" - } - }, - "cosmosDb": { - "type": "object", - "value": { - "cosmosDBEndpoint": "[if(parameters('useCosmosDb'), reference(resourceId('Microsoft.DocumentDB/databaseAccounts', variables('cosmosDbAccountName'))).documentEndpoint, '')]", - "authKey": "[if(parameters('useCosmosDb'), listKeys(resourceId('Microsoft.DocumentDB/databaseAccounts', variables('cosmosDbAccountName')), '2015-04-08').primaryMasterKey, '')]", - "databaseId": "botstate-db", - "containerId": "botstate-container" - } - }, - "blobStorage": { - "type": "object", - "value": { - "connectionString": "[if(parameters('useStorage'), concat('DefaultEndpointsProtocol=https;AccountName=', variables('storageAccountName'), ';AccountKey=', listKeys(resourceId('Microsoft.Storage/storageAccounts', variables('storageAccountName')), '2018-07-01').keys[0].value, ';EndpointSuffix=core.windows.net'), '')]", - "container": "transcripts" - } - }, - "luis": { - "type": "object", - "value": { - "endpointKey": "[if(parameters('shouldCreateLuisResource'), listKeys(resourceId('Microsoft.CognitiveServices/accounts', parameters('luisServiceName')),'2017-04-18').key1, '')]", - "authoringKey": "[if(parameters('shouldCreateAuthoringResource'), listKeys(resourceId('Microsoft.CognitiveServices/accounts', variables('LuisAuthoringAccountName')),'2017-04-18').key1, parameters('luisAuthoringKey'))]", - "region": "[parameters('luisServiceLocation')]", - "endpoint": "[if(parameters('shouldCreateLuisResource'), reference(resourceId('Microsoft.CognitiveServices/accounts', parameters('luisServiceName'))).endpoint, '')]", - "authoringEndpoint": "[if(parameters('shouldCreateAuthoringResource'), reference(resourceId('Microsoft.CognitiveServices/accounts', variables('LuisAuthoringAccountName'))).endpoint, '')]" - } - } - } -} \ No newline at end of file diff --git a/Orchestrator/Samples/Composer/OrchestratorDispatch/Scripts/README.md b/Orchestrator/Samples/Composer/OrchestratorDispatch/Scripts/README.md deleted file mode 100644 index 34240605cb..0000000000 --- a/Orchestrator/Samples/Composer/OrchestratorDispatch/Scripts/README.md +++ /dev/null @@ -1,193 +0,0 @@ -# Manually provision resources and publish a bot to Azure (_Preview_) - -This article covers script-based instructions to manually provision resources and publish a bot built using Composer to _Azure Web App (Preview)_ and _Azure Functions (Preview)_. - -## Prerequisites - -- A subscription to [Microsoft Azure](https://azure.microsoft.com/free/). -- [A basic bot built using Composer](https://aka.ms/composer-create-first-bot). -- Latest version of the [Azure CLI](https://docs.microsoft.com/cli/azure/install-azure-cli). -- [Node.js](https://nodejs.org/). Use version 12.13.0 or later. -- PowerShell version 6.0 and later. - -## Provision Azure resources - -This section covers steps to provision required Azure resources using JavaScript scripts. If you already have your Azure resources provisioned, skip to the [publish a bot to Azure](#publish-a-bot-to-azure) section. - -Follow these instructions to manually provision Azure resources: - -1. Open a new Command Prompt and navigate to the **scripts** folder of your bot's project folder. For example: - - ```cmd - cd C:\Users\UserName\Documents\Composer\BotName\scripts - ``` - -2. Run the following command to install the dependencies: - - ```cmd - npm install - ``` - -3. Run the following command to provision new Azure resources. - - - **_Azure Web App (Preview)_**: - - ```cmd - node provisionComposer.js --subscriptionId= --name= --appPassword= --environment= - ``` - - - **_Azure Functions (Preview)_**: - - ```cmd - node provisionComposer.js --subscriptionId= --name= --appPassword= --environment= --customArmTemplate=DeploymentTemplates/function-template-with-preexisting-rg.json - ``` - - | Property | Description | - | --------------------------- | --------------------------------------------------------------------------------------- | - | Your Azure Subscription ID | Find it in your Azure resource in the **Subscription ID** field. | - | Name of your resource group | The name you give to the resource group you are creating. | - | App password | At least 16 characters with at least one number, one letter, and one special character. | - | Name for environment | The name you give to the publish environment. | - - Once completed, the provision scripts will create the following resources in the Azure portal: - - | Resource | Required/Optional | - | --------------------------------------------- | ----------------- | - | App Service plan | Required | - | App Service | Required | - | Application Registration | Required | - | Azure Cosmos DB | Optional | - | Application Insights | Optional | - | Azure Blob Storage | Optional | - | LUIS authoring resource (Cognitive Services) | Optional | - | LUIS prediction resource (Cognitive Services) | Optional | - | QnA Maker resources (Cognitive Services) | Optional | - - > [!TIP] - > Read the [parameters list](#provision-scripts-parameters-list) to customize the provision scripts and create the Azure resources you want. - - 1. You will be asked to login to the Azure portal in your browser. - - > ![publish az login](./media/publish-az-login.png) - - 2. If you see the error message "InsufficientQuota", add a param '--createLuisAuthoringResource false' and run the script again. - - - **_Azure Web App_**: - - ```cmd - node provisionComposer.js --subscriptionId= --name=--appPassword= --environment= --createLuisAuthoringResource false - ``` - - - **_Azure Functions_**: - - ```cmd - node provisionComposer.js --subscriptionId= --name= --appPassword= --environment= --createLuisAuthoringResource false --customArmTemplate=DeploymentTemplates/function-template-with-preexisting-rg.json - ``` - - > [!NOTE] - > If you use `--createLuisAuthoringResource false` in this step, you should manually add the LUIS authoring key to the publish configuration in the [deploy bot to new Azure resources](#deploy-bot-to-new-azure-resources) section. The default region is `westus`. To provision to other regions, you should add `--location region`. - -4. As the Azure resources are being provisioned, which takes a few minutes, you will see the following: - - > ![Create Azure resource command line](./media/create-azure-resource-command-line.png) - - Once completed, you will see the generated JSON appears in the command line like the following. The JSON output is the publishing profile, which will be used in step **3** of the [Publish a bot to Azure](#publish-a-bot-to-azure) section. - - ```json - { - "accessToken": "", - "name": "", - "environment": "", - "hostname": "", - "luisResource": "", - "settings": { - "applicationInsights": { - "InstrumentationKey": "" - }, - "cosmosDb": { - "cosmosDBEndpoint": "", - "authKey": "", - "databaseId": "botstate-db", - "collectionId": "botstate-collection", - "containerId": "botstate-container" - }, - "blobStorage": { - "connectionString": "", - "container": "transcripts" - }, - "luis": { - "endpointKey": "", - "authoringKey": "", - "region": "westus" - }, - "qna": { - "endpoint": "", - "subscriptionKey": "" - }, - "MicrosoftAppId": "", - "MicrosoftAppPassword": "" - } - } - ``` - -## Publish a bot to Azure - -This section covers instructions to publish a bot to Azure using PowerShell scripts. Make sure you already have required Azure resources provisioned before publishing a bot, if not, follow these instructions from the [provision Azure resources](#provision-azure-resources) section. - -Follow these steps to manually publish a bot to Azure: - -1. Install the required dependencies. - - bf command - - ```cmd - npm i -g @microsoft/botframework-cli@next - ``` - - bf plugins - - ```cmd - bf plugins:install @microsoft/bf-sampler-cli@beta - ``` - -2. [Eject your bot's C# runtime](https://aka.ms/composer-customize-action#export-runtime). - -3. Save your publishing profile in `json` format (the JSON output from step **4** of the [provision Azure resources](#provision-azure-resources) section and execute the following command: - - ```powershell - .\Scripts\deploy.ps1 -publishProfilePath - ``` - -> [!NOTE] -> Make sure you [set the correct subscription](https://docs.microsoft.com/cli/azure/account?view=azure-cli-latest#az_account_set) when running the scripts to publish your bot. Use the Azure CLI command `az account set --subscription` to set subscription if needed. The publishing process will take a couple of minutes to finish. - -## Refresh your Azure Token - -Follow these steps to get a new token if you encounter an error about your access token being expired: - -- Open a terminal window. -- Run `az account get-access-token`. -- This will result in a JSON object containing the new `accessToken`, printed to the console. -- Copy the value of the accessToken from the terminal and into the publish `accessToken` field in the profile in Composer. - -## Additional information - -### Provision scripts parameters list - -You don't need to create a complete list of the Azure resources as covered in **step 3** of the [provision Azure resources](#provision-azure-resources) section. The following is a table of the parameters you can use to customize the provision scripts so that you only provision the resources needed. - -| Parameter | Required/Optional | Default value | Description | -| --------------------------- | ----------------- | -------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| subscriptionId | Required | N/A | Your Azure subscription ID. | -| name | Required | N/A | The name of your resource group | -| appPassword | Required | N/A | The password to create the resource. It must be at least 16 characters long, contain at least 1 upper or lower case alphabetical character, and contain at least 1 special character | -| environment | Optional | dev | N/A | -| location | Optional | `westus` | Your Azure resource group region | -| tenantId | Optional | default tenantId | ID of your tenant if required. | -| customArmTemplate | Optional | `/DeploymentTemplates/template-with-preexisting-rg.json` | For Azure Functions or your own template for a custom deployment. | -| createLuisResource | Optional | `true` | The LUIS prediction resource to create. Region is default to `westus` and cannot be changed. | -| createLuisAuthoringResource | Optional | true | The LUIS authoring resource to create. Region is default to `westus` and cannot be changed. | -| createQnAResource | Optional | `true` | The QnA resource to create. | -| createCosmosDb | Optional | `true` | The CosmosDb resource to create. | -| createStorage | Optional | `true` | The BlobStorage resource to create. | -| createAppInsights | Optional | `true` | The AppInsights resource to create. | diff --git a/Orchestrator/Samples/Composer/OrchestratorDispatch/Scripts/deploy.ps1 b/Orchestrator/Samples/Composer/OrchestratorDispatch/Scripts/deploy.ps1 deleted file mode 100644 index 62ab75bc67..0000000000 --- a/Orchestrator/Samples/Composer/OrchestratorDispatch/Scripts/deploy.ps1 +++ /dev/null @@ -1,241 +0,0 @@ -Param( - [string] $name, - [string] $environment, - [string] $luisAuthoringKey, - [string] $luisAuthoringRegion, - [string] $language, - [string] $projFolder = $(Get-Location), - [string] $botPath, - [string] $logFile = $(Join-Path $PSScriptRoot .. "deploy_log.txt") -) - -if ($PSVersionTable.PSVersion.Major -lt 6) { - Write-Host "! Powershell 6 is required, current version is $($PSVersionTable.PSVersion.Major), please refer following documents for help." - Write-Host "For Windows - https://docs.microsoft.com/en-us/powershell/scripting/install/installing-powershell-core-on-windows?view=powershell-6" - Write-Host "For Mac - https://docs.microsoft.com/en-us/powershell/scripting/install/installing-powershell-core-on-macos?view=powershell-6" - Break -} - -if ((dotnet --version) -lt 3) { - Write-Host "! dotnet core 3.0 is required, please refer following documents for help." - Write-Host "https://dotnet.microsoft.com/download/dotnet-core/3.0" - Break -} - -# Get mandatory parameters -if (-not $name) { - $name = Read-Host "? Bot Web App Name" -} - -if (-not $environment) { - $environment = Read-Host "? Environment Name (single word, all lowercase)" - $environment = $environment.ToLower().Split(" ") | Select-Object -First 1 -} - -if (-not $language) { - $language = "en-us" -} - -# Reset log file -if (Test-Path $logFile) { - Clear-Content $logFile -Force | Out-Null -} -else { - New-Item -Path $logFile | Out-Null -} - -# Check for existing deployment files -if (-not (Test-Path (Join-Path $projFolder '.deployment'))) { - # Add needed deployment files for az - az bot prepare-deploy --lang Csharp --code-dir $projFolder --proj-file-path Microsoft.Bot.Runtime.WebHost.csproj --output json | Out-Null -} - -# Delete src zip, if it exists -$zipPath = $(Join-Path $projFolder 'code.zip') -if (Test-Path $zipPath) { - Remove-Item $zipPath -Force | Out-Null -} - -# Perform dotnet publish step ahead of zipping up -$publishFolder = $(Join-Path $projFolder 'bin\Release\netcoreapp3.1') -dotnet publish -c release -o $publishFolder -v q > $logFile - -# Copy bot files to running folder -$remoteBotPath = $(Join-Path $publishFolder "ComposerDialogs") -Remove-Item $remoteBotPath -Recurse -ErrorAction Ignore - -if (-not $botPath) { - # If don't provide bot path, then try to copy all dialogs except the runtime folder in parent folder to the publishing folder (bin\Realse\ Folder) - $botPath = '../../..' -} - -$botPath = $(Join-Path $botPath '*') -Write-Host "Publishing dialogs from external bot project: $($botPath)" -Copy-Item -Path (Get-Item -Path $botPath -Exclude ('runtime', 'generated')).FullName -Destination $remoteBotPath -Recurse -Force -Container - -# Try to get luis config from appsettings -$settingsPath = $(Join-Path $remoteBotPath settings appsettings.json) -$settings = Get-Content $settingsPath | ConvertFrom-Json -$luisSettings = $settings.luis - -if (-not $luisAuthoringKey) { - $luisAuthoringKey = $luisSettings.authoringKey -} - -if (-not $luisAuthoringRegion) { - $luisAuthoringRegion = $luisSettings.region -} - -# set feature configuration -$featureConfig = @{ } -if ($settings.feature) { - $featureConfig = $settings.feature -} -else { - # Enable all features to true by default - $featureConfig["UseTelementryLoggerMiddleware"] = $true - $featureConfig["UseTranscriptLoggerMiddleware"] = $true - $featureConfig["UseShowTypingMiddleware"] = $true - $featureConfig["UseInspectionMiddleware"] = $true - $featureConfig["UseCosmosDb"] = $true -} - -# Add Luis Config to appsettings -if ($luisAuthoringKey -and $luisAuthoringRegion) { - Set-Location -Path $remoteBotPath - - $models = Get-ChildItem $remoteBotPath -Recurse -Filter "*.lu" | Resolve-Path -Relative - - # Generate Luconfig.json file - $luconfigjson = @{ - "name" = $name; - "defaultLanguage" = $language; - "models" = $models - } - - $luString = $models | Out-String - Write-Host $luString - - $luconfigjson | ConvertTo-Json -Depth 100 | Out-File $(Join-Path $remoteBotPath luconfig.json) - - # create generated folder if not - if (!(Test-Path generated)) { - $null = New-Item -ItemType Directory -Force -Path generated - } - - # ensure bot cli is installed - if (Get-Command bf -errorAction SilentlyContinue) {} - else { - Write-Host "bf luis:build does not exist. Start installation..." - npm i -g @microsoft/botframework-cli - Write-Host "successfully" - } - - # Execute bf luis:build command - bf luis:build --luConfig $(Join-Path $remoteBotPath luconfig.json) --botName $name --authoringKey $luisAuthoringKey --dialog crosstrained --out ./generated --suffix $environment -f --region $luisAuthoringRegion - - if ($?) { - Write-Host "lubuild succeeded" - } - else { - Write-Host "lubuild failed, please verify your luis models." - Break - } - - Set-Location -Path $projFolder - - $settings = New-Object PSObject - - $luisConfigFiles = Get-ChildItem -Path $publishFolder -Include "luis.settings*" -Recurse -Force - - $luisAppIds = @{ } - - foreach ($luisConfigFile in $luisConfigFiles) { - $luisSetting = Get-Content $luisConfigFile.FullName | ConvertFrom-Json - $luis = $luisSetting.luis - $luis.PSObject.Properties | Foreach-Object { $luisAppIds[$_.Name] = $_.Value } - } - - $luisEndpoint = "https://$luisAuthoringRegion.api.cognitive.microsoft.com" - - $luisConfig = @{ } - - $luisConfig["endpoint"] = $luisEndpoint - - foreach ($key in $luisAppIds.Keys) { $luisConfig[$key] = $luisAppIds[$key] } - - $settings | Add-Member -Type NoteProperty -Force -Name 'luis' -Value $luisConfig - - $tokenResponse = (az account get-access-token) | ConvertFrom-Json - $token = $tokenResponse.accessToken - - if (-not $token) { - Write-Host "! Could not get valid Azure access token" - Break - } - - Write-Host "Getting Luis accounts..." - $luisAccountEndpoint = "$luisEndpoint/luis/api/v2.0/azureaccounts" - $luisAccount = $null - try { - $luisAccounts = Invoke-WebRequest -Method GET -Uri $luisAccountEndpoint -Headers @{"Authorization" = "Bearer $token"; "Ocp-Apim-Subscription-Key" = $luisAuthoringKey } | ConvertFrom-Json - - foreach ($account in $luisAccounts) { - if ($account.AccountName -eq "$name-$environment-luis") { - $luisAccount = $account - break - } - } - } - catch { - Write-Host "Return invalid status code while gettings luis accounts: $($_.Exception.Response.StatusCode.Value__), error message: $($_.Exception.Response)" - break - } - - $luisAccountBody = $luisAccount | ConvertTo-Json - - # Assign each luis id in luisAppIds with the endpoint key - foreach ($k in $luisAppIds.Keys) { - $luisAppId = $luisAppIds.Item($k) - Write-Host "Assigning to Luis app id: $luisAppId" - $luisAssignEndpoint = "$luisEndpoint/luis/api/v2.0/apps/$luisAppId/azureaccounts" - try { - $response = Invoke-WebRequest -Method POST -ContentType application/json -Body $luisAccountBody -Uri $luisAssignEndpoint -Headers @{"Authorization" = "Bearer $token"; "Ocp-Apim-Subscription-Key" = $luisAuthoringKey } | ConvertFrom-Json - Write-Host $response - } - catch { - Write-Host "Return invalid status code while assigning key to luis apps: $($_.Exception.Response.StatusCode.Value__), error message: $($_.Exception.Response)" - exit - } - } -} - -$settings | Add-Member -Type NoteProperty -Force -Name 'feature' -Value $featureConfig -$settings | ConvertTo-Json -depth 100 | Out-File $settingsPath - -$resourceGroup = "$name-$environment" - -if ($?) { - # Compress source code - Get-ChildItem -Path "$($publishFolder)" | Compress-Archive -DestinationPath "$($zipPath)" -Force | Out-Null - - # Publish zip to Azure - Write-Host "> Publishing to Azure ..." -ForegroundColor Green - $deployment = (az webapp deployment source config-zip ` - --resource-group $resourceGroup ` - --name "$name-$environment" ` - --src $zipPath ` - --output json) 2>> $logFile - - if ($deployment) { - Write-Host "Publish Success" - } - else { - Write-Host "! Deploy failed. Review the log for more information." -ForegroundColor DarkRed - Write-Host "! Log: $($logFile)" -ForegroundColor DarkRed - } -} -else { - Write-Host "! Could not deploy automatically to Azure. Review the log for more information." -ForegroundColor DarkRed - Write-Host "! Log: $($logFile)" -ForegroundColor DarkRed -} diff --git a/Orchestrator/Samples/Composer/OrchestratorDispatch/Scripts/package.json b/Orchestrator/Samples/Composer/OrchestratorDispatch/Scripts/package.json deleted file mode 100644 index 13b5294de5..0000000000 --- a/Orchestrator/Samples/Composer/OrchestratorDispatch/Scripts/package.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "name": "azure_provision", - "version": "1.0.0", - "description": "provision to azure cloud", - "main": "provisionComposer.js", - "license": "MIT", - "scripts": { - "start": "node provisionComposer.js" - }, - "dependencies": { - "@azure/arm-appinsights": "^2.1.0", - "@azure/arm-botservice": "^1.0.0", - "@azure/arm-resources": "^2.1.0", - "@azure/graph": "^5.0.1", - "@azure/ms-rest-nodeauth": "^3.0.3", - "@types/fs-extra": "^8.1.0", - "chalk": "^4.0.0", - "fs-extra": "^8.1.0", - "minimist": "^1.2.5", - "ora": "^4.0.4", - "request-promise": "^4.2.5" - } -} diff --git a/Orchestrator/Samples/Composer/OrchestratorDispatch/Scripts/provisionComposer.js b/Orchestrator/Samples/Composer/OrchestratorDispatch/Scripts/provisionComposer.js deleted file mode 100644 index 9eb4aa0c57..0000000000 --- a/Orchestrator/Samples/Composer/OrchestratorDispatch/Scripts/provisionComposer.js +++ /dev/null @@ -1,818 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License. -const chalk = require('chalk'); -const fs = require('fs-extra'); -const msRestNodeAuth = require('@azure/ms-rest-nodeauth'); -const argv = require('minimist')(process.argv.slice(2)); -const path = require('path'); -const rp = require('request-promise'); -const { promisify } = require('util'); -const { GraphRbacManagementClient } = require('@azure/graph'); -const { ApplicationInsightsManagementClient } = require('@azure/arm-appinsights'); -const { AzureBotService } = require('@azure/arm-botservice'); -const { ResourceManagementClient } = require('@azure/arm-resources'); -const readFile = promisify(fs.readFile); -const ora = require('ora'); - -const logger = (msg) => { - if (msg.status === BotProjectDeployLoggerType.PROVISION_ERROR) { - console.log(chalk.red(msg.message)); - } else if (msg.status === BotProjectDeployLoggerType.PROVISION_ERROR_DETAILS) { - console.log(chalk.white(msg.message)); - } else { - console.log(chalk.green(msg.message)); - } -}; - -const usage = () => { - const options = [ - ['subscriptionId', 'Azure Subscription Id'], - ['name', 'Project Name'], - ['appPassword', '16 character password'], - ['environment', 'Environment name (Defaults to dev)'], - ['location', 'Azure Region (Defaults to westus)'], - ['resourceGroup', 'Name of your resource group (Defaults to name-environment)'], - ['appId', 'Microsoft App ID (Will create if absent)'], - ['tenantId', 'ID of your tenant if required (will choose first in list by default)'], - ['createLuisResource', 'Create a LUIS resource? Default true'], - ['createLuisAuthoringResource', 'Create a LUIS authoring resource? Default true'], - ['createCosmosDb', 'Create a CosmosDB? Default true'], - ['createStorage', 'Create a storage account? Default true'], - ['createAppInsights', 'Create an AppInsights resource? Default true'], - ['createQnAResource', 'Create a QnA resource? Default true'], - [ - 'customArmTemplate', - 'Path to runtime ARM template. By default it will use an Azure WebApp template. Pass `DeploymentTemplates/function-template-with-preexisting-rg.json` for Azure Functions or your own template for a custom deployment.', - ], - ['qnaTemplate', 'Path to qna template. By default it will use `DeploymentTemplates/qna-template.json`'], - ]; - - const instructions = [ - ``, - chalk.bold('Provision Azure resources for use with Bot Framework Composer bots'), - `* This script will create a new resource group and the necessary Azure resources needed to operate a Bot Framework bot in the cloud.`, - `* Use this to create a publishing profile used in Composer's "Publish" toolbar.`, - ``, - chalk.bold(`Basic Usage:`), - chalk.greenBright(`node provisionComposer --subscriptionId=`) + - chalk.yellow('') + - chalk.greenBright(' --name=') + - chalk.yellow('') + - chalk.greenBright(' --appPassword=') + - chalk.yellow('<16 character password>'), - ``, - chalk.bold(`All options:`), - ...options.map((option) => { - return chalk.greenBright('--' + option[0]) + '\t' + chalk.yellow(option[1]); - }), - ]; - - console.log(instructions.join('\n')); -}; - -// check for required parameters -if (Object.keys(argv).length === 0) { - return usage(); -} - -if (!argv.name || !argv.subscriptionId || !argv.appPassword) { - return usage(); -} - -// Get required fields from the arguments -const subId = argv.subscriptionId; -const name = argv.name.toString(); -const appPassword = argv.appPassword; - -// Get optional fields from the arguments -const environment = argv.environment || 'dev'; -const location = argv.location || 'westus'; -const appId = argv.appId; // MicrosoftAppId - generated if left blank - -// Get option flags -const createLuisResource = argv.createLuisResource == 'false' ? false : true; -const createLuisAuthoringResource = argv.createLuisAuthoringResource == 'false' ? false : true; -const createCosmosDb = argv.createCosmosDb == 'false' ? false : true; -const createStorage = argv.createStorage == 'false' ? false : true; -const createAppInsights = argv.createAppInsights == 'false' ? false : true; -const createQnAResource = argv.createQnAResource == 'false' ? false : true; -var tenantId = argv.tenantId ? argv.tenantId : ''; - -const templatePath = - argv.customArmTemplate || path.join(__dirname, 'DeploymentTemplates', 'template-with-preexisting-rg.json'); -const qnaTemplatePath = argv.qnaTemplate || path.join(__dirname, 'DeploymentTemplates', 'qna-template.json'); -const resourceGroup = argv.resourceGroup || `${name}-${environment}`; - -const BotProjectDeployLoggerType = { - // Logger Type for Provision - PROVISION_INFO: 'PROVISION_INFO', - PROVISION_ERROR: 'PROVISION_ERROR', - PROVISION_WARNING: 'PROVISION_WARNING', - PROVISION_SUCCESS: 'PROVISION_SUCCESS', - PROVISION_ERROR_DETAILS: 'PROVISION_ERROR_DETAILS', -}; - -/** - * Create a Bot Framework registration - * @param {} graphClient - * @param {*} displayName - * @param {*} appPassword - */ -const createApp = async (graphClient, displayName, appPassword) => { - try { - const createRes = await graphClient.applications.create({ - displayName: displayName, - passwordCredentials: [ - { - value: appPassword, - startDate: new Date(), - endDate: new Date(new Date().setFullYear(new Date().getFullYear() + 2)), - }, - ], - availableToOtherTenants: true, - replyUrls: ['https://token.botframework.com/.auth/web/redirect'], - }); - return createRes; - } catch (err) { - logger({ - status: BotProjectDeployLoggerType.PROVISION_ERROR, - message: err.body.message, - }); - return false; - } -}; - -/** - * Create an Azure resources group - * @param {} client - * @param {*} location - * @param {*} resourceGroupName - */ -const createResourceGroup = async (client, location, resourceGroupName) => { - logger({ - status: BotProjectDeployLoggerType.PROVISION_INFO, - message: `> Creating resource group ...`, - }); - const param = { - location: location, - }; - - return await client.resourceGroups.createOrUpdate(resourceGroupName, param); -}; - -/** - * Format parameters - * @param {} scope - */ -const pack = (scope) => { - return { - value: scope, - }; -}; - -const unpackObject = (output) => { - const unpacked = {}; - for (const key in output) { - const objValue = output[key]; - if (objValue.value) { - unpacked[key] = objValue.value; - } - } - return unpacked; -}; - -/** - * For more information about this api, please refer to this doc: https://docs.microsoft.com/en-us/rest/api/resources/Tenants/List - * @param {*} accessToken - */ -const getTenantId = async (accessToken) => { - if (!accessToken) { - throw new Error( - 'Error: Missing access token. Please provide a non-expired Azure access token. Tokens can be obtained by running az account get-access-token' - ); - } - if (!subId) { - throw new Error(`Error: Missing subscription Id. Please provide a valid Azure subscription id.`); - } - try { - const tenantUrl = `https://management.azure.com/subscriptions/${subId}?api-version=2020-01-01`; - const options = { - headers: { Authorization: `Bearer ${accessToken}` }, - }; - const response = await rp.get(tenantUrl, options); - const jsonRes = JSON.parse(response); - if (jsonRes.tenantId === undefined) { - throw new Error(`No tenants found in the account.`); - } - return jsonRes.tenantId; - } catch (err) { - throw new Error(`Get Tenant Id Failed, details: ${getErrorMesssage(err)}`); - } -}; - -/** - * - * @param {*} appId the appId of application registration - * @param {*} appPwd the app password of application registration - * @param {*} location the locaiton of all resources - * @param {*} name the name of resource group - * @param {*} shouldCreateAuthoringResource - * @param {*} shouldCreateLuisResource - * @param {*} useAppInsights - * @param {*} useCosmosDb - * @param {*} useStorage - */ -const getDeploymentTemplateParam = ( - appId, - appPwd, - location, - name, - shouldCreateAuthoringResource, - shouldCreateLuisResource, - useAppInsights, - useCosmosDb, - useStorage -) => { - return { - appId: pack(appId), - appSecret: pack(appPwd), - appServicePlanLocation: pack(location), - botId: pack(name), - shouldCreateAuthoringResource: pack(shouldCreateAuthoringResource), - shouldCreateLuisResource: pack(shouldCreateLuisResource), - useAppInsights: pack(useAppInsights), - useCosmosDb: pack(useCosmosDb), - useStorage: pack(useStorage), - }; -}; - -/** - * Get QnA template param - */ -const getQnaTemplateParam = (location, name) => { - return { - appServicePlanLocation: pack(location), - name: pack(name), - }; -}; - -/** - * Validate the qna template and the qna template param - */ -const validateQnADeployment = async (client, resourceGroupName, deployName, templateParam) => { - logger({ - status: BotProjectDeployLoggerType.PROVISION_INFO, - message: '> Validating QnA deployment ...', - }); - - const templateFile = await readFile(qnaTemplatePath, { encoding: 'utf-8' }); - const deployParam = { - properties: { - template: JSON.parse(templateFile), - parameters: templateParam, - mode: 'Incremental', - }, - }; - return await client.deployments.validate(resourceGroupName, deployName, deployParam); -}; - -/** - * Create a QnA resource deployment - * @param {*} client - * @param {*} resourceGroupName - * @param {*} deployName - * @param {*} templateParam - */ -const createQnADeployment = async (client, resourceGroupName, deployName, templateParam) => { - const templateFile = await readFile(qnaTemplatePath, { encoding: 'utf-8' }); - const deployParam = { - properties: { - template: JSON.parse(templateFile), - parameters: templateParam, - mode: 'Incremental', - }, - }; - - return await client.deployments.createOrUpdate(resourceGroupName, deployName, deployParam); -}; - -/** - * Validate the deployment using the Azure API - */ -const validateDeployment = async (client, resourceGroupName, deployName, templateParam) => { - logger({ - status: BotProjectDeployLoggerType.PROVISION_INFO, - message: '> Validating Azure deployment ...', - }); - - const templateFile = await readFile(templatePath, { encoding: 'utf-8' }); - const deployParam = { - properties: { - template: JSON.parse(templateFile), - parameters: templateParam, - mode: 'Incremental', - }, - }; - return await client.deployments.validate(resourceGroupName, deployName, deployParam); -}; - -/** - * Using an ARM template, provision a bunch of resources - */ -const createDeployment = async (client, resourceGroupName, deployName, templateParam) => { - const templateFile = await readFile(templatePath, { encoding: 'utf-8' }); - const deployParam = { - properties: { - template: JSON.parse(templateFile), - parameters: templateParam, - mode: 'Incremental', - }, - }; - - return await client.deployments.createOrUpdate(resourceGroupName, deployName, deployParam); -}; - -/** - * Format the results into the expected shape - */ -const updateDeploymentJsonFile = async (client, resourceGroupName, deployName, appId, appPwd) => { - const outputs = await client.deployments.get(resourceGroupName, deployName); - if (outputs && outputs.properties && outputs.properties.outputs) { - const outputResult = outputs.properties.outputs; - const applicationResult = { - MicrosoftAppId: appId, - MicrosoftAppPassword: appPwd, - }; - const outputObj = unpackObject(outputResult); - - if (!createAppInsights) { - delete outputObj.applicationInsights; - } - if (!createCosmosDb) { - delete outputObj.cosmosDb; - } - if (!createLuisAuthoringResource && !createLuisResource) { - delete outputObj.luis; - } - if (!createStorage) { - delete outputObj.blobStorage; - } - const result = {}; - Object.assign(result, outputObj, applicationResult); - return result; - } else { - return null; - } -}; - -const provisionFailed = (msg) => { - logger({ - status: BotProjectDeployLoggerType.PROVISION_ERROR, - message: chalk.bold('** Provision failed **'), - }); -}; - -const getErrorMesssage = (err) => { - if (err.body) { - if (err.body.error) { - if (err.body.error.details) { - const details = err.body.error.details; - let errMsg = ''; - for (let detail of details) { - errMsg += detail.message; - } - return errMsg; - } else { - return err.body.error.message; - } - } else { - return JSON.stringify(err.body, null, 2); - } - } else { - return JSON.stringify(err, null, 2); - } -}; - -/** - * Provision a set of Azure resources for use with a bot - */ -const create = async ( - creds, - subId, - name, - location, - environment, - appId, - appPassword, - createLuisResource = true, - createLuisAuthoringResource = true, - createQnAResource = true, - createCosmosDb = true, - createStorage = true, - createAppInsights = true -) => { - // App insights is a dependency of QnA - if (createQnAResource) { - createAppInsights = true; - } - - const resourceGroupName = resourceGroup; - - // If tenantId is empty string, get tenanId from API - if (!tenantId) { - const token = await creds.getToken(); - const accessToken = token.accessToken; - // the returned access token will almost surely have a tenantId. - // use this as the default if one isn't specified. - if (token.tenantId) { - tenantId = token.tenantId; - logger({ - status: BotProjectDeployLoggerType.PROVISION_INFO, - message: `> Using Tenant ID: ${tenantId}`, - }); - } else { - tenantId = await getTenantId(accessToken); - } - } - - const graphCreds = new msRestNodeAuth.DeviceTokenCredentials( - creds.clientId, - tenantId, - creds.username, - 'graph', - creds.environment, - creds.tokenCache - ); - const graphClient = new GraphRbacManagementClient(graphCreds, tenantId, { - baseUri: 'https://graph.windows.net', - }); - - // If the appId is not specified, create one - if (!appId) { - logger({ - status: BotProjectDeployLoggerType.PROVISION_INFO, - message: '> Creating App Registration ...', - }); - - // create the app registration - const appCreated = await createApp(graphClient, name, appPassword); - if (appCreated === false) { - return provisionFailed(); - } - - // use the newly created app - appId = appCreated.appId; - } - - logger({ - status: BotProjectDeployLoggerType.PROVISION_INFO, - message: `> Create App Id Success! ID: ${appId}`, - }); - - // timestamp will be used as deployment name - const timeStamp = new Date().getTime().toString(); - const client = new ResourceManagementClient(creds, subId); - - // Create a resource group to contain the new resources - try { - const rpres = await createResourceGroup(client, location, resourceGroupName); - } catch (err) { - logger({ - status: BotProjectDeployLoggerType.PROVISION_ERROR, - message: getErrorMesssage(err), - }); - return provisionFailed(); - } - - // Caste the parameters into the right format - const deploymentTemplateParam = getDeploymentTemplateParam( - appId, - appPassword, - location, - name, - createLuisAuthoringResource, - createLuisResource, - createAppInsights, - createCosmosDb, - createStorage - ); - - // Validate the deployment using the Azure API - const validation = await validateDeployment(client, resourceGroupName, timeStamp, deploymentTemplateParam); - - // Handle validation errors - if (validation.error) { - logger({ - status: BotProjectDeployLoggerType.PROVISION_ERROR, - message: `! Error: ${validation.error.message}`, - }); - if (validation.error.details) { - logger({ - status: BotProjectDeployLoggerType.PROVISION_ERROR_DETAILS, - message: JSON.stringify(validation.error.details, null, 2), - }); - } - logger({ - status: BotProjectDeployLoggerType.PROVISION_ERROR, - message: `+ To delete this resource group, run 'az group delete -g ${resourceGroupName} --no-wait'`, - }); - return provisionFailed(); - } - - // Create the entire stack of resources inside the new resource group - // this is controlled by an ARM template identified in templatePath - logger({ - status: BotProjectDeployLoggerType.PROVISION_INFO, - message: `> Deploying Azure services (this could take a while)...`, - }); - const spinner = ora().start(); - try { - const deployment = await createDeployment(client, resourceGroupName, timeStamp, deploymentTemplateParam); - // Handle errors - if (deployment._response.status != 200) { - spinner.fail(); - logger({ - status: BotProjectDeployLoggerType.PROVISION_ERROR, - message: `! Template is not valid with provided parameters. Review the log for more information.`, - }); - logger({ - status: BotProjectDeployLoggerType.PROVISION_ERROR, - message: `! Error: ${validation.error}`, - }); - logger({ - status: BotProjectDeployLoggerType.PROVISION_ERROR, - message: `+ To delete this resource group, run 'az group delete -g ${resourceGroupName} --no-wait'`, - }); - return provisionFailed(); - } - } catch (err) { - spinner.fail(); - logger({ - status: BotProjectDeployLoggerType.PROVISION_ERROR, - message: getErrorMesssage(err), - }); - return provisionFailed(); - } - - var qnaResult = null; - - // Create qna resources, the reason why seperate the qna resources from others: https://github.com/Azure/azure-sdk-for-js/issues/10186 - if (createQnAResource) { - const qnaDeployName = new Date().getTime().toString(); - const qnaDeploymentTemplateParam = getQnaTemplateParam(location, name); - const qnaValidation = await validateQnADeployment( - client, - resourceGroupName, - qnaDeployName, - qnaDeploymentTemplateParam - ); - if (qnaValidation.error) { - logger({ - status: BotProjectDeployLoggerType.PROVISION_ERROR, - message: `! Error: ${qnaValidation.error.message}`, - }); - if (qnaValidation.error.details) { - logger({ - status: BotProjectDeployLoggerType.PROVISION_ERROR_DETAILS, - message: JSON.stringify(qnaValidation.error.details, null, 2), - }); - } - logger({ - status: BotProjectDeployLoggerType.PROVISION_ERROR, - message: `+ To delete this resource group, run 'az group delete -g ${resourceGroupName} --no-wait'`, - }); - return provisionFailed(); - } - - // Create qna deloyment - logger({ - status: BotProjectDeployLoggerType.PROVISION_INFO, - message: `> Deploying QnA Resources (this could take a while)...`, - }); - const spinner = ora().start(); - try { - const qnaDeployment = await createQnADeployment( - client, - resourceGroupName, - qnaDeployName, - qnaDeploymentTemplateParam - ); - // Handle errors - if (qnaDeployment._response.status != 200) { - spinner.fail(); - logger({ - status: BotProjectDeployLoggerType.PROVISION_ERROR, - message: `! QnA Template is not valid with provided parameters. Review the log for more information.`, - }); - logger({ - status: BotProjectDeployLoggerType.PROVISION_ERROR, - message: `! Error: ${qnaValidation.error}`, - }); - logger({ - status: BotProjectDeployLoggerType.PROVISION_ERROR, - message: `+ To delete this resource group, run 'az group delete -g ${resourceGroupName} --no-wait'`, - }); - return provisionFailed(); - } - } catch (err) { - spinner.fail(); - logger({ - status: BotProjectDeployLoggerType.PROVISION_ERROR, - message: getErrorMesssage(err), - }); - return provisionFailed(); - } - - const qnaDeploymentOutput = await client.deployments.get(resourceGroupName, qnaDeployName); - if (qnaDeploymentOutput && qnaDeploymentOutput.properties && qnaDeploymentOutput.properties.outputs) { - const qnaOutputResult = qnaDeploymentOutput.properties.outputs; - qnaResult = unpackObject(qnaOutputResult); - } - } - - // If application insights created, update the application insights settings in azure bot service - if (createAppInsights) { - logger({ - status: BotProjectDeployLoggerType.PROVISION_INFO, - message: `> Linking Application Insights settings to Bot Service ...`, - }); - - const appinsightsClient = new ApplicationInsightsManagementClient(creds, subId); - const appComponents = await appinsightsClient.components.get(resourceGroupName, resourceGroupName); - const appinsightsId = appComponents.appId; - const appinsightsInstrumentationKey = appComponents.instrumentationKey; - const apiKeyOptions = { - name: `${resourceGroupName}-provision-${timeStamp}`, - linkedReadProperties: [ - `/subscriptions/${subId}/resourceGroups/${resourceGroupName}/providers/microsoft.insights/components/${resourceGroupName}/api`, - `/subscriptions/${subId}/resourceGroups/${resourceGroupName}/providers/microsoft.insights/components/${resourceGroupName}/agentconfig`, - ], - linkedWriteProperties: [ - `/subscriptions/${subId}/resourceGroups/${resourceGroupName}/providers/microsoft.insights/components/${resourceGroupName}/annotations`, - ], - }; - const appinsightsApiKeyResponse = await appinsightsClient.aPIKeys.create( - resourceGroupName, - resourceGroupName, - apiKeyOptions - ); - const appinsightsApiKey = appinsightsApiKeyResponse.apiKey; - - logger({ - status: BotProjectDeployLoggerType.PROVISION_INFO, - message: `> AppInsights AppId: ${appinsightsId} ...`, - }); - logger({ - status: BotProjectDeployLoggerType.PROVISION_INFO, - message: `> AppInsights InstrumentationKey: ${appinsightsInstrumentationKey} ...`, - }); - logger({ - status: BotProjectDeployLoggerType.PROVISION_INFO, - message: `> AppInsights ApiKey: ${appinsightsApiKey} ...`, - }); - - if (appinsightsId && appinsightsInstrumentationKey && appinsightsApiKey) { - const botServiceClient = new AzureBotService(creds, subId); - const botCreated = await botServiceClient.bots.get(resourceGroupName, name); - if (botCreated.properties) { - botCreated.properties.developerAppInsightKey = appinsightsInstrumentationKey; - botCreated.properties.developerAppInsightsApiKey = appinsightsApiKey; - botCreated.properties.developerAppInsightsApplicationId = appinsightsId; - const botUpdateResult = await botServiceClient.bots.update(resourceGroupName, name, botCreated); - - if (botUpdateResult._response.status != 200) { - logger({ - status: BotProjectDeployLoggerType.PROVISION_ERROR, - message: `! Something went wrong while trying to link Application Insights settings to Bot Service Result: ${JSON.stringify( - botUpdateResult - )}`, - }); - throw new Error(`Linking Application Insights Failed.`); - } - logger({ - status: BotProjectDeployLoggerType.PROVISION_INFO, - message: `> Linking Application Insights settings to Bot Service Success!`, - }); - } else { - logger({ - status: BotProjectDeployLoggerType.PROVISION_WARNING, - message: `! The Bot doesn't have a keys properties to update.`, - }); - } - } - } - - spinner.succeed('Success!'); - - // Validate that everything was successfully created. - // Then, update the settings file with information about the new resources - const updateResult = await updateDeploymentJsonFile(client, resourceGroupName, timeStamp, appId, appPassword); - - // Handle errors - if (!updateResult) { - const operations = await client.deploymentOperations.list(resourceGroupName, timeStamp); - if (operations) { - const failedOperations = operations.filter( - (value) => value && value.properties && value.properties.statusMessage.error !== null - ); - if (failedOperations) { - failedOperations.forEach((operation) => { - switch ( - operation && - operation.properties && - operation.properties.statusMessage.error.code && - operation.properties.targetResource - ) { - case 'MissingRegistrationForLocation': - logger({ - status: BotProjectDeployLoggerType.PROVISION_ERROR, - message: `! Deployment failed for resource of type ${operation.properties.targetResource.resourceType}. This resource is not avaliable in the location provided.`, - }); - break; - default: - logger({ - status: BotProjectDeployLoggerType.PROVISION_ERROR, - message: `! Deployment failed for resource of type ${operation.properties.targetResource.resourceType}.`, - }); - logger({ - status: BotProjectDeployLoggerType.PROVISION_ERROR, - message: `! Code: ${operation.properties.statusMessage.error.code}.`, - }); - logger({ - status: BotProjectDeployLoggerType.PROVISION_ERROR, - message: `! Message: ${operation.properties.statusMessage.error.message}.`, - }); - break; - } - }); - } - } else { - logger({ - status: BotProjectDeployLoggerType.PROVISION_ERROR, - message: `! Deployment failed. Please refer to the log file for more information.`, - }); - } - } - - // Merge qna outputs with other resources' outputs - if (createQnAResource) { - if (qnaResult) { - Object.assign(updateResult, qnaResult); - } - } - - return updateResult; -}; - -console.log(chalk.bold('Login to Azure:')); -msRestNodeAuth - .interactiveLogin({ domain: tenantId }) - .then(async (creds) => { - const createResult = await create( - creds, - subId, - name, - location, - environment, - appId, - appPassword, - createLuisResource, - createLuisAuthoringResource, - createQnAResource, - createCosmosDb, - createStorage, - createAppInsights - ); - - if (createResult) { - console.log(''); - console.log( - chalk.bold( - `Your Azure hosting environment has been created! Copy paste the following configuration into a new profile in Composer's Publishing tab.` - ) - ); - console.log(''); - - const token = await creds.getToken(); - const profile = { - accessToken: token.accessToken, - name: name, - environment: environment, - hostname: `${name}-${environment}`, - luisResource: `${name}-${environment}-luis`, - settings: createResult, - runtimeIdentifier: 'win-x64', - resourceGroup: resourceGroup, - botName: name, - region: location, - subscriptionId: subId, - }; - - console.log(chalk.white(JSON.stringify(profile, null, 2))); - - console.log(''); - } - }) - .catch((err) => { - console.error(err); - }); diff --git a/Orchestrator/Samples/Composer/OrchestratorDispatch/Startup.cs b/Orchestrator/Samples/Composer/OrchestratorDispatch/Startup.cs deleted file mode 100644 index 5606d19a1b..0000000000 --- a/Orchestrator/Samples/Composer/OrchestratorDispatch/Startup.cs +++ /dev/null @@ -1,56 +0,0 @@ -using Microsoft.AspNetCore.Builder; -using Microsoft.AspNetCore.Hosting; -using Microsoft.AspNetCore.StaticFiles; -using Microsoft.Bot.Builder.Dialogs.Adaptive.Runtime.Extensions; -using Microsoft.Extensions.Configuration; -using Microsoft.Extensions.DependencyInjection; -using Microsoft.Extensions.Hosting; - -namespace OrchestratorDispatch -{ - public class Startup - { - public Startup(IConfiguration configuration) - { - Configuration = configuration; - } - - public IConfiguration Configuration { get; } - - // This method gets called by the runtime. Use this method to add services to the container. - public void ConfigureServices(IServiceCollection services) - { - services.AddControllers().AddNewtonsoftJson(); - services.AddBotRuntime(Configuration); - } - - // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. - public void Configure(IApplicationBuilder app, IWebHostEnvironment env) - { - if (env.IsDevelopment()) - { - app.UseDeveloperExceptionPage(); - } - - app.UseDefaultFiles(); - - // Set up custom content types - associating file extension to MIME type. - var provider = new FileExtensionContentTypeProvider(); - provider.Mappings[".lu"] = "application/vnd.microsoft.lu"; - provider.Mappings[".qna"] = "application/vnd.microsoft.qna"; - - // Expose static files in manifests folder for skill scenarios. - app.UseStaticFiles(new StaticFileOptions - { - ContentTypeProvider = provider - }); - app.UseWebSockets(); - app.UseRouting(); - app.UseAuthorization(); - app.UseEndpoints(endpoints => - { - endpoints.MapControllers(); - }); - } - } -} diff --git a/Orchestrator/Samples/Composer/OrchestratorDispatch/dialogs/PartnersDialog/PartnersDialog.dialog b/Orchestrator/Samples/Composer/OrchestratorDispatch/dialogs/PartnersDialog/PartnersDialog.dialog deleted file mode 100644 index 5669410a2b..0000000000 --- a/Orchestrator/Samples/Composer/OrchestratorDispatch/dialogs/PartnersDialog/PartnersDialog.dialog +++ /dev/null @@ -1,244 +0,0 @@ -{ - "$kind": "Microsoft.AdaptiveDialog", - "$designer": { - "id": "wVxMxC", - "name": "PartnersDialog", - "description": "" - }, - "autoEndDialog": true, - "defaultResultProperty": "dialog.result", - "triggers": [ - { - "$kind": "Microsoft.OnBeginDialog", - "$designer": { - "name": "BeginDialog", - "description": "", - "id": "1BtyxI" - }, - "actions": [ - { - "$kind": "Microsoft.SendActivity", - "$designer": { - "id": "hUgNsF" - }, - "activity": "${SendActivity_hUgNsF()}" - }, - { - "$kind": "Microsoft.TextInput", - "$designer": { - "id": "KpFrxh" - }, - "disabled": false, - "maxTurnCount": 3, - "alwaysPrompt": true, - "allowInterruptions": true, - "unrecognizedPrompt": "", - "invalidPrompt": "", - "prompt": "${TextInput_Prompt_KpFrxh()}" - }, - { - "$kind": "Microsoft.RepeatDialog", - "$designer": { - "id": "p11WI1" - }, - "activityProcessed": true - } - ] - }, - { - "$kind": "Microsoft.OnIntent", - "$designer": { - "id": "mJDyaJ", - "name": "General" - }, - "intent": "General", - "actions": [ - { - "$kind": "Microsoft.SendActivity", - "$designer": { - "id": "KLQrcx" - }, - "activity": "${SendActivity_KLQrcx()}" - }, - { - "$kind": "Microsoft.ChoiceInput", - "$designer": { - "id": "GYWo8v" - }, - "defaultLocale": "en-us", - "disabled": false, - "maxTurnCount": 3, - "alwaysPrompt": true, - "allowInterruptions": false, - "prompt": "${ChoiceInput_Prompt_GYWo8v()}", - "unrecognizedPrompt": "", - "invalidPrompt": "", - "choiceOptions": { - "includeNumbers": true, - "inlineOrMore": ", or ", - "inlineOr": " or " - }, - "property": "dialog.partnerchoice", - "choices": [ - "Power Virtual Agents", - "HealthBot" - ], - "recognizerOptions": { - "recognizeOrdinals": true - } - }, - { - "$kind": "Microsoft.SwitchCondition", - "$designer": { - "id": "9ypVLZ" - }, - "condition": "dialog.partnerchoice", - "cases": [ - { - "value": "Power Virtual Agents", - "actions": [ - { - "$kind": "Microsoft.SendActivity", - "$designer": { - "id": "wJ1PQA" - }, - "activity": "${SendActivity_wJ1PQA()}" - } - ] - }, - { - "value": "HealthBot", - "actions": [ - { - "$kind": "Microsoft.SendActivity", - "$designer": { - "id": "AlVsyO" - }, - "activity": "${SendActivity_AlVsyO()}" - } - ] - }, - { - "value": "No Thanks", - "actions": [ - { - "$kind": "Microsoft.SendActivity", - "$designer": { - "id": "8ovgUu" - }, - "activity": "${SendActivity_8ovgUu()}" - } - ] - } - ], - "default": [ - { - "$kind": "Microsoft.SendActivity", - "$designer": { - "id": "TK2gtL" - }, - "activity": "${SendActivity_TK2gtL()}" - } - ] - } - ] - }, - { - "$kind": "Microsoft.OnUnknownIntent", - "$designer": { - "id": "0p0e7t" - }, - "actions": [ - { - "$kind": "Microsoft.SendActivity", - "$designer": { - "id": "ZV3rta" - }, - "activity": "${SendActivity_ZV3rta()}" - } - ] - }, - { - "$kind": "Microsoft.OnIntent", - "$designer": { - "id": "Xq7yE9", - "name": "exit" - }, - "intent": "exit", - "actions": [ - { - "$kind": "Microsoft.SendActivity", - "$designer": { - "id": "lzlH8N" - }, - "activity": "${SendActivity_lzlH8N()}" - }, - { - "$kind": "Microsoft.EndDialog", - "$designer": { - "id": "l99ma4" - } - } - ] - }, - { - "$kind": "Microsoft.OnIntent", - "$designer": { - "id": "o66cYm", - "name": "Healthbot" - }, - "intent": "Healthbot", - "actions": [ - { - "$kind": "Microsoft.SendActivity", - "$designer": { - "id": "mroxNS" - }, - "activity": "${SendActivity_mroxNS()}" - }, - { - "$kind": "Microsoft.SendActivity", - "$designer": { - "id": "0wl8Dt" - }, - "activity": "${SendActivity_0wl8Dt()}" - } - ] - }, - { - "$kind": "Microsoft.OnIntent", - "$designer": { - "id": "kJsfR9", - "name": "PVA" - }, - "intent": "PVA", - "actions": [ - { - "$kind": "Microsoft.SendActivity", - "$designer": { - "id": "6ZhSsX" - }, - "activity": "${SendActivity_6ZhSsX()}" - }, - { - "$kind": "Microsoft.SendActivity", - "$designer": { - "id": "TOU1P5" - }, - "activity": "${SendActivity_TOU1P5()}" - } - ] - }, - { - "$kind": "Microsoft.OnIntent", - "$designer": { - "id": "BP2yIj", - "name": "None" - }, - "intent": "None" - } - ], - "generator": "PartnersDialog.lg", - "recognizer": "PartnersDialog.lu.qna", - "id": "PartnersDialog" -} diff --git a/Orchestrator/Samples/Composer/OrchestratorDispatch/dialogs/PartnersDialog/knowledge-base/en-us/PartnersDialog.en-us.qna b/Orchestrator/Samples/Composer/OrchestratorDispatch/dialogs/PartnersDialog/knowledge-base/en-us/PartnersDialog.en-us.qna deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/Orchestrator/Samples/Composer/OrchestratorDispatch/dialogs/PartnersDialog/language-generation/en-us/PartnersDialog.en-us.lg b/Orchestrator/Samples/Composer/OrchestratorDispatch/dialogs/PartnersDialog/language-generation/en-us/PartnersDialog.en-us.lg deleted file mode 100644 index 56d006b105..0000000000 --- a/Orchestrator/Samples/Composer/OrchestratorDispatch/dialogs/PartnersDialog/language-generation/en-us/PartnersDialog.en-us.lg +++ /dev/null @@ -1,71 +0,0 @@ -[import](common.lg) - -# SendActivity_hUgNsF() -[Activity - Text = **Partners Information (_LUIS recognizer_)** -] - -# TextInput_Prompt_KpFrxh() -[Activity - Text = Ask me about Bot Framework partner teams within Microsoft now (_exit_ when done) >> -] - -# SendActivity_KLQrcx() -[Activity - Text = Bot Framework is the foundation for the following teams:\r- Power Virtual Agents\r- HealthBot -] - -# ChoiceInput_Prompt_GYWo8v() -[Activity - Text = What do you want to know more about? -] - -# SendActivity_wJ1PQA() -[Activity - Text = To learn more aobut PVA see the following: https://powervirtualagents.microsoft.com/en-us/ -] - -# SendActivity_AlVsyO() -[Activity - Text = To learn more about HealthBot see the following: https://www.microsoft.com/en-us/research/project/health-bot/ -] - -# SendActivity_8ovgUu() -[Activity - Text = Got you. You can always do a Bing search for more :) -] - -# SendActivity_ZV3rta() -[Activity - Text = I didn't understand. Please rephrase. -] - -# SendActivity_lzlH8N() -[Activity - Text = Alright. See you later. -] - -# SendActivity_6ZhSsX() -[Activity - Text = **Power Virtual Agents** -] - -# SendActivity_TOU1P5() -[Activity - Text = To learn more aobut PVA see the following: https://powervirtualagents.microsoft.com/en-us/ -] - -# SendActivity_mroxNS() -[Activity - Text = **Azure Health Bot** -] - -# SendActivity_0wl8Dt() -[Activity - Text = To learn more about HealthBot see the following: https://www.microsoft.com/en-us/research/project/health-bot/ -] - -# SendActivity_TK2gtL() -[Activity - Text = Warning: unexpected response. -] diff --git a/Orchestrator/Samples/Composer/OrchestratorDispatch/dialogs/PartnersDialog/language-understanding/en-us/PartnersDialog.en-us.lu b/Orchestrator/Samples/Composer/OrchestratorDispatch/dialogs/PartnersDialog/language-understanding/en-us/PartnersDialog.en-us.lu deleted file mode 100644 index 5f983cafc9..0000000000 --- a/Orchestrator/Samples/Composer/OrchestratorDispatch/dialogs/PartnersDialog/language-understanding/en-us/PartnersDialog.en-us.lu +++ /dev/null @@ -1,54 +0,0 @@ - -# General -- who are your partners? -- partners info -- what groups use bot framework at Microsoft? -- tell me about your partners -- sister teams at microsoft -# TheSkill -- Tell me about skils -- what are skills -- skills documentation -- The skill -- Connect to a skill -- consume a skill - -# exit -- done -- quit -- bye -- exit - -# Healthbot -- Azure Healthbot -- healthbot -- health bot - -# PVA -- Power Virtual Agents -- PVA -- virtual agent - -# None -- add some example phrases to trigger this intent: -- please tell me the weather -- what is the weather like in {city=Seattle} -- Error occurred building the bot -- entity definitions -- asdf sasdf -- qnamaker:build --in CognitiveModels --subscriptionKey - -# TheSkill -> AboutSkills -- Tell me about skills -- what is a skill? -- what are expert bots? -- how do i create a skill? -- call a skill -- skill authentication - -> Contact -- Contact -- Share my info -- get in touch with you -- Email phone and name \ No newline at end of file diff --git a/Orchestrator/Samples/Composer/OrchestratorDispatch/dialogs/PartnersDialog/recognizers/PartnersDialog.en-us.lu.dialog b/Orchestrator/Samples/Composer/OrchestratorDispatch/dialogs/PartnersDialog/recognizers/PartnersDialog.en-us.lu.dialog deleted file mode 100644 index 59499751d9..0000000000 --- a/Orchestrator/Samples/Composer/OrchestratorDispatch/dialogs/PartnersDialog/recognizers/PartnersDialog.en-us.lu.dialog +++ /dev/null @@ -1,8 +0,0 @@ -{ - "$kind": "Microsoft.LuisRecognizer", - "id": "LUIS_PartnersDialog", - "applicationId": "=settings.luis.PartnersDialog_en_us_lu.appId", - "version": "=settings.luis.PartnersDialog_en_us_lu.version", - "endpoint": "=settings.luis.endpoint", - "endpointKey": "=settings.luis.endpointKey" -} diff --git a/Orchestrator/Samples/Composer/OrchestratorDispatch/dialogs/PartnersDialog/recognizers/PartnersDialog.lu.dialog b/Orchestrator/Samples/Composer/OrchestratorDispatch/dialogs/PartnersDialog/recognizers/PartnersDialog.lu.dialog deleted file mode 100644 index 10bcc53239..0000000000 --- a/Orchestrator/Samples/Composer/OrchestratorDispatch/dialogs/PartnersDialog/recognizers/PartnersDialog.lu.dialog +++ /dev/null @@ -1,8 +0,0 @@ -{ - "$kind": "Microsoft.MultiLanguageRecognizer", - "id": "LUIS_PartnersDialog", - "recognizers": { - "en-us": "PartnersDialog.en-us.lu", - "": "PartnersDialog.en-us.lu" - } -} diff --git a/Orchestrator/Samples/Composer/OrchestratorDispatch/dialogs/PartnersDialog/recognizers/PartnersDialog.lu.qna.dialog b/Orchestrator/Samples/Composer/OrchestratorDispatch/dialogs/PartnersDialog/recognizers/PartnersDialog.lu.qna.dialog deleted file mode 100644 index f278e668e9..0000000000 --- a/Orchestrator/Samples/Composer/OrchestratorDispatch/dialogs/PartnersDialog/recognizers/PartnersDialog.lu.qna.dialog +++ /dev/null @@ -1,6 +0,0 @@ -{ - "$kind": "Microsoft.CrossTrainedRecognizerSet", - "recognizers": [ - "PartnersDialog.lu" - ] -} diff --git a/Orchestrator/Samples/Composer/OrchestratorDispatch/dialogs/emptyBot/knowledge-base/en-us/emptyBot.en-us.qna b/Orchestrator/Samples/Composer/OrchestratorDispatch/dialogs/emptyBot/knowledge-base/en-us/emptyBot.en-us.qna deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/Orchestrator/Samples/Composer/OrchestratorDispatch/generated/OrchestratorDispatch.en-us.blu b/Orchestrator/Samples/Composer/OrchestratorDispatch/generated/OrchestratorDispatch.en-us.blu deleted file mode 100644 index a041066383..0000000000 --- a/Orchestrator/Samples/Composer/OrchestratorDispatch/generated/OrchestratorDispatch.en-us.blu +++ /dev/null @@ -1,35 +0,0 @@ -base_model_version,runtime_version pretrained.20200924.microsoft.dte.00.06.en.onnx,1.0.0 -PartnersInfo who are your partners? 957B792E186275CD8B857BA877256DD728368BBF2B643245ED2525AE3416591F3C630CA5D467565AC8DC8920672EAF612D58E8E2D7D4D8F85B05819C90AB188695253A4363FD550BA2E4FA36AE87CC8D2B5282ABC9B14C6DC666124DFAAA3CE9 -PartnersInfo partners info 85FB1D2E132BF18D82257B627D25EFCF283EDBAB2AE432004D158FAEA5563D5B3E536C85CC25BD48C05C09206AA6A761071CF8E8CF977EFCE2AF809CD8E91A86B5242242426DBD1AA2409AB63F87CC860B488EA4C1B05C2DD6655C2DE2A6FEEC -PartnersInfo what groups use bot framework at Microsoft? D7B339369B6D30C383015B82FB26767D49BF8BED6B6513546F06A52BB471596B385188B7C549464AECBE49E1282A8E63359CD4C08CB54CB04B6B4EF4B8EF16C70539BA520257339822CA93B26DC20D8E7F5FA3E219BC7C14C73003ED67E25DE9 -PartnersInfo tell me about your partners C5FB3B2D190A750D9A817B6E79A44D4D3A2DC89F1A643A45CD1703AE3E16451B3FE30C808C67D948C2DF0D2463AEA760613CE8EAFEE55AF05B6D019D93AB9A8E95353B4163653C28A2E0AAB6ACC7CC8C3B4A8AB8C1B55C7106750AED73A27EED -PartnersInfo sister teams at microsoft 5FFB3B2C1B6B71CF02A17BEA6E872E757DBF8FA64B653270DF27252FF453192B3FC78021C76D005AC19C49816AAAE771039E61C0E6F4DBF0CB8D229CA5AB1F9EA525BA5A626C9B0A32C2B6B4AF02CC8E7B098AA0A1B45E24E64548256A82FCED -None add some example phrases to trigger this intent: D116F9A5A51472FB21A7EF9319E0F739FC5F8838B807B2619F36736AB8106D3C302D1DE389C79939DBC67D7528EB8FB220C585B0870D6A48197D8F585C971C8A1724C21001463AF4F9EF03D2A55085D6FE6B9BFAF49C7A430732A3CE6361763E -None please tell me the weather CFC359AED30BE1F18501736E5F2CBD7D083CC6C96AE0F0858D03858FBE9705075F6F10BF9CA1685BC41EE935222EA16A43FD6562C7B614E9592384BAABAF0B8E073BB3E929631C2FE2619B352FD3998B5B598290E975FD55167100BD62E2DE4D -None what is the weather like in Seattle C54159A4D38E71D9BF817F6E553DFD7E3C3CCFF9EEB4F285AC66A7258A9105031F6DD01FD4A3485AC46DE9B02FAA8769679DE44885B6158873338ABA9BBD11C7873FB36921437D1FA2C19B3627C2998B535F83F2E475DD6D1E73119D3BA25F4D -None Error occurred building the bot 5B521B9CC12C24D31B617382797EAA573F1E8F6E18E7B3614A5647EAF6530F2D3C56F939CDED086DC9B36B71C942AC0881E03045851D4E6849AF86D029BA23EEE5A8B262054F014CE28C9226B4C39D3E71CB0701A1347C16C16BD4EC622A57BE -None entity definitions 470359EEA02E64E1C92143AE7B6CAFDFCDBD8BFFABD5F2A54D3787AFA4760D393D658DFECDC50C58D0346E6C2BEEA56185D876C0C41E5B647B2FDE9298AB1A821509A3600039B53EB27ED3B3E7938EB63336BE90D5B15C0EC160868D636AFF69 -None asdf sasdf 5165186EB32E24C989217335192F2BD76832CF8E6844F621DD43E5EAB43705233D7CCCBDDCA9C428C9D06DB02EEAE76905FC72CCC4BF4E6043EB8E9480BF1B8EB5A9B34C07473B3DA2FC11B2AD868FBED1238A93B5717C0FC16319AC6362DE79 -exit exit 5D4AFC65C5AC60E7713777827D2A2A3469BA86ADE8D7C3515C12618AF4974C677F3DF011D5E3246999E13C66ED77A520066921D2F0DE5C4DF919AEBBAC8F23CBD764EF40275391986649F8B40DCE072B78BBC6A92024CA64C047056D72EA9E69 -exit quit 7C6BCA4DCBAD6067713733AC092A2E077DBAA1BDC853D3511CD2318ED4A44C677F399015DDE124B198852862A576A6290EFB01C250965D7CB9198EB9A68F2BFBF568DB044F04B1CC667EE8940CCC030F70AB43AD2134EA24424744EDE2C29E69 -exit done 7D4179E5C726C2EB3273B6AB6B12EE3568ACE206A845D221AD332182E6D54C45392118398DED4D7DC1AD78270FE3227100CD60C2DC1F696153BB9E9BCE8F1FCBA50CAB4965CB11DCE368C2B00DDB9E0E79FB03A02528EB76036755DF7AA2DE69 -exit bye 5D6AA925D72F459F361B6BA30F162E3438AAC2164BD51A318D1723ABBCD714293C691891CCE96D7980ADCA072EFBA7706E4D22C3FCCE69D151A9A6B3A78F3FC6670CEA4D414211E9A7EA9AB82C53848F3FFF02A0A0B47E65C27F41FD72EADF6D -TheSkill Tell me about skills 579319A5934A61859BB1FB051BA60D6C2CACC3CC2A453211CD57870F3E12142B3CE198959745CE48DADF4F352BEFA7E141FCC4E8CC3418B1792B043BD38F1B8E972CBBE0414135A8A3E1B3BEA15585CE3A5F88F08535FC79067280BD72A2FF6D -TheSkill what is a skill? D51359B6836A61C7ABB17B891F270F7F3C3CCBED3A4533B1CD57A70FF712152B38618895D7C15E4FD8DFCD242F6BAF6125D884EA4C3428B1D13B861BD38D198F872CBB60410377BCA3E53B362D45D5CE1A5F00F805BD7C798662803D7222DC6D -TheSkill what are expert bots? D7F359FE992A31D58F317B12D7776B56293DC3ED6AE53340E9572547B423112B3AC1DC3796611E4CC8FC4D61202AA7610356E5C0C4B5D598F9B32898718B1B878521BB40417173B8A3EE5BB60C468C0C765B82B905B75C2D86655B197AA2DC6D -TheSkill how do i create a skill? D71358868F4A8197A329FB933FF4EF7D7C3E83E02C0552318D17330BF652312938450BF985CD9E4CDADF5D69254BAC6105DCA428C4382BF1436B8F7DF3C509CF85ACBA32414B3398FFE433B229679DDF3E4F0AB4153C7E32EF32EBDCE2A6DC4D -TheSkill call a skill DF9219BE8D7870D3AB21F3CB27E5AF372E34CBF83C6411318D173B0FDC721F6F384489B99FC98E0ED89FD521674EAEE1157D6CE848B56AF1E3690EDA808939CE9723BA44412FB388A2DD13346940ACDD3F5B080885357C36E632C85EF226544D -TheSkill skill authentication 561058E7856801E90A09FB912FF42A556DB4CB2C224D31216D77B18FE45615613D63CBF18EC5CECCDA9E7D3E892BA7C189DCC0EACC3D6C7173BB92B8F1AF1B8F4108A67543D3F7BDA0EED3F8AB56CCDC37720298C1B57E7BC73AC83F63E7D65D -DeferToRecognizer_QnA_OrchestratorDispatch What are custom actions? 931279E2830471E3E6337AAB7362EEFD6CBD0BACF245B280FC3E25EBF4544D21386BBC9E85C584CCDDCC59F42FE2A8E1234591E6D413E8485153EA94DBF93F87152DF652416B3B1EA1ED72B2A84AD5C676310ACB55F4FC474762058F7E6A5659 -DeferToRecognizer_QnA_OrchestratorDispatch how to create custom action in composer D303F8488704D3DB32253A8B95A0FE517C7D0F30A425BA213E56216BF15D5D3D3A4D95B18DC78C68DDE65CFD69EB8900360DA102C7316648D15DAEF4BBDD1F8711A6C03001686B9C71EC32B02F42BDC276272A75D4B4F91665322BCE07635358 -DeferToRecognizer_QnA_OrchestratorDispatch how to extend composer D1237D25072CB68B3921238D3DA77F117A3E8F748C013B22EF7621AAF15F49FFBEA910A585674D69DAA01B2769A78A451464E24267BD66581B5DAEECEFD5138284A69308027F23387CE6B2D36702D90E1CEB0A24B5AA5E1EC52A8A6DCBA7FE6C -DeferToRecognizer_QnA_OrchestratorDispatch What is Composer? D5137924832E71CD07217B093F261F5D7C37CFBEAB65B0298C7605063613517F386984959C654C4ADCB61D672BEA8761251DA0EADEB45BF1517B9EDCB2A91FEE9525B308514371B8A3E6BA972D869D9C735F22BB69B1F83D456482ED72A37F69 -DeferToRecognizer_QnA_OrchestratorDispatch tell me about composer C5337D2D934E71CD06A15B0F3D261D4D7C2DCD9EBB64B8298D770112361E513F3CC194C49CE5CF58DCBE1F272BEA8761653CE0E2DEE45BD1516F16DD93AB9FAE9725B308114171A8B3E2AABF29839C8C734F8AB0A9B5FC7C067482ED72A37F69 -DeferToRecognizer_QnA_OrchestratorDispatch bot framework composer 55377946932F31CB0625FB027F263A517936CFFC6945D965CF563562F57F1973385D04F18C6D4E48DCBE9E6F2A6BA763848C4004C4B44EF8C96316D4E2A917EB8728B400115F638CA2EE92B46D921D8E7DBF0BB129BBFC10C730CAED63E35769 -DeferToRecognizer_QnA_OrchestratorDispatch composer documentation F51378E4B32EC3C920A1DB1D31662E5D6C3EC99CAA45B8219D36018E7716D4573AE580C59CD78C6ADD3E5D376BCB830184ECE0E24F9372D311299EDC58AD9F8E91AE2B80510B33B8B2E4929A6D939C9EB1EF3A740DB1FC369522A0ED62ABF769 -DeferToRecognizer_QnA_OrchestratorDispatch What are packages? 8F3619F7202A71C5A6036B027F2F5D7F3CAD83096BC5D2E18C0305AEF617456B3863A8379461CC5B80B40B2726DEA67B040DE0E6CEB459F1537BAA90AACB1B8E85353F0001E371BCBAF832B229D6D50F5F7FAAA004E55F2D066500AD76E25D69 -DeferToRecognizer_QnA_OrchestratorDispatch tell me about packages 4596397D932E31EDB6816B027F2E1D4F1CADC3896A60B0B18D0385AEF616052B3EE380919465CC58C4BE093522FEA6E2049D60E6CEF45AE0516F2E908B8B1B8E87363D0009E931BEB2F032B628D6C58FFB5F8BF0A5657F2D066540AD76AA5D6D -DeferToRecognizer_QnA_OrchestratorDispatch what are components? 851159B6A12AE5EDBF61FB29352EEDDF2CB50B79BAC490C1AC4387BFF432052F3CE188BEC4654C58D4BC99252FEF863917D4E0E2CF555970511B4898B3EF1F86872CA7E4186131BCBAEDFAB22FD6910F527FAAB000FC641D166280A97E63CF69 -DeferToRecognizer_QnA_OrchestratorDispatch components info C5997D3621AAE4E1AB21D3B91D2FEDCF2CBF9B68BA44D2C1BD6387AF643425673C638296C5654C58D4BC49342FAF870197D4F0ECCF135F70711BCA98D9EF1F8695B8A3E0287B393CB07CFAB2369699231169AEB40174453D136284A97AC3D769 -DeferToRecognizer_QnA_OrchestratorDispatch packages documentation C59629F5AB2EE1E9B6815A0A7B6EEE5F2C3D9A982AC5B0A1AC16858EF716246B7A65A09794458C7A85361D356ACFA6A984ECE0E2CE937AB1113B8A9048891B8691B42F10018B33BEB2F092B278D7D5A67B7FBFE41D65DF372721A4AD72E89D6D -DeferToRecognizer_QnA_OrchestratorDispatch how to create packages DF173B4C832ED1B3E6836B833F367E7D3CBF87406C25D2E19F02073BF353752D3A6598F9816D8C58C9A61F6521DFA4B3848C220AC6246AF0436FAE90AB891F9E0588BE1208EC7594BAF412B52953953B7F0F0BF194347F1663314BAF20E0DD4A diff --git a/Orchestrator/Samples/Composer/OrchestratorDispatch/generated/interruption/OrchestratorDispatch.en-us.lu b/Orchestrator/Samples/Composer/OrchestratorDispatch/generated/interruption/OrchestratorDispatch.en-us.lu deleted file mode 100644 index 1cf461fce5..0000000000 --- a/Orchestrator/Samples/Composer/OrchestratorDispatch/generated/interruption/OrchestratorDispatch.en-us.lu +++ /dev/null @@ -1,75 +0,0 @@ - -> LUIS application information -> !# @app.versionId = 0.1 -> !# @app.culture = en-us -> !# @app.luis_schema_version = 3.2.0 - - -> # Intent definitions - -# PartnersInfo -- who are your partners? -- partners info -- what groups use bot framework at Microsoft? -- tell me about your partners -- sister teams at microsoft - - -# None -- add some example phrases to trigger this intent: -- please tell me the weather -- what is the weather like in {@city=Seattle} -- Error occurred building the bot -- entity definitions -- asdf sasdf - - -# exit -- exit -- quit -- done -- bye - - -# TheSkill -- Tell me about skills -- what is a skill? -- what are expert bots? -- how do i create a skill? -- call a skill -- skill authentication - - -> # Entity definitions - -@ ml city - - -> # PREBUILT Entity definitions - - -> # Phrase list definitions - - -> # List entities - -> # RegEx entities - - - - -> Source: cross training. Please do not edit these directly! -# DeferToRecognizer_QnA_OrchestratorDispatch -- What are custom actions? -- how to create custom action in composer -- how to extend composer -- What is Composer? -- tell me about composer -- bot framework composer -- composer documentation -- What are packages? -- tell me about packages -- what are components? -- components info -- packages documentation -- how to create packages \ No newline at end of file diff --git a/Orchestrator/Samples/Composer/OrchestratorDispatch/generated/interruption/OrchestratorDispatch.en-us.qna b/Orchestrator/Samples/Composer/OrchestratorDispatch/generated/interruption/OrchestratorDispatch.en-us.qna deleted file mode 100644 index 17da0dac41..0000000000 --- a/Orchestrator/Samples/Composer/OrchestratorDispatch/generated/interruption/OrchestratorDispatch.en-us.qna +++ /dev/null @@ -1,69 +0,0 @@ -# ? What are custom actions? -- how to create custom action in composer -- how to extend composer - -**Filters:** -- dialogName=OrchestratorDispatch - -``` -You can extend the set of available actions within Composer canvas while building bots. -See more here: https://docs.microsoft.com/en-us/composer/how-to-add-custom-action?tabs=csharp -``` - -# ? What is Composer? -- tell me about composer -- bot framework composer -- composer documentation - -**Filters:** -- dialogName=OrchestratorDispatch - -``` -Composer is a GUI bot building tool for Microsoft Bot Framework. See more here: https://docs.microsoft.com/en-us/composer/introduction -``` - -# ? What are packages? -- tell me about packages -- what are components? -- components info -- packages documentation -- how to create packages - -**Filters:** -- dialogName=OrchestratorDispatch - -``` -Reusable components for building Bot Framework Bots in Composer. See more here: https://github.com/microsoft/botframework-components/tree/main/docs -``` - -> Source: cross training. Please do not edit these directly! -> !# @qna.pair.source = crosstrained - -# ? who are your partners? -- partners info -- what groups use bot framework at Microsoft? -- tell me about your partners -- sister teams at microsoft -- add some example phrases to trigger this intent: -- please tell me the weather -- what is the weather like in Seattle -- Error occurred building the bot -- entity definitions -- asdf sasdf -- exit -- quit -- done -- bye -- Tell me about skills -- what is a skill? -- what are expert bots? -- how do i create a skill? -- call a skill -- skill authentication - -**Filters:** -- dialogName=OrchestratorDispatch - -``` -intent=DeferToRecognizer_LUIS_OrchestratorDispatch -``` \ No newline at end of file diff --git a/Orchestrator/Samples/Composer/OrchestratorDispatch/generated/interruption/PartnersDialog.en-us.lu b/Orchestrator/Samples/Composer/OrchestratorDispatch/generated/interruption/PartnersDialog.en-us.lu deleted file mode 100644 index 2376ba9bca..0000000000 --- a/Orchestrator/Samples/Composer/OrchestratorDispatch/generated/interruption/PartnersDialog.en-us.lu +++ /dev/null @@ -1,98 +0,0 @@ - -> LUIS application information -> !# @app.versionId = 0.1 -> !# @app.culture = en-us -> !# @app.luis_schema_version = 3.2.0 - - -> # Intent definitions - -# General -- who are your partners? -- partners info -- what groups use bot framework at Microsoft? -- tell me about your partners -- sister teams at microsoft - - -# TheSkill -- Tell me about skils -- what are skills -- skills documentation -- The skill -- Connect to a skill -- consume a skill -- Tell me about skills -- what is a skill? -- what are expert bots? -- how do i create a skill? -- call a skill -- skill authentication -- Contact -- Share my info -- get in touch with you -- Email phone and name - - -# exit -- done -- quit -- bye -- exit - - -# Healthbot -- Azure Healthbot -- healthbot -- health bot - - -# PVA -- Power Virtual Agents -- PVA -- virtual agent - - -# None -- add some example phrases to trigger this intent: -- please tell me the weather -- what is the weather like in {@city=Seattle} -- Error occurred building the bot -- entity definitions -- asdf sasdf -- qnamaker:build --in CognitiveModels --subscriptionKey - - -> # Entity definitions - -@ ml city - - -> # PREBUILT Entity definitions - - -> # Phrase list definitions - - -> # List entities - -> # RegEx entities - - - - -> Source: cross training. Please do not edit these directly! -# _Interruption -- What are custom actions? -- how to create custom action in composer -- how to extend composer -- What is Composer? -- tell me about composer -- bot framework composer -- composer documentation -- What are packages? -- tell me about packages -- what are components? -- components info -- packages documentation -- how to create packages \ No newline at end of file diff --git a/Orchestrator/Samples/Composer/OrchestratorDispatch/generated/interruption/PartnersDialog.en-us.qna b/Orchestrator/Samples/Composer/OrchestratorDispatch/generated/interruption/PartnersDialog.en-us.qna deleted file mode 100644 index ed264e07df..0000000000 --- a/Orchestrator/Samples/Composer/OrchestratorDispatch/generated/interruption/PartnersDialog.en-us.qna +++ /dev/null @@ -1,62 +0,0 @@ - -> Source: cross training. Please do not edit these directly! -> !# @qna.pair.source = crosstrained - -# ? who are your partners? -- partners info -- what groups use bot framework at Microsoft? -- tell me about your partners -- sister teams at microsoft -- Tell me about skils -- what are skills -- skills documentation -- The skill -- Connect to a skill -- consume a skill -- Tell me about skills -- what is a skill? -- what are expert bots? -- how do i create a skill? -- call a skill -- skill authentication -- Contact -- Share my info -- get in touch with you -- Email phone and name -- done -- quit -- bye -- exit -- Azure Healthbot -- healthbot -- health bot -- Power Virtual Agents -- PVA -- virtual agent -- add some example phrases to trigger this intent: -- please tell me the weather -- what is the weather like in Seattle -- Error occurred building the bot -- entity definitions -- asdf sasdf -- qnamaker:build --in CognitiveModels --subscriptionKey -- What are custom actions? -- how to create custom action in composer -- how to extend composer -- What is Composer? -- tell me about composer -- bot framework composer -- composer documentation -- What are packages? -- tell me about packages -- what are components? -- components info -- packages documentation -- how to create packages - -**Filters:** -- dialogName=PartnersDialog - -``` -intent=DeferToRecognizer_LUIS_PartnersDialog -``` \ No newline at end of file diff --git a/Orchestrator/Samples/Composer/OrchestratorDispatch/generated/luis.settings.composer.westus.json b/Orchestrator/Samples/Composer/OrchestratorDispatch/generated/luis.settings.composer.westus.json deleted file mode 100644 index 919d7286da..0000000000 --- a/Orchestrator/Samples/Composer/OrchestratorDispatch/generated/luis.settings.composer.westus.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "luis": { - "PartnersDialog_en_us_lu": { - "appId": "07b46ce0-3bc8-4595-9eb5-ab8e038befde" - } - } -} \ No newline at end of file diff --git a/Orchestrator/Samples/Composer/OrchestratorDispatch/generated/orchestrator.settings.json b/Orchestrator/Samples/Composer/OrchestratorDispatch/generated/orchestrator.settings.json deleted file mode 100644 index c67cc3b980..0000000000 --- a/Orchestrator/Samples/Composer/OrchestratorDispatch/generated/orchestrator.settings.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "orchestrator": { - "models": { - "en": "C:/Users/eyals/AppData/Roaming/BotFrameworkComposer/models/pretrained.20200924.microsoft.dte.00.06.en" - }, - "snapshots": { - "OrchestratorDispatch_en_us": "c:/workspace/botroot/sdk/Orchestrator/Samples/Composer/OrchestratorDispatch/generated/OrchestratorDispatch.en-us.blu" - } - } -} \ No newline at end of file diff --git a/Orchestrator/Samples/Composer/OrchestratorDispatch/generated/qnamaker.settings.composer.westus.json b/Orchestrator/Samples/Composer/OrchestratorDispatch/generated/qnamaker.settings.composer.westus.json deleted file mode 100644 index edd8c54d0d..0000000000 --- a/Orchestrator/Samples/Composer/OrchestratorDispatch/generated/qnamaker.settings.composer.westus.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "qna": { - "OrchestratorDispatch_en_us_qna": "7dc61c7a-69e5-4436-bcad-59909bccee01", - "hostname": "https://orchestratorqnasvc.azurewebsites.net/qnamaker", - "PartnersDialog_en_us_qna": "7dc61c7a-69e5-4436-bcad-59909bccee01" - } -} \ No newline at end of file diff --git a/Orchestrator/Samples/Composer/OrchestratorDispatch/knowledge-base/en-us/OrchestratorDispatch.en-us.qna b/Orchestrator/Samples/Composer/OrchestratorDispatch/knowledge-base/en-us/OrchestratorDispatch.en-us.qna deleted file mode 100644 index 1043c34a49..0000000000 --- a/Orchestrator/Samples/Composer/OrchestratorDispatch/knowledge-base/en-us/OrchestratorDispatch.en-us.qna +++ /dev/null @@ -1 +0,0 @@ -[import](ComposerKB.source.qna) \ No newline at end of file diff --git a/Orchestrator/Samples/Composer/OrchestratorDispatch/knowledge-base/source/ComposerKB.source.en-us.qna b/Orchestrator/Samples/Composer/OrchestratorDispatch/knowledge-base/source/ComposerKB.source.en-us.qna deleted file mode 100644 index 260da440bb..0000000000 --- a/Orchestrator/Samples/Composer/OrchestratorDispatch/knowledge-base/source/ComposerKB.source.en-us.qna +++ /dev/null @@ -1,23 +0,0 @@ -# ? What are custom actions? -- how to create custom action in composer -- how to extend composer -``` -You can extend the set of available actions within Composer canvas while building bots. -See more here: https://docs.microsoft.com/en-us/composer/how-to-add-custom-action?tabs=csharp -``` -# ? What is Composer? -- tell me about composer -- bot framework composer -- composer documentation -``` -Composer is a GUI bot building tool for Microsoft Bot Framework. See more here: https://docs.microsoft.com/en-us/composer/introduction -``` -# ? What are packages? -- tell me about packages -- what are components? -- components info -- packages documentation -- how to create packages -``` -Reusable components for building Bot Framework Bots in Composer. See more here: https://github.com/microsoft/botframework-components/tree/main/docs -``` \ No newline at end of file diff --git a/Orchestrator/Samples/Composer/OrchestratorDispatch/language-generation/en-us/OrchestratorDispatch.en-us.lg b/Orchestrator/Samples/Composer/OrchestratorDispatch/language-generation/en-us/OrchestratorDispatch.en-us.lg deleted file mode 100644 index d12c3319d0..0000000000 --- a/Orchestrator/Samples/Composer/OrchestratorDispatch/language-generation/en-us/OrchestratorDispatch.en-us.lg +++ /dev/null @@ -1,51 +0,0 @@ -[import](common.lg) - -# SendActivity_Welcome -- ${WelcomeUser()} - -# SendActivity_7MNTfM() -- Ask a question about (_Orchestrator recognizer_)\r- Composer, components, or custom actions --> Dispatch to QnA\r- Ask about Bot Framework partners --> Dispatch to LUIS\r- Ask about skills --> Dispatch to a skill - -# TextInput_Prompt_sL5okG() -[Activity - Text = How can I help you? -] - -# SendActivity_Zy3DnL() -[Activity - Text = Thank you. Goodbye. -] - -# TextInput_Prompt_HGB0yC() -[Activity - Text = ${expandText(@answer)} - SuggestedActions = ${foreach(turn.recognized.answers[0].context.prompts, x, x.displayText)} -] - -# SendActivity_ESxCuC() -- ${expandText(@answer)} - -# SendActivity_xjrS5L() -[Activity - Text = Unknown intent. Please rephrase. (_parent trigger_) -] - -# SendActivity_bzZc9B() -[Activity - Text = Good chatting. Goodbye. (_parent trigger_) -] - -# SendActivity_VJYzMf() -[Activity - Text = **QnA Intent** -] - -# SendActivity_EZm3u2() -[Activity - Text = Calling The Skill... -] - -# SendActivity_v8rqlc() -[Activity - Text = Please rephrase. (_parent None trigger_) -] diff --git a/Orchestrator/Samples/Composer/OrchestratorDispatch/language-generation/en-us/common.en-us.lg b/Orchestrator/Samples/Composer/OrchestratorDispatch/language-generation/en-us/common.en-us.lg deleted file mode 100644 index 02e90cb1fb..0000000000 --- a/Orchestrator/Samples/Composer/OrchestratorDispatch/language-generation/en-us/common.en-us.lg +++ /dev/null @@ -1,2 +0,0 @@ -# WelcomeUser -- **Simple Orchestrator Dispatch Sample** diff --git a/Orchestrator/Samples/Composer/OrchestratorDispatch/language-understanding/en-us/OrchestratorDispatch.en-us.lu b/Orchestrator/Samples/Composer/OrchestratorDispatch/language-understanding/en-us/OrchestratorDispatch.en-us.lu deleted file mode 100644 index eba3e3f51e..0000000000 --- a/Orchestrator/Samples/Composer/OrchestratorDispatch/language-understanding/en-us/OrchestratorDispatch.en-us.lu +++ /dev/null @@ -1,30 +0,0 @@ - -# PartnersInfo -- who are your partners? -- partners info -- what groups use bot framework at Microsoft? -- tell me about your partners -- sister teams at microsoft - -# None -- add some example phrases to trigger this intent: -- please tell me the weather -- what is the weather like in {city=Seattle} -- Error occurred building the bot -- entity definitions -- asdf sasdf - -# exit -- exit -- quit -- done -- bye - -# TheSkill -> AboutSkills -- Tell me about skills -- what is a skill? -- what are expert bots? -- how do i create a skill? -- call a skill -- skill authentication \ No newline at end of file diff --git a/Orchestrator/Samples/Composer/OrchestratorDispatch/media/create-azure-resource-command-line.png b/Orchestrator/Samples/Composer/OrchestratorDispatch/media/create-azure-resource-command-line.png deleted file mode 100644 index 497eb8e649d4f1d2d456d337246d01805132ac86..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13842 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 VJv|35z<=2CX{u{u@3nB{{{s`&K;i%Z diff --git a/Orchestrator/Samples/Composer/OrchestratorDispatch/media/diagram.png b/Orchestrator/Samples/Composer/OrchestratorDispatch/media/diagram.png deleted file mode 100644 index 425f49b037665ef9e99f771f5aeb9fd97a4330b9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 60091 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 diff --git a/Orchestrator/Samples/Composer/OrchestratorDispatch/media/publish-az-login.png b/Orchestrator/Samples/Composer/OrchestratorDispatch/media/publish-az-login.png deleted file mode 100644 index 4e721354bccb6d4a83aa70ca55da1b571c2886db..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16726 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 4.10 - -``` -npm i -g @microsoft/botframework-cli -``` - -> NOTE: Previous versions of botframework-cli required you to install @microsoft/bf-plugin. You will need to uninstall for 4.10 and above. -> -> ``` -> bf plugins:uninstall @microsoft/bf-dialog -> ``` - -- Navigate to to the `schemas (bot/schemas)` folder. This folder contains a Powershell script and a bash script. Run either of these scripts `./update-schema.ps1` or `sh ./update-schema.sh`. - -The above steps should have generated a new sdk.schema file inside `schemas` folder for Composer to use. Reload the bot and you should be able to include your new custom action! - -## Customizing Composer using the UI Schema - -Composer's UI can be customized using the UI Schema. You can either customize one of your custom actions or override Composer defaults. - -There are 2 ways to do this. - -1. **Component UI Schema File** - -To customize a specific component, simply create a `.uischema` file inside of the `/schemas` directory with the same name as the component, These files will be merged into a single `.uischema` file when running the `update-schema` script. - -Example: - -```json -// Microsoft.SendActivity.uischema -{ - "$schema": "https://schemas.botframework.com/schemas/ui/v1.0/ui.schema", - "form": { - "label": "A custom label" - } -} -``` - -2. **UI Schema Override File** - -This approach allows you to co-locate all of your UI customizations into a single file. This will not be merged into the `sdk.uischema`, instead it will be loaded by Composer and applied as overrides. - -Example: - -```json -{ - "$schema": "https://schemas.botframework.com/schemas/ui/v1.0/ui.schema", - "Microsoft.SendActivity": { - "form": { - "label": "A custom label" - } - } -} -``` - -#### UI Customization Options - -##### Form - -| **Property** | **Description** | **Type** | **Default** | -| ------------ | -------------------------------------------------------------------------------------- | ------------------- | -------------------- | -| description | Text used in tooltips. | `string` | `schema.description` | -| helpLink | URI to component or property documentation. Used in tooltips. | `string` | | -| hidden | An array of property names to hide in the UI. | `string[]` | | -| label | Label override. Can either be a string or false to hide the label. | `string` \| `false` | `schema.title` | -| order | Set the order of fields. Use "\_" for all other fields. ex. ["foo", "_", "bar"] | `string[]` | `[*]` | -| placeholder | Placeholder override. | `string` | `schema.examples` | -| properties | A map of component property names to UI options with customizations for each property. | `object` | | -| subtitle | Subtitle rendered in form title. | `string` | `schema.$kind` | -| widget | Override default field widget. See list of widgets below. | `enum` | | - -###### Widgets - -- checkbox -- date -- datetime -- input -- number -- radio -- select -- textarea diff --git a/Orchestrator/Samples/Composer/OrchestratorDispatch/schemas/sdk.schema b/Orchestrator/Samples/Composer/OrchestratorDispatch/schemas/sdk.schema deleted file mode 100644 index ebfecc3b8f..0000000000 --- a/Orchestrator/Samples/Composer/OrchestratorDispatch/schemas/sdk.schema +++ /dev/null @@ -1,10398 +0,0 @@ -{ - "$schema": "https://schemas.botframework.com/schemas/component/v1.0/component.schema", - "type": "object", - "title": "Component kinds", - "description": "These are all of the kinds that can be created by the loader.", - "oneOf": [ - { - "$ref": "#/definitions/Microsoft.ActivityTemplate" - }, - { - "$ref": "#/definitions/Microsoft.AdaptiveDialog" - }, - { - "$ref": "#/definitions/Microsoft.AgeEntityRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.Ask" - }, - { - "$ref": "#/definitions/Microsoft.AttachmentInput" - }, - { - "$ref": "#/definitions/Microsoft.BeginDialog" - }, - { - "$ref": "#/definitions/Microsoft.BeginSkill" - }, - { - "$ref": "#/definitions/Microsoft.BreakLoop" - }, - { - "$ref": "#/definitions/Microsoft.CancelAllDialogs" - }, - { - "$ref": "#/definitions/Microsoft.CancelDialog" - }, - { - "$ref": "#/definitions/Microsoft.ChannelMentionEntityRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.ChoiceInput" - }, - { - "$ref": "#/definitions/Microsoft.ConditionalSelector" - }, - { - "$ref": "#/definitions/Microsoft.ConfirmInput" - }, - { - "$ref": "#/definitions/Microsoft.ConfirmationEntityRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.ContinueConversation" - }, - { - "$ref": "#/definitions/Microsoft.ContinueConversationLater" - }, - { - "$ref": "#/definitions/Microsoft.ContinueLoop" - }, - { - "$ref": "#/definitions/Microsoft.CrossTrainedRecognizerSet" - }, - { - "$ref": "#/definitions/Microsoft.CurrencyEntityRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.DateTimeEntityRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.DateTimeInput" - }, - { - "$ref": "#/definitions/Microsoft.DebugBreak" - }, - { - "$ref": "#/definitions/Microsoft.DeleteActivity" - }, - { - "$ref": "#/definitions/Microsoft.DeleteProperties" - }, - { - "$ref": "#/definitions/Microsoft.DeleteProperty" - }, - { - "$ref": "#/definitions/Microsoft.DimensionEntityRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.EditActions" - }, - { - "$ref": "#/definitions/Microsoft.EditArray" - }, - { - "$ref": "#/definitions/Microsoft.EmailEntityRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.EmitEvent" - }, - { - "$ref": "#/definitions/Microsoft.EndDialog" - }, - { - "$ref": "#/definitions/Microsoft.EndTurn" - }, - { - "$ref": "#/definitions/Microsoft.FirstSelector" - }, - { - "$ref": "#/definitions/Microsoft.Foreach" - }, - { - "$ref": "#/definitions/Microsoft.ForeachPage" - }, - { - "$ref": "#/definitions/Microsoft.GetActivityMembers" - }, - { - "$ref": "#/definitions/Microsoft.GetConversationMembers" - }, - { - "$ref": "#/definitions/Microsoft.GetConversationReference" - }, - { - "$ref": "#/definitions/Microsoft.GotoAction" - }, - { - "$ref": "#/definitions/Microsoft.GuidEntityRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.HashtagEntityRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.HttpRequest" - }, - { - "$ref": "#/definitions/Microsoft.IfCondition" - }, - { - "$ref": "#/definitions/Microsoft.IpEntityRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.LogAction" - }, - { - "$ref": "#/definitions/Microsoft.LuisRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.MentionEntityRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.MostSpecificSelector" - }, - { - "$ref": "#/definitions/Microsoft.MultiLanguageRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.NumberEntityRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.NumberInput" - }, - { - "$ref": "#/definitions/Microsoft.NumberRangeEntityRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.OAuthInput" - }, - { - "$ref": "#/definitions/Microsoft.OnActivity" - }, - { - "$ref": "#/definitions/Microsoft.OnAssignEntity" - }, - { - "$ref": "#/definitions/Microsoft.OnBeginDialog" - }, - { - "$ref": "#/definitions/Microsoft.OnCancelDialog" - }, - { - "$ref": "#/definitions/Microsoft.OnChooseEntity" - }, - { - "$ref": "#/definitions/Microsoft.OnChooseIntent" - }, - { - "$ref": "#/definitions/Microsoft.OnChooseProperty" - }, - { - "$ref": "#/definitions/Microsoft.OnCommandActivity" - }, - { - "$ref": "#/definitions/Microsoft.OnCommandResultActivity" - }, - { - "$ref": "#/definitions/Microsoft.OnCondition" - }, - { - "$ref": "#/definitions/Microsoft.OnContinueConversation" - }, - { - "$ref": "#/definitions/Microsoft.OnConversationUpdateActivity" - }, - { - "$ref": "#/definitions/Microsoft.OnDialogEvent" - }, - { - "$ref": "#/definitions/Microsoft.OnEndOfActions" - }, - { - "$ref": "#/definitions/Microsoft.OnEndOfConversationActivity" - }, - { - "$ref": "#/definitions/Microsoft.OnError" - }, - { - "$ref": "#/definitions/Microsoft.OnEventActivity" - }, - { - "$ref": "#/definitions/Microsoft.OnHandoffActivity" - }, - { - "$ref": "#/definitions/Microsoft.OnInstallationUpdateActivity" - }, - { - "$ref": "#/definitions/Microsoft.OnIntent" - }, - { - "$ref": "#/definitions/Microsoft.OnInvokeActivity" - }, - { - "$ref": "#/definitions/Microsoft.OnMessageActivity" - }, - { - "$ref": "#/definitions/Microsoft.OnMessageDeleteActivity" - }, - { - "$ref": "#/definitions/Microsoft.OnMessageReactionActivity" - }, - { - "$ref": "#/definitions/Microsoft.OnMessageUpdateActivity" - }, - { - "$ref": "#/definitions/Microsoft.OnQnAMatch" - }, - { - "$ref": "#/definitions/Microsoft.OnRepromptDialog" - }, - { - "$ref": "#/definitions/Microsoft.OnTypingActivity" - }, - { - "$ref": "#/definitions/Microsoft.OnUnknownIntent" - }, - { - "$ref": "#/definitions/Microsoft.OrchestratorRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.OrdinalEntityRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.PercentageEntityRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.PhoneNumberEntityRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.QnAMakerDialog" - }, - { - "$ref": "#/definitions/Microsoft.QnAMakerRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.RandomSelector" - }, - { - "$ref": "#/definitions/Microsoft.RecognizerSet" - }, - { - "$ref": "#/definitions/Microsoft.RegexEntityRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.RegexRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.RepeatDialog" - }, - { - "$ref": "#/definitions/Microsoft.ReplaceDialog" - }, - { - "$ref": "#/definitions/Microsoft.ResourceMultiLanguageGenerator" - }, - { - "$ref": "#/definitions/Microsoft.SendActivity" - }, - { - "$ref": "#/definitions/Microsoft.SendHandoffActivity" - }, - { - "$ref": "#/definitions/Microsoft.SetProperties" - }, - { - "$ref": "#/definitions/Microsoft.SetProperty" - }, - { - "$ref": "#/definitions/Microsoft.SignOutUser" - }, - { - "$ref": "#/definitions/Microsoft.StaticActivityTemplate" - }, - { - "$ref": "#/definitions/Microsoft.SwitchCondition" - }, - { - "$ref": "#/definitions/Microsoft.TelemetryTrackEventAction" - }, - { - "$ref": "#/definitions/Microsoft.TemperatureEntityRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.TemplateEngineLanguageGenerator" - }, - { - "$ref": "#/definitions/Microsoft.TextInput" - }, - { - "$ref": "#/definitions/Microsoft.TextTemplate" - }, - { - "$ref": "#/definitions/Microsoft.ThrowException" - }, - { - "$ref": "#/definitions/Microsoft.TraceActivity" - }, - { - "$ref": "#/definitions/Microsoft.TrueSelector" - }, - { - "$ref": "#/definitions/Microsoft.UpdateActivity" - }, - { - "$ref": "#/definitions/Microsoft.UrlEntityRecognizer" - } - ], - "definitions": { - "Microsoft.ActivityTemplate": { - "$role": "implements(Microsoft.IActivityTemplate)", - "title": "Microsoft activity template", - "type": "object", - "required": [ - "template", - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.14.0-daily.20210414.235020.dcacf50" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "template": { - "title": "Template", - "description": "Language Generator template to use to create the activity", - "type": "string" - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.ActivityTemplate" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.AdaptiveDialog": { - "$role": "implements(Microsoft.IDialog)", - "title": "Adaptive dialog", - "description": "Flexible, data driven dialog that can adapt to the conversation.", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.14.0-daily.20210414.235020.dcacf50" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "pattern": "^(?!(=)).*", - "title": "Id", - "description": "Optional dialog ID." - }, - "autoEndDialog": { - "$ref": "#/definitions/booleanExpression", - "title": "Auto end dialog", - "description": "If set to true the dialog will automatically end when there are no further actions. If set to false, remember to manually end the dialog using EndDialog action.", - "default": true - }, - "defaultResultProperty": { - "type": "string", - "title": "Default result property", - "description": "Value that will be passed back to the parent dialog.", - "default": "dialog.result" - }, - "dialogs": { - "type": "array", - "title": "Dialogs added to DialogSet", - "items": { - "$kind": "Microsoft.IDialog", - "title": "Dialog", - "description": "Dialogs will be added to DialogSet.", - "$ref": "#/definitions/Microsoft.IDialog" - } - }, - "recognizer": { - "$kind": "Microsoft.IRecognizer", - "title": "Recognizer", - "description": "Input recognizer that interprets user input into intent and entities.", - "$ref": "#/definitions/Microsoft.IRecognizer" - }, - "generator": { - "$kind": "Microsoft.ILanguageGenerator", - "title": "Language generator", - "description": "Language generator that generates bot responses.", - "$ref": "#/definitions/Microsoft.ILanguageGenerator" - }, - "selector": { - "$kind": "Microsoft.ITriggerSelector", - "title": "Selector", - "description": "Policy to determine which trigger is executed. Defaults to a 'best match' selector (optional).", - "$ref": "#/definitions/Microsoft.ITriggerSelector" - }, - "triggers": { - "type": "array", - "description": "List of triggers defined for this dialog.", - "title": "Triggers", - "items": { - "$kind": "Microsoft.ITrigger", - "title": "Event triggers", - "description": "Event triggers for handling events.", - "$ref": "#/definitions/Microsoft.ITrigger" - } - }, - "schema": { - "title": "Schema", - "description": "Schema to fill in.", - "anyOf": [ - { - "$ref": "#/definitions/schema" - }, - { - "type": "string", - "title": "Reference to JSON schema", - "description": "Reference to JSON schema .dialog file." - } - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.AdaptiveDialog" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.AgeEntityRecognizer": { - "$role": [ - "implements(Microsoft.IRecognizer)", - "implements(Microsoft.IEntityRecognizer)" - ], - "title": "Age entity recognizer", - "description": "Recognizer which recognizes age.", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.14.0-daily.20210414.235020.dcacf50" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.AgeEntityRecognizer" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.Ask": { - "$role": [ - "implements(Microsoft.IDialog)", - "extends(Microsoft.SendActivity)" - ], - "title": "Send activity to ask a question", - "description": "This is an action which sends an activity to the user when a response is expected", - "type": "object", - "$policies": { - "interactive": true - }, - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.14.0-daily.20210414.235020.dcacf50" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "expectedProperties": { - "$ref": "#/definitions/arrayExpression", - "title": "Expected properties", - "description": "Properties expected from the user.", - "examples": [ - [ - "age", - "name" - ] - ], - "items": { - "type": "string", - "title": "Name", - "description": "Name of the property" - } - }, - "defaultOperation": { - "$ref": "#/definitions/stringExpression", - "title": "Default operation", - "description": "Sets the default operation that will be used when no operation is recognized in the response to this Ask.", - "examples": [ - "Add()", - "Remove()" - ] - }, - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the dialog" - }, - "disabled": { - "$ref": "#/definitions/booleanExpression", - "title": "Disabled", - "description": "Optional condition which if true will disable this action." - }, - "activity": { - "$kind": "Microsoft.IActivityTemplate", - "title": "Activity", - "description": "Activity to send.", - "$ref": "#/definitions/Microsoft.IActivityTemplate" - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.Ask" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.AttachmentInput": { - "$role": [ - "implements(Microsoft.IDialog)", - "extends(Microsoft.InputDialog)" - ], - "title": "Attachment input dialog", - "description": "Collect information - Ask for a file or image.", - "$policies": { - "interactive": true - }, - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.14.0-daily.20210414.235020.dcacf50" - }, - "type": "object", - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "defaultValue": { - "$role": "expression", - "title": "Default value", - "description": "'Property' will be set to the object or the result of this expression when max turn count is exceeded.", - "oneOf": [ - { - "$ref": "#/definitions/botframework.json/definitions/Attachment", - "title": "Object", - "description": "Attachment object." - }, - { - "$ref": "#/definitions/equalsExpression" - } - ] - }, - "value": { - "$role": "expression", - "title": "Value", - "description": "'Property' will be set to the object or the result of this expression unless it evaluates to null.", - "oneOf": [ - { - "$ref": "#/definitions/botframework.json/definitions/Attachment", - "title": "Object", - "description": "Attachment object." - }, - { - "$ref": "#/definitions/equalsExpression" - } - ] - }, - "outputFormat": { - "$role": "expression", - "title": "Output format", - "description": "Attachment output format.", - "oneOf": [ - { - "type": "string", - "title": "Standard format", - "description": "Standard output formats.", - "enum": [ - "all", - "first" - ], - "default": "first" - }, - { - "$ref": "#/definitions/equalsExpression" - } - ] - }, - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the dialog" - }, - "disabled": { - "$ref": "#/definitions/booleanExpression", - "title": "Disabled", - "description": "Optional condition which if true will disable this action.", - "default": false, - "examples": [ - false, - "=user.isVip" - ] - }, - "prompt": { - "$kind": "Microsoft.IActivityTemplate", - "title": "Initial prompt", - "description": "Message to send to collect information.", - "examples": [ - "What is your birth date?" - ], - "$ref": "#/definitions/Microsoft.IActivityTemplate" - }, - "unrecognizedPrompt": { - "$kind": "Microsoft.IActivityTemplate", - "title": "Unrecognized prompt", - "description": "Message to send when max turn count (if specified) has been exceeded and the default value is selected as the value.", - "examples": [ - "Sorry, I'm having trouble understanding you. I will just use {this.options.defaultValue} for now. You can say 'I'm 36 years old' to change it." - ], - "$ref": "#/definitions/Microsoft.IActivityTemplate" - }, - "invalidPrompt": { - "$kind": "Microsoft.IActivityTemplate", - "title": "Invalid prompt", - "description": "Message to send when the user input does not meet any validation expression.", - "examples": [ - "Sorry, '{this.value}' does not work. I need a number between 1-150. What is your age?" - ], - "$ref": "#/definitions/Microsoft.IActivityTemplate" - }, - "defaultValueResponse": { - "$kind": "Microsoft.IActivityTemplate", - "title": "Default value response", - "description": "Message to send when max turn count (if specified) has been exceeded and the default value is selected as the value.", - "examples": [ - "Sorry, I'm having trouble understanding you. I will just use {this.options.defaultValue} for now. You can say 'I'm 36 years old' to change it." - ], - "$ref": "#/definitions/Microsoft.IActivityTemplate" - }, - "maxTurnCount": { - "$ref": "#/definitions/integerExpression", - "title": "Max turn count", - "description": "Maximum number of re-prompt attempts to collect information.", - "default": 3, - "minimum": 0, - "maximum": 2147483647, - "examples": [ - 3, - "=settings.xyz" - ] - }, - "validations": { - "type": "array", - "title": "Validation expressions", - "description": "Expression to validate user input.", - "items": { - "$ref": "#/definitions/condition", - "title": "Condition", - "description": "Expression which needs to met for the input to be considered valid", - "examples": [ - "int(this.value) > 1 && int(this.value) <= 150", - "count(this.value) < 300" - ] - } - }, - "property": { - "$ref": "#/definitions/stringExpression", - "title": "Property", - "description": "Property to store collected information. Input will be skipped if property has value (unless 'Always prompt' is true).", - "examples": [ - "$birthday", - "dialog.${user.name}", - "=f(x)" - ] - }, - "alwaysPrompt": { - "$ref": "#/definitions/booleanExpression", - "title": "Always prompt", - "description": "Collect information even if the specified 'property' is not empty.", - "default": false, - "examples": [ - false, - "=$val" - ] - }, - "allowInterruptions": { - "$ref": "#/definitions/booleanExpression", - "title": "Allow Interruptions", - "description": "A boolean expression that determines whether the parent should be allowed to interrupt the input.", - "default": true, - "examples": [ - true, - "=user.xyz" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.AttachmentInput" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.BeginDialog": { - "$role": "implements(Microsoft.IDialog)", - "title": "Begin a dialog", - "description": "Begin another dialog.", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.14.0-daily.20210414.235020.dcacf50" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the dialog" - }, - "disabled": { - "$ref": "#/definitions/booleanExpression", - "title": "Disabled", - "description": "Optional condition which if true will disable this action.", - "examples": [ - "user.age > 3" - ] - }, - "dialog": { - "oneOf": [ - { - "$kind": "Microsoft.IDialog", - "pattern": "^(?!(=)).*", - "title": "Dialog", - "$ref": "#/definitions/Microsoft.IDialog" - }, - { - "$ref": "#/definitions/equalsExpression" - } - ], - "title": "Dialog name", - "description": "Name of the dialog to call." - }, - "options": { - "$ref": "#/definitions/objectExpression", - "title": "Options", - "description": "One or more options that are passed to the dialog that is called.", - "examples": [ - { - "arg1": "=expression" - } - ], - "additionalProperties": { - "type": "string", - "title": "Options", - "description": "Options for dialog." - } - }, - "activityProcessed": { - "$ref": "#/definitions/booleanExpression", - "title": "Activity processed", - "description": "When set to false, the dialog that is called can process the current activity.", - "default": true - }, - "resultProperty": { - "$ref": "#/definitions/stringExpression", - "title": "Property", - "description": "Property to store any value returned by the dialog that is called.", - "examples": [ - "dialog.userName" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.BeginDialog" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.BeginSkill": { - "$role": "implements(Microsoft.IDialog)", - "title": "Begin a skill", - "description": "Begin a remote skill.", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.14.0-daily.20210414.235020.dcacf50" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the skill dialog" - }, - "disabled": { - "$ref": "#/definitions/booleanExpression", - "title": "Disabled", - "description": "Optional condition which if true will disable this action.", - "examples": [ - true, - "=f(x)" - ] - }, - "activityProcessed": { - "$ref": "#/definitions/booleanExpression", - "title": "Activity processed", - "description": "When set to false, the skill will be started using the activity in the current turn context instead of the activity in the Activity property.", - "default": true, - "examples": [ - true, - "=f(x)" - ] - }, - "resultProperty": { - "$ref": "#/definitions/stringExpression", - "title": "Property", - "description": "Property to store any value returned by the dialog that is called.", - "examples": [ - "dialog.userName" - ] - }, - "botId": { - "$ref": "#/definitions/stringExpression", - "title": "Skill host bot ID", - "description": "The Microsoft App ID that will be calling the skill.", - "default": "=settings.MicrosoftAppId" - }, - "skillHostEndpoint": { - "$ref": "#/definitions/stringExpression", - "title": "Skill host", - "description": "The callback Url for the skill host.", - "default": "=settings.skillHostEndpoint", - "examples": [ - "https://mybot.contoso.com/api/skills/" - ] - }, - "connectionName": { - "$ref": "#/definitions/stringExpression", - "title": "OAuth connection name (SSO)", - "description": "The OAuth Connection Name, that would be used to perform Single SignOn with a skill.", - "default": "=settings.connectionName" - }, - "skillAppId": { - "$ref": "#/definitions/stringExpression", - "title": "Skill App Id", - "description": "The Microsoft App ID for the skill." - }, - "skillEndpoint": { - "$ref": "#/definitions/stringExpression", - "title": "Skill endpoint ", - "description": "The /api/messages endpoint for the skill.", - "examples": [ - "https://myskill.contoso.com/api/messages/" - ] - }, - "activity": { - "$kind": "Microsoft.IActivityTemplate", - "title": "Activity", - "description": "The activity to send to the skill.", - "$ref": "#/definitions/Microsoft.IActivityTemplate" - }, - "allowInterruptions": { - "$ref": "#/definitions/booleanExpression", - "title": "Allow interruptions", - "description": "A boolean expression that determines whether the parent should be allowed to interrupt the skill.", - "default": true, - "examples": [ - true, - "=user.xyz" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.BeginSkill" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.BreakLoop": { - "$role": "implements(Microsoft.IDialog)", - "title": "Break loop", - "description": "Stop executing this loop", - "type": "object", - "required": [ - "$kind" - ], - "$policies": { - "lastAction": true - }, - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.14.0-daily.20210414.235020.dcacf50" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the dialog" - }, - "disabled": { - "$ref": "#/definitions/booleanExpression", - "title": "Disabled", - "description": "Optional condition which if true will disable this action.", - "examples": [ - "user.age > 3" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.BreakLoop" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.CancelAllDialogs": { - "$role": "implements(Microsoft.IDialog)", - "title": "Cancel all dialogs", - "description": "Cancel all active dialogs. All dialogs in the dialog chain will need a trigger to capture the event configured in this action.", - "type": "object", - "$policies": { - "lastAction": true - }, - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.14.0-daily.20210414.235020.dcacf50" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the dialog" - }, - "disabled": { - "$ref": "#/definitions/booleanExpression", - "title": "Disabled", - "description": "Optional condition which if true will disable this action.", - "examples": [ - "user.age > 3" - ] - }, - "activityProcessed": { - "$ref": "#/definitions/booleanExpression", - "title": "Activity processed", - "description": "When set to false, the caller dialog is told it should process the current activity.", - "default": true - }, - "eventName": { - "$ref": "#/definitions/stringExpression", - "title": "Event name", - "description": "Name of the event to emit." - }, - "eventValue": { - "$ref": "#/definitions/valueExpression", - "title": "Event value", - "description": "Value to emit with the event (optional).", - "additionalProperties": true - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.CancelAllDialogs" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.CancelDialog": { - "$role": "implements(Microsoft.IDialog)", - "title": "Cancel all dialogs", - "description": "Cancel all active dialogs. All dialogs in the dialog chain will need a trigger to capture the event configured in this action.", - "type": "object", - "$policies": { - "lastAction": true - }, - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.14.0-daily.20210414.235020.dcacf50" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the dialog" - }, - "disabled": { - "$ref": "#/definitions/booleanExpression", - "title": "Disabled", - "description": "Optional condition which if true will disable this action.", - "examples": [ - "user.age > 3" - ] - }, - "activityProcessed": { - "$ref": "#/definitions/booleanExpression", - "title": "Activity processed", - "description": "When set to false, the caller dialog is told it should process the current activity.", - "default": true - }, - "eventName": { - "$ref": "#/definitions/stringExpression", - "title": "Event name", - "description": "Name of the event to emit." - }, - "eventValue": { - "$ref": "#/definitions/valueExpression", - "title": "Event value", - "description": "Value to emit with the event (optional).", - "additionalProperties": true - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.CancelDialog" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.ChannelMentionEntityRecognizer": { - "$role": [ - "implements(Microsoft.IRecognizer)" - ], - "title": "Channel mention entity recognizer", - "description": "Promotes mention entities passed by a channel via the activity.entities into recognizer result.", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.14.0-daily.20210414.235020.dcacf50" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.ChannelMentionEntityRecognizer" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.ChoiceInput": { - "$role": [ - "implements(Microsoft.IDialog)", - "extends(Microsoft.InputDialog)" - ], - "title": "Choice input dialog", - "description": "Collect information - Pick from a list of choices", - "type": "object", - "$policies": { - "interactive": true - }, - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.14.0-daily.20210414.235020.dcacf50" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "defaultValue": { - "$ref": "#/definitions/stringExpression", - "title": "Default value", - "description": "'Property' will be set to the value of this expression when max turn count is exceeded.", - "examples": [ - "hello world", - "Hello ${user.name}", - "=concat(user.firstname, user.lastName)" - ] - }, - "value": { - "$ref": "#/definitions/stringExpression", - "title": "Value", - "description": "'Property' will be set to the value of this expression unless it evaluates to null.", - "examples": [ - "hello world", - "Hello ${user.name}", - "=concat(user.firstname, user.lastName)" - ] - }, - "outputFormat": { - "$role": "expression", - "title": "Output format", - "description": "Sets the desired choice output format (either value or index into choices).", - "oneOf": [ - { - "type": "string", - "title": "Standard", - "description": "Standard output format.", - "enum": [ - "value", - "index" - ], - "default": "value" - }, - { - "$ref": "#/definitions/equalsExpression" - } - ] - }, - "choices": { - "$role": "expression", - "title": "Array of choices", - "description": "Choices to choose from.", - "oneOf": [ - { - "type": "array", - "title": "Simple choices", - "description": "Simple choices to choose from.", - "items": [ - { - "type": "string", - "title": "Simple choice", - "description": "One choice for choice input." - } - ] - }, - { - "type": "array", - "title": "Structured choices", - "description": "Choices that allow full control.", - "items": [ - { - "type": "object", - "title": "Structured choice", - "description": "Structured choice to choose from.", - "properties": { - "value": { - "type": "string", - "title": "Value", - "description": "Value to return when this choice is selected." - }, - "action": { - "$ref": "#/definitions/botframework.json/definitions/CardAction", - "title": "Action", - "description": "Card action for the choice." - }, - "synonyms": { - "type": "array", - "title": "Synonyms", - "description": "List of synonyms to recognize in addition to the value (optional).", - "items": { - "type": "string", - "title": "Synonym", - "description": "Synonym for value." - } - } - } - } - ] - }, - { - "$ref": "#/definitions/stringExpression" - } - ] - }, - "defaultLocale": { - "$ref": "#/definitions/stringExpression", - "title": "Default locale", - "description": "The default locale to use to parse confirmation choices if there is not one passed by the caller.", - "default": "en-us", - "examples": [ - "en-us" - ] - }, - "style": { - "$role": "expression", - "title": "List style", - "description": "Sets the ListStyle to control how choices are rendered.", - "oneOf": [ - { - "type": "string", - "title": "List style", - "description": "Standard list style.", - "enum": [ - "none", - "auto", - "inline", - "list", - "suggestedAction", - "heroCard" - ], - "default": "auto" - }, - { - "$ref": "#/definitions/equalsExpression" - } - ] - }, - "choiceOptions": { - "title": "Choice options", - "description": "Sets the choice options used for controlling how choices are combined.", - "oneOf": [ - { - "type": "object", - "title": "Object", - "description": "Choice options object.", - "properties": { - "inlineSeparator": { - "type": "string", - "title": "Inline separator", - "description": "Character used to separate individual choices when there are more than 2 choices", - "default": ", " - }, - "inlineOr": { - "type": "string", - "title": "Inline or", - "description": "Separator inserted between the choices when there are only 2 choices", - "default": " or " - }, - "inlineOrMore": { - "type": "string", - "title": "Inline or more", - "description": "Separator inserted between the last 2 choices when their are more than 2 choices.", - "default": ", or " - }, - "includeNumbers": { - "type": "boolean", - "title": "Include numbers", - "description": "If true, 'inline' and 'list' list style will be prefixed with the index of the choice.", - "default": true - } - } - }, - { - "$ref": "#/definitions/equalsExpression" - } - ] - }, - "recognizerOptions": { - "title": "Recognizer options", - "description": "Sets how to recognize choices in the response", - "oneOf": [ - { - "type": "object", - "title": "Object", - "description": "Options for recognizer.", - "properties": { - "noValue": { - "type": "boolean", - "title": "No value", - "description": "If true, the choices value field will NOT be search over", - "default": false - }, - "noAction": { - "type": "boolean", - "title": "No action", - "description": "If true, the choices action.title field will NOT be searched over", - "default": false - }, - "recognizeNumbers": { - "type": "boolean", - "title": "Recognize numbers", - "description": "If true, the number recognizer will be used to recognize an index response (1,2,3...) to the prompt.", - "default": true - }, - "recognizeOrdinals": { - "type": "boolean", - "title": "Recognize ordinals", - "description": "If true, the ordinal recognizer will be used to recognize ordinal response (first/second/...) to the prompt.", - "default": true - } - } - }, - { - "$ref": "#/definitions/equalsExpression" - } - ] - }, - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the dialog" - }, - "disabled": { - "$ref": "#/definitions/booleanExpression", - "title": "Disabled", - "description": "Optional condition which if true will disable this action.", - "default": false, - "examples": [ - false, - "=user.isVip" - ] - }, - "prompt": { - "$kind": "Microsoft.IActivityTemplate", - "title": "Initial prompt", - "description": "Message to send to collect information.", - "examples": [ - "What is your birth date?" - ], - "$ref": "#/definitions/Microsoft.IActivityTemplate" - }, - "unrecognizedPrompt": { - "$kind": "Microsoft.IActivityTemplate", - "title": "Unrecognized prompt", - "description": "Message to send when max turn count (if specified) has been exceeded and the default value is selected as the value.", - "examples": [ - "Sorry, I'm having trouble understanding you. I will just use {this.options.defaultValue} for now. You can say 'I'm 36 years old' to change it." - ], - "$ref": "#/definitions/Microsoft.IActivityTemplate" - }, - "invalidPrompt": { - "$kind": "Microsoft.IActivityTemplate", - "title": "Invalid prompt", - "description": "Message to send when the user input does not meet any validation expression.", - "examples": [ - "Sorry, '{this.value}' does not work. I need a number between 1-150. What is your age?" - ], - "$ref": "#/definitions/Microsoft.IActivityTemplate" - }, - "defaultValueResponse": { - "$kind": "Microsoft.IActivityTemplate", - "title": "Default value response", - "description": "Message to send when max turn count (if specified) has been exceeded and the default value is selected as the value.", - "examples": [ - "Sorry, I'm having trouble understanding you. I will just use {this.options.defaultValue} for now. You can say 'I'm 36 years old' to change it." - ], - "$ref": "#/definitions/Microsoft.IActivityTemplate" - }, - "maxTurnCount": { - "$ref": "#/definitions/integerExpression", - "title": "Max turn count", - "description": "Maximum number of re-prompt attempts to collect information.", - "default": 3, - "minimum": 0, - "maximum": 2147483647, - "examples": [ - 3, - "=settings.xyz" - ] - }, - "validations": { - "type": "array", - "title": "Validation expressions", - "description": "Expression to validate user input.", - "items": { - "$ref": "#/definitions/condition", - "title": "Condition", - "description": "Expression which needs to met for the input to be considered valid", - "examples": [ - "int(this.value) > 1 && int(this.value) <= 150", - "count(this.value) < 300" - ] - } - }, - "property": { - "$ref": "#/definitions/stringExpression", - "title": "Property", - "description": "Property to store collected information. Input will be skipped if property has value (unless 'Always prompt' is true).", - "examples": [ - "$birthday", - "dialog.${user.name}", - "=f(x)" - ] - }, - "alwaysPrompt": { - "$ref": "#/definitions/booleanExpression", - "title": "Always prompt", - "description": "Collect information even if the specified 'property' is not empty.", - "default": false, - "examples": [ - false, - "=$val" - ] - }, - "allowInterruptions": { - "$ref": "#/definitions/booleanExpression", - "title": "Allow Interruptions", - "description": "A boolean expression that determines whether the parent should be allowed to interrupt the input.", - "default": true, - "examples": [ - true, - "=user.xyz" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.ChoiceInput" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.ConditionalSelector": { - "$role": "implements(Microsoft.ITriggerSelector)", - "title": "Conditional trigger selector", - "description": "Use a rule selector based on a condition", - "type": "object", - "required": [ - "condition", - "ifTrue", - "ifFalse", - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.14.0-daily.20210414.235020.dcacf50" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "condition": { - "$ref": "#/definitions/condition", - "title": "Condition", - "description": "Expression to evaluate" - }, - "ifTrue": { - "$kind": "Microsoft.ITriggerSelector", - "$ref": "#/definitions/Microsoft.ITriggerSelector" - }, - "ifFalse": { - "$kind": "Microsoft.ITriggerSelector", - "$ref": "#/definitions/Microsoft.ITriggerSelector" - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.ConditionalSelector" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.ConfirmInput": { - "$role": [ - "implements(Microsoft.IDialog)", - "extends(Microsoft.InputDialog)" - ], - "title": "Confirm input dialog", - "description": "Collect information - Ask for confirmation (yes or no).", - "type": "object", - "$policies": { - "interactive": true - }, - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.14.0-daily.20210414.235020.dcacf50" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "outputFormat": { - "$ref": "#/definitions/valueExpression", - "title": "Output format", - "description": "Optional expression to use to format the output.", - "examples": [ - "=concat('confirmation:', this.value)" - ] - }, - "defaultLocale": { - "$ref": "#/definitions/stringExpression", - "title": "Default locale", - "description": "The Default locale or an expression which provides the default locale to use as default if not found in the activity.", - "default": "en-us", - "examples": [ - "en-us" - ] - }, - "style": { - "$role": "expression", - "title": "List style", - "description": "Sets the ListStyle to control how choices are rendered.", - "oneOf": [ - { - "type": "string", - "title": "Standard style", - "description": "Standard style for rendering choices.", - "enum": [ - "none", - "auto", - "inline", - "list", - "suggestedAction", - "heroCard" - ], - "default": "auto" - }, - { - "$ref": "#/definitions/equalsExpression" - } - ] - }, - "choiceOptions": { - "title": "Choice options", - "description": "Choice Options or expression which provides Choice Options to control display choices to the user.", - "oneOf": [ - { - "type": "object", - "title": "Choice options", - "description": "Choice options.", - "properties": { - "inlineSeparator": { - "type": "string", - "title": "Inline separator", - "description": "Text to separate individual choices when there are more than 2 choices", - "default": ", " - }, - "inlineOr": { - "type": "string", - "title": "Inline or", - "description": "Text to be inserted between the choices when their are only 2 choices", - "default": " or " - }, - "inlineOrMore": { - "type": "string", - "title": "Inline or more", - "description": "Text to be inserted between the last 2 choices when their are more than 2 choices.", - "default": ", or " - }, - "includeNumbers": { - "type": "boolean", - "title": "Include numbers", - "description": "If true, inline and list style choices will be prefixed with the index of the choice.", - "default": true - } - } - }, - { - "$ref": "#/definitions/equalsExpression" - } - ] - }, - "defaultValue": { - "$ref": "#/definitions/booleanExpression", - "title": "Default value", - "description": "'Property' will be set to the value of this expression when max turn count is exceeded.", - "examples": [ - true, - "=user.age > 3" - ] - }, - "value": { - "$ref": "#/definitions/booleanExpression", - "title": "Value", - "description": "'Property' will be set to the value of this expression unless it evaluates to null.", - "examples": [ - true, - "=user.isVip" - ] - }, - "confirmChoices": { - "$role": "expression", - "title": "Array of choice objects", - "description": "Array of simple or structured choices.", - "oneOf": [ - { - "type": "array", - "title": "Simple choices", - "description": "Simple choices to confirm from.", - "items": [ - { - "type": "string", - "title": "Simple choice", - "description": "Simple choice to confirm." - } - ] - }, - { - "type": "array", - "title": "Structured choices", - "description": "Structured choices for confirmations.", - "items": [ - { - "type": "object", - "title": "Choice", - "description": "Choice to confirm.", - "properties": { - "value": { - "type": "string", - "title": "Value", - "description": "Value to return when this choice is selected." - }, - "action": { - "$ref": "#/definitions/botframework.json/definitions/CardAction", - "title": "Action", - "description": "Card action for the choice." - }, - "synonyms": { - "type": "array", - "title": "Synonyms", - "description": "List of synonyms to recognize in addition to the value (optional).", - "items": { - "type": "string", - "title": "Synonym", - "description": "Synonym for choice." - } - } - } - } - ] - }, - { - "$ref": "#/definitions/stringExpression" - } - ] - }, - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the dialog" - }, - "disabled": { - "$ref": "#/definitions/booleanExpression", - "title": "Disabled", - "description": "Optional condition which if true will disable this action.", - "default": false, - "examples": [ - false, - "=user.isVip" - ] - }, - "prompt": { - "$kind": "Microsoft.IActivityTemplate", - "title": "Initial prompt", - "description": "Message to send to collect information.", - "examples": [ - "What is your birth date?" - ], - "$ref": "#/definitions/Microsoft.IActivityTemplate" - }, - "unrecognizedPrompt": { - "$kind": "Microsoft.IActivityTemplate", - "title": "Unrecognized prompt", - "description": "Message to send when max turn count (if specified) has been exceeded and the default value is selected as the value.", - "examples": [ - "Sorry, I'm having trouble understanding you. I will just use {this.options.defaultValue} for now. You can say 'I'm 36 years old' to change it." - ], - "$ref": "#/definitions/Microsoft.IActivityTemplate" - }, - "invalidPrompt": { - "$kind": "Microsoft.IActivityTemplate", - "title": "Invalid prompt", - "description": "Message to send when the user input does not meet any validation expression.", - "examples": [ - "Sorry, '{this.value}' does not work. I need a number between 1-150. What is your age?" - ], - "$ref": "#/definitions/Microsoft.IActivityTemplate" - }, - "defaultValueResponse": { - "$kind": "Microsoft.IActivityTemplate", - "title": "Default value response", - "description": "Message to send when max turn count (if specified) has been exceeded and the default value is selected as the value.", - "examples": [ - "Sorry, I'm having trouble understanding you. I will just use {this.options.defaultValue} for now. You can say 'I'm 36 years old' to change it." - ], - "$ref": "#/definitions/Microsoft.IActivityTemplate" - }, - "maxTurnCount": { - "$ref": "#/definitions/integerExpression", - "title": "Max turn count", - "description": "Maximum number of re-prompt attempts to collect information.", - "default": 3, - "minimum": 0, - "maximum": 2147483647, - "examples": [ - 3, - "=settings.xyz" - ] - }, - "validations": { - "type": "array", - "title": "Validation expressions", - "description": "Expression to validate user input.", - "items": { - "$ref": "#/definitions/condition", - "title": "Condition", - "description": "Expression which needs to met for the input to be considered valid", - "examples": [ - "int(this.value) > 1 && int(this.value) <= 150", - "count(this.value) < 300" - ] - } - }, - "property": { - "$ref": "#/definitions/stringExpression", - "title": "Property", - "description": "Property to store collected information. Input will be skipped if property has value (unless 'Always prompt' is true).", - "examples": [ - "$birthday", - "dialog.${user.name}", - "=f(x)" - ] - }, - "alwaysPrompt": { - "$ref": "#/definitions/booleanExpression", - "title": "Always prompt", - "description": "Collect information even if the specified 'property' is not empty.", - "default": false, - "examples": [ - false, - "=$val" - ] - }, - "allowInterruptions": { - "$ref": "#/definitions/booleanExpression", - "title": "Allow Interruptions", - "description": "A boolean expression that determines whether the parent should be allowed to interrupt the input.", - "default": true, - "examples": [ - true, - "=user.xyz" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.ConfirmInput" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.ConfirmationEntityRecognizer": { - "$role": [ - "implements(Microsoft.IRecognizer)", - "implements(Microsoft.IEntityRecognizer)" - ], - "title": "Confirmation entity recognizer", - "description": "Recognizer which recognizes confirmation choices (yes/no).", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.14.0-daily.20210414.235020.dcacf50" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.ConfirmationEntityRecognizer" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.ContinueConversation": { - "$role": "implements(Microsoft.IDialog)", - "title": "Continue conversation (Queue)", - "description": "Continue a specific conversation (via StorageQueue implementation).", - "type": "object", - "required": [ - "conversationReference", - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.14.0-daily.20210414.235020.dcacf50" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the dialog" - }, - "disabled": { - "$ref": "#/definitions/booleanExpression", - "title": "Disabled", - "description": "Optional condition which if true will disable this action.", - "examples": [ - "user.age > 3" - ] - }, - "conversationReference": { - "$ref": "#/definitions/objectExpression", - "title": "Conversation Reference", - "description": "A conversation reference. (NOTE: Minimum required values or channelId, conversation).", - "examples": [ - { - "channelId": "skype", - "serviceUrl": "http://smba.skype.com", - "conversation": { - "id": "11111" - }, - "bot": { - "id": "22222" - }, - "user": { - "id": "33333" - }, - "locale": "en-us" - } - ] - }, - "value": { - "$ref": "#/definitions/valueExpression", - "title": "Value", - "description": "Value to send in the activity.value." - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.ContinueConversation" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.ContinueConversationLater": { - "$role": "implements(Microsoft.IDialog)", - "title": "Continue conversation later (Queue)", - "description": "Continue conversation at later time (via StorageQueue implementation).", - "type": "object", - "required": [ - "date", - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.14.0-daily.20210414.235020.dcacf50" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the dialog" - }, - "disabled": { - "$ref": "#/definitions/booleanExpression", - "title": "Disabled", - "description": "Optional condition which if true will disable this action.", - "examples": [ - "user.age > 3" - ] - }, - "date": { - "$ref": "#/definitions/stringExpression", - "title": "Date", - "description": "Date in the future as a ISO string when the conversation should continue.", - "examples": [ - "=addHours(utcNow(), 1)" - ] - }, - "value": { - "$ref": "#/definitions/valueExpression", - "title": "Value", - "description": "Value to send in the activity.value." - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.ContinueConversationLater" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.ContinueLoop": { - "$role": "implements(Microsoft.IDialog)", - "title": "Continue loop", - "description": "Stop executing this template and continue with the next iteration of the loop.", - "type": "object", - "required": [ - "$kind" - ], - "$policies": { - "lastAction": true - }, - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.14.0-daily.20210414.235020.dcacf50" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the dialog" - }, - "disabled": { - "$ref": "#/definitions/booleanExpression", - "title": "Disabled", - "description": "Optional condition which if true will disable this action.", - "examples": [ - "user.age > 3" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.ContinueLoop" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.CrossTrainedRecognizerSet": { - "$role": "implements(Microsoft.IRecognizer)", - "title": "Cross-trained recognizer set", - "description": "Recognizer for selecting between cross trained recognizers.", - "type": "object", - "required": [ - "recognizers", - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.14.0-daily.20210414.235020.dcacf50" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional unique id using with RecognizerSet." - }, - "recognizers": { - "type": "array", - "title": "Recognizers", - "description": "List of Recognizers defined for this set.", - "items": { - "$kind": "Microsoft.IRecognizer", - "$ref": "#/definitions/Microsoft.IRecognizer" - } - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.CrossTrainedRecognizerSet" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.CurrencyEntityRecognizer": { - "$role": [ - "implements(Microsoft.IRecognizer)", - "implements(Microsoft.IEntityRecognizer)" - ], - "title": "Currency entity recognizer", - "description": "Recognizer which recognizes currency.", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.14.0-daily.20210414.235020.dcacf50" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.CurrencyEntityRecognizer" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.DateTimeEntityRecognizer": { - "$role": [ - "implements(Microsoft.IRecognizer)", - "implements(Microsoft.IEntityRecognizer)" - ], - "title": "Date and time entity recognizer", - "description": "Recognizer which recognizes dates and time fragments.", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.14.0-daily.20210414.235020.dcacf50" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.DateTimeEntityRecognizer" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.DateTimeInput": { - "$role": [ - "implements(Microsoft.IDialog)", - "extends(Microsoft.InputDialog)" - ], - "title": "Date/time input dialog", - "description": "Collect information - Ask for date and/ or time", - "type": "object", - "defaultLocale": { - "$ref": "#/definitions/stringExpression", - "title": "Default locale", - "description": "Default locale.", - "default": "en-us" - }, - "$policies": { - "interactive": true - }, - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.14.0-daily.20210414.235020.dcacf50" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "defaultValue": { - "$ref": "#/definitions/stringExpression", - "format": "date-time", - "title": "Default date", - "description": "'Property' will be set to the value or the result of the expression when max turn count is exceeded.", - "examples": [ - "=user.birthday" - ] - }, - "value": { - "$ref": "#/definitions/stringExpression", - "format": "date-time", - "title": "Value", - "description": "'Property' will be set to the value or the result of the expression unless it evaluates to null.", - "examples": [ - "=user.birthday" - ] - }, - "outputFormat": { - "$ref": "#/definitions/expression", - "title": "Output format", - "description": "Expression to use for formatting the output.", - "examples": [ - "=this.value[0].Value" - ] - }, - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the dialog" - }, - "disabled": { - "$ref": "#/definitions/booleanExpression", - "title": "Disabled", - "description": "Optional condition which if true will disable this action.", - "default": false, - "examples": [ - false, - "=user.isVip" - ] - }, - "prompt": { - "$kind": "Microsoft.IActivityTemplate", - "title": "Initial prompt", - "description": "Message to send to collect information.", - "examples": [ - "What is your birth date?" - ], - "$ref": "#/definitions/Microsoft.IActivityTemplate" - }, - "unrecognizedPrompt": { - "$kind": "Microsoft.IActivityTemplate", - "title": "Unrecognized prompt", - "description": "Message to send when max turn count (if specified) has been exceeded and the default value is selected as the value.", - "examples": [ - "Sorry, I'm having trouble understanding you. I will just use {this.options.defaultValue} for now. You can say 'I'm 36 years old' to change it." - ], - "$ref": "#/definitions/Microsoft.IActivityTemplate" - }, - "invalidPrompt": { - "$kind": "Microsoft.IActivityTemplate", - "title": "Invalid prompt", - "description": "Message to send when the user input does not meet any validation expression.", - "examples": [ - "Sorry, '{this.value}' does not work. I need a number between 1-150. What is your age?" - ], - "$ref": "#/definitions/Microsoft.IActivityTemplate" - }, - "defaultValueResponse": { - "$kind": "Microsoft.IActivityTemplate", - "title": "Default value response", - "description": "Message to send when max turn count (if specified) has been exceeded and the default value is selected as the value.", - "examples": [ - "Sorry, I'm having trouble understanding you. I will just use {this.options.defaultValue} for now. You can say 'I'm 36 years old' to change it." - ], - "$ref": "#/definitions/Microsoft.IActivityTemplate" - }, - "maxTurnCount": { - "$ref": "#/definitions/integerExpression", - "title": "Max turn count", - "description": "Maximum number of re-prompt attempts to collect information.", - "default": 3, - "minimum": 0, - "maximum": 2147483647, - "examples": [ - 3, - "=settings.xyz" - ] - }, - "validations": { - "type": "array", - "title": "Validation expressions", - "description": "Expression to validate user input.", - "items": { - "$ref": "#/definitions/condition", - "title": "Condition", - "description": "Expression which needs to met for the input to be considered valid", - "examples": [ - "int(this.value) > 1 && int(this.value) <= 150", - "count(this.value) < 300" - ] - } - }, - "property": { - "$ref": "#/definitions/stringExpression", - "title": "Property", - "description": "Property to store collected information. Input will be skipped if property has value (unless 'Always prompt' is true).", - "examples": [ - "$birthday", - "dialog.${user.name}", - "=f(x)" - ] - }, - "alwaysPrompt": { - "$ref": "#/definitions/booleanExpression", - "title": "Always prompt", - "description": "Collect information even if the specified 'property' is not empty.", - "default": false, - "examples": [ - false, - "=$val" - ] - }, - "allowInterruptions": { - "$ref": "#/definitions/booleanExpression", - "title": "Allow Interruptions", - "description": "A boolean expression that determines whether the parent should be allowed to interrupt the input.", - "default": true, - "examples": [ - true, - "=user.xyz" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.DateTimeInput" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.DebugBreak": { - "$role": "implements(Microsoft.IDialog)", - "title": "Debugger break", - "description": "If debugger is attached, stop the execution at this point in the conversation.", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.14.0-daily.20210414.235020.dcacf50" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the dialog" - }, - "disabled": { - "$ref": "#/definitions/booleanExpression", - "title": "Disabled", - "description": "Optional condition which if true will disable this action.", - "examples": [ - "user.age > 3" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.DebugBreak" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.DeleteActivity": { - "$role": "implements(Microsoft.IDialog)", - "title": "Delete Activity", - "description": "Delete an activity that was previously sent.", - "type": "object", - "required": [ - "activityId", - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.14.0-daily.20210414.235020.dcacf50" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the dialog" - }, - "activityId": { - "$ref": "#/definitions/stringExpression", - "title": "ActivityId", - "description": "expression to an activityId to delete", - "examples": [ - "=turn.lastresult.id" - ] - }, - "disabled": { - "$ref": "#/definitions/booleanExpression", - "title": "Disabled", - "description": "Optional condition which if true will disable this action.", - "examples": [ - "user.age > 3" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.DeleteActivity" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.DeleteProperties": { - "$role": "implements(Microsoft.IDialog)", - "title": "Delete Properties", - "description": "Delete multiple properties and any value it holds.", - "type": "object", - "required": [ - "properties", - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.14.0-daily.20210414.235020.dcacf50" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the dialog" - }, - "disabled": { - "$ref": "#/definitions/booleanExpression", - "title": "Disabled", - "description": "Optional condition which if true will disable this action.", - "examples": [ - "user.age > 3" - ] - }, - "properties": { - "type": "array", - "title": "Properties", - "description": "Properties to delete.", - "items": { - "$ref": "#/definitions/stringExpression", - "title": "Property", - "description": "Property to delete." - } - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.DeleteProperties" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.DeleteProperty": { - "$role": "implements(Microsoft.IDialog)", - "title": "Delete property", - "description": "Delete a property and any value it holds.", - "type": "object", - "required": [ - "property", - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.14.0-daily.20210414.235020.dcacf50" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the dialog" - }, - "disabled": { - "$ref": "#/definitions/booleanExpression", - "title": "Disabled", - "description": "Optional condition which if true will disable this action.", - "examples": [ - "user.age > 3" - ] - }, - "property": { - "$ref": "#/definitions/stringExpression", - "title": "Property", - "description": "Property to delete." - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.DeleteProperty" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.DimensionEntityRecognizer": { - "$role": [ - "implements(Microsoft.IRecognizer)", - "implements(Microsoft.IEntityRecognizer)" - ], - "title": "Dimension entity recognizer", - "description": "Recognizer which recognizes dimension.", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.14.0-daily.20210414.235020.dcacf50" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.DimensionEntityRecognizer" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.EditActions": { - "$role": "implements(Microsoft.IDialog)", - "title": "Edit actions.", - "description": "Edit the current list of actions.", - "type": "object", - "required": [ - "changeType", - "actions", - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.14.0-daily.20210414.235020.dcacf50" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the dialog" - }, - "disabled": { - "$ref": "#/definitions/booleanExpression", - "title": "Disabled", - "description": "Optional condition which if true will disable this action.", - "examples": [ - "user.age > 3" - ] - }, - "changeType": { - "title": "Type of change", - "description": "Type of change to apply to the current actions.", - "oneOf": [ - { - "type": "string", - "title": "Standard change", - "description": "Standard change types.", - "enum": [ - "insertActions", - "insertActionsBeforeTags", - "appendActions", - "endSequence", - "replaceSequence" - ] - }, - { - "$ref": "#/definitions/equalsExpression" - } - ] - }, - "actions": { - "type": "array", - "title": "Actions", - "description": "Actions to apply.", - "items": { - "$kind": "Microsoft.IDialog", - "$ref": "#/definitions/Microsoft.IDialog" - } - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.EditActions" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.EditArray": { - "$role": "implements(Microsoft.IDialog)", - "title": "Edit array", - "description": "Modify an array in memory", - "type": "object", - "required": [ - "itemsProperty", - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.14.0-daily.20210414.235020.dcacf50" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the dialog" - }, - "changeType": { - "title": "Type of change", - "description": "Type of change to the array in memory.", - "oneOf": [ - { - "type": "string", - "title": "Change type", - "description": "Standard change type.", - "enum": [ - "push", - "pop", - "take", - "remove", - "clear" - ] - }, - { - "$ref": "#/definitions/equalsExpression" - } - ] - }, - "disabled": { - "$ref": "#/definitions/booleanExpression", - "title": "Disabled", - "description": "Optional condition which if true will disable this action.", - "examples": [ - "user.age > 3" - ] - }, - "itemsProperty": { - "$ref": "#/definitions/stringExpression", - "title": "Items property", - "description": "Property that holds the array to update." - }, - "resultProperty": { - "$ref": "#/definitions/stringExpression", - "title": "Result property", - "description": "Property to store the result of this action." - }, - "value": { - "$ref": "#/definitions/valueExpression", - "title": "Value", - "description": "New value or expression.", - "examples": [ - "milk", - "=dialog.favColor", - "=dialog.favColor == 'red'" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.EditArray" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.EmailEntityRecognizer": { - "$role": [ - "implements(Microsoft.IRecognizer)", - "implements(Microsoft.IEntityRecognizer)" - ], - "title": "Email entity recognizer", - "description": "Recognizer which recognizes email.", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.14.0-daily.20210414.235020.dcacf50" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.EmailEntityRecognizer" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.EmitEvent": { - "$role": "implements(Microsoft.IDialog)", - "title": "Emit a custom event", - "description": "Emit an event. Capture this event with a trigger.", - "type": "object", - "required": [ - "eventName", - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.14.0-daily.20210414.235020.dcacf50" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the dialog" - }, - "disabled": { - "$ref": "#/definitions/booleanExpression", - "title": "Disabled", - "description": "Optional condition which if true will disable this action.", - "examples": [ - "user.age > 3" - ] - }, - "eventName": { - "$role": "expression", - "title": "Event name", - "description": "Name of the event to emit.", - "oneOf": [ - { - "type": "string", - "title": "Built-in event", - "description": "Standard event type.", - "enum": [ - "beginDialog", - "resumeDialog", - "repromptDialog", - "cancelDialog", - "endDialog", - "activityReceived", - "recognizedIntent", - "unknownIntent", - "actionsStarted", - "actionsSaved", - "actionsEnded", - "actionsResumed" - ] - }, - { - "type": "string", - "title": "Custom event", - "description": "Custom event type", - "pattern": "^(?!(beginDialog$|resumeDialog$|repromptDialog$|cancelDialog$|endDialog$|activityReceived$|recognizedIntent$|unknownIntent$|actionsStarted$|actionsSaved$|actionsEnded$|actionsResumed))(\\S){1}.*" - }, - { - "$ref": "#/definitions/equalsExpression" - } - ] - }, - "eventValue": { - "$ref": "#/definitions/valueExpression", - "title": "Event value", - "description": "Value to emit with the event (optional)." - }, - "bubbleEvent": { - "$ref": "#/definitions/booleanExpression", - "title": "Bubble event", - "description": "If true this event is passed on to parent dialogs." - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.EmitEvent" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.EndDialog": { - "$role": "implements(Microsoft.IDialog)", - "title": "End dialog", - "description": "End this dialog.", - "type": "object", - "$policies": { - "lastAction": true - }, - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.14.0-daily.20210414.235020.dcacf50" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the dialog" - }, - "disabled": { - "$ref": "#/definitions/booleanExpression", - "title": "Disabled", - "description": "Optional condition which if true will disable this action.", - "examples": [ - "user.age > 3" - ] - }, - "value": { - "$ref": "#/definitions/valueExpression", - "title": "Value", - "description": "Result value returned to the parent dialog.", - "examples": [ - "=dialog.userName", - "='tomato'" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.EndDialog" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.EndTurn": { - "$role": "implements(Microsoft.IDialog)", - "title": "End turn", - "description": "End the current turn without ending the dialog.", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.14.0-daily.20210414.235020.dcacf50" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the dialog" - }, - "disabled": { - "$ref": "#/definitions/booleanExpression", - "title": "Disabled", - "description": "Optional condition which if true will disable this action.", - "examples": [ - "user.age > 3" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.EndTurn" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.FirstSelector": { - "$role": "implements(Microsoft.ITriggerSelector)", - "title": "First trigger selector", - "description": "Selector for first true rule", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.14.0-daily.20210414.235020.dcacf50" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.FirstSelector" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.Foreach": { - "$role": "implements(Microsoft.IDialog)", - "title": "For each item", - "description": "Execute actions on each item in an a collection.", - "type": "object", - "required": [ - "itemsProperty", - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.14.0-daily.20210414.235020.dcacf50" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the dialog" - }, - "disabled": { - "$ref": "#/definitions/booleanExpression", - "title": "Disabled", - "description": "Optional condition which if true will disable this action.", - "examples": [ - "user.age > 3" - ] - }, - "itemsProperty": { - "$ref": "#/definitions/stringExpression", - "title": "Items property", - "description": "Property that holds the array.", - "examples": [ - "user.todoList" - ] - }, - "index": { - "$ref": "#/definitions/stringExpression", - "title": "Index property", - "description": "Property that holds the index of the item.", - "default": "dialog.foreach.index" - }, - "value": { - "$ref": "#/definitions/stringExpression", - "title": "Value property", - "description": "Property that holds the value of the item.", - "default": "dialog.foreach.value" - }, - "actions": { - "type": "array", - "title": "Actions", - "description": "Actions to execute for each item. Use '$foreach.value' to access the value of each item. Use '$foreach.index' to access the index of each item.", - "items": { - "$kind": "Microsoft.IDialog", - "$ref": "#/definitions/Microsoft.IDialog" - } - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.Foreach" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.ForeachPage": { - "$role": "implements(Microsoft.IDialog)", - "title": "For each page", - "description": "Execute actions on each page (collection of items) in an array.", - "type": "object", - "required": [ - "itemsProperty", - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.14.0-daily.20210414.235020.dcacf50" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the dialog" - }, - "disabled": { - "$ref": "#/definitions/booleanExpression", - "title": "Disabled", - "description": "Optional condition which if true will disable this action.", - "examples": [ - "user.age > 3" - ] - }, - "itemsProperty": { - "$ref": "#/definitions/stringExpression", - "title": "Items property", - "description": "Property that holds the array.", - "examples": [ - "user.todoList" - ] - }, - "actions": { - "type": "array", - "title": "Actions", - "description": "Actions to execute for each page. Use '$foreach.page' to access each page.", - "items": { - "$kind": "Microsoft.IDialog", - "$ref": "#/definitions/Microsoft.IDialog" - } - }, - "pageIndex": { - "$ref": "#/definitions/stringExpression", - "title": "Index property", - "description": "Property that holds the index of the page.", - "default": "dialog.foreach.pageindex" - }, - "page": { - "$ref": "#/definitions/stringExpression", - "title": "Page property", - "description": "Property that holds the value of the page.", - "default": "dialog.foreach.page" - }, - "pageSize": { - "$ref": "#/definitions/integerExpression", - "title": "Page size", - "description": "Number of items in each page.", - "default": 10 - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.ForeachPage" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.GetActivityMembers": { - "$role": "implements(Microsoft.IDialog)", - "title": "Get activity members", - "description": "Get the members who are participating in an activity. (BotFrameworkAdapter only)", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.14.0-daily.20210414.235020.dcacf50" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the dialog" - }, - "property": { - "$ref": "#/definitions/stringExpression", - "title": "Property", - "description": "Property (named location to store information).", - "examples": [ - "user.age" - ] - }, - "activityId": { - "$ref": "#/definitions/stringExpression", - "title": "Activity Id", - "description": "Activity ID or expression to an activityId to use to get the members. If none is defined then the current activity id will be used.", - "examples": [ - "turn.lastresult.id" - ] - }, - "disabled": { - "$ref": "#/definitions/booleanExpression", - "title": "Disabled", - "description": "Optional condition which if true will disable this action.", - "examples": [ - "user.age > 3" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.GetActivityMembers" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.GetConversationMembers": { - "$role": "implements(Microsoft.IDialog)", - "title": "Get conversation members", - "description": "Get the members who are participating in an conversation. (BotFrameworkAdapter only)", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.14.0-daily.20210414.235020.dcacf50" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the dialog" - }, - "property": { - "$ref": "#/definitions/stringExpression", - "title": "Property", - "description": "Property (named location to store information).", - "examples": [ - "user.age" - ] - }, - "disabled": { - "$ref": "#/definitions/booleanExpression", - "title": "Disabled", - "description": "Optional condition which if true will disable this action.", - "examples": [ - "user.age > 3" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.GetConversationMembers" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.GetConversationReference": { - "$role": "implements(Microsoft.IDialog)", - "title": "Get ConversationReference", - "description": "Gets the ConversationReference from current context and stores it in property so it can be used to with ContinueConversation action.", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.14.0-daily.20210414.235020.dcacf50" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the dialog" - }, - "property": { - "$ref": "#/definitions/stringExpression", - "title": "Property", - "description": "Property (named location to store information).", - "examples": [ - "user.age" - ] - }, - "disabled": { - "$ref": "#/definitions/booleanExpression", - "title": "Disabled", - "description": "Optional condition which if true will disable this action.", - "examples": [ - "user.age > 3" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.GetConversationReference" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.GotoAction": { - "$role": "implements(Microsoft.IDialog)", - "title": "Go to action", - "description": "Go to an an action by id.", - "type": "object", - "required": [ - "actionId", - "$kind" - ], - "$policies": { - "lastAction": true - }, - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.14.0-daily.20210414.235020.dcacf50" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the dialog" - }, - "disabled": { - "$ref": "#/definitions/booleanExpression", - "title": "Disabled", - "description": "Optional condition which if true will disable this action.", - "examples": [ - "user.age > 3" - ] - }, - "actionId": { - "$ref": "#/definitions/stringExpression", - "title": "Action Id", - "description": "Action Id to execute next" - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.GotoAction" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.GuidEntityRecognizer": { - "$role": [ - "implements(Microsoft.IRecognizer)", - "implements(Microsoft.IEntityRecognizer)" - ], - "title": "Guid entity recognizer", - "description": "Recognizer which recognizes guids.", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.14.0-daily.20210414.235020.dcacf50" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.GuidEntityRecognizer" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.HashtagEntityRecognizer": { - "$role": [ - "implements(Microsoft.IRecognizer)", - "implements(Microsoft.IEntityRecognizer)" - ], - "title": "Hashtag entity recognizer", - "description": "Recognizer which recognizes Hashtags.", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.14.0-daily.20210414.235020.dcacf50" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.HashtagEntityRecognizer" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.HttpRequest": { - "$role": "implements(Microsoft.IDialog)", - "type": "object", - "title": "HTTP request", - "description": "Make a HTTP request.", - "required": [ - "url", - "method", - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.14.0-daily.20210414.235020.dcacf50" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the dialog" - }, - "disabled": { - "$ref": "#/definitions/booleanExpression", - "title": "Disabled", - "description": "Optional condition which if true will disable this action.", - "examples": [ - "user.age > 3" - ] - }, - "method": { - "type": "string", - "title": "HTTP method", - "description": "HTTP method to use.", - "enum": [ - "GET", - "POST", - "PATCH", - "PUT", - "DELETE" - ], - "examples": [ - "GET", - "POST" - ] - }, - "url": { - "$ref": "#/definitions/stringExpression", - "title": "Url", - "description": "URL to call (supports data binding).", - "examples": [ - "https://contoso.com" - ] - }, - "body": { - "$ref": "#/definitions/valueExpression", - "title": "Body", - "description": "Body to include in the HTTP call (supports data binding).", - "additionalProperties": true - }, - "resultProperty": { - "$ref": "#/definitions/stringExpression", - "title": "Result property", - "description": "A property to store the result of this action. The result can include any of the 4 properties from the HTTP response: statusCode, reasonPhrase, content, and headers. If the content is JSON it will be a deserialized object. The values can be accessed via .content for example.", - "default": "turn.results", - "examples": [ - "dialog.contosodata" - ] - }, - "contentType": { - "$ref": "#/definitions/stringExpression", - "title": "Content type", - "description": "Content media type for the body.", - "examples": [ - "application/json", - "text/plain" - ] - }, - "headers": { - "type": "object", - "title": "Headers", - "description": "One or more headers to include in the request (supports data binding).", - "additionalProperties": { - "$ref": "#/definitions/stringExpression" - } - }, - "responseType": { - "$ref": "#/definitions/stringExpression", - "title": "Response type", - "description": "Defines the type of HTTP response. Automatically calls the 'Send a response' action if set to 'Activity' or 'Activities'.", - "oneOf": [ - { - "type": "string", - "title": "Standard response", - "description": "Standard response type.", - "enum": [ - "none", - "json", - "activity", - "activities", - "binary" - ], - "default": "json" - }, - { - "$ref": "#/definitions/equalsExpression" - } - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.HttpRequest" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.IActivityTemplate": { - "title": "Microsoft ActivityTemplates", - "description": "Components which are ActivityTemplate, which is string template, an activity, or a implementation of ActivityTemplate", - "$role": "interface", - "oneOf": [ - { - "$ref": "#/definitions/Microsoft.ActivityTemplate" - }, - { - "$ref": "#/definitions/Microsoft.StaticActivityTemplate" - }, - { - "$ref": "#/definitions/botframework.json/definitions/Activity", - "required": [ - "type" - ] - }, - { - "type": "string" - } - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Declarative", - "version": "4.14.0-daily.20210414.235020.dcacf50" - } - }, - "Microsoft.IAdapter": { - "$role": "interface", - "title": "Bot adapter", - "description": "Component that enables connecting bots to chat clients and applications.", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive.Runtime", - "version": "4.13.0" - }, - "properties": { - "route": { - "type": "string", - "title": "Adapter http route", - "description": "Route where to expose the adapter." - }, - "type": { - "type": "string", - "title": "Adapter type name", - "description": "Adapter type name" - } - } - }, - "Microsoft.IDialog": { - "title": "Microsoft dialogs", - "description": "Components which derive from Dialog", - "$role": "interface", - "oneOf": [ - { - "$ref": "#/definitions/Microsoft.AdaptiveDialog" - }, - { - "$ref": "#/definitions/Microsoft.Ask" - }, - { - "$ref": "#/definitions/Microsoft.AttachmentInput" - }, - { - "$ref": "#/definitions/Microsoft.BeginDialog" - }, - { - "$ref": "#/definitions/Microsoft.BeginSkill" - }, - { - "$ref": "#/definitions/Microsoft.BreakLoop" - }, - { - "$ref": "#/definitions/Microsoft.CancelAllDialogs" - }, - { - "$ref": "#/definitions/Microsoft.CancelDialog" - }, - { - "$ref": "#/definitions/Microsoft.ChoiceInput" - }, - { - "$ref": "#/definitions/Microsoft.ConfirmInput" - }, - { - "$ref": "#/definitions/Microsoft.ContinueConversation" - }, - { - "$ref": "#/definitions/Microsoft.ContinueConversationLater" - }, - { - "$ref": "#/definitions/Microsoft.ContinueLoop" - }, - { - "$ref": "#/definitions/Microsoft.DateTimeInput" - }, - { - "$ref": "#/definitions/Microsoft.DebugBreak" - }, - { - "$ref": "#/definitions/Microsoft.DeleteActivity" - }, - { - "$ref": "#/definitions/Microsoft.DeleteProperties" - }, - { - "$ref": "#/definitions/Microsoft.DeleteProperty" - }, - { - "$ref": "#/definitions/Microsoft.EditActions" - }, - { - "$ref": "#/definitions/Microsoft.EditArray" - }, - { - "$ref": "#/definitions/Microsoft.EmitEvent" - }, - { - "$ref": "#/definitions/Microsoft.EndDialog" - }, - { - "$ref": "#/definitions/Microsoft.EndTurn" - }, - { - "$ref": "#/definitions/Microsoft.Foreach" - }, - { - "$ref": "#/definitions/Microsoft.ForeachPage" - }, - { - "$ref": "#/definitions/Microsoft.GetActivityMembers" - }, - { - "$ref": "#/definitions/Microsoft.GetConversationMembers" - }, - { - "$ref": "#/definitions/Microsoft.GetConversationReference" - }, - { - "$ref": "#/definitions/Microsoft.GotoAction" - }, - { - "$ref": "#/definitions/Microsoft.HttpRequest" - }, - { - "$ref": "#/definitions/Microsoft.IfCondition" - }, - { - "$ref": "#/definitions/Microsoft.LogAction" - }, - { - "$ref": "#/definitions/Microsoft.NumberInput" - }, - { - "$ref": "#/definitions/Microsoft.OAuthInput" - }, - { - "$ref": "#/definitions/Microsoft.QnAMakerDialog" - }, - { - "$ref": "#/definitions/Microsoft.RepeatDialog" - }, - { - "$ref": "#/definitions/Microsoft.ReplaceDialog" - }, - { - "$ref": "#/definitions/Microsoft.SendActivity" - }, - { - "$ref": "#/definitions/Microsoft.SendHandoffActivity" - }, - { - "$ref": "#/definitions/Microsoft.SetProperties" - }, - { - "$ref": "#/definitions/Microsoft.SetProperty" - }, - { - "$ref": "#/definitions/Microsoft.SignOutUser" - }, - { - "$ref": "#/definitions/Microsoft.SwitchCondition" - }, - { - "$ref": "#/definitions/Microsoft.TelemetryTrackEventAction" - }, - { - "$ref": "#/definitions/Microsoft.TextInput" - }, - { - "$ref": "#/definitions/Microsoft.ThrowException" - }, - { - "$ref": "#/definitions/Microsoft.TraceActivity" - }, - { - "$ref": "#/definitions/Microsoft.UpdateActivity" - }, - { - "type": "string", - "pattern": "^(?!(=)).*" - } - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Declarative", - "version": "4.14.0-daily.20210414.235020.dcacf50" - } - }, - "Microsoft.IEntityRecognizer": { - "$role": "interface", - "title": "Entity recognizers", - "description": "Components which derive from EntityRecognizer.", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.14.0-daily.20210414.235020.dcacf50" - }, - "oneOf": [ - { - "$ref": "#/definitions/Microsoft.AgeEntityRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.ConfirmationEntityRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.CurrencyEntityRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.DateTimeEntityRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.DimensionEntityRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.EmailEntityRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.GuidEntityRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.HashtagEntityRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.IpEntityRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.MentionEntityRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.NumberEntityRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.NumberRangeEntityRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.OrdinalEntityRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.PercentageEntityRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.PhoneNumberEntityRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.RegexEntityRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.TemperatureEntityRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.UrlEntityRecognizer" - }, - { - "type": "string", - "title": "Reference to Microsoft.IEntityRecognizer", - "description": "Reference to Microsoft.IEntityRecognizer .dialog file." - } - ] - }, - "Microsoft.ILanguageGenerator": { - "title": "Microsoft LanguageGenerator", - "description": "Components which dervie from the LanguageGenerator class", - "$role": "interface", - "oneOf": [ - { - "$ref": "#/definitions/Microsoft.ResourceMultiLanguageGenerator" - }, - { - "$ref": "#/definitions/Microsoft.TemplateEngineLanguageGenerator" - }, - { - "type": "string" - } - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.14.0-daily.20210414.235020.dcacf50" - } - }, - "Microsoft.IRecognizer": { - "title": "Microsoft recognizer", - "description": "Components which derive from Recognizer class", - "$role": "interface", - "oneOf": [ - { - "$ref": "#/definitions/Microsoft.AgeEntityRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.ChannelMentionEntityRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.ConfirmationEntityRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.CrossTrainedRecognizerSet" - }, - { - "$ref": "#/definitions/Microsoft.CurrencyEntityRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.DateTimeEntityRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.DimensionEntityRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.EmailEntityRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.GuidEntityRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.HashtagEntityRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.IpEntityRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.LuisRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.MentionEntityRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.MultiLanguageRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.NumberEntityRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.NumberRangeEntityRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.OrchestratorRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.OrdinalEntityRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.PercentageEntityRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.PhoneNumberEntityRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.QnAMakerRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.RecognizerSet" - }, - { - "$ref": "#/definitions/Microsoft.RegexEntityRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.RegexRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.TemperatureEntityRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.UrlEntityRecognizer" - }, - { - "type": "string" - } - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Declarative", - "version": "4.14.0-daily.20210414.235020.dcacf50" - } - }, - "Microsoft.ITextTemplate": { - "title": "Microsoft TextTemplate", - "description": "Components which derive from TextTemplate class", - "$role": "interface", - "oneOf": [ - { - "$ref": "#/definitions/Microsoft.TextTemplate" - }, - { - "type": "string" - } - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Declarative", - "version": "4.14.0-daily.20210414.235020.dcacf50" - } - }, - "Microsoft.ITrigger": { - "$role": "interface", - "title": "Microsoft Triggers", - "description": "Components which derive from OnCondition class.", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.14.0-daily.20210414.235020.dcacf50" - }, - "oneOf": [ - { - "$ref": "#/definitions/Microsoft.OnActivity" - }, - { - "$ref": "#/definitions/Microsoft.OnAssignEntity" - }, - { - "$ref": "#/definitions/Microsoft.OnBeginDialog" - }, - { - "$ref": "#/definitions/Microsoft.OnCancelDialog" - }, - { - "$ref": "#/definitions/Microsoft.OnChooseEntity" - }, - { - "$ref": "#/definitions/Microsoft.OnChooseIntent" - }, - { - "$ref": "#/definitions/Microsoft.OnChooseProperty" - }, - { - "$ref": "#/definitions/Microsoft.OnCommandActivity" - }, - { - "$ref": "#/definitions/Microsoft.OnCommandResultActivity" - }, - { - "$ref": "#/definitions/Microsoft.OnCondition" - }, - { - "$ref": "#/definitions/Microsoft.OnContinueConversation" - }, - { - "$ref": "#/definitions/Microsoft.OnConversationUpdateActivity" - }, - { - "$ref": "#/definitions/Microsoft.OnDialogEvent" - }, - { - "$ref": "#/definitions/Microsoft.OnEndOfActions" - }, - { - "$ref": "#/definitions/Microsoft.OnEndOfConversationActivity" - }, - { - "$ref": "#/definitions/Microsoft.OnError" - }, - { - "$ref": "#/definitions/Microsoft.OnEventActivity" - }, - { - "$ref": "#/definitions/Microsoft.OnHandoffActivity" - }, - { - "$ref": "#/definitions/Microsoft.OnInstallationUpdateActivity" - }, - { - "$ref": "#/definitions/Microsoft.OnIntent" - }, - { - "$ref": "#/definitions/Microsoft.OnInvokeActivity" - }, - { - "$ref": "#/definitions/Microsoft.OnMessageActivity" - }, - { - "$ref": "#/definitions/Microsoft.OnMessageDeleteActivity" - }, - { - "$ref": "#/definitions/Microsoft.OnMessageReactionActivity" - }, - { - "$ref": "#/definitions/Microsoft.OnMessageUpdateActivity" - }, - { - "$ref": "#/definitions/Microsoft.OnQnAMatch" - }, - { - "$ref": "#/definitions/Microsoft.OnRepromptDialog" - }, - { - "$ref": "#/definitions/Microsoft.OnTypingActivity" - }, - { - "$ref": "#/definitions/Microsoft.OnUnknownIntent" - }, - { - "type": "string", - "title": "Reference to Microsoft.ITrigger", - "description": "Reference to Microsoft.ITrigger .dialog file." - } - ] - }, - "Microsoft.ITriggerSelector": { - "$role": "interface", - "title": "Selectors", - "description": "Components which derive from TriggerSelector class.", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.14.0-daily.20210414.235020.dcacf50" - }, - "oneOf": [ - { - "$ref": "#/definitions/Microsoft.ConditionalSelector" - }, - { - "$ref": "#/definitions/Microsoft.FirstSelector" - }, - { - "$ref": "#/definitions/Microsoft.MostSpecificSelector" - }, - { - "$ref": "#/definitions/Microsoft.RandomSelector" - }, - { - "$ref": "#/definitions/Microsoft.TrueSelector" - }, - { - "type": "string", - "title": "Reference to Microsoft.ITriggerSelector", - "description": "Reference to Microsoft.ITriggerSelector .dialog file." - } - ] - }, - "Microsoft.IfCondition": { - "$role": "implements(Microsoft.IDialog)", - "title": "If condition", - "description": "Two-way branch the conversation flow based on a condition.", - "type": "object", - "required": [ - "condition", - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.14.0-daily.20210414.235020.dcacf50" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the dialog" - }, - "condition": { - "$ref": "#/definitions/condition", - "title": "Condition", - "description": "Expression to evaluate.", - "examples": [ - "user.age > 3" - ] - }, - "disabled": { - "$ref": "#/definitions/booleanExpression", - "title": "Disabled", - "description": "Optional condition which if true will disable this action.", - "examples": [ - true, - "=user.age > 3" - ] - }, - "actions": { - "type": "array", - "title": "Actions", - "description": "Actions to execute if condition is true.", - "items": { - "$kind": "Microsoft.IDialog", - "$ref": "#/definitions/Microsoft.IDialog" - } - }, - "elseActions": { - "type": "array", - "title": "Else", - "description": "Actions to execute if condition is false.", - "items": { - "$kind": "Microsoft.IDialog", - "$ref": "#/definitions/Microsoft.IDialog" - } - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.IfCondition" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.InputDialog": { - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.14.0-daily.20210414.235020.dcacf50" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the dialog" - }, - "disabled": { - "$ref": "#/definitions/booleanExpression", - "title": "Disabled", - "description": "Optional condition which if true will disable this action.", - "default": false, - "examples": [ - false, - "=user.isVip" - ] - }, - "prompt": { - "$kind": "Microsoft.IActivityTemplate", - "title": "Initial prompt", - "description": "Message to send to collect information.", - "examples": [ - "What is your birth date?" - ], - "$ref": "#/definitions/Microsoft.IActivityTemplate" - }, - "unrecognizedPrompt": { - "$kind": "Microsoft.IActivityTemplate", - "title": "Unrecognized prompt", - "description": "Message to send when max turn count (if specified) has been exceeded and the default value is selected as the value.", - "examples": [ - "Sorry, I'm having trouble understanding you. I will just use {this.options.defaultValue} for now. You can say 'I'm 36 years old' to change it." - ], - "$ref": "#/definitions/Microsoft.IActivityTemplate" - }, - "invalidPrompt": { - "$kind": "Microsoft.IActivityTemplate", - "title": "Invalid prompt", - "description": "Message to send when the user input does not meet any validation expression.", - "examples": [ - "Sorry, '{this.value}' does not work. I need a number between 1-150. What is your age?" - ], - "$ref": "#/definitions/Microsoft.IActivityTemplate" - }, - "defaultValueResponse": { - "$kind": "Microsoft.IActivityTemplate", - "title": "Default value response", - "description": "Message to send when max turn count (if specified) has been exceeded and the default value is selected as the value.", - "examples": [ - "Sorry, I'm having trouble understanding you. I will just use {this.options.defaultValue} for now. You can say 'I'm 36 years old' to change it." - ], - "$ref": "#/definitions/Microsoft.IActivityTemplate" - }, - "maxTurnCount": { - "$ref": "#/definitions/integerExpression", - "title": "Max turn count", - "description": "Maximum number of re-prompt attempts to collect information.", - "default": 3, - "minimum": 0, - "maximum": 2147483647, - "examples": [ - 3, - "=settings.xyz" - ] - }, - "validations": { - "type": "array", - "title": "Validation expressions", - "description": "Expression to validate user input.", - "items": { - "$ref": "#/definitions/condition", - "title": "Condition", - "description": "Expression which needs to met for the input to be considered valid", - "examples": [ - "int(this.value) > 1 && int(this.value) <= 150", - "count(this.value) < 300" - ] - } - }, - "property": { - "$ref": "#/definitions/stringExpression", - "title": "Property", - "description": "Property to store collected information. Input will be skipped if property has value (unless 'Always prompt' is true).", - "examples": [ - "$birthday", - "dialog.${user.name}", - "=f(x)" - ] - }, - "alwaysPrompt": { - "$ref": "#/definitions/booleanExpression", - "title": "Always prompt", - "description": "Collect information even if the specified 'property' is not empty.", - "default": false, - "examples": [ - false, - "=$val" - ] - }, - "allowInterruptions": { - "$ref": "#/definitions/booleanExpression", - "title": "Allow Interruptions", - "description": "A boolean expression that determines whether the parent should be allowed to interrupt the input.", - "default": true, - "examples": [ - true, - "=user.xyz" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.InputDialog" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.IpEntityRecognizer": { - "$role": [ - "implements(Microsoft.IRecognizer)", - "implements(Microsoft.IEntityRecognizer)" - ], - "title": "IP entity recognizer", - "description": "Recognizer which recognizes internet IP patterns (like 192.1.1.1).", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.14.0-daily.20210414.235020.dcacf50" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.IpEntityRecognizer" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.LanguagePolicy": { - "title": "Language policy", - "description": "This represents a policy map for locales lookups to use for language", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.14.0-daily.20210414.235020.dcacf50" - }, - "required": [ - "$kind" - ], - "additionalProperties": { - "type": "array", - "title": "Per-locale policy", - "description": "Language policy per locale.", - "items": { - "type": "string", - "title": "Locale", - "description": "Locale like en-us." - } - }, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.LanguagePolicy" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.LogAction": { - "$role": "implements(Microsoft.IDialog)", - "title": "Log to console", - "description": "Log a message to the host application. Send a TraceActivity to Bot Framework Emulator (optional).", - "type": "object", - "required": [ - "text", - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.14.0-daily.20210414.235020.dcacf50" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the dialog" - }, - "disabled": { - "$ref": "#/definitions/booleanExpression", - "title": "Disabled", - "description": "Optional condition which if true will disable this action.", - "examples": [ - true, - "=user.age > 3" - ] - }, - "text": { - "$kind": "Microsoft.IActivityTemplate", - "title": "Text", - "description": "Information to log.", - "$ref": "#/definitions/Microsoft.IActivityTemplate" - }, - "label": { - "$ref": "#/definitions/stringExpression", - "title": "Label", - "description": "Label for the trace activity (used to identify it in a list of trace activities.)" - }, - "traceActivity": { - "$ref": "#/definitions/booleanExpression", - "title": "Send trace activity", - "description": "If true, automatically sends a TraceActivity (view in Bot Framework Emulator)." - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.LogAction" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.LuisRecognizer": { - "$role": "implements(Microsoft.IRecognizer)", - "title": "LUIS Recognizer", - "description": "LUIS recognizer.", - "type": "object", - "required": [ - "applicationId", - "endpoint", - "endpointKey", - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.AI.Luis", - "version": "4.13.0" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional unique id using with RecognizerSet. Other recognizers should return 'DeferToRecognizer_{Id}' intent when cross training data for this recognizer." - }, - "applicationId": { - "$ref": "#/definitions/stringExpression", - "title": "LUIS application id", - "description": "Application ID for your model from the LUIS service." - }, - "version": { - "$ref": "#/definitions/stringExpression", - "title": "LUIS version", - "description": "Optional version to target. If null then predictionOptions.Slot is used." - }, - "endpoint": { - "$ref": "#/definitions/stringExpression", - "title": "LUIS endpoint", - "description": "Endpoint to use for LUIS service like https://westus.api.cognitive.microsoft.com." - }, - "endpointKey": { - "$ref": "#/definitions/stringExpression", - "title": "LUIS prediction key", - "description": "LUIS prediction key used to call endpoint." - }, - "externalEntityRecognizer": { - "$kind": "Microsoft.IRecognizer", - "title": "External entity recognizer", - "description": "Entities recognized by this recognizer will be passed to LUIS as external entities.", - "$ref": "#/definitions/Microsoft.IRecognizer" - }, - "dynamicLists": { - "$ref": "#/definitions/arrayExpression", - "title": "Dynamic lists", - "description": "Runtime defined entity lists.", - "items": { - "title": "Entity list", - "description": "Lists of canonical values and synonyms for an entity.", - "type": "object", - "properties": { - "entity": { - "title": "Entity", - "description": "Entity to extend with a dynamic list.", - "type": "string" - }, - "list": { - "title": "Dynamic list", - "description": "List of canonical forms and synonyms.", - "type": "array", - "items": { - "type": "object", - "title": "List entry", - "description": "Canonical form and synonynms.", - "properties": { - "canonicalForm": { - "title": "Canonical form", - "description": "Resolution if any synonym matches.", - "type": "string" - }, - "synonyms": { - "title": "Synonyms", - "description": "List of synonyms for a canonical form.", - "type": "array", - "items": { - "title": "Synonym", - "description": "Synonym for canonical form.", - "type": "string" - } - } - } - } - } - } - } - }, - "predictionOptions": { - "type": "object", - "title": "Prediction options", - "description": "Options to control LUIS prediction behavior.", - "properties": { - "includeAllIntents": { - "$ref": "#/definitions/booleanExpression", - "title": "Include all intents", - "description": "True for all intents, false for only top intent." - }, - "includeInstanceData": { - "$ref": "#/definitions/booleanExpression", - "title": "Include $instance", - "description": "True to include $instance metadata in the LUIS response." - }, - "log": { - "$ref": "#/definitions/booleanExpression", - "title": "Log utterances", - "description": "True to log utterances on LUIS service." - }, - "preferExternalEntities": { - "$ref": "#/definitions/booleanExpression", - "title": "Prefer external entities", - "description": "True to prefer external entities to those generated by LUIS models." - }, - "slot": { - "$ref": "#/definitions/stringExpression", - "title": "Slot", - "description": "Slot to use for talking to LUIS service like production or staging." - } - } - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.LuisRecognizer" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.MentionEntityRecognizer": { - "$role": [ - "implements(Microsoft.IRecognizer)", - "implements(Microsoft.IEntityRecognizer)" - ], - "title": "Mentions entity recognizer", - "description": "Recognizer which recognizes @Mentions", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.14.0-daily.20210414.235020.dcacf50" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.MentionEntityRecognizer" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.MostSpecificSelector": { - "$role": "implements(Microsoft.ITriggerSelector)", - "title": "Most specific trigger selector", - "description": "Select most specific true events with optional additional selector", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.14.0-daily.20210414.235020.dcacf50" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "selector": { - "$kind": "Microsoft.ITriggerSelector", - "$ref": "#/definitions/Microsoft.ITriggerSelector" - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.MostSpecificSelector" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.MultiLanguageRecognizer": { - "$role": "implements(Microsoft.IRecognizer)", - "title": "Multi-language recognizer", - "description": "Configure one recognizer per language and the specify the language fallback policy.", - "type": "object", - "required": [ - "recognizers", - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.14.0-daily.20210414.235020.dcacf50" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional unique id using with RecognizerSet. Other recognizers should return 'DeferToRecognizer_{Id}' intent when cross training data for this recognizer." - }, - "languagePolicy": { - "$kind": "Microsoft.LanguagePolicy", - "type": "object", - "title": "Language policy", - "description": "Defines fall back languages to try per user input language.", - "$ref": "#/definitions/Microsoft.LanguagePolicy" - }, - "recognizers": { - "type": "object", - "title": "Recognizers", - "description": "Map of language -> Recognizer", - "additionalProperties": { - "$kind": "Microsoft.IRecognizer", - "$ref": "#/definitions/Microsoft.IRecognizer" - } - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.MultiLanguageRecognizer" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.NumberEntityRecognizer": { - "$role": [ - "implements(Microsoft.IRecognizer)", - "implements(Microsoft.IEntityRecognizer)" - ], - "title": "Number entity recognizer", - "description": "Recognizer which recognizes numbers.", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.14.0-daily.20210414.235020.dcacf50" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.NumberEntityRecognizer" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.NumberInput": { - "$role": [ - "implements(Microsoft.IDialog)", - "extends(Microsoft.InputDialog)" - ], - "title": "Number input dialog", - "description": "Collect information - Ask for a number.", - "type": "object", - "$policies": { - "interactive": true - }, - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.14.0-daily.20210414.235020.dcacf50" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "defaultValue": { - "$ref": "#/definitions/numberExpression", - "title": "Default value", - "description": "'Property' will be set to the value of this expression when max turn count is exceeded.", - "examples": [ - 13, - "=user.age" - ] - }, - "value": { - "$ref": "#/definitions/numberExpression", - "title": "Value", - "description": "'Property' will be set to the value of this expression unless it evaluates to null.", - "examples": [ - 13, - "=user.age" - ] - }, - "outputFormat": { - "$ref": "#/definitions/expression", - "title": "Output format", - "description": "Expression to format the number output.", - "examples": [ - "=this.value", - "=int(this.text)" - ] - }, - "defaultLocale": { - "$ref": "#/definitions/stringExpression", - "title": "Default locale", - "description": "Default locale to use if there is no locale available..", - "default": "en-us" - }, - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the dialog" - }, - "disabled": { - "$ref": "#/definitions/booleanExpression", - "title": "Disabled", - "description": "Optional condition which if true will disable this action.", - "default": false, - "examples": [ - false, - "=user.isVip" - ] - }, - "prompt": { - "$kind": "Microsoft.IActivityTemplate", - "title": "Initial prompt", - "description": "Message to send to collect information.", - "examples": [ - "What is your birth date?" - ], - "$ref": "#/definitions/Microsoft.IActivityTemplate" - }, - "unrecognizedPrompt": { - "$kind": "Microsoft.IActivityTemplate", - "title": "Unrecognized prompt", - "description": "Message to send when max turn count (if specified) has been exceeded and the default value is selected as the value.", - "examples": [ - "Sorry, I'm having trouble understanding you. I will just use {this.options.defaultValue} for now. You can say 'I'm 36 years old' to change it." - ], - "$ref": "#/definitions/Microsoft.IActivityTemplate" - }, - "invalidPrompt": { - "$kind": "Microsoft.IActivityTemplate", - "title": "Invalid prompt", - "description": "Message to send when the user input does not meet any validation expression.", - "examples": [ - "Sorry, '{this.value}' does not work. I need a number between 1-150. What is your age?" - ], - "$ref": "#/definitions/Microsoft.IActivityTemplate" - }, - "defaultValueResponse": { - "$kind": "Microsoft.IActivityTemplate", - "title": "Default value response", - "description": "Message to send when max turn count (if specified) has been exceeded and the default value is selected as the value.", - "examples": [ - "Sorry, I'm having trouble understanding you. I will just use {this.options.defaultValue} for now. You can say 'I'm 36 years old' to change it." - ], - "$ref": "#/definitions/Microsoft.IActivityTemplate" - }, - "maxTurnCount": { - "$ref": "#/definitions/integerExpression", - "title": "Max turn count", - "description": "Maximum number of re-prompt attempts to collect information.", - "default": 3, - "minimum": 0, - "maximum": 2147483647, - "examples": [ - 3, - "=settings.xyz" - ] - }, - "validations": { - "type": "array", - "title": "Validation expressions", - "description": "Expression to validate user input.", - "items": { - "$ref": "#/definitions/condition", - "title": "Condition", - "description": "Expression which needs to met for the input to be considered valid", - "examples": [ - "int(this.value) > 1 && int(this.value) <= 150", - "count(this.value) < 300" - ] - } - }, - "property": { - "$ref": "#/definitions/stringExpression", - "title": "Property", - "description": "Property to store collected information. Input will be skipped if property has value (unless 'Always prompt' is true).", - "examples": [ - "$birthday", - "dialog.${user.name}", - "=f(x)" - ] - }, - "alwaysPrompt": { - "$ref": "#/definitions/booleanExpression", - "title": "Always prompt", - "description": "Collect information even if the specified 'property' is not empty.", - "default": false, - "examples": [ - false, - "=$val" - ] - }, - "allowInterruptions": { - "$ref": "#/definitions/booleanExpression", - "title": "Allow Interruptions", - "description": "A boolean expression that determines whether the parent should be allowed to interrupt the input.", - "default": true, - "examples": [ - true, - "=user.xyz" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.NumberInput" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.NumberRangeEntityRecognizer": { - "$role": [ - "implements(Microsoft.IRecognizer)", - "implements(Microsoft.IEntityRecognizer)" - ], - "title": "Number range entity recognizer", - "description": "Recognizer which recognizes ranges of numbers (Example:2 to 5).", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.14.0-daily.20210414.235020.dcacf50" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.NumberRangeEntityRecognizer" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.OAuthInput": { - "$role": "implements(Microsoft.IDialog)", - "title": "OAuthInput Dialog", - "description": "Collect login information before each request.", - "type": "object", - "required": [ - "connectionName", - "$kind" - ], - "$policies": { - "interactive": true - }, - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.14.0-daily.20210414.235020.dcacf50" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "connectionName": { - "$ref": "#/definitions/stringExpression", - "title": "Connection name", - "description": "The connection name configured in Azure Web App Bot OAuth settings.", - "examples": [ - "msgraphOAuthConnection" - ] - }, - "disabled": { - "$ref": "#/definitions/booleanExpression", - "title": "Disabled", - "description": "Optional condition which if true will disable this action.", - "examples": [ - true, - "=user.age > 3" - ] - }, - "text": { - "$ref": "#/definitions/stringExpression", - "title": "Text", - "description": "Text shown in the OAuth signin card.", - "examples": [ - "Please sign in. ", - "=concat(x,y,z)" - ] - }, - "title": { - "$ref": "#/definitions/stringExpression", - "title": "Title", - "description": "Title shown in the OAuth signin card.", - "examples": [ - "Login" - ] - }, - "timeout": { - "$ref": "#/definitions/integerExpression", - "title": "Timeout", - "description": "Time out setting for the OAuth signin card.", - "default": 900000 - }, - "property": { - "$ref": "#/definitions/stringExpression", - "title": "Token property", - "description": "Property to store the OAuth token result. WARNING: Changing this location is not recommended as you should call OAuthInput immediately before each use of the token.", - "default": "turn.token", - "examples": [ - "dialog.token" - ] - }, - "invalidPrompt": { - "$kind": "Microsoft.IActivityTemplate", - "title": "Invalid prompt", - "description": "Message to send if user response is invalid.", - "examples": [ - "Sorry, the login info you provided is not valid." - ], - "$ref": "#/definitions/Microsoft.IActivityTemplate" - }, - "defaultValueResponse": { - "$kind": "Microsoft.IActivityTemplate", - "title": "Default value response", - "description": "Message to send when max turn count (if specified) has been exceeded and the default value is selected as the value.", - "examples": [ - "Login failed." - ], - "$ref": "#/definitions/Microsoft.IActivityTemplate" - }, - "maxTurnCount": { - "$ref": "#/definitions/integerExpression", - "title": "Max turn count", - "description": "Maximum number of re-prompt attempts to collect information.", - "default": 3, - "examples": [ - 3 - ] - }, - "defaultValue": { - "$ref": "#/definitions/expression", - "title": "Default value", - "description": "Expression to examine on each turn of the conversation as possible value to the property.", - "examples": [ - "@token" - ] - }, - "allowInterruptions": { - "$ref": "#/definitions/booleanExpression", - "title": "Allow interruptions", - "description": "A boolean expression that determines whether the parent should be allowed to interrupt the input.", - "default": true, - "examples": [ - true, - "=f(x)" - ] - }, - "alwaysPrompt": { - "$ref": "#/definitions/booleanExpression", - "title": "Always prompt", - "description": "Collect information even if the specified 'property' is not empty.", - "examples": [ - true, - "=f(x)" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.OAuthInput" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.OnActivity": { - "$role": [ - "implements(Microsoft.ITrigger)", - "extends(Microsoft.OnCondition)" - ], - "title": "On activity", - "description": "Actions to perform on receipt of a generic activity.", - "type": "object", - "required": [ - "type", - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.14.0-daily.20210414.235020.dcacf50" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "type": { - "type": "string", - "title": "Activity type", - "description": "The Activity.Type to match" - }, - "condition": { - "$ref": "#/definitions/condition", - "title": "Condition", - "description": "Condition (expression).", - "examples": [ - "user.vip == true" - ] - }, - "actions": { - "type": "array", - "title": "Actions", - "description": "Sequence of actions to execute.", - "items": { - "$kind": "Microsoft.IDialog", - "$ref": "#/definitions/Microsoft.IDialog" - } - }, - "priority": { - "$ref": "#/definitions/numberExpression", - "title": "Priority", - "description": "Priority for trigger with 0 being the highest and < 0 ignored." - }, - "runOnce": { - "$ref": "#/definitions/booleanExpression", - "title": "Run Once", - "description": "True if rule should run once per unique conditions", - "examples": [ - true, - "=f(x)" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.OnActivity" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.OnAssignEntity": { - "$role": [ - "implements(Microsoft.ITrigger)", - "extends(Microsoft.OnCondition)" - ], - "title": "On entity assignment", - "description": "Actions to apply an operation on a property and value.", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.14.0-daily.20210414.235020.dcacf50" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "operation": { - "type": "string", - "title": "Operation", - "description": "Operation filter on event." - }, - "property": { - "type": "string", - "title": "Property", - "description": "Property filter on event." - }, - "value": { - "type": "string", - "title": "Value", - "description": "Value filter on event." - }, - "condition": { - "$ref": "#/definitions/condition", - "title": "Condition", - "description": "Condition (expression).", - "examples": [ - "user.vip == true" - ] - }, - "actions": { - "type": "array", - "title": "Actions", - "description": "Sequence of actions to execute.", - "items": { - "$kind": "Microsoft.IDialog", - "$ref": "#/definitions/Microsoft.IDialog" - } - }, - "priority": { - "$ref": "#/definitions/numberExpression", - "title": "Priority", - "description": "Priority for trigger with 0 being the highest and < 0 ignored." - }, - "runOnce": { - "$ref": "#/definitions/booleanExpression", - "title": "Run Once", - "description": "True if rule should run once per unique conditions", - "examples": [ - true, - "=f(x)" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.OnAssignEntity" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.OnBeginDialog": { - "$role": [ - "implements(Microsoft.ITrigger)", - "extends(Microsoft.OnCondition)" - ], - "title": "On begin dialog", - "description": "Actions to perform when this dialog begins.", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.14.0-daily.20210414.235020.dcacf50" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "condition": { - "$ref": "#/definitions/condition", - "title": "Condition", - "description": "Condition (expression).", - "examples": [ - "user.vip == true" - ] - }, - "actions": { - "type": "array", - "title": "Actions", - "description": "Sequence of actions to execute.", - "items": { - "$kind": "Microsoft.IDialog", - "$ref": "#/definitions/Microsoft.IDialog" - } - }, - "priority": { - "$ref": "#/definitions/numberExpression", - "title": "Priority", - "description": "Priority for trigger with 0 being the highest and < 0 ignored." - }, - "runOnce": { - "$ref": "#/definitions/booleanExpression", - "title": "Run Once", - "description": "True if rule should run once per unique conditions", - "examples": [ - true, - "=f(x)" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.OnBeginDialog" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.OnCancelDialog": { - "$role": [ - "implements(Microsoft.ITrigger)", - "extends(Microsoft.OnCondition)" - ], - "title": "On cancel dialog", - "description": "Actions to perform on cancel dialog event.", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.14.0-daily.20210414.235020.dcacf50" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "condition": { - "$ref": "#/definitions/condition", - "title": "Condition", - "description": "Condition (expression).", - "examples": [ - "user.vip == true" - ] - }, - "actions": { - "type": "array", - "title": "Actions", - "description": "Sequence of actions to execute.", - "items": { - "$kind": "Microsoft.IDialog", - "$ref": "#/definitions/Microsoft.IDialog" - } - }, - "priority": { - "$ref": "#/definitions/numberExpression", - "title": "Priority", - "description": "Priority for trigger with 0 being the highest and < 0 ignored." - }, - "runOnce": { - "$ref": "#/definitions/booleanExpression", - "title": "Run Once", - "description": "True if rule should run once per unique conditions", - "examples": [ - true, - "=f(x)" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.OnCancelDialog" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.OnChooseEntity": { - "$role": [ - "implements(Microsoft.ITrigger)", - "extends(Microsoft.OnCondition)" - ], - "title": "On choose entity", - "description": "Actions to be performed when value is ambiguous for operator and property.", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.14.0-daily.20210414.235020.dcacf50" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "operation": { - "type": "string", - "title": "Operation", - "description": "Operation filter on event." - }, - "property": { - "type": "string", - "title": "Property", - "description": "Property filter on event." - }, - "value": { - "type": "string", - "title": "Ambiguous value", - "description": "Ambiguous value filter on event." - }, - "condition": { - "$ref": "#/definitions/condition", - "title": "Condition", - "description": "Condition (expression).", - "examples": [ - "user.vip == true" - ] - }, - "actions": { - "type": "array", - "title": "Actions", - "description": "Sequence of actions to execute.", - "items": { - "$kind": "Microsoft.IDialog", - "$ref": "#/definitions/Microsoft.IDialog" - } - }, - "priority": { - "$ref": "#/definitions/numberExpression", - "title": "Priority", - "description": "Priority for trigger with 0 being the highest and < 0 ignored." - }, - "runOnce": { - "$ref": "#/definitions/booleanExpression", - "title": "Run Once", - "description": "True if rule should run once per unique conditions", - "examples": [ - true, - "=f(x)" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.OnChooseEntity" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.OnChooseIntent": { - "$role": [ - "implements(Microsoft.ITrigger)", - "extends(Microsoft.OnCondition)" - ], - "title": "On ambiguous intent", - "description": "Actions to perform on when an intent is ambiguous.", - "type": "object", - "required": [ - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.14.0-daily.20210414.235020.dcacf50" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "intents": { - "type": "array", - "title": "Intents", - "description": "Intents that must be in the ChooseIntent result for this condition to trigger.", - "items": { - "title": "Intent", - "description": "Intent name to trigger on.", - "type": "string" - } - }, - "condition": { - "$ref": "#/definitions/condition", - "title": "Condition", - "description": "Condition (expression).", - "examples": [ - "user.vip == true" - ] - }, - "actions": { - "type": "array", - "title": "Actions", - "description": "Sequence of actions to execute.", - "items": { - "$kind": "Microsoft.IDialog", - "$ref": "#/definitions/Microsoft.IDialog" - } - }, - "priority": { - "$ref": "#/definitions/numberExpression", - "title": "Priority", - "description": "Priority for trigger with 0 being the highest and < 0 ignored." - }, - "runOnce": { - "$ref": "#/definitions/booleanExpression", - "title": "Run Once", - "description": "True if rule should run once per unique conditions", - "examples": [ - true, - "=f(x)" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.OnChooseIntent" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.OnChooseProperty": { - "$role": [ - "implements(Microsoft.ITrigger)", - "extends(Microsoft.OnCondition)" - ], - "title": "On choose property", - "description": "Actions to take when there are multiple possible mappings of entities to properties and operations.", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.14.0-daily.20210414.235020.dcacf50" - }, - "type": "object", - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "condition": { - "$ref": "#/definitions/condition", - "title": "Condition", - "description": "Condition (expression).", - "examples": [ - "user.vip == true" - ] - }, - "actions": { - "type": "array", - "title": "Actions", - "description": "Sequence of actions to execute.", - "items": { - "$kind": "Microsoft.IDialog", - "$ref": "#/definitions/Microsoft.IDialog" - } - }, - "priority": { - "$ref": "#/definitions/numberExpression", - "title": "Priority", - "description": "Priority for trigger with 0 being the highest and < 0 ignored." - }, - "runOnce": { - "$ref": "#/definitions/booleanExpression", - "title": "Run Once", - "description": "True if rule should run once per unique conditions", - "examples": [ - true, - "=f(x)" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.OnChooseProperty" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.OnCommandActivity": { - "$role": [ - "implements(Microsoft.ITrigger)", - "extends(Microsoft.OnCondition)" - ], - "title": "On Command activity", - "description": "Actions to perform on receipt of an activity with type 'Command'. Overrides Intent trigger.", - "type": "object", - "required": [ - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.14.0-daily.20210414.235020.dcacf50" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "condition": { - "$ref": "#/definitions/condition", - "title": "Condition", - "description": "Condition (expression).", - "examples": [ - "user.vip == true" - ] - }, - "actions": { - "type": "array", - "title": "Actions", - "description": "Sequence of actions to execute.", - "items": { - "$kind": "Microsoft.IDialog", - "$ref": "#/definitions/Microsoft.IDialog" - } - }, - "priority": { - "$ref": "#/definitions/numberExpression", - "title": "Priority", - "description": "Priority for trigger with 0 being the highest and < 0 ignored." - }, - "runOnce": { - "$ref": "#/definitions/booleanExpression", - "title": "Run Once", - "description": "True if rule should run once per unique conditions", - "examples": [ - true, - "=f(x)" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.OnCommandActivity" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.OnCommandResultActivity": { - "$role": [ - "implements(Microsoft.ITrigger)", - "extends(Microsoft.OnCondition)" - ], - "title": "On Command Result activity", - "description": "Actions to perform on receipt of an activity with type 'CommandResult'. Overrides Intent trigger.", - "type": "object", - "required": [ - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.14.0-daily.20210414.235020.dcacf50" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "condition": { - "$ref": "#/definitions/condition", - "title": "Condition", - "description": "Condition (expression).", - "examples": [ - "user.vip == true" - ] - }, - "actions": { - "type": "array", - "title": "Actions", - "description": "Sequence of actions to execute.", - "items": { - "$kind": "Microsoft.IDialog", - "$ref": "#/definitions/Microsoft.IDialog" - } - }, - "priority": { - "$ref": "#/definitions/numberExpression", - "title": "Priority", - "description": "Priority for trigger with 0 being the highest and < 0 ignored." - }, - "runOnce": { - "$ref": "#/definitions/booleanExpression", - "title": "Run Once", - "description": "True if rule should run once per unique conditions", - "examples": [ - true, - "=f(x)" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.OnCommandResultActivity" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.OnCondition": { - "$role": "implements(Microsoft.ITrigger)", - "title": "On condition", - "description": "Actions to perform when specified condition is true.", - "type": "object", - "required": [ - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.14.0-daily.20210414.235020.dcacf50" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "condition": { - "$ref": "#/definitions/condition", - "title": "Condition", - "description": "Condition (expression).", - "examples": [ - "user.vip == true" - ] - }, - "actions": { - "type": "array", - "title": "Actions", - "description": "Sequence of actions to execute.", - "items": { - "$kind": "Microsoft.IDialog", - "$ref": "#/definitions/Microsoft.IDialog" - } - }, - "priority": { - "$ref": "#/definitions/numberExpression", - "title": "Priority", - "description": "Priority for trigger with 0 being the highest and < 0 ignored." - }, - "runOnce": { - "$ref": "#/definitions/booleanExpression", - "title": "Run Once", - "description": "True if rule should run once per unique conditions", - "examples": [ - true, - "=f(x)" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.OnCondition" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.OnContinueConversation": { - "$role": [ - "implements(Microsoft.ITrigger)", - "extends(Microsoft.OnCondition)" - ], - "title": "On continue conversation", - "description": "Actions to perform when a conversation is started up again from a ContinueConversationLater action.", - "type": "object", - "required": [ - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.14.0-daily.20210414.235020.dcacf50" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "condition": { - "$ref": "#/definitions/condition", - "title": "Condition", - "description": "Condition (expression).", - "examples": [ - "user.vip == true" - ] - }, - "actions": { - "type": "array", - "title": "Actions", - "description": "Sequence of actions to execute.", - "items": { - "$kind": "Microsoft.IDialog", - "$ref": "#/definitions/Microsoft.IDialog" - } - }, - "priority": { - "$ref": "#/definitions/numberExpression", - "title": "Priority", - "description": "Priority for trigger with 0 being the highest and < 0 ignored." - }, - "runOnce": { - "$ref": "#/definitions/booleanExpression", - "title": "Run Once", - "description": "True if rule should run once per unique conditions", - "examples": [ - true, - "=f(x)" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.OnContinueConversation" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.OnConversationUpdateActivity": { - "$role": [ - "implements(Microsoft.ITrigger)", - "extends(Microsoft.OnCondition)" - ], - "title": "On ConversationUpdate activity", - "description": "Actions to perform on receipt of an activity with type 'ConversationUpdate'.", - "type": "object", - "required": [ - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.14.0-daily.20210414.235020.dcacf50" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "condition": { - "$ref": "#/definitions/condition", - "title": "Condition", - "description": "Condition (expression).", - "examples": [ - "user.vip == true" - ] - }, - "actions": { - "type": "array", - "title": "Actions", - "description": "Sequence of actions to execute.", - "items": { - "$kind": "Microsoft.IDialog", - "$ref": "#/definitions/Microsoft.IDialog" - } - }, - "priority": { - "$ref": "#/definitions/numberExpression", - "title": "Priority", - "description": "Priority for trigger with 0 being the highest and < 0 ignored." - }, - "runOnce": { - "$ref": "#/definitions/booleanExpression", - "title": "Run Once", - "description": "True if rule should run once per unique conditions", - "examples": [ - true, - "=f(x)" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.OnConversationUpdateActivity" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.OnDialogEvent": { - "$role": [ - "implements(Microsoft.ITrigger)", - "extends(Microsoft.OnCondition)" - ], - "title": "On dialog event", - "description": "Actions to perform when a specific dialog event occurs.", - "type": "object", - "required": [ - "event", - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.14.0-daily.20210414.235020.dcacf50" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "event": { - "type": "string", - "title": "Dialog event name", - "description": "Name of dialog event." - }, - "condition": { - "$ref": "#/definitions/condition", - "title": "Condition", - "description": "Condition (expression).", - "examples": [ - "user.vip == true" - ] - }, - "actions": { - "type": "array", - "title": "Actions", - "description": "Sequence of actions to execute.", - "items": { - "$kind": "Microsoft.IDialog", - "$ref": "#/definitions/Microsoft.IDialog" - } - }, - "priority": { - "$ref": "#/definitions/numberExpression", - "title": "Priority", - "description": "Priority for trigger with 0 being the highest and < 0 ignored." - }, - "runOnce": { - "$ref": "#/definitions/booleanExpression", - "title": "Run Once", - "description": "True if rule should run once per unique conditions", - "examples": [ - true, - "=f(x)" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.OnDialogEvent" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.OnEndOfActions": { - "$role": [ - "implements(Microsoft.ITrigger)", - "extends(Microsoft.OnCondition)" - ], - "title": "On end of actions", - "description": "Actions to take when there are no more actions in the current dialog.", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.14.0-daily.20210414.235020.dcacf50" - }, - "type": "object", - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "condition": { - "$ref": "#/definitions/condition", - "title": "Condition", - "description": "Condition (expression).", - "examples": [ - "user.vip == true" - ] - }, - "actions": { - "type": "array", - "title": "Actions", - "description": "Sequence of actions to execute.", - "items": { - "$kind": "Microsoft.IDialog", - "$ref": "#/definitions/Microsoft.IDialog" - } - }, - "priority": { - "$ref": "#/definitions/numberExpression", - "title": "Priority", - "description": "Priority for trigger with 0 being the highest and < 0 ignored." - }, - "runOnce": { - "$ref": "#/definitions/booleanExpression", - "title": "Run Once", - "description": "True if rule should run once per unique conditions", - "examples": [ - true, - "=f(x)" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.OnEndOfActions" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.OnEndOfConversationActivity": { - "$role": [ - "implements(Microsoft.ITrigger)", - "extends(Microsoft.OnCondition)" - ], - "title": "On EndOfConversation activity", - "description": "Actions to perform on receipt of an activity with type 'EndOfConversation'.", - "type": "object", - "required": [ - "$kind" - ], - "$policies": { - "nonInteractive": true - }, - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.14.0-daily.20210414.235020.dcacf50" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "condition": { - "$ref": "#/definitions/condition", - "title": "Condition", - "description": "Condition (expression).", - "examples": [ - "user.vip == true" - ] - }, - "actions": { - "type": "array", - "title": "Actions", - "description": "Sequence of actions to execute.", - "items": { - "$kind": "Microsoft.IDialog", - "$ref": "#/definitions/Microsoft.IDialog" - } - }, - "priority": { - "$ref": "#/definitions/numberExpression", - "title": "Priority", - "description": "Priority for trigger with 0 being the highest and < 0 ignored." - }, - "runOnce": { - "$ref": "#/definitions/booleanExpression", - "title": "Run Once", - "description": "True if rule should run once per unique conditions", - "examples": [ - true, - "=f(x)" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.OnEndOfConversationActivity" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.OnError": { - "$role": [ - "implements(Microsoft.ITrigger)", - "extends(Microsoft.OnCondition)" - ], - "title": "On error", - "description": "Action to perform when an 'Error' dialog event occurs.", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.14.0-daily.20210414.235020.dcacf50" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "condition": { - "$ref": "#/definitions/condition", - "title": "Condition", - "description": "Condition (expression).", - "examples": [ - "user.vip == true" - ] - }, - "actions": { - "type": "array", - "title": "Actions", - "description": "Sequence of actions to execute.", - "items": { - "$kind": "Microsoft.IDialog", - "$ref": "#/definitions/Microsoft.IDialog" - } - }, - "priority": { - "$ref": "#/definitions/numberExpression", - "title": "Priority", - "description": "Priority for trigger with 0 being the highest and < 0 ignored." - }, - "runOnce": { - "$ref": "#/definitions/booleanExpression", - "title": "Run Once", - "description": "True if rule should run once per unique conditions", - "examples": [ - true, - "=f(x)" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.OnError" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.OnEventActivity": { - "$role": [ - "implements(Microsoft.ITrigger)", - "extends(Microsoft.OnCondition)" - ], - "title": "On Event activity", - "description": "Actions to perform on receipt of an activity with type 'Event'.", - "type": "object", - "required": [ - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.14.0-daily.20210414.235020.dcacf50" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "condition": { - "$ref": "#/definitions/condition", - "title": "Condition", - "description": "Condition (expression).", - "examples": [ - "user.vip == true" - ] - }, - "actions": { - "type": "array", - "title": "Actions", - "description": "Sequence of actions to execute.", - "items": { - "$kind": "Microsoft.IDialog", - "$ref": "#/definitions/Microsoft.IDialog" - } - }, - "priority": { - "$ref": "#/definitions/numberExpression", - "title": "Priority", - "description": "Priority for trigger with 0 being the highest and < 0 ignored." - }, - "runOnce": { - "$ref": "#/definitions/booleanExpression", - "title": "Run Once", - "description": "True if rule should run once per unique conditions", - "examples": [ - true, - "=f(x)" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.OnEventActivity" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.OnHandoffActivity": { - "$role": [ - "implements(Microsoft.ITrigger)", - "extends(Microsoft.OnCondition)" - ], - "title": "On Handoff activity", - "description": "Actions to perform on receipt of an activity with type 'HandOff'.", - "type": "object", - "required": [ - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.14.0-daily.20210414.235020.dcacf50" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "condition": { - "$ref": "#/definitions/condition", - "title": "Condition", - "description": "Condition (expression).", - "examples": [ - "user.vip == true" - ] - }, - "actions": { - "type": "array", - "title": "Actions", - "description": "Sequence of actions to execute.", - "items": { - "$kind": "Microsoft.IDialog", - "$ref": "#/definitions/Microsoft.IDialog" - } - }, - "priority": { - "$ref": "#/definitions/numberExpression", - "title": "Priority", - "description": "Priority for trigger with 0 being the highest and < 0 ignored." - }, - "runOnce": { - "$ref": "#/definitions/booleanExpression", - "title": "Run Once", - "description": "True if rule should run once per unique conditions", - "examples": [ - true, - "=f(x)" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.OnHandoffActivity" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.OnInstallationUpdateActivity": { - "$role": [ - "implements(Microsoft.ITrigger)", - "extends(Microsoft.OnCondition)" - ], - "title": "On InstallationUpdate activity", - "description": "Actions to perform on receipt of an activity with type 'InstallationUpdate'.", - "type": "object", - "required": [ - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.14.0-daily.20210414.235020.dcacf50" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "condition": { - "$ref": "#/definitions/condition", - "title": "Condition", - "description": "Condition (expression).", - "examples": [ - "user.vip == true" - ] - }, - "actions": { - "type": "array", - "title": "Actions", - "description": "Sequence of actions to execute.", - "items": { - "$kind": "Microsoft.IDialog", - "$ref": "#/definitions/Microsoft.IDialog" - } - }, - "priority": { - "$ref": "#/definitions/numberExpression", - "title": "Priority", - "description": "Priority for trigger with 0 being the highest and < 0 ignored." - }, - "runOnce": { - "$ref": "#/definitions/booleanExpression", - "title": "Run Once", - "description": "True if rule should run once per unique conditions", - "examples": [ - true, - "=f(x)" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.OnInstallationUpdateActivity" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.OnIntent": { - "$role": [ - "implements(Microsoft.ITrigger)", - "extends(Microsoft.OnCondition)" - ], - "title": "On intent recognition", - "description": "Actions to perform when specified intent is recognized.", - "type": "object", - "required": [ - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.14.0-daily.20210414.235020.dcacf50" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "intent": { - "type": "string", - "title": "Intent", - "description": "Name of intent." - }, - "entities": { - "type": "array", - "title": "Entities", - "description": "Required entities.", - "items": { - "type": "string", - "title": "Entity", - "description": "Entity that must be present." - } - }, - "condition": { - "$ref": "#/definitions/condition", - "title": "Condition", - "description": "Condition (expression).", - "examples": [ - "user.vip == true" - ] - }, - "actions": { - "type": "array", - "title": "Actions", - "description": "Sequence of actions to execute.", - "items": { - "$kind": "Microsoft.IDialog", - "$ref": "#/definitions/Microsoft.IDialog" - } - }, - "priority": { - "$ref": "#/definitions/numberExpression", - "title": "Priority", - "description": "Priority for trigger with 0 being the highest and < 0 ignored." - }, - "runOnce": { - "$ref": "#/definitions/booleanExpression", - "title": "Run Once", - "description": "True if rule should run once per unique conditions", - "examples": [ - true, - "=f(x)" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.OnIntent" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.OnInvokeActivity": { - "$role": [ - "implements(Microsoft.ITrigger)", - "extends(Microsoft.OnCondition)" - ], - "title": "On Invoke activity", - "description": "Actions to perform on receipt of an activity with type 'Invoke'.", - "type": "object", - "required": [ - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.14.0-daily.20210414.235020.dcacf50" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "condition": { - "$ref": "#/definitions/condition", - "title": "Condition", - "description": "Condition (expression).", - "examples": [ - "user.vip == true" - ] - }, - "actions": { - "type": "array", - "title": "Actions", - "description": "Sequence of actions to execute.", - "items": { - "$kind": "Microsoft.IDialog", - "$ref": "#/definitions/Microsoft.IDialog" - } - }, - "priority": { - "$ref": "#/definitions/numberExpression", - "title": "Priority", - "description": "Priority for trigger with 0 being the highest and < 0 ignored." - }, - "runOnce": { - "$ref": "#/definitions/booleanExpression", - "title": "Run Once", - "description": "True if rule should run once per unique conditions", - "examples": [ - true, - "=f(x)" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.OnInvokeActivity" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.OnMessageActivity": { - "$role": [ - "implements(Microsoft.ITrigger)", - "extends(Microsoft.OnCondition)" - ], - "title": "On Message activity", - "description": "Actions to perform on receipt of an activity with type 'Message'. Overrides Intent trigger.", - "type": "object", - "required": [ - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.14.0-daily.20210414.235020.dcacf50" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "condition": { - "$ref": "#/definitions/condition", - "title": "Condition", - "description": "Condition (expression).", - "examples": [ - "user.vip == true" - ] - }, - "actions": { - "type": "array", - "title": "Actions", - "description": "Sequence of actions to execute.", - "items": { - "$kind": "Microsoft.IDialog", - "$ref": "#/definitions/Microsoft.IDialog" - } - }, - "priority": { - "$ref": "#/definitions/numberExpression", - "title": "Priority", - "description": "Priority for trigger with 0 being the highest and < 0 ignored." - }, - "runOnce": { - "$ref": "#/definitions/booleanExpression", - "title": "Run Once", - "description": "True if rule should run once per unique conditions", - "examples": [ - true, - "=f(x)" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.OnMessageActivity" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.OnMessageDeleteActivity": { - "$role": [ - "implements(Microsoft.ITrigger)", - "extends(Microsoft.OnCondition)" - ], - "title": "On MessageDelete activity", - "description": "Actions to perform on receipt of an activity with type 'MessageDelete'.", - "type": "object", - "required": [ - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.14.0-daily.20210414.235020.dcacf50" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "condition": { - "$ref": "#/definitions/condition", - "title": "Condition", - "description": "Condition (expression).", - "examples": [ - "user.vip == true" - ] - }, - "actions": { - "type": "array", - "title": "Actions", - "description": "Sequence of actions to execute.", - "items": { - "$kind": "Microsoft.IDialog", - "$ref": "#/definitions/Microsoft.IDialog" - } - }, - "priority": { - "$ref": "#/definitions/numberExpression", - "title": "Priority", - "description": "Priority for trigger with 0 being the highest and < 0 ignored." - }, - "runOnce": { - "$ref": "#/definitions/booleanExpression", - "title": "Run Once", - "description": "True if rule should run once per unique conditions", - "examples": [ - true, - "=f(x)" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.OnMessageDeleteActivity" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.OnMessageReactionActivity": { - "$role": [ - "implements(Microsoft.ITrigger)", - "extends(Microsoft.OnCondition)" - ], - "title": "On MessageReaction activity", - "description": "Actions to perform on receipt of an activity with type 'MessageReaction'.", - "type": "object", - "required": [ - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.14.0-daily.20210414.235020.dcacf50" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "condition": { - "$ref": "#/definitions/condition", - "title": "Condition", - "description": "Condition (expression).", - "examples": [ - "user.vip == true" - ] - }, - "actions": { - "type": "array", - "title": "Actions", - "description": "Sequence of actions to execute.", - "items": { - "$kind": "Microsoft.IDialog", - "$ref": "#/definitions/Microsoft.IDialog" - } - }, - "priority": { - "$ref": "#/definitions/numberExpression", - "title": "Priority", - "description": "Priority for trigger with 0 being the highest and < 0 ignored." - }, - "runOnce": { - "$ref": "#/definitions/booleanExpression", - "title": "Run Once", - "description": "True if rule should run once per unique conditions", - "examples": [ - true, - "=f(x)" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.OnMessageReactionActivity" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.OnMessageUpdateActivity": { - "$role": [ - "implements(Microsoft.ITrigger)", - "extends(Microsoft.OnCondition)" - ], - "title": "On MessageUpdate activity", - "description": "Actions to perform on receipt of an activity with type 'MessageUpdate'.", - "type": "object", - "required": [ - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.14.0-daily.20210414.235020.dcacf50" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "condition": { - "$ref": "#/definitions/condition", - "title": "Condition", - "description": "Condition (expression).", - "examples": [ - "user.vip == true" - ] - }, - "actions": { - "type": "array", - "title": "Actions", - "description": "Sequence of actions to execute.", - "items": { - "$kind": "Microsoft.IDialog", - "$ref": "#/definitions/Microsoft.IDialog" - } - }, - "priority": { - "$ref": "#/definitions/numberExpression", - "title": "Priority", - "description": "Priority for trigger with 0 being the highest and < 0 ignored." - }, - "runOnce": { - "$ref": "#/definitions/booleanExpression", - "title": "Run Once", - "description": "True if rule should run once per unique conditions", - "examples": [ - true, - "=f(x)" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.OnMessageUpdateActivity" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.OnQnAMatch": { - "$role": [ - "implements(Microsoft.ITrigger)", - "extends(Microsoft.OnCondition)" - ], - "title": "On QnAMaker match", - "description": "Actions to perform on when an match from QnAMaker is found.", - "type": "object", - "required": [ - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.14.0-daily.20210414.235020.dcacf50" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "condition": { - "$ref": "#/definitions/condition", - "title": "Condition", - "description": "Condition (expression).", - "examples": [ - "user.vip == true" - ] - }, - "actions": { - "type": "array", - "title": "Actions", - "description": "Sequence of actions to execute.", - "items": { - "$kind": "Microsoft.IDialog", - "$ref": "#/definitions/Microsoft.IDialog" - } - }, - "priority": { - "$ref": "#/definitions/numberExpression", - "title": "Priority", - "description": "Priority for trigger with 0 being the highest and < 0 ignored." - }, - "runOnce": { - "$ref": "#/definitions/booleanExpression", - "title": "Run Once", - "description": "True if rule should run once per unique conditions", - "examples": [ - true, - "=f(x)" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.OnQnAMatch" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.OnRepromptDialog": { - "$role": [ - "implements(Microsoft.ITrigger)", - "extends(Microsoft.OnCondition)" - ], - "title": "On RepromptDialog", - "description": "Actions to perform when 'RepromptDialog' event occurs.", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.14.0-daily.20210414.235020.dcacf50" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "condition": { - "$ref": "#/definitions/condition", - "title": "Condition", - "description": "Condition (expression).", - "examples": [ - "user.vip == true" - ] - }, - "actions": { - "type": "array", - "title": "Actions", - "description": "Sequence of actions to execute.", - "items": { - "$kind": "Microsoft.IDialog", - "$ref": "#/definitions/Microsoft.IDialog" - } - }, - "priority": { - "$ref": "#/definitions/numberExpression", - "title": "Priority", - "description": "Priority for trigger with 0 being the highest and < 0 ignored." - }, - "runOnce": { - "$ref": "#/definitions/booleanExpression", - "title": "Run Once", - "description": "True if rule should run once per unique conditions", - "examples": [ - true, - "=f(x)" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.OnRepromptDialog" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.OnTypingActivity": { - "$role": [ - "implements(Microsoft.ITrigger)", - "extends(Microsoft.OnCondition)" - ], - "title": "On Typing activity", - "description": "Actions to perform on receipt of an activity with type 'Typing'.", - "type": "object", - "required": [ - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.14.0-daily.20210414.235020.dcacf50" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "condition": { - "$ref": "#/definitions/condition", - "title": "Condition", - "description": "Condition (expression).", - "examples": [ - "user.vip == true" - ] - }, - "actions": { - "type": "array", - "title": "Actions", - "description": "Sequence of actions to execute.", - "items": { - "$kind": "Microsoft.IDialog", - "$ref": "#/definitions/Microsoft.IDialog" - } - }, - "priority": { - "$ref": "#/definitions/numberExpression", - "title": "Priority", - "description": "Priority for trigger with 0 being the highest and < 0 ignored." - }, - "runOnce": { - "$ref": "#/definitions/booleanExpression", - "title": "Run Once", - "description": "True if rule should run once per unique conditions", - "examples": [ - true, - "=f(x)" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.OnTypingActivity" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.OnUnknownIntent": { - "$role": [ - "implements(Microsoft.ITrigger)", - "extends(Microsoft.OnCondition)" - ], - "title": "On unknown intent", - "description": "Action to perform when user input is unrecognized or if none of the 'on intent recognition' triggers match recognized intent.", - "type": "object", - "required": [ - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.14.0-daily.20210414.235020.dcacf50" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "condition": { - "$ref": "#/definitions/condition", - "title": "Condition", - "description": "Condition (expression).", - "examples": [ - "user.vip == true" - ] - }, - "actions": { - "type": "array", - "title": "Actions", - "description": "Sequence of actions to execute.", - "items": { - "$kind": "Microsoft.IDialog", - "$ref": "#/definitions/Microsoft.IDialog" - } - }, - "priority": { - "$ref": "#/definitions/numberExpression", - "title": "Priority", - "description": "Priority for trigger with 0 being the highest and < 0 ignored." - }, - "runOnce": { - "$ref": "#/definitions/booleanExpression", - "title": "Run Once", - "description": "True if rule should run once per unique conditions", - "examples": [ - true, - "=f(x)" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.OnUnknownIntent" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.OrchestratorRecognizer": { - "$role": "implements(Microsoft.IRecognizer)", - "title": "Orchestrator recognizer", - "description": "Orchestrator recognizer.", - "type": "object", - "required": [ - "modelFolder", - "snapshotFile", - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.AI.Orchestrator", - "version": "4.14.0-daily.preview.20210414.235020.dcacf50" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional unique id using with RecognizerSet." - }, - "modelFolder": { - "$ref": "#/definitions/stringExpression", - "title": "Base Model", - "description": "Base model folder path.", - "default": "=settings.orchestrator.modelFolder" - }, - "snapshotFile": { - "$ref": "#/definitions/stringExpression", - "title": "Snapshot File", - "description": "Snapshot file.", - "default": "=settings.orchestrator.snapshotFile" - }, - "externalEntityRecognizer": { - "$kind": "Microsoft.IRecognizer", - "title": "External entity recognizer", - "description": "Entities recognized by this recognizer will be merged with Orchestrator results.", - "$ref": "#/definitions/Microsoft.IRecognizer" - }, - "disambiguationScoreThreshold": { - "$ref": "#/definitions/numberExpression", - "title": "Threshold", - "description": "Recognizer returns ChooseIntent (disambiguation) if other intents are classified within this score of the top scoring intent.", - "default": 0.05, - "examples": [ - "=true", - "=turn.scoreThreshold", - "=settings.orchestrator.disambigScoreThreshold" - ] - }, - "detectAmbiguousIntents": { - "$ref": "#/definitions/booleanExpression", - "title": "Detect ambiguous intents", - "description": "If true, recognizer will look for ambiguous intents (intents with close recognition scores from top scoring intent).", - "default": false, - "examples": [ - "=true", - "=turn.detectAmbiguousIntents", - "=settings.orchestrator.detectAmbiguousIntents" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.OrchestratorRecognizer" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.OrdinalEntityRecognizer": { - "$role": [ - "implements(Microsoft.IRecognizer)", - "implements(Microsoft.IEntityRecognizer)" - ], - "title": "Ordinal entity recognizer", - "description": "Recognizer which recognizes ordinals (example: first, second, 3rd).", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.14.0-daily.20210414.235020.dcacf50" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.OrdinalEntityRecognizer" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.PercentageEntityRecognizer": { - "$role": [ - "implements(Microsoft.IRecognizer)", - "implements(Microsoft.IEntityRecognizer)" - ], - "title": "Percentage entity recognizer", - "description": "Recognizer which recognizes percentages.", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.14.0-daily.20210414.235020.dcacf50" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.PercentageEntityRecognizer" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.PhoneNumberEntityRecognizer": { - "$role": [ - "implements(Microsoft.IRecognizer)", - "implements(Microsoft.IEntityRecognizer)" - ], - "title": "Phone number entity recognizer", - "description": "Recognizer which recognizes phone numbers.", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.14.0-daily.20210414.235020.dcacf50" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.PhoneNumberEntityRecognizer" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.QnAMakerDialog": { - "$role": "implements(Microsoft.IDialog)", - "title": "QnAMaker dialog", - "description": "Dialog which uses QnAMAker knowledge base to answer questions.", - "type": "object", - "required": [ - "knowledgeBaseId", - "endpointKey", - "hostname", - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.AI.QnA", - "version": "4.13.0" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "knowledgeBaseId": { - "$ref": "#/definitions/stringExpression", - "title": "KnowledgeBase Id", - "description": "KnowledgeBase Id of your QnA Maker KnowledgeBase.", - "default": "=settings.qna.knowledgebaseid" - }, - "endpointKey": { - "$ref": "#/definitions/stringExpression", - "title": "Endpoint key", - "description": "Endpoint key for the QnA Maker KB.", - "default": "=settings.qna.endpointkey" - }, - "hostname": { - "$ref": "#/definitions/stringExpression", - "title": "Hostname", - "description": "Hostname for your QnA Maker service.", - "default": "=settings.qna.hostname", - "examples": [ - "https://yourserver.azurewebsites.net/qnamaker" - ] - }, - "noAnswer": { - "$kind": "Microsoft.IActivityTemplate", - "title": "Fallback answer", - "description": "Default answer to return when none found in KB.", - "default": "Sorry, I did not find an answer.", - "$ref": "#/definitions/Microsoft.IActivityTemplate" - }, - "threshold": { - "$ref": "#/definitions/numberExpression", - "title": "Threshold", - "description": "Threshold score to filter results.", - "default": 0.3 - }, - "activeLearningCardTitle": { - "$ref": "#/definitions/stringExpression", - "title": "Active learning card title", - "description": "Title for active learning suggestions card.", - "default": "Did you mean:" - }, - "cardNoMatchText": { - "$ref": "#/definitions/stringExpression", - "title": "Card no match text", - "description": "Text for no match option.", - "default": "None of the above." - }, - "cardNoMatchResponse": { - "$kind": "Microsoft.IActivityTemplate", - "title": "Card no match response", - "description": "Custom response when no match option was selected.", - "default": "Thanks for the feedback.", - "$ref": "#/definitions/Microsoft.IActivityTemplate" - }, - "strictFilters": { - "$ref": "#/definitions/arrayExpression", - "title": "Strict filters", - "description": "Metadata filters to use when calling the QnA Maker KB.", - "items": { - "type": "object", - "title": "Metadata filter", - "description": "Metadata filter.", - "properties": { - "name": { - "type": "string", - "title": "Name", - "description": "Name of filter property.", - "maximum": 100 - }, - "value": { - "type": "string", - "title": "Value", - "description": "Value to filter on.", - "maximum": 100 - } - } - } - }, - "top": { - "$ref": "#/definitions/numberExpression", - "title": "Top", - "description": "The number of answers you want to retrieve.", - "default": 3 - }, - "isTest": { - "type": "boolean", - "title": "IsTest", - "description": "True, if pointing to Test environment, else false.", - "default": false - }, - "rankerType": { - "$ref": "#/definitions/stringExpression", - "title": "Ranker type", - "description": "Type of Ranker.", - "oneOf": [ - { - "title": "Standard ranker", - "description": "Standard ranker types.", - "enum": [ - "default", - "questionOnly", - "autoSuggestQuestion" - ], - "default": "default" - }, - { - "$ref": "#/definitions/equalsExpression" - } - ] - }, - "strictFiltersJoinOperator": { - "$ref": "#/definitions/stringExpression", - "title": "StrictFiltersJoinOperator", - "description": "Join operator for Strict Filters.", - "oneOf": [ - { - "title": "Join operator", - "description": "Value of Join Operator to be used as conjunction with Strict Filter values.", - "enum": [ - "AND", - "OR" - ], - "default": "AND" - }, - { - "$ref": "#/definitions/equalsExpression" - } - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.QnAMakerDialog" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.QnAMakerRecognizer": { - "$role": "implements(Microsoft.IRecognizer)", - "title": "QnAMaker recognizer", - "description": "Recognizer for generating QnAMatch intents from a KB.", - "type": "object", - "required": [ - "knowledgeBaseId", - "endpointKey", - "hostname", - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.AI.QnA", - "version": "4.13.0" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional unique id using with RecognizerSet." - }, - "knowledgeBaseId": { - "$ref": "#/definitions/stringExpression", - "title": "KnowledgeBase Id", - "description": "Knowledge base Id of your QnA Maker knowledge base.", - "default": "=settings.qna.knowledgebaseid" - }, - "endpointKey": { - "$ref": "#/definitions/stringExpression", - "title": "Endpoint key", - "description": "Endpoint key for the QnA Maker KB.", - "default": "=settings.qna.endpointkey" - }, - "hostname": { - "$ref": "#/definitions/stringExpression", - "title": "Hostname", - "description": "Hostname for your QnA Maker service.", - "default": "=settings.qna.hostname", - "examples": [ - "https://yourserver.azurewebsites.net/qnamaker" - ] - }, - "threshold": { - "$ref": "#/definitions/numberExpression", - "title": "Threshold", - "description": "Threshold score to filter results.", - "default": 0.3 - }, - "strictFilters": { - "$ref": "#/definitions/arrayExpression", - "title": "Strict filters", - "description": "Metadata filters to use when calling the QnA Maker KB.", - "items": { - "type": "object", - "title": "Metadata filters", - "description": "Metadata filters to use when querying QnA Maker KB.", - "properties": { - "name": { - "type": "string", - "title": "Name", - "description": "Name to filter on.", - "maximum": 100 - }, - "value": { - "type": "string", - "title": "Value", - "description": "Value to restrict filter.", - "maximum": 100 - } - } - } - }, - "top": { - "$ref": "#/definitions/numberExpression", - "title": "Top", - "description": "The number of answers you want to retrieve.", - "default": 3 - }, - "isTest": { - "$ref": "#/definitions/booleanExpression", - "title": "Use test environment", - "description": "True, if pointing to Test environment, else false.", - "examples": [ - true, - "=f(x)" - ] - }, - "rankerType": { - "title": "Ranker type", - "description": "Type of Ranker.", - "oneOf": [ - { - "type": "string", - "title": "Ranker type", - "description": "Type of Ranker.", - "enum": [ - "default", - "questionOnly", - "autoSuggestQuestion" - ], - "default": "default" - }, - { - "$ref": "#/definitions/equalsExpression" - } - ] - }, - "strictFiltersJoinOperator": { - "$ref": "#/definitions/stringExpression", - "title": "StrictFiltersJoinOperator", - "description": "Join operator for Strict Filters.", - "oneOf": [ - { - "title": "Join operator", - "description": "Value of Join Operator to be used as onjuction with Strict Filter values.", - "enum": [ - "AND", - "OR" - ], - "default": "AND" - }, - { - "$ref": "#/definitions/equalsExpression" - } - ] - }, - "includeDialogNameInMetadata": { - "$ref": "#/definitions/booleanExpression", - "title": "Include dialog name", - "description": "When set to false, the dialog name will not be passed to QnAMaker. (default) is true", - "default": true, - "examples": [ - true, - "=f(x)" - ] - }, - "metadata": { - "$ref": "#/definitions/arrayExpression", - "title": "Metadata filters", - "description": "Metadata filters to use when calling the QnA Maker KB.", - "items": { - "type": "object", - "title": "Metadata filter", - "description": "Metadata filter to use when calling the QnA Maker KB.", - "properties": { - "name": { - "type": "string", - "title": "Name", - "description": "Name of value to test." - }, - "value": { - "type": "string", - "title": "Value", - "description": "Value to filter against." - } - } - } - }, - "context": { - "$ref": "#/definitions/objectExpression", - "title": "QnA request context", - "description": "Context to use for ranking." - }, - "qnaId": { - "$ref": "#/definitions/integerExpression", - "title": "QnA Id", - "description": "A number or expression which is the QnAId to paass to QnAMaker API." - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.QnAMakerRecognizer" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.RandomSelector": { - "$role": "implements(Microsoft.ITriggerSelector)", - "title": "Random rule selector", - "description": "Select most specific true rule.", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.14.0-daily.20210414.235020.dcacf50" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "seed": { - "type": "integer", - "title": "Random seed", - "description": "Random seed to start random number generation." - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.RandomSelector" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.RecognizerSet": { - "$role": "implements(Microsoft.IRecognizer)", - "title": "Recognizer set", - "description": "Creates the union of the intents and entities of the recognizers in the set.", - "type": "object", - "required": [ - "recognizers", - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.14.0-daily.20210414.235020.dcacf50" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional unique id using with RecognizerSet. Other recognizers should return 'DeferToRecognizer_{Id}' intent when cross training data for this recognizer." - }, - "recognizers": { - "type": "array", - "title": "Recognizers", - "description": "List of Recognizers defined for this set.", - "items": { - "$kind": "Microsoft.IRecognizer", - "$ref": "#/definitions/Microsoft.IRecognizer" - } - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.RecognizerSet" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.RegexEntityRecognizer": { - "$role": [ - "implements(Microsoft.IRecognizer)", - "implements(Microsoft.IEntityRecognizer)" - ], - "title": "Regex entity recognizer", - "description": "Recognizer which recognizes patterns of input based on regex.", - "type": "object", - "required": [ - "name", - "pattern", - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.14.0-daily.20210414.235020.dcacf50" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "name": { - "type": "string", - "title": "Name", - "description": "Name of the entity" - }, - "pattern": { - "type": "string", - "title": "Pattern", - "description": "Pattern expressed as regular expression." - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.RegexEntityRecognizer" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.RegexRecognizer": { - "$role": "implements(Microsoft.IRecognizer)", - "title": "Regex recognizer", - "description": "Use regular expressions to recognize intents and entities from user input.", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.14.0-daily.20210414.235020.dcacf50" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional unique id using with RecognizerSet. Other recognizers should return 'DeferToRecognizer_{Id}' intent when cross training data for this recognizer." - }, - "intents": { - "type": "array", - "title": "RegEx patterns to intents", - "description": "Collection of patterns to match for an intent.", - "items": { - "type": "object", - "title": "Pattern", - "description": "Intent and regex pattern.", - "properties": { - "intent": { - "type": "string", - "title": "Intent", - "description": "The intent name." - }, - "pattern": { - "type": "string", - "title": "Pattern", - "description": "The regular expression pattern." - } - } - } - }, - "entities": { - "type": "array", - "title": "Entity recognizers", - "description": "Collection of entity recognizers to use.", - "items": { - "$kind": "Microsoft.IEntityRecognizer", - "$ref": "#/definitions/Microsoft.IEntityRecognizer" - } - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.RegexRecognizer" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.RepeatDialog": { - "$role": "implements(Microsoft.IDialog)", - "type": "object", - "title": "Repeat dialog", - "description": "Repeat current dialog.", - "$policies": { - "lastAction": true - }, - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.14.0-daily.20210414.235020.dcacf50" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the dialog" - }, - "allowLoop": { - "$ref": "#/definitions/booleanExpression", - "title": "AllowLoop", - "description": "Optional condition which if true will allow loop of the repeated dialog.", - "examples": [ - "user.age > 3" - ] - }, - "disabled": { - "$ref": "#/definitions/booleanExpression", - "title": "Disabled", - "description": "Optional condition which if true will disable this action.", - "examples": [ - "user.age > 3" - ] - }, - "options": { - "$ref": "#/definitions/objectExpression", - "title": "Options", - "description": "One or more options that are passed to the dialog that is called.", - "additionalProperties": { - "type": "string", - "title": "Options", - "description": "Options for repeating dialog." - } - }, - "activityProcessed": { - "$ref": "#/definitions/booleanExpression", - "title": "Activity processed", - "description": "When set to false, the dialog that is called can process the current activity.", - "default": true - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.RepeatDialog" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.ReplaceDialog": { - "$role": "implements(Microsoft.IDialog)", - "type": "object", - "title": "Replace dialog", - "description": "Replace current dialog with another dialog.", - "$policies": { - "lastAction": true - }, - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.14.0-daily.20210414.235020.dcacf50" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the dialog" - }, - "disabled": { - "$ref": "#/definitions/booleanExpression", - "title": "Disabled", - "description": "Optional condition which if true will disable this action.", - "examples": [ - "user.age > 3" - ] - }, - "dialog": { - "oneOf": [ - { - "$kind": "Microsoft.IDialog", - "pattern": "^(?!(=)).*", - "title": "Dialog", - "$ref": "#/definitions/Microsoft.IDialog" - }, - { - "$ref": "#/definitions/equalsExpression", - "examples": [ - "=settings.dialogId" - ] - } - ], - "title": "Dialog name", - "description": "Name of the dialog to call." - }, - "options": { - "$ref": "#/definitions/objectExpression", - "title": "Options", - "description": "One or more options that are passed to the dialog that is called.", - "additionalProperties": { - "type": "string", - "title": "Options", - "description": "Options for replacing dialog." - } - }, - "activityProcessed": { - "$ref": "#/definitions/booleanExpression", - "title": "Activity processed", - "description": "When set to false, the dialog that is called can process the current activity.", - "default": true - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.ReplaceDialog" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.ResourceMultiLanguageGenerator": { - "$role": "implements(Microsoft.ILanguageGenerator)", - "title": "Resource multi-language generator", - "description": "MultiLanguage Generator which is bound to resource by resource Id.", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.14.0-daily.20210414.235020.dcacf50" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional generator ID." - }, - "resourceId": { - "type": "string", - "title": "Resource Id", - "description": "Resource which is the root language generator. Other generaters with the same name and language suffix will be loaded into this generator and used based on the Language Policy.", - "default": "dialog.result" - }, - "languagePolicy": { - "type": "object", - "title": "Language policy", - "description": "Set alternate language policy for this generator. If not set, the global language policy will be used." - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.ResourceMultiLanguageGenerator" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.SendActivity": { - "$role": "implements(Microsoft.IDialog)", - "title": "Send an activity", - "description": "Respond with an activity.", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.14.0-daily.20210414.235020.dcacf50" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the dialog" - }, - "disabled": { - "$ref": "#/definitions/booleanExpression", - "title": "Disabled", - "description": "Optional condition which if true will disable this action." - }, - "activity": { - "$kind": "Microsoft.IActivityTemplate", - "title": "Activity", - "description": "Activity to send.", - "$ref": "#/definitions/Microsoft.IActivityTemplate" - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.SendActivity" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.SendHandoffActivity": { - "$role": "implements(Microsoft.IDialog)", - "title": "Send a handoff activity", - "description": "Sends a handoff activity to trigger a handoff request.", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.14.0-daily.20210414.235020.dcacf50" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "context": { - "$ref": "#/definitions/objectExpression", - "title": "Context", - "description": "Context to send with the handoff request" - }, - "transcript": { - "$ref": "#/definitions/objectExpression", - "title": "transcript", - "description": "Transcript to send with the handoff request" - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.SendHandoffActivity" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.SetProperties": { - "$role": "implements(Microsoft.IDialog)", - "title": "Set property", - "description": "Set one or more property values.", - "type": "object", - "required": [ - "assignments", - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.14.0-daily.20210414.235020.dcacf50" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the dialog" - }, - "disabled": { - "$ref": "#/definitions/booleanExpression", - "title": "Disabled", - "description": "Optional condition which if true will disable this action.", - "examples": [ - true, - "=user.age > 3" - ] - }, - "assignments": { - "type": "array", - "title": "Assignments", - "description": "Property value assignments to set.", - "items": { - "type": "object", - "title": "Assignment", - "description": "Property assignment.", - "properties": { - "property": { - "$ref": "#/definitions/stringExpression", - "title": "Property", - "description": "Property (named location to store information).", - "examples": [ - "user.age" - ] - }, - "value": { - "$ref": "#/definitions/valueExpression", - "title": "Value", - "description": "New value or expression.", - "examples": [ - "='milk'", - "=dialog.favColor", - "=dialog.favColor == 'red'" - ] - } - } - } - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.SetProperties" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.SetProperty": { - "$role": "implements(Microsoft.IDialog)", - "title": "Set property", - "description": "Set property to a value.", - "type": "object", - "required": [ - "property", - "value", - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.14.0-daily.20210414.235020.dcacf50" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the dialog" - }, - "disabled": { - "$ref": "#/definitions/booleanExpression", - "title": "Disabled", - "description": "Optional condition which if true will disable this action.", - "examples": [ - true, - "=user.age > 3" - ] - }, - "property": { - "$ref": "#/definitions/stringExpression", - "title": "Property", - "description": "Property (named location to store information).", - "examples": [ - "user.age" - ] - }, - "value": { - "$ref": "#/definitions/valueExpression", - "title": "Value", - "description": "New value or expression.", - "examples": [ - "='milk'", - "=dialog.favColor", - "=dialog.favColor == 'red'" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.SetProperty" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.SignOutUser": { - "$role": "implements(Microsoft.IDialog)", - "title": "Sign out user", - "description": "Sign a user out that was logged in previously using OAuthInput.", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.14.0-daily.20210414.235020.dcacf50" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the dialog" - }, - "userId": { - "$ref": "#/definitions/stringExpression", - "title": "UserId", - "description": "Expression to an user to signout. Default is user.id.", - "default": "=user.id" - }, - "connectionName": { - "$ref": "#/definitions/stringExpression", - "title": "Connection name", - "description": "Connection name that was used with OAuthInput to log a user in." - }, - "disabled": { - "$ref": "#/definitions/booleanExpression", - "title": "Disabled", - "description": "Optional condition which if true will disable this action.", - "examples": [ - true, - "=user.age > 3" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.SignOutUser" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.StaticActivityTemplate": { - "$role": "implements(Microsoft.IActivityTemplate)", - "title": "Microsoft static activity template", - "description": "This allows you to define a static Activity object", - "type": "object", - "required": [ - "activity", - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.14.0-daily.20210414.235020.dcacf50" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "activity": { - "$ref": "#/definitions/botframework.json/definitions/Activity", - "title": "Activity", - "description": "A static Activity to used.", - "required": [ - "type" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.StaticActivityTemplate" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.SwitchCondition": { - "$role": "implements(Microsoft.IDialog)", - "title": "Switch condition", - "description": "Execute different actions based on the value of a property.", - "type": "object", - "required": [ - "condition", - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.14.0-daily.20210414.235020.dcacf50" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the dialog" - }, - "condition": { - "$ref": "#/definitions/stringExpression", - "title": "Condition", - "description": "Property to evaluate.", - "examples": [ - "user.favColor" - ] - }, - "disabled": { - "$ref": "#/definitions/booleanExpression", - "title": "Disabled", - "description": "Optional condition which if true will disable this action.", - "examples": [ - true, - "=user.age > 3" - ] - }, - "cases": { - "type": "array", - "title": "Cases", - "description": "Actions for each possible condition.", - "items": { - "type": "object", - "title": "Case", - "description": "Case and actions.", - "required": [ - "value" - ], - "properties": { - "value": { - "type": [ - "number", - "integer", - "boolean", - "string" - ], - "title": "Value", - "description": "The value to compare the condition with.", - "examples": [ - "red", - "true", - "13" - ] - }, - "actions": { - "type": "array", - "title": "Actions", - "description": "Actions to execute.", - "items": { - "$kind": "Microsoft.IDialog", - "$ref": "#/definitions/Microsoft.IDialog" - } - } - } - } - }, - "default": { - "type": "array", - "title": "Default", - "description": "Actions to execute if none of the cases meet the condition.", - "items": { - "$kind": "Microsoft.IDialog", - "$ref": "#/definitions/Microsoft.IDialog" - } - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.SwitchCondition" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.TelemetryTrackEventAction": { - "$role": "implements(Microsoft.IDialog)", - "type": "object", - "title": "Telemetry - track event", - "description": "Track a custom event using the registered Telemetry Client.", - "required": [ - "url", - "method", - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.14.0-daily.20210414.235020.dcacf50" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the dialog" - }, - "disabled": { - "$ref": "#/definitions/booleanExpression", - "title": "Disabled", - "description": "Optional condition which if true will disable this action.", - "examples": [ - "user.age > 3" - ] - }, - "eventName": { - "$ref": "#/definitions/stringExpression", - "title": "Event name", - "description": "The name of the event to track.", - "examples": [ - "MyEventStarted", - "MyEventCompleted" - ] - }, - "properties": { - "type": "object", - "title": "Properties", - "description": "One or more properties to attach to the event being tracked.", - "additionalProperties": { - "$ref": "#/definitions/stringExpression" - } - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.TelemetryTrackEventAction" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.TemperatureEntityRecognizer": { - "$role": [ - "implements(Microsoft.IRecognizer)", - "implements(Microsoft.IEntityRecognizer)" - ], - "title": "Temperature recognizer", - "description": "Recognizer which recognizes temperatures.", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.14.0-daily.20210414.235020.dcacf50" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.TemperatureEntityRecognizer" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.TemplateEngineLanguageGenerator": { - "$role": "implements(Microsoft.ILanguageGenerator)", - "title": "Template multi-language generator", - "description": "Template Generator which allows only inline evaluation of templates.", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.14.0-daily.20210414.235020.dcacf50" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional generator ID." - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.TemplateEngineLanguageGenerator" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.TextInput": { - "$role": [ - "implements(Microsoft.IDialog)", - "extends(Microsoft.InputDialog)" - ], - "type": "object", - "title": "Text input dialog", - "description": "Collection information - Ask for a word or sentence.", - "$policies": { - "interactive": true - }, - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.14.0-daily.20210414.235020.dcacf50" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "defaultValue": { - "$ref": "#/definitions/stringExpression", - "title": "Default value", - "description": "'Property' will be set to the value of this expression when max turn count is exceeded.", - "examples": [ - "hello world", - "Hello ${user.name}", - "=concat(user.firstname, user.lastName)" - ] - }, - "value": { - "$ref": "#/definitions/stringExpression", - "title": "Value", - "description": "'Property' will be set to the value of this expression unless it evaluates to null.", - "examples": [ - "hello world", - "Hello ${user.name}", - "=concat(user.firstname, user.lastName)" - ] - }, - "outputFormat": { - "$ref": "#/definitions/stringExpression", - "title": "Output format", - "description": "Expression to format the output.", - "examples": [ - "=toUpper(this.value)", - "${toUpper(this.value)}" - ] - }, - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the dialog" - }, - "disabled": { - "$ref": "#/definitions/booleanExpression", - "title": "Disabled", - "description": "Optional condition which if true will disable this action.", - "default": false, - "examples": [ - false, - "=user.isVip" - ] - }, - "prompt": { - "$kind": "Microsoft.IActivityTemplate", - "title": "Initial prompt", - "description": "Message to send to collect information.", - "examples": [ - "What is your birth date?" - ], - "$ref": "#/definitions/Microsoft.IActivityTemplate" - }, - "unrecognizedPrompt": { - "$kind": "Microsoft.IActivityTemplate", - "title": "Unrecognized prompt", - "description": "Message to send when max turn count (if specified) has been exceeded and the default value is selected as the value.", - "examples": [ - "Sorry, I'm having trouble understanding you. I will just use {this.options.defaultValue} for now. You can say 'I'm 36 years old' to change it." - ], - "$ref": "#/definitions/Microsoft.IActivityTemplate" - }, - "invalidPrompt": { - "$kind": "Microsoft.IActivityTemplate", - "title": "Invalid prompt", - "description": "Message to send when the user input does not meet any validation expression.", - "examples": [ - "Sorry, '{this.value}' does not work. I need a number between 1-150. What is your age?" - ], - "$ref": "#/definitions/Microsoft.IActivityTemplate" - }, - "defaultValueResponse": { - "$kind": "Microsoft.IActivityTemplate", - "title": "Default value response", - "description": "Message to send when max turn count (if specified) has been exceeded and the default value is selected as the value.", - "examples": [ - "Sorry, I'm having trouble understanding you. I will just use {this.options.defaultValue} for now. You can say 'I'm 36 years old' to change it." - ], - "$ref": "#/definitions/Microsoft.IActivityTemplate" - }, - "maxTurnCount": { - "$ref": "#/definitions/integerExpression", - "title": "Max turn count", - "description": "Maximum number of re-prompt attempts to collect information.", - "default": 3, - "minimum": 0, - "maximum": 2147483647, - "examples": [ - 3, - "=settings.xyz" - ] - }, - "validations": { - "type": "array", - "title": "Validation expressions", - "description": "Expression to validate user input.", - "items": { - "$ref": "#/definitions/condition", - "title": "Condition", - "description": "Expression which needs to met for the input to be considered valid", - "examples": [ - "int(this.value) > 1 && int(this.value) <= 150", - "count(this.value) < 300" - ] - } - }, - "property": { - "$ref": "#/definitions/stringExpression", - "title": "Property", - "description": "Property to store collected information. Input will be skipped if property has value (unless 'Always prompt' is true).", - "examples": [ - "$birthday", - "dialog.${user.name}", - "=f(x)" - ] - }, - "alwaysPrompt": { - "$ref": "#/definitions/booleanExpression", - "title": "Always prompt", - "description": "Collect information even if the specified 'property' is not empty.", - "default": false, - "examples": [ - false, - "=$val" - ] - }, - "allowInterruptions": { - "$ref": "#/definitions/booleanExpression", - "title": "Allow Interruptions", - "description": "A boolean expression that determines whether the parent should be allowed to interrupt the input.", - "default": true, - "examples": [ - true, - "=user.xyz" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.TextInput" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.TextTemplate": { - "$role": "implements(Microsoft.ITextTemplate)", - "title": "Microsoft TextTemplate", - "description": "Use LG Templates to create text", - "type": "object", - "required": [ - "template", - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.14.0-daily.20210414.235020.dcacf50" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "template": { - "title": "Template", - "description": "Language Generator template to evaluate to create the text.", - "type": "string" - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.TextTemplate" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.ThrowException": { - "$role": "implements(Microsoft.IDialog)", - "title": "Throw an exception", - "description": "Throw an exception. Capture this exception with OnError trigger.", - "type": "object", - "required": [ - "errorValue", - "$kind" - ], - "$policies": { - "lastAction": true - }, - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.14.0-daily.20210414.235020.dcacf50" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the dialog" - }, - "disabled": { - "$ref": "#/definitions/booleanExpression", - "title": "Disabled", - "description": "Optional condition which if true will disable this action.", - "examples": [ - "user.age > 3" - ] - }, - "errorValue": { - "$ref": "#/definitions/valueExpression", - "title": "Error value", - "description": "Error value to throw." - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.ThrowException" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.TraceActivity": { - "$role": "implements(Microsoft.IDialog)", - "title": "Send a TraceActivity", - "description": "Send a trace activity to the transcript logger and/ or Bot Framework Emulator.", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.14.0-daily.20210414.235020.dcacf50" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the dialog" - }, - "disabled": { - "$ref": "#/definitions/booleanExpression", - "title": "Disabled", - "description": "Optional condition which if true will disable this action.", - "examples": [ - true, - "=user.age > 3" - ] - }, - "name": { - "$ref": "#/definitions/stringExpression", - "title": "Name", - "description": "Name of the trace activity" - }, - "label": { - "$ref": "#/definitions/stringExpression", - "title": "Label", - "description": "Label for the trace activity (used to identify it in a list of trace activities.)" - }, - "valueType": { - "$ref": "#/definitions/stringExpression", - "title": "Value type", - "description": "Type of value" - }, - "value": { - "$ref": "#/definitions/valueExpression", - "title": "Value", - "description": "Property that holds the value to send as trace activity." - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.TraceActivity" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.TrueSelector": { - "$role": "implements(Microsoft.ITriggerSelector)", - "title": "True trigger selector", - "description": "Selector for all true events", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.14.0-daily.20210414.235020.dcacf50" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.TrueSelector" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.UpdateActivity": { - "$role": "implements(Microsoft.IDialog)", - "title": "Update an activity", - "description": "Respond with an activity.", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.14.0-daily.20210414.235020.dcacf50" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the dialog" - }, - "disabled": { - "$ref": "#/definitions/booleanExpression", - "title": "Disabled", - "description": "Optional condition which if true will disable this action.", - "examples": [ - true, - "=user.age > 3" - ] - }, - "activityId": { - "$ref": "#/definitions/stringExpression", - "title": "Activity Id", - "description": "An string expression with the activity id to update.", - "examples": [ - "=turn.lastresult.id" - ] - }, - "activity": { - "$kind": "Microsoft.IActivityTemplate", - "title": "Activity", - "description": "Activity to send.", - "$ref": "#/definitions/Microsoft.IActivityTemplate" - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.UpdateActivity" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.UrlEntityRecognizer": { - "$role": [ - "implements(Microsoft.IRecognizer)", - "implements(Microsoft.IEntityRecognizer)" - ], - "title": "Url recognizer", - "description": "Recognizer which recognizes urls.", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.14.0-daily.20210414.235020.dcacf50" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.UrlEntityRecognizer" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "arrayExpression": { - "$role": "expression", - "title": "Array or expression", - "description": "Array or expression to evaluate.", - "oneOf": [ - { - "type": "array", - "title": "Array", - "description": "Array constant." - }, - { - "$ref": "#/definitions/equalsExpression" - } - ] - }, - "booleanExpression": { - "$role": "expression", - "title": "Boolean or expression", - "description": "Boolean constant or expression to evaluate.", - "oneOf": [ - { - "type": "boolean", - "title": "Boolean", - "description": "Boolean constant.", - "default": false, - "examples": [ - false - ] - }, - { - "$ref": "#/definitions/equalsExpression", - "examples": [ - "=user.isVip" - ] - } - ] - }, - "component": { - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "condition": { - "$role": "expression", - "title": "Boolean condition", - "description": "Boolean constant or expression to evaluate.", - "oneOf": [ - { - "$ref": "#/definitions/expression" - }, - { - "type": "boolean", - "title": "Boolean", - "description": "Boolean value.", - "default": true, - "examples": [ - false - ] - } - ] - }, - "equalsExpression": { - "$role": "expression", - "type": "string", - "title": "Expression", - "description": "Expression starting with =.", - "pattern": "^=.*\\S.*", - "examples": [ - "=user.name" - ] - }, - "expression": { - "$role": "expression", - "type": "string", - "title": "Expression", - "description": "Expression to evaluate.", - "pattern": "^.*\\S.*", - "examples": [ - "user.age > 13" - ] - }, - "integerExpression": { - "$role": "expression", - "title": "Integer or expression", - "description": "Integer constant or expression to evaluate.", - "oneOf": [ - { - "type": "integer", - "title": "Integer", - "description": "Integer constant.", - "default": 0, - "examples": [ - 15 - ] - }, - { - "$ref": "#/definitions/equalsExpression", - "examples": [ - "=user.age" - ] - } - ] - }, - "numberExpression": { - "$role": "expression", - "title": "Number or expression", - "description": "Number constant or expression to evaluate.", - "oneOf": [ - { - "type": "number", - "title": "Number", - "description": "Number constant.", - "default": 0, - "examples": [ - 15.5 - ] - }, - { - "$ref": "#/definitions/equalsExpression", - "examples": [ - "=dialog.quantity" - ] - } - ] - }, - "objectExpression": { - "$role": "expression", - "title": "Object or expression", - "description": "Object or expression to evaluate.", - "oneOf": [ - { - "type": "object", - "title": "Object", - "description": "Object constant." - }, - { - "$ref": "#/definitions/equalsExpression" - } - ] - }, - "role": { - "title": "$role", - "description": "Defines the role played in the dialog schema from [expression|interface|implements($kind)|extends($kind)].", - "type": "string", - "pattern": "^((expression)|(interface)|(implements\\([a-zA-Z][a-zA-Z0-9.]*\\))|(extends\\([a-zA-Z][a-zA-Z0-9.]*\\)))$" - }, - "stringExpression": { - "$role": "expression", - "title": "String or expression", - "description": "Interpolated string or expression to evaluate.", - "oneOf": [ - { - "type": "string", - "title": "String", - "description": "Interpolated string", - "pattern": "^(?!(=)).*", - "examples": [ - "Hello ${user.name}" - ] - }, - { - "$ref": "#/definitions/equalsExpression", - "examples": [ - "=concat('x','y','z')" - ] - } - ] - }, - "valueExpression": { - "$role": "expression", - "title": "Any or expression", - "description": "Any constant or expression to evaluate.", - "oneOf": [ - { - "type": "object", - "title": "Object", - "description": "Object constant." - }, - { - "type": "array", - "title": "Array", - "description": "Array constant." - }, - { - "type": "string", - "title": "String", - "description": "Interpolated string.", - "pattern": "^(?!(=)).*", - "examples": [ - "Hello ${user.name}" - ] - }, - { - "type": "boolean", - "title": "Boolean", - "description": "Boolean constant", - "examples": [ - false - ] - }, - { - "type": "number", - "title": "Number", - "description": "Number constant.", - "examples": [ - 15.5 - ] - }, - { - "$ref": "#/definitions/equalsExpression", - "examples": [ - "=..." - ] - } - ] - }, - "schema": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Core schema meta-schema", - "definitions": { - "schemaArray": { - "type": "array", - "minItems": 1, - "items": { - "$ref": "#/definitions/schema" - } - }, - "nonNegativeInteger": { - "type": "integer", - "minimum": 0 - }, - "nonNegativeIntegerDefault0": { - "type": "integer", - "minimum": 0, - "default": 0 - }, - "simpleTypes": { - "enum": [ - "array", - "boolean", - "integer", - "null", - "number", - "object", - "string" - ] - }, - "stringArray": { - "type": "array", - "uniqueItems": true, - "default": [], - "items": { - "type": "string" - } - } - }, - "type": [ - "object", - "boolean" - ], - "default": true, - "properties": { - "$schema": { - "type": "string", - "format": "uri" - }, - "$ref": { - "type": "string", - "format": "uri-reference" - }, - "$comment": { - "type": "string" - }, - "title": { - "type": "string" - }, - "description": { - "type": "string" - }, - "default": true, - "readOnly": { - "type": "boolean", - "default": false - }, - "writeOnly": { - "type": "boolean", - "default": false - }, - "examples": { - "type": "array", - "items": true - }, - "multipleOf": { - "type": "number", - "exclusiveMinimum": 0 - }, - "maximum": { - "type": "number" - }, - "exclusiveMaximum": { - "type": "number" - }, - "minimum": { - "type": "number" - }, - "exclusiveMinimum": { - "type": "number" - }, - "maxLength": { - "$ref": "#/definitions/schema/definitions/nonNegativeInteger" - }, - "minLength": { - "$ref": "#/definitions/schema/definitions/nonNegativeIntegerDefault0" - }, - "pattern": { - "type": "string", - "format": "regex" - }, - "additionalItems": { - "$ref": "#/definitions/schema" - }, - "items": { - "anyOf": [ - { - "$ref": "#/definitions/schema" - }, - { - "$ref": "#/definitions/schema/definitions/schemaArray" - } - ], - "default": true - }, - "maxItems": { - "$ref": "#/definitions/schema/definitions/nonNegativeInteger" - }, - "minItems": { - "$ref": "#/definitions/schema/definitions/nonNegativeIntegerDefault0" - }, - "uniqueItems": { - "type": "boolean", - "default": false - }, - "contains": { - "$ref": "#/definitions/schema" - }, - "maxProperties": { - "$ref": "#/definitions/schema/definitions/nonNegativeInteger" - }, - "minProperties": { - "$ref": "#/definitions/schema/definitions/nonNegativeIntegerDefault0" - }, - "required": { - "$ref": "#/definitions/schema/definitions/stringArray" - }, - "additionalProperties": { - "$ref": "#/definitions/schema" - }, - "definitions": { - "type": "object", - "default": {}, - "additionalProperties": { - "$ref": "#/definitions/schema" - } - }, - "properties": { - "type": "object", - "default": {}, - "additionalProperties": { - "$ref": "#/definitions/schema" - } - }, - "patternProperties": { - "type": "object", - "propertyNames": { - "format": "regex" - }, - "default": {}, - "additionalProperties": { - "$ref": "#/definitions/schema" - } - }, - "dependencies": { - "type": "object", - "additionalProperties": { - "anyOf": [ - { - "$ref": "#/definitions/schema" - }, - { - "$ref": "#/definitions/schema/definitions/stringArray" - } - ] - } - }, - "propertyNames": { - "$ref": "#/definitions/schema" - }, - "const": true, - "enum": { - "type": "array", - "minItems": 1, - "uniqueItems": true, - "items": true - }, - "type": { - "anyOf": [ - { - "$ref": "#/definitions/schema/definitions/simpleTypes" - }, - { - "type": "array", - "items": { - "$ref": "#/definitions/schema/definitions/simpleTypes" - }, - "minItems": 1, - "uniqueItems": true - } - ] - }, - "format": { - "type": "string" - }, - "contentMediaType": { - "type": "string" - }, - "contentEncoding": { - "type": "string" - }, - "if": { - "$ref": "#/definitions/schema" - }, - "then": { - "$ref": "#/definitions/schema" - }, - "else": { - "$ref": "#/definitions/schema" - }, - "allOf": { - "$ref": "#/definitions/schema/definitions/schemaArray" - }, - "anyOf": { - "$ref": "#/definitions/schema/definitions/schemaArray" - }, - "oneOf": { - "$ref": "#/definitions/schema/definitions/schemaArray" - }, - "not": { - "$ref": "#/definitions/schema" - } - } - }, - "botframework.json": { - "$schema": "http://json-schema.org/draft-07/schema#", - "definitions": { - "ChannelAccount": { - "description": "Channel account information needed to route a message", - "title": "ChannelAccount", - "type": "object", - "required": [ - "id", - "name" - ], - "properties": { - "id": { - "description": "Channel id for the user or bot on this channel (Example: joe@smith.com, or @joesmith or\n123456)", - "type": "string", - "title": "id" - }, - "name": { - "description": "Display friendly name", - "type": "string", - "title": "name" - }, - "aadObjectId": { - "description": "This account's object ID within Azure Active Directory (AAD)", - "type": "string", - "title": "aadObjectId" - }, - "role": { - "description": "Role of the entity behind the account (Example: User, Bot, etc.). Possible values include:\n'user', 'bot'", - "type": "string", - "title": "role" - } - } - }, - "ConversationAccount": { - "description": "Channel account information for a conversation", - "title": "ConversationAccount", - "type": "object", - "required": [ - "conversationType", - "id", - "isGroup", - "name" - ], - "properties": { - "isGroup": { - "description": "Indicates whether the conversation contains more than two participants at the time the\nactivity was generated", - "type": "boolean", - "title": "isGroup" - }, - "conversationType": { - "description": "Indicates the type of the conversation in channels that distinguish between conversation types", - "type": "string", - "title": "conversationType" - }, - "id": { - "description": "Channel id for the user or bot on this channel (Example: joe@smith.com, or @joesmith or\n123456)", - "type": "string", - "title": "id" - }, - "name": { - "description": "Display friendly name", - "type": "string", - "title": "name" - }, - "aadObjectId": { - "description": "This account's object ID within Azure Active Directory (AAD)", - "type": "string", - "title": "aadObjectId" - }, - "role": { - "description": "Role of the entity behind the account (Example: User, Bot, etc.). Possible values include:\n'user', 'bot'", - "enum": [ - "bot", - "user" - ], - "type": "string", - "title": "role" - } - } - }, - "MessageReaction": { - "description": "Message reaction object", - "title": "MessageReaction", - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "description": "Message reaction type. Possible values include: 'like', 'plusOne'", - "type": "string", - "title": "type" - } - } - }, - "CardAction": { - "description": "A clickable action", - "title": "CardAction", - "type": "object", - "required": [ - "title", - "type", - "value" - ], - "properties": { - "type": { - "description": "The type of action implemented by this button. Possible values include: 'openUrl', 'imBack',\n'postBack', 'playAudio', 'playVideo', 'showImage', 'downloadFile', 'signin', 'call',\n'payment', 'messageBack'", - "type": "string", - "title": "type" - }, - "title": { - "description": "Text description which appears on the button", - "type": "string", - "title": "title" - }, - "image": { - "description": "Image URL which will appear on the button, next to text label", - "type": "string", - "title": "image" - }, - "text": { - "description": "Text for this action", - "type": "string", - "title": "text" - }, - "displayText": { - "description": "(Optional) text to display in the chat feed if the button is clicked", - "type": "string", - "title": "displayText" - }, - "value": { - "description": "Supplementary parameter for action. Content of this property depends on the ActionType", - "title": "value" - }, - "channelData": { - "description": "Channel-specific data associated with this action", - "title": "channelData" - } - } - }, - "SuggestedActions": { - "description": "SuggestedActions that can be performed", - "title": "SuggestedActions", - "type": "object", - "required": [ - "actions", - "to" - ], - "properties": { - "to": { - "description": "Ids of the recipients that the actions should be shown to. These Ids are relative to the\nchannelId and a subset of all recipients of the activity", - "type": "array", - "title": "to", - "items": { - "title": "Id", - "description": "Id of recipient.", - "type": "string" - } - }, - "actions": { - "description": "Actions that can be shown to the user", - "type": "array", - "title": "actions", - "items": { - "$ref": "#/definitions/botframework.json/definitions/CardAction" - } - } - } - }, - "Attachment": { - "description": "An attachment within an activity", - "title": "Attachment", - "type": "object", - "required": [ - "contentType" - ], - "properties": { - "contentType": { - "description": "mimetype/Contenttype for the file", - "type": "string", - "title": "contentType" - }, - "contentUrl": { - "description": "Content Url", - "type": "string", - "title": "contentUrl" - }, - "content": { - "type": "object", - "description": "Embedded content", - "title": "content" - }, - "name": { - "description": "(OPTIONAL) The name of the attachment", - "type": "string", - "title": "name" - }, - "thumbnailUrl": { - "description": "(OPTIONAL) Thumbnail associated with attachment", - "type": "string", - "title": "thumbnailUrl" - } - } - }, - "Entity": { - "description": "Metadata object pertaining to an activity", - "title": "Entity", - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "description": "Type of this entity (RFC 3987 IRI)", - "type": "string", - "title": "type" - } - } - }, - "ConversationReference": { - "description": "An object relating to a particular point in a conversation", - "title": "ConversationReference", - "type": "object", - "required": [ - "bot", - "channelId", - "conversation", - "serviceUrl" - ], - "properties": { - "activityId": { - "description": "(Optional) ID of the activity to refer to", - "type": "string", - "title": "activityId" - }, - "user": { - "description": "(Optional) User participating in this conversation", - "$ref": "#/definitions/botframework.json/definitions/ChannelAccount", - "title": "user" - }, - "bot": { - "$ref": "#/definitions/botframework.json/definitions/ChannelAccount", - "description": "Bot participating in this conversation", - "title": "bot" - }, - "conversation": { - "$ref": "#/definitions/botframework.json/definitions/ConversationAccount", - "description": "Conversation reference", - "title": "conversation" - }, - "channelId": { - "description": "Channel ID", - "type": "string", - "title": "channelId" - }, - "serviceUrl": { - "description": "Service endpoint where operations concerning the referenced conversation may be performed", - "type": "string", - "title": "serviceUrl" - } - } - }, - "TextHighlight": { - "description": "Refers to a substring of content within another field", - "title": "TextHighlight", - "type": "object", - "required": [ - "occurrence", - "text" - ], - "properties": { - "text": { - "description": "Defines the snippet of text to highlight", - "type": "string", - "title": "text" - }, - "occurrence": { - "description": "Occurrence of the text field within the referenced text, if multiple exist.", - "type": "number", - "title": "occurrence" - } - } - }, - "SemanticAction": { - "description": "Represents a reference to a programmatic action", - "title": "SemanticAction", - "type": "object", - "required": [ - "entities", - "id" - ], - "properties": { - "id": { - "description": "ID of this action", - "type": "string", - "title": "id" - }, - "entities": { - "description": "Entities associated with this action", - "type": "object", - "title": "entities", - "additionalProperties": { - "$ref": "#/definitions/botframework.json/definitions/Entity" - } - } - } - }, - "Activity": { - "description": "An Activity is the basic communication type for the Bot Framework 3.0 protocol.", - "title": "Activity", - "type": "object", - "properties": { - "type": { - "description": "Contains the activity type. Possible values include: 'message', 'contactRelationUpdate',\n'conversationUpdate', 'typing', 'endOfConversation', 'event', 'invoke', 'deleteUserData',\n'messageUpdate', 'messageDelete', 'installationUpdate', 'messageReaction', 'suggestion',\n'trace', 'handoff'", - "type": "string", - "title": "type" - }, - "id": { - "description": "Contains an ID that uniquely identifies the activity on the channel.", - "type": "string", - "title": "id" - }, - "timestamp": { - "description": "Contains the date and time that the message was sent, in UTC, expressed in ISO-8601 format.", - "type": "string", - "format": "date-time", - "title": "timestamp" - }, - "localTimestamp": { - "description": "Contains the date and time that the message was sent, in local time, expressed in ISO-8601\nformat.\nFor example, 2016-09-23T13:07:49.4714686-07:00.", - "type": "string", - "format": "date-time", - "title": "localTimestamp" - }, - "localTimezone": { - "description": "Contains the name of the timezone in which the message, in local time, expressed in IANA Time\nZone database format.\nFor example, America/Los_Angeles.", - "type": "string", - "title": "localTimezone" - }, - "serviceUrl": { - "description": "Contains the URL that specifies the channel's service endpoint. Set by the channel.", - "type": "string", - "title": "serviceUrl" - }, - "channelId": { - "description": "Contains an ID that uniquely identifies the channel. Set by the channel.", - "type": "string", - "title": "channelId" - }, - "from": { - "$ref": "#/definitions/botframework.json/definitions/ChannelAccount", - "description": "Identifies the sender of the message.", - "title": "from" - }, - "conversation": { - "$ref": "#/definitions/botframework.json/definitions/ConversationAccount", - "description": "Identifies the conversation to which the activity belongs.", - "title": "conversation" - }, - "recipient": { - "$ref": "#/definitions/botframework.json/definitions/ChannelAccount", - "description": "Identifies the recipient of the message.", - "title": "recipient" - }, - "textFormat": { - "description": "Format of text fields Default:markdown. Possible values include: 'markdown', 'plain', 'xml'", - "type": "string", - "title": "textFormat" - }, - "attachmentLayout": { - "description": "The layout hint for multiple attachments. Default: list. Possible values include: 'list',\n'carousel'", - "type": "string", - "title": "attachmentLayout" - }, - "membersAdded": { - "description": "The collection of members added to the conversation.", - "type": "array", - "title": "membersAdded", - "items": { - "$ref": "#/definitions/botframework.json/definitions/ChannelAccount" - } - }, - "membersRemoved": { - "description": "The collection of members removed from the conversation.", - "type": "array", - "title": "membersRemoved", - "items": { - "$ref": "#/definitions/botframework.json/definitions/ChannelAccount" - } - }, - "reactionsAdded": { - "description": "The collection of reactions added to the conversation.", - "type": "array", - "title": "reactionsAdded", - "items": { - "$ref": "#/definitions/botframework.json/definitions/MessageReaction" - } - }, - "reactionsRemoved": { - "description": "The collection of reactions removed from the conversation.", - "type": "array", - "title": "reactionsRemoved", - "items": { - "$ref": "#/definitions/botframework.json/definitions/MessageReaction" - } - }, - "topicName": { - "description": "The updated topic name of the conversation.", - "type": "string", - "title": "topicName" - }, - "historyDisclosed": { - "description": "Indicates whether the prior history of the channel is disclosed.", - "type": "boolean", - "title": "historyDisclosed" - }, - "locale": { - "description": "A locale name for the contents of the text field.\nThe locale name is a combination of an ISO 639 two- or three-letter culture code associated\nwith a language\nand an ISO 3166 two-letter subculture code associated with a country or region.\nThe locale name can also correspond to a valid BCP-47 language tag.", - "type": "string", - "title": "locale" - }, - "text": { - "description": "The text content of the message.", - "type": "string", - "title": "text" - }, - "speak": { - "description": "The text to speak.", - "type": "string", - "title": "speak" - }, - "inputHint": { - "description": "Indicates whether your bot is accepting,\nexpecting, or ignoring user input after the message is delivered to the client. Possible\nvalues include: 'acceptingInput', 'ignoringInput', 'expectingInput'", - "type": "string", - "title": "inputHint" - }, - "summary": { - "description": "The text to display if the channel cannot render cards.", - "type": "string", - "title": "summary" - }, - "suggestedActions": { - "description": "The suggested actions for the activity.", - "$ref": "#/definitions/botframework.json/definitions/SuggestedActions", - "title": "suggestedActions" - }, - "attachments": { - "description": "Attachments", - "type": "array", - "title": "attachments", - "items": { - "$ref": "#/definitions/botframework.json/definitions/Attachment" - } - }, - "entities": { - "description": "Represents the entities that were mentioned in the message.", - "type": "array", - "title": "entities", - "items": { - "$ref": "#/definitions/botframework.json/definitions/Entity" - } - }, - "channelData": { - "description": "Contains channel-specific content.", - "title": "channelData" - }, - "action": { - "description": "Indicates whether the recipient of a contactRelationUpdate was added or removed from the\nsender's contact list.", - "type": "string", - "title": "action" - }, - "replyToId": { - "description": "Contains the ID of the message to which this message is a reply.", - "type": "string", - "title": "replyToId" - }, - "label": { - "description": "A descriptive label for the activity.", - "type": "string", - "title": "label" - }, - "valueType": { - "description": "The type of the activity's value object.", - "type": "string", - "title": "valueType" - }, - "value": { - "description": "A value that is associated with the activity.", - "title": "value" - }, - "name": { - "description": "The name of the operation associated with an invoke or event activity.", - "type": "string", - "title": "name" - }, - "relatesTo": { - "description": "A reference to another conversation or activity.", - "$ref": "#/definitions/botframework.json/definitions/ConversationReference", - "title": "relatesTo" - }, - "code": { - "description": "The a code for endOfConversation activities that indicates why the conversation ended.\nPossible values include: 'unknown', 'completedSuccessfully', 'userCancelled', 'botTimedOut',\n'botIssuedInvalidMessage', 'channelFailed'", - "type": "string", - "title": "code" - }, - "expiration": { - "description": "The time at which the activity should be considered to be \"expired\" and should not be\npresented to the recipient.", - "type": "string", - "format": "date-time", - "title": "expiration" - }, - "importance": { - "description": "The importance of the activity. Possible values include: 'low', 'normal', 'high'", - "type": "string", - "title": "importance" - }, - "deliveryMode": { - "description": "A delivery hint to signal to the recipient alternate delivery paths for the activity.\nThe default delivery mode is \"default\". Possible values include: 'normal', 'notification'", - "type": "string", - "title": "deliveryMode" - }, - "listenFor": { - "description": "List of phrases and references that speech and language priming systems should listen for", - "type": "array", - "title": "listenFor", - "items": { - "type": "string", - "title": "Phrase", - "description": "Phrase to listen for." - } - }, - "textHighlights": { - "description": "The collection of text fragments to highlight when the activity contains a ReplyToId value.", - "type": "array", - "title": "textHighlights", - "items": { - "$ref": "#/definitions/botframework.json/definitions/TextHighlight" - } - }, - "semanticAction": { - "$ref": "#/definitions/botframework.json/definitions/SemanticAction", - "description": "An optional programmatic action accompanying this request", - "title": "semanticAction" - } - } - } - } - } - } -} diff --git a/Orchestrator/Samples/Composer/OrchestratorDispatch/schemas/sdk.uischema b/Orchestrator/Samples/Composer/OrchestratorDispatch/schemas/sdk.uischema deleted file mode 100644 index 9cf19c6919..0000000000 --- a/Orchestrator/Samples/Composer/OrchestratorDispatch/schemas/sdk.uischema +++ /dev/null @@ -1,1409 +0,0 @@ -{ - "$schema": "https://schemas.botframework.com/schemas/ui/v1.0/ui.schema", - "Microsoft.AdaptiveDialog": { - "form": { - "description": "This configures a data driven dialog via a collection of events and actions.", - "helpLink": "https://aka.ms/bf-composer-docs-dialog", - "hidden": [ - "triggers", - "generator", - "selector", - "schema" - ], - "label": "Adaptive dialog", - "order": [ - "recognizer", - "*" - ], - "properties": { - "recognizer": { - "description": "To understand what the user says, your dialog needs a \"Recognizer\"; that includes example words and sentences that users may use.", - "label": "Language Understanding" - } - } - } - }, - "Microsoft.Ask": { - "flow": { - "body": { - "field": "activity", - "widget": "LgWidget" - }, - "footer": { - "description": "= Default operation", - "property": "=action.defaultOperation", - "widget": "PropertyDescription" - }, - "header": { - "colors": { - "icon": "#5C2E91", - "theme": "#EEEAF4" - }, - "icon": "MessageBot", - "widget": "ActionHeader" - }, - "hideFooter": "=!action.defaultOperation", - "widget": "ActionCard" - }, - "form": { - "helpLink": "https://aka.ms/bfc-send-activity", - "label": "Send a response to ask a question", - "order": [ - "activity", - "*" - ], - "subtitle": "Ask Activity" - } - }, - "Microsoft.AttachmentInput": { - "flow": { - "body": "=action.prompt", - "botAsks": { - "body": { - "defaultContent": "", - "field": "prompt", - "widget": "LgWidget" - }, - "header": { - "colors": { - "icon": "#5C2E91", - "theme": "#EEEAF4" - }, - "icon": "MessageBot", - "widget": "ActionHeader" - }, - "widget": "ActionCard" - }, - "nowrap": true, - "userInput": { - "header": { - "colors": { - "icon": "#0078D4", - "theme": "#E5F0FF" - }, - "disableSDKTitle": true, - "icon": "User", - "menu": "none", - "widget": "ActionHeader" - }, - "widget": "ActionCard" - }, - "widget": "PromptWidget" - }, - "form": { - "helpLink": "https://aka.ms/bfc-ask-for-user-input", - "label": "Prompt for a file or an attachment", - "properties": { - "property": { - "intellisenseScopes": [ - "variable-scopes" - ] - } - }, - "subtitle": "Attachment Input" - } - }, - "Microsoft.BeginDialog": { - "flow": { - "body": { - "dialog": "=action.dialog", - "widget": "DialogRef" - }, - "footer": { - "description": "= Return value", - "property": "=action.resultProperty", - "widget": "PropertyDescription" - }, - "hideFooter": "=!action.resultProperty", - "widget": "ActionCard" - }, - "form": { - "helpLink": "https://aka.ms/bfc-understanding-dialogs", - "label": "Begin a new dialog", - "order": [ - "dialog", - "options", - "resultProperty", - "*" - ], - "properties": { - "resultProperty": { - "intellisenseScopes": [ - "variable-scopes" - ] - } - }, - "subtitle": "Begin Dialog" - } - }, - "Microsoft.BeginSkill": { - "flow": { - "body": { - "operation": "Host", - "resource": "=coalesce(action.skillEndpoint, \"?\")", - "singleline": true, - "widget": "ResourceOperation" - }, - "colors": { - "color": "#FFFFFF", - "icon": "#FFFFFF", - "theme": "#004578" - }, - "footer": { - "description": "= Result", - "property": "=action.resultProperty", - "widget": "PropertyDescription" - }, - "hideFooter": "=!action.resultProperty", - "icon": "Library", - "widget": "ActionCard" - }, - "form": { - "helpLink": "https://aka.ms/bf-composer-docs-connect-skill", - "label": "Connect to a skill", - "properties": { - "resultProperty": { - "intellisenseScopes": [ - "variable-scopes" - ] - } - }, - "subtitle": "Skill Dialog" - } - }, - "Microsoft.BreakLoop": { - "form": { - "label": "Break out of loop", - "subtitle": "Break out of loop" - } - }, - "Microsoft.CancelAllDialogs": { - "flow": { - "body": { - "description": "(Event)", - "property": "=coalesce(action.eventName, \"?\")", - "widget": "PropertyDescription" - }, - "widget": "ActionCard" - }, - "form": { - "helpLink": "https://aka.ms/bfc-understanding-dialogs", - "label": "Cancel all active dialogs", - "subtitle": "Cancel All Dialogs" - } - }, - "Microsoft.ChoiceInput": { - "flow": { - "body": "=action.prompt", - "botAsks": { - "body": { - "defaultContent": "", - "field": "prompt", - "widget": "LgWidget" - }, - "header": { - "colors": { - "icon": "#5C2E91", - "theme": "#EEEAF4" - }, - "icon": "MessageBot", - "widget": "ActionHeader" - }, - "widget": "ActionCard" - }, - "nowrap": true, - "userInput": { - "header": { - "colors": { - "icon": "#0078D4", - "theme": "#E5F0FF" - }, - "disableSDKTitle": true, - "icon": "User", - "menu": "none", - "widget": "ActionHeader" - }, - "widget": "ActionCard" - }, - "widget": "PromptWidget" - }, - "form": { - "helpLink": "https://aka.ms/bfc-ask-for-user-input", - "label": "Prompt with multi-choice", - "properties": { - "property": { - "intellisenseScopes": [ - "variable-scopes" - ] - } - }, - "subtitle": "Choice Input" - } - }, - "Microsoft.ConfirmInput": { - "flow": { - "body": "=action.prompt", - "botAsks": { - "body": { - "defaultContent": "", - "field": "prompt", - "widget": "LgWidget" - }, - "header": { - "colors": { - "icon": "#5C2E91", - "theme": "#EEEAF4" - }, - "icon": "MessageBot", - "widget": "ActionHeader" - }, - "widget": "ActionCard" - }, - "nowrap": true, - "userInput": { - "header": { - "colors": { - "icon": "#0078D4", - "theme": "#E5F0FF" - }, - "disableSDKTitle": true, - "icon": "User", - "menu": "none", - "widget": "ActionHeader" - }, - "widget": "ActionCard" - }, - "widget": "PromptWidget" - }, - "form": { - "helpLink": "https://aka.ms/bfc-ask-for-user-input", - "label": "Prompt for confirmation", - "properties": { - "property": { - "intellisenseScopes": [ - "variable-scopes" - ] - } - }, - "subtitle": "Confirm Input" - } - }, - "Microsoft.ContinueLoop": { - "form": { - "label": "Continue loop", - "subtitle": "Continue loop" - } - }, - "Microsoft.DateTimeInput": { - "flow": { - "body": "=action.prompt", - "botAsks": { - "body": { - "defaultContent": "", - "field": "prompt", - "widget": "LgWidget" - }, - "header": { - "colors": { - "icon": "#5C2E91", - "theme": "#EEEAF4" - }, - "icon": "MessageBot", - "widget": "ActionHeader" - }, - "widget": "ActionCard" - }, - "nowrap": true, - "userInput": { - "header": { - "colors": { - "icon": "#0078D4", - "theme": "#E5F0FF" - }, - "disableSDKTitle": true, - "icon": "User", - "menu": "none", - "widget": "ActionHeader" - }, - "widget": "ActionCard" - }, - "widget": "PromptWidget" - }, - "form": { - "helpLink": "https://aka.ms/bfc-ask-for-user-input", - "label": "Prompt for a date or a time", - "properties": { - "property": { - "intellisenseScopes": [ - "variable-scopes" - ] - } - }, - "subtitle": "Date Time Input" - } - }, - "Microsoft.DebugBreak": { - "form": { - "label": "Debug Break" - } - }, - "Microsoft.DeleteProperties": { - "flow": { - "body": { - "items": "=action.properties", - "widget": "ListOverview" - }, - "widget": "ActionCard" - }, - "form": { - "helpLink": "https://aka.ms/bfc-using-memory", - "label": "Delete properties", - "properties": { - "properties": { - "intellisenseScopes": [ - "user-variables" - ] - } - }, - "subtitle": "Delete Properties" - } - }, - "Microsoft.DeleteProperty": { - "flow": { - "body": "=action.property", - "widget": "ActionCard" - }, - "form": { - "helpLink": "https://aka.ms/bfc-using-memory", - "label": "Delete a property", - "properties": { - "property": { - "intellisenseScopes": [ - "user-variables" - ] - } - }, - "subtitle": "Delete Property" - } - }, - "Microsoft.EditActions": { - "flow": { - "body": "=action.changeType", - "widget": "ActionCard" - }, - "form": { - "label": "Modify active dialog", - "subtitle": "Edit Actions" - } - }, - "Microsoft.EditArray": { - "flow": { - "body": { - "operation": "=coalesce(action.changeType, \"?\")", - "resource": "=coalesce(action.itemsProperty, \"?\")", - "widget": "ResourceOperation" - }, - "footer": { - "description": "= Result", - "property": "=action.resultProperty", - "widget": "PropertyDescription" - }, - "hideFooter": "=!action.resultProperty", - "widget": "ActionCard" - }, - "form": { - "helpLink": "https://aka.ms/bfc-using-memory", - "label": "Edit an array property", - "properties": { - "itemsProperty": { - "intellisenseScopes": [ - "user-variables" - ] - }, - "resultProperty": { - "intellisenseScopes": [ - "variable-scopes" - ] - } - }, - "subtitle": "Edit Array" - } - }, - "Microsoft.EmitEvent": { - "flow": { - "body": { - "description": "(Event)", - "property": "=coalesce(action.eventName, \"?\")", - "widget": "PropertyDescription" - }, - "widget": "ActionCard" - }, - "form": { - "helpLink": "https://aka.ms/bfc-custom-events", - "label": "Emit a custom event", - "subtitle": "Emit Event" - } - }, - "Microsoft.EndDialog": { - "form": { - "helpLink": "https://aka.ms/bfc-understanding-dialogs", - "label": "End this dialog", - "subtitle": "End Dialog" - } - }, - "Microsoft.EndTurn": { - "form": { - "helpLink": "https://aka.ms/bfc-understanding-dialogs", - "label": "End turn", - "subtitle": "End Turn" - } - }, - "Microsoft.Foreach": { - "flow": { - "loop": { - "body": "=concat(\"Each value in \", coalesce(action.itemsProperty, \"?\"))", - "widget": "ActionCard" - }, - "nowrap": true, - "widget": "ForeachWidget" - }, - "form": { - "helpLink": "https://aka.ms/bfc-controlling-conversation-flow", - "hidden": [ - "actions" - ], - "label": "Loop: For each item", - "order": [ - "itemsProperty", - "*" - ], - "properties": { - "index": { - "intellisenseScopes": [ - "variable-scopes" - ] - }, - "itemsProperty": { - "intellisenseScopes": [ - "user-variables" - ] - }, - "value": { - "intellisenseScopes": [ - "variable-scopes" - ] - } - }, - "subtitle": "For Each" - } - }, - "Microsoft.ForeachPage": { - "flow": { - "loop": { - "body": "=concat(\"Each page of \", coalesce(action.pageSize, \"?\"), \" in \", coalesce(action.page, \"?\"))", - "widget": "ActionCard" - }, - "nowrap": true, - "widget": "ForeachWidget" - }, - "form": { - "helpLink": "https://aka.ms/bfc-controlling-conversation-flow", - "hidden": [ - "actions" - ], - "label": "Loop: For each page (multiple items)", - "order": [ - "itemsProperty", - "pageSize", - "*" - ], - "properties": { - "itemsProperty": { - "intellisenseScopes": [ - "user-variables" - ] - }, - "page": { - "intellisenseScopes": [ - "variable-scopes" - ] - }, - "pageIndex": { - "intellisenseScopes": [ - "variable-scopes" - ] - } - }, - "subtitle": "For Each Page" - } - }, - "Microsoft.GetActivityMembers": { - "flow": { - "body": { - "description": "= ActivityId", - "property": "=coalesce(action.activityId, \"?\")", - "widget": "PropertyDescription" - }, - "footer": { - "description": "= Result property", - "property": "=coalesce(action.property, \"?\")", - "widget": "PropertyDescription" - }, - "widget": "ActionCard" - } - }, - "Microsoft.GetConversationMembers": { - "flow": { - "footer": { - "description": "= Result property", - "property": "=action.property", - "widget": "PropertyDescription" - }, - "widget": "ActionCard" - } - }, - "Microsoft.HttpRequest": { - "flow": { - "body": { - "operation": "=action.method", - "resource": "=action.url", - "singleline": true, - "widget": "ResourceOperation" - }, - "footer": { - "description": "= Result property", - "property": "=action.resultProperty", - "widget": "PropertyDescription" - }, - "hideFooter": "=!action.resultProperty", - "widget": "ActionCard" - }, - "form": { - "helpLink": "https://aka.ms/bfc-using-http", - "label": "Send an HTTP request", - "order": [ - "method", - "url", - "body", - "headers", - "*" - ], - "properties": { - "resultProperty": { - "intellisenseScopes": [ - "variable-scopes" - ] - } - }, - "subtitle": "HTTP Request" - } - }, - "Microsoft.IfCondition": { - "flow": { - "judgement": { - "body": "=coalesce(action.condition, \"\")", - "widget": "ActionCard" - }, - "nowrap": true, - "widget": "IfConditionWidget" - }, - "form": { - "helpLink": "https://aka.ms/bfc-controlling-conversation-flow", - "hidden": [ - "actions", - "elseActions" - ], - "label": "Branch: If/Else", - "subtitle": "If Condition" - } - }, - "Microsoft.LogAction": { - "form": { - "helpLink": "https://aka.ms/composer-telemetry", - "label": "Log to console", - "subtitle": "Log Action" - } - }, - "Microsoft.NumberInput": { - "flow": { - "body": "=action.prompt", - "botAsks": { - "body": { - "defaultContent": "", - "field": "prompt", - "widget": "LgWidget" - }, - "header": { - "colors": { - "icon": "#5C2E91", - "theme": "#EEEAF4" - }, - "icon": "MessageBot", - "widget": "ActionHeader" - }, - "widget": "ActionCard" - }, - "nowrap": true, - "userInput": { - "header": { - "colors": { - "icon": "#0078D4", - "theme": "#E5F0FF" - }, - "disableSDKTitle": true, - "icon": "User", - "menu": "none", - "widget": "ActionHeader" - }, - "widget": "ActionCard" - }, - "widget": "PromptWidget" - }, - "form": { - "helpLink": "https://aka.ms/bfc-ask-for-user-input", - "label": "Prompt for a number", - "properties": { - "property": { - "intellisenseScopes": [ - "variable-scopes" - ] - } - }, - "subtitle": "Number Input" - } - }, - "Microsoft.OAuthInput": { - "flow": { - "body": { - "operation": "Connection", - "resource": "=coalesce(action.connectionName, \"?\")", - "singleline": true, - "widget": "ResourceOperation" - }, - "footer": { - "description": "= Token property", - "property": "=action.property", - "widget": "PropertyDescription" - }, - "hideFooter": "=!action.property", - "widget": "ActionCard" - }, - "form": { - "helpLink": "https://aka.ms/bfc-using-oauth", - "label": "OAuth login", - "order": [ - "connectionName", - "*" - ], - "subtitle": "OAuth Input" - } - }, - "Microsoft.OnActivity": { - "form": { - "hidden": [ - "actions" - ], - "label": "Activities", - "order": [ - "condition", - "*" - ], - "subtitle": "Activity received" - }, - "trigger": { - "label": "Activities (Activity received)", - "order": 5.1, - "submenu": { - "label": "Activities", - "placeholder": "Select an activity type", - "prompt": "Which activity type?" - } - } - }, - "Microsoft.OnAssignEntity": { - "form": { - "hidden": [ - "actions" - ], - "label": "Handle a condition when an entity is assigned", - "order": [ - "condition", - "*" - ], - "subtitle": "EntityAssigned activity" - } - }, - "Microsoft.OnBeginDialog": { - "form": { - "hidden": [ - "actions" - ], - "label": "Dialog started", - "order": [ - "condition", - "*" - ], - "subtitle": "Begin dialog event" - }, - "trigger": { - "label": "Dialog started (Begin dialog event)", - "order": 4.1, - "submenu": { - "label": "Dialog events", - "placeholder": "Select an event type", - "prompt": "Which event?" - } - } - }, - "Microsoft.OnCancelDialog": { - "form": { - "hidden": [ - "actions" - ], - "label": "Dialog cancelled", - "order": [ - "condition", - "*" - ], - "subtitle": "Cancel dialog event" - }, - "trigger": { - "label": "Dialog cancelled (Cancel dialog event)", - "order": 4.2, - "submenu": "Dialog events" - } - }, - "Microsoft.OnChooseEntity": { - "form": { - "hidden": [ - "actions" - ], - "order": [ - "condition", - "*" - ] - } - }, - "Microsoft.OnChooseIntent": { - "form": { - "hidden": [ - "actions" - ], - "order": [ - "condition", - "*" - ] - }, - "trigger": { - "label": "Duplicated intents recognized", - "order": 6 - } - }, - "Microsoft.OnCommandActivity": { - "form": { - "hidden": [ - "actions" - ], - "label": "Command received", - "order": [ - "condition", - "*" - ], - "subtitle": "Command activity received" - }, - "trigger": { - "label": "Command received (Command activity received)", - "order": 5.81, - "submenu": "Activities" - } - }, - "Microsoft.OnCommandResultActivity": { - "form": { - "hidden": [ - "actions" - ], - "label": "Command Result received", - "order": [ - "condition", - "*" - ], - "subtitle": "Command Result activity received" - }, - "trigger": { - "label": "Command Result received (Command Result activity received)", - "order": 5.81, - "submenu": "Activities" - } - }, - "Microsoft.OnCondition": { - "form": { - "hidden": [ - "actions" - ], - "label": "Handle a condition", - "order": [ - "condition", - "*" - ], - "subtitle": "Condition" - } - }, - "Microsoft.OnConversationUpdateActivity": { - "form": { - "description": "Handle the events fired when a user begins a new conversation with the bot.", - "helpLink": "https://aka.ms/bf-composer-docs-conversation-update-activity", - "hidden": [ - "actions" - ], - "label": "Greeting", - "order": [ - "condition", - "*" - ], - "subtitle": "ConversationUpdate activity" - }, - "trigger": { - "label": "Greeting (ConversationUpdate activity)", - "order": 5.2, - "submenu": "Activities" - } - }, - "Microsoft.OnDialogEvent": { - "form": { - "hidden": [ - "actions" - ], - "label": "Dialog events", - "order": [ - "condition", - "*" - ], - "subtitle": "Dialog event" - }, - "trigger": { - "label": "Custom events", - "order": 7 - } - }, - "Microsoft.OnEndOfActions": { - "form": { - "hidden": [ - "actions" - ], - "label": "Handle a condition when actions have ended", - "order": [ - "condition", - "*" - ], - "subtitle": "EndOfActions activity" - } - }, - "Microsoft.OnEndOfConversationActivity": { - "form": { - "hidden": [ - "actions" - ], - "label": "Conversation ended", - "order": [ - "condition", - "*" - ], - "subtitle": "EndOfConversation activity" - }, - "trigger": { - "label": "Conversation ended (EndOfConversation activity)", - "order": 5.3, - "submenu": "Activities" - } - }, - "Microsoft.OnError": { - "form": { - "hidden": [ - "actions" - ], - "label": "Error occurred", - "order": [ - "condition", - "*" - ], - "subtitle": "Error event" - }, - "trigger": { - "label": "Error occurred (Error event)", - "order": 4.3, - "submenu": "Dialog events" - } - }, - "Microsoft.OnEventActivity": { - "form": { - "hidden": [ - "actions" - ], - "label": "Event received", - "order": [ - "condition", - "*" - ], - "subtitle": "Event activity" - }, - "trigger": { - "label": "Event received (Event activity)", - "order": 5.4, - "submenu": "Activities" - } - }, - "Microsoft.OnHandoffActivity": { - "form": { - "hidden": [ - "actions" - ], - "label": "Handover to human", - "order": [ - "condition", - "*" - ], - "subtitle": "Handoff activity" - }, - "trigger": { - "label": "Handover to human (Handoff activity)", - "order": 5.5, - "submenu": "Activities" - } - }, - "Microsoft.OnInstallationUpdateActivity": { - "form": { - "hidden": [ - "actions" - ], - "label": "Installation updated", - "order": [ - "condition", - "*" - ], - "subtitle": "Installation updated activity" - } - }, - "Microsoft.OnIntent": { - "form": { - "hidden": [ - "actions" - ], - "label": "Intent recognized", - "order": [ - "intent", - "condition", - "entities", - "*" - ], - "subtitle": "Intent recognized" - }, - "trigger": { - "label": "Intent recognized", - "order": 1 - } - }, - "Microsoft.OnInvokeActivity": { - "form": { - "hidden": [ - "actions" - ], - "label": "Conversation invoked", - "order": [ - "condition", - "*" - ], - "subtitle": "Invoke activity" - }, - "trigger": { - "label": "Conversation invoked (Invoke activity)", - "order": 5.6, - "submenu": "Activities" - } - }, - "Microsoft.OnMessageActivity": { - "form": { - "hidden": [ - "actions" - ], - "label": "Message received", - "order": [ - "condition", - "*" - ], - "subtitle": "Message activity received" - }, - "trigger": { - "label": "Message received (Message activity received)", - "order": 5.81, - "submenu": "Activities" - } - }, - "Microsoft.OnMessageDeleteActivity": { - "form": { - "hidden": [ - "actions" - ], - "label": "Message deleted", - "order": [ - "condition", - "*" - ], - "subtitle": "Message deleted activity" - }, - "trigger": { - "label": "Message deleted (Message deleted activity)", - "order": 5.82, - "submenu": "Activities" - } - }, - "Microsoft.OnMessageReactionActivity": { - "form": { - "hidden": [ - "actions" - ], - "label": "Message reaction", - "order": [ - "condition", - "*" - ], - "subtitle": "Message reaction activity" - }, - "trigger": { - "label": "Message reaction (Message reaction activity)", - "order": 5.83, - "submenu": "Activities" - } - }, - "Microsoft.OnMessageUpdateActivity": { - "form": { - "hidden": [ - "actions" - ], - "label": "Message updated", - "order": [ - "condition", - "*" - ], - "subtitle": "Message updated activity" - }, - "trigger": { - "label": "Message updated (Message updated activity)", - "order": 5.84, - "submenu": "Activities" - } - }, - "Microsoft.OnQnAMatch": { - "trigger": { - "label": "QnA Intent recognized", - "order": 2 - } - }, - "Microsoft.OnRepromptDialog": { - "form": { - "hidden": [ - "actions" - ], - "label": "Re-prompt for input", - "order": [ - "condition", - "*" - ], - "subtitle": "Reprompt dialog event" - }, - "trigger": { - "label": "Re-prompt for input (Reprompt dialog event)", - "order": 4.4, - "submenu": "Dialog events" - } - }, - "Microsoft.OnTypingActivity": { - "form": { - "hidden": [ - "actions" - ], - "label": "User is typing", - "order": [ - "condition", - "*" - ], - "subtitle": "Typing activity" - }, - "trigger": { - "label": "User is typing (Typing activity)", - "order": 5.7, - "submenu": "Activities" - } - }, - "Microsoft.OnUnknownIntent": { - "form": { - "hidden": [ - "actions" - ], - "label": "Unknown intent", - "order": [ - "condition", - "*" - ], - "subtitle": "Unknown intent recognized" - }, - "trigger": { - "label": "Unknown intent", - "order": 3 - } - }, - "Microsoft.QnAMakerDialog": { - "flow": { - "body": "=action.hostname", - "widget": "ActionCard" - } - }, - "Microsoft.RegexRecognizer": { - "form": { - "hidden": [ - "entities" - ] - } - }, - "Microsoft.RepeatDialog": { - "form": { - "helpLink": "https://aka.ms/bfc-understanding-dialogs", - "label": "Repeat this dialog", - "order": [ - "options", - "*" - ], - "subtitle": "Repeat Dialog" - } - }, - "Microsoft.ReplaceDialog": { - "flow": { - "body": { - "dialog": "=action.dialog", - "widget": "DialogRef" - }, - "widget": "ActionCard" - }, - "form": { - "helpLink": "https://aka.ms/bfc-understanding-dialogs", - "label": "Replace this dialog", - "order": [ - "dialog", - "options", - "*" - ], - "subtitle": "Replace Dialog" - } - }, - "Microsoft.SendActivity": { - "flow": { - "body": { - "field": "activity", - "widget": "LgWidget" - }, - "header": { - "colors": { - "icon": "#5C2E91", - "theme": "#EEEAF4" - }, - "icon": "MessageBot", - "widget": "ActionHeader" - }, - "widget": "ActionCard" - }, - "form": { - "helpLink": "https://aka.ms/bfc-send-activity", - "label": "Send a response", - "order": [ - "activity", - "*" - ], - "subtitle": "Send Activity" - } - }, - "Microsoft.SendHandoffActivity": { - "flow": { - "widget": "ActionHeader" - }, - "form": { - "helpLink": "https://aka.ms/bfc-send-handoff-activity", - "label": "Send a handoff request", - "subtitle": "Send Handoff Activity" - }, - "menu": { - "label": "Send Handoff Event", - "submenu": [ - "Access external resources" - ] - } - }, - "Microsoft.SetProperties": { - "flow": { - "body": { - "items": "=foreach(action.assignments, x => concat(coalesce(x.property, \"?\"), \" : \", coalesce(x.value, \"?\")))", - "widget": "ListOverview" - }, - "widget": "ActionCard" - }, - "form": { - "helpLink": "https://aka.ms/bfc-using-memory", - "label": "Set properties", - "properties": { - "assignments": { - "properties": { - "property": { - "intellisenseScopes": [ - "variable-scopes" - ] - } - } - } - }, - "subtitle": "Set Properties" - } - }, - "Microsoft.SetProperty": { - "flow": { - "body": "${coalesce(action.property, \"?\")} : ${coalesce(action.value, \"?\")}", - "widget": "ActionCard" - }, - "form": { - "helpLink": "https://aka.ms/bfc-using-memory", - "label": "Set a property", - "properties": { - "property": { - "intellisenseScopes": [ - "variable-scopes" - ] - } - }, - "subtitle": "Set Property" - } - }, - "Microsoft.SignOutUser": { - "form": { - "label": "Sign out user", - "subtitle": "Signout User" - } - }, - "Microsoft.SwitchCondition": { - "flow": { - "judgement": { - "body": "=coalesce(action.condition, \"\")", - "widget": "ActionCard" - }, - "nowrap": true, - "widget": "SwitchConditionWidget" - }, - "form": { - "helpLink": "https://aka.ms/bfc-controlling-conversation-flow", - "hidden": [ - "default" - ], - "label": "Branch: Switch (multiple options)", - "properties": { - "cases": { - "hidden": [ - "actions" - ] - }, - "condition": { - "intellisenseScopes": [ - "user-variables" - ] - } - }, - "subtitle": "Switch Condition" - } - }, - "Microsoft.TextInput": { - "flow": { - "body": "=action.prompt", - "botAsks": { - "body": { - "defaultContent": "", - "field": "prompt", - "widget": "LgWidget" - }, - "header": { - "colors": { - "icon": "#5C2E91", - "theme": "#EEEAF4" - }, - "icon": "MessageBot", - "widget": "ActionHeader" - }, - "widget": "ActionCard" - }, - "nowrap": true, - "userInput": { - "header": { - "colors": { - "icon": "#0078D4", - "theme": "#E5F0FF" - }, - "disableSDKTitle": true, - "icon": "User", - "menu": "none", - "widget": "ActionHeader" - }, - "widget": "ActionCard" - }, - "widget": "PromptWidget" - }, - "form": { - "helpLink": "https://aka.ms/bfc-ask-for-user-input", - "label": "Prompt for text", - "properties": { - "property": { - "intellisenseScopes": [ - "variable-scopes" - ] - } - }, - "subtitle": "Text Input" - } - }, - "Microsoft.ThrowException": { - "flow": { - "body": { - "description": "= ErrorValue", - "property": "=coalesce(action.errorValue, \"?\")", - "widget": "PropertyDescription" - }, - "widget": "ActionCard" - }, - "form": { - "label": "Throw an exception", - "subtitle": "Throw an exception" - } - }, - "Microsoft.TraceActivity": { - "form": { - "helpLink": "https://aka.ms/composer-telemetry", - "label": "Emit a trace event", - "subtitle": "Trace Activity" - } - }, - "Microsoft.UpdateActivity": { - "flow": { - "body": { - "field": "activity", - "widget": "LgWidget" - }, - "header": { - "colors": { - "icon": "#656565", - "theme": "#D7D7D7" - }, - "icon": "MessageBot", - "title": "Update activity", - "widget": "ActionHeader" - }, - "widget": "ActionCard" - }, - "form": { - "label": "Update an activity", - "subtitle": "Update Activity" - } - } -} diff --git a/Orchestrator/Samples/Composer/OrchestratorDispatch/schemas/update-schema.ps1 b/Orchestrator/Samples/Composer/OrchestratorDispatch/schemas/update-schema.ps1 deleted file mode 100644 index 8bf96849d9..0000000000 --- a/Orchestrator/Samples/Composer/OrchestratorDispatch/schemas/update-schema.ps1 +++ /dev/null @@ -1,27 +0,0 @@ -$SCHEMA_FILE="sdk.schema" -$UISCHEMA_FILE="sdk.uischema" -$BACKUP_SCHEMA_FILE="sdk-backup.schema" -$BACKUP_UISCHEMA_FILE="sdk-backup.uischema" - -Write-Host "Running schema merge." - -if (Test-Path $SCHEMA_FILE -PathType leaf) { Move-Item -Force -Path $SCHEMA_FILE -Destination $BACKUP_SCHEMA_FILE } -if (Test-Path $UISCHEMA_FILE -PathType leaf) { Move-Item -Force -Path $UISCHEMA_FILE -Destination $BACKUP_UISCHEMA_FILE } - -bf dialog:merge "*.schema" "!**/sdk-backup.schema" "*.uischema" "!**/sdk-backup.uischema" "!**/sdk.override.uischema" "../*.csproj" "../package.json" -o $SCHEMA_FILE - -if (Test-Path $SCHEMA_FILE -PathType leaf) -{ - if (Test-Path $BACKUP_SCHEMA_FILE -PathType leaf) { Remove-Item -Force -Path $BACKUP_SCHEMA_FILE } - if (Test-Path $BACKUP_UISCHEMA_FILE -PathType leaf) { Remove-Item -Force -Path $BACKUP_UISCHEMA_FILE } - - Write-Host "Schema merged succesfully." - if (Test-Path $SCHEMA_FILE -PathType leaf) { Write-Host " Schema: $SCHEMA_FILE" } - if (Test-Path $UISCHEMA_FILE -PathType leaf) { Write-Host " UI Schema: $UISCHEMA_FILE" } -} -else -{ - Write-Host "Schema merge failed. Restoring previous versions." - if (Test-Path $BACKUP_SCHEMA_FILE -PathType leaf) { Move-Item -Force -Path $BACKUP_SCHEMA_FILE -Destination $SCHEMA_FILE } - if (Test-Path $BACKUP_UISCHEMA_FILE -PathType leaf) { Move-Item -Force -Path $BACKUP_UISCHEMA_FILE -Destination $UISCHEMA_FILE } -} diff --git a/Orchestrator/Samples/Composer/OrchestratorDispatch/schemas/update-schema.sh b/Orchestrator/Samples/Composer/OrchestratorDispatch/schemas/update-schema.sh deleted file mode 100644 index e9043eb577..0000000000 --- a/Orchestrator/Samples/Composer/OrchestratorDispatch/schemas/update-schema.sh +++ /dev/null @@ -1,31 +0,0 @@ -#!/usr/bin/env bash -SCHEMA_FILE=sdk.schema -UISCHEMA_FILE=sdk.uischema -BACKUP_SCHEMA_FILE=sdk-backup.schema -BACKUP_UISCHEMA_FILE=sdk-backup.uischema - -while [ $# -gt 0 ]; do - if [[ $1 == *"-"* ]]; then - param="${1/-/}" - declare $param="$2" - fi - shift -done - -echo "Running schema merge." -[ -f "$SCHEMA_FILE" ] && mv "./$SCHEMA_FILE" "./$BACKUP_SCHEMA_FILE" -[ -f "$UISCHEMA_FILE" ] && mv "./$UISCHEMA_FILE" "./$BACKUP_UISCHEMA_FILE" - -bf dialog:merge "*.schema" "!**/sdk-backup.schema" "*.uischema" "!**/sdk-backup.uischema" "!**/sdk.override.uischema" "../*.csproj" "../package.json" -o $SCHEMA_FILE - -if [ -f "$SCHEMA_FILE" ]; then - rm -rf "./$BACKUP_SCHEMA_FILE" - rm -rf "./$BACKUP_UISCHEMA_FILE" - echo "Schema merged succesfully." - [ -f "$SCHEMA_FILE" ] && echo " Schema: $SCHEMA_FILE" - [ -f "$UISCHEMA_FILE" ] && echo " UI Schema: $UISCHEMA_FILE" -else - echo "Schema merge failed. Restoring previous versions." - [ -f "$BACKUP_SCHEMA_FILE" ] && mv "./$BACKUP_SCHEMA_FILE" "./$SCHEMA_FILE" - [ -f "$BACKUP_UISCHEMA_FILE" ] && mv "./$BACKUP_UISCHEMA_FILE" "./$UISCHEMA_FILE" -fi diff --git a/Orchestrator/Samples/Composer/OrchestratorDispatch/settings/cross-train.config.json b/Orchestrator/Samples/Composer/OrchestratorDispatch/settings/cross-train.config.json deleted file mode 100644 index 19439731a5..0000000000 --- a/Orchestrator/Samples/Composer/OrchestratorDispatch/settings/cross-train.config.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "OrchestratorDispatch.en-us": { - "rootDialog": true, - "triggers": { - "PartnersInfo": [ - "PartnersDialog.en-us" - ], - "None": "", - "exit": "", - "TheSkill": "" - } - }, - "PartnersDialog.en-us": { - "rootDialog": false, - "triggers": { - "General": "", - "exit": "", - "Healthbot": "", - "PVA": "", - "None": "" - } - } -} diff --git a/Orchestrator/Samples/Composer/OrchestratorDispatch/wwwroot/default.htm b/Orchestrator/Samples/Composer/OrchestratorDispatch/wwwroot/default.htm deleted file mode 100644 index e48c880e72..0000000000 --- a/Orchestrator/Samples/Composer/OrchestratorDispatch/wwwroot/default.htm +++ /dev/null @@ -1,364 +0,0 @@ - - - - - - - OrchestratorDispatch - - - - - -
-
-
-
OrchestratorDispatch
-
-
-
-
- -
- - - \ No newline at end of file diff --git a/Orchestrator/Samples/README.md b/Orchestrator/Samples/README.md deleted file mode 100644 index e25d6984d5..0000000000 --- a/Orchestrator/Samples/README.md +++ /dev/null @@ -1,4 +0,0 @@ -# Orchestrator Samples -The following contains samples for support how-to guidelines documentation. - -__\__ diff --git a/Orchestrator/docs/BFOrchestratorUsage.md b/Orchestrator/docs/BFOrchestratorUsage.md index 15c7ba23ac..0f33173184 100644 --- a/Orchestrator/docs/BFOrchestratorUsage.md +++ b/Orchestrator/docs/BFOrchestratorUsage.md @@ -113,7 +113,7 @@ It is possible to specify Orchestrator as a dialog recognizer in [Bot Framework 2. Select Orchestrator in the recognizer dropdown menu. 3. Review, evaluate and adjust examples in language data as you would normally for LUIS / Orchestrator to ensure recognition quality. -See the [School skill navigator](https://github.com/microsoft/BotBuilder-Samples/tree/main/experimental/orchestrator/Composer/01.school-skill-navigator#school-skill-navigator-bot) bot sample for more. +See the [School skill navigator](https://github.com/microsoft/BotBuilder-Samples/tree/main/composer-samples/csharp_dotnetcore/projects/OrchestratorSchoolNavigator) bot sample for more. diff --git a/Orchestrator/docs/FAQ.md b/Orchestrator/docs/FAQ.md index 939ee7188a..9ae8ebbe93 100644 --- a/Orchestrator/docs/FAQ.md +++ b/Orchestrator/docs/FAQ.md @@ -46,7 +46,7 @@ Unfortunately not. However, Orchestrator Recognizer could take external entity [1]:https://docs.microsoft.com/en-us/azure/cognitive-services/luis/luis-how-to-use-dashboard [2]:https://docs.microsoft.com/en-us/azure/cognitive-services/qnamaker/how-to/test-knowledge-base?tabs=v1 -[3]:https://github.com/microsoft/BotBuilder-Samples/blob/main/experimental/orchestrator/CLI/ModelTuning/README.md +[3]:https://github.com/microsoft/botframework-sdk/tree/main/orchestrator/samples/CLI/ModelTuning/README.md [4]:https://github.com/pytorch/fairseq/tree/master/examples/xlmr#introduction [5]:https://github.com/microsoft/botbuilder-tools/tree/master/packages/Dispatch [6]:https://github.com/microsoft/botframework-cli/tree/main/packages/Orchestrator
-
-
Your bot is ready!
-
You can test your bot in the Bot Framework Emulator
- by connecting to http://localhost:3978/api/messages.
-
-
Visit Azure - Bot Service to register your bot and add it to
- various channels. The bot's endpoint URL typically looks - like this:
-
https://your_bots_hostname/api/messages
-
-
-