Skip to content
This repository was archived by the owner on Dec 4, 2023. It is now read-only.

Commit 3b23c78

Browse files
authored
[Samples] Add 13-core.bot sample (#1034)
* Add main pom for core-bot sample * Add deploymentTemplates folder * Add cognitiveModels folder * Add main documentation of the sample * Add dialogs classes * Add resources folder * Add webapp folder * Add bot for sample * Add BookingDetails model * Add recognizer for LUIS model * Add Startup file * Add package-info * Add empty test for sample
1 parent e51a84d commit 3b23c78

File tree

24 files changed

+3003
-0
lines changed

24 files changed

+3003
-0
lines changed

samples/13.core-bot/LICENSE

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
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

samples/13.core-bot/README-LUIS.md

Lines changed: 216 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,216 @@
1+
# Setting up LUIS via CLI:
2+
3+
This README contains information on how to create and deploy a LUIS application. When the bot is ready to be deployed to production, we recommend creating a LUIS Endpoint Resource for usage with your LUIS App.
4+
5+
> _For instructions on how to create a LUIS Application via the LUIS portal, see these Quickstart steps:_
6+
> 1. _[Quickstart: Create a new app in the LUIS portal][Quickstart-create]_
7+
> 2. _[Quickstart: Deploy an app in the LUIS portal][Quickstart-deploy]_
8+
9+
[Quickstart-create]: https://docs.microsoft.com/azure/cognitive-services/luis/get-started-portal-build-app
10+
[Quickstart-deploy]:https://docs.microsoft.com/azure/cognitive-services/luis/get-started-portal-deploy-app
11+
12+
## Table of Contents:
13+
14+
- [Prerequisites](#Prerequisites)
15+
- [Import a new LUIS Application using a local LUIS application](#Import-a-new-LUIS-Application-using-a-local-LUIS-application)
16+
- [How to create a LUIS Endpoint resource in Azure and pair it with a LUIS Application](#How-to-create-a-LUIS-Endpoint-resource-in-Azure-and-pair-it-with-a-LUIS-Application)
17+
18+
___
19+
20+
## [Prerequisites](#Table-of-Contents):
21+
22+
#### Install Azure CLI >=2.0.61:
23+
24+
Visit the following page to find the correct installer for your OS:
25+
- https://docs.microsoft.com/en-us/cli/azure/install-azure-cli?view=azure-cli-latest
26+
27+
#### Install LUIS CLI >=2.4.0:
28+
29+
Open a CLI of your choice and type the following:
30+
31+
```bash
32+
npm i -g luis-apis@^2.4.0
33+
```
34+
35+
#### LUIS portal account:
36+
37+
You should already have a LUIS account with either https://luis.ai, https://eu.luis.ai, or https://au.luis.ai. To determine where to create a LUIS account, consider where you will deploy your LUIS applications, and then place them in [the corresponding region][LUIS-Authoring-Regions].
38+
39+
After you've created your account, you need your [Authoring Key][LUIS-AKey] and a LUIS application ID.
40+
41+
[LUIS-Authoring-Regions]: https://docs.microsoft.com/azure/cognitive-services/luis/luis-reference-regions#luis-authoring-regions]
42+
[LUIS-AKey]: https://docs.microsoft.com/azure/cognitive-services/luis/luis-concept-keys#authoring-key
43+
44+
___
45+
46+
## [Import a new LUIS Application using a local LUIS application](#Table-of-Contents)
47+
48+
### 1. Import the local LUIS application to luis.ai
49+
50+
```bash
51+
luis import application --region "LuisAppAuthoringRegion" --authoringKey "LuisAuthoringKey" --appName "FlightBooking" --in "./cognitiveModels/FlightBooking.json"
52+
```
53+
54+
Outputs the following JSON:
55+
56+
```json
57+
{
58+
"id": "########-####-####-####-############",
59+
"name": "FlightBooking",
60+
"description": "A LUIS model that uses intent and entities.",
61+
"culture": "en-us",
62+
"usageScenario": "",
63+
"domain": "",
64+
"versionsCount": 1,
65+
"createdDateTime": "2019-03-29T18:32:02Z",
66+
"endpoints": {},
67+
"endpointHitsCount": 0,
68+
"activeVersion": "0.1",
69+
"ownerEmail": "bot@contoso.com",
70+
"tokenizerVersion": "1.0.0"
71+
}
72+
```
73+
74+
For the next step, you'll need the `"id"` value for `--appId` and the `"activeVersion"` value for `--versionId`.
75+
76+
### 2. Train the LUIS Application
77+
78+
```bash
79+
luis train version --region "LuisAppAuthoringRegion" --authoringKey "LuisAuthoringKey" --appId "LuisAppId" --versionId "LuisAppversion" --wait
80+
```
81+
82+
### 3. Publish the LUIS Application
83+
84+
```bash
85+
luis publish version --region "LuisAppAuthoringRegion" --authoringKey "LuisAuthoringKey" --appId "LuisAppId" --versionId "LuisAppversion" --publishRegion "LuisAppPublishRegion"
86+
```
87+
88+
> `--region` corresponds to the region you _author_ your application in. The regions available for this are "westus", "westeurope" and "australiaeast". <br/>
89+
> These regions correspond to the three available portals, https://luis.ai, https://eu.luis.ai, or https://au.luis.ai. <br/>
90+
> `--publishRegion` corresponds to the region of the endpoint you're publishing to, (e.g. "westus", "southeastasia", "westeurope", "brazilsouth"). <br/>
91+
> See the [reference docs][Endpoint-API] for a list of available publish/endpoint regions.
92+
93+
[Endpoint-API]: https://westus.dev.cognitive.microsoft.com/docs/services/5819c76f40a6350ce09de1ac/operations/5819c77140a63516d81aee78
94+
95+
Outputs the following:
96+
97+
```json
98+
{
99+
"versionId": "0.1",
100+
"isStaging": false,
101+
"endpointUrl": "https://westus.api.cognitive.microsoft.com/luis/v2.0/apps/########-####-####-####-############",
102+
"region": "westus",
103+
"assignedEndpointKey": null,
104+
"endpointRegion": "westus",
105+
"failedRegions": "",
106+
"publishedDateTime": "2019-03-29T18:40:32Z",
107+
"directVersionPublish": false
108+
}
109+
```
110+
111+
To see how to create an LUIS Cognitive Service Resource in Azure, please see [the next README][README-LUIS]. This Resource should be used when you want to move your bot to production. The instructions will show you how to create and pair the resource with a LUIS Application.
112+
113+
[README-LUIS]: ./README-LUIS.md
114+
115+
___
116+
117+
## [How to create a LUIS Endpoint resource in Azure and pair it with a LUIS Application](#Table-of-Contents)
118+
119+
### 1. Create a new LUIS Cognitive Services resource on Azure via Azure CLI
120+
121+
> _Note:_ <br/>
122+
> _If you don't have a Resource Group in your Azure subscription, you can create one through the Azure portal or through using:_
123+
> ```bash
124+
> az group create --subscription "AzureSubscriptionGuid" --location "westus" --name "ResourceGroupName"
125+
> ```
126+
> _To see a list of valid locations, use `az account list-locations`_
127+
128+
129+
```bash
130+
# Use Azure CLI to create the LUIS Key resource on Azure
131+
az cognitiveservices account create --kind "luis" --name "NewLuisResourceName" --sku "S0" --location "westus" --subscription "AzureSubscriptionGuid" -g "ResourceGroupName"
132+
```
133+
134+
The command will output a response similar to the JSON below:
135+
136+
```json
137+
{
138+
"endpoint": "https://westus.api.cognitive.microsoft.com/luis/v2.0",
139+
"etag": "\"########-####-####-####-############\"",
140+
"id": "/subscriptions/########-####-####-####-############/resourceGroups/ResourceGroupName/providers/Microsoft.CognitiveServices/accounts/NewLuisResourceName",
141+
"internalId": "################################",
142+
"kind": "luis",
143+
"location": "westus",
144+
"name": "NewLuisResourceName",
145+
"provisioningState": "Succeeded",
146+
"resourceGroup": "ResourceGroupName",
147+
"sku": {
148+
"name": "S0",
149+
"tier": null
150+
},
151+
"tags": null,
152+
"type": "Microsoft.CognitiveServices/accounts"
153+
}
154+
```
155+
156+
157+
158+
Take the output from the previous command and create a JSON file in the following format:
159+
160+
```json
161+
{
162+
"azureSubscriptionId": "00000000-0000-0000-0000-000000000000",
163+
"resourceGroup": "ResourceGroupName",
164+
"accountName": "NewLuisResourceName"
165+
}
166+
```
167+
168+
### 2. Retrieve ARM access token via Azure CLI
169+
170+
```bash
171+
az account get-access-token --subscription "AzureSubscriptionGuid"
172+
```
173+
174+
This will return an object that looks like this:
175+
176+
```json
177+
{
178+
"accessToken": "eyJ0eXAiOiJKVtokentokentokentokentokeng1dCI6Ik4tbEMwbi05REFMcXdodUhZbkhRNjNHZUNYYyIsItokenI6Ik4tbEMwbi05REFMcXdodUhZbkhRNjNHZUNYYyJ9.eyJhdWQiOiJodHRwczovL21hbmFnZW1lbnQuY29yZS53aW5kb3dzLm5ldC8iLCJpc3MiOiJodHRwczovL3N0cy53aW5kb3dzLm5ldC83MmY5ODhiZi04NmYxLTQxYWYtOTFhYi0yZDdjZDAxMWRiNDcvIiwiaWF0IjoxNTUzODc3MTUwLCJuYmYiOjE1NTM4NzcxNTAsImV4cCI6MTU1Mzg4MTA1MCwiX2NsYWltX25hbWVzIjp7Imdyb3VwcyI6InNyYzEifSwiX2NsYWltX3NvdXJjZXMiOnsic3JjMSI6eyJlbmRwb2ludCI6Imh0dHBzOi8vZ3JhcGgud2luZG93cy5uZXQvNzJmOTg4YmYtODZmMS00MWFmLTkxYWItMmQ3Y2QwMTFkYjQ3L3VzZXJzL2ZmZTQyM2RkLWJhM2YtNDg0Ny04NjgyLWExNTI5MDA4MjM4Ny9nZXRNZW1iZXJPYmplY3RzIn19LCJhY3IiOiIxIiwiYWlvIjoiQVZRQXEvOEtBQUFBeGVUc201NDlhVHg4RE1mMFlRVnhGZmxxOE9RSC9PODR3QktuSmRqV1FqTkkwbmxLYzB0bHJEZzMyMFZ5bWZGaVVBSFBvNUFFUTNHL0FZNDRjdk01T3M0SEt0OVJkcE5JZW9WU0dzd0kvSkk9IiwiYW1yIjpbIndpYSIsIm1mYSJdLCJhcHBpZCI6IjA0YjA3Nzk1LThkZGItNDYxYS1iYmVlLTAyZjllMWJmN2I0NiIsImFwcGlkYWNyIjoiMCIsImRldmljZWlkIjoiNDhmNDVjNjEtMTg3Zi00MjUxLTlmZWItMTllZGFkZmMwMmE3IiwiZmFtaWx5X25hbWUiOiJHdW0iLCJnaXZlbl9uYW1lIjoiU3RldmVuIiwiaXBhZGRyIjoiMTY3LjIyMC4yLjU1IiwibmFtZSI6IlN0ZXZlbiBHdW0iLCJvaWQiOiJmZmU0MjNkZC1iYTNmLTQ4NDctODY4Mi1hMTUyOTAwODIzODciLCJvbnByZW1fc2lkIjoiUy0xLTUtMjEtMjEyNzUyMTE4NC0xNjA0MDEyOTIwLTE4ODc5Mjc1MjctMjYwOTgyODUiLCJwdWlkIjoiMTAwMzdGRkVBMDQ4NjlBNyIsInJoIjoiSSIsInNjcCI6InVzZXJfaW1wZXJzb25hdGlvbiIsInN1YiI6Ik1rMGRNMWszN0U5ckJyMjhieUhZYjZLSU85LXVFQVVkZFVhNWpkSUd1Nk0iLCJ0aWQiOiI3MmY5ODhiZi04NmYxLTQxYWYtOTFhYi0yZDdjZDAxMWRiNDciLCJ1bmlxdWVfbmFtZSI6InN0Z3VtQG1pY3Jvc29mdC5jb20iLCJ1cG4iOiJzdGd1bUBtaWNyb3NvZnQuY29tIiwidXRpIjoiT2w2NGN0TXY4RVNEQzZZQWRqRUFtokenInZlciI6IjEuMCJ9.kFAsEilE0mlS1pcpqxf4rEnRKeYsehyk-gz-zJHUrE__oad3QjgDSBDPrR_ikLdweynxbj86pgG4QFaHURNCeE6SzrbaIrNKw-n9jrEtokenlosOxg_0l2g1LeEUOi5Q4gQREAU_zvSbl-RY6sAadpOgNHtGvz3Rc6FZRITfkckSLmsKAOFoh-aWC6tFKG8P52rtB0qVVRz9tovBeNqkMYL49s9ypduygbXNVwSQhm5JszeWDgrFuVFHBUP_iENCQYGQpEZf_KvjmX1Ur1F9Eh9nb4yI2gFlKncKNsQl-tokenK7-tokentokentokentokentokentokenatoken",
179+
"expiresOn": "2200-12-31 23:59:59.999999",
180+
"subscription": "AzureSubscriptionGuid",
181+
"tenant": "tenant-guid",
182+
"tokenType": "Bearer"
183+
}
184+
```
185+
186+
The value needed for the next step is the `"accessToken"`.
187+
188+
### 3. Use `luis add appazureaccount` to pair your LUIS resource with a LUIS Application
189+
190+
```bash
191+
luis add appazureaccount --in "path/to/created/requestBody.json" --appId "LuisAppId" --authoringKey "LuisAuthoringKey" --armToken "accessToken"
192+
```
193+
194+
If successful, it should yield a response like this:
195+
196+
```json
197+
{
198+
"code": "Success",
199+
"message": "Operation Successful"
200+
}
201+
```
202+
203+
### 4. See the LUIS Cognitive Services' keys
204+
205+
```bash
206+
az cognitiveservices account keys list --name "NewLuisResourceName" --subscription "AzureSubscriptionGuid" -g "ResourceGroupName"
207+
```
208+
209+
This will return an object that looks like this:
210+
211+
```json
212+
{
213+
"key1": "9a69####dc8f####8eb4####399f####",
214+
"key2": "####f99e####4b1a####fb3b####6b9f"
215+
}
216+
```

samples/13.core-bot/README.md

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
# CoreBot
2+
3+
Bot Framework v4 core bot sample.
4+
5+
This bot has been created using [Bot Framework](https://dev.botframework.com), it shows how to:
6+
7+
- Use [LUIS](https://www.luis.ai) to implement core AI capabilities
8+
- Implement a multi-turn conversation using Dialogs
9+
- Handle user interruptions for such things as `Help` or `Cancel`
10+
- Prompt for and validate requests for information from the user
11+
12+
## Prerequisites
13+
14+
This sample **requires** prerequisites in order to run.
15+
16+
### Overview
17+
18+
This bot uses [LUIS](https://www.luis.ai), an AI based cognitive service, to implement language understanding.
19+
20+
### Create a LUIS Application to enable language understanding
21+
22+
The LUIS model for this example can be found under `cognitiveModels/FlightBooking.json` and the LUIS language model setup, training, and application configuration steps can be found [here](https://docs.microsoft.com/en-us/azure/bot-service/bot-builder-howto-v4-luis?view=azure-bot-service-4.0&tabs=cs).
23+
24+
Once you created the LUIS model, update `application.properties` with your `LuisAppId`, `LuisAPIKey` and `LuisAPIHostName`.
25+
26+
```
27+
LuisAppId="Your LUIS App Id"
28+
LuisAPIKey="Your LUIS Subscription key here"
29+
LuisAPIHostName="Your LUIS App region here (i.e: westus.api.cognitive.microsoft.com)"
30+
```
31+
32+
## To try this sample
33+
34+
- From the root of this project folder:
35+
- Build the sample using `mvn package`
36+
- Run it by using `java -jar .\target\bot-core-sample.jar`
37+
38+
## Testing the bot using Bot Framework Emulator
39+
40+
[Bot Framework Emulator](https://github.com/microsoft/botframework-emulator) is a desktop application that allows bot developers to test and debug their bots on localhost or running remotely through a tunnel.
41+
42+
- Install the latest Bot Framework Emulator from [here](https://github.com/Microsoft/BotFramework-Emulator/releases)
43+
44+
### Connect to the bot using Bot Framework Emulator
45+
46+
- Launch Bot Framework Emulator
47+
- File -> Open Bot
48+
- Enter a Bot URL of `http://localhost:3978/api/messages`
49+
50+
## Deploy the bot to Azure
51+
52+
To learn more about deploying a bot to Azure, see [Deploy your bot to Azure](https://aka.ms/azuredeployment) for a complete list of deployment instructions.
53+
54+
## Further reading
55+
56+
- [Bot Framework Documentation](https://docs.botframework.com)
57+
- [Bot Basics](https://docs.microsoft.com/azure/bot-service/bot-builder-basics?view=azure-bot-service-4.0)
58+
- [Dialogs](https://docs.microsoft.com/en-us/azure/bot-service/bot-builder-concept-dialog?view=azure-bot-service-4.0)
59+
- [Gathering Input Using Prompts](https://docs.microsoft.com/en-us/azure/bot-service/bot-builder-prompts?view=azure-bot-service-4.0&tabs=csharp)
60+
- [Activity processing](https://docs.microsoft.com/en-us/azure/bot-service/bot-builder-concept-activity-processing?view=azure-bot-service-4.0)
61+
- [Azure Bot Service Introduction](https://docs.microsoft.com/azure/bot-service/bot-service-overview-introduction?view=azure-bot-service-4.0)
62+
- [Azure Bot Service Documentation](https://docs.microsoft.com/azure/bot-service/?view=azure-bot-service-4.0)
63+
- [Azure CLI](https://docs.microsoft.com/cli/azure/?view=azure-cli-latest)
64+
- [Azure Portal](https://portal.azure.com)
65+
- [Language Understanding using LUIS](https://docs.microsoft.com/en-us/azure/cognitive-services/luis/)
66+
- [Channels and Bot Connector Service](https://docs.microsoft.com/en-us/azure/bot-service/bot-concepts?view=azure-bot-service-4.0)
67+
- [Spring Boot](https://spring.io/projects/spring-boot)

0 commit comments

Comments
 (0)