├── HealthAgentAPI ├── package.json ├── healthAgentAPI.js └── README.md ├── README.md ├── GeoPol.xml ├── LICENSE ├── SECURITY.md └── .gitignore /HealthAgentAPI/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "health-bot-api", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "healthAgentAPI.js", 6 | "dependencies": { 7 | "request": "^2.82.0", 8 | "request-promise": "^4.2.2", 9 | "jsonwebtoken": "^8.0.1" 10 | }, 11 | "devDependencies": {}, 12 | "scripts": { 13 | "test": "echo \"Error: no test specified\" && exit 1" 14 | }, 15 | "author": "", 16 | "license": "ISC" 17 | } 18 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 2 | # Contributing 3 | 4 | This project welcomes contributions and suggestions. Most contributions require you to agree to a 5 | Contributor License Agreement (CLA) declaring that you have the right to, and actually do, grant us 6 | the rights to use your contribution. For details, visit https://cla.microsoft.com. 7 | 8 | When you submit a pull request, a CLA-bot will automatically determine whether you need to provide 9 | a CLA and decorate the PR appropriately (e.g., label, comment). Simply follow the instructions 10 | provided by the bot. You will only need to do this once across all repos using our CLA. 11 | 12 | This project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/). 13 | For more information see the [Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/) or 14 | contact [opencode@microsoft.com](mailto:opencode@microsoft.com) with any additional questions or comments. 15 | -------------------------------------------------------------------------------- /GeoPol.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | ]> 7 | 8 | 9 | 10 | &GitReposFolder;\AInR_NExT\&GitRepoName; 11 | &GitRepoName; 12 | 13 | 14 | . 15 | 16 | 17 | .gitignore 18 | GeoPol.xml 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) Microsoft Corporation. All rights reserved. 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE 22 | -------------------------------------------------------------------------------- /SECURITY.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | ## Security 4 | 5 | Microsoft takes the security of our software products and services seriously, which includes all source code repositories managed through our GitHub organizations, which include [Microsoft](https://github.com/microsoft), [Azure](https://github.com/Azure), [DotNet](https://github.com/dotnet), [AspNet](https://github.com/aspnet), [Xamarin](https://github.com/xamarin), and [our GitHub organizations](https://opensource.microsoft.com/). 6 | 7 | If you believe you have found a security vulnerability in any Microsoft-owned repository that meets [Microsoft's definition of a security vulnerability](https://aka.ms/opensource/security/definition), please report it to us as described below. 8 | 9 | ## Reporting Security Issues 10 | 11 | **Please do not report security vulnerabilities through public GitHub issues.** 12 | 13 | Instead, please report them to the Microsoft Security Response Center (MSRC) at [https://msrc.microsoft.com/create-report](https://aka.ms/opensource/security/create-report). 14 | 15 | If you prefer to submit without logging in, send email to [secure@microsoft.com](mailto:secure@microsoft.com). If possible, encrypt your message with our PGP key; please download it from the [Microsoft Security Response Center PGP Key page](https://aka.ms/opensource/security/pgpkey). 16 | 17 | You should receive a response within 24 hours. If for some reason you do not, please follow up via email to ensure we received your original message. Additional information can be found at [microsoft.com/msrc](https://aka.ms/opensource/security/msrc). 18 | 19 | Please include the requested information listed below (as much as you can provide) to help us better understand the nature and scope of the possible issue: 20 | 21 | * Type of issue (e.g. buffer overflow, SQL injection, cross-site scripting, etc.) 22 | * Full paths of source file(s) related to the manifestation of the issue 23 | * The location of the affected source code (tag/branch/commit or direct URL) 24 | * Any special configuration required to reproduce the issue 25 | * Step-by-step instructions to reproduce the issue 26 | * Proof-of-concept or exploit code (if possible) 27 | * Impact of the issue, including how an attacker might exploit the issue 28 | 29 | This information will help us triage your report more quickly. 30 | 31 | If you are reporting for a bug bounty, more complete reports can contribute to a higher bounty award. Please visit our [Microsoft Bug Bounty Program](https://aka.ms/opensource/security/bounty) page for more details about our active programs. 32 | 33 | ## Preferred Languages 34 | 35 | We prefer all communications to be in English. 36 | 37 | ## Policy 38 | 39 | Microsoft follows the principle of [Coordinated Vulnerability Disclosure](https://aka.ms/opensource/security/cvd). 40 | 41 | 42 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | ## Ignore Visual Studio temporary files, build results, and 2 | ## files generated by popular Visual Studio add-ons. 3 | ## 4 | ## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore 5 | 6 | # User-specific files 7 | *.suo 8 | *.user 9 | *.userosscache 10 | *.sln.docstates 11 | 12 | # User-specific files (MonoDevelop/Xamarin Studio) 13 | *.userprefs 14 | 15 | # Build results 16 | [Dd]ebug/ 17 | [Dd]ebugPublic/ 18 | [Rr]elease/ 19 | [Rr]eleases/ 20 | x64/ 21 | x86/ 22 | bld/ 23 | [Bb]in/ 24 | [Oo]bj/ 25 | [Ll]og/ 26 | 27 | # Visual Studio 2015 cache/options directory 28 | .vs/ 29 | # Uncomment if you have tasks that create the project's static files in wwwroot 30 | #wwwroot/ 31 | 32 | # MSTest test Results 33 | [Tt]est[Rr]esult*/ 34 | [Bb]uild[Ll]og.* 35 | 36 | # NUNIT 37 | *.VisualState.xml 38 | TestResult.xml 39 | 40 | # Build Results of an ATL Project 41 | [Dd]ebugPS/ 42 | [Rr]eleasePS/ 43 | dlldata.c 44 | 45 | # .NET Core 46 | project.lock.json 47 | project.fragment.lock.json 48 | artifacts/ 49 | **/Properties/launchSettings.json 50 | 51 | *_i.c 52 | *_p.c 53 | *_i.h 54 | *.ilk 55 | *.meta 56 | *.obj 57 | *.pch 58 | *.pdb 59 | *.pgc 60 | *.pgd 61 | *.rsp 62 | *.sbr 63 | *.tlb 64 | *.tli 65 | *.tlh 66 | *.tmp 67 | *.tmp_proj 68 | *.log 69 | *.vspscc 70 | *.vssscc 71 | .builds 72 | *.pidb 73 | *.svclog 74 | *.scc 75 | 76 | # Chutzpah Test files 77 | _Chutzpah* 78 | 79 | # Visual C++ cache files 80 | ipch/ 81 | *.aps 82 | *.ncb 83 | *.opendb 84 | *.opensdf 85 | *.sdf 86 | *.cachefile 87 | *.VC.db 88 | *.VC.VC.opendb 89 | 90 | # Visual Studio profiler 91 | *.psess 92 | *.vsp 93 | *.vspx 94 | *.sap 95 | 96 | # TFS 2012 Local Workspace 97 | $tf/ 98 | 99 | # Guidance Automation Toolkit 100 | *.gpState 101 | 102 | # ReSharper is a .NET coding add-in 103 | _ReSharper*/ 104 | *.[Rr]e[Ss]harper 105 | *.DotSettings.user 106 | 107 | # JustCode is a .NET coding add-in 108 | .JustCode 109 | 110 | # TeamCity is a build add-in 111 | _TeamCity* 112 | 113 | # DotCover is a Code Coverage Tool 114 | *.dotCover 115 | 116 | # Visual Studio code coverage results 117 | *.coverage 118 | *.coveragexml 119 | 120 | # NCrunch 121 | _NCrunch_* 122 | .*crunch*.local.xml 123 | nCrunchTemp_* 124 | 125 | # MightyMoose 126 | *.mm.* 127 | AutoTest.Net/ 128 | 129 | # Web workbench (sass) 130 | .sass-cache/ 131 | 132 | # Installshield output folder 133 | [Ee]xpress/ 134 | 135 | # DocProject is a documentation generator add-in 136 | DocProject/buildhelp/ 137 | DocProject/Help/*.HxT 138 | DocProject/Help/*.HxC 139 | DocProject/Help/*.hhc 140 | DocProject/Help/*.hhk 141 | DocProject/Help/*.hhp 142 | DocProject/Help/Html2 143 | DocProject/Help/html 144 | 145 | # Click-Once directory 146 | publish/ 147 | 148 | # Publish Web Output 149 | *.[Pp]ublish.xml 150 | *.azurePubxml 151 | # TODO: Comment the next line if you want to checkin your web deploy settings 152 | # but database connection strings (with potential passwords) will be unencrypted 153 | *.pubxml 154 | *.publishproj 155 | 156 | # Microsoft Azure Web App publish settings. Comment the next line if you want to 157 | # checkin your Azure Web App publish settings, but sensitive information contained 158 | # in these scripts will be unencrypted 159 | PublishScripts/ 160 | 161 | # NuGet Packages 162 | *.nupkg 163 | # The packages folder can be ignored because of Package Restore 164 | **/packages/* 165 | # except build/, which is used as an MSBuild target. 166 | !**/packages/build/ 167 | # Uncomment if necessary however generally it will be regenerated when needed 168 | #!**/packages/repositories.config 169 | # NuGet v3's project.json files produces more ignorable files 170 | *.nuget.props 171 | *.nuget.targets 172 | 173 | # Microsoft Azure Build Output 174 | csx/ 175 | *.build.csdef 176 | 177 | # Microsoft Azure Emulator 178 | ecf/ 179 | rcf/ 180 | 181 | # Windows Store app package directories and files 182 | AppPackages/ 183 | BundleArtifacts/ 184 | Package.StoreAssociation.xml 185 | _pkginfo.txt 186 | 187 | # Visual Studio cache files 188 | # files ending in .cache can be ignored 189 | *.[Cc]ache 190 | # but keep track of directories ending in .cache 191 | !*.[Cc]ache/ 192 | 193 | # Others 194 | ClientBin/ 195 | ~$* 196 | *~ 197 | *.dbmdl 198 | *.dbproj.schemaview 199 | *.jfm 200 | *.pfx 201 | *.publishsettings 202 | orleans.codegen.cs 203 | 204 | # Since there are multiple workflows, uncomment next line to ignore bower_components 205 | # (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) 206 | #bower_components/ 207 | 208 | # RIA/Silverlight projects 209 | Generated_Code/ 210 | 211 | # Backup & report files from converting an old project file 212 | # to a newer Visual Studio version. Backup files are not needed, 213 | # because we have git ;-) 214 | _UpgradeReport_Files/ 215 | Backup*/ 216 | UpgradeLog*.XML 217 | UpgradeLog*.htm 218 | 219 | # SQL Server files 220 | *.mdf 221 | *.ldf 222 | *.ndf 223 | 224 | # Business Intelligence projects 225 | *.rdl.data 226 | *.bim.layout 227 | *.bim_*.settings 228 | 229 | # Microsoft Fakes 230 | FakesAssemblies/ 231 | 232 | # GhostDoc plugin setting file 233 | *.GhostDoc.xml 234 | 235 | # Node.js Tools for Visual Studio 236 | .ntvs_analysis.dat 237 | node_modules/ 238 | 239 | # Typescript v1 declaration files 240 | typings/ 241 | 242 | # Visual Studio 6 build log 243 | *.plg 244 | 245 | # Visual Studio 6 workspace options file 246 | *.opt 247 | 248 | # Visual Studio 6 auto-generated workspace file (contains which files were open etc.) 249 | *.vbw 250 | 251 | # Visual Studio LightSwitch build output 252 | **/*.HTMLClient/GeneratedArtifacts 253 | **/*.DesktopClient/GeneratedArtifacts 254 | **/*.DesktopClient/ModelManifest.xml 255 | **/*.Server/GeneratedArtifacts 256 | **/*.Server/ModelManifest.xml 257 | _Pvt_Extensions 258 | 259 | # Paket dependency manager 260 | .paket/paket.exe 261 | paket-files/ 262 | 263 | # FAKE - F# Make 264 | .fake/ 265 | 266 | # JetBrains Rider 267 | .idea/ 268 | *.sln.iml 269 | 270 | # CodeRush 271 | .cr/ 272 | 273 | # Python Tools for Visual Studio (PTVS) 274 | __pycache__/ 275 | *.pyc 276 | 277 | # Cake - Uncomment if you are using it 278 | # tools/** 279 | # !tools/packages.config 280 | 281 | # Telerik's JustMock configuration file 282 | *.jmconfig 283 | 284 | # BizTalk build output 285 | *.btp.cs 286 | *.btm.cs 287 | *.odx.cs 288 | *.xsd.cs 289 | -------------------------------------------------------------------------------- /HealthAgentAPI/healthAgentAPI.js: -------------------------------------------------------------------------------- 1 | const jwt = require("jsonwebtoken"); 2 | const rp = require("request-promise"); 3 | const fs = require('fs') 4 | 5 | if (process.argv.length !== 5) { 6 | console.log("Usage: node healthAgentAPI.js "); 7 | process.exit(); 8 | } 9 | const action = process.argv[2]; 10 | const tenantName = process.argv[3] 11 | const jwtSecret = process.argv[4]; 12 | 13 | const BASE_URL = "https://eastus.healthbot.microsoft.com/"; 14 | const jwtToken = jwt.sign({ 15 | tenantName: tenantName, 16 | iat: Math.floor(Date.now() / 1000) 17 | }, jwtSecret); 18 | 19 | /**** Scenarios ****/ 20 | 21 | if (action === "post_scenarios") { 22 | const options = { 23 | method: 'POST', 24 | uri: `${BASE_URL}api/account/${tenantName}/scenarios`, 25 | headers: { 26 | 'Authorization': 'Bearer ' + jwtToken 27 | }, 28 | body: [ 29 | { 30 | "name":"Hello World", 31 | "scenario_trigger":"hello_world", 32 | "description":"", 33 | "code":"{\n \"version\": 2,\n \"steps\": [\n {\n \"id\": \"aaa3073dc553-32a44525cced8e2f-2200\",\n \"type\": \"statement\",\n \"designer\": {\n \"xLocation\": 479,\n \"yLocation\": 196\n },\n \"text\": \"Hello World!\"\n }\n ]\n}" 34 | }, 35 | { 36 | "name":"Greetings", 37 | "scenario_trigger":"greetings", 38 | "description":"", 39 | "code":"{\n \"version\": 2,\n \"steps\": [\n {\n \"id\": \"aaa3073dc553-32a44525cced8e2f-2200\",\n \"type\": \"statement\",\n \"designer\": {\n \"xLocation\": 479,\n \"yLocation\": 196\n },\n \"text\": \"Greetings!\"\n }\n ]\n}" 40 | } 41 | ], 42 | json: true 43 | }; 44 | 45 | rp(options) 46 | .then(function (parsedBody) { 47 | console.log(parsedBody); 48 | }) 49 | .catch(function (err) { 50 | console.log(err.message); 51 | }); 52 | } 53 | 54 | if (action === "get_scenarios") { 55 | const options = { 56 | method: 'GET', 57 | uri: `${BASE_URL}api/account/${tenantName}/scenarios`, 58 | headers: { 59 | 'Authorization': 'Bearer ' + jwtToken 60 | } 61 | }; 62 | 63 | rp(options) 64 | .then(function (parsedBody) { 65 | console.log(parsedBody); 66 | }) 67 | .catch(function (err) { 68 | console.log(err.message); 69 | }); 70 | } 71 | 72 | /**** Backup ****/ 73 | 74 | if (action === "post_backup") { 75 | const options = { 76 | method: 'POST', 77 | uri: `${BASE_URL}api/account/${tenantName}/backup`, 78 | headers: { 79 | 'Authorization': 'Bearer ' + jwtToken 80 | }, 81 | body: { 82 | "hbs": "Get Backup Output" 83 | } 84 | , 85 | json: true 86 | }; 87 | 88 | rp(options) 89 | .then(function (parsedBody) { 90 | console.log(parsedBody); 91 | }) 92 | .catch(function (err) { 93 | console.log(err.message); 94 | }); 95 | } 96 | 97 | if (action === "get_backup") { 98 | const options = { 99 | method: 'GET', 100 | uri: `${BASE_URL}api/account/${tenantName}/backup`, 101 | headers: { 102 | 'Authorization': 'Bearer ' + jwtToken 103 | } 104 | }; 105 | rp(options) 106 | .then(function (parsedBody) { 107 | console.log(parsedBody); 108 | }) 109 | .catch(function (err) { 110 | console.log(err.message); 111 | }); 112 | } 113 | 114 | /**** Resources ****/ 115 | 116 | if (action === "post_resources") { 117 | const options = { 118 | method: 'POST', 119 | uri: `${BASE_URL}api/account/${tenantName}/resources`, 120 | headers: { 121 | 'Authorization': 'Bearer ' + jwtToken 122 | }, 123 | formData: { 124 | file: { 125 | value: fs.readFileSync('myfile.txt'), 126 | options: { 127 | filename: 'myfile.txt', 128 | contentType: 'text/plain' 129 | } 130 | } 131 | }, 132 | json: true 133 | }; 134 | 135 | rp(options) 136 | .then(function (parsedBody) { 137 | console.log(parsedBody); 138 | }) 139 | .catch(function (err) { 140 | console.log(err.message); 141 | }); 142 | } 143 | 144 | if (action === "get_resources") { 145 | const options = { 146 | method: 'GET', 147 | uri: `${BASE_URL}api/account/${tenantName}/resources`, 148 | headers: { 149 | 'Authorization': 'Bearer ' + jwtToken 150 | } 151 | }; 152 | 153 | rp(options) 154 | .then(function (parsedBody) { 155 | console.log(parsedBody); 156 | }) 157 | .catch(function (err) { 158 | console.log(err.message); 159 | }); 160 | } 161 | 162 | /**** Localization ****/ 163 | 164 | if (action === "post_localization") { 165 | const options = { 166 | method: 'POST', 167 | uri: `${BASE_URL}api/account/${tenantName}/localization`, 168 | headers: { 169 | 'Authorization': 'Bearer ' + jwtToken 170 | }, 171 | body: { 172 | "custom": [{ 173 | "en-us": "test1", 174 | "stringId": "test1" 175 | 176 | }], 177 | "system": [] 178 | }, 179 | json: true 180 | }; 181 | 182 | rp(options) 183 | .then(function (parsedBody) { 184 | console.log(parsedBody); 185 | }) 186 | .catch(function (err) { 187 | console.log(err.message); 188 | }); 189 | } 190 | 191 | if (action === "get_localization") { 192 | const options = { 193 | method: 'GET', 194 | uri: `${BASE_URL}api/account/${tenantName}/localization`, 195 | headers: { 196 | 'Authorization': 'Bearer ' + jwtToken 197 | } 198 | }; 199 | 200 | rp(options) 201 | .then(function (parsedBody) { 202 | console.log(parsedBody); 203 | }) 204 | .catch(function (err) { 205 | console.log(err.message); 206 | }); 207 | } 208 | -------------------------------------------------------------------------------- /HealthAgentAPI/README.md: -------------------------------------------------------------------------------- 1 | # Microsoft Health Bot Management API 2 | 3 | ## Background 4 | 5 | The Microsoft Health Bot provides API to enable programmatic management actions. For example, programmatic import and export of scenarios from the scenario editor. 6 | 7 | ## The Management API supports the following actions: 8 | 9 | 1. Import/Export of scenarios 10 | 11 | 2. Create bot backup 12 | 13 | 3. Restore from backup 14 | 15 | 4. Import/Export of resource files 16 | 17 | 5. Import/Export of localization strings 18 | 19 | 6. Assign User access to management portal 20 | 21 | ## How to use the API 22 | 23 | ### Code samples 24 | 25 | The provided [code samples](https://github.com/microsoft/HealthBotCodeSnippets/blob/master/HealthAgentAPI/healthAgentAPI.js) demonstrate how to use the API. 26 | 27 | ### API Structure 28 | 29 | The API is implemented with REST architecture, enabling to perform CRUD operations on resources that are represented as URLs. 30 | 31 | ### API URL 32 | 33 | The fully qualified domain name(FQDN) should match the FQDN of the portal used to log into the health bot admin panel for example: 34 | ``` 35 | URL: https://.healthbot.microsoft.com/ 36 | ``` 37 | List of regions: 38 | 39 | ``` 40 | eastus 41 | westeurope 42 | australiaeast 43 | centralindia 44 | eastus2 45 | eastus2euap 46 | northeurope 47 | southcentralus 48 | southeastasia 49 | uksouth 50 | westcentralus 51 | westus2 52 | ``` 53 | 54 | ### API Security 55 | 56 | The API is protected with standard JWT tokens. The JWT tokens contain two claims: 57 | 58 | - "tenantName": Taken from the management portal in the keys tab 59 | - "iat": timestamp as an UNIX epoch value 60 | 61 | The JWT token is signed with an API secret, called API\_JWT\_secret. The secret is taken from the management portal, as shown in the following screenshot: 62 | 63 | ![](data:image/*;base64,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) 64 | 65 | An exemplary JWT token payload before encoding is shown here: 66 | 67 | ```JSON 68 | { 69 | "tenantName": "myTenant", 70 | "iat": "1507056900" 71 | } 72 | ``` 73 | 74 | The JWT token is placed in the authorization header, according to the following example: 75 | 76 | Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ0ZW5hbnROYW1lIjoibXlUZW5hbnQiLCJpYXQiOiIxNTA3MDU2OTAwIn0.MN4DcxO2mLsltEYNpXbC6T6Bjxj3-rxIAObngZIw4-U 77 | 78 | 79 | It is recommended to implement the JWT tokens with standard libraries, for example: Node.js "jsonwebtoken" library.More information at https://jwt.io/. 80 | 81 | ## API Resources 82 | 83 | ### Export Scenarios 84 | 85 | ``` 86 | URL: https://.healthbot.microsoft.com/api/account//scenarios 87 | ``` 88 | 89 | **Method:** GET 90 | 91 | **Special headers:** Authorization: Bearer <JWT Token> 92 | 93 | **Request Parameters:** None 94 | 95 | **Response:** An array of JSON objects in the response body. Every object represents a Health Bot scenario 96 | 97 | **Examples:** 98 | 99 | GET https://eastus.healthbot.microsoft.com/api/account/healthagentprod/scenarios HTTP/1.1 100 | 101 | Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ0ZW5hbnROYW1lIjoiaGVhbHRoYWdlbnRwcm9kIiwiaWF0IjoxNTA2OTYwODAwfQ.x9oyA4kgfIgV5R1CpvMQeUYuP6FSlI65lx7Og8nMuWw 102 | 103 | Host: healthbot.microsoft.com 104 | 105 | HTTP/1.1 200 OK 106 | 107 | [exported scenarios will appear in the response body] 108 | 109 | **Comments:** N/A 110 | 111 | ### Import Scenarios 112 | 113 | ``` 114 | URL: https://.healthbot.microsoft.com/api/account//scenarios 115 | ``` 116 | 117 | **Method:** POST 118 | 119 | **Special headers:** Authorization: Bearer <JWT Token> , Content-type: application/json 120 | 121 | **Request Parameters:** An array of JSON objects in request body. Every object represents a Health Bot scenario 122 | 123 | **Response:** 200 OK in case of success 124 | 125 | **Examples:** 126 | 127 | POST https://eastus.healthbot.microsoft.com/api/account/healthagentprod/scenarios HTTP/1.1 128 | 129 | Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ0ZW5hbnROYW1lIjoiaGVhbHRoYWdlbnRwcm9kIiwiaWF0IjoxNTA2OTYxMzAwfQ.YGayhOc0fOaLRK4cWzRIhSsNH0zWOTy7Pe2PWSY5-cE 130 | 131 | Host: healthbot.microsoft.com 132 | 133 | Content-type: application/jsonContent-Length: 51116 134 | 135 | [scenarios in request body] 136 | 137 | **Comments:** When posting new scenarios, they will be added to the existing scenarios in the scenario editor. Scenario with the same name will be overridden. 138 | 139 | ### Export bot backup 140 | 141 | ``` 142 | URL: https://.healthbot.microsoft.com/api/account//backup 143 | ``` 144 | 145 | **Method:** GET 146 | 147 | **Special headers:** Authorization: Bearer <JWT Token> 148 | 149 | **Request Parameters:** None 150 | 151 | **Response:** A file in the response body. The file represents the bot backup. 152 | 153 | **Examples:** 154 | 155 | GET https://eastus.healthbot.microsoft.com/api/account/healthagentprod/backup HTTP/1.1 156 | 157 | Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ0ZW5hbnROYW1lIjoiaGVhbHRoYWdlbnRwcm9kIiwiaWF0IjoxNTA2OTYwODAwfQ.x9oyA4kgfIgV5R1CpvMQeUYuP6FSlI65lx7Og8nMuWw 158 | 159 | Host: healthbot.microsoft.com 160 | 161 | HTTP/1.1 200 OK 162 | 163 | [exported bot backup will appear in the response body] 164 | 165 | **Comments:** N/A 166 | 167 | ### Restore from backup 168 | 169 | ``` 170 | URL: https://.healthbot.microsoft.com/api/account//backup 171 | ``` 172 | 173 | **Method:** POST 174 | 175 | **Special headers:** Authorization: Bearer <JWT Token> , Content-type: application/json 176 | 177 | **Request Parameters:** A file in the request body. The file represents the bot backup. 178 | 179 | **Response:** 200 OK in case of success 180 | 181 | **Examples:** 182 | 183 | POST https://eastus.healthbot.microsoft.com/api/account/healthagentprod/backup HTTP/1.1 184 | 185 | Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ0ZW5hbnROYW1lIjoiaGVhbHRoYWdlbnRwcm9kIiwiaWF0IjoxNTA2OTYxMzAwfQ.YGayhOc0fOaLRK4cWzRIhSsNH0zWOTy7Pe2PWSY5-cE 186 | 187 | Host: healthbot.microsoft.com 188 | 189 | Content-type: application/jsonContent-Length: 51116 190 | 191 | 192 | ### Export Resources 193 | 194 | ``` 195 | URL: https://.healthbot.microsoft.com/api/account//resources 196 | ``` 197 | 198 | **Method:** GET 199 | 200 | **Special headers:** Authorization: Bearer <JWT Token> 201 | 202 | **Request Parameters:** None 203 | 204 | **Response:** An array of JSON objects in the response body. Every object represents a Resource 205 | 206 | **Examples:** 207 | 208 | GET https://eastus.healthbot.microsoft.com/api/account/healthagentprod/resources HTTP/1.1 209 | 210 | Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ0ZW5hbnROYW1lIjoiaGVhbHRoYWdlbnRwcm9kIiwiaWF0IjoxNTA2OTYwODAwfQ.x9oyA4kgfIgV5R1CpvMQeUYuP6FSlI65lx7Og8nMuWw 211 | 212 | Host: healthbot.microsoft.com 213 | 214 | HTTP/1.1 200 OK 215 | 216 | [exported resources will appear in the response body] 217 | 218 | **Comments:** N/A 219 | 220 | ### Import Resources 221 | 222 | ``` 223 | URL: https://.healthbot.microsoft.com/api/account//resources 224 | ``` 225 | 226 | **Method:** POST 227 | 228 | **Special headers:** Authorization: Bearer <JWT Token> , Content-type: application/json 229 | 230 | **Request Parameters:** Resourse Files in request body. Every File represents a Resourse of Health Bot scenario 231 | **The file name cannot contain spaces or special characters 232 | 233 | **Response:** 200 OK in case of success 234 | 235 | **Examples:** 236 | 237 | POST https://eastus.healthbot.microsoft.com/api/account/healthagentprod/resources HTTP/1.1 238 | 239 | Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ0ZW5hbnROYW1lIjoiaGVhbHRoYWdlbnRwcm9kIiwiaWF0IjoxNTA2OTYxMzAwfQ.YGayhOc0fOaLRK4cWzRIhSsNH0zWOTy7Pe2PWSY5-cE 240 | 241 | Host: healthbot.microsoft.com 242 | 243 | [Resources in request body] 244 | 245 | ### Export Localization 246 | 247 | ``` 248 | URL: https://.healthbot.microsoft.com/api/account//localization 249 | ``` 250 | 251 | **Method:** GET 252 | 253 | **Special headers:** Authorization: Bearer <JWT Token> 254 | 255 | **Request Parameters:** None 256 | 257 | **Response:** An array of JSON objects in the response body. Every object represents a localization string 258 | 259 | **Examples:** 260 | 261 | GET https://eastus.healthbot.microsoft.com/api/account/healthagentprod/localization 262 | 263 | Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ0ZW5hbnROYW1lIjoiaGVhbHRoYWdlbnRwcm9kIiwiaWF0IjoxNTA2OTYwODAwfQ.x9oyA4kgfIgV5R1CpvMQeUYuP6FSlI65lx7Og8nMuWw 264 | 265 | Host: healthbot.microsoft.com 266 | 267 | HTTP/1.1 200 OK 268 | 269 | 270 | **Comments:** N/A 271 | 272 | ### Import Localization 273 | 274 | ``` 275 | URL: https://.healthbot.microsoft.com/api/account//localization 276 | ``` 277 | 278 | **Method:** POST 279 | 280 | **Special headers:** Authorization: Bearer <JWT Token> , Content-type: application/json 281 | 282 | **Request Parameters:** An array of JSON objects in request body. Every object represents a Localization string of Health Bot scenario 283 | 284 | Body Format: 285 | ``` 286 | { 287 | "custom": [{ 288 | "": "test", 289 | "stringId": "test" 290 | 291 | }], 292 | "system": [] 293 | } 294 | ``` 295 | List of language: 296 | ``` 297 | en-us, 298 | ar-sa, 299 | cs-cz, 300 | de-de, 301 | el-gr, 302 | en-gb, 303 | es-es, 304 | es-mx, 305 | et-ee, 306 | fr-ca, 307 | fr-fr, 308 | it-it, 309 | nl-nl, 310 | pl-pl, 311 | pt-br, 312 | pt-pt, 313 | ro-ro, 314 | ru-ru, 315 | sk-sk, 316 | tr-tr, 317 | uk-ua, 318 | zh-cn 319 | ``` 320 | 321 | **Response:** 200 OK in case of success 322 | 323 | **Examples:** 324 | 325 | POST https://eastus.healthbot.microsoft.com/api/account/healthagentprod/localization HTTP/1.1 326 | 327 | Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ0ZW5hbnROYW1lIjoiaGVhbHRoYWdlbnRwcm9kIiwiaWF0IjoxNTA2OTYxMzAwfQ.YGayhOc0fOaLRK4cWzRIhSsNH0zWOTy7Pe2PWSY5-cE 328 | 329 | Host: healthbot.microsoft.com 330 | 331 | Content-type: application/jsonContent-Length: 51116 332 | 333 | Request body: 334 | ``` 335 | { 336 | "custom": [{ 337 | "en-us": "test1", 338 | "stringId": "test1" 339 | 340 | }], 341 | "system": [] 342 | } 343 | ``` 344 | 345 | ### Assign User access to management portal 346 | 347 | ``` 348 | URL: https://.healthbot.microsoft.com/api/account//user 349 | ``` 350 | 351 | **Method:** POST 352 | 353 | **Special headers:** Authorization: Bearer <JWT Token> , Content-type: application/json 354 | 355 | **Request Parameters:** email and role ("Reader", "Editor", "Admin) 356 | 357 | Body Format: 358 | ``` 359 | { 360 | "email": "johndoe@microsoft.com", 361 | "role": "Editor" 362 | } 363 | ``` 364 | 365 | **Response:** 200 OK in case of success 366 | 367 | **Examples:** 368 | 369 | POST https://eastus.healthbot.microsoft.com/api/account/healthagentprod/user HTTP/1.1 370 | 371 | Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ0ZW5hbnROYW1lIjoiaGVhbHRoYWdlbnRwcm9kIiwiaWF0IjoxNTA2OTYxMzAwfQ.YGayhOc0fOaLRK4cWzRIhSsNH0zWOTy7Pe2PWSY5-cE 372 | 373 | Host: healthbot.microsoft.com 374 | 375 | Request body: 376 | ``` 377 | { 378 | "email": "johndoe@microsoft.com", 379 | "role": "Editor" 380 | } 381 | ``` 382 | --------------------------------------------------------------------------------